@salt-ds/lab 1.0.0-alpha.5 → 1.0.0-alpha.7

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 (182) hide show
  1. package/dist-cjs/packages/lab/src/banner/Banner.css.js +1 -1
  2. package/dist-cjs/packages/lab/src/calendar/internal/CalendarNavigation.js +1 -0
  3. package/dist-cjs/packages/lab/src/calendar/internal/CalendarNavigation.js.map +1 -1
  4. package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuList.js +2 -2
  5. package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuList.js.map +1 -1
  6. package/dist-cjs/packages/lab/src/combo-box/ComboBox.js +1 -0
  7. package/dist-cjs/packages/lab/src/combo-box/ComboBox.js.map +1 -1
  8. package/dist-cjs/packages/lab/src/combo-box-deprecated/ComboBoxDeprecated.js +1 -0
  9. package/dist-cjs/packages/lab/src/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  10. package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
  11. package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  12. package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js +3 -2
  13. package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  14. package/dist-cjs/packages/lab/src/common-hooks/useCollectionItems.js +2 -2
  15. package/dist-cjs/packages/lab/src/common-hooks/useCollectionItems.js.map +1 -1
  16. package/dist-cjs/packages/lab/src/dropdown/DropdownBase.js +2 -2
  17. package/dist-cjs/packages/lab/src/dropdown/DropdownBase.js.map +1 -1
  18. package/dist-cjs/packages/lab/src/dropdown/DropdownButton.js +2 -1
  19. package/dist-cjs/packages/lab/src/dropdown/DropdownButton.js.map +1 -1
  20. package/dist-cjs/packages/lab/src/dropdown/useDropdownBase.js +1 -0
  21. package/dist-cjs/packages/lab/src/dropdown/useDropdownBase.js.map +1 -1
  22. package/dist-cjs/packages/lab/src/file-drop-zone/FileDropZone.css.js +1 -1
  23. package/dist-cjs/packages/lab/src/form-field/FormField.css.js +1 -1
  24. package/dist-cjs/packages/lab/src/form-field/FormField.js +1 -0
  25. package/dist-cjs/packages/lab/src/form-field/FormField.js.map +1 -1
  26. package/dist-cjs/packages/lab/src/form-field/FormHelperText.css.js +1 -1
  27. package/dist-cjs/packages/lab/src/form-field/FormHelperText.js +1 -1
  28. package/dist-cjs/packages/lab/src/form-field/FormHelperText.js.map +1 -1
  29. package/dist-cjs/packages/lab/src/form-field-context/FormFieldContextNext.js +13 -0
  30. package/dist-cjs/packages/lab/src/form-field-context/FormFieldContextNext.js.map +1 -0
  31. package/dist-cjs/packages/lab/src/form-field-context/useFormFieldPropsNext.js +13 -0
  32. package/dist-cjs/packages/lab/src/form-field-context/useFormFieldPropsNext.js.map +1 -0
  33. package/dist-cjs/packages/lab/src/form-field-next/FormFieldControlWrapper.css.js +9 -0
  34. package/dist-cjs/packages/lab/src/form-field-next/FormFieldControlWrapper.css.js.map +1 -0
  35. package/dist-cjs/packages/lab/src/form-field-next/FormFieldControlWrapper.js +16 -0
  36. package/dist-cjs/packages/lab/src/form-field-next/FormFieldControlWrapper.js.map +1 -0
  37. package/dist-cjs/packages/lab/src/form-field-next/FormFieldHelperText.css.js +9 -0
  38. package/dist-cjs/packages/lab/src/form-field-next/FormFieldHelperText.css.js.map +1 -0
  39. package/dist-cjs/packages/lab/src/form-field-next/FormFieldHelperText.js +47 -0
  40. package/dist-cjs/packages/lab/src/form-field-next/FormFieldHelperText.js.map +1 -0
  41. package/dist-cjs/packages/lab/src/form-field-next/FormFieldLabel.css.js +9 -0
  42. package/dist-cjs/packages/lab/src/form-field-next/FormFieldLabel.css.js.map +1 -0
  43. package/dist-cjs/packages/lab/src/form-field-next/FormFieldLabel.js +32 -0
  44. package/dist-cjs/packages/lab/src/form-field-next/FormFieldLabel.js.map +1 -0
  45. package/dist-cjs/packages/lab/src/form-field-next/FormFieldNext.css.js +9 -0
  46. package/dist-cjs/packages/lab/src/form-field-next/FormFieldNext.css.js.map +1 -0
  47. package/dist-cjs/packages/lab/src/form-field-next/FormFieldNext.js +57 -0
  48. package/dist-cjs/packages/lab/src/form-field-next/FormFieldNext.js.map +1 -0
  49. package/dist-cjs/packages/lab/src/index.js +14 -0
  50. package/dist-cjs/packages/lab/src/index.js.map +1 -1
  51. package/dist-cjs/packages/lab/src/input/Input.js +1 -0
  52. package/dist-cjs/packages/lab/src/input/Input.js.map +1 -1
  53. package/dist-cjs/packages/lab/src/input-next/InputNext.css.js +9 -0
  54. package/dist-cjs/packages/lab/src/input-next/InputNext.css.js.map +1 -0
  55. package/dist-cjs/packages/lab/src/input-next/InputNext.js +136 -0
  56. package/dist-cjs/packages/lab/src/input-next/InputNext.js.map +1 -0
  57. package/dist-cjs/packages/lab/src/overlay/useOverlay.js +5 -4
  58. package/dist-cjs/packages/lab/src/overlay/useOverlay.js.map +1 -1
  59. package/dist-cjs/packages/lab/src/query-input/internal/QueryInputBody.js +1 -0
  60. package/dist-cjs/packages/lab/src/query-input/internal/QueryInputBody.js.map +1 -1
  61. package/dist-cjs/packages/lab/src/query-input/internal/ValueSelector.js +2 -2
  62. package/dist-cjs/packages/lab/src/query-input/internal/ValueSelector.js.map +1 -1
  63. package/dist-cjs/packages/lab/src/status-adornment/ErrorAdornment.js +24 -0
  64. package/dist-cjs/packages/lab/src/status-adornment/ErrorAdornment.js.map +1 -0
  65. package/dist-cjs/packages/lab/src/status-adornment/StatusAdornment.css.js +9 -0
  66. package/dist-cjs/packages/lab/src/status-adornment/StatusAdornment.css.js.map +1 -0
  67. package/dist-cjs/packages/lab/src/status-adornment/StatusAdornment.js +39 -0
  68. package/dist-cjs/packages/lab/src/status-adornment/StatusAdornment.js.map +1 -0
  69. package/dist-cjs/packages/lab/src/status-adornment/SuccessAdornment.js +24 -0
  70. package/dist-cjs/packages/lab/src/status-adornment/SuccessAdornment.js.map +1 -0
  71. package/dist-cjs/packages/lab/src/status-adornment/WarningAdornment.js +22 -0
  72. package/dist-cjs/packages/lab/src/status-adornment/WarningAdornment.js.map +1 -0
  73. package/dist-cjs/packages/lab/src/stepper-input/internal/useActivationIndicatorPosition.js +2 -0
  74. package/dist-cjs/packages/lab/src/stepper-input/internal/useActivationIndicatorPosition.js.map +1 -1
  75. package/dist-cjs/packages/lab/src/switch/Switch.js +1 -0
  76. package/dist-cjs/packages/lab/src/switch/Switch.js.map +1 -1
  77. package/dist-cjs/packages/lab/src/tabs/Tabstrip.js +1 -0
  78. package/dist-cjs/packages/lab/src/tabs/Tabstrip.js.map +1 -1
  79. package/dist-cjs/packages/lab/src/tokenized-input/useTokenizedInput.js +1 -0
  80. package/dist-cjs/packages/lab/src/tokenized-input/useTokenizedInput.js.map +1 -1
  81. package/dist-cjs/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js +1 -0
  82. package/dist-cjs/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  83. package/dist-es/packages/lab/src/banner/Banner.css.js +1 -1
  84. package/dist-es/packages/lab/src/calendar/internal/CalendarNavigation.js +1 -0
  85. package/dist-es/packages/lab/src/calendar/internal/CalendarNavigation.js.map +1 -1
  86. package/dist-es/packages/lab/src/cascading-menu/CascadingMenuList.js +2 -2
  87. package/dist-es/packages/lab/src/cascading-menu/CascadingMenuList.js.map +1 -1
  88. package/dist-es/packages/lab/src/combo-box/ComboBox.js +1 -0
  89. package/dist-es/packages/lab/src/combo-box/ComboBox.js.map +1 -1
  90. package/dist-es/packages/lab/src/combo-box-deprecated/ComboBoxDeprecated.js +1 -0
  91. package/dist-es/packages/lab/src/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  92. package/dist-es/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
  93. package/dist-es/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  94. package/dist-es/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js +3 -2
  95. package/dist-es/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  96. package/dist-es/packages/lab/src/common-hooks/useCollectionItems.js +2 -2
  97. package/dist-es/packages/lab/src/common-hooks/useCollectionItems.js.map +1 -1
  98. package/dist-es/packages/lab/src/dropdown/DropdownBase.js +2 -2
  99. package/dist-es/packages/lab/src/dropdown/DropdownBase.js.map +1 -1
  100. package/dist-es/packages/lab/src/dropdown/DropdownButton.js +2 -1
  101. package/dist-es/packages/lab/src/dropdown/DropdownButton.js.map +1 -1
  102. package/dist-es/packages/lab/src/dropdown/useDropdownBase.js +1 -0
  103. package/dist-es/packages/lab/src/dropdown/useDropdownBase.js.map +1 -1
  104. package/dist-es/packages/lab/src/file-drop-zone/FileDropZone.css.js +1 -1
  105. package/dist-es/packages/lab/src/form-field/FormField.css.js +1 -1
  106. package/dist-es/packages/lab/src/form-field/FormField.js +1 -0
  107. package/dist-es/packages/lab/src/form-field/FormField.js.map +1 -1
  108. package/dist-es/packages/lab/src/form-field/FormHelperText.css.js +1 -1
  109. package/dist-es/packages/lab/src/form-field/FormHelperText.js +1 -1
  110. package/dist-es/packages/lab/src/form-field/FormHelperText.js.map +1 -1
  111. package/dist-es/packages/lab/src/form-field-context/FormFieldContextNext.js +9 -0
  112. package/dist-es/packages/lab/src/form-field-context/FormFieldContextNext.js.map +1 -0
  113. package/dist-es/packages/lab/src/form-field-context/useFormFieldPropsNext.js +9 -0
  114. package/dist-es/packages/lab/src/form-field-context/useFormFieldPropsNext.js.map +1 -0
  115. package/dist-es/packages/lab/src/form-field-next/FormFieldControlWrapper.css.js +7 -0
  116. package/dist-es/packages/lab/src/form-field-next/FormFieldControlWrapper.css.js.map +1 -0
  117. package/dist-es/packages/lab/src/form-field-next/FormFieldControlWrapper.js +12 -0
  118. package/dist-es/packages/lab/src/form-field-next/FormFieldControlWrapper.js.map +1 -0
  119. package/dist-es/packages/lab/src/form-field-next/FormFieldHelperText.css.js +7 -0
  120. package/dist-es/packages/lab/src/form-field-next/FormFieldHelperText.css.js.map +1 -0
  121. package/dist-es/packages/lab/src/form-field-next/FormFieldHelperText.js +39 -0
  122. package/dist-es/packages/lab/src/form-field-next/FormFieldHelperText.js.map +1 -0
  123. package/dist-es/packages/lab/src/form-field-next/FormFieldLabel.css.js +7 -0
  124. package/dist-es/packages/lab/src/form-field-next/FormFieldLabel.css.js.map +1 -0
  125. package/dist-es/packages/lab/src/form-field-next/FormFieldLabel.js +28 -0
  126. package/dist-es/packages/lab/src/form-field-next/FormFieldLabel.js.map +1 -0
  127. package/dist-es/packages/lab/src/form-field-next/FormFieldNext.css.js +7 -0
  128. package/dist-es/packages/lab/src/form-field-next/FormFieldNext.css.js.map +1 -0
  129. package/dist-es/packages/lab/src/form-field-next/FormFieldNext.js +53 -0
  130. package/dist-es/packages/lab/src/form-field-next/FormFieldNext.js.map +1 -0
  131. package/dist-es/packages/lab/src/index.js +7 -0
  132. package/dist-es/packages/lab/src/index.js.map +1 -1
  133. package/dist-es/packages/lab/src/input/Input.js +1 -0
  134. package/dist-es/packages/lab/src/input/Input.js.map +1 -1
  135. package/dist-es/packages/lab/src/input-next/InputNext.css.js +7 -0
  136. package/dist-es/packages/lab/src/input-next/InputNext.css.js.map +1 -0
  137. package/dist-es/packages/lab/src/input-next/InputNext.js +132 -0
  138. package/dist-es/packages/lab/src/input-next/InputNext.js.map +1 -0
  139. package/dist-es/packages/lab/src/overlay/useOverlay.js +5 -4
  140. package/dist-es/packages/lab/src/overlay/useOverlay.js.map +1 -1
  141. package/dist-es/packages/lab/src/query-input/internal/QueryInputBody.js +1 -0
  142. package/dist-es/packages/lab/src/query-input/internal/QueryInputBody.js.map +1 -1
  143. package/dist-es/packages/lab/src/query-input/internal/ValueSelector.js +2 -2
  144. package/dist-es/packages/lab/src/query-input/internal/ValueSelector.js.map +1 -1
  145. package/dist-es/packages/lab/src/status-adornment/ErrorAdornment.js +20 -0
  146. package/dist-es/packages/lab/src/status-adornment/ErrorAdornment.js.map +1 -0
  147. package/dist-es/packages/lab/src/status-adornment/StatusAdornment.css.js +7 -0
  148. package/dist-es/packages/lab/src/status-adornment/StatusAdornment.css.js.map +1 -0
  149. package/dist-es/packages/lab/src/status-adornment/StatusAdornment.js +35 -0
  150. package/dist-es/packages/lab/src/status-adornment/StatusAdornment.js.map +1 -0
  151. package/dist-es/packages/lab/src/status-adornment/SuccessAdornment.js +20 -0
  152. package/dist-es/packages/lab/src/status-adornment/SuccessAdornment.js.map +1 -0
  153. package/dist-es/packages/lab/src/status-adornment/WarningAdornment.js +18 -0
  154. package/dist-es/packages/lab/src/status-adornment/WarningAdornment.js.map +1 -0
  155. package/dist-es/packages/lab/src/stepper-input/internal/useActivationIndicatorPosition.js +2 -0
  156. package/dist-es/packages/lab/src/stepper-input/internal/useActivationIndicatorPosition.js.map +1 -1
  157. package/dist-es/packages/lab/src/switch/Switch.js +1 -0
  158. package/dist-es/packages/lab/src/switch/Switch.js.map +1 -1
  159. package/dist-es/packages/lab/src/tabs/Tabstrip.js +1 -0
  160. package/dist-es/packages/lab/src/tabs/Tabstrip.js.map +1 -1
  161. package/dist-es/packages/lab/src/tokenized-input/useTokenizedInput.js +1 -0
  162. package/dist-es/packages/lab/src/tokenized-input/useTokenizedInput.js.map +1 -1
  163. package/dist-es/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js +1 -0
  164. package/dist-es/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  165. package/dist-types/form-field/FormField.d.ts +2 -0
  166. package/dist-types/form-field-context/FormFieldContextNext.d.ts +9 -0
  167. package/dist-types/form-field-context/index.d.ts +2 -0
  168. package/dist-types/form-field-context/useFormFieldPropsNext.d.ts +2 -0
  169. package/dist-types/form-field-next/FormFieldControlWrapper.d.ts +3 -0
  170. package/dist-types/form-field-next/FormFieldHelperText.d.ts +4 -0
  171. package/dist-types/form-field-next/FormFieldLabel.d.ts +4 -0
  172. package/dist-types/form-field-next/FormFieldNext.d.ts +40 -0
  173. package/dist-types/form-field-next/index.d.ts +4 -0
  174. package/dist-types/index.d.ts +2 -0
  175. package/dist-types/input-next/InputNext.d.ts +41 -0
  176. package/dist-types/input-next/index.d.ts +1 -0
  177. package/dist-types/status-adornment/ErrorAdornment.d.ts +4 -0
  178. package/dist-types/status-adornment/StatusAdornment.d.ts +13 -0
  179. package/dist-types/status-adornment/SuccessAdornment.d.ts +4 -0
  180. package/dist-types/status-adornment/WarningAdornment.d.ts +4 -0
  181. package/dist-types/status-adornment/index.d.ts +1 -0
  182. package/package.json +4 -4
@@ -4,7 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var core = require('@salt-ds/core');
6
6
  require('../../form-field-context/FormFieldContext.js');
7
+ require('../../form-field-context/FormFieldContextNext.js');
7
8
  var useFormFieldProps = require('../../form-field-context/useFormFieldProps.js');
9
+ require('react');
8
10
 
9
11
  const refreshButtonWidth = {
10
12
  touch: 36,
@@ -1 +1 @@
1
- {"version":3,"file":"useActivationIndicatorPosition.js","sources":["../src/stepper-input/internal/useActivationIndicatorPosition.ts"],"sourcesContent":["import { useDensity, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useFormFieldProps } from \"../../form-field-context\";\nimport { MutableRefObject } from \"react\";\n\nconst refreshButtonWidth = {\n touch: 36,\n low: 28,\n medium: 24,\n high: 12,\n};\n\n// The activation indicator icon is absolutely positioned by FormField,\n// and must be offset to accommodate the end adornment added by Stepper Input.\n// Ideally, we should be able to provide an 'activationIndicator' class to FormField to\n// override its default positioning instead of directly repositioning it via its ref.\nexport function useActivationIndicatorPosition(\n adornmentRef: MutableRefObject<HTMLDivElement | null>,\n refreshButtonVisible: boolean\n) {\n const formFieldProps = useFormFieldProps();\n const { ref: formFieldRef } = formFieldProps;\n const density = useDensity();\n\n useIsomorphicLayoutEffect(() => {\n let offset;\n if (adornmentRef && adornmentRef.current !== null) {\n const marginAdjustment =\n density === \"high\" || density === \"medium\" ? 2 : 4;\n\n const secondaryButtonAdjustment = refreshButtonVisible\n ? 0\n : refreshButtonWidth[density];\n\n offset =\n adornmentRef.current.getBoundingClientRect().width -\n marginAdjustment -\n secondaryButtonAdjustment;\n }\n if (formFieldRef && formFieldRef.current && offset) {\n const activationIndicator = formFieldRef.current.getElementsByClassName(\n \"saltFormActivationIndicator-icon\"\n ) as HTMLCollectionOf<HTMLElement>;\n if (activationIndicator.length > 0) {\n activationIndicator[0].style.transform = `translateX(-${offset}px)`;\n }\n }\n });\n}\n"],"names":["useFormFieldProps","useDensity","useIsomorphicLayoutEffect"],"mappings":";;;;;;;;AAIA,MAAM,kBAAqB,GAAA;AAAA,EACzB,KAAO,EAAA,EAAA;AAAA,EACP,GAAK,EAAA,EAAA;AAAA,EACL,MAAQ,EAAA,EAAA;AAAA,EACR,IAAM,EAAA,EAAA;AACR,CAAA,CAAA;AAMgB,SAAA,8BAAA,CACd,cACA,oBACA,EAAA;AACA,EAAA,MAAM,iBAAiBA,mCAAkB,EAAA,CAAA;AACzC,EAAM,MAAA,EAAE,GAAK,EAAA,YAAA,EAAiB,GAAA,cAAA,CAAA;AAC9B,EAAA,MAAM,UAAUC,eAAW,EAAA,CAAA;AAE3B,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAI,IAAA,MAAA,CAAA;AACJ,IAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,OAAA,KAAY,IAAM,EAAA;AACjD,MAAA,MAAM,gBACJ,GAAA,OAAA,KAAY,MAAU,IAAA,OAAA,KAAY,WAAW,CAAI,GAAA,CAAA,CAAA;AAEnD,MAAM,MAAA,yBAAA,GAA4B,oBAC9B,GAAA,CAAA,GACA,kBAAmB,CAAA,OAAA,CAAA,CAAA;AAEvB,MAAA,MAAA,GACE,YAAa,CAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,QAC7C,gBACA,GAAA,yBAAA,CAAA;AAAA,KACJ;AACA,IAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,OAAA,IAAW,MAAQ,EAAA;AAClD,MAAM,MAAA,mBAAA,GAAsB,aAAa,OAAQ,CAAA,sBAAA;AAAA,QAC/C,kCAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AAClC,QAAoB,mBAAA,CAAA,CAAA,CAAA,CAAG,KAAM,CAAA,SAAA,GAAY,CAAe,YAAA,EAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AAAA,OAC1D;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"useActivationIndicatorPosition.js","sources":["../src/stepper-input/internal/useActivationIndicatorPosition.ts"],"sourcesContent":["import { useDensity, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useFormFieldProps } from \"../../form-field-context\";\nimport { MutableRefObject } from \"react\";\n\nconst refreshButtonWidth = {\n touch: 36,\n low: 28,\n medium: 24,\n high: 12,\n};\n\n// The activation indicator icon is absolutely positioned by FormField,\n// and must be offset to accommodate the end adornment added by Stepper Input.\n// Ideally, we should be able to provide an 'activationIndicator' class to FormField to\n// override its default positioning instead of directly repositioning it via its ref.\nexport function useActivationIndicatorPosition(\n adornmentRef: MutableRefObject<HTMLDivElement | null>,\n refreshButtonVisible: boolean\n) {\n const formFieldProps = useFormFieldProps();\n const { ref: formFieldRef } = formFieldProps;\n const density = useDensity();\n\n useIsomorphicLayoutEffect(() => {\n let offset;\n if (adornmentRef && adornmentRef.current !== null) {\n const marginAdjustment =\n density === \"high\" || density === \"medium\" ? 2 : 4;\n\n const secondaryButtonAdjustment = refreshButtonVisible\n ? 0\n : refreshButtonWidth[density];\n\n offset =\n adornmentRef.current.getBoundingClientRect().width -\n marginAdjustment -\n secondaryButtonAdjustment;\n }\n if (formFieldRef && formFieldRef.current && offset) {\n const activationIndicator = formFieldRef.current.getElementsByClassName(\n \"saltFormActivationIndicator-icon\"\n ) as HTMLCollectionOf<HTMLElement>;\n if (activationIndicator.length > 0) {\n activationIndicator[0].style.transform = `translateX(-${offset}px)`;\n }\n }\n });\n}\n"],"names":["useFormFieldProps","useDensity","useIsomorphicLayoutEffect"],"mappings":";;;;;;;;;;AAIA,MAAM,kBAAqB,GAAA;AAAA,EACzB,KAAO,EAAA,EAAA;AAAA,EACP,GAAK,EAAA,EAAA;AAAA,EACL,MAAQ,EAAA,EAAA;AAAA,EACR,IAAM,EAAA,EAAA;AACR,CAAA,CAAA;AAMgB,SAAA,8BAAA,CACd,cACA,oBACA,EAAA;AACA,EAAA,MAAM,iBAAiBA,mCAAkB,EAAA,CAAA;AACzC,EAAM,MAAA,EAAE,GAAK,EAAA,YAAA,EAAiB,GAAA,cAAA,CAAA;AAC9B,EAAA,MAAM,UAAUC,eAAW,EAAA,CAAA;AAE3B,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAI,IAAA,MAAA,CAAA;AACJ,IAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,OAAA,KAAY,IAAM,EAAA;AACjD,MAAA,MAAM,gBACJ,GAAA,OAAA,KAAY,MAAU,IAAA,OAAA,KAAY,WAAW,CAAI,GAAA,CAAA,CAAA;AAEnD,MAAM,MAAA,yBAAA,GAA4B,oBAC9B,GAAA,CAAA,GACA,kBAAmB,CAAA,OAAA,CAAA,CAAA;AAEvB,MAAA,MAAA,GACE,YAAa,CAAA,OAAA,CAAQ,qBAAsB,EAAA,CAAE,QAC7C,gBACA,GAAA,yBAAA,CAAA;AAAA,KACJ;AACA,IAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,OAAA,IAAW,MAAQ,EAAA;AAClD,MAAM,MAAA,mBAAA,GAAsB,aAAa,OAAQ,CAAA,sBAAA;AAAA,QAC/C,kCAAA;AAAA,OACF,CAAA;AACA,MAAI,IAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AAClC,QAAoB,mBAAA,CAAA,CAAA,CAAA,CAAG,KAAM,CAAA,SAAA,GAAY,CAAe,YAAA,EAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AAAA,OAC1D;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH;;;;"}
@@ -8,6 +8,7 @@ var React = require('react');
8
8
  var core = require('@salt-ds/core');
9
9
  var ControlLabel = require('../control-label/ControlLabel.js');
10
10
  require('../form-field-context/FormFieldContext.js');
11
+ require('../form-field-context/FormFieldContextNext.js');
11
12
  var useFormFieldProps = require('../form-field-context/useFormFieldProps.js');
12
13
  var CheckedIcon = require('./assets/CheckedIcon.js');
13
14
  require('./Switch.css.js');
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.js","sources":["../src/switch/Switch.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { ControlLabel, ControlLabelProps } from \"../control-label\";\nimport { useFormFieldProps } from \"../form-field-context\";\nimport { CheckedIcon } from \"./assets/CheckedIcon\";\n\nimport \"./Switch.css\";\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\n label?: ControlLabelProps[\"label\"];\n LabelProps?: Partial<ControlLabelProps>;\n onChange?: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n}\n\nconst withBaseName = makePrefixer(\"saltSwitch\");\n\nexport const Switch = forwardRef<HTMLLabelElement, SwitchProps>(function Switch(\n props,\n ref\n) {\n const { a11yProps } = useFormFieldProps();\n\n const {\n checked: checkedProp,\n className,\n color,\n defaultChecked,\n disabled,\n label,\n LabelProps,\n onBlur,\n onChange,\n onFocus,\n ...rest\n } = props;\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const [checked, setChecked] = useControlled({\n controlled: checkedProp,\n default: Boolean(defaultChecked),\n name: \"Switch\",\n state: \"checked\",\n });\n\n const [focusVisible, setFocusVisible] = useState(false);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.target.checked;\n setChecked(value);\n onChange?.(event, value);\n };\n\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!inputRef.current) {\n inputRef.current = event.currentTarget;\n }\n\n // TODO :focus-visible not yet supported on Safari, so we'll need to use the\n // useIsFocusVisible polyfill\n if (inputRef.current?.matches(\":focus-visible\")) {\n setFocusVisible(true);\n }\n\n onFocus?.(event);\n },\n [onFocus]\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setFocusVisible(false);\n onBlur?.(event);\n },\n [onBlur]\n );\n\n return (\n <ControlLabel\n {...LabelProps}\n className={clsx(\n withBaseName(\"label\"),\n { [withBaseName(\"disabled\")]: disabled },\n className\n )}\n disabled={disabled}\n label={label}\n ref={ref}\n >\n <span className={clsx(withBaseName(), className)}>\n <span\n className={clsx(withBaseName(\"base\"), {\n [withBaseName(\"checked\")]: checked,\n [withBaseName(\"focusVisible\")]: focusVisible,\n })}\n >\n <span className={withBaseName(\"inputContainer\")}>\n <input\n className={withBaseName(\"input\")}\n checked={checked}\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n ref={inputRef}\n type=\"checkbox\"\n {...a11yProps}\n {...rest}\n />\n {checked ? (\n <CheckedIcon className={withBaseName(\"icon\")} />\n ) : (\n <span className={withBaseName(\"thumb\")} />\n )}\n </span>\n </span>\n <span className={withBaseName(\"track\")} />\n </span>\n </ControlLabel>\n );\n});\n"],"names":["makePrefixer","forwardRef","Switch","useFormFieldProps","useRef","useControlled","useState","useCallback","jsx","ControlLabel","clsx","jsxs","CheckedIcon"],"mappings":";;;;;;;;;;;;;;AAwBA,MAAM,YAAA,GAAeA,kBAAa,YAAY,CAAA,CAAA;AAEvC,MAAM,MAAS,GAAAC,gBAAA,CAA0C,SAASC,OAAAA,CACvE,OACA,GACA,EAAA;AACA,EAAM,MAAA,EAAE,SAAU,EAAA,GAAIC,mCAAkB,EAAA,CAAA;AAExC,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,WAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACG,GAAA,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,QAAA,GAAWC,aAAgC,IAAI,CAAA,CAAA;AAErD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,kBAAc,CAAA;AAAA,IAC1C,UAAY,EAAA,WAAA;AAAA,IACZ,OAAA,EAAS,QAAQ,cAAc,CAAA;AAAA,IAC/B,IAAM,EAAA,QAAA;AAAA,IACN,KAAO,EAAA,SAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,eAAS,KAAK,CAAA,CAAA;AAEtD,EAAM,MAAA,YAAA,GAAe,CAAC,KAAyC,KAAA;AAC7D,IAAM,MAAA,KAAA,GAAQ,MAAM,MAAO,CAAA,OAAA,CAAA;AAC3B,IAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,IAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,KAAO,EAAA,KAAA,CAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,IAClB,CAAC,KAAwC,KAAA;AAhE7C,MAAA,IAAA,EAAA,CAAA;AAkEM,MAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACrB,QAAA,QAAA,CAAS,UAAU,KAAM,CAAA,aAAA,CAAA;AAAA,OAC3B;AAIA,MAAA,IAAA,CAAI,EAAS,GAAA,QAAA,CAAA,OAAA,KAAT,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,gBAAmB,CAAA,EAAA;AAC/C,QAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AAAA,OACtB;AAEA,MAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACZ;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,KAAwC,KAAA;AACvC,MAAA,eAAA,CAAgB,KAAK,CAAA,CAAA;AACrB,MAAS,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACX;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,uBACGC,cAAA,CAAAC,yBAAA,EAAA;AAAA,IACE,GAAG,UAAA;AAAA,IACJ,SAAW,EAAAC,SAAA;AAAA,MACT,aAAa,OAAO,CAAA;AAAA,MACpB,EAAE,CAAC,YAAa,CAAA,UAAU,IAAI,QAAS,EAAA;AAAA,MACvC,SAAA;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IAEA,QAAC,kBAAAC,eAAA,CAAA,MAAA,EAAA;AAAA,MAAK,SAAW,EAAAD,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAC7C,QAAA,EAAA;AAAA,wBAACF,cAAA,CAAA,MAAA,EAAA;AAAA,UACC,SAAW,EAAAE,SAAA,CAAK,YAAa,CAAA,MAAM,CAAG,EAAA;AAAA,YACpC,CAAC,YAAa,CAAA,SAAS,CAAI,GAAA,OAAA;AAAA,YAC3B,CAAC,YAAa,CAAA,cAAc,CAAI,GAAA,YAAA;AAAA,WACjC,CAAA;AAAA,UAED,QAAC,kBAAAC,eAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAA,EAAW,aAAa,gBAAgB,CAAA;AAAA,YAC5C,QAAA,EAAA;AAAA,8BAACH,cAAA,CAAA,OAAA,EAAA;AAAA,gBACC,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,gBAC/B,OAAA;AAAA,gBACA,QAAA;AAAA,gBACA,MAAQ,EAAA,UAAA;AAAA,gBACR,QAAU,EAAA,YAAA;AAAA,gBACV,OAAS,EAAA,WAAA;AAAA,gBACT,GAAK,EAAA,QAAA;AAAA,gBACL,IAAK,EAAA,UAAA;AAAA,gBACJ,GAAG,SAAA;AAAA,gBACH,GAAG,IAAA;AAAA,eACN,CAAA;AAAA,cACC,0BACEA,cAAA,CAAAI,uBAAA,EAAA;AAAA,gBAAY,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,eAAG,oBAE7CJ,cAAA,CAAA,MAAA,EAAA;AAAA,gBAAK,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,eAAG,CAAA;AAAA,aAAA;AAAA,WAE5C,CAAA;AAAA,SACF,CAAA;AAAA,wBACCA,cAAA,CAAA,MAAA,EAAA;AAAA,UAAK,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,SAAG,CAAA;AAAA,OAAA;AAAA,KAC1C,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"Switch.js","sources":["../src/switch/Switch.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { ControlLabel, ControlLabelProps } from \"../control-label\";\nimport { useFormFieldProps } from \"../form-field-context\";\nimport { CheckedIcon } from \"./assets/CheckedIcon\";\n\nimport \"./Switch.css\";\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\n label?: ControlLabelProps[\"label\"];\n LabelProps?: Partial<ControlLabelProps>;\n onChange?: (event: ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n}\n\nconst withBaseName = makePrefixer(\"saltSwitch\");\n\nexport const Switch = forwardRef<HTMLLabelElement, SwitchProps>(function Switch(\n props,\n ref\n) {\n const { a11yProps } = useFormFieldProps();\n\n const {\n checked: checkedProp,\n className,\n color,\n defaultChecked,\n disabled,\n label,\n LabelProps,\n onBlur,\n onChange,\n onFocus,\n ...rest\n } = props;\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const [checked, setChecked] = useControlled({\n controlled: checkedProp,\n default: Boolean(defaultChecked),\n name: \"Switch\",\n state: \"checked\",\n });\n\n const [focusVisible, setFocusVisible] = useState(false);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.target.checked;\n setChecked(value);\n onChange?.(event, value);\n };\n\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!inputRef.current) {\n inputRef.current = event.currentTarget;\n }\n\n // TODO :focus-visible not yet supported on Safari, so we'll need to use the\n // useIsFocusVisible polyfill\n if (inputRef.current?.matches(\":focus-visible\")) {\n setFocusVisible(true);\n }\n\n onFocus?.(event);\n },\n [onFocus]\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setFocusVisible(false);\n onBlur?.(event);\n },\n [onBlur]\n );\n\n return (\n <ControlLabel\n {...LabelProps}\n className={clsx(\n withBaseName(\"label\"),\n { [withBaseName(\"disabled\")]: disabled },\n className\n )}\n disabled={disabled}\n label={label}\n ref={ref}\n >\n <span className={clsx(withBaseName(), className)}>\n <span\n className={clsx(withBaseName(\"base\"), {\n [withBaseName(\"checked\")]: checked,\n [withBaseName(\"focusVisible\")]: focusVisible,\n })}\n >\n <span className={withBaseName(\"inputContainer\")}>\n <input\n className={withBaseName(\"input\")}\n checked={checked}\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n ref={inputRef}\n type=\"checkbox\"\n {...a11yProps}\n {...rest}\n />\n {checked ? (\n <CheckedIcon className={withBaseName(\"icon\")} />\n ) : (\n <span className={withBaseName(\"thumb\")} />\n )}\n </span>\n </span>\n <span className={withBaseName(\"track\")} />\n </span>\n </ControlLabel>\n );\n});\n"],"names":["makePrefixer","forwardRef","Switch","useFormFieldProps","useRef","useControlled","useState","useCallback","jsx","ControlLabel","clsx","jsxs","CheckedIcon"],"mappings":"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"}
@@ -15,6 +15,7 @@ require('../utils/useFloatingUI.js');
15
15
  var useOverflowCollectionItems = require('../responsive/useOverflowCollectionItems.js');
16
16
  var useOverflowLayout = require('../responsive/useOverflowLayout.js');
17
17
  require('../form-field-context/FormFieldContext.js');
18
+ require('../form-field-context/FormFieldContextNext.js');
18
19
  var Tab = require('./Tab.js');
19
20
  var TabActivationIndicator = require('./TabActivationIndicator.js');
20
21
  var useTabstrip = require('./useTabstrip.js');
@@ -1 +1 @@
1
- {"version":3,"file":"Tabstrip.js","sources":["../src/tabs/Tabstrip.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n Tooltip,\n useIdMemo,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { AddIcon, OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { SelectionChangeHandler } from \"../common-hooks\";\n\nimport { Dropdown } from \"../dropdown\";\nimport {\n InjectedSourceItem,\n OverflowItem,\n useOverflowLayout,\n} from \"../responsive\";\nimport { useOverflowCollectionItems } from \"../responsive/useOverflowCollectionItems\";\nimport { Tab } from \"./Tab\";\nimport { TabActivationIndicator } from \"./TabActivationIndicator\";\nimport {\n FocusAPI,\n responsiveDataAttributes,\n TabDescriptor,\n TabElement,\n TabProps,\n TabsSource,\n TabstripProps,\n} from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\n\nimport \"./Tabstrip.css\";\nimport \"./ThemeTabstrip.css\";\n\nconst withBaseName = makePrefixer(\"saltTabstrip\");\n\nconst ADD_TAB_LABEL = \"Create Tab\";\n\n// Simple strings for tab labels are accepted as input, convert to TabDescriptors internally\nconst tabDescriptors = (\n tabs: TabsSource | undefined\n): TabDescriptor[] | undefined =>\n tabs &&\n tabs.map((tab: string | TabDescriptor) =>\n typeof tab === \"string\" ? { label: tab } : tab\n );\n\nexport const Tabstrip = forwardRef(function Tabstrip(\n {\n activeTabIndex: activeTabIndexProp,\n allowDragDrop = false,\n centered = false,\n children,\n className: classNameProp,\n defaultSource,\n defaultActiveTabIndex,\n editing,\n variant,\n enableAddTab = false,\n enableCloseTab,\n enableRenameTab,\n id: idProp,\n keyBoardActivation = \"manual\",\n onAddTab,\n onActiveChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMouseDown,\n onMoveTab,\n orientation = \"horizontal\",\n overflowMenu: overflowMenuProp = true,\n promptForNewTabName = true,\n showActivationIndicator = true,\n source,\n title,\n ...htmlAttributes\n }: TabstripProps,\n forwardedRef: ForwardedRef<FocusAPI>\n) {\n const root = useRef<HTMLDivElement>(null);\n // can't use forwardedRef here, can we ?\n // const setForkRef = useForkRef(root, forwardedRef);\n const activeRef = useRef<number>(\n activeTabIndexProp || defaultActiveTabIndex || 0\n );\n\n const overflowItemsRef = useRef<OverflowItem[]>([]);\n const [showOverflowMenu, _setShowOverflowMenu] = useState(false);\n\n const setShowOverflowMenu = useCallback((value: boolean) => {\n _setShowOverflowMenu(value);\n }, []);\n\n const tabstripId = useIdMemo(idProp);\n\n const injectedItems = enableAddTab\n ? [\n {\n source: { label: \"Add Tab\", position: -1, priority: 1 },\n } as InjectedSourceItem,\n ]\n : undefined;\n\n const collectionHook = useOverflowCollectionItems({\n children,\n defaultSource: tabDescriptors(defaultSource),\n id: tabstripId,\n injectedItems,\n label: \"Tabstrip\",\n orientation,\n source: tabDescriptors(source),\n options: {\n closeable: enableCloseTab,\n editable: enableRenameTab,\n getPriority: (item, index) => {\n return index === activeRef.current ? 1 : undefined;\n },\n },\n });\n\n const childCount = useRef(React.Children.count(children));\n\n const getChildren = (): TabElement[] | undefined => {\n if (React.Children.count(children) === 0) {\n return undefined;\n } else {\n return React.Children.toArray(children) as TabElement[];\n }\n };\n\n const [innerContainerRef, switchOverflowPriorities] = useOverflowLayout({\n collectionHook,\n disableOverflow: overflowMenuProp === false,\n id: tabstripId,\n orientation,\n label: \"Tabstrip\",\n });\n overflowItemsRef.current = collectionHook.data;\n const overflowedItems = collectionHook.data.filter((item) => item.overflowed);\n\n const tabMovedHandler = useCallback(\n (fromIndex: number, toIndex: number) => {\n onMoveTab?.(fromIndex, toIndex);\n setTimeout(() => {\n collectionHook.dispatch({\n type: \"reset\",\n });\n }, 50);\n },\n [collectionHook, onMoveTab]\n );\n\n const handleTabSelectionChange = useCallback(\n (tabIndex: number) => {\n const selectedItem = collectionHook.data[tabIndex];\n const prevSelectedItem = collectionHook.data.find(\n (item) => item.priority === 1 && !item.isOverflowIndicator\n );\n if (selectedItem && prevSelectedItem && overflowMenuProp) {\n switchOverflowPriorities(selectedItem, prevSelectedItem);\n }\n onActiveChange?.(tabIndex);\n setShowOverflowMenu(false);\n },\n [\n collectionHook.data,\n onActiveChange,\n overflowMenuProp,\n setShowOverflowMenu,\n switchOverflowPriorities,\n ]\n );\n\n const {\n activeTabIndex,\n activateTab,\n addTab,\n onMouseDown: tabstripHookMouseDown,\n ...tabstripHook\n } = useTabstrip({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n collectionHook,\n defaultTabs: tabDescriptors(defaultSource),\n defaultActiveTabIndex,\n editing,\n enableAddTab,\n idRoot: tabstripId,\n innerContainerRef,\n keyBoardActivation,\n onActiveChange: handleTabSelectionChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMoveTab: tabMovedHandler,\n orientation,\n promptForNewTabName,\n tabs: tabDescriptors(source) ?? getChildren(),\n });\n\n activeRef.current = activeTabIndex;\n\n useImperativeHandle(\n forwardedRef,\n () =>\n ({\n focus: () => {\n const { current: tabstrip } = root;\n if (tabstrip) {\n const selectedTab = tabstrip.querySelector(\n '.saltTab[aria-selected=\"true\"]'\n ) as HTMLElement;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n },\n } as FocusAPI),\n []\n );\n\n const handleAddTabClick = useCallback(() => {\n if (!collectionHook.isControlled) {\n addTab();\n }\n onAddTab?.();\n }, [collectionHook.isControlled, onAddTab, addTab]);\n\n const selectedIndex = useRef(activeTabIndex);\n const focusedTabIndex = tabstripHook.highlightedIdx;\n const handleOverflowSelectionChange: SelectionChangeHandler<OverflowItem> =\n useCallback(\n (e, tab) => {\n if (tab !== null) {\n activateTab(tab.index);\n }\n },\n [activateTab]\n );\n\n const handleKeydownOverflowMenu = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n tabstripHook.navigationProps?.onKeyDown?.(e);\n },\n [tabstripHook.navigationProps]\n );\n\n const handleOverflowMenuOpen = useCallback(\n (open: boolean) => {\n setShowOverflowMenu(open);\n },\n [setShowOverflowMenu]\n );\n\n const handleMouseDown = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onMouseDown?.(evt);\n tabstripHookMouseDown?.(evt);\n },\n [onMouseDown, tabstripHookMouseDown]\n );\n\n // shouldn't we use ref for this ?\n useIsomorphicLayoutEffect(() => {\n // We don't care about changes to overflowedItems here, the overflowObserver\n // always does the right thing. We only care about changes to selected tab\n if (selectedIndex.current !== activeTabIndex && overflowMenuProp) {\n // We might want to do this only if the selected tab is overflowed ?\n // TODO\n // resetOverflow();\n selectedIndex.current = activeTabIndex;\n }\n }, [overflowMenuProp, activeTabIndex]);\n\n useIsomorphicLayoutEffect(() => {\n if (React.Children.count(children) !== childCount.current) {\n childCount.current = React.Children.count(children);\n // TODO\n // resetOverflow();\n }\n }, [children]);\n\n useIsomorphicLayoutEffect(() => {\n if (focusedTabIndex !== activeTabIndex && focusedTabIndex !== -1) {\n tabstripHook.focusTab(activeTabIndex);\n }\n\n // We only want the effect to run when value changes, not every time focusedTabIndex changes.\n // It doesn't matter if focusedTabIndex is stale in between calls - it will be correct when\n // value changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTabIndex]);\n\n const renderContent = () => {\n const content = collectionHook.data\n .filter((item) => !item.isOverflowIndicator && !item.isInjectedItem)\n .map((item: OverflowItem, index: number) => {\n // TODO sort out typoing\n const tab = item.source as unknown as TabDescriptor;\n const element = item.element as TabElement;\n\n const selected = index === activeTabIndex;\n const focusVisible = tabstripHook.focusVisible === index;\n const overflowed =\n overflowedItems.findIndex(\n (item: OverflowItem) => item.index === index\n ) !== -1;\n\n const tabIsBeingEdited = tabstripHook.editing && selected;\n const tabIndex = tabIsBeingEdited\n ? undefined\n : selected && !tabstripHook.focusIsWithinComponent\n ? 0\n : -1;\n\n const baseProps: Partial<TabProps> &\n responsiveDataAttributes & {\n ref?: RefObject<HTMLDivElement>;\n key: string | number;\n } = {\n \"data-index\": index,\n \"data-priority\": item.priority,\n \"data-overflowed\": overflowed ? true : undefined,\n ...tabstripHook.navigationProps,\n id: item.id,\n key: index,\n onMouseDown: handleMouseDown,\n tabIndex,\n };\n\n const tabProps = {\n ...tabstripHook.tabProps,\n closeable: item.closeable,\n dragging: tabstripHook.draggedItemIndex === index,\n editable: item.editable,\n editing: tabIsBeingEdited,\n focusVisible,\n index,\n onClose: item.closeable ? tabstripHook.closeTab : undefined,\n orientation,\n selected,\n } as Partial<TabProps>;\n\n if (React.isValidElement(element)) {\n if (element.type === Tab) {\n return React.cloneElement(element, { ...baseProps, ...tabProps });\n } else {\n return React.cloneElement(element, baseProps);\n }\n } else {\n //@ts-ignore tab can only be a TabDescriptor here, but TypeScript seems to think it can be a number\n return React.createElement(Tab, {\n ...baseProps,\n ...tabProps,\n label: tab.label,\n });\n }\n });\n\n const overflowCount = overflowedItems.length;\n const draggingActiveTab = tabstripHook.draggedItemIndex === activeTabIndex;\n const showOverflow =\n (tabstripHook.revealOverflowedItems && !draggingActiveTab) ||\n showOverflowMenu;\n const showTooltip = tabstripHook.revealOverflowedItems && draggingActiveTab;\n const overflowIndicator = collectionHook.data.find(\n (i) => i.isOverflowIndicator\n );\n const [injectedItem] = collectionHook.data.filter((i) => i.isInjectedItem);\n\n if (overflowIndicator) {\n content.push(\n <Tooltip\n content=\"Active Tab cannot be moved into overflow list\"\n open\n disabled={!showTooltip}\n status=\"warning\"\n key=\"tooltip\"\n hideArrow\n >\n <Dropdown<OverflowItem>\n className={clsx(withBaseName(\"overflowMenu\"), {\n [withBaseName(\"overflowMenu-open\")]: showOverflow,\n })}\n ListProps={{\n className: clsx({\n [withBaseName(\"overflowMenu-dropTarget\")]:\n tabstripHook.revealOverflowedItems,\n }),\n }}\n data-overflow-indicator\n data-priority={0}\n id={overflowIndicator.id}\n isOpen={showOverflow}\n key=\"overflow\"\n onOpenChange={handleOverflowMenuOpen}\n onKeyDown={handleKeydownOverflowMenu}\n onSelectionChange={handleOverflowSelectionChange}\n placement=\"bottom-end\"\n source={overflowedItems}\n selected={null}\n triggerComponent={\n <Button\n aria-label={`Tabs overflow menu ${overflowCount} item${\n overflowCount === 1 ? \"\" : \"s\"\n }`}\n variant=\"secondary\"\n tabIndex={-1}\n >\n <OverflowMenuIcon />\n </Button>\n }\n width=\"auto\"\n />\n </Tooltip>\n );\n }\n\n if (injectedItem) {\n content.push(\n <Button\n {...tabstripHook.navigationProps}\n aria-label={ADD_TAB_LABEL}\n data-priority={injectedItem.priority}\n data-overflowed={injectedItem.overflowed}\n id={injectedItem.id}\n key=\"addButton\"\n onClick={handleAddTabClick}\n variant=\"secondary\"\n tabIndex={-1}\n >\n <AddIcon />\n </Button>\n );\n }\n\n return content;\n };\n\n const selectedTabOverflowed = overflowedItems.some(\n (item: OverflowItem) => item.index === activeTabIndex\n );\n const className = clsx(\n withBaseName(),\n withBaseName(orientation),\n classNameProp,\n {\n [withBaseName(\"centered\")]: centered,\n [withBaseName(\"draggingTab\")]: tabstripHook.isDragging,\n [withBaseName(\"tertiary\")]: variant === \"tertiary\",\n }\n );\n\n const { id: selectedTabId } = collectionHook.data[activeTabIndex];\n\n return (\n <div\n {...htmlAttributes}\n {...tabstripHook.containerProps}\n className={className}\n id={tabstripId}\n ref={root}\n role=\"tablist\"\n >\n <div className={withBaseName(\"inner\")} ref={innerContainerRef}>\n {renderContent()}\n </div>\n {showActivationIndicator ? (\n <TabActivationIndicator\n hideThumb={selectedTabOverflowed || tabstripHook.isDragging}\n orientation={orientation}\n tabId={selectedTabId}\n />\n ) : null}\n {tabstripHook.draggable}\n </div>\n );\n});\n\nTabstrip.displayName = \"Tabstrip\";\n"],"names":["makePrefixer","forwardRef","Tabstrip","useRef","useState","useCallback","useIdMemo","useOverflowCollectionItems","React","useOverflowLayout","useTabstrip","useImperativeHandle","_a","useIsomorphicLayoutEffect","item","Tab","jsx","Tooltip","Dropdown","clsx","Button","OverflowMenuIcon","createElement","AddIcon","jsxs","TabActivationIndicator"],"mappings":"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"}
1
+ {"version":3,"file":"Tabstrip.js","sources":["../src/tabs/Tabstrip.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n Tooltip,\n useIdMemo,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { AddIcon, OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { SelectionChangeHandler } from \"../common-hooks\";\n\nimport { Dropdown } from \"../dropdown\";\nimport {\n InjectedSourceItem,\n OverflowItem,\n useOverflowLayout,\n} from \"../responsive\";\nimport { useOverflowCollectionItems } from \"../responsive/useOverflowCollectionItems\";\nimport { Tab } from \"./Tab\";\nimport { TabActivationIndicator } from \"./TabActivationIndicator\";\nimport {\n FocusAPI,\n responsiveDataAttributes,\n TabDescriptor,\n TabElement,\n TabProps,\n TabsSource,\n TabstripProps,\n} from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\n\nimport \"./Tabstrip.css\";\nimport \"./ThemeTabstrip.css\";\n\nconst withBaseName = makePrefixer(\"saltTabstrip\");\n\nconst ADD_TAB_LABEL = \"Create Tab\";\n\n// Simple strings for tab labels are accepted as input, convert to TabDescriptors internally\nconst tabDescriptors = (\n tabs: TabsSource | undefined\n): TabDescriptor[] | undefined =>\n tabs &&\n tabs.map((tab: string | TabDescriptor) =>\n typeof tab === \"string\" ? { label: tab } : tab\n );\n\nexport const Tabstrip = forwardRef(function Tabstrip(\n {\n activeTabIndex: activeTabIndexProp,\n allowDragDrop = false,\n centered = false,\n children,\n className: classNameProp,\n defaultSource,\n defaultActiveTabIndex,\n editing,\n variant,\n enableAddTab = false,\n enableCloseTab,\n enableRenameTab,\n id: idProp,\n keyBoardActivation = \"manual\",\n onAddTab,\n onActiveChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMouseDown,\n onMoveTab,\n orientation = \"horizontal\",\n overflowMenu: overflowMenuProp = true,\n promptForNewTabName = true,\n showActivationIndicator = true,\n source,\n title,\n ...htmlAttributes\n }: TabstripProps,\n forwardedRef: ForwardedRef<FocusAPI>\n) {\n const root = useRef<HTMLDivElement>(null);\n // can't use forwardedRef here, can we ?\n // const setForkRef = useForkRef(root, forwardedRef);\n const activeRef = useRef<number>(\n activeTabIndexProp || defaultActiveTabIndex || 0\n );\n\n const overflowItemsRef = useRef<OverflowItem[]>([]);\n const [showOverflowMenu, _setShowOverflowMenu] = useState(false);\n\n const setShowOverflowMenu = useCallback((value: boolean) => {\n _setShowOverflowMenu(value);\n }, []);\n\n const tabstripId = useIdMemo(idProp);\n\n const injectedItems = enableAddTab\n ? [\n {\n source: { label: \"Add Tab\", position: -1, priority: 1 },\n } as InjectedSourceItem,\n ]\n : undefined;\n\n const collectionHook = useOverflowCollectionItems({\n children,\n defaultSource: tabDescriptors(defaultSource),\n id: tabstripId,\n injectedItems,\n label: \"Tabstrip\",\n orientation,\n source: tabDescriptors(source),\n options: {\n closeable: enableCloseTab,\n editable: enableRenameTab,\n getPriority: (item, index) => {\n return index === activeRef.current ? 1 : undefined;\n },\n },\n });\n\n const childCount = useRef(React.Children.count(children));\n\n const getChildren = (): TabElement[] | undefined => {\n if (React.Children.count(children) === 0) {\n return undefined;\n } else {\n return React.Children.toArray(children) as TabElement[];\n }\n };\n\n const [innerContainerRef, switchOverflowPriorities] = useOverflowLayout({\n collectionHook,\n disableOverflow: overflowMenuProp === false,\n id: tabstripId,\n orientation,\n label: \"Tabstrip\",\n });\n overflowItemsRef.current = collectionHook.data;\n const overflowedItems = collectionHook.data.filter((item) => item.overflowed);\n\n const tabMovedHandler = useCallback(\n (fromIndex: number, toIndex: number) => {\n onMoveTab?.(fromIndex, toIndex);\n setTimeout(() => {\n collectionHook.dispatch({\n type: \"reset\",\n });\n }, 50);\n },\n [collectionHook, onMoveTab]\n );\n\n const handleTabSelectionChange = useCallback(\n (tabIndex: number) => {\n const selectedItem = collectionHook.data[tabIndex];\n const prevSelectedItem = collectionHook.data.find(\n (item) => item.priority === 1 && !item.isOverflowIndicator\n );\n if (selectedItem && prevSelectedItem && overflowMenuProp) {\n switchOverflowPriorities(selectedItem, prevSelectedItem);\n }\n onActiveChange?.(tabIndex);\n setShowOverflowMenu(false);\n },\n [\n collectionHook.data,\n onActiveChange,\n overflowMenuProp,\n setShowOverflowMenu,\n switchOverflowPriorities,\n ]\n );\n\n const {\n activeTabIndex,\n activateTab,\n addTab,\n onMouseDown: tabstripHookMouseDown,\n ...tabstripHook\n } = useTabstrip({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n collectionHook,\n defaultTabs: tabDescriptors(defaultSource),\n defaultActiveTabIndex,\n editing,\n enableAddTab,\n idRoot: tabstripId,\n innerContainerRef,\n keyBoardActivation,\n onActiveChange: handleTabSelectionChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMoveTab: tabMovedHandler,\n orientation,\n promptForNewTabName,\n tabs: tabDescriptors(source) ?? getChildren(),\n });\n\n activeRef.current = activeTabIndex;\n\n useImperativeHandle(\n forwardedRef,\n () =>\n ({\n focus: () => {\n const { current: tabstrip } = root;\n if (tabstrip) {\n const selectedTab = tabstrip.querySelector(\n '.saltTab[aria-selected=\"true\"]'\n ) as HTMLElement;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n },\n } as FocusAPI),\n []\n );\n\n const handleAddTabClick = useCallback(() => {\n if (!collectionHook.isControlled) {\n addTab();\n }\n onAddTab?.();\n }, [collectionHook.isControlled, onAddTab, addTab]);\n\n const selectedIndex = useRef(activeTabIndex);\n const focusedTabIndex = tabstripHook.highlightedIdx;\n const handleOverflowSelectionChange: SelectionChangeHandler<OverflowItem> =\n useCallback(\n (e, tab) => {\n if (tab !== null) {\n activateTab(tab.index);\n }\n },\n [activateTab]\n );\n\n const handleKeydownOverflowMenu = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n tabstripHook.navigationProps?.onKeyDown?.(e);\n },\n [tabstripHook.navigationProps]\n );\n\n const handleOverflowMenuOpen = useCallback(\n (open: boolean) => {\n setShowOverflowMenu(open);\n },\n [setShowOverflowMenu]\n );\n\n const handleMouseDown = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onMouseDown?.(evt);\n tabstripHookMouseDown?.(evt);\n },\n [onMouseDown, tabstripHookMouseDown]\n );\n\n // shouldn't we use ref for this ?\n useIsomorphicLayoutEffect(() => {\n // We don't care about changes to overflowedItems here, the overflowObserver\n // always does the right thing. We only care about changes to selected tab\n if (selectedIndex.current !== activeTabIndex && overflowMenuProp) {\n // We might want to do this only if the selected tab is overflowed ?\n // TODO\n // resetOverflow();\n selectedIndex.current = activeTabIndex;\n }\n }, [overflowMenuProp, activeTabIndex]);\n\n useIsomorphicLayoutEffect(() => {\n if (React.Children.count(children) !== childCount.current) {\n childCount.current = React.Children.count(children);\n // TODO\n // resetOverflow();\n }\n }, [children]);\n\n useIsomorphicLayoutEffect(() => {\n if (focusedTabIndex !== activeTabIndex && focusedTabIndex !== -1) {\n tabstripHook.focusTab(activeTabIndex);\n }\n\n // We only want the effect to run when value changes, not every time focusedTabIndex changes.\n // It doesn't matter if focusedTabIndex is stale in between calls - it will be correct when\n // value changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTabIndex]);\n\n const renderContent = () => {\n const content = collectionHook.data\n .filter((item) => !item.isOverflowIndicator && !item.isInjectedItem)\n .map((item: OverflowItem, index: number) => {\n // TODO sort out typoing\n const tab = item.source as unknown as TabDescriptor;\n const element = item.element as TabElement;\n\n const selected = index === activeTabIndex;\n const focusVisible = tabstripHook.focusVisible === index;\n const overflowed =\n overflowedItems.findIndex(\n (item: OverflowItem) => item.index === index\n ) !== -1;\n\n const tabIsBeingEdited = tabstripHook.editing && selected;\n const tabIndex = tabIsBeingEdited\n ? undefined\n : selected && !tabstripHook.focusIsWithinComponent\n ? 0\n : -1;\n\n const baseProps: Partial<TabProps> &\n responsiveDataAttributes & {\n ref?: RefObject<HTMLDivElement>;\n key: string | number;\n } = {\n \"data-index\": index,\n \"data-priority\": item.priority,\n \"data-overflowed\": overflowed ? true : undefined,\n ...tabstripHook.navigationProps,\n id: item.id,\n key: index,\n onMouseDown: handleMouseDown,\n tabIndex,\n };\n\n const tabProps = {\n ...tabstripHook.tabProps,\n closeable: item.closeable,\n dragging: tabstripHook.draggedItemIndex === index,\n editable: item.editable,\n editing: tabIsBeingEdited,\n focusVisible,\n index,\n onClose: item.closeable ? tabstripHook.closeTab : undefined,\n orientation,\n selected,\n } as Partial<TabProps>;\n\n if (React.isValidElement(element)) {\n if (element.type === Tab) {\n return React.cloneElement(element, { ...baseProps, ...tabProps });\n } else {\n return React.cloneElement(element, baseProps);\n }\n } else {\n //@ts-ignore tab can only be a TabDescriptor here, but TypeScript seems to think it can be a number\n return React.createElement(Tab, {\n ...baseProps,\n ...tabProps,\n label: tab.label,\n });\n }\n });\n\n const overflowCount = overflowedItems.length;\n const draggingActiveTab = tabstripHook.draggedItemIndex === activeTabIndex;\n const showOverflow =\n (tabstripHook.revealOverflowedItems && !draggingActiveTab) ||\n showOverflowMenu;\n const showTooltip = tabstripHook.revealOverflowedItems && draggingActiveTab;\n const overflowIndicator = collectionHook.data.find(\n (i) => i.isOverflowIndicator\n );\n const [injectedItem] = collectionHook.data.filter((i) => i.isInjectedItem);\n\n if (overflowIndicator) {\n content.push(\n <Tooltip\n content=\"Active Tab cannot be moved into overflow list\"\n open\n disabled={!showTooltip}\n status=\"warning\"\n key=\"tooltip\"\n hideArrow\n >\n <Dropdown<OverflowItem>\n className={clsx(withBaseName(\"overflowMenu\"), {\n [withBaseName(\"overflowMenu-open\")]: showOverflow,\n })}\n ListProps={{\n className: clsx({\n [withBaseName(\"overflowMenu-dropTarget\")]:\n tabstripHook.revealOverflowedItems,\n }),\n }}\n data-overflow-indicator\n data-priority={0}\n id={overflowIndicator.id}\n isOpen={showOverflow}\n key=\"overflow\"\n onOpenChange={handleOverflowMenuOpen}\n onKeyDown={handleKeydownOverflowMenu}\n onSelectionChange={handleOverflowSelectionChange}\n placement=\"bottom-end\"\n source={overflowedItems}\n selected={null}\n triggerComponent={\n <Button\n aria-label={`Tabs overflow menu ${overflowCount} item${\n overflowCount === 1 ? \"\" : \"s\"\n }`}\n variant=\"secondary\"\n tabIndex={-1}\n >\n <OverflowMenuIcon />\n </Button>\n }\n width=\"auto\"\n />\n </Tooltip>\n );\n }\n\n if (injectedItem) {\n content.push(\n <Button\n {...tabstripHook.navigationProps}\n aria-label={ADD_TAB_LABEL}\n data-priority={injectedItem.priority}\n data-overflowed={injectedItem.overflowed}\n id={injectedItem.id}\n key=\"addButton\"\n onClick={handleAddTabClick}\n variant=\"secondary\"\n tabIndex={-1}\n >\n <AddIcon />\n </Button>\n );\n }\n\n return content;\n };\n\n const selectedTabOverflowed = overflowedItems.some(\n (item: OverflowItem) => item.index === activeTabIndex\n );\n const className = clsx(\n withBaseName(),\n withBaseName(orientation),\n classNameProp,\n {\n [withBaseName(\"centered\")]: centered,\n [withBaseName(\"draggingTab\")]: tabstripHook.isDragging,\n [withBaseName(\"tertiary\")]: variant === \"tertiary\",\n }\n );\n\n const { id: selectedTabId } = collectionHook.data[activeTabIndex];\n\n return (\n <div\n {...htmlAttributes}\n {...tabstripHook.containerProps}\n className={className}\n id={tabstripId}\n ref={root}\n role=\"tablist\"\n >\n <div className={withBaseName(\"inner\")} ref={innerContainerRef}>\n {renderContent()}\n </div>\n {showActivationIndicator ? (\n <TabActivationIndicator\n hideThumb={selectedTabOverflowed || tabstripHook.isDragging}\n orientation={orientation}\n tabId={selectedTabId}\n />\n ) : null}\n {tabstripHook.draggable}\n </div>\n );\n});\n\nTabstrip.displayName = \"Tabstrip\";\n"],"names":["makePrefixer","forwardRef","Tabstrip","useRef","useState","useCallback","useIdMemo","useOverflowCollectionItems","React","useOverflowLayout","useTabstrip","useImperativeHandle","_a","useIsomorphicLayoutEffect","item","Tab","jsx","Tooltip","Dropdown","clsx","Button","OverflowMenuIcon","createElement","AddIcon","jsxs","TabActivationIndicator"],"mappings":"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"}
@@ -11,6 +11,7 @@ require('../utils/useFloatingUI.js');
11
11
  var defaultItemToString = require('./internal/defaultItemToString.js');
12
12
  var getCursorPosition = require('./internal/getCursorPosition.js');
13
13
  require('../form-field-context/FormFieldContext.js');
14
+ require('../form-field-context/FormFieldContextNext.js');
14
15
  var useFormFieldProps = require('../form-field-context/useFormFieldProps.js');
15
16
 
16
17
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenizedInput.js","sources":["../src/tokenized-input/useTokenizedInput.tsx"],"sourcesContent":["//TODO remove when popout code has been migrated\n/* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access */\nimport { ownerWindow, useControlled, useDensity, useId } from \"@salt-ds/core\";\nimport copy from \"clipboard-copy\";\nimport {\n ChangeEvent,\n FocusEvent,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n Ref,\n SetStateAction,\n SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { escapeRegExp, useEventCallback } from \"../utils\";\nimport { defaultItemToString } from \"./internal/defaultItemToString\";\nimport { getCursorPosition } from \"./internal/getCursorPosition\";\nimport { TokenizedInputProps } from \"./TokenizedInput\";\nimport { TokenizedInputBaseProps } from \"./TokenizedInputBase\";\nimport { useFormFieldProps } from \"../form-field-context\";\n\nexport interface TokenizedInputState<Item> {\n activeIndices: Array<number>;\n expanded: boolean | undefined;\n focused: boolean;\n highlightedIndex: number | undefined;\n selectedItems: Array<Item>;\n value: string | undefined;\n}\n\nexport interface TokenizedInputHelpers<Item> {\n cancelBlur: () => void;\n setFocused: (expanded: boolean) => void;\n setHighlightedIndex: (value?: number) => void;\n setValue: (value: string) => void;\n setSelectedItems: (selectedItems: Array<Item>) => void;\n updateExpanded: (expanded: boolean) => void;\n}\n\n// Timeout to accommodate blur from the input and a click inside of the container\nconst BLUR_TIMEOUT = 200;\n\n/**\n * Map of the height of TokenizedInput in different density.\n * We have to keep a map of this as we can't always measure the height of the input in it's\n * collapsed state, e.g. in a controlled 'expanded' state.\n */\nconst SINGLE_LINE_HEIGHT_MAP = {\n touch: 45,\n low: 36,\n medium: 28,\n high: 23,\n};\n\nfunction isValidItem<Item>(data: unknown): data is Item {\n return (\n (typeof data === \"string\" && Boolean(data.length)) ||\n (typeof data !== \"string\" && data != null)\n );\n}\n\ntype useTokenizedInputResult<Item> = {\n /**\n * Used to do auto focus. It should be set to the actual input node.\n */\n inputRef: Ref<HTMLInputElement>;\n /**\n * The tokenized input state\n */\n state: TokenizedInputState<Item>;\n /**\n * Utility functions for modifying tokenized input state\n */\n helpers: TokenizedInputHelpers<Item>;\n /**\n * Properties applied to a basic tokenized input component\n */\n inputProps: Omit<TokenizedInputBaseProps<Item>, \"helpers\">;\n};\n\nexport function useTokenizedInput<Item>(\n props: TokenizedInputProps<Item>\n): useTokenizedInputResult<Item> {\n validateProps(props);\n\n const {\n inFormField,\n // @ts-ignore\n popoutMode,\n // @ts-ignore\n popoutActions,\n // @ts-ignore\n setIsPoppedOut,\n // @ts-ignore\n setManagedPopout,\n // @ts-ignore\n setIntendedHeight,\n a11yProps: {\n \"aria-labelledby\": ariaLabelledBy,\n disabled: formFieldDisabled,\n } = {},\n } = useFormFieldProps(); // FIXME: FormField Props\n\n const density = useDensity();\n\n const {\n delimiter = \",\",\n initialSelectedItems = [],\n itemToString = defaultItemToString,\n stringToItem = (_, value) => value.trim(),\n disabled = formFieldDisabled,\n disableAddOnBlur,\n onFocus,\n onBlur,\n onClick,\n onExpand,\n onCollapse,\n onKeyUp,\n onKeyDown,\n onInputSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onClear,\n id: idProp,\n value: valueProp,\n expanded: expandedProp,\n selectedItems: selectedItemsProp,\n onChange: onChangeProp,\n \"aria-label\": ariaLabel,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n\n const [value, setValue, isInputControlled] = useControlled<\n string | undefined\n >({\n controlled: valueProp,\n default: \"\",\n name: \"TokenizedInput\",\n state: \"value\",\n });\n\n const [\n // TODO: Check whether defaultValue of [] changes the logic\n selectedItems = [],\n setSelectedItems,\n isSelectionControlled,\n ] = useControlled<Item[] | undefined>({\n controlled: selectedItemsProp,\n default: initialSelectedItems,\n name: \"TokenizedInput\",\n state: \"selectedItems\",\n });\n\n const [expanded, setExpanded, isExpandedControlled] = useControlled<boolean>({\n controlled: expandedProp,\n default: false,\n name: \"TokenizedInput\",\n state: \"expanded\",\n });\n\n const [activeIndices, setActiveIndices] = useState<number[]>([]);\n const [highlightedIndex, setHighlightedIndex] = useState<number | undefined>(\n undefined\n );\n const [focused, setFocusedState] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const blurTimeout = useRef<number | null>(null);\n const preventBlurOnCopy = useRef(false);\n const hasActiveItems = Boolean(activeIndices.length);\n\n const delimiters = ([] as string[]).concat(delimiter);\n const primaryDelimiter = delimiters[0];\n const delimiterRegex = new RegExp(\n delimiters.map(escapeRegExp).join(\"|\"),\n \"gi\"\n );\n\n const onChange = useEventCallback((selectedItems: Item[] | undefined) => {\n if (onChangeProp) {\n onChangeProp(selectedItems);\n }\n });\n\n const cancelBlur = useCallback(() => {\n if (blurTimeout.current) {\n clearTimeout(blurTimeout.current);\n }\n blurTimeout.current = null;\n }, []);\n\n const focusInput = useCallback(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n\n if (popoutMode && setIsPoppedOut) {\n setIsPoppedOut(true);\n }\n }\n }, [popoutMode, setIsPoppedOut]);\n\n useEffect(\n () => () => {\n cancelBlur();\n },\n [cancelBlur]\n );\n\n useEffect(() => {\n if (expanded) {\n focusInput();\n }\n }, [expanded, focusInput]);\n\n useEffect(() => {\n if (popoutMode && setManagedPopout) {\n setManagedPopout(true);\n\n setIntendedHeight(SINGLE_LINE_HEIGHT_MAP[density]);\n }\n }, [density, popoutMode, setIntendedHeight, setManagedPopout]);\n\n const updateInputValue = (newValue: string | undefined) => {\n if (!isInputControlled) {\n setValue(newValue);\n }\n };\n\n const updateSelectedItems = useCallback(\n (action: SetStateAction<Item[] | undefined>) => {\n if (!isSelectionControlled) {\n setSelectedItems((prevSelectedItems?: Item[]) => {\n const newItems =\n typeof action === \"function\" ? action(prevSelectedItems) : action;\n\n if (newItems !== prevSelectedItems) {\n onChange(newItems);\n }\n\n return newItems;\n });\n } else {\n onChange(typeof action === \"function\" ? action(selectedItems) : action);\n }\n },\n [isSelectionControlled, setSelectedItems, onChange, selectedItems]\n );\n\n const updateExpanded = (newExpanded: boolean) => {\n if (!isExpandedControlled) {\n setExpanded(newExpanded);\n }\n\n if (newExpanded) {\n onExpand && onExpand();\n } else {\n onCollapse && onCollapse();\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const setFocused = (newState: boolean) => {\n setFocusedState(newState);\n };\n\n const resetInput = () => {\n updateInputValue(\"\");\n setHighlightedIndex(undefined);\n setActiveIndices([]);\n };\n\n const removeItems = useCallback(\n (itemIndices: number[]) => {\n updateSelectedItems(\n (prevSelectedItems) =>\n prevSelectedItems &&\n (prevSelectedItems.length === 0\n ? prevSelectedItems\n : prevSelectedItems.filter(\n (_, index) => itemIndices.indexOf(index) === -1\n ))\n );\n },\n [updateSelectedItems]\n );\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n event.stopPropagation();\n\n // The input will lose focus when building the text to copy in a temporary\n // DOM node. This is particularly visible in a slower browser, i.e. IE 11.\n // This is to prevent a blur in that scenario.\n if (preventBlurOnCopy.current) {\n preventBlurOnCopy.current = false;\n setActiveIndices(\n Array.from(\n { length: selectedItems ? selectedItems.length : 0 },\n (_, index) => index\n )\n );\n return;\n }\n\n setFocused(true);\n\n if (onInputFocus) {\n onInputFocus(event);\n }\n\n if (blurTimeout.current !== null) {\n cancelBlur();\n } else {\n updateExpanded(true);\n\n if (onFocus) {\n onFocus(event);\n }\n }\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n event.stopPropagation();\n\n setFocused(false);\n setHighlightedIndex(undefined);\n setActiveIndices([]);\n\n if (onInputBlur) {\n onInputBlur(event);\n }\n\n handleBlur(event);\n };\n\n const handleBlur = (\n event: FocusEvent<HTMLInputElement | HTMLButtonElement>\n ) => {\n if (preventBlurOnCopy.current) {\n return focusInput();\n }\n\n event.persist();\n\n blurTimeout.current = setTimeout(() => {\n blurTimeout.current = null;\n updateExpanded(false);\n\n if (!disableAddOnBlur) {\n handleAddItems(value, true);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n\n if (popoutMode && setIsPoppedOut) {\n setIsPoppedOut(false);\n }\n }, BLUR_TIMEOUT) as unknown as number;\n };\n\n const handleClick = (event: SyntheticEvent<HTMLElement>) => {\n updateExpanded(true);\n setActiveIndices([]);\n focusInput();\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n setHighlightedIndex(undefined);\n\n if (onInputChange) {\n onInputChange(event);\n }\n\n const newValue = event.target.value;\n\n if (delimiterRegex.test(newValue)) {\n // Process value with delimiters\n handleAddItems(newValue);\n } else {\n // Just update input value if there is no delimiter\n updateInputValue(newValue);\n }\n };\n\n const handleAddItems = (\n newValue: string | undefined,\n appendOnly?: boolean\n ) => {\n if (!newValue || newValue.length === 0) {\n return;\n }\n\n resetInput();\n\n const newItems = newValue\n .split(delimiterRegex)\n .reduce<Item[]>((values, part) => {\n const newItem = stringToItem(\n hasActiveItems ? values : selectedItems.concat(values),\n part\n );\n return isValidItem<Item>(newItem) ? values.concat(newItem) : values;\n }, []);\n\n if (newItems.length) {\n updateSelectedItems((prevSelectedItems = []) =>\n hasActiveItems && !appendOnly\n ? newItems\n : prevSelectedItems.concat(newItems)\n );\n }\n };\n\n const handleRemoveItem = useCallback(\n (itemIndex?: number) => {\n focusInput();\n if (itemIndex) {\n removeItems([itemIndex]);\n }\n },\n [focusInput, removeItems]\n );\n\n const handleClear = (event: ChangeEvent<HTMLInputElement>) => {\n updateSelectedItems([]);\n resetInput();\n focusInput();\n\n if (onClear) {\n onClear(event);\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const cursorAtInputStart = () =>\n getCursorPosition(inputRef) === 0 && Boolean(selectedItems.length);\n\n const highlightAtPillGroupEnd = () =>\n highlightedIndex === selectedItems.length - 1;\n\n const pillGroupKeyDownHandlers: {\n [key: string]: KeyboardEventHandler<HTMLInputElement>;\n } = {\n ArrowLeft: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? selectedItems.length - 1\n : Math.max(0, prevHighlightedIndex - 1)\n );\n },\n ArrowRight: (event) => {\n if (highlightAtPillGroupEnd()) {\n return setHighlightedIndex(undefined);\n }\n\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? prevHighlightedIndex\n : Math.min(selectedItems.length - 1, prevHighlightedIndex + 1)\n );\n },\n Backspace: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? prevHighlightedIndex\n : Math.max(0, prevHighlightedIndex - 1)\n );\n },\n Home: (event) => {\n event.preventDefault();\n setHighlightedIndex(0);\n },\n End: (event) => {\n event.preventDefault();\n setHighlightedIndex(selectedItems.length - 1);\n },\n Enter: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n Delete: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n \" \": (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n };\n\n const inputKeyDownHandlers: {\n [key: string]: KeyboardEventHandler<HTMLInputElement>;\n } = {\n ArrowLeft: (event) => {\n if (cursorAtInputStart()) {\n event.preventDefault();\n setHighlightedIndex(selectedItems.length - 1);\n }\n },\n Backspace: () => {\n if (hasActiveItems) {\n removeItems(activeIndices);\n } else if (cursorAtInputStart()) {\n setHighlightedIndex(selectedItems.length - 1);\n }\n },\n Delete: () => {\n if (hasActiveItems) {\n removeItems(activeIndices);\n }\n },\n Enter: (event) => {\n event.preventDefault();\n\n if (hasActiveItems) {\n removeItems(activeIndices);\n } else {\n handleAddItems(value);\n }\n },\n };\n\n const handleCtrlModifierKeyDown: InputHTMLAttributes<HTMLInputElement>[\"onKeyDown\"] =\n (event) => {\n const win = ownerWindow(event.target as HTMLElement);\n const supportClipboard = win.navigator && win.navigator.clipboard;\n\n switch (event.key.toUpperCase()) {\n case \"A\":\n // Select all\n setHighlightedIndex(undefined);\n setActiveIndices(\n Array.from({ length: selectedItems.length }, (_, index) => index)\n );\n break;\n case \"C\":\n // Copy\n copy(\n activeIndices\n .map((index) => itemToString(selectedItems[index]))\n .concat(value != null ? String(value).trim() : \"\")\n .filter(Boolean)\n .join(primaryDelimiter)\n )\n .then((result) => {\n preventBlurOnCopy.current = !supportClipboard;\n return result;\n })\n .catch((error) => {\n console.error(error);\n });\n break;\n case \"V\":\n // Paste - do nothing and let handleChange deal with it\n break;\n case \"ARROWLEFT\":\n pillGroupKeyDownHandlers.ArrowLeft(event);\n break;\n case \"ARROWRIGHT\":\n pillGroupKeyDownHandlers.ArrowRight(event);\n break;\n case \"BACKSPACE\":\n if (cursorAtInputStart()) {\n handleRemoveItem(selectedItems.length - 1);\n }\n break;\n case \"CONTROL\":\n case \"META\":\n // Do nothing\n break;\n default:\n // Otherwise, reset active items\n setActiveIndices([]);\n }\n };\n\n const handleCommonKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const eventKey = event.key.toUpperCase();\n\n if (eventKey === \"ESCAPE\") {\n event.preventDefault();\n resetInput();\n } else if (eventKey === \"TAB\" && !disableAddOnBlur) {\n // Pressing Tab adds a new value\n handleAddItems(value);\n }\n };\n\n const handleKeyDown: InputHTMLAttributes<HTMLInputElement>[\"onKeyDown\"] = (\n event\n ) => {\n if (onKeyDown) {\n onKeyDown(event);\n }\n if (event.defaultPrevented) {\n return;\n }\n if (\n event.ctrlKey ||\n event.metaKey ||\n [\"CONTROL\", \"META\"].indexOf(event.key.toUpperCase()) !== -1\n ) {\n handleCtrlModifierKeyDown(event);\n } else {\n let handler;\n\n if (highlightedIndex == null) {\n handler = inputKeyDownHandlers[event.key];\n setActiveIndices([]);\n } else {\n handler = pillGroupKeyDownHandlers[event.key];\n }\n\n if (handler != null) {\n handler(event);\n } else {\n handleCommonKeyDown(event);\n }\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const state: TokenizedInputState<Item> = {\n value,\n selectedItems,\n activeIndices,\n highlightedIndex,\n expanded,\n focused: !inFormField && focused,\n };\n\n const eventHandlers = {\n // onFocus is a focus on the expand button\n // It can also be triggered by a focus on the input\n onFocus,\n // onBlur is a blur from the expand button when it's collapsed\n // It can also be triggered by the clear button\n onBlur: expanded ? handleBlur : onBlur,\n onClick: handleClick,\n onInputSelect,\n onInputChange: handleInputChange,\n onInputFocus: handleInputFocus,\n onInputBlur: handleInputBlur,\n onKeyDown: handleKeyDown,\n onRemoveItem: handleRemoveItem,\n onClear: handleClear,\n };\n\n return {\n inputRef,\n state,\n helpers: {\n cancelBlur,\n setValue,\n setSelectedItems,\n setHighlightedIndex,\n setFocused,\n updateExpanded,\n },\n inputProps: {\n id,\n itemToString,\n disabled,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n ...state,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\nconst validateProps = function validateProps<Item>(\n props: TokenizedInputProps<Item>\n) {\n if (process.env.NODE_ENV !== \"production\") {\n const { delimiter } = props;\n\n const invalidDelimiter = Array.isArray(delimiter)\n ? delimiter.every(isChar)\n : isChar(delimiter);\n\n useEffect(() => {\n console.warn(\n \"TokenizedInput delimiter should be a single character or an array of single characters\"\n );\n }, [invalidDelimiter]);\n }\n};\n\nconst isChar = (value: unknown) =>\n typeof value === \"string\" && value.length === 1;\n"],"names":["useFormFieldProps","useDensity","defaultItemToString","value","useId","useControlled","useState","useRef","escapeRegExp","useEventCallback","selectedItems","useCallback","useEffect","getCursorPosition","ownerWindow","copy","validateProps"],"mappings":"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"}
1
+ {"version":3,"file":"useTokenizedInput.js","sources":["../src/tokenized-input/useTokenizedInput.tsx"],"sourcesContent":["//TODO remove when popout code has been migrated\n/* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access */\nimport { ownerWindow, useControlled, useDensity, useId } from \"@salt-ds/core\";\nimport copy from \"clipboard-copy\";\nimport {\n ChangeEvent,\n FocusEvent,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n Ref,\n SetStateAction,\n SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { escapeRegExp, useEventCallback } from \"../utils\";\nimport { defaultItemToString } from \"./internal/defaultItemToString\";\nimport { getCursorPosition } from \"./internal/getCursorPosition\";\nimport { TokenizedInputProps } from \"./TokenizedInput\";\nimport { TokenizedInputBaseProps } from \"./TokenizedInputBase\";\nimport { useFormFieldProps } from \"../form-field-context\";\n\nexport interface TokenizedInputState<Item> {\n activeIndices: Array<number>;\n expanded: boolean | undefined;\n focused: boolean;\n highlightedIndex: number | undefined;\n selectedItems: Array<Item>;\n value: string | undefined;\n}\n\nexport interface TokenizedInputHelpers<Item> {\n cancelBlur: () => void;\n setFocused: (expanded: boolean) => void;\n setHighlightedIndex: (value?: number) => void;\n setValue: (value: string) => void;\n setSelectedItems: (selectedItems: Array<Item>) => void;\n updateExpanded: (expanded: boolean) => void;\n}\n\n// Timeout to accommodate blur from the input and a click inside of the container\nconst BLUR_TIMEOUT = 200;\n\n/**\n * Map of the height of TokenizedInput in different density.\n * We have to keep a map of this as we can't always measure the height of the input in it's\n * collapsed state, e.g. in a controlled 'expanded' state.\n */\nconst SINGLE_LINE_HEIGHT_MAP = {\n touch: 45,\n low: 36,\n medium: 28,\n high: 23,\n};\n\nfunction isValidItem<Item>(data: unknown): data is Item {\n return (\n (typeof data === \"string\" && Boolean(data.length)) ||\n (typeof data !== \"string\" && data != null)\n );\n}\n\ntype useTokenizedInputResult<Item> = {\n /**\n * Used to do auto focus. It should be set to the actual input node.\n */\n inputRef: Ref<HTMLInputElement>;\n /**\n * The tokenized input state\n */\n state: TokenizedInputState<Item>;\n /**\n * Utility functions for modifying tokenized input state\n */\n helpers: TokenizedInputHelpers<Item>;\n /**\n * Properties applied to a basic tokenized input component\n */\n inputProps: Omit<TokenizedInputBaseProps<Item>, \"helpers\">;\n};\n\nexport function useTokenizedInput<Item>(\n props: TokenizedInputProps<Item>\n): useTokenizedInputResult<Item> {\n validateProps(props);\n\n const {\n inFormField,\n // @ts-ignore\n popoutMode,\n // @ts-ignore\n popoutActions,\n // @ts-ignore\n setIsPoppedOut,\n // @ts-ignore\n setManagedPopout,\n // @ts-ignore\n setIntendedHeight,\n a11yProps: {\n \"aria-labelledby\": ariaLabelledBy,\n disabled: formFieldDisabled,\n } = {},\n } = useFormFieldProps(); // FIXME: FormField Props\n\n const density = useDensity();\n\n const {\n delimiter = \",\",\n initialSelectedItems = [],\n itemToString = defaultItemToString,\n stringToItem = (_, value) => value.trim(),\n disabled = formFieldDisabled,\n disableAddOnBlur,\n onFocus,\n onBlur,\n onClick,\n onExpand,\n onCollapse,\n onKeyUp,\n onKeyDown,\n onInputSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onClear,\n id: idProp,\n value: valueProp,\n expanded: expandedProp,\n selectedItems: selectedItemsProp,\n onChange: onChangeProp,\n \"aria-label\": ariaLabel,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n\n const [value, setValue, isInputControlled] = useControlled<\n string | undefined\n >({\n controlled: valueProp,\n default: \"\",\n name: \"TokenizedInput\",\n state: \"value\",\n });\n\n const [\n // TODO: Check whether defaultValue of [] changes the logic\n selectedItems = [],\n setSelectedItems,\n isSelectionControlled,\n ] = useControlled<Item[] | undefined>({\n controlled: selectedItemsProp,\n default: initialSelectedItems,\n name: \"TokenizedInput\",\n state: \"selectedItems\",\n });\n\n const [expanded, setExpanded, isExpandedControlled] = useControlled<boolean>({\n controlled: expandedProp,\n default: false,\n name: \"TokenizedInput\",\n state: \"expanded\",\n });\n\n const [activeIndices, setActiveIndices] = useState<number[]>([]);\n const [highlightedIndex, setHighlightedIndex] = useState<number | undefined>(\n undefined\n );\n const [focused, setFocusedState] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const blurTimeout = useRef<number | null>(null);\n const preventBlurOnCopy = useRef(false);\n const hasActiveItems = Boolean(activeIndices.length);\n\n const delimiters = ([] as string[]).concat(delimiter);\n const primaryDelimiter = delimiters[0];\n const delimiterRegex = new RegExp(\n delimiters.map(escapeRegExp).join(\"|\"),\n \"gi\"\n );\n\n const onChange = useEventCallback((selectedItems: Item[] | undefined) => {\n if (onChangeProp) {\n onChangeProp(selectedItems);\n }\n });\n\n const cancelBlur = useCallback(() => {\n if (blurTimeout.current) {\n clearTimeout(blurTimeout.current);\n }\n blurTimeout.current = null;\n }, []);\n\n const focusInput = useCallback(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n\n if (popoutMode && setIsPoppedOut) {\n setIsPoppedOut(true);\n }\n }\n }, [popoutMode, setIsPoppedOut]);\n\n useEffect(\n () => () => {\n cancelBlur();\n },\n [cancelBlur]\n );\n\n useEffect(() => {\n if (expanded) {\n focusInput();\n }\n }, [expanded, focusInput]);\n\n useEffect(() => {\n if (popoutMode && setManagedPopout) {\n setManagedPopout(true);\n\n setIntendedHeight(SINGLE_LINE_HEIGHT_MAP[density]);\n }\n }, [density, popoutMode, setIntendedHeight, setManagedPopout]);\n\n const updateInputValue = (newValue: string | undefined) => {\n if (!isInputControlled) {\n setValue(newValue);\n }\n };\n\n const updateSelectedItems = useCallback(\n (action: SetStateAction<Item[] | undefined>) => {\n if (!isSelectionControlled) {\n setSelectedItems((prevSelectedItems?: Item[]) => {\n const newItems =\n typeof action === \"function\" ? action(prevSelectedItems) : action;\n\n if (newItems !== prevSelectedItems) {\n onChange(newItems);\n }\n\n return newItems;\n });\n } else {\n onChange(typeof action === \"function\" ? action(selectedItems) : action);\n }\n },\n [isSelectionControlled, setSelectedItems, onChange, selectedItems]\n );\n\n const updateExpanded = (newExpanded: boolean) => {\n if (!isExpandedControlled) {\n setExpanded(newExpanded);\n }\n\n if (newExpanded) {\n onExpand && onExpand();\n } else {\n onCollapse && onCollapse();\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const setFocused = (newState: boolean) => {\n setFocusedState(newState);\n };\n\n const resetInput = () => {\n updateInputValue(\"\");\n setHighlightedIndex(undefined);\n setActiveIndices([]);\n };\n\n const removeItems = useCallback(\n (itemIndices: number[]) => {\n updateSelectedItems(\n (prevSelectedItems) =>\n prevSelectedItems &&\n (prevSelectedItems.length === 0\n ? prevSelectedItems\n : prevSelectedItems.filter(\n (_, index) => itemIndices.indexOf(index) === -1\n ))\n );\n },\n [updateSelectedItems]\n );\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n event.stopPropagation();\n\n // The input will lose focus when building the text to copy in a temporary\n // DOM node. This is particularly visible in a slower browser, i.e. IE 11.\n // This is to prevent a blur in that scenario.\n if (preventBlurOnCopy.current) {\n preventBlurOnCopy.current = false;\n setActiveIndices(\n Array.from(\n { length: selectedItems ? selectedItems.length : 0 },\n (_, index) => index\n )\n );\n return;\n }\n\n setFocused(true);\n\n if (onInputFocus) {\n onInputFocus(event);\n }\n\n if (blurTimeout.current !== null) {\n cancelBlur();\n } else {\n updateExpanded(true);\n\n if (onFocus) {\n onFocus(event);\n }\n }\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n event.stopPropagation();\n\n setFocused(false);\n setHighlightedIndex(undefined);\n setActiveIndices([]);\n\n if (onInputBlur) {\n onInputBlur(event);\n }\n\n handleBlur(event);\n };\n\n const handleBlur = (\n event: FocusEvent<HTMLInputElement | HTMLButtonElement>\n ) => {\n if (preventBlurOnCopy.current) {\n return focusInput();\n }\n\n event.persist();\n\n blurTimeout.current = setTimeout(() => {\n blurTimeout.current = null;\n updateExpanded(false);\n\n if (!disableAddOnBlur) {\n handleAddItems(value, true);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n\n if (popoutMode && setIsPoppedOut) {\n setIsPoppedOut(false);\n }\n }, BLUR_TIMEOUT) as unknown as number;\n };\n\n const handleClick = (event: SyntheticEvent<HTMLElement>) => {\n updateExpanded(true);\n setActiveIndices([]);\n focusInput();\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n setHighlightedIndex(undefined);\n\n if (onInputChange) {\n onInputChange(event);\n }\n\n const newValue = event.target.value;\n\n if (delimiterRegex.test(newValue)) {\n // Process value with delimiters\n handleAddItems(newValue);\n } else {\n // Just update input value if there is no delimiter\n updateInputValue(newValue);\n }\n };\n\n const handleAddItems = (\n newValue: string | undefined,\n appendOnly?: boolean\n ) => {\n if (!newValue || newValue.length === 0) {\n return;\n }\n\n resetInput();\n\n const newItems = newValue\n .split(delimiterRegex)\n .reduce<Item[]>((values, part) => {\n const newItem = stringToItem(\n hasActiveItems ? values : selectedItems.concat(values),\n part\n );\n return isValidItem<Item>(newItem) ? values.concat(newItem) : values;\n }, []);\n\n if (newItems.length) {\n updateSelectedItems((prevSelectedItems = []) =>\n hasActiveItems && !appendOnly\n ? newItems\n : prevSelectedItems.concat(newItems)\n );\n }\n };\n\n const handleRemoveItem = useCallback(\n (itemIndex?: number) => {\n focusInput();\n if (itemIndex) {\n removeItems([itemIndex]);\n }\n },\n [focusInput, removeItems]\n );\n\n const handleClear = (event: ChangeEvent<HTMLInputElement>) => {\n updateSelectedItems([]);\n resetInput();\n focusInput();\n\n if (onClear) {\n onClear(event);\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const cursorAtInputStart = () =>\n getCursorPosition(inputRef) === 0 && Boolean(selectedItems.length);\n\n const highlightAtPillGroupEnd = () =>\n highlightedIndex === selectedItems.length - 1;\n\n const pillGroupKeyDownHandlers: {\n [key: string]: KeyboardEventHandler<HTMLInputElement>;\n } = {\n ArrowLeft: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? selectedItems.length - 1\n : Math.max(0, prevHighlightedIndex - 1)\n );\n },\n ArrowRight: (event) => {\n if (highlightAtPillGroupEnd()) {\n return setHighlightedIndex(undefined);\n }\n\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? prevHighlightedIndex\n : Math.min(selectedItems.length - 1, prevHighlightedIndex + 1)\n );\n },\n Backspace: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n setHighlightedIndex((prevHighlightedIndex) =>\n prevHighlightedIndex == null\n ? prevHighlightedIndex\n : Math.max(0, prevHighlightedIndex - 1)\n );\n },\n Home: (event) => {\n event.preventDefault();\n setHighlightedIndex(0);\n },\n End: (event) => {\n event.preventDefault();\n setHighlightedIndex(selectedItems.length - 1);\n },\n Enter: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n Delete: (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n \" \": (event) => {\n event.preventDefault();\n handleRemoveItem(highlightedIndex);\n },\n };\n\n const inputKeyDownHandlers: {\n [key: string]: KeyboardEventHandler<HTMLInputElement>;\n } = {\n ArrowLeft: (event) => {\n if (cursorAtInputStart()) {\n event.preventDefault();\n setHighlightedIndex(selectedItems.length - 1);\n }\n },\n Backspace: () => {\n if (hasActiveItems) {\n removeItems(activeIndices);\n } else if (cursorAtInputStart()) {\n setHighlightedIndex(selectedItems.length - 1);\n }\n },\n Delete: () => {\n if (hasActiveItems) {\n removeItems(activeIndices);\n }\n },\n Enter: (event) => {\n event.preventDefault();\n\n if (hasActiveItems) {\n removeItems(activeIndices);\n } else {\n handleAddItems(value);\n }\n },\n };\n\n const handleCtrlModifierKeyDown: InputHTMLAttributes<HTMLInputElement>[\"onKeyDown\"] =\n (event) => {\n const win = ownerWindow(event.target as HTMLElement);\n const supportClipboard = win.navigator && win.navigator.clipboard;\n\n switch (event.key.toUpperCase()) {\n case \"A\":\n // Select all\n setHighlightedIndex(undefined);\n setActiveIndices(\n Array.from({ length: selectedItems.length }, (_, index) => index)\n );\n break;\n case \"C\":\n // Copy\n copy(\n activeIndices\n .map((index) => itemToString(selectedItems[index]))\n .concat(value != null ? String(value).trim() : \"\")\n .filter(Boolean)\n .join(primaryDelimiter)\n )\n .then((result) => {\n preventBlurOnCopy.current = !supportClipboard;\n return result;\n })\n .catch((error) => {\n console.error(error);\n });\n break;\n case \"V\":\n // Paste - do nothing and let handleChange deal with it\n break;\n case \"ARROWLEFT\":\n pillGroupKeyDownHandlers.ArrowLeft(event);\n break;\n case \"ARROWRIGHT\":\n pillGroupKeyDownHandlers.ArrowRight(event);\n break;\n case \"BACKSPACE\":\n if (cursorAtInputStart()) {\n handleRemoveItem(selectedItems.length - 1);\n }\n break;\n case \"CONTROL\":\n case \"META\":\n // Do nothing\n break;\n default:\n // Otherwise, reset active items\n setActiveIndices([]);\n }\n };\n\n const handleCommonKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const eventKey = event.key.toUpperCase();\n\n if (eventKey === \"ESCAPE\") {\n event.preventDefault();\n resetInput();\n } else if (eventKey === \"TAB\" && !disableAddOnBlur) {\n // Pressing Tab adds a new value\n handleAddItems(value);\n }\n };\n\n const handleKeyDown: InputHTMLAttributes<HTMLInputElement>[\"onKeyDown\"] = (\n event\n ) => {\n if (onKeyDown) {\n onKeyDown(event);\n }\n if (event.defaultPrevented) {\n return;\n }\n if (\n event.ctrlKey ||\n event.metaKey ||\n [\"CONTROL\", \"META\"].indexOf(event.key.toUpperCase()) !== -1\n ) {\n handleCtrlModifierKeyDown(event);\n } else {\n let handler;\n\n if (highlightedIndex == null) {\n handler = inputKeyDownHandlers[event.key];\n setActiveIndices([]);\n } else {\n handler = pillGroupKeyDownHandlers[event.key];\n }\n\n if (handler != null) {\n handler(event);\n } else {\n handleCommonKeyDown(event);\n }\n }\n\n if (popoutMode && popoutActions) {\n popoutActions.refresh();\n }\n };\n\n const state: TokenizedInputState<Item> = {\n value,\n selectedItems,\n activeIndices,\n highlightedIndex,\n expanded,\n focused: !inFormField && focused,\n };\n\n const eventHandlers = {\n // onFocus is a focus on the expand button\n // It can also be triggered by a focus on the input\n onFocus,\n // onBlur is a blur from the expand button when it's collapsed\n // It can also be triggered by the clear button\n onBlur: expanded ? handleBlur : onBlur,\n onClick: handleClick,\n onInputSelect,\n onInputChange: handleInputChange,\n onInputFocus: handleInputFocus,\n onInputBlur: handleInputBlur,\n onKeyDown: handleKeyDown,\n onRemoveItem: handleRemoveItem,\n onClear: handleClear,\n };\n\n return {\n inputRef,\n state,\n helpers: {\n cancelBlur,\n setValue,\n setSelectedItems,\n setHighlightedIndex,\n setFocused,\n updateExpanded,\n },\n inputProps: {\n id,\n itemToString,\n disabled,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n ...state,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\nconst validateProps = function validateProps<Item>(\n props: TokenizedInputProps<Item>\n) {\n if (process.env.NODE_ENV !== \"production\") {\n const { delimiter } = props;\n\n const invalidDelimiter = Array.isArray(delimiter)\n ? delimiter.every(isChar)\n : isChar(delimiter);\n\n useEffect(() => {\n console.warn(\n \"TokenizedInput delimiter should be a single character or an array of single characters\"\n );\n }, [invalidDelimiter]);\n }\n};\n\nconst isChar = (value: unknown) =>\n typeof value === \"string\" && value.length === 1;\n"],"names":["useFormFieldProps","useDensity","defaultItemToString","value","useId","useControlled","useState","useRef","escapeRegExp","useEventCallback","selectedItems","useCallback","useEffect","getCursorPosition","ownerWindow","copy","validateProps"],"mappings":"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"}
@@ -19,6 +19,7 @@ var DropdownBase = require('../../dropdown/DropdownBase.js');
19
19
  require('../../dropdown/DropdownButton.js');
20
20
  require('../../dropdown/Dropdown.js');
21
21
  require('../../form-field-context/FormFieldContext.js');
22
+ require('../../form-field-context/FormFieldContextNext.js');
22
23
  require('./OverflowPanel.css.js');
23
24
 
24
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n MouseEvent,\n ReactElement,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, DropdownBaseProps } from \"../../dropdown\";\n\nimport \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>\n) {\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen ?? false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n triggerButtonIcon ?? triggerButtonLabel === undefined ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n } else {\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return React.cloneElement(\n item.value as ReactElement,\n formFieldProps\n );\n } else {\n return (\n <ToolbarField {...formFieldProps}>{item.value}</ToolbarField>\n );\n }\n }\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["makePrefixer","forwardRef","useId","useCollectionItems","useRef","useControlled","useKeyboardNavigationPanel","useCallback","jsx","OverflowMenuIcon","jsxs","DropdownBase","clsx","Button","OverflowSeparator","ToolbarField","React"],"mappings":"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"}
1
+ {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n MouseEvent,\n ReactElement,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, DropdownBaseProps } from \"../../dropdown\";\n\nimport \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>\n) {\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen ?? false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n triggerButtonIcon ?? triggerButtonLabel === undefined ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n } else {\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return React.cloneElement(\n item.value as ReactElement,\n formFieldProps\n );\n } else {\n return (\n <ToolbarField {...formFieldProps}>{item.value}</ToolbarField>\n );\n }\n }\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["makePrefixer","forwardRef","useId","useCollectionItems","useRef","useControlled","useKeyboardNavigationPanel","useCallback","jsx","OverflowMenuIcon","jsxs","DropdownBase","clsx","Button","OverflowSeparator","ToolbarField","React"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import styleInject from '../../../../node_modules/style-inject/dist/style-inject.es.js';
2
2
 
3
- var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--saltBanner-background, var(--salt-container-primary-background));\n --banner-fontSize: var(--saltBanner-fontSize, var(--salt-text-fontSize));\n --banner-lineHeight: var(--saltBanner-lineHeight, var(--salt-text-lineHeight));\n --banner-padding: var(--saltBanner-padding, var(--salt-size-unit));\n --banner-label-color: var(--saltBanner-label-color, var(--salt-text-primary-foreground));\n}\n\n.saltBanner {\n background: var(--banner-background);\n border-color: var(--saltBanner-borderColor, var(--banner-status-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-border));\n border-style: var(--saltBanner-borderStyle, var(--salt-container-borderStyle));\n border-bottom: 2px solid var(--saltBanner-borderColor, var(--banner-status-borderColor));\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n padding: 0 var(--banner-padding);\n position: relative;\n /*min-height: 36px;*/\n width: 100%;\n align-items: center;\n}\n\n.saltBanner-closeButton {\n margin: calc(var(--salt-size-unit) * 0.5) auto calc(var(--salt-size-unit) * 0.5) var(--salt-size-unit);\n}\n\n.saltBanner-label {\n flex: 1 0;\n padding: calc(var(--banner-padding) + 2px) 0 calc(var(--banner-padding));\n font-weight: var(--salt-text-label-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n color: var(--banner-label-color);\n}\n\n/* Styles applied to status indicator */\n.saltBanner-icon {\n color: var(--saltBanner-icon-color, var(--banner-status-icon-color));\n fill: var(--saltBanner-icon-color, var(--banner-status-icon-color));\n margin-right: var(--saltTooltip-icon-marginRight, 6px);\n flex: 0 0 auto;\n}\n\n.saltBanner-link {\n font-weight: var(--salt-text-label-fontWeight);\n margin-left: 1ch;\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-status-borderColor: var(--salt-status-info-borderColor);\n --banner-status-icon-color: var(--salt-status-info-foreground);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-status-borderColor: var(--salt-status-error-borderColor);\n --banner-status-icon-color: var(--salt-status-error-foreground);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-status-borderColor: var(--salt-status-warning-borderColor);\n --banner-status-icon-color: var(--salt-status-warning-foreground);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-status-borderColor: var(--salt-status-success-borderColor);\n --banner-status-icon-color: var(--salt-status-success-foreground);\n}\n\n.saltBanner-emphasize.saltBanner-info {\n --banner-background: var(--salt-status-info-background-emphasize);\n}\n\n.saltBanner-emphasize.saltBanner-error {\n --banner-background: var(--salt-status-error-background-emphasize);\n}\n\n.saltBanner-emphasize.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background-emphasize);\n}\n\n.saltBanner-emphasize.saltBanner-success {\n --banner-background: var(--salt-status-success-background-emphasize);\n}\n";
3
+ var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--saltBanner-background, var(--salt-container-primary-background));\n --banner-fontSize: var(--saltBanner-fontSize, var(--salt-text-fontSize));\n --banner-lineHeight: var(--saltBanner-lineHeight, var(--salt-text-lineHeight));\n --banner-padding: var(--saltBanner-padding, var(--salt-size-unit));\n --banner-label-color: var(--saltBanner-label-color, var(--salt-text-primary-foreground));\n}\n\n.saltBanner {\n background: var(--banner-background);\n border-color: var(--saltBanner-borderColor, var(--banner-status-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-border));\n border-style: var(--saltBanner-borderStyle, var(--salt-container-borderStyle));\n border-bottom: 2px solid var(--saltBanner-borderColor, var(--banner-status-borderColor));\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n padding: 0 var(--banner-padding);\n position: relative;\n /*min-height: 36px;*/\n width: 100%;\n align-items: center;\n}\n\n.saltBanner-closeButton {\n margin: calc(var(--salt-size-unit) * 0.5) auto calc(var(--salt-size-unit) * 0.5) var(--salt-size-unit);\n}\n\n.saltBanner-label {\n flex: 1 0;\n padding: calc(var(--banner-padding) + 2px) 0 calc(var(--banner-padding));\n font-weight: var(--salt-text-label-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n color: var(--banner-label-color);\n}\n\n/* Styles applied to status indicator */\n.saltBanner-icon {\n color: var(--saltBanner-icon-color, var(--banner-status-icon-color));\n fill: var(--saltBanner-icon-color, var(--banner-status-icon-color));\n margin-right: var(--saltTooltip-icon-marginRight, 6px);\n flex: 0 0 auto;\n}\n\n.saltBanner-link {\n font-weight: var(--salt-text-label-fontWeight);\n margin-left: 1ch;\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-status-borderColor: var(--salt-status-info-borderColor);\n --banner-status-icon-color: var(--salt-status-info-foreground);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-status-borderColor: var(--salt-status-error-borderColor);\n --banner-status-icon-color: var(--salt-status-error-foreground);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-status-borderColor: var(--salt-status-warning-borderColor);\n --banner-status-icon-color: var(--salt-status-warning-foreground);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-status-borderColor: var(--salt-status-success-borderColor);\n --banner-status-icon-color: var(--salt-status-success-foreground);\n}\n\n.saltBanner-emphasize.saltBanner-info {\n --banner-background: var(--salt-status-info-background);\n}\n\n.saltBanner-emphasize.saltBanner-error {\n --banner-background: var(--salt-status-error-background);\n}\n\n.saltBanner-emphasize.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background);\n}\n\n.saltBanner-emphasize.saltBanner-success {\n --banner-background: var(--salt-status-success-background);\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -9,6 +9,7 @@ import { Dropdown } from '../../dropdown/Dropdown.js';
9
9
  import '../../responsive/useResizeObserver.js';
10
10
  import '../../utils/useFloatingUI.js';
11
11
  import '../../form-field-context/FormFieldContext.js';
12
+ import '../../form-field-context/FormFieldContextNext.js';
12
13
  import '../../list/Highlighter.js';
13
14
  import { ListItem } from '../../list/ListItem.js';
14
15
  import '../../list/List.js';
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n ButtonProps,\n makePrefixer,\n Tooltip,\n useId,\n} from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n ComponentPropsWithRef,\n forwardRef,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { Dropdown, DropdownProps } from \"../../dropdown\";\nimport { ListItem, ListItemType } from \"../../list\";\n\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport \"./CalendarNavigation.css\";\nimport { DateValue, isSameMonth, isSameYear } from \"@internationalized/date\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\nimport { SelectionChangeHandler } from \"../../common-hooks\";\n\ntype DropdownItem = {\n value: DateValue;\n disabled?: boolean;\n};\n\ntype dateDropdownProps = DropdownProps<DropdownItem>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n)\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months = monthsForLocale(visibleMonth).map((month) => {\n return { value: month, disabled: isOutsideAllowedMonths(month) };\n });\n\n const years = [-2, -1, 0, 1, 2]\n .map((delta) => ({ value: visibleMonth.add({ years: delta }) }))\n .filter(({ value }) => !isOutsideAllowedYears(value));\n\n const selectedMonth = months.find((item: DropdownItem) =>\n isSameMonth(item.value, visibleMonth)\n );\n const selectedYear = years.find((item: DropdownItem) =>\n isSameYear(item.value, visibleMonth)\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n };\n}\n\nconst ListItemWithTooltip: ListItemType<DropdownItem> = ({\n item,\n label,\n ...props\n}) => (\n <Tooltip\n placement=\"right\"\n disabled={!item?.disabled}\n content=\"This month is out of range\"\n >\n <ListItem {...props}>{label}</ListItem>\n </Tooltip>\n);\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n ...rest\n } = props;\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n visibleMonth,\n selectedMonth,\n selectedYear,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect: SelectionChangeHandler<DropdownItem> = (\n event,\n month\n ) => {\n if (month) {\n moveToMonth(event, month.value);\n }\n };\n\n const handleYearSelect: SelectionChangeHandler<DropdownItem> = (\n event,\n year\n ) => {\n if (year) {\n moveToMonth(event, year.value);\n }\n };\n\n const monthDropdownId = useId(MonthDropdownProps?.id) || \"\";\n const monthDropdownLabelledBy = clsx(\n MonthDropdownProps?.[\"aria-labelledby\"],\n // TODO need a prop on Dropdown to allow buttonId to be passed, should not make assumptions about internal\n // id assignment like this\n `${monthDropdownId}-control`\n );\n\n const yearDropdownId = useId(YearDropdownProps?.id) || \"\";\n const yearDropdownLabelledBy = clsx(\n YearDropdownProps?.[\"aria-labelledby\"],\n `${yearDropdownId}-control`\n );\n\n const defaultItemToMonth = (date: DropdownItem) => {\n if (hideYearDropdown) {\n return formatDate(date.value, { month: \"long\" });\n }\n return formatDate(date.value, { month: \"short\" });\n };\n\n const defaultItemToYear = (date: DropdownItem) => {\n return formatDate(date.value, { year: \"numeric\" });\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className\n )}\n ref={ref}\n {...rest}\n >\n <Tooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n >\n <Button\n disabled={!canNavigatePrevious}\n variant=\"secondary\"\n onClick={handleNavigatePrevious}\n className={withBaseName(\"previousButton\")}\n focusableWhenDisabled={true}\n >\n <ChevronLeftIcon\n aria-label={`Previous Month, ${formatDate(\n visibleMonth.subtract({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n <Dropdown<DropdownItem>\n source={months}\n id={monthDropdownId}\n aria-labelledby={monthDropdownLabelledBy}\n aria-label=\"Month Dropdown\"\n {...MonthDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedMonth}\n itemToString={defaultItemToMonth}\n onSelectionChange={handleMonthSelect}\n fullWidth\n />\n {!hideYearDropdown && (\n <Dropdown<DropdownItem>\n source={years}\n id={yearDropdownId}\n aria-labelledby={yearDropdownLabelledBy}\n aria-label=\"Year Dropdown\"\n {...YearDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedYear}\n onSelectionChange={handleYearSelect}\n itemToString={defaultItemToYear}\n fullWidth\n />\n )}\n <Tooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n >\n <Button\n disabled={!canNavigateNext}\n variant=\"secondary\"\n onClick={handleNavigateNext}\n className={withBaseName(\"nextButton\")}\n focusableWhenDisabled={true}\n >\n <ChevronRightIcon\n aria-label={`Next Month, ${formatDate(\n visibleMonth.add({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n </div>\n );\n});\n"],"names":["CalendarNavigation"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n ButtonProps,\n makePrefixer,\n Tooltip,\n useId,\n} from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n ComponentPropsWithRef,\n forwardRef,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { Dropdown, DropdownProps } from \"../../dropdown\";\nimport { ListItem, ListItemType } from \"../../list\";\n\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport \"./CalendarNavigation.css\";\nimport { DateValue, isSameMonth, isSameYear } from \"@internationalized/date\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\nimport { SelectionChangeHandler } from \"../../common-hooks\";\n\ntype DropdownItem = {\n value: DateValue;\n disabled?: boolean;\n};\n\ntype dateDropdownProps = DropdownProps<DropdownItem>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n)\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months = monthsForLocale(visibleMonth).map((month) => {\n return { value: month, disabled: isOutsideAllowedMonths(month) };\n });\n\n const years = [-2, -1, 0, 1, 2]\n .map((delta) => ({ value: visibleMonth.add({ years: delta }) }))\n .filter(({ value }) => !isOutsideAllowedYears(value));\n\n const selectedMonth = months.find((item: DropdownItem) =>\n isSameMonth(item.value, visibleMonth)\n );\n const selectedYear = years.find((item: DropdownItem) =>\n isSameYear(item.value, visibleMonth)\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n };\n}\n\nconst ListItemWithTooltip: ListItemType<DropdownItem> = ({\n item,\n label,\n ...props\n}) => (\n <Tooltip\n placement=\"right\"\n disabled={!item?.disabled}\n content=\"This month is out of range\"\n >\n <ListItem {...props}>{label}</ListItem>\n </Tooltip>\n);\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n ...rest\n } = props;\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n visibleMonth,\n selectedMonth,\n selectedYear,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect: SelectionChangeHandler<DropdownItem> = (\n event,\n month\n ) => {\n if (month) {\n moveToMonth(event, month.value);\n }\n };\n\n const handleYearSelect: SelectionChangeHandler<DropdownItem> = (\n event,\n year\n ) => {\n if (year) {\n moveToMonth(event, year.value);\n }\n };\n\n const monthDropdownId = useId(MonthDropdownProps?.id) || \"\";\n const monthDropdownLabelledBy = clsx(\n MonthDropdownProps?.[\"aria-labelledby\"],\n // TODO need a prop on Dropdown to allow buttonId to be passed, should not make assumptions about internal\n // id assignment like this\n `${monthDropdownId}-control`\n );\n\n const yearDropdownId = useId(YearDropdownProps?.id) || \"\";\n const yearDropdownLabelledBy = clsx(\n YearDropdownProps?.[\"aria-labelledby\"],\n `${yearDropdownId}-control`\n );\n\n const defaultItemToMonth = (date: DropdownItem) => {\n if (hideYearDropdown) {\n return formatDate(date.value, { month: \"long\" });\n }\n return formatDate(date.value, { month: \"short\" });\n };\n\n const defaultItemToYear = (date: DropdownItem) => {\n return formatDate(date.value, { year: \"numeric\" });\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className\n )}\n ref={ref}\n {...rest}\n >\n <Tooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n >\n <Button\n disabled={!canNavigatePrevious}\n variant=\"secondary\"\n onClick={handleNavigatePrevious}\n className={withBaseName(\"previousButton\")}\n focusableWhenDisabled={true}\n >\n <ChevronLeftIcon\n aria-label={`Previous Month, ${formatDate(\n visibleMonth.subtract({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n <Dropdown<DropdownItem>\n source={months}\n id={monthDropdownId}\n aria-labelledby={monthDropdownLabelledBy}\n aria-label=\"Month Dropdown\"\n {...MonthDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedMonth}\n itemToString={defaultItemToMonth}\n onSelectionChange={handleMonthSelect}\n fullWidth\n />\n {!hideYearDropdown && (\n <Dropdown<DropdownItem>\n source={years}\n id={yearDropdownId}\n aria-labelledby={yearDropdownLabelledBy}\n aria-label=\"Year Dropdown\"\n {...YearDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedYear}\n onSelectionChange={handleYearSelect}\n itemToString={defaultItemToYear}\n fullWidth\n />\n )}\n <Tooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n >\n <Button\n disabled={!canNavigateNext}\n variant=\"secondary\"\n onClick={handleNavigateNext}\n className={withBaseName(\"nextButton\")}\n focusableWhenDisabled={true}\n >\n <ChevronRightIcon\n aria-label={`Next Month, ${formatDate(\n visibleMonth.add({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n </div>\n );\n});\n"],"names":["CalendarNavigation"],"mappings":"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"}
@@ -128,8 +128,8 @@ const CascadingMenuList = forwardRef(function CascadingMenuList2(props, ref) {
128
128
  className: `${baseClass}-popper`,
129
129
  id: menuId,
130
130
  style: {
131
- top: y != null ? y : "",
132
- left: x != null ? x : "",
131
+ top: y != null ? y : 0,
132
+ left: x != null ? x : 0,
133
133
  position: strategy
134
134
  },
135
135
  ref: floating,