@cloudscape-design/components 3.0.767 → 3.0.768

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  export var PACKAGE_SOURCE = "components";
2
- export var PACKAGE_VERSION = "3.0.0 (f77dff08)";
2
+ export var PACKAGE_VERSION = "3.0.0 (2a3f5ab5)";
3
3
  export var THEME = "open-source-visual-refresh";
4
4
  export var ALWAYS_VISUAL_REFRESH = true;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "PACKAGE_SOURCE": "components",
3
- "PACKAGE_VERSION": "3.0.0 (f77dff08)",
3
+ "PACKAGE_VERSION": "3.0.0 (2a3f5ab5)",
4
4
  "THEME": "default",
5
5
  "ALWAYS_VISUAL_REFRESH": false
6
6
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "commit": "f77dff08079077d36b781a0d9f8954a64cc79e71"
2
+ "commit": "2a3f5ab51679cf881e5dceaac380ce5e9127720a"
3
3
  }
package/package.json CHANGED
@@ -126,7 +126,7 @@
126
126
  "./internal/base-component/index.js",
127
127
  "./internal/base-component/styles.css.js"
128
128
  ],
129
- "version": "3.0.767",
129
+ "version": "3.0.768",
130
130
  "repository": {
131
131
  "type": "git",
132
132
  "url": "https://github.com/cloudscape-design/components.git"
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { TagEditorProps } from './interfaces';
3
- export { TagEditorProps };
3
+ import { getTagsDiff } from './utils';
4
+ export { TagEditorProps, getTagsDiff };
4
5
  declare const TagEditor: React.ForwardRefExoticComponent<TagEditorProps & React.RefAttributes<TagEditorProps.Ref>>;
5
6
  export default TagEditor;
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tag-editor/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAkBlG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAS1B,QAAA,MAAM,SAAS,2FAoSd,CAAC;AAGF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tag-editor/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAkBlG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AASvC,QAAA,MAAM,SAAS,2FAoSd,CAAC;AAGF,eAAe,SAAS,CAAC"}
@@ -16,8 +16,10 @@ import { applyDisplayName } from '../internal/utils/apply-display-name';
16
16
  import InternalStatusIndicator from '../status-indicator/internal';
17
17
  import { TagControl, UndoButton } from './internal';
18
18
  import { findIndex, useMemoizedArray } from './utils';
19
+ import { getTagsDiff } from './utils';
19
20
  import { validate } from './validation';
20
21
  import styles from './styles.css.js';
22
+ export { getTagsDiff };
21
23
  const isItemRemovable = ({ tag }) => !tag.markedForRemoval;
22
24
  const TagEditor = React.forwardRef((_a, ref) => {
23
25
  var _b, _c, _d, _e, _f, _g;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tag-editor/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useCallback, useImperativeHandle, useLayoutEffect, useMemo, useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\n\nimport { AttributeEditorProps } from '../attribute-editor/interfaces';\nimport InternalAttributeEditor from '../attribute-editor/internal';\nimport { AutosuggestProps } from '../autosuggest/interfaces';\nimport InternalBox from '../box/internal';\nimport { FormFieldError } from '../form-field/internal';\nimport { useInternalI18n } from '../i18n/context';\nimport { InputProps } from '../input/interfaces';\nimport { getBaseProps } from '../internal/base-component';\nimport LiveRegion from '../internal/components/live-region';\nimport { fireNonCancelableEvent, NonCancelableCustomEvent } from '../internal/events';\nimport useBaseComponent from '../internal/hooks/use-base-component';\nimport { applyDisplayName } from '../internal/utils/apply-display-name';\nimport InternalStatusIndicator from '../status-indicator/internal';\nimport { TagEditorProps } from './interfaces';\nimport { TagControl, UndoButton } from './internal';\nimport { findIndex, useMemoizedArray } from './utils';\nimport { validate, ValidationError } from './validation';\n\nimport styles from './styles.css.js';\n\nexport { TagEditorProps };\n\ninterface InternalTag {\n tag: TagEditorProps.Tag;\n error?: ValidationError;\n}\n\nconst isItemRemovable = ({ tag }: InternalTag) => !tag.markedForRemoval;\n\nconst TagEditor = React.forwardRef(\n (\n {\n tags = [],\n i18nStrings,\n loading = false,\n tagLimit = 50,\n allowedCharacterPattern,\n keysRequest,\n valuesRequest,\n onChange,\n ...restProps\n }: TagEditorProps,\n ref: React.Ref<TagEditorProps.Ref>\n ) => {\n const baseComponentProps = useBaseComponent('TagEditor', {\n props: { tagLimit, allowedCharacterPattern },\n });\n const i18n = useInternalI18n('tag-editor');\n\n const remainingTags = tagLimit - tags.filter(tag => !tag.markedForRemoval).length;\n\n const attributeEditorRef = useRef<AttributeEditorProps.Ref>(null);\n const keyInputRefs = useRef<(InputProps.Ref | undefined | null)[]>([]);\n const valueInputRefs = useRef<(InputProps.Ref | undefined | null)[]>([]);\n const undoButtonRefs = useRef<(HTMLAnchorElement | undefined | null)[]>([]);\n\n const initialKeyOptionsRef = useRef<AutosuggestProps.Options>([]);\n const keyDirtyStateRef = useRef<boolean[]>([]);\n const focusEventRef = useRef<() => void>();\n\n useLayoutEffect(() => {\n focusEventRef.current?.apply(undefined);\n focusEventRef.current = undefined;\n });\n\n const errors = validate(\n tags,\n keyDirtyStateRef.current,\n i18n,\n i18nStrings,\n allowedCharacterPattern ? new RegExp(allowedCharacterPattern) : undefined\n );\n\n const internalTags = useMemoizedArray(\n tags.map((tag, i) => ({ tag, error: errors[i] })),\n (prev, next) => {\n return prev.tag === next.tag && prev.error?.key === next.error?.key && prev.error?.value === next.error?.value;\n }\n );\n\n useImperativeHandle(\n ref,\n () => ({\n focus() {\n const errorIndex = findIndex(internalTags, ({ error }) => error?.key || error?.value);\n if (errorIndex !== -1) {\n const refArray = internalTags[errorIndex].error?.key ? keyInputRefs : valueInputRefs;\n refArray.current[errorIndex]?.focus();\n }\n },\n }),\n [internalTags]\n );\n\n const validateAndFire = useCallback(\n (newTags: ReadonlyArray<TagEditorProps.Tag>) => {\n fireNonCancelableEvent(onChange, {\n tags: newTags,\n valid: !validate(\n newTags,\n keyDirtyStateRef.current,\n i18n,\n i18nStrings,\n allowedCharacterPattern ? new RegExp(allowedCharacterPattern) : undefined\n ).some(error => error),\n });\n },\n [onChange, i18n, i18nStrings, allowedCharacterPattern]\n );\n\n const onAddButtonClick = () => {\n validateAndFire([...tags, { key: '', value: '', existing: false }]);\n focusEventRef.current = () => {\n keyInputRefs.current[tags.length]?.focus();\n };\n };\n\n const onRemoveButtonClick = useStableCallback(\n ({ detail }: NonCancelableCustomEvent<AttributeEditorProps.RemoveButtonClickDetail>) => {\n const existing = tags[detail.itemIndex].existing;\n validateAndFire([\n ...tags.slice(0, detail.itemIndex),\n ...(existing ? [{ ...tags[detail.itemIndex], markedForRemoval: true }] : []),\n ...tags.slice(detail.itemIndex + 1),\n ]);\n if (existing) {\n focusEventRef.current = () => {\n undoButtonRefs.current[detail.itemIndex]?.focus();\n };\n } else {\n keyDirtyStateRef.current.splice(detail.itemIndex, 1);\n const nextKey = keyInputRefs.current[detail.itemIndex + 1];\n if (nextKey) {\n // if next key is present, focus _current_ key which will be replaced by next after state update\n keyInputRefs.current[detail.itemIndex]?.focus();\n } else if (detail.itemIndex > 0) {\n // otherwise focus previous key/value/undo button\n const previousIsExisting = tags[detail.itemIndex - 1].existing;\n if (previousIsExisting) {\n if (tags[detail.itemIndex - 1].markedForRemoval) {\n undoButtonRefs.current[detail.itemIndex - 1]?.focus();\n } else {\n valueInputRefs.current[detail.itemIndex - 1]?.focus();\n }\n } else {\n keyInputRefs.current[detail.itemIndex - 1]?.focus();\n }\n } else {\n // or the 'add' button\n attributeEditorRef.current?.focusAddButton();\n }\n }\n }\n );\n\n const onKeyChange = useStableCallback((value: string, row: number) => {\n keyDirtyStateRef.current[row] = true;\n validateAndFire([...tags.slice(0, row), { ...tags[row], key: value }, ...tags.slice(row + 1)]);\n });\n\n const onKeyBlur = useStableCallback((row: number) => {\n keyDirtyStateRef.current[row] = true;\n // Force re-render by providing a new array reference\n validateAndFire([...tags]);\n });\n\n const onValueChange = useStableCallback((value: string, row: number) => {\n validateAndFire([...tags.slice(0, row), { ...tags[row], value }, ...tags.slice(row + 1)]);\n });\n\n const onUndoRemoval = useStableCallback((row: number) => {\n validateAndFire([...tags.slice(0, row), { ...tags[row], markedForRemoval: false }, ...tags.slice(row + 1)]);\n focusEventRef.current = () => {\n attributeEditorRef.current?.focusRemoveButton(row);\n };\n });\n\n const definition = useMemo(\n () => [\n {\n label: i18n('i18nStrings.keyHeader', i18nStrings?.keyHeader),\n control: ({ tag }: InternalTag, row: number) => (\n <TagControl\n row={row}\n value={tag.key}\n readOnly={tag.existing}\n limit={200}\n defaultOptions={[]}\n placeholder={i18n('i18nStrings.keyPlaceholder', i18nStrings?.keyPlaceholder)}\n errorText={i18n('i18nStrings.keysSuggestionError', i18nStrings?.keysSuggestionError)}\n loadingText={i18n('i18nStrings.keysSuggestionLoading', i18nStrings?.keysSuggestionLoading)}\n suggestionText={i18n('i18nStrings.keySuggestion', i18nStrings?.keySuggestion)}\n tooManySuggestionText={i18n('i18nStrings.tooManyKeysSuggestion', i18nStrings?.tooManyKeysSuggestion)}\n enteredTextLabel={i18nStrings?.enteredKeyLabel}\n clearAriaLabel={i18nStrings?.clearAriaLabel}\n onRequest={keysRequest}\n onChange={onKeyChange}\n onBlur={onKeyBlur}\n initialOptionsRef={initialKeyOptionsRef}\n ref={ref => {\n keyInputRefs.current[row] = ref;\n }}\n />\n ),\n errorText: ({ error }: InternalTag) => error?.key,\n },\n {\n label: (\n <span>\n {i18n('i18nStrings.valueHeader', i18nStrings?.valueHeader)} -{' '}\n <i>{i18n('i18nStrings.optional', i18nStrings?.optional)}</i>\n </span>\n ),\n control: ({ tag }: InternalTag, row: number) =>\n tag.markedForRemoval ? (\n <div role=\"alert\">\n <InternalBox margin={{ top: 'xxs' }}>\n {i18n('i18nStrings.undoPrompt', i18nStrings?.undoPrompt)}{' '}\n <UndoButton\n onClick={() => onUndoRemoval(row)}\n ref={elem => {\n undoButtonRefs.current[row] = elem;\n }}\n >\n {i18n('i18nStrings.undoButton', i18nStrings?.undoButton)}\n </UndoButton>\n </InternalBox>\n </div>\n ) : (\n <TagControl\n row={row}\n value={tag.value}\n readOnly={false}\n limit={200}\n defaultOptions={tag.valueSuggestionOptions ?? []}\n placeholder={i18n('i18nStrings.valuePlaceholder', i18nStrings?.valuePlaceholder)}\n errorText={i18n('i18nStrings.valuesSuggestionError', i18nStrings?.valuesSuggestionError)}\n loadingText={i18n('i18nStrings.valuesSuggestionLoading', i18nStrings?.valuesSuggestionLoading)}\n suggestionText={i18n('i18nStrings.valueSuggestion', i18nStrings?.valueSuggestion)}\n tooManySuggestionText={i18n(\n 'i18nStrings.tooManyValuesSuggestion',\n i18nStrings?.tooManyValuesSuggestion\n )}\n enteredTextLabel={i18nStrings?.enteredValueLabel}\n clearAriaLabel={i18nStrings?.clearAriaLabel}\n filteringKey={tag.key}\n onRequest={valuesRequest && (value => valuesRequest(tag.key, value))}\n onChange={onValueChange}\n ref={ref => {\n valueInputRefs.current[row] = ref;\n }}\n />\n ),\n errorText: ({ error }: InternalTag) => error?.value,\n },\n ],\n [i18n, i18nStrings, keysRequest, onKeyChange, onKeyBlur, valuesRequest, onValueChange, onUndoRemoval]\n );\n\n const forwardedI18nStrings = useMemo<AttributeEditorProps.I18nStrings<InternalTag>>(\n () => ({\n errorIconAriaLabel: i18nStrings?.errorIconAriaLabel,\n itemRemovedAriaLive: i18nStrings?.itemRemovedAriaLive,\n removeButtonAriaLabel: i18n(\n 'i18nStrings.removeButtonAriaLabel',\n i18nStrings?.removeButtonAriaLabel && (({ tag }) => i18nStrings.removeButtonAriaLabel!(tag)),\n format =>\n ({ tag }) =>\n format({ tag__key: tag.key })\n ),\n }),\n [i18nStrings, i18n]\n );\n\n if (loading) {\n return (\n <div className={styles.root} ref={baseComponentProps.__internalRootRef}>\n <InternalStatusIndicator className={styles.loading} type=\"loading\">\n <LiveRegion visible={true}>{i18n('i18nStrings.loading', i18nStrings?.loading)}</LiveRegion>\n </InternalStatusIndicator>\n </div>\n );\n }\n\n const baseProps = getBaseProps(restProps);\n return (\n <InternalAttributeEditor<InternalTag>\n {...baseProps}\n {...baseComponentProps}\n ref={attributeEditorRef}\n className={clsx(styles.root, baseProps.className)}\n items={internalTags}\n isItemRemovable={isItemRemovable}\n onAddButtonClick={onAddButtonClick}\n onRemoveButtonClick={onRemoveButtonClick}\n addButtonText={i18n('i18nStrings.addButton', i18nStrings?.addButton) ?? ''}\n removeButtonText={i18nStrings?.removeButton}\n disableAddButton={remainingTags <= 0}\n empty={i18n('i18nStrings.emptyTags', i18nStrings?.emptyTags)}\n additionalInfo={\n remainingTags < 0 ? (\n <FormFieldError errorIconAriaLabel={i18nStrings?.errorIconAriaLabel}>\n {i18n('i18nStrings.tagLimitExceeded', i18nStrings?.tagLimitExceeded?.(tagLimit), format =>\n format({ tagLimit })\n ) ?? ''}\n </FormFieldError>\n ) : remainingTags === 0 ? (\n i18n('i18nStrings.tagLimitReached', i18nStrings?.tagLimitReached?.(tagLimit), format =>\n format({ tagLimit })\n ) ?? ''\n ) : (\n i18n('i18nStrings.tagLimit', i18nStrings?.tagLimit?.(remainingTags, tagLimit), format =>\n format({ tagLimitAvailable: `${remainingTags === tagLimit}`, availableTags: remainingTags, tagLimit })\n )\n )\n }\n definition={definition}\n i18nStrings={forwardedI18nStrings}\n />\n );\n }\n);\n\napplyDisplayName(TagEditor, 'TagEditor');\nexport default TagEditor;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tag-editor/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useCallback, useImperativeHandle, useLayoutEffect, useMemo, useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\n\nimport { AttributeEditorProps } from '../attribute-editor/interfaces';\nimport InternalAttributeEditor from '../attribute-editor/internal';\nimport { AutosuggestProps } from '../autosuggest/interfaces';\nimport InternalBox from '../box/internal';\nimport { FormFieldError } from '../form-field/internal';\nimport { useInternalI18n } from '../i18n/context';\nimport { InputProps } from '../input/interfaces';\nimport { getBaseProps } from '../internal/base-component';\nimport LiveRegion from '../internal/components/live-region';\nimport { fireNonCancelableEvent, NonCancelableCustomEvent } from '../internal/events';\nimport useBaseComponent from '../internal/hooks/use-base-component';\nimport { applyDisplayName } from '../internal/utils/apply-display-name';\nimport InternalStatusIndicator from '../status-indicator/internal';\nimport { TagEditorProps } from './interfaces';\nimport { TagControl, UndoButton } from './internal';\nimport { findIndex, useMemoizedArray } from './utils';\nimport { getTagsDiff } from './utils';\nimport { validate, ValidationError } from './validation';\n\nimport styles from './styles.css.js';\n\nexport { TagEditorProps, getTagsDiff };\n\ninterface InternalTag {\n tag: TagEditorProps.Tag;\n error?: ValidationError;\n}\n\nconst isItemRemovable = ({ tag }: InternalTag) => !tag.markedForRemoval;\n\nconst TagEditor = React.forwardRef(\n (\n {\n tags = [],\n i18nStrings,\n loading = false,\n tagLimit = 50,\n allowedCharacterPattern,\n keysRequest,\n valuesRequest,\n onChange,\n ...restProps\n }: TagEditorProps,\n ref: React.Ref<TagEditorProps.Ref>\n ) => {\n const baseComponentProps = useBaseComponent('TagEditor', {\n props: { tagLimit, allowedCharacterPattern },\n });\n const i18n = useInternalI18n('tag-editor');\n\n const remainingTags = tagLimit - tags.filter(tag => !tag.markedForRemoval).length;\n\n const attributeEditorRef = useRef<AttributeEditorProps.Ref>(null);\n const keyInputRefs = useRef<(InputProps.Ref | undefined | null)[]>([]);\n const valueInputRefs = useRef<(InputProps.Ref | undefined | null)[]>([]);\n const undoButtonRefs = useRef<(HTMLAnchorElement | undefined | null)[]>([]);\n\n const initialKeyOptionsRef = useRef<AutosuggestProps.Options>([]);\n const keyDirtyStateRef = useRef<boolean[]>([]);\n const focusEventRef = useRef<() => void>();\n\n useLayoutEffect(() => {\n focusEventRef.current?.apply(undefined);\n focusEventRef.current = undefined;\n });\n\n const errors = validate(\n tags,\n keyDirtyStateRef.current,\n i18n,\n i18nStrings,\n allowedCharacterPattern ? new RegExp(allowedCharacterPattern) : undefined\n );\n\n const internalTags = useMemoizedArray(\n tags.map((tag, i) => ({ tag, error: errors[i] })),\n (prev, next) => {\n return prev.tag === next.tag && prev.error?.key === next.error?.key && prev.error?.value === next.error?.value;\n }\n );\n\n useImperativeHandle(\n ref,\n () => ({\n focus() {\n const errorIndex = findIndex(internalTags, ({ error }) => error?.key || error?.value);\n if (errorIndex !== -1) {\n const refArray = internalTags[errorIndex].error?.key ? keyInputRefs : valueInputRefs;\n refArray.current[errorIndex]?.focus();\n }\n },\n }),\n [internalTags]\n );\n\n const validateAndFire = useCallback(\n (newTags: ReadonlyArray<TagEditorProps.Tag>) => {\n fireNonCancelableEvent(onChange, {\n tags: newTags,\n valid: !validate(\n newTags,\n keyDirtyStateRef.current,\n i18n,\n i18nStrings,\n allowedCharacterPattern ? new RegExp(allowedCharacterPattern) : undefined\n ).some(error => error),\n });\n },\n [onChange, i18n, i18nStrings, allowedCharacterPattern]\n );\n\n const onAddButtonClick = () => {\n validateAndFire([...tags, { key: '', value: '', existing: false }]);\n focusEventRef.current = () => {\n keyInputRefs.current[tags.length]?.focus();\n };\n };\n\n const onRemoveButtonClick = useStableCallback(\n ({ detail }: NonCancelableCustomEvent<AttributeEditorProps.RemoveButtonClickDetail>) => {\n const existing = tags[detail.itemIndex].existing;\n validateAndFire([\n ...tags.slice(0, detail.itemIndex),\n ...(existing ? [{ ...tags[detail.itemIndex], markedForRemoval: true }] : []),\n ...tags.slice(detail.itemIndex + 1),\n ]);\n if (existing) {\n focusEventRef.current = () => {\n undoButtonRefs.current[detail.itemIndex]?.focus();\n };\n } else {\n keyDirtyStateRef.current.splice(detail.itemIndex, 1);\n const nextKey = keyInputRefs.current[detail.itemIndex + 1];\n if (nextKey) {\n // if next key is present, focus _current_ key which will be replaced by next after state update\n keyInputRefs.current[detail.itemIndex]?.focus();\n } else if (detail.itemIndex > 0) {\n // otherwise focus previous key/value/undo button\n const previousIsExisting = tags[detail.itemIndex - 1].existing;\n if (previousIsExisting) {\n if (tags[detail.itemIndex - 1].markedForRemoval) {\n undoButtonRefs.current[detail.itemIndex - 1]?.focus();\n } else {\n valueInputRefs.current[detail.itemIndex - 1]?.focus();\n }\n } else {\n keyInputRefs.current[detail.itemIndex - 1]?.focus();\n }\n } else {\n // or the 'add' button\n attributeEditorRef.current?.focusAddButton();\n }\n }\n }\n );\n\n const onKeyChange = useStableCallback((value: string, row: number) => {\n keyDirtyStateRef.current[row] = true;\n validateAndFire([...tags.slice(0, row), { ...tags[row], key: value }, ...tags.slice(row + 1)]);\n });\n\n const onKeyBlur = useStableCallback((row: number) => {\n keyDirtyStateRef.current[row] = true;\n // Force re-render by providing a new array reference\n validateAndFire([...tags]);\n });\n\n const onValueChange = useStableCallback((value: string, row: number) => {\n validateAndFire([...tags.slice(0, row), { ...tags[row], value }, ...tags.slice(row + 1)]);\n });\n\n const onUndoRemoval = useStableCallback((row: number) => {\n validateAndFire([...tags.slice(0, row), { ...tags[row], markedForRemoval: false }, ...tags.slice(row + 1)]);\n focusEventRef.current = () => {\n attributeEditorRef.current?.focusRemoveButton(row);\n };\n });\n\n const definition = useMemo(\n () => [\n {\n label: i18n('i18nStrings.keyHeader', i18nStrings?.keyHeader),\n control: ({ tag }: InternalTag, row: number) => (\n <TagControl\n row={row}\n value={tag.key}\n readOnly={tag.existing}\n limit={200}\n defaultOptions={[]}\n placeholder={i18n('i18nStrings.keyPlaceholder', i18nStrings?.keyPlaceholder)}\n errorText={i18n('i18nStrings.keysSuggestionError', i18nStrings?.keysSuggestionError)}\n loadingText={i18n('i18nStrings.keysSuggestionLoading', i18nStrings?.keysSuggestionLoading)}\n suggestionText={i18n('i18nStrings.keySuggestion', i18nStrings?.keySuggestion)}\n tooManySuggestionText={i18n('i18nStrings.tooManyKeysSuggestion', i18nStrings?.tooManyKeysSuggestion)}\n enteredTextLabel={i18nStrings?.enteredKeyLabel}\n clearAriaLabel={i18nStrings?.clearAriaLabel}\n onRequest={keysRequest}\n onChange={onKeyChange}\n onBlur={onKeyBlur}\n initialOptionsRef={initialKeyOptionsRef}\n ref={ref => {\n keyInputRefs.current[row] = ref;\n }}\n />\n ),\n errorText: ({ error }: InternalTag) => error?.key,\n },\n {\n label: (\n <span>\n {i18n('i18nStrings.valueHeader', i18nStrings?.valueHeader)} -{' '}\n <i>{i18n('i18nStrings.optional', i18nStrings?.optional)}</i>\n </span>\n ),\n control: ({ tag }: InternalTag, row: number) =>\n tag.markedForRemoval ? (\n <div role=\"alert\">\n <InternalBox margin={{ top: 'xxs' }}>\n {i18n('i18nStrings.undoPrompt', i18nStrings?.undoPrompt)}{' '}\n <UndoButton\n onClick={() => onUndoRemoval(row)}\n ref={elem => {\n undoButtonRefs.current[row] = elem;\n }}\n >\n {i18n('i18nStrings.undoButton', i18nStrings?.undoButton)}\n </UndoButton>\n </InternalBox>\n </div>\n ) : (\n <TagControl\n row={row}\n value={tag.value}\n readOnly={false}\n limit={200}\n defaultOptions={tag.valueSuggestionOptions ?? []}\n placeholder={i18n('i18nStrings.valuePlaceholder', i18nStrings?.valuePlaceholder)}\n errorText={i18n('i18nStrings.valuesSuggestionError', i18nStrings?.valuesSuggestionError)}\n loadingText={i18n('i18nStrings.valuesSuggestionLoading', i18nStrings?.valuesSuggestionLoading)}\n suggestionText={i18n('i18nStrings.valueSuggestion', i18nStrings?.valueSuggestion)}\n tooManySuggestionText={i18n(\n 'i18nStrings.tooManyValuesSuggestion',\n i18nStrings?.tooManyValuesSuggestion\n )}\n enteredTextLabel={i18nStrings?.enteredValueLabel}\n clearAriaLabel={i18nStrings?.clearAriaLabel}\n filteringKey={tag.key}\n onRequest={valuesRequest && (value => valuesRequest(tag.key, value))}\n onChange={onValueChange}\n ref={ref => {\n valueInputRefs.current[row] = ref;\n }}\n />\n ),\n errorText: ({ error }: InternalTag) => error?.value,\n },\n ],\n [i18n, i18nStrings, keysRequest, onKeyChange, onKeyBlur, valuesRequest, onValueChange, onUndoRemoval]\n );\n\n const forwardedI18nStrings = useMemo<AttributeEditorProps.I18nStrings<InternalTag>>(\n () => ({\n errorIconAriaLabel: i18nStrings?.errorIconAriaLabel,\n itemRemovedAriaLive: i18nStrings?.itemRemovedAriaLive,\n removeButtonAriaLabel: i18n(\n 'i18nStrings.removeButtonAriaLabel',\n i18nStrings?.removeButtonAriaLabel && (({ tag }) => i18nStrings.removeButtonAriaLabel!(tag)),\n format =>\n ({ tag }) =>\n format({ tag__key: tag.key })\n ),\n }),\n [i18nStrings, i18n]\n );\n\n if (loading) {\n return (\n <div className={styles.root} ref={baseComponentProps.__internalRootRef}>\n <InternalStatusIndicator className={styles.loading} type=\"loading\">\n <LiveRegion visible={true}>{i18n('i18nStrings.loading', i18nStrings?.loading)}</LiveRegion>\n </InternalStatusIndicator>\n </div>\n );\n }\n\n const baseProps = getBaseProps(restProps);\n return (\n <InternalAttributeEditor<InternalTag>\n {...baseProps}\n {...baseComponentProps}\n ref={attributeEditorRef}\n className={clsx(styles.root, baseProps.className)}\n items={internalTags}\n isItemRemovable={isItemRemovable}\n onAddButtonClick={onAddButtonClick}\n onRemoveButtonClick={onRemoveButtonClick}\n addButtonText={i18n('i18nStrings.addButton', i18nStrings?.addButton) ?? ''}\n removeButtonText={i18nStrings?.removeButton}\n disableAddButton={remainingTags <= 0}\n empty={i18n('i18nStrings.emptyTags', i18nStrings?.emptyTags)}\n additionalInfo={\n remainingTags < 0 ? (\n <FormFieldError errorIconAriaLabel={i18nStrings?.errorIconAriaLabel}>\n {i18n('i18nStrings.tagLimitExceeded', i18nStrings?.tagLimitExceeded?.(tagLimit), format =>\n format({ tagLimit })\n ) ?? ''}\n </FormFieldError>\n ) : remainingTags === 0 ? (\n i18n('i18nStrings.tagLimitReached', i18nStrings?.tagLimitReached?.(tagLimit), format =>\n format({ tagLimit })\n ) ?? ''\n ) : (\n i18n('i18nStrings.tagLimit', i18nStrings?.tagLimit?.(remainingTags, tagLimit), format =>\n format({ tagLimitAvailable: `${remainingTags === tagLimit}`, availableTags: remainingTags, tagLimit })\n )\n )\n }\n definition={definition}\n i18nStrings={forwardedI18nStrings}\n />\n );\n }\n);\n\napplyDisplayName(TagEditor, 'TagEditor');\nexport default TagEditor;\n"]}
@@ -1,6 +1,29 @@
1
+ import { TagEditorProps } from './interfaces';
1
2
  /**
2
3
  * Ponyfill for Array.prototype.findIndex.
3
4
  */
4
5
  export declare function findIndex<T>(array: ReadonlyArray<T>, condition: (t: T) => unknown): number;
5
6
  export declare function useMemoizedArray<T>(array: ReadonlyArray<T>, isEqual: (prev: T, next: T) => boolean): ReadonlyArray<T>;
7
+ interface GetTagsDiffResult {
8
+ created: Record<string, string>;
9
+ removed: string[];
10
+ }
11
+ /**
12
+ * Compares the initial tags with the current tags passed to the tag editor
13
+ * and returns the differences, identifying which tags have been created or removed.
14
+ *
15
+ * This utility can be used to track tag changes and inform your tagging service about
16
+ * the removed and added tags.
17
+ *
18
+ * @param initialTags - The original tags fetched from the backend or tagging service.
19
+ * @param tags - The current tags provided to the tag editor, including any new or modified tags.
20
+ * @returns An object containing two arrays:
21
+ * - `created`: An record of tags that are new or updated (with modified values).
22
+ * Each tag is represented by its `key` and `value`.
23
+ * - `removed`: An array of tag keys that were present in the initial tags but marked for removal.
24
+ *
25
+ * Updated tags are treated as both `created` and `removed` tags.
26
+ */
27
+ export declare function getTagsDiff(initialTags: readonly TagEditorProps.Tag[], tags: readonly TagEditorProps.Tag[]): GetTagsDiffResult;
28
+ export {};
6
29
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tag-editor/utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAO1F;AA0BD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAOrH"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tag-editor/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAO1F;AA0BD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAOrH;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,cAAc,CAAC,GAAG,EAAE,EAC1C,IAAI,EAAE,SAAS,cAAc,CAAC,GAAG,EAAE,GAClC,iBAAiB,CAuBnB"}
@@ -1,6 +1,8 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { useEffect, useRef } from 'react';
4
+ import { warnOnce } from '@cloudscape-design/component-toolkit/internal';
5
+ import { isDevelopment } from '../internal/is-development';
4
6
  /**
5
7
  * Ponyfill for Array.prototype.findIndex.
6
8
  */
@@ -38,4 +40,46 @@ export function useMemoizedArray(array, isEqual) {
38
40
  }, [updated]);
39
41
  return updated;
40
42
  }
43
+ function hasDuplicateKeys(arr) {
44
+ const keys = arr.map(obj => obj.key);
45
+ const uniqueKeys = new Set(keys);
46
+ return uniqueKeys.size !== keys.length;
47
+ }
48
+ /**
49
+ * Compares the initial tags with the current tags passed to the tag editor
50
+ * and returns the differences, identifying which tags have been created or removed.
51
+ *
52
+ * This utility can be used to track tag changes and inform your tagging service about
53
+ * the removed and added tags.
54
+ *
55
+ * @param initialTags - The original tags fetched from the backend or tagging service.
56
+ * @param tags - The current tags provided to the tag editor, including any new or modified tags.
57
+ * @returns An object containing two arrays:
58
+ * - `created`: An record of tags that are new or updated (with modified values).
59
+ * Each tag is represented by its `key` and `value`.
60
+ * - `removed`: An array of tag keys that were present in the initial tags but marked for removal.
61
+ *
62
+ * Updated tags are treated as both `created` and `removed` tags.
63
+ */
64
+ export function getTagsDiff(initialTags, tags) {
65
+ if (isDevelopment) {
66
+ if (initialTags.some(t => !t.existing)) {
67
+ warnOnce('getTagsDiff: existing property', 'all initial tags should have `existing` property set to `true`.');
68
+ }
69
+ if (hasDuplicateKeys(initialTags) || hasDuplicateKeys(tags)) {
70
+ warnOnce('getTagsDiff: duplicate keys', 'tags should not have duplicate keys.');
71
+ }
72
+ }
73
+ const updated = tags.filter(tag => initialTags.some(({ key, value }) => {
74
+ return !tag.markedForRemoval && tag.key === key && tag.existing && tag.value !== value;
75
+ }));
76
+ const created = [...tags.filter(tag => !tag.existing), ...updated]
77
+ .map(({ key, value }) => ({ key, value }))
78
+ .reduce((acc, tag) => {
79
+ acc[tag.key] = tag.value;
80
+ return acc;
81
+ }, {});
82
+ const removed = [...tags.filter(tag => tag.existing && tag.markedForRemoval), ...updated].map(t => t.key);
83
+ return { created, removed };
84
+ }
41
85
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tag-editor/utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,KAAuB,EAAE,SAA4B;IAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACvB,OAAO,CAAC,CAAC;SACV;KACF;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAsB,EACtB,IAAsB,EACtB,OAAsC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3D,sDAAsD;QACtD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACzB;QACD,6DAA6D;QAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,kDAAkD;QAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;SAC5G;KACF;IAED,kDAAkD;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,KAAuB,EAAE,OAAsC;IACjG,MAAM,GAAG,GAAG,MAAM,CAAmB,KAAK,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { useEffect, useRef } from 'react';\n\n/**\n * Ponyfill for Array.prototype.findIndex.\n */\nexport function findIndex<T>(array: ReadonlyArray<T>, condition: (t: T) => unknown): number {\n for (let i = 0; i < array.length; i++) {\n if (condition(array[i])) {\n return i;\n }\n }\n return -1;\n}\n\nfunction makeMemoizedArray<T>(\n prev: ReadonlyArray<T>,\n next: ReadonlyArray<T>,\n isEqual: (prev: T, next: T) => boolean\n): ReadonlyArray<T> {\n for (let i = 0; i < Math.max(prev.length, next.length); i++) {\n // The next array is shorter, but all the items match.\n if (i === next.length) {\n return prev.slice(0, i);\n }\n // The prev array is shorter, but all the items so far match.\n if (i === prev.length) {\n return [...prev.slice(0, i), ...next.slice(i)];\n }\n // The item is not equal. Partition at this point.\n if (!isEqual(prev[i], next[i])) {\n return [...prev.slice(0, i), next[i], ...makeMemoizedArray(prev.slice(i + 1), next.slice(i + 1), isEqual)];\n }\n }\n\n // All the references match. Return the old array.\n return prev;\n}\n\nexport function useMemoizedArray<T>(array: ReadonlyArray<T>, isEqual: (prev: T, next: T) => boolean): ReadonlyArray<T> {\n const ref = useRef<ReadonlyArray<T>>(array);\n const updated = makeMemoizedArray(ref.current, array, isEqual);\n useEffect(() => {\n ref.current = updated;\n }, [updated]);\n return updated;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tag-editor/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { useEffect, useRef } from 'react';\n\nimport { warnOnce } from '@cloudscape-design/component-toolkit/internal';\n\nimport { isDevelopment } from '../internal/is-development';\nimport { TagEditorProps } from './interfaces';\n\n/**\n * Ponyfill for Array.prototype.findIndex.\n */\nexport function findIndex<T>(array: ReadonlyArray<T>, condition: (t: T) => unknown): number {\n for (let i = 0; i < array.length; i++) {\n if (condition(array[i])) {\n return i;\n }\n }\n return -1;\n}\n\nfunction makeMemoizedArray<T>(\n prev: ReadonlyArray<T>,\n next: ReadonlyArray<T>,\n isEqual: (prev: T, next: T) => boolean\n): ReadonlyArray<T> {\n for (let i = 0; i < Math.max(prev.length, next.length); i++) {\n // The next array is shorter, but all the items match.\n if (i === next.length) {\n return prev.slice(0, i);\n }\n // The prev array is shorter, but all the items so far match.\n if (i === prev.length) {\n return [...prev.slice(0, i), ...next.slice(i)];\n }\n // The item is not equal. Partition at this point.\n if (!isEqual(prev[i], next[i])) {\n return [...prev.slice(0, i), next[i], ...makeMemoizedArray(prev.slice(i + 1), next.slice(i + 1), isEqual)];\n }\n }\n\n // All the references match. Return the old array.\n return prev;\n}\n\nexport function useMemoizedArray<T>(array: ReadonlyArray<T>, isEqual: (prev: T, next: T) => boolean): ReadonlyArray<T> {\n const ref = useRef<ReadonlyArray<T>>(array);\n const updated = makeMemoizedArray(ref.current, array, isEqual);\n useEffect(() => {\n ref.current = updated;\n }, [updated]);\n return updated;\n}\n\ninterface GetTagsDiffResult {\n created: Record<string, string>;\n removed: string[];\n}\n\nfunction hasDuplicateKeys(arr: readonly TagEditorProps.Tag[]): boolean {\n const keys = arr.map(obj => obj.key);\n const uniqueKeys = new Set(keys);\n return uniqueKeys.size !== keys.length;\n}\n\n/**\n * Compares the initial tags with the current tags passed to the tag editor\n * and returns the differences, identifying which tags have been created or removed.\n *\n * This utility can be used to track tag changes and inform your tagging service about\n * the removed and added tags.\n *\n * @param initialTags - The original tags fetched from the backend or tagging service.\n * @param tags - The current tags provided to the tag editor, including any new or modified tags.\n * @returns An object containing two arrays:\n * - `created`: An record of tags that are new or updated (with modified values).\n * Each tag is represented by its `key` and `value`.\n * - `removed`: An array of tag keys that were present in the initial tags but marked for removal.\n *\n * Updated tags are treated as both `created` and `removed` tags.\n */\nexport function getTagsDiff(\n initialTags: readonly TagEditorProps.Tag[],\n tags: readonly TagEditorProps.Tag[]\n): GetTagsDiffResult {\n if (isDevelopment) {\n if (initialTags.some(t => !t.existing)) {\n warnOnce('getTagsDiff: existing property', 'all initial tags should have `existing` property set to `true`.');\n }\n if (hasDuplicateKeys(initialTags) || hasDuplicateKeys(tags)) {\n warnOnce('getTagsDiff: duplicate keys', 'tags should not have duplicate keys.');\n }\n }\n const updated = tags.filter(tag =>\n initialTags.some(({ key, value }) => {\n return !tag.markedForRemoval && tag.key === key && tag.existing && tag.value !== value;\n })\n );\n const created = [...tags.filter(tag => !tag.existing), ...updated]\n .map(({ key, value }) => ({ key, value }))\n .reduce((acc: Record<string, string>, tag) => {\n acc[tag.key] = tag.value;\n return acc;\n }, {});\n const removed = [...tags.filter(tag => tag.existing && tag.markedForRemoval), ...updated].map(t => t.key);\n\n return { created, removed };\n}\n"]}