@cloudscape-design/components 3.0.152 → 3.0.154

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.
Files changed (106) hide show
  1. package/breadcrumb-group/internal.d.ts +1 -1
  2. package/breadcrumb-group/internal.d.ts.map +1 -1
  3. package/breadcrumb-group/internal.js.map +1 -1
  4. package/button/internal.d.ts +1 -0
  5. package/button/internal.d.ts.map +1 -1
  6. package/button/internal.js +2 -2
  7. package/button/internal.js.map +1 -1
  8. package/form-field/interfaces.d.ts +10 -0
  9. package/form-field/interfaces.d.ts.map +1 -1
  10. package/form-field/interfaces.js.map +1 -1
  11. package/form-field/internal.d.ts +1 -1
  12. package/form-field/internal.d.ts.map +1 -1
  13. package/form-field/internal.js +5 -4
  14. package/form-field/internal.js.map +1 -1
  15. package/input/internal.d.ts.map +1 -1
  16. package/input/internal.js +16 -4
  17. package/input/internal.js.map +1 -1
  18. package/internal/components/button-trigger/index.d.ts +1 -0
  19. package/internal/components/button-trigger/index.d.ts.map +1 -1
  20. package/internal/components/button-trigger/index.js +2 -2
  21. package/internal/components/button-trigger/index.js.map +1 -1
  22. package/internal/context/form-field-context.d.ts +6 -2
  23. package/internal/context/form-field-context.d.ts.map +1 -1
  24. package/internal/context/form-field-context.js +7 -1
  25. package/internal/context/form-field-context.js.map +1 -1
  26. package/internal/environment.js +1 -1
  27. package/internal/manifest.json +1 -1
  28. package/internal/types.d.ts +9 -0
  29. package/internal/types.d.ts.map +1 -1
  30. package/internal/types.js +0 -2
  31. package/internal/types.js.map +1 -1
  32. package/multiselect/interfaces.d.ts +4 -0
  33. package/multiselect/interfaces.d.ts.map +1 -1
  34. package/multiselect/interfaces.js.map +1 -1
  35. package/multiselect/internal.d.ts.map +1 -1
  36. package/multiselect/internal.js +2 -2
  37. package/multiselect/internal.js.map +1 -1
  38. package/package.json +1 -1
  39. package/select/interfaces.d.ts +4 -0
  40. package/select/interfaces.d.ts.map +1 -1
  41. package/select/interfaces.js.map +1 -1
  42. package/select/internal.d.ts +1 -1
  43. package/select/internal.d.ts.map +1 -1
  44. package/select/internal.js +2 -2
  45. package/select/internal.js.map +1 -1
  46. package/select/parts/styles.css.js +9 -9
  47. package/select/parts/styles.scoped.css +27 -9
  48. package/select/parts/styles.selectors.js +9 -9
  49. package/select/utils/use-select.d.ts +2 -1
  50. package/select/utils/use-select.d.ts.map +1 -1
  51. package/select/utils/use-select.js +4 -2
  52. package/select/utils/use-select.js.map +1 -1
  53. package/table/body-cell/click-away.d.ts +9 -0
  54. package/table/body-cell/click-away.d.ts.map +1 -0
  55. package/table/body-cell/click-away.js +38 -0
  56. package/table/body-cell/click-away.js.map +1 -0
  57. package/table/body-cell/index.d.ts +11 -20
  58. package/table/body-cell/index.d.ts.map +1 -1
  59. package/table/body-cell/index.js +48 -9
  60. package/table/body-cell/index.js.map +1 -1
  61. package/table/body-cell/inline-editor.d.ts +12 -0
  62. package/table/body-cell/inline-editor.d.ts.map +1 -0
  63. package/table/body-cell/inline-editor.js +88 -0
  64. package/table/body-cell/inline-editor.js.map +1 -0
  65. package/table/body-cell/styles.css.js +18 -12
  66. package/table/body-cell/styles.scoped.css +229 -46
  67. package/table/body-cell/styles.selectors.js +18 -12
  68. package/table/body-cell/td-element.d.ts +21 -0
  69. package/table/body-cell/td-element.d.ts.map +1 -0
  70. package/table/body-cell/td-element.js +11 -0
  71. package/table/body-cell/td-element.js.map +1 -0
  72. package/table/body-cell/use-stable-scroll-position.d.ts +17 -0
  73. package/table/body-cell/use-stable-scroll-position.d.ts.map +1 -0
  74. package/table/body-cell/use-stable-scroll-position.js +48 -0
  75. package/table/body-cell/use-stable-scroll-position.js.map +1 -0
  76. package/table/header-cell/index.d.ts +8 -7
  77. package/table/header-cell/index.d.ts.map +1 -1
  78. package/table/header-cell/index.js +6 -2
  79. package/table/header-cell/index.js.map +1 -1
  80. package/table/header-cell/styles.css.js +19 -18
  81. package/table/header-cell/styles.scoped.css +40 -35
  82. package/table/header-cell/styles.selectors.js +19 -18
  83. package/table/header-cell/utils.d.ts +1 -1
  84. package/table/header-cell/utils.d.ts.map +1 -1
  85. package/table/interfaces.d.ts +85 -10
  86. package/table/interfaces.d.ts.map +1 -1
  87. package/table/interfaces.js.map +1 -1
  88. package/table/internal.d.ts.map +1 -1
  89. package/table/internal.js +68 -18
  90. package/table/internal.js.map +1 -1
  91. package/table/thead.d.ts.map +1 -1
  92. package/table/thead.js +1 -1
  93. package/table/thead.js.map +1 -1
  94. package/table/use-table-focus-navigation.d.ts +16 -0
  95. package/table/use-table-focus-navigation.d.ts.map +1 -0
  96. package/table/use-table-focus-navigation.js +131 -0
  97. package/table/use-table-focus-navigation.js.map +1 -0
  98. package/table/utils.d.ts +1 -1
  99. package/table/utils.d.ts.map +1 -1
  100. package/test-utils/dom/table/index.d.ts +4 -0
  101. package/test-utils/dom/table/index.js +21 -5
  102. package/test-utils/dom/table/index.js.map +1 -1
  103. package/test-utils/selectors/table/index.d.ts +4 -0
  104. package/test-utils/selectors/table/index.js +21 -5
  105. package/test-utils/selectors/table/index.js.map +1 -1
  106. package/test-utils/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-select.js","sourceRoot":"","sources":["../../../../src/select/utils/use-select.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 React, { RefObject } from 'react';\nimport { DropdownProps } from '../../internal/components/dropdown/interfaces';\nimport { DropdownOption, OptionDefinition, OptionGroup } from '../../internal/components/option/interfaces';\nimport { isInteractive, isGroupInteractive, isGroup } from '../../internal/components/option/utils/filter-options';\nimport { useEffect, useRef } from 'react';\nimport { useHighlightedOption } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { useOpenState } from '../../internal/components/options-list/utils/use-open-state';\nimport { useMenuKeyboard, useTriggerKeyboard } from '../../internal/components/options-list/utils/use-keyboard';\nimport { getOptionId } from '../../internal/components/options-list/utils/use-ids';\nimport { connectOptionsByValue } from './connect-options';\nimport useForwardFocus from '../../internal/hooks/forward-focus';\nimport { OptionsListProps } from '../../internal/components/options-list';\nimport { FilterProps } from '../parts/filter';\nimport { ItemProps } from '../parts/item';\nimport { usePrevious } from '../../internal/hooks/use-previous';\nimport { BaseKeyDetail, NonCancelableEventHandler, fireNonCancelableEvent } from '../../internal/events';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\n\nexport type MenuProps = Omit<OptionsListProps, 'children'> & { ref: React.RefObject<HTMLUListElement> };\nexport type GetOptionProps = (option: DropdownOption, index: number) => ItemProps;\n\ninterface UseSelectProps {\n selectedOptions: ReadonlyArray<OptionDefinition>;\n updateSelectedOption: (option: OptionDefinition) => void;\n options: ReadonlyArray<DropdownOption>;\n filteringType: string;\n keepOpen?: boolean;\n onBlur?: NonCancelableEventHandler;\n onFocus?: NonCancelableEventHandler;\n externalRef: React.Ref<any>;\n fireLoadItems: (filteringText: string) => void;\n setFilteringValue: (filteringText: string) => void;\n useInteractiveGroups?: boolean;\n}\n\nexport interface SelectTriggerProps {\n ref: RefObject<HTMLButtonElement>;\n onMouseDown?: (event: CustomEvent) => void;\n onKeyDown?: (event: CustomEvent<BaseKeyDetail>) => void;\n onFocus: NonCancelableEventHandler;\n}\n\nexport function useSelect({\n selectedOptions,\n updateSelectedOption,\n options,\n filteringType,\n onBlur,\n onFocus,\n externalRef,\n keepOpen,\n fireLoadItems,\n setFilteringValue,\n useInteractiveGroups = false,\n}: UseSelectProps) {\n const interactivityCheck = useInteractiveGroups ? isGroupInteractive : isInteractive;\n\n const isHighlightable = (option?: DropdownOption) => !!option && (useInteractiveGroups || option.type !== 'parent');\n\n const filterRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n const hasFilter = filteringType !== 'none';\n const activeRef = hasFilter ? filterRef : menuRef;\n const isSelectingUsingSpace = useRef<boolean>(false);\n const __selectedOptions = connectOptionsByValue(options, selectedOptions);\n const __selectedValuesSet = selectedOptions.reduce((selectedValuesSet: Set<string>, item: OptionDefinition) => {\n if (item.value) {\n selectedValuesSet.add(item.value);\n }\n return selectedValuesSet;\n }, new Set<string>());\n const [\n { highlightType, highlightedOption, highlightedIndex },\n {\n moveHighlightWithKeyboard,\n resetHighlightWithKeyboard,\n setHighlightedIndexWithMouse,\n highlightOptionWithKeyboard,\n goHomeWithKeyboard,\n goEndWithKeyboard,\n },\n ] = useHighlightedOption({ options, isHighlightable });\n\n const { isOpen, openDropdown, closeDropdown, toggleDropdown } = useOpenState({\n onOpen: () => fireLoadItems(''),\n onClose: () => {\n resetHighlightWithKeyboard();\n setFilteringValue('');\n },\n });\n\n const handleFocus = () => {\n fireNonCancelableEvent(onFocus, {});\n };\n\n const handleBlur = () => {\n fireNonCancelableEvent(onBlur, {});\n closeDropdown();\n };\n\n const hasSelectedOption = __selectedOptions.length > 0;\n const menuId = useUniqueId('option-list');\n const highlightedOptionId = getOptionId(menuId, highlightedIndex);\n\n const selectOption = (option?: DropdownOption) => {\n isSelectingUsingSpace.current = false;\n const optionToSelect = option || highlightedOption;\n if (!optionToSelect || !interactivityCheck(optionToSelect)) {\n return;\n }\n updateSelectedOption(optionToSelect.option);\n if (!keepOpen) {\n triggerRef.current?.focus();\n closeDropdown();\n }\n };\n\n const activeKeyDownHandler = useMenuKeyboard({\n moveHighlight: moveHighlightWithKeyboard,\n selectOption,\n goHome: goHomeWithKeyboard,\n goEnd: goEndWithKeyboard,\n closeDropdown: () => {\n triggerRef.current?.focus();\n closeDropdown();\n },\n isSelectingUsingSpace,\n preventNativeSpace: !hasFilter,\n });\n\n const triggerKeyDownHandler = useTriggerKeyboard({ openDropdown, goHome: goHomeWithKeyboard });\n\n const getDropdownProps: () => Pick<DropdownProps, 'onFocus' | 'onBlur'> = () => ({\n onFocus: handleFocus,\n onBlur: handleBlur,\n });\n\n const getTriggerProps = (disabled = false) => {\n const triggerProps: SelectTriggerProps = {\n ref: triggerRef,\n onFocus: () => closeDropdown(),\n };\n if (!disabled) {\n triggerProps.onMouseDown = (event: CustomEvent) => {\n event.preventDefault(); // prevent current focus from blurring as it immediately closes the dropdown\n if (isOpen) {\n triggerRef.current?.focus();\n }\n toggleDropdown();\n };\n triggerProps.onKeyDown = triggerKeyDownHandler;\n }\n return triggerProps;\n };\n\n const getFilterProps = (): Partial<FilterProps> => {\n if (!hasFilter) {\n return {};\n }\n\n return {\n ref: filterRef,\n onKeyDown: activeKeyDownHandler,\n onChange: event => {\n setFilteringValue(event.detail.value);\n resetHighlightWithKeyboard();\n },\n __onDelayedInput: event => {\n fireLoadItems(event.detail.value);\n },\n __nativeAttributes: {\n 'aria-activedescendant': highlightedOptionId,\n ['aria-owns']: menuId,\n ['aria-controls']: menuId,\n },\n };\n };\n\n const getMenuProps = () => {\n const menuProps: MenuProps = {\n id: menuId,\n ref: menuRef,\n open: isOpen,\n onMouseUp: itemIndex => {\n if (itemIndex > -1) {\n selectOption(options[itemIndex]);\n }\n },\n onMouseMove: itemIndex => {\n if (itemIndex > -1) {\n setHighlightedIndexWithMouse(itemIndex);\n }\n },\n };\n if (!hasFilter) {\n menuProps.onKeyDown = activeKeyDownHandler;\n menuProps.nativeAttributes = {\n 'aria-activedescendant': highlightedOptionId,\n };\n }\n return menuProps;\n };\n const getGroupState = (option: OptionGroup) => {\n const totalSelected = option.options.filter(item => !!item.value && __selectedValuesSet.has(item.value)).length;\n const hasSelected = totalSelected > 0;\n const allSelected = totalSelected === option.options.length;\n return {\n selected: hasSelected && allSelected,\n indeterminate: hasSelected && !allSelected,\n };\n };\n\n const getOptionProps = (option: DropdownOption, index: number) => {\n const highlighted = option === highlightedOption;\n const groupState = isGroup(option.option) ? getGroupState(option.option) : undefined;\n const selected = __selectedOptions.indexOf(option) > -1 || !!groupState?.selected;\n const nextOption = options[index + 1]?.option;\n const isNextSelected =\n !!nextOption && isGroup(nextOption)\n ? getGroupState(nextOption).selected\n : __selectedOptions.indexOf(options[index + 1]) > -1;\n\n const optionProps: any = {\n key: index,\n option,\n highlighted,\n selected,\n isNextSelected,\n indeterminate: !!groupState?.indeterminate,\n ['data-mouse-target']: isHighlightable(option) ? index : -1,\n id: getOptionId(menuId, index),\n };\n\n return optionProps;\n };\n\n const prevOpen = usePrevious<boolean>(isOpen);\n useEffect(() => {\n // highlight the first selected option, when opening the Select component without filter input\n // keep the focus in the filter input when opening, so that screenreader can recognize the combobox\n if (isOpen && !prevOpen && hasSelectedOption && !hasFilter) {\n setHighlightedIndexWithMouse(options.indexOf(__selectedOptions[0]));\n }\n }, [isOpen, __selectedOptions, hasSelectedOption, setHighlightedIndexWithMouse, options, prevOpen, hasFilter]);\n\n useEffect(() => {\n if (isOpen) {\n // dropdown-fit calculations ensure that the dropdown will fit inside the current\n // viewport, so prevent the browser from trying to scroll it into view (e.g. if\n // scroll-padding-top is set on a parent)\n activeRef.current?.focus({ preventScroll: true });\n }\n }, [isOpen, activeRef]);\n\n useForwardFocus(externalRef, triggerRef as React.RefObject<HTMLElement>);\n const highlightedGroupSelected =\n !!highlightedOption && isGroup(highlightedOption.option) && getGroupState(highlightedOption.option).selected;\n const announceSelected =\n !!highlightedOption && (__selectedOptions.indexOf(highlightedOption) > -1 || highlightedGroupSelected);\n\n return {\n isOpen,\n highlightedOption,\n highlightedIndex,\n highlightType,\n getTriggerProps,\n getDropdownProps,\n getMenuProps,\n getFilterProps,\n getOptionProps,\n highlightOption: highlightOptionWithKeyboard,\n selectOption,\n announceSelected,\n };\n}\n"]}
1
+ {"version":3,"file":"use-select.js","sourceRoot":"","sources":["../../../../src/select/utils/use-select.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 React, { RefObject } from 'react';\nimport { DropdownProps } from '../../internal/components/dropdown/interfaces';\nimport { DropdownOption, OptionDefinition, OptionGroup } from '../../internal/components/option/interfaces';\nimport { isInteractive, isGroupInteractive, isGroup } from '../../internal/components/option/utils/filter-options';\nimport { useEffect, useRef } from 'react';\nimport { useHighlightedOption } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { useOpenState } from '../../internal/components/options-list/utils/use-open-state';\nimport { useMenuKeyboard, useTriggerKeyboard } from '../../internal/components/options-list/utils/use-keyboard';\nimport { getOptionId } from '../../internal/components/options-list/utils/use-ids';\nimport { connectOptionsByValue } from './connect-options';\nimport useForwardFocus from '../../internal/hooks/forward-focus';\nimport { OptionsListProps } from '../../internal/components/options-list';\nimport { FilterProps } from '../parts/filter';\nimport { ItemProps } from '../parts/item';\nimport { usePrevious } from '../../internal/hooks/use-previous';\nimport { BaseKeyDetail, NonCancelableEventHandler, fireNonCancelableEvent } from '../../internal/events';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\n\nexport type MenuProps = Omit<OptionsListProps, 'children'> & { ref: React.RefObject<HTMLUListElement> };\nexport type GetOptionProps = (option: DropdownOption, index: number) => ItemProps;\n\ninterface UseSelectProps {\n selectedOptions: ReadonlyArray<OptionDefinition>;\n updateSelectedOption: (option: OptionDefinition) => void;\n options: ReadonlyArray<DropdownOption>;\n filteringType: string;\n keepOpen?: boolean;\n onBlur?: NonCancelableEventHandler;\n onFocus?: NonCancelableEventHandler;\n externalRef: React.Ref<any>;\n fireLoadItems: (filteringText: string) => void;\n setFilteringValue: (filteringText: string) => void;\n useInteractiveGroups?: boolean;\n}\n\nexport interface SelectTriggerProps {\n ref: RefObject<HTMLButtonElement>;\n onMouseDown?: (event: CustomEvent) => void;\n onKeyDown?: (event: CustomEvent<BaseKeyDetail>) => void;\n onFocus: NonCancelableEventHandler;\n autoFocus?: boolean;\n}\n\nexport function useSelect({\n selectedOptions,\n updateSelectedOption,\n options,\n filteringType,\n onBlur,\n onFocus,\n externalRef,\n keepOpen,\n fireLoadItems,\n setFilteringValue,\n useInteractiveGroups = false,\n}: UseSelectProps) {\n const interactivityCheck = useInteractiveGroups ? isGroupInteractive : isInteractive;\n\n const isHighlightable = (option?: DropdownOption) => !!option && (useInteractiveGroups || option.type !== 'parent');\n\n const filterRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n const hasFilter = filteringType !== 'none';\n const activeRef = hasFilter ? filterRef : menuRef;\n const isSelectingUsingSpace = useRef<boolean>(false);\n const __selectedOptions = connectOptionsByValue(options, selectedOptions);\n const __selectedValuesSet = selectedOptions.reduce((selectedValuesSet: Set<string>, item: OptionDefinition) => {\n if (item.value) {\n selectedValuesSet.add(item.value);\n }\n return selectedValuesSet;\n }, new Set<string>());\n const [\n { highlightType, highlightedOption, highlightedIndex },\n {\n moveHighlightWithKeyboard,\n resetHighlightWithKeyboard,\n setHighlightedIndexWithMouse,\n highlightOptionWithKeyboard,\n goHomeWithKeyboard,\n goEndWithKeyboard,\n },\n ] = useHighlightedOption({ options, isHighlightable });\n\n const { isOpen, openDropdown, closeDropdown, toggleDropdown } = useOpenState({\n onOpen: () => fireLoadItems(''),\n onClose: () => {\n resetHighlightWithKeyboard();\n setFilteringValue('');\n },\n });\n\n const handleFocus = () => {\n fireNonCancelableEvent(onFocus, {});\n };\n\n const handleBlur = () => {\n fireNonCancelableEvent(onBlur, {});\n closeDropdown();\n };\n\n const hasSelectedOption = __selectedOptions.length > 0;\n const menuId = useUniqueId('option-list');\n const highlightedOptionId = getOptionId(menuId, highlightedIndex);\n\n const selectOption = (option?: DropdownOption) => {\n isSelectingUsingSpace.current = false;\n const optionToSelect = option || highlightedOption;\n if (!optionToSelect || !interactivityCheck(optionToSelect)) {\n return;\n }\n updateSelectedOption(optionToSelect.option);\n if (!keepOpen) {\n triggerRef.current?.focus();\n closeDropdown();\n }\n };\n\n const activeKeyDownHandler = useMenuKeyboard({\n moveHighlight: moveHighlightWithKeyboard,\n selectOption,\n goHome: goHomeWithKeyboard,\n goEnd: goEndWithKeyboard,\n closeDropdown: () => {\n triggerRef.current?.focus();\n closeDropdown();\n },\n isSelectingUsingSpace,\n preventNativeSpace: !hasFilter,\n });\n\n const triggerKeyDownHandler = useTriggerKeyboard({ openDropdown, goHome: goHomeWithKeyboard });\n\n const getDropdownProps: () => Pick<DropdownProps, 'onFocus' | 'onBlur'> = () => ({\n onFocus: handleFocus,\n onBlur: handleBlur,\n });\n\n const getTriggerProps = (disabled = false, autoFocus = false) => {\n const triggerProps: SelectTriggerProps = {\n ref: triggerRef,\n onFocus: () => closeDropdown(),\n autoFocus,\n };\n if (!disabled) {\n triggerProps.onMouseDown = (event: CustomEvent) => {\n event.preventDefault(); // prevent current focus from blurring as it immediately closes the dropdown\n if (isOpen) {\n triggerRef.current?.focus();\n }\n toggleDropdown();\n };\n triggerProps.onKeyDown = triggerKeyDownHandler;\n }\n return triggerProps;\n };\n\n const getFilterProps = (): Partial<FilterProps> => {\n if (!hasFilter) {\n return {};\n }\n\n return {\n ref: filterRef,\n onKeyDown: activeKeyDownHandler,\n onChange: event => {\n setFilteringValue(event.detail.value);\n resetHighlightWithKeyboard();\n },\n __onDelayedInput: event => {\n fireLoadItems(event.detail.value);\n },\n __nativeAttributes: {\n 'aria-activedescendant': highlightedOptionId,\n ['aria-owns']: menuId,\n ['aria-controls']: menuId,\n },\n };\n };\n\n const getMenuProps = () => {\n const menuProps: MenuProps = {\n id: menuId,\n ref: menuRef,\n open: isOpen,\n onMouseUp: itemIndex => {\n if (itemIndex > -1) {\n selectOption(options[itemIndex]);\n }\n },\n onMouseMove: itemIndex => {\n if (itemIndex > -1) {\n setHighlightedIndexWithMouse(itemIndex);\n }\n },\n };\n if (!hasFilter) {\n menuProps.onKeyDown = activeKeyDownHandler;\n menuProps.nativeAttributes = {\n 'aria-activedescendant': highlightedOptionId,\n };\n }\n return menuProps;\n };\n const getGroupState = (option: OptionGroup) => {\n const totalSelected = option.options.filter(item => !!item.value && __selectedValuesSet.has(item.value)).length;\n const hasSelected = totalSelected > 0;\n const allSelected = totalSelected === option.options.length;\n return {\n selected: hasSelected && allSelected,\n indeterminate: hasSelected && !allSelected,\n };\n };\n\n const getOptionProps = (option: DropdownOption, index: number) => {\n const highlighted = option === highlightedOption;\n const groupState = isGroup(option.option) ? getGroupState(option.option) : undefined;\n const selected = __selectedOptions.indexOf(option) > -1 || !!groupState?.selected;\n const nextOption = options[index + 1]?.option;\n const isNextSelected =\n !!nextOption && isGroup(nextOption)\n ? getGroupState(nextOption).selected\n : __selectedOptions.indexOf(options[index + 1]) > -1;\n\n const optionProps: any = {\n key: index,\n option,\n highlighted,\n selected,\n isNextSelected,\n indeterminate: !!groupState?.indeterminate,\n ['data-mouse-target']: isHighlightable(option) ? index : -1,\n id: getOptionId(menuId, index),\n };\n\n return optionProps;\n };\n\n const prevOpen = usePrevious<boolean>(isOpen);\n useEffect(() => {\n // highlight the first selected option, when opening the Select component without filter input\n // keep the focus in the filter input when opening, so that screenreader can recognize the combobox\n if (isOpen && !prevOpen && hasSelectedOption && !hasFilter) {\n setHighlightedIndexWithMouse(options.indexOf(__selectedOptions[0]));\n }\n }, [isOpen, __selectedOptions, hasSelectedOption, setHighlightedIndexWithMouse, options, prevOpen, hasFilter]);\n\n useEffect(() => {\n if (isOpen) {\n // dropdown-fit calculations ensure that the dropdown will fit inside the current\n // viewport, so prevent the browser from trying to scroll it into view (e.g. if\n // scroll-padding-top is set on a parent)\n activeRef.current?.focus({ preventScroll: true });\n }\n }, [isOpen, activeRef]);\n\n useForwardFocus(externalRef, triggerRef as React.RefObject<HTMLElement>);\n const highlightedGroupSelected =\n !!highlightedOption && isGroup(highlightedOption.option) && getGroupState(highlightedOption.option).selected;\n const announceSelected =\n !!highlightedOption && (__selectedOptions.indexOf(highlightedOption) > -1 || highlightedGroupSelected);\n\n return {\n isOpen,\n highlightedOption,\n highlightedIndex,\n highlightType,\n getTriggerProps,\n getDropdownProps,\n getMenuProps,\n getFilterProps,\n getOptionProps,\n highlightOption: highlightOptionWithKeyboard,\n selectOption,\n announceSelected,\n };\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export declare function useClickAway(onClick: () => void): React.MutableRefObject<any>;
3
+ interface ClickAwayActive {
4
+ onClick: () => void;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare function ClickAway({ onClick, children }: ClickAwayActive): JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=click-away.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-away.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/click-away.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,+BAgB/C;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AACD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,eAa/D"}
@@ -0,0 +1,38 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import React, { useEffect, useRef } from 'react';
4
+ import { containsOrEqual } from '../../internal/utils/dom';
5
+ import { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';
6
+ export function useClickAway(onClick) {
7
+ var awayRef = useRef(null);
8
+ var onClickStable = useStableEventHandler(onClick);
9
+ useEffect(function () {
10
+ function handleClick(event) {
11
+ if (!containsOrEqual(awayRef.current, event.target)) {
12
+ onClickStable();
13
+ }
14
+ }
15
+ // contains returns wrong result if the next render would remove the element
16
+ // but capture phase happens before the render, so returns correct result
17
+ // Ref: https://github.com/facebook/react/issues/20325
18
+ document.addEventListener('click', handleClick, { capture: true });
19
+ return function () { return document.removeEventListener('click', handleClick, { capture: true }); };
20
+ }, [onClickStable]);
21
+ return awayRef;
22
+ }
23
+ export function ClickAway(_a) {
24
+ var onClick = _a.onClick, children = _a.children;
25
+ var onClickStable = useStableEventHandler(onClick);
26
+ var ref = useRef(null);
27
+ useEffect(function () {
28
+ function handleClick(event) {
29
+ if (!containsOrEqual(ref.current, event.target)) {
30
+ onClickStable();
31
+ }
32
+ }
33
+ document.addEventListener('click', handleClick, true);
34
+ return function () { return document.removeEventListener('click', handleClick, true); };
35
+ }, [onClickStable]);
36
+ return React.createElement("span", { ref: ref }, children);
37
+ }
38
+ //# sourceMappingURL=click-away.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-away.js","sourceRoot":"","sources":["../../../../src/table/body-cell/click-away.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAEtF,MAAM,UAAU,YAAY,CAAC,OAAmB;IAC9C,IAAM,OAAO,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAClC,IAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,SAAS,CAAC;QACR,SAAS,WAAW,CAAC,KAAY;YAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,MAAc,CAAC,EAAE;gBAC3D,aAAa,EAAE,CAAC;aACjB;QACH,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,sDAAsD;QACtD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,cAAM,OAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAArE,CAAqE,CAAC;IACrF,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,MAAM,UAAU,SAAS,CAAC,EAAsC;QAApC,OAAO,aAAA,EAAE,QAAQ,cAAA;IAC3C,IAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,IAAM,GAAG,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC1C,SAAS,CAAC;QACR,SAAS,WAAW,CAAC,KAAY;YAC/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAc,CAAC,EAAE;gBACvD,aAAa,EAAE,CAAC;aACjB;QACH,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,cAAM,OAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAxD,CAAwD,CAAC;IACxE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACpB,OAAO,8BAAM,GAAG,EAAE,GAAG,IAAG,QAAQ,CAAQ,CAAC;AAC3C,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useEffect, useRef } from 'react';\nimport { containsOrEqual } from '../../internal/utils/dom';\nimport { useStableEventHandler } from '../../internal/hooks/use-stable-event-handler';\n\nexport function useClickAway(onClick: () => void) {\n const awayRef = useRef<any>(null);\n const onClickStable = useStableEventHandler(onClick);\n useEffect(() => {\n function handleClick(event: Event) {\n if (!containsOrEqual(awayRef.current, event.target as Node)) {\n onClickStable();\n }\n }\n // contains returns wrong result if the next render would remove the element\n // but capture phase happens before the render, so returns correct result\n // Ref: https://github.com/facebook/react/issues/20325\n document.addEventListener('click', handleClick, { capture: true });\n return () => document.removeEventListener('click', handleClick, { capture: true });\n }, [onClickStable]);\n return awayRef;\n}\n\ninterface ClickAwayActive {\n onClick: () => void;\n children: React.ReactNode;\n}\nexport function ClickAway({ onClick, children }: ClickAwayActive) {\n const onClickStable = useStableEventHandler(onClick);\n const ref = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n function handleClick(event: Event) {\n if (!containsOrEqual(ref.current, event.target as Node)) {\n onClickStable();\n }\n }\n document.addEventListener('click', handleClick, true);\n return () => document.removeEventListener('click', handleClick, true);\n }, [onClickStable]);\n return <span ref={ref}>{children}</span>;\n}\n"]}
@@ -1,25 +1,16 @@
1
- import React from 'react';
2
1
  import { TableProps } from '../interfaces';
3
- interface TableBodyCellProps {
4
- className?: string;
5
- style?: React.CSSProperties;
6
- wrapLines: boolean | undefined;
7
- isFirstRow: boolean;
8
- isLastRow: boolean;
9
- isEvenRow?: boolean;
10
- stripedRows?: boolean;
11
- isSelected: boolean;
12
- isNextSelected: boolean;
13
- isPrevSelected: boolean;
14
- children?: React.ReactNode;
15
- hasSelection?: boolean;
16
- hasFooter?: boolean;
17
- }
18
- export declare function TableBodyCell({ className, style, children, wrapLines, isFirstRow, isLastRow, isSelected, isNextSelected, isPrevSelected, isEvenRow, stripedRows, hasSelection, hasFooter, }: TableBodyCellProps): JSX.Element;
19
- interface TableBodyCellContentProps<ItemType> extends TableBodyCellProps {
20
- column: TableProps.ColumnDefinition<ItemType>;
2
+ import { TableTdElementProps } from './td-element';
3
+ interface TableBodyCellProps<ItemType, ValueType> extends TableTdElementProps {
4
+ column: TableProps.EditableColumnDefinition<ItemType, ValueType>;
21
5
  item: ItemType;
6
+ isEditing: boolean;
7
+ onEditStart: () => void;
8
+ onEditEnd: () => void;
9
+ submitEdit?: TableProps.SubmitEditFunction<ItemType, ValueType>;
10
+ ariaLabels: TableProps['ariaLabels'];
22
11
  }
23
- export declare function TableBodyCellContent<ItemType>({ item, column, ...rest }: TableBodyCellContentProps<ItemType>): JSX.Element;
12
+ export declare function TableBodyCell<ItemType, ValueType>({ isEditable, ...rest }: TableBodyCellProps<ItemType, ValueType> & {
13
+ isEditable: boolean;
14
+ }): JSX.Element;
24
15
  export {};
25
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,eAyBpB;AAED,UAAU,yBAAyB,CAAC,QAAQ,CAAE,SAAQ,kBAAkB;IACtE,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,yBAAyB,CAAC,QAAQ,CAAC,eAE5G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAcnE,UAAU,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAE,SAAQ,mBAAmB;IAC3E,MAAM,EAAE,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChE,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACtC;AAsFD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EACjD,UAAU,EACV,GAAG,IAAI,EACR,EAAE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,eAMnE"}
@@ -3,15 +3,54 @@ import { __assign, __rest } from "tslib";
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import clsx from 'clsx';
5
5
  import styles from './styles.css.js';
6
- import React from 'react';
7
- import { useVisualRefresh } from '../../internal/hooks/use-visual-mode';
8
- export function TableBodyCell(_a) {
9
- var className = _a.className, style = _a.style, children = _a.children, wrapLines = _a.wrapLines, isFirstRow = _a.isFirstRow, isLastRow = _a.isLastRow, isSelected = _a.isSelected, isNextSelected = _a.isNextSelected, isPrevSelected = _a.isPrevSelected, isEvenRow = _a.isEvenRow, stripedRows = _a.stripedRows, hasSelection = _a.hasSelection, hasFooter = _a.hasFooter;
10
- var isVisualRefresh = useVisualRefresh();
11
- return (React.createElement("td", { style: style, className: clsx(className, styles['body-cell'], wrapLines && styles['body-cell-wrap'], isFirstRow && styles['body-cell-first-row'], isLastRow && styles['body-cell-last-row'], isSelected && styles['body-cell-selected'], isNextSelected && styles['body-cell-next-selected'], isPrevSelected && styles['body-cell-prev-selected'], !isEvenRow && stripedRows && styles['body-cell-shaded'], stripedRows && styles['has-striped-rows'], isVisualRefresh && styles['is-visual-refresh'], hasSelection && styles['has-selection'], hasFooter && styles['has-footer']) }, children));
6
+ import React, { useCallback, useRef } from 'react';
7
+ import useFocusVisible from '../../internal/hooks/focus-visible';
8
+ import { useEffectOnUpdate } from '../../internal/hooks/use-effect-on-update';
9
+ import Button from '../../button/internal';
10
+ import { TableTdElement } from './td-element';
11
+ import { InlineEditor } from './inline-editor';
12
+ import { useStableScrollPosition } from './use-stable-scroll-position';
13
+ var readonlyState = Object.freeze({
14
+ isEditing: false,
15
+ currentValue: undefined,
16
+ setValue: function () { }
17
+ });
18
+ var submitHandlerFallback = function () {
19
+ throw new Error('The function `handleSubmit` is required for editable columns');
20
+ };
21
+ function TableCellEditable(_a) {
22
+ var _b;
23
+ var className = _a.className, item = _a.item, column = _a.column, isEditing = _a.isEditing, onEditStart = _a.onEditStart, onEditEnd = _a.onEditEnd, submitEdit = _a.submitEdit, ariaLabels = _a.ariaLabels, isVisualRefresh = _a.isVisualRefresh, rest = __rest(_a, ["className", "item", "column", "isEditing", "onEditStart", "onEditEnd", "submitEdit", "ariaLabels", "isVisualRefresh"]);
24
+ var editActivateRef = useRef(null);
25
+ var cellRef = useRef(null);
26
+ var focusVisible = useFocusVisible();
27
+ var _c = useStableScrollPosition(cellRef), storeScrollPosition = _c.storeScrollPosition, restoreScrollPosition = _c.restoreScrollPosition;
28
+ var handleEditStart = function () {
29
+ storeScrollPosition();
30
+ if (!isEditing) {
31
+ onEditStart();
32
+ }
33
+ };
34
+ var scheduleRestoreScrollPosition = useCallback(function () { return setTimeout(restoreScrollPosition, 0); }, [restoreScrollPosition]);
35
+ var tdNativeAttributes = __assign(__assign({}, focusVisible), { onFocus: scheduleRestoreScrollPosition, 'data-inline-editing-active': isEditing.toString() });
36
+ useEffectOnUpdate(function () {
37
+ if (!isEditing && editActivateRef.current) {
38
+ editActivateRef.current.focus({ preventScroll: true });
39
+ }
40
+ var timer = scheduleRestoreScrollPosition();
41
+ return function () { return clearTimeout(timer); };
42
+ }, [isEditing, scheduleRestoreScrollPosition]);
43
+ return (React.createElement(TableTdElement, __assign({}, rest, { nativeAttributes: tdNativeAttributes, className: clsx(className, styles['body-cell-editable'], isEditing && styles['body-cell-edit-active'], isVisualRefresh && styles['is-visual-refresh']), onClick: handleEditStart, ref: cellRef }), isEditing ? (React.createElement(InlineEditor, { ariaLabels: ariaLabels, column: column, item: item, onEditEnd: onEditEnd, submitEdit: submitEdit !== null && submitEdit !== void 0 ? submitEdit : submitHandlerFallback, __onRender: restoreScrollPosition })) : (React.createElement(React.Fragment, null,
44
+ column.cell(item, readonlyState),
45
+ React.createElement("span", { className: styles['body-cell-editor'] },
46
+ React.createElement(Button, { __hideFocusOutline: true, __internalRootRef: editActivateRef, ariaLabel: (_b = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.activateEditLabel) === null || _b === void 0 ? void 0 : _b.call(ariaLabels, column), formAction: "none", iconName: "edit", variant: "inline-icon" }))))));
12
47
  }
13
- export function TableBodyCellContent(_a) {
14
- var item = _a.item, column = _a.column, rest = __rest(_a, ["item", "column"]);
15
- return React.createElement(TableBodyCell, __assign({}, rest), column.cell(item));
48
+ export function TableBodyCell(_a) {
49
+ var isEditable = _a.isEditable, rest = __rest(_a, ["isEditable"]);
50
+ if (isEditable || rest.isEditing) {
51
+ return React.createElement(TableCellEditable, __assign({}, rest));
52
+ }
53
+ var column = rest.column, item = rest.item;
54
+ return React.createElement(TableTdElement, __assign({}, rest), column.cell(item, readonlyState));
16
55
  }
17
56
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/body-cell/index.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAkBxE,MAAM,UAAU,aAAa,CAAC,EAcT;QAbnB,SAAS,eAAA,EACT,KAAK,WAAA,EACL,QAAQ,cAAA,EACR,SAAS,eAAA,EACT,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,UAAU,gBAAA,EACV,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,SAAS,eAAA;IAET,IAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;IAE3C,OAAO,CACL,4BACE,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,IAAI,CACb,SAAS,EACT,MAAM,CAAC,WAAW,CAAC,EACnB,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC,EACrC,UAAU,IAAI,MAAM,CAAC,qBAAqB,CAAC,EAC3C,SAAS,IAAI,MAAM,CAAC,oBAAoB,CAAC,EACzC,UAAU,IAAI,MAAM,CAAC,oBAAoB,CAAC,EAC1C,cAAc,IAAI,MAAM,CAAC,yBAAyB,CAAC,EACnD,cAAc,IAAI,MAAM,CAAC,yBAAyB,CAAC,EACnD,CAAC,SAAS,IAAI,WAAW,IAAI,MAAM,CAAC,kBAAkB,CAAC,EACvD,WAAW,IAAI,MAAM,CAAC,kBAAkB,CAAC,EACzC,eAAe,IAAI,MAAM,CAAC,mBAAmB,CAAC,EAC9C,YAAY,IAAI,MAAM,CAAC,eAAe,CAAC,EACvC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,CAClC,IAEA,QAAQ,CACN,CACN,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,oBAAoB,CAAW,EAA8D;IAA5D,IAAA,IAAI,UAAA,EAAE,MAAM,YAAA,EAAK,IAAI,cAAvB,kBAAyB,CAAF;IACpE,OAAO,oBAAC,aAAa,eAAK,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAiB,CAAC;AACtE,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport clsx from 'clsx';\nimport styles from './styles.css.js';\nimport React from 'react';\nimport { TableProps } from '../interfaces';\nimport { useVisualRefresh } from '../../internal/hooks/use-visual-mode';\n\ninterface TableBodyCellProps {\n className?: string;\n style?: React.CSSProperties;\n wrapLines: boolean | undefined;\n isFirstRow: boolean;\n isLastRow: boolean;\n isEvenRow?: boolean;\n stripedRows?: boolean;\n isSelected: boolean;\n isNextSelected: boolean;\n isPrevSelected: boolean;\n children?: React.ReactNode;\n hasSelection?: boolean;\n hasFooter?: boolean;\n}\n\nexport function TableBodyCell({\n className,\n style,\n children,\n wrapLines,\n isFirstRow,\n isLastRow,\n isSelected,\n isNextSelected,\n isPrevSelected,\n isEvenRow,\n stripedRows,\n hasSelection,\n hasFooter,\n}: TableBodyCellProps) {\n const isVisualRefresh = useVisualRefresh();\n\n return (\n <td\n style={style}\n className={clsx(\n className,\n styles['body-cell'],\n wrapLines && styles['body-cell-wrap'],\n isFirstRow && styles['body-cell-first-row'],\n isLastRow && styles['body-cell-last-row'],\n isSelected && styles['body-cell-selected'],\n isNextSelected && styles['body-cell-next-selected'],\n isPrevSelected && styles['body-cell-prev-selected'],\n !isEvenRow && stripedRows && styles['body-cell-shaded'],\n stripedRows && styles['has-striped-rows'],\n isVisualRefresh && styles['is-visual-refresh'],\n hasSelection && styles['has-selection'],\n hasFooter && styles['has-footer']\n )}\n >\n {children}\n </td>\n );\n}\n\ninterface TableBodyCellContentProps<ItemType> extends TableBodyCellProps {\n column: TableProps.ColumnDefinition<ItemType>;\n item: ItemType;\n}\n\nexport function TableBodyCellContent<ItemType>({ item, column, ...rest }: TableBodyCellContentProps<ItemType>) {\n return <TableBodyCell {...rest}>{column.cell(item)}</TableBodyCell>;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table/body-cell/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 clsx from 'clsx';\nimport styles from './styles.css.js';\nimport React, { useCallback, useRef } from 'react';\nimport useFocusVisible from '../../internal/hooks/focus-visible';\nimport { useEffectOnUpdate } from '../../internal/hooks/use-effect-on-update';\nimport Button from '../../button/internal';\nimport { ButtonProps } from '../../button/interfaces';\nimport { TableProps } from '../interfaces';\nimport { TableTdElement, TableTdElementProps } from './td-element';\nimport { InlineEditor } from './inline-editor';\nimport { useStableScrollPosition } from './use-stable-scroll-position';\n\nconst readonlyState = Object.freeze({\n isEditing: false,\n currentValue: undefined,\n setValue: () => {},\n});\n\nconst submitHandlerFallback = () => {\n throw new Error('The function `handleSubmit` is required for editable columns');\n};\n\ninterface TableBodyCellProps<ItemType, ValueType> extends TableTdElementProps {\n column: TableProps.EditableColumnDefinition<ItemType, ValueType>;\n item: ItemType;\n isEditing: boolean;\n onEditStart: () => void;\n onEditEnd: () => void;\n submitEdit?: TableProps.SubmitEditFunction<ItemType, ValueType>;\n ariaLabels: TableProps['ariaLabels'];\n}\n\nfunction TableCellEditable<ItemType, ValueType>({\n className,\n item,\n column,\n isEditing,\n onEditStart,\n onEditEnd,\n submitEdit,\n ariaLabels,\n isVisualRefresh,\n ...rest\n}: TableBodyCellProps<ItemType, ValueType>) {\n const editActivateRef = useRef<ButtonProps.Ref>(null);\n const cellRef = useRef<HTMLTableCellElement>(null);\n const focusVisible = useFocusVisible();\n const { storeScrollPosition, restoreScrollPosition } = useStableScrollPosition(cellRef);\n\n const handleEditStart = () => {\n storeScrollPosition();\n if (!isEditing) {\n onEditStart();\n }\n };\n\n const scheduleRestoreScrollPosition = useCallback(\n () => setTimeout(restoreScrollPosition, 0),\n [restoreScrollPosition]\n );\n\n const tdNativeAttributes = {\n ...(focusVisible as Record<string, string>),\n onFocus: scheduleRestoreScrollPosition,\n 'data-inline-editing-active': isEditing.toString(),\n };\n\n useEffectOnUpdate(() => {\n if (!isEditing && editActivateRef.current) {\n editActivateRef.current.focus({ preventScroll: true });\n }\n const timer = scheduleRestoreScrollPosition();\n return () => clearTimeout(timer);\n }, [isEditing, scheduleRestoreScrollPosition]);\n\n return (\n <TableTdElement\n {...rest}\n nativeAttributes={tdNativeAttributes as TableTdElementProps['nativeAttributes']}\n className={clsx(\n className,\n styles['body-cell-editable'],\n isEditing && styles['body-cell-edit-active'],\n isVisualRefresh && styles['is-visual-refresh']\n )}\n onClick={handleEditStart}\n ref={cellRef}\n >\n {isEditing ? (\n <InlineEditor\n ariaLabels={ariaLabels}\n column={column}\n item={item}\n onEditEnd={onEditEnd}\n submitEdit={submitEdit ?? submitHandlerFallback}\n __onRender={restoreScrollPosition}\n />\n ) : (\n <>\n {column.cell(item, readonlyState)}\n <span className={styles['body-cell-editor']}>\n <Button\n __hideFocusOutline={true}\n __internalRootRef={editActivateRef}\n ariaLabel={ariaLabels?.activateEditLabel?.(column)}\n formAction=\"none\"\n iconName=\"edit\"\n variant=\"inline-icon\"\n />\n </span>\n </>\n )}\n </TableTdElement>\n );\n}\n\nexport function TableBodyCell<ItemType, ValueType>({\n isEditable,\n ...rest\n}: TableBodyCellProps<ItemType, ValueType> & { isEditable: boolean }) {\n if (isEditable || rest.isEditing) {\n return <TableCellEditable {...rest} />;\n }\n const { column, item } = rest;\n return <TableTdElement {...rest}>{column.cell(item, readonlyState)}</TableTdElement>;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { TableProps } from '../interfaces';
2
+ interface InlineEditorProps<ItemType, ValueType> {
3
+ ariaLabels: TableProps['ariaLabels'];
4
+ column: TableProps.EditableColumnDefinition<ItemType, ValueType>;
5
+ item: ItemType;
6
+ onEditEnd: () => void;
7
+ submitEdit: TableProps.SubmitEditFunction<ItemType, ValueType>;
8
+ __onRender?: () => void;
9
+ }
10
+ export declare function InlineEditor<ItemType, ValueType>({ ariaLabels, item, column, onEditEnd, submitEdit, __onRender, }: InlineEditorProps<ItemType, ValueType>): JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=inline-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-editor.d.ts","sourceRoot":"","sources":["../../../../src/table/body-cell/inline-editor.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,UAAU,iBAAiB,CAAC,QAAQ,EAAE,SAAS;IAC7C,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,EAChD,UAAU,EACV,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,eAqGxC"}
@@ -0,0 +1,88 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import React, { useEffect, useState } from 'react';
5
+ import Button from '../../button/internal';
6
+ import FormField from '../../form-field/internal';
7
+ import SpaceBetween from '../../space-between/internal';
8
+ import { useClickAway } from './click-away';
9
+ import styles from './styles.css.js';
10
+ // A function that does nothing
11
+ var noop = function () { return undefined; };
12
+ export function InlineEditor(_a) {
13
+ var _b, _c;
14
+ var ariaLabels = _a.ariaLabels, item = _a.item, column = _a.column, onEditEnd = _a.onEditEnd, submitEdit = _a.submitEdit, __onRender = _a.__onRender;
15
+ var _d = useState(false), currentEditLoading = _d[0], setCurrentEditLoading = _d[1];
16
+ var _e = useState(), currentEditValue = _e[0], setCurrentEditValue = _e[1];
17
+ var cellContext = {
18
+ isEditing: true,
19
+ currentValue: currentEditValue,
20
+ setValue: setCurrentEditValue
21
+ };
22
+ function finishEdit(cancel) {
23
+ if (cancel === void 0) { cancel = false; }
24
+ if (!cancel) {
25
+ setCurrentEditValue(undefined);
26
+ }
27
+ onEditEnd();
28
+ }
29
+ function onSubmitClick(evt) {
30
+ return __awaiter(this, void 0, void 0, function () {
31
+ var e_1;
32
+ return __generator(this, function (_a) {
33
+ switch (_a.label) {
34
+ case 0:
35
+ evt.preventDefault();
36
+ if (currentEditValue === undefined) {
37
+ finishEdit();
38
+ return [2 /*return*/];
39
+ }
40
+ setCurrentEditLoading(true);
41
+ _a.label = 1;
42
+ case 1:
43
+ _a.trys.push([1, 3, , 4]);
44
+ return [4 /*yield*/, submitEdit(item, column, currentEditValue)];
45
+ case 2:
46
+ _a.sent();
47
+ setCurrentEditLoading(false);
48
+ finishEdit();
49
+ return [3 /*break*/, 4];
50
+ case 3:
51
+ e_1 = _a.sent();
52
+ setCurrentEditLoading(false);
53
+ return [3 /*break*/, 4];
54
+ case 4: return [2 /*return*/];
55
+ }
56
+ });
57
+ });
58
+ }
59
+ function onCancel() {
60
+ if (currentEditLoading) {
61
+ return;
62
+ }
63
+ finishEdit(true);
64
+ }
65
+ function handleEscape(event) {
66
+ if (event.key === 'Escape') {
67
+ onCancel();
68
+ }
69
+ }
70
+ var clickAwayRef = useClickAway(onCancel);
71
+ useEffect(function () {
72
+ if (__onRender) {
73
+ var timer_1 = setTimeout(__onRender, 1);
74
+ return function () { return clearTimeout(timer_1); };
75
+ }
76
+ }, [__onRender]);
77
+ // asserting non-undefined editConfig here because this component is unreachable otherwise
78
+ var _f = column.editConfig, _g = _f.ariaLabel, ariaLabel = _g === void 0 ? undefined : _g, _h = _f.validation, validation = _h === void 0 ? noop : _h, errorIconAriaLabel = _f.errorIconAriaLabel;
79
+ return (React.createElement("form", { ref: clickAwayRef, onSubmit: onSubmitClick, onKeyDown: handleEscape, className: styles['body-cell-editor-form'] },
80
+ React.createElement(FormField, { stretch: true, label: ariaLabel, __hideLabel: true, __disableGutters: true, __useReactAutofocus: true, i18nStrings: { errorIconAriaLabel: errorIconAriaLabel }, errorText: validation(item, currentEditValue) },
81
+ React.createElement("div", { className: styles['body-cell-editor-row'] },
82
+ column.cell(item, cellContext),
83
+ React.createElement("span", { className: styles['body-cell-editor-controls'] },
84
+ React.createElement(SpaceBetween, { direction: "horizontal", size: "xxs" },
85
+ !currentEditLoading ? (React.createElement(Button, { ariaLabel: (_b = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.cancelEditLabel) === null || _b === void 0 ? void 0 : _b.call(ariaLabels, column), formAction: "none", iconName: "close", variant: "inline-icon", onClick: onCancel })) : null,
86
+ React.createElement(Button, { ariaLabel: (_c = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.submitEditLabel) === null || _c === void 0 ? void 0 : _c.call(ariaLabels, column), formAction: "submit", iconName: "check", variant: "inline-icon", loading: currentEditLoading })))))));
87
+ }
88
+ //# sourceMappingURL=inline-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-editor.js","sourceRoot":"","sources":["../../../../src/table/body-cell/inline-editor.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, { useEffect, useState } from 'react';\nimport Button from '../../button/internal';\nimport FormField from '../../form-field/internal';\nimport SpaceBetween from '../../space-between/internal';\nimport { useClickAway } from './click-away';\nimport { TableProps } from '../interfaces';\nimport styles from './styles.css.js';\nimport { Optional } from '../../internal/types';\n\n// A function that does nothing\nconst noop = () => undefined;\n\ninterface InlineEditorProps<ItemType, ValueType> {\n ariaLabels: TableProps['ariaLabels'];\n column: TableProps.EditableColumnDefinition<ItemType, ValueType>;\n item: ItemType;\n onEditEnd: () => void;\n submitEdit: TableProps.SubmitEditFunction<ItemType, ValueType>;\n __onRender?: () => void;\n}\n\nexport function InlineEditor<ItemType, ValueType>({\n ariaLabels,\n item,\n column,\n onEditEnd,\n submitEdit,\n __onRender,\n}: InlineEditorProps<ItemType, ValueType>) {\n const [currentEditLoading, setCurrentEditLoading] = useState(false);\n const [currentEditValue, setCurrentEditValue] = useState<Optional<ValueType>>();\n\n const cellContext = {\n isEditing: true,\n currentValue: currentEditValue,\n setValue: setCurrentEditValue,\n };\n\n function finishEdit(cancel = false) {\n if (!cancel) {\n setCurrentEditValue(undefined);\n }\n onEditEnd();\n }\n\n async function onSubmitClick(evt: React.FormEvent) {\n evt.preventDefault();\n if (currentEditValue === undefined) {\n finishEdit();\n return;\n }\n\n setCurrentEditLoading(true);\n try {\n await submitEdit(item, column, currentEditValue);\n setCurrentEditLoading(false);\n finishEdit();\n } catch (e) {\n setCurrentEditLoading(false);\n }\n }\n\n function onCancel() {\n if (currentEditLoading) {\n return;\n }\n finishEdit(true);\n }\n\n function handleEscape(event: React.KeyboardEvent): void {\n if (event.key === 'Escape') {\n onCancel();\n }\n }\n\n const clickAwayRef = useClickAway(onCancel);\n\n useEffect(() => {\n if (__onRender) {\n const timer = setTimeout(__onRender, 1);\n return () => clearTimeout(timer);\n }\n }, [__onRender]);\n\n // asserting non-undefined editConfig here because this component is unreachable otherwise\n const { ariaLabel = undefined, validation = noop, errorIconAriaLabel } = column.editConfig!;\n\n return (\n <form\n ref={clickAwayRef}\n onSubmit={onSubmitClick}\n onKeyDown={handleEscape}\n className={styles['body-cell-editor-form']}\n >\n <FormField\n stretch={true}\n label={ariaLabel}\n __hideLabel={true}\n __disableGutters={true}\n __useReactAutofocus={true}\n i18nStrings={{ errorIconAriaLabel }}\n errorText={validation(item, currentEditValue)}\n >\n <div className={styles['body-cell-editor-row']}>\n {column.cell(item, cellContext)}\n <span className={styles['body-cell-editor-controls']}>\n <SpaceBetween direction=\"horizontal\" size=\"xxs\">\n {!currentEditLoading ? (\n <Button\n ariaLabel={ariaLabels?.cancelEditLabel?.(column)}\n formAction=\"none\"\n iconName=\"close\"\n variant=\"inline-icon\"\n onClick={onCancel}\n />\n ) : null}\n <Button\n ariaLabel={ariaLabels?.submitEditLabel?.(column)}\n formAction=\"submit\"\n iconName=\"check\"\n variant=\"inline-icon\"\n loading={currentEditLoading}\n />\n </SpaceBetween>\n </span>\n </div>\n </FormField>\n </form>\n );\n}\n"]}
@@ -1,17 +1,23 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "body-cell": "awsui_body-cell_c6tup_9o7yk_9",
5
- "body-cell-wrap": "awsui_body-cell-wrap_c6tup_9o7yk_18",
6
- "body-cell-first-row": "awsui_body-cell-first-row_c6tup_9o7yk_30",
7
- "body-cell-last-row": "awsui_body-cell-last-row_c6tup_9o7yk_33",
8
- "body-cell-selected": "awsui_body-cell-selected_c6tup_9o7yk_33",
9
- "has-footer": "awsui_has-footer_c6tup_9o7yk_33",
10
- "body-cell-shaded": "awsui_body-cell-shaded_c6tup_9o7yk_43",
11
- "body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_9o7yk_65",
12
- "body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_9o7yk_69",
13
- "is-visual-refresh": "awsui_is-visual-refresh_c6tup_9o7yk_98",
14
- "has-selection": "awsui_has-selection_c6tup_9o7yk_114",
15
- "has-striped-rows": "awsui_has-striped-rows_c6tup_9o7yk_117"
4
+ "body-cell": "awsui_body-cell_c6tup_17cg6_93",
5
+ "body-cell-wrap": "awsui_body-cell-wrap_c6tup_17cg6_102",
6
+ "is-visual-refresh": "awsui_is-visual-refresh_c6tup_17cg6_114",
7
+ "has-striped-rows": "awsui_has-striped-rows_c6tup_17cg6_126",
8
+ "body-cell-edit-active": "awsui_body-cell-edit-active_c6tup_17cg6_129",
9
+ "body-cell-editable": "awsui_body-cell-editable_c6tup_17cg6_129",
10
+ "has-selection": "awsui_has-selection_c6tup_17cg6_135",
11
+ "body-cell-first-row": "awsui_body-cell-first-row_c6tup_17cg6_141",
12
+ "body-cell-last-row": "awsui_body-cell-last-row_c6tup_17cg6_144",
13
+ "body-cell-selected": "awsui_body-cell-selected_c6tup_17cg6_144",
14
+ "has-footer": "awsui_has-footer_c6tup_17cg6_144",
15
+ "body-cell-shaded": "awsui_body-cell-shaded_c6tup_17cg6_154",
16
+ "body-cell-next-selected": "awsui_body-cell-next-selected_c6tup_17cg6_176",
17
+ "body-cell-prev-selected": "awsui_body-cell-prev-selected_c6tup_17cg6_180",
18
+ "body-cell-editor": "awsui_body-cell-editor_c6tup_17cg6_204",
19
+ "body-cell-editor-form": "awsui_body-cell-editor-form_c6tup_17cg6_214",
20
+ "body-cell-editor-row": "awsui_body-cell-editor-row_c6tup_17cg6_223",
21
+ "body-cell-editor-controls": "awsui_body-cell-editor-controls_c6tup_17cg6_233"
16
22
  };
17
23