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: {} } > {}