diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c2b7131..7757f004 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
+## [0.58.4](https://github.com/carbon-design-system/carbon-components-svelte/releases/tag/v0.58.4) - 2022-02-21
+
+**Fixes**
+
+- dispatched events without a `detail` type should be `null` instead of `any`
+- `FileUploader` `clearFiles` description should reflect that it's an accessor, not a prop
+- `FileUploader` should correctly fire `add` and `remove` events
+- `FileUploader` files should not be keyed by file name
+- `FileUploader` change event detail signature should be `File[]`
+- fix `DataTable` regression where sort icon indicators don't update
+
+**Refactor**
+
+- remove unnecessary JSDoc default type notation
+
## [0.58.3](https://github.com/carbon-design-system/carbon-components-svelte/releases/tag/v0.58.3) - 2022-02-20
**Fixes**
diff --git a/COMPONENT_INDEX.md b/COMPONENT_INDEX.md
index 4d3a76ea..215ea50f 100644
--- a/COMPONENT_INDEX.md
+++ b/COMPONENT_INDEX.md
@@ -1,6 +1,6 @@
# Component Index
-> 172 components exported from carbon-components-svelte@0.58.3.
+> 172 components exported from carbon-components-svelte@0.58.4.
## Components
@@ -1864,9 +1864,9 @@ export interface HeaderSearchResult {
| Event name | Type | Detail |
| :--------- | :--------- | :---------------------------------------------------------------------------------------------- |
-| active | dispatched | any
|
-| inactive | dispatched | any
|
-| clear | dispatched | any
|
+| active | dispatched | null
|
+| inactive | dispatched | null
|
+| clear | dispatched | null
|
| select | dispatched | { value: string; selectedResultIndex: number; selectedResult: HeaderSearchResult }
|
| change | forwarded | -- |
| input | forwarded | -- |
@@ -1957,10 +1957,10 @@ None.
### Events
-| Event name | Type | Detail |
-| :--------- | :--------- | :--------------- |
-| load | dispatched | any
|
-| error | dispatched | any
|
+| Event name | Type | Detail |
+| :--------- | :--------- | :---------------- |
+| load | dispatched | null
|
+| error | dispatched | null
|
## `InlineLoading`
@@ -2275,7 +2275,7 @@ None.
| Event name | Type | Detail |
| :--------- | :--------- | :------------------------------------------- |
-| save | dispatched | any
|
+| save | dispatched | null
|
| update | dispatched | { prevValue: any; value: any; }
|
## `Modal`
@@ -2465,7 +2465,7 @@ None.
| :--------- | :--------- | :------------------------------------------------------------------------------------------------------------- |
| blur | dispatched | FocusEvent | CustomEvent
|
| select | dispatched | { selectedIds: MultiSelectItemId[]; selected: MultiSelectItem[]; unselected: MultiSelectItem[]; }
|
-| clear | dispatched | any
|
+| clear | dispatched | null
|
| keydown | forwarded | -- |
| keyup | forwarded | -- |
| focus | forwarded | -- |
@@ -3194,21 +3194,21 @@ None.
### Events
-| Event name | Type | Detail |
-| :--------- | :--------- | :--------------- |
-| expand | dispatched | any
|
-| collapse | dispatched | any
|
-| click | forwarded | -- |
-| mouseover | forwarded | -- |
-| mouseenter | forwarded | -- |
-| mouseleave | forwarded | -- |
-| change | forwarded | -- |
-| input | forwarded | -- |
-| focus | forwarded | -- |
-| blur | forwarded | -- |
-| keydown | forwarded | -- |
-| keyup | forwarded | -- |
-| clear | dispatched | -- |
+| Event name | Type | Detail |
+| :--------- | :--------- | :---------------- |
+| expand | dispatched | null
|
+| collapse | dispatched | null
|
+| click | forwarded | -- |
+| mouseover | forwarded | -- |
+| mouseenter | forwarded | -- |
+| mouseleave | forwarded | -- |
+| change | forwarded | -- |
+| input | forwarded | -- |
+| focus | forwarded | -- |
+| blur | forwarded | -- |
+| keydown | forwarded | -- |
+| keyup | forwarded | -- |
+| clear | dispatched | -- |
## `SearchSkeleton`
@@ -3384,11 +3384,11 @@ None.
### Events
-| Event name | Type | Detail |
-| :------------ | :--------- | :--------------- |
-| open | dispatched | any
|
-| close | dispatched | any
|
-| click:overlay | dispatched | any
|
+| Event name | Type | Detail |
+| :------------ | :--------- | :---------------- |
+| open | dispatched | null
|
+| close | dispatched | null
|
+| click:overlay | dispatched | null
|
## `SideNavDivider`
@@ -4680,12 +4680,12 @@ None.
### Events
-| Event name | Type | Detail |
-| :--------- | :--------- | :--------------- |
-| open | dispatched | any
|
-| close | dispatched | any
|
-| click | forwarded | -- |
-| mousedown | forwarded | -- |
+| Event name | Type | Detail |
+| :--------- | :--------- | :---------------- |
+| open | dispatched | null
|
+| close | dispatched | null
|
+| click | forwarded | -- |
+| mousedown | forwarded | -- |
## `TooltipDefinition`
@@ -4709,15 +4709,15 @@ None.
### Events
-| Event name | Type | Detail |
-| :--------- | :--------- | :--------------- |
-| open | dispatched | any
|
-| close | dispatched | any
|
-| click | forwarded | -- |
-| mouseover | forwarded | -- |
-| mouseenter | forwarded | -- |
-| mouseleave | forwarded | -- |
-| focus | forwarded | -- |
+| Event name | Type | Detail |
+| :--------- | :--------- | :---------------- |
+| open | dispatched | null
|
+| close | dispatched | null
|
+| click | forwarded | -- |
+| mouseover | forwarded | -- |
+| mouseenter | forwarded | -- |
+| mouseleave | forwarded | -- |
+| focus | forwarded | -- |
## `TooltipFooter`
diff --git a/docs/src/COMPONENT_API.json b/docs/src/COMPONENT_API.json
index 4202c869..b744a5ed 100644
--- a/docs/src/COMPONENT_API.json
+++ b/docs/src/COMPONENT_API.json
@@ -3503,7 +3503,7 @@
{
"name": "clearFiles",
"kind": "const",
- "description": "Override the default behavior of clearing the array of uploaded files",
+ "description": "Programmatically clear the uploaded files",
"type": "() => void",
"value": "() => { files = []; }",
"isFunction": true,
@@ -4926,9 +4926,9 @@
}
],
"events": [
- { "type": "dispatched", "name": "active", "detail": "any" },
- { "type": "dispatched", "name": "inactive", "detail": "any" },
- { "type": "dispatched", "name": "clear", "detail": "any" },
+ { "type": "dispatched", "name": "active", "detail": "null" },
+ { "type": "dispatched", "name": "inactive", "detail": "null" },
+ { "type": "dispatched", "name": "clear", "detail": "null" },
{
"type": "dispatched",
"name": "select",
@@ -5126,8 +5126,8 @@
{ "name": "loading", "default": false, "slot_props": "{}" }
],
"events": [
- { "type": "dispatched", "name": "load", "detail": "any" },
- { "type": "dispatched", "name": "error", "detail": "any" }
+ { "type": "dispatched", "name": "load", "detail": "null" },
+ { "type": "dispatched", "name": "error", "detail": "null" }
],
"typedefs": [],
"rest_props": { "type": "Element", "name": "img" }
@@ -5931,7 +5931,7 @@
],
"slots": [],
"events": [
- { "type": "dispatched", "name": "save", "detail": "any" },
+ { "type": "dispatched", "name": "save", "detail": "null" },
{
"type": "dispatched",
"name": "update",
@@ -6807,7 +6807,7 @@
"name": "select",
"detail": "{ selectedIds: MultiSelectItemId[]; selected: MultiSelectItem[]; unselected: MultiSelectItem[]; }"
},
- { "type": "dispatched", "name": "clear", "detail": "any" },
+ { "type": "dispatched", "name": "clear", "detail": "null" },
{ "type": "forwarded", "name": "keydown", "element": "input" },
{ "type": "forwarded", "name": "keyup", "element": "input" },
{ "type": "forwarded", "name": "focus", "element": "input" }
@@ -9272,8 +9272,8 @@
}
],
"events": [
- { "type": "dispatched", "name": "expand", "detail": "any" },
- { "type": "dispatched", "name": "collapse", "detail": "any" },
+ { "type": "dispatched", "name": "expand", "detail": "null" },
+ { "type": "dispatched", "name": "collapse", "detail": "null" },
{ "type": "forwarded", "name": "click", "element": "SearchSkeleton" },
{
"type": "forwarded",
@@ -9842,9 +9842,9 @@
],
"slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
"events": [
- { "type": "dispatched", "name": "open", "detail": "any" },
- { "type": "dispatched", "name": "close", "detail": "any" },
- { "type": "dispatched", "name": "click:overlay", "detail": "any" }
+ { "type": "dispatched", "name": "open", "detail": "null" },
+ { "type": "dispatched", "name": "close", "detail": "null" },
+ { "type": "dispatched", "name": "click:overlay", "detail": "null" }
],
"typedefs": [],
"rest_props": { "type": "Element", "name": "nav" }
@@ -13115,8 +13115,8 @@
}
],
"events": [
- { "type": "dispatched", "name": "open", "detail": "any" },
- { "type": "dispatched", "name": "close", "detail": "any" },
+ { "type": "dispatched", "name": "open", "detail": "null" },
+ { "type": "dispatched", "name": "close", "detail": "null" },
{ "type": "forwarded", "name": "click", "element": "div" },
{ "type": "forwarded", "name": "mousedown", "element": "div" }
],
@@ -13204,8 +13204,8 @@
}
],
"events": [
- { "type": "dispatched", "name": "open", "detail": "any" },
- { "type": "dispatched", "name": "close", "detail": "any" },
+ { "type": "dispatched", "name": "open", "detail": "null" },
+ { "type": "dispatched", "name": "close", "detail": "null" },
{ "type": "forwarded", "name": "click", "element": "button" },
{ "type": "forwarded", "name": "mouseover", "element": "button" },
{ "type": "forwarded", "name": "mouseenter", "element": "button" },
diff --git a/package.json b/package.json
index b708bff8..ee444890 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "carbon-components-svelte",
- "version": "0.58.3",
+ "version": "0.58.4",
"license": "Apache-2.0",
"description": "Svelte implementation of the Carbon Design System",
"svelte": "./src/index.js",
diff --git a/preprocess/api.json b/preprocess/api.json
index 3b7e7b1c..8c65fff1 100644
--- a/preprocess/api.json
+++ b/preprocess/api.json
@@ -1,5 +1,5 @@
{
- "version": "0.58.3",
+ "version": "0.58.4",
"components": {
"Accordion": {
"path": "carbon-components-svelte/src/Accordion/Accordion.svelte"
diff --git a/src/FileUploader/FileUploader.svelte b/src/FileUploader/FileUploader.svelte
index d9e9b10e..05930c09 100644
--- a/src/FileUploader/FileUploader.svelte
+++ b/src/FileUploader/FileUploader.svelte
@@ -27,7 +27,7 @@
export let multiple = false;
/**
- * Override the default behavior of clearing the array of uploaded files
+ * Programmatically clear the uploaded files
* @type {() => void}
*/
export const clearFiles = () => {
@@ -61,15 +61,28 @@
const dispatch = createEventDispatcher();
- $: prevFiles = [];
+ let prevFiles = [];
+
+ /** @type {(file: File) => string} */
+ const getFileId = (file) => file.lastModified + file.name;
afterUpdate(() => {
- if (files.length > prevFiles.length) {
- dispatch("add", files);
- } else {
+ const fileIds = files.map(getFileId);
+ const prevFileIds = prevFiles.map(getFileId);
+ const addedIds = fileIds.filter((_) => !prevFileIds.includes(_));
+ const removedIds = prevFileIds.filter((_) => !fileIds.includes(_));
+
+ if (addedIds.length > 0) {
+ dispatch(
+ "add",
+ addedIds.map((id) => files.find((file) => id === getFileId(file)))
+ );
+ }
+
+ if (removedIds.length > 0) {
dispatch(
"remove",
- prevFiles.filter((_) => !files.includes(_))
+ removedIds.map((id) => prevFiles.find((file) => id === getFileId(file)))
);
}
diff --git a/src/ImageLoader/ImageLoader.svelte b/src/ImageLoader/ImageLoader.svelte
index 5835fd8a..a91d3f13 100644
--- a/src/ImageLoader/ImageLoader.svelte
+++ b/src/ImageLoader/ImageLoader.svelte
@@ -1,7 +1,7 @@
diff --git a/types/FileUploader/FileUploader.svelte.d.ts b/types/FileUploader/FileUploader.svelte.d.ts
index 0484afc6..39366c2d 100644
--- a/types/FileUploader/FileUploader.svelte.d.ts
+++ b/types/FileUploader/FileUploader.svelte.d.ts
@@ -79,7 +79,7 @@ export default class FileUploader extends SvelteComponentTyped<
{}
> {
/**
- * Override the default behavior of clearing the array of uploaded files
+ * Programmatically clear the uploaded files
*/
clearFiles: () => void;
}
diff --git a/types/ImageLoader/ImageLoader.svelte.d.ts b/types/ImageLoader/ImageLoader.svelte.d.ts
index 03d01b24..5c774e40 100644
--- a/types/ImageLoader/ImageLoader.svelte.d.ts
+++ b/types/ImageLoader/ImageLoader.svelte.d.ts
@@ -49,7 +49,7 @@ export interface ImageLoaderProps
export default class ImageLoader extends SvelteComponentTyped<
ImageLoaderProps,
- { load: CustomEvent; error: CustomEvent },
+ { load: CustomEvent; error: CustomEvent },
{ error: {}; loading: {} }
> {
/**
diff --git a/types/LocalStorage/LocalStorage.svelte.d.ts b/types/LocalStorage/LocalStorage.svelte.d.ts
index ec734e15..03fdb83b 100644
--- a/types/LocalStorage/LocalStorage.svelte.d.ts
+++ b/types/LocalStorage/LocalStorage.svelte.d.ts
@@ -18,7 +18,7 @@ export interface LocalStorageProps {
export default class LocalStorage extends SvelteComponentTyped<
LocalStorageProps,
{
- save: CustomEvent;
+ save: CustomEvent;
update: CustomEvent<{ prevValue: any; value: any }>;
},
{}
diff --git a/types/MultiSelect/MultiSelect.svelte.d.ts b/types/MultiSelect/MultiSelect.svelte.d.ts
index c15df2c1..fee3cc7d 100644
--- a/types/MultiSelect/MultiSelect.svelte.d.ts
+++ b/types/MultiSelect/MultiSelect.svelte.d.ts
@@ -228,7 +228,7 @@ export default class MultiSelect extends SvelteComponentTyped<
selected: MultiSelectItem[];
unselected: MultiSelectItem[];
}>;
- clear: CustomEvent;
+ clear: CustomEvent;
keydown: WindowEventMap["keydown"];
keyup: WindowEventMap["keyup"];
focus: WindowEventMap["focus"];
diff --git a/types/Search/Search.svelte.d.ts b/types/Search/Search.svelte.d.ts
index ade7a549..c340ae05 100644
--- a/types/Search/Search.svelte.d.ts
+++ b/types/Search/Search.svelte.d.ts
@@ -113,8 +113,8 @@ export interface SearchProps {
export default class Search extends SvelteComponentTyped<
SearchProps,
{
- expand: CustomEvent;
- collapse: CustomEvent;
+ expand: CustomEvent;
+ collapse: CustomEvent;
click: WindowEventMap["click"];
mouseover: WindowEventMap["mouseover"];
mouseenter: WindowEventMap["mouseenter"];
diff --git a/types/Tooltip/Tooltip.svelte.d.ts b/types/Tooltip/Tooltip.svelte.d.ts
index 0e1fe782..7baf7cb0 100644
--- a/types/Tooltip/Tooltip.svelte.d.ts
+++ b/types/Tooltip/Tooltip.svelte.d.ts
@@ -92,8 +92,8 @@ export interface TooltipProps
export default class Tooltip extends SvelteComponentTyped<
TooltipProps,
{
- open: CustomEvent;
- close: CustomEvent;
+ open: CustomEvent;
+ close: CustomEvent;
click: WindowEventMap["click"];
mousedown: WindowEventMap["mousedown"];
},
diff --git a/types/TooltipDefinition/TooltipDefinition.svelte.d.ts b/types/TooltipDefinition/TooltipDefinition.svelte.d.ts
index e90112a2..f28fc677 100644
--- a/types/TooltipDefinition/TooltipDefinition.svelte.d.ts
+++ b/types/TooltipDefinition/TooltipDefinition.svelte.d.ts
@@ -43,8 +43,8 @@ export interface TooltipDefinitionProps
export default class TooltipDefinition extends SvelteComponentTyped<
TooltipDefinitionProps,
{
- open: CustomEvent;
- close: CustomEvent;
+ open: CustomEvent;
+ close: CustomEvent;
click: WindowEventMap["click"];
mouseover: WindowEventMap["mouseover"];
mouseenter: WindowEventMap["mouseenter"];
diff --git a/types/UIShell/HeaderSearch.svelte.d.ts b/types/UIShell/HeaderSearch.svelte.d.ts
index a0759a45..21f1e9b3 100644
--- a/types/UIShell/HeaderSearch.svelte.d.ts
+++ b/types/UIShell/HeaderSearch.svelte.d.ts
@@ -43,9 +43,9 @@ export interface HeaderSearchProps
export default class HeaderSearch extends SvelteComponentTyped<
HeaderSearchProps,
{
- active: CustomEvent;
- inactive: CustomEvent;
- clear: CustomEvent;
+ active: CustomEvent;
+ inactive: CustomEvent;
+ clear: CustomEvent;
select: CustomEvent<{
value: string;
selectedResultIndex: number;
diff --git a/types/UIShell/SideNav/SideNav.svelte.d.ts b/types/UIShell/SideNav/SideNav.svelte.d.ts
index 39a5716c..6e27c28e 100644
--- a/types/UIShell/SideNav/SideNav.svelte.d.ts
+++ b/types/UIShell/SideNav/SideNav.svelte.d.ts
@@ -43,9 +43,9 @@ export interface SideNavProps
export default class SideNav extends SvelteComponentTyped<
SideNavProps,
{
- open: CustomEvent;
- close: CustomEvent;
- ["click:overlay"]: CustomEvent;
+ open: CustomEvent;
+ close: CustomEvent;
+ ["click:overlay"]: CustomEvent;
},
{ default: {} }
> {}