@salt-ds/lab 1.0.0-alpha.33 → 1.0.0-alpha.35

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/css/salt-lab.css +101 -398
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/internal/CalendarCarousel.css.js +1 -1
  4. package/dist-cjs/calendar/internal/CalendarCarousel.js +5 -29
  5. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  6. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  7. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  8. package/dist-cjs/calendar/internal/CalendarDay.js +18 -19
  9. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  10. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  11. package/dist-cjs/calendar/internal/CalendarMonth.js +0 -2
  12. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  13. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +1 -1
  14. package/dist-cjs/calendar/internal/CalendarNavigation.js +74 -81
  15. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +1 -1
  16. package/dist-cjs/calendar/internal/CalendarWeekHeader.css.js +1 -1
  17. package/dist-cjs/calendar/useCalendar.js +14 -8
  18. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  19. package/dist-cjs/calendar/useCalendarDay.js +15 -5
  20. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  21. package/dist-cjs/calendar/useSelection.js.map +1 -1
  22. package/dist-cjs/combo-box-next/ComboBoxNext.js +36 -13
  23. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
  24. package/dist-cjs/combo-box-next/useComboBoxNext.js +16 -15
  25. package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -1
  26. package/dist-cjs/dropdown-next/DropdownNext.js +7 -8
  27. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
  28. package/dist-cjs/index.js +0 -18
  29. package/dist-cjs/index.js.map +1 -1
  30. package/dist-cjs/list-control/ListControlContext.js +3 -1
  31. package/dist-cjs/list-control/ListControlContext.js.map +1 -1
  32. package/dist-cjs/list-control/ListControlState.js +16 -18
  33. package/dist-cjs/list-control/ListControlState.js.map +1 -1
  34. package/dist-cjs/option/Option.css.js +1 -1
  35. package/dist-cjs/option/Option.js +10 -20
  36. package/dist-cjs/option/Option.js.map +1 -1
  37. package/dist-cjs/overlay/Overlay.css.js +1 -1
  38. package/dist-cjs/overlay/Overlay.js +1 -7
  39. package/dist-cjs/overlay/Overlay.js.map +1 -1
  40. package/dist-cjs/overlay/OverlayPanel.js +18 -24
  41. package/dist-cjs/overlay/OverlayPanel.js.map +1 -1
  42. package/dist-cjs/overlay/OverlayPanelBase.js +2 -4
  43. package/dist-cjs/overlay/OverlayPanelBase.js.map +1 -1
  44. package/dist-cjs/tabs/Tab.js +1 -1
  45. package/dist-cjs/tabs/Tab.js.map +1 -1
  46. package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
  47. package/dist-cjs/tabs-next/TabstripNext.css.js +1 -1
  48. package/dist-cjs/tabs-next/TabstripNext.js +23 -21
  49. package/dist-cjs/tabs-next/TabstripNext.js.map +1 -1
  50. package/dist-es/calendar/Calendar.css.js +1 -1
  51. package/dist-es/calendar/internal/CalendarCarousel.css.js +1 -1
  52. package/dist-es/calendar/internal/CalendarCarousel.js +5 -29
  53. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  54. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  55. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  56. package/dist-es/calendar/internal/CalendarDay.js +20 -21
  57. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  58. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  59. package/dist-es/calendar/internal/CalendarMonth.js +0 -2
  60. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  61. package/dist-es/calendar/internal/CalendarNavigation.css.js +1 -1
  62. package/dist-es/calendar/internal/CalendarNavigation.js +75 -82
  63. package/dist-es/calendar/internal/CalendarNavigation.js.map +1 -1
  64. package/dist-es/calendar/internal/CalendarWeekHeader.css.js +1 -1
  65. package/dist-es/calendar/useCalendar.js +14 -8
  66. package/dist-es/calendar/useCalendar.js.map +1 -1
  67. package/dist-es/calendar/useCalendarDay.js +15 -5
  68. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  69. package/dist-es/calendar/useSelection.js.map +1 -1
  70. package/dist-es/combo-box-next/ComboBoxNext.js +36 -13
  71. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
  72. package/dist-es/combo-box-next/useComboBoxNext.js +16 -15
  73. package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -1
  74. package/dist-es/dropdown-next/DropdownNext.js +8 -9
  75. package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
  76. package/dist-es/index.js +0 -8
  77. package/dist-es/index.js.map +1 -1
  78. package/dist-es/list-control/ListControlContext.js +3 -1
  79. package/dist-es/list-control/ListControlContext.js.map +1 -1
  80. package/dist-es/list-control/ListControlState.js +16 -19
  81. package/dist-es/list-control/ListControlState.js.map +1 -1
  82. package/dist-es/option/Option.css.js +1 -1
  83. package/dist-es/option/Option.js +11 -21
  84. package/dist-es/option/Option.js.map +1 -1
  85. package/dist-es/overlay/Overlay.css.js +1 -1
  86. package/dist-es/overlay/Overlay.js +1 -7
  87. package/dist-es/overlay/Overlay.js.map +1 -1
  88. package/dist-es/overlay/OverlayPanel.js +19 -25
  89. package/dist-es/overlay/OverlayPanel.js.map +1 -1
  90. package/dist-es/overlay/OverlayPanelBase.js +2 -4
  91. package/dist-es/overlay/OverlayPanelBase.js.map +1 -1
  92. package/dist-es/tabs/Tab.js +1 -1
  93. package/dist-es/tabs/Tab.js.map +1 -1
  94. package/dist-es/tabs-next/TabNextContext.js.map +1 -1
  95. package/dist-es/tabs-next/TabstripNext.css.js +1 -1
  96. package/dist-es/tabs-next/TabstripNext.js +23 -21
  97. package/dist-es/tabs-next/TabstripNext.js.map +1 -1
  98. package/dist-types/calendar/internal/CalendarContext.d.ts +2 -2
  99. package/dist-types/calendar/internal/CalendarNavigation.d.ts +3 -7
  100. package/dist-types/calendar/useCalendarDay.d.ts +7 -4
  101. package/dist-types/calendar/useSelection.d.ts +4 -4
  102. package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -10
  103. package/dist-types/combo-box-next/useComboBoxNext.d.ts +6 -4
  104. package/dist-types/dropdown-next/DropdownNext.d.ts +49 -7
  105. package/dist-types/index.d.ts +0 -2
  106. package/dist-types/list-control/ListControlContext.d.ts +1 -1
  107. package/dist-types/list-control/ListControlState.d.ts +14 -12
  108. package/dist-types/option/Option.d.ts +0 -4
  109. package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
  110. package/dist-types/tabs-next/TabNextContext.d.ts +2 -2
  111. package/package.json +2 -2
  112. package/dist-cjs/dialog/Dialog.css.js +0 -6
  113. package/dist-cjs/dialog/Dialog.css.js.map +0 -1
  114. package/dist-cjs/dialog/Dialog.js +0 -115
  115. package/dist-cjs/dialog/Dialog.js.map +0 -1
  116. package/dist-cjs/dialog/DialogActions.css.js +0 -6
  117. package/dist-cjs/dialog/DialogActions.css.js.map +0 -1
  118. package/dist-cjs/dialog/DialogActions.js +0 -33
  119. package/dist-cjs/dialog/DialogActions.js.map +0 -1
  120. package/dist-cjs/dialog/DialogCloseButton.css.js +0 -6
  121. package/dist-cjs/dialog/DialogCloseButton.css.js.map +0 -1
  122. package/dist-cjs/dialog/DialogCloseButton.js +0 -39
  123. package/dist-cjs/dialog/DialogCloseButton.js.map +0 -1
  124. package/dist-cjs/dialog/DialogContent.css.js +0 -6
  125. package/dist-cjs/dialog/DialogContent.css.js.map +0 -1
  126. package/dist-cjs/dialog/DialogContent.js +0 -45
  127. package/dist-cjs/dialog/DialogContent.js.map +0 -1
  128. package/dist-cjs/dialog/DialogContext.js +0 -17
  129. package/dist-cjs/dialog/DialogContext.js.map +0 -1
  130. package/dist-cjs/dialog/DialogTitle.css.js +0 -6
  131. package/dist-cjs/dialog/DialogTitle.css.js.map +0 -1
  132. package/dist-cjs/dialog/DialogTitle.js +0 -67
  133. package/dist-cjs/dialog/DialogTitle.js.map +0 -1
  134. package/dist-cjs/drawer/Drawer.css.js +0 -6
  135. package/dist-cjs/drawer/Drawer.css.js.map +0 -1
  136. package/dist-cjs/drawer/Drawer.js +0 -104
  137. package/dist-cjs/drawer/Drawer.js.map +0 -1
  138. package/dist-cjs/drawer/DrawerCloseButton.css.js +0 -6
  139. package/dist-cjs/drawer/DrawerCloseButton.css.js.map +0 -1
  140. package/dist-cjs/drawer/DrawerCloseButton.js +0 -44
  141. package/dist-cjs/drawer/DrawerCloseButton.js.map +0 -1
  142. package/dist-es/dialog/Dialog.css.js +0 -4
  143. package/dist-es/dialog/Dialog.css.js.map +0 -1
  144. package/dist-es/dialog/Dialog.js +0 -110
  145. package/dist-es/dialog/Dialog.js.map +0 -1
  146. package/dist-es/dialog/DialogActions.css.js +0 -4
  147. package/dist-es/dialog/DialogActions.css.js.map +0 -1
  148. package/dist-es/dialog/DialogActions.js +0 -29
  149. package/dist-es/dialog/DialogActions.js.map +0 -1
  150. package/dist-es/dialog/DialogCloseButton.css.js +0 -4
  151. package/dist-es/dialog/DialogCloseButton.css.js.map +0 -1
  152. package/dist-es/dialog/DialogCloseButton.js +0 -31
  153. package/dist-es/dialog/DialogCloseButton.js.map +0 -1
  154. package/dist-es/dialog/DialogContent.css.js +0 -4
  155. package/dist-es/dialog/DialogContent.css.js.map +0 -1
  156. package/dist-es/dialog/DialogContent.js +0 -41
  157. package/dist-es/dialog/DialogContent.js.map +0 -1
  158. package/dist-es/dialog/DialogContext.js +0 -12
  159. package/dist-es/dialog/DialogContext.js.map +0 -1
  160. package/dist-es/dialog/DialogTitle.css.js +0 -4
  161. package/dist-es/dialog/DialogTitle.css.js.map +0 -1
  162. package/dist-es/dialog/DialogTitle.js +0 -59
  163. package/dist-es/dialog/DialogTitle.js.map +0 -1
  164. package/dist-es/drawer/Drawer.css.js +0 -4
  165. package/dist-es/drawer/Drawer.css.js.map +0 -1
  166. package/dist-es/drawer/Drawer.js +0 -100
  167. package/dist-es/drawer/Drawer.js.map +0 -1
  168. package/dist-es/drawer/DrawerCloseButton.css.js +0 -4
  169. package/dist-es/drawer/DrawerCloseButton.css.js.map +0 -1
  170. package/dist-es/drawer/DrawerCloseButton.js +0 -36
  171. package/dist-es/drawer/DrawerCloseButton.js.map +0 -1
  172. package/dist-types/calendar/useCalendar.d.ts +0 -60
  173. package/dist-types/dialog/Dialog.d.ts +0 -46
  174. package/dist-types/dialog/DialogActions.d.ts +0 -8
  175. package/dist-types/dialog/DialogCloseButton.d.ts +0 -2
  176. package/dist-types/dialog/DialogContent.d.ts +0 -8
  177. package/dist-types/dialog/DialogContext.d.ts +0 -8
  178. package/dist-types/dialog/DialogTitle.d.ts +0 -22
  179. package/dist-types/dialog/index.d.ts +0 -6
  180. package/dist-types/drawer/Drawer.d.ts +0 -28
  181. package/dist-types/drawer/DrawerCloseButton.d.ts +0 -2
  182. package/dist-types/drawer/index.d.ts +0 -2
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Component class applied to the root element */\n.saltTabstripNext {\n display: flex;\n flex-wrap: nowrap;\n justify-content: var(--tabstripNext-justifyContent);\n align-items: center;\n position: relative;\n background: transparent;\n width: 100%;\n\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n}\n\n.saltTabstripNext-main {\n padding-left: var(--salt-spacing-300);\n padding-right: var(--salt-spacing-300);\n box-sizing: border-box;\n}\n\n.saltTabstripNext-main::before {\n content: \"\";\n position: absolute;\n inset: auto 0 0 0;\n height: var(--salt-size-border);\n border-bottom: var(--salt-size-border) var(--salt-separable-borderStyle) var(--salt-separable-secondary-borderColor);\n}\n\n.saltTabstripNext .saltTabNext-wrapper:not(:last-child) {\n padding-right: var(--salt-spacing-100);\n box-sizing: border-box;\n}\n";
1
+ var css_248z = "/* Component class applied to the root element */\n.saltTabstripNext {\n display: flex;\n flex-wrap: nowrap;\n justify-content: var(--tabstripNext-justifyContent);\n align-items: center;\n position: relative;\n background: transparent;\n width: 100%;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n}\n.saltTabstripNext-container {\n display: inherit;\n width: 100%;\n position: relative;\n}\n\n.saltTabstripNext-main {\n padding-left: var(--salt-spacing-300);\n padding-right: var(--salt-spacing-300);\n box-sizing: border-box;\n}\n\n.saltTabstripNext-main::before {\n content: \"\";\n position: absolute;\n inset: auto 0 0 0;\n height: var(--salt-size-border);\n border-bottom: var(--salt-size-border) var(--salt-separable-borderStyle) var(--salt-separable-secondary-borderColor);\n}\n\n.saltTabstripNext .saltTabNext-wrapper:not(:last-child) {\n padding-right: var(--salt-spacing-100);\n box-sizing: border-box;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=TabstripNext.css.js.map
@@ -152,27 +152,29 @@ const TabstripNext = forwardRef(
152
152
  };
153
153
  return /* @__PURE__ */ jsx(TabsContext.Provider, {
154
154
  value: contextValue,
155
- children: /* @__PURE__ */ jsx(Overflow, {
156
- ref: handleRef,
157
- children: /* @__PURE__ */ jsxs("div", {
158
- role: "tablist",
159
- className: clsx(
160
- withBaseName(),
161
- withBaseName("horizontal"),
162
- withBaseName(variant),
163
- className
164
- ),
165
- onKeyDown: handleKeyDown,
166
- style: tabstripStyle,
167
- ...rest,
168
- children: [
169
- children,
170
- /* @__PURE__ */ jsx(OverflowMenu, {
171
- tabs: tabList,
172
- onOpenChange: handleOverflowOpenChange,
173
- onSelectionChange: handleOverflowItemClick
174
- })
175
- ]
155
+ children: /* @__PURE__ */ jsx("div", {
156
+ className: clsx(withBaseName("container"), withBaseName(variant)),
157
+ children: /* @__PURE__ */ jsx(Overflow, {
158
+ ref: handleRef,
159
+ children: /* @__PURE__ */ jsxs("div", {
160
+ role: "tablist",
161
+ className: clsx(
162
+ withBaseName(),
163
+ withBaseName("horizontal"),
164
+ className
165
+ ),
166
+ onKeyDown: handleKeyDown,
167
+ style: tabstripStyle,
168
+ ...rest,
169
+ children: [
170
+ children,
171
+ /* @__PURE__ */ jsx(OverflowMenu, {
172
+ tabs: tabList,
173
+ onOpenChange: handleOverflowOpenChange,
174
+ onSelectionChange: handleOverflowItemClick
175
+ })
176
+ ]
177
+ })
176
178
  })
177
179
  })
178
180
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TabstripNext.js","sources":["../src/tabs-next/TabstripNext.tsx"],"sourcesContent":["import { makePrefixer, useControlled, useForkRef } from \"@salt-ds/core\";\nimport clsx from \"clsx\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n ReactNode,\n SyntheticEvent,\n KeyboardEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { Overflow } from \"@fluentui/react-overflow\";\nimport { OverflowMenu } from \"./OverflowMenu\";\nimport tabstripCss from \"./TabstripNext.css\";\nimport { TabsContext } from \"./TabNextContext\";\nimport { SelectionChangeHandler } from \"../common-hooks\";\n\nconst withBaseName = makePrefixer(\"saltTabstripNext\");\n\nexport interface TabstripNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /* Styling active color variant. Defaults to \"primary\". */\n activeColor?: \"primary\" | \"secondary\";\n /* Tabs alignment. Defaults to \"left\" */\n align?: \"left\" | \"center\" | \"right\";\n /* Value for the uncontrolled version. */\n value?: string;\n /* Callback for the controlled version. */\n onChange?: (e: SyntheticEvent, data: { value: string }) => void;\n /* Initial value for the uncontrolled version. */\n defaultValue?: string;\n /* The Tabs variant */\n variant?: \"main\" | \"inline\";\n}\n\ninterface TabValue {\n value: string;\n label: ReactNode;\n}\n\nexport const TabstripNext = forwardRef<HTMLDivElement, TabstripNextProps>(\n function TabstripNext(props, ref) {\n const {\n activeColor = \"primary\",\n align = \"left\",\n children,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n onKeyDown,\n style,\n variant = \"main\",\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tabstrip-next\",\n css: tabstripCss,\n window: targetWindow,\n });\n\n const tabstripRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(tabstripRef, ref);\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"TabstripNext\",\n state: \"selected\",\n });\n const [focusable, setFocusableState] = useState<string | undefined>(value);\n const [overflowOpen, setOverflowOpen] = useState(false);\n\n const activate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>) => {\n const newValue = event.currentTarget.value;\n setValue(newValue);\n if (value !== newValue) {\n onChange?.(event, { value: newValue });\n }\n },\n [onChange, value, setValue]\n );\n\n const isActive = useCallback(\n (id: string | undefined) => {\n return value === id;\n },\n [value]\n );\n\n const setFocusable = useCallback((id: string | undefined) => {\n setFocusableState(id);\n }, []);\n\n const isFocusable = useCallback(\n (id: string | undefined) => {\n return focusable === id || !focusable;\n },\n [focusable]\n );\n\n const [tabList, setTabList] = useState<TabValue[]>([]);\n const registerTab = useCallback((tab: TabValue) => {\n setTabList((list) => list.concat([tab]));\n }, []);\n\n const unregisterTab = useCallback((id: string) => {\n setTabList((list) => list.filter((item) => item.value !== id));\n }, []);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (overflowOpen) return;\n\n const elements: HTMLElement[] = Array.from(\n tabstripRef.current?.querySelectorAll(\n `div:not([data-overflowing]) > [role=\"tab\"]:not([disabled])`\n ) ?? []\n );\n\n const currentIndex = elements.findIndex(\n (element) => element === targetWindow?.document.activeElement\n );\n\n if (currentIndex < 0) return;\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n elements[Math.min(currentIndex + 1, elements.length)]?.focus();\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n elements[Math.max(0, currentIndex - 1)]?.focus();\n break;\n case \"Home\":\n elements[0]?.focus();\n break;\n case \"End\":\n elements[elements.length - 1]?.focus();\n }\n\n onKeyDown?.(event);\n };\n\n const handleOverflowItemClick: SelectionChangeHandler<TabValue> = (\n event,\n item\n ) => {\n if (item) {\n setValue(item.value);\n requestAnimationFrame(() => {\n const element = tabstripRef.current?.querySelector(\n `[value=\"${item.value}\"]`\n );\n if (element instanceof HTMLElement) {\n element?.focus();\n }\n });\n if (value !== item.value) {\n onChange?.(event, { value: item.value });\n }\n }\n };\n\n const handleOverflowOpenChange = (isOpen: boolean) => {\n setOverflowOpen(isOpen);\n };\n\n const contextValue = useMemo(\n () => ({\n activate,\n isActive,\n setFocusable,\n isFocusable,\n registerTab,\n unregisterTab,\n variant,\n activeColor,\n }),\n [\n activate,\n isActive,\n setFocusable,\n isFocusable,\n registerTab,\n unregisterTab,\n variant,\n activeColor,\n ]\n );\n\n const tabstripStyle = {\n \"--tabstripNext-justifyContent\": align,\n ...style,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <Overflow ref={handleRef}>\n <div\n role=\"tablist\"\n className={clsx(\n withBaseName(),\n withBaseName(\"horizontal\"),\n withBaseName(variant),\n className\n )}\n onKeyDown={handleKeyDown}\n style={tabstripStyle}\n {...rest}\n >\n {children}\n <OverflowMenu\n tabs={tabList}\n onOpenChange={handleOverflowOpenChange}\n onSelectionChange={handleOverflowItemClick}\n />\n </div>\n </Overflow>\n </TabsContext.Provider>\n );\n }\n);\n"],"names":["TabstripNext","tabstripCss"],"mappings":"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"}
1
+ {"version":3,"file":"TabstripNext.js","sources":["../src/tabs-next/TabstripNext.tsx"],"sourcesContent":["import { makePrefixer, useControlled, useForkRef } from \"@salt-ds/core\";\nimport clsx from \"clsx\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n ReactNode,\n SyntheticEvent,\n KeyboardEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { Overflow } from \"@fluentui/react-overflow\";\nimport { OverflowMenu } from \"./OverflowMenu\";\nimport tabstripCss from \"./TabstripNext.css\";\nimport { TabsContext } from \"./TabNextContext\";\nimport { SelectionChangeHandler } from \"../common-hooks\";\n\nconst withBaseName = makePrefixer(\"saltTabstripNext\");\n\nexport interface TabstripNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /* Styling active color variant. Defaults to \"primary\". */\n activeColor?: \"primary\" | \"secondary\";\n /* Tabs alignment. Defaults to \"left\" */\n align?: \"left\" | \"center\" | \"right\";\n /* Value for the uncontrolled version. */\n value?: string;\n /* Callback for the controlled version. */\n onChange?: (e: SyntheticEvent, data: { value: string }) => void;\n /* Initial value for the uncontrolled version. */\n defaultValue?: string;\n /* The Tabs variant */\n variant?: \"main\" | \"inline\";\n}\n\ninterface TabValue {\n value: string;\n label: ReactNode;\n}\n\nexport const TabstripNext = forwardRef<HTMLDivElement, TabstripNextProps>(\n function TabstripNext(props, ref) {\n const {\n activeColor = \"primary\",\n align = \"left\",\n children,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n onKeyDown,\n style,\n variant = \"main\",\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tabstrip-next\",\n css: tabstripCss,\n window: targetWindow,\n });\n\n const tabstripRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(tabstripRef, ref);\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"TabstripNext\",\n state: \"selected\",\n });\n const [focusable, setFocusableState] = useState<string | undefined>(value);\n const [overflowOpen, setOverflowOpen] = useState(false);\n\n const activate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>) => {\n const newValue = event.currentTarget.value;\n setValue(newValue);\n if (value !== newValue) {\n onChange?.(event, { value: newValue });\n }\n },\n [onChange, value, setValue]\n );\n\n const isActive = useCallback(\n (id: string | undefined) => {\n return value === id;\n },\n [value]\n );\n\n const setFocusable = useCallback((id: string | undefined) => {\n setFocusableState(id);\n }, []);\n\n const isFocusable = useCallback(\n (id: string | undefined) => {\n return focusable === id || !focusable;\n },\n [focusable]\n );\n\n const [tabList, setTabList] = useState<TabValue[]>([]);\n const registerTab = useCallback((tab: TabValue) => {\n setTabList((list) => list.concat([tab]));\n }, []);\n\n const unregisterTab = useCallback((id: string) => {\n setTabList((list) => list.filter((item) => item.value !== id));\n }, []);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (overflowOpen) return;\n\n const elements: HTMLElement[] = Array.from(\n tabstripRef.current?.querySelectorAll(\n `div:not([data-overflowing]) > [role=\"tab\"]:not([disabled])`\n ) ?? []\n );\n\n const currentIndex = elements.findIndex(\n (element) => element === targetWindow?.document.activeElement\n );\n\n if (currentIndex < 0) return;\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n elements[Math.min(currentIndex + 1, elements.length)]?.focus();\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n elements[Math.max(0, currentIndex - 1)]?.focus();\n break;\n case \"Home\":\n elements[0]?.focus();\n break;\n case \"End\":\n elements[elements.length - 1]?.focus();\n }\n\n onKeyDown?.(event);\n };\n\n const handleOverflowItemClick: SelectionChangeHandler<TabValue> = (\n event,\n item\n ) => {\n if (item) {\n setValue(item.value);\n requestAnimationFrame(() => {\n const element = tabstripRef.current?.querySelector(\n `[value=\"${item.value}\"]`\n );\n if (element instanceof HTMLElement) {\n element?.focus();\n }\n });\n if (value !== item.value) {\n onChange?.(event, { value: item.value });\n }\n }\n };\n\n const handleOverflowOpenChange = (isOpen: boolean) => {\n setOverflowOpen(isOpen);\n };\n\n const contextValue = useMemo(\n () => ({\n activate,\n isActive,\n setFocusable,\n isFocusable,\n registerTab,\n unregisterTab,\n variant,\n activeColor,\n }),\n [\n activate,\n isActive,\n setFocusable,\n isFocusable,\n registerTab,\n unregisterTab,\n variant,\n activeColor,\n ]\n );\n\n const tabstripStyle = {\n \"--tabstripNext-justifyContent\": align,\n ...style,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div className={clsx(withBaseName(\"container\"), withBaseName(variant))}>\n <Overflow ref={handleRef}>\n <div\n role=\"tablist\"\n className={clsx(\n withBaseName(),\n withBaseName(\"horizontal\"),\n className\n )}\n onKeyDown={handleKeyDown}\n style={tabstripStyle}\n {...rest}\n >\n {children}\n <OverflowMenu\n tabs={tabList}\n onOpenChange={handleOverflowOpenChange}\n onSelectionChange={handleOverflowItemClick}\n />\n </div>\n </Overflow>\n </div>\n </TabsContext.Provider>\n );\n }\n);\n"],"names":["TabstripNext","tabstripCss"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { useCalendar } from "../useCalendar";
2
- declare type CalendarState = {
2
+ interface CalendarState {
3
3
  state: ReturnType<typeof useCalendar>["state"];
4
4
  helpers: ReturnType<typeof useCalendar>["helpers"];
5
- };
5
+ }
6
6
  declare const CalendarContext: import("react").Context<CalendarState | null>;
7
7
  declare function useCalendarContext(): CalendarState;
8
8
  export { CalendarContext, useCalendarContext };
@@ -1,12 +1,8 @@
1
- import { ButtonProps } from "@salt-ds/core";
2
1
  import { ComponentPropsWithRef } from "react";
3
- import { DropdownProps } from "../../dropdown";
2
+ import { ButtonProps } from "@salt-ds/core";
3
+ import { DropdownNextProps } from "../../dropdown-next";
4
4
  import { DateValue } from "@internationalized/date";
5
- declare type DropdownItem = {
6
- value: DateValue;
7
- disabled?: boolean;
8
- };
9
- declare type dateDropdownProps = DropdownProps<DropdownItem>;
5
+ declare type dateDropdownProps = DropdownNextProps<DateValue>;
10
6
  export interface CalendarNavigationProps extends ComponentPropsWithRef<"div"> {
11
7
  MonthDropdownProps?: dateDropdownProps;
12
8
  YearDropdownProps?: dateDropdownProps;
@@ -1,13 +1,15 @@
1
1
  import { DateValue } from "@internationalized/date";
2
2
  import { RefObject } from "react";
3
- export declare type DayStatus = {
3
+ export interface DayStatus {
4
4
  outOfRange?: boolean;
5
5
  selected?: boolean;
6
6
  today?: boolean;
7
- unselectable?: "medium" | "low" | false;
7
+ unselectable?: string | false;
8
+ highlighted?: string | false;
8
9
  focused?: boolean;
10
+ disabled?: boolean;
9
11
  hidden?: boolean;
10
- };
12
+ }
11
13
  export interface useCalendarDayProps {
12
14
  date: DateValue;
13
15
  month: DateValue;
@@ -15,5 +17,6 @@ export interface useCalendarDayProps {
15
17
  export declare function useCalendarDay({ date, month }: useCalendarDayProps, ref: RefObject<HTMLElement>): {
16
18
  status: DayStatus;
17
19
  dayProps: Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">;
18
- unselectableReason: string | undefined;
20
+ unselectableReason: string | false | void;
21
+ highlightedReason: string | false | void;
19
22
  };
@@ -10,14 +10,14 @@ interface BaseUseSelectionCalendarProps<SelectionVariantType> {
10
10
  }
11
11
  declare type SingleSelectionValueType = DateValue;
12
12
  declare type MultiSelectionValueType = DateValue[];
13
- declare type RangeSelectionValueType = {
13
+ interface RangeSelectionValueType {
14
14
  startDate?: DateValue;
15
15
  endDate?: DateValue;
16
- };
17
- declare type OffsetSelectionValueType = {
16
+ }
17
+ interface OffsetSelectionValueType {
18
18
  startDate?: DateValue;
19
19
  endDate?: DateValue;
20
- };
20
+ }
21
21
  export interface UseOffsetSelectionCalendarProps extends Omit<BaseUseSelectionCalendarProps<OffsetSelectionValueType>, "startDateOffset" | "endDateOffset"> {
22
22
  selectionVariant: "offset";
23
23
  startDateOffset?: (date: DateValue) => DateValue;
@@ -1,20 +1,17 @@
1
1
  import { ReactNode, Ref } from "react";
2
2
  import { InputProps } from "@salt-ds/core";
3
- import { ListControlProps } from "../list-control/ListControlState";
4
- export interface ComboBoxNextProps<Item = string> extends InputProps, Omit<ListControlProps<Item>, "value" | "defaultValue"> {
3
+ import { UseComboBoxNextProps } from "./useComboBoxNext";
4
+ export declare type ComboBoxNextProps<Item = string> = {
5
5
  /**
6
6
  * The options to display in the combo box.
7
7
  */
8
8
  children?: ReactNode;
9
+ } & UseComboBoxNextProps<Item> & InputProps;
10
+ export declare const ComboBoxNext: <Item = string>(props: {
9
11
  /**
10
- * The default value of the input.
11
- */
12
- defaultValue?: string | readonly string[] | number | undefined;
13
- /**
14
- * The value of the input. The component will be controlled if this prop is provided.
12
+ * The options to display in the combo box.
15
13
  */
16
- value?: string | readonly string[] | number | undefined;
17
- }
18
- export declare const ComboBoxNext: <Item = string>(props: ComboBoxNextProps<Item> & {
14
+ children?: ReactNode;
15
+ } & import("../list-control/ListControlState").ListControlProps<Item> & Pick<Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "defaultValue" | "value"> & InputProps & {
19
16
  ref?: Ref<HTMLDivElement> | undefined;
20
17
  }) => JSX.Element;
@@ -1,8 +1,11 @@
1
1
  import { ListControlProps } from "../list-control/ListControlState";
2
- import { SyntheticEvent } from "react";
2
+ import { ComponentPropsWithoutRef, SyntheticEvent } from "react";
3
3
  import { OptionValue } from "../list-control/ListControlContext";
4
- export declare function useComboBoxNext<Item>(props: ListControlProps<Item>): {
4
+ export declare type UseComboBoxNextProps<Item> = ListControlProps<Item> & Pick<ComponentPropsWithoutRef<"input">, "value" | "defaultValue">;
5
+ export declare function useComboBoxNext<Item>(props: UseComboBoxNextProps<Item>): {
5
6
  select: (event: SyntheticEvent, option: OptionValue<Item>) => void;
7
+ valueState: string | number | readonly string[] | undefined;
8
+ setValueState: import("react").Dispatch<import("react").SetStateAction<string | number | readonly string[] | undefined>>;
6
9
  multiselect: boolean;
7
10
  openState: boolean;
8
11
  setOpen: (newOpen: boolean, reason?: import("../list-control/ListControlState").OpenChangeReason | undefined, key?: string | undefined) => void;
@@ -12,8 +15,6 @@ export declare function useComboBoxNext<Item>(props: ListControlProps<Item>): {
12
15
  selectedState: Item[];
13
16
  setSelectedState: import("react").Dispatch<import("react").SetStateAction<Item[]>>;
14
17
  clear: (event: SyntheticEvent<Element, Event>) => void;
15
- valueState: string | number | readonly string[] | undefined;
16
- setValueState: import("react").Dispatch<import("react").SetStateAction<string | number | readonly string[] | undefined>>;
17
18
  focusVisibleState: boolean;
18
19
  setFocusVisibleState: import("react").Dispatch<import("react").SetStateAction<boolean>>;
19
20
  focusedState: boolean;
@@ -25,4 +26,5 @@ export declare function useComboBoxNext<Item>(props: ListControlProps<Item>): {
25
26
  getIndexOfOption: (option: OptionValue<Item>) => number;
26
27
  getOptionsMatching: (predicate: (option: OptionValue<Item>) => boolean) => OptionValue<Item>[];
27
28
  getOptionFromSearch: (search: string, startFrom?: OptionValue<Item> | undefined) => OptionValue<Item> | undefined;
29
+ valueToString: (item: Item) => string;
28
30
  };
@@ -1,7 +1,7 @@
1
1
  import { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
2
2
  import { ListControlProps } from "../list-control/ListControlState";
3
3
  import { ValidationStatus } from "@salt-ds/core";
4
- export interface DropdownNextProps<Item = string> extends Omit<ComponentPropsWithoutRef<"button">, "value" | "defaultValue">, ListControlProps<Item> {
4
+ export declare type DropdownNextProps<Item = string> = {
5
5
  /**
6
6
  * If `true`, the dropdown will be disabled.
7
7
  */
@@ -40,18 +40,60 @@ export interface DropdownNextProps<Item = string> extends Omit<ComponentPropsWit
40
40
  */
41
41
  variant?: "primary" | "secondary";
42
42
  /**
43
- * The default content of the dropdown shown in the button.
43
+ * The content of the dropdown shown in the button. The component will be controlled if this prop is provided.
44
+ */
45
+ value?: string;
46
+ /**
47
+ * Validation status, one of "error" | "warning" | "success".
48
+ */
49
+ validationStatus?: Exclude<ValidationStatus, "info">;
50
+ } & Omit<ComponentPropsWithoutRef<"button">, "value" | "defaultValue"> & ListControlProps<Item>;
51
+ export declare const DropdownNext: <Item = string>(props: {
52
+ /**
53
+ * If `true`, the dropdown will be disabled.
54
+ */
55
+ disabled?: boolean | undefined;
56
+ /**
57
+ * If `true`, the dropdown will be read-only.
58
+ */
59
+ readOnly?: boolean | undefined;
60
+ /**
61
+ * The options to display in the dropdown.
62
+ */
63
+ children?: ReactNode;
64
+ /**
65
+ * The marker to use in an empty read only dropdown.
66
+ * Use `''` to disable this feature. Defaults to '—'.
67
+ */
68
+ emptyReadOnlyMarker?: string | undefined;
69
+ /**
70
+ * If `true`, the dropdown will be multiselect.
71
+ */
72
+ multiselect?: boolean | undefined;
73
+ /**
74
+ * The text shown when the dropdown has no value.
75
+ */
76
+ placeholder?: string | undefined;
77
+ /**
78
+ * If `true`, the dropdown will be required.
44
79
  */
45
- defaultValue?: string | readonly string[] | number | undefined;
80
+ required?: boolean | undefined;
81
+ /**
82
+ * Start adornment component
83
+ */
84
+ startAdornment?: ReactNode;
85
+ /**
86
+ * Styling variant. Defaults to "primary".
87
+ */
88
+ variant?: "primary" | "secondary" | undefined;
46
89
  /**
47
90
  * The content of the dropdown shown in the button. The component will be controlled if this prop is provided.
48
91
  */
49
- value?: string | readonly string[] | number | undefined;
92
+ value?: string | undefined;
50
93
  /**
51
94
  * Validation status, one of "error" | "warning" | "success".
52
95
  */
53
- validationStatus?: Exclude<ValidationStatus, "info">;
54
- }
55
- export declare const DropdownNext: <Item = string>(props: DropdownNextProps<Item> & {
96
+ validationStatus?: "error" | "warning" | "success" | undefined;
97
+ } & Omit<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "defaultValue" | "value"> & ListControlProps<Item> & {
56
98
  ref?: Ref<HTMLButtonElement> | undefined;
57
99
  }) => JSX.Element;
@@ -15,8 +15,6 @@ export * from "./contact-details";
15
15
  export * from "./content-status";
16
16
  export * from "./deck-item";
17
17
  export * from "./deck-layout";
18
- export * from "./dialog";
19
- export * from "./drawer";
20
18
  export * from "./dropdown";
21
19
  export * from "./dropdown-next";
22
20
  export * from "./editable-label";
@@ -3,7 +3,6 @@ export interface OptionValue<Item> {
3
3
  id: string;
4
4
  disabled: boolean;
5
5
  value: Item;
6
- text: string;
7
6
  }
8
7
  export declare type OpenChangeReason = "input" | "manual";
9
8
  export interface ListControlContextValue<Item> {
@@ -16,6 +15,7 @@ export interface ListControlContextValue<Item> {
16
15
  setActive: (option: OptionValue<Item>) => void;
17
16
  multiselect: boolean;
18
17
  focusVisibleState: boolean;
18
+ valueToString: (item: Item) => string;
19
19
  }
20
20
  export declare const ListControlContext: import("react").Context<ListControlContextValue<any>>;
21
21
  export declare function useListControlContext<Item>(): ListControlContextValue<Item>;
@@ -1,8 +1,14 @@
1
1
  import { SyntheticEvent } from "react";
2
2
  import { OptionValue } from "./ListControlContext";
3
3
  export declare type OpenChangeReason = "input" | "manual";
4
- export interface ListControlProps<Item> {
4
+ export declare type ListControlProps<Item> = {
5
+ /**
6
+ * If true, the control will be disabled.
7
+ */
5
8
  disabled?: boolean;
9
+ /**
10
+ * If true, the control will be read-only.
11
+ */
6
12
  readOnly?: boolean;
7
13
  /**
8
14
  * If true, the list will be open by default.
@@ -28,19 +34,16 @@ export interface ListControlProps<Item> {
28
34
  * Callback fired when the selected options change.
29
35
  */
30
36
  onSelectionChange?: (event: SyntheticEvent, newSelected: Item[]) => void;
31
- /**
32
- * The default value.
33
- */
34
- defaultValue?: string | readonly string[] | number | undefined;
35
- /**
36
- * The value. The component will be controlled if this prop is provided.
37
- */
38
- value?: string | readonly string[] | number | undefined;
39
37
  /**
40
38
  * If true, multiple options can be selected.
41
39
  */
42
40
  multiselect?: boolean;
43
- }
41
+ /**
42
+ * Callback used to convert an option's `value` to a string. This is needed when the value is different to the display value or the value is not a string.
43
+ */
44
+ valueToString?: (item: Item) => string;
45
+ };
46
+ export declare function defaultValueToString<Item>(item: Item): string;
44
47
  export declare function useListControl<Item>(props: ListControlProps<Item>): {
45
48
  multiselect: boolean;
46
49
  openState: boolean;
@@ -52,8 +55,6 @@ export declare function useListControl<Item>(props: ListControlProps<Item>): {
52
55
  setSelectedState: import("react").Dispatch<import("react").SetStateAction<Item[]>>;
53
56
  select: (event: SyntheticEvent, option: OptionValue<Item>) => void;
54
57
  clear: (event: SyntheticEvent) => void;
55
- valueState: string | number | readonly string[] | undefined;
56
- setValueState: import("react").Dispatch<import("react").SetStateAction<string | number | readonly string[] | undefined>>;
57
58
  focusVisibleState: boolean;
58
59
  setFocusVisibleState: import("react").Dispatch<import("react").SetStateAction<boolean>>;
59
60
  focusedState: boolean;
@@ -65,4 +66,5 @@ export declare function useListControl<Item>(props: ListControlProps<Item>): {
65
66
  getIndexOfOption: (option: OptionValue<Item>) => number;
66
67
  getOptionsMatching: (predicate: (option: OptionValue<Item>) => boolean) => OptionValue<Item>[];
67
68
  getOptionFromSearch: (search: string, startFrom?: OptionValue<Item> | undefined) => OptionValue<Item> | undefined;
69
+ valueToString: (item: Item) => string;
68
70
  };
@@ -8,10 +8,6 @@ export interface OptionProps extends ComponentPropsWithoutRef<"div"> {
8
8
  * The value of the option.
9
9
  */
10
10
  value: unknown;
11
- /**
12
- * The text value of the option. If not provided, the text value will be inferred from the children.
13
- */
14
- textValue?: string;
15
11
  /**
16
12
  * The content of the option.
17
13
  */
@@ -20,24 +20,24 @@ export declare type targetType = {
20
20
  declare type Dimension = keyof Pick<DOMRect, "width" | "height">;
21
21
  export declare const measureElementSizeAndPosition: (element: HTMLElement, dimension?: Dimension, includeAutoMargin?: boolean) => number[];
22
22
  export declare const dimensions: (orientation: orientationType) => {
23
- CLIENT_SIZE: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
23
+ CLIENT_SIZE: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
24
24
  CONTRA: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
25
25
  CONTRA_POS: "clientX" | "clientY";
26
26
  DIMENSION: "height" | "width";
27
27
  END: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
28
28
  POS: "clientX" | "clientY";
29
- SCROLL_POS: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
30
- SCROLL_SIZE: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
29
+ SCROLL_POS: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
30
+ SCROLL_SIZE: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
31
31
  START: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
32
32
  } | {
33
- CLIENT_SIZE: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
33
+ CLIENT_SIZE: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
34
34
  CONTRA: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
35
35
  CONTRA_POS: "clientX" | "clientY";
36
36
  DIMENSION: "height" | "width";
37
37
  END: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
38
38
  POS: "clientX" | "clientY";
39
- SCROLL_POS: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
40
- SCROLL_SIZE: "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollTop" | "scrollLeft";
39
+ SCROLL_POS: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
40
+ SCROLL_SIZE: "scrollTop" | "scrollWidth" | "scrollHeight" | "clientHeight" | "clientWidth" | "scrollLeft";
41
41
  START: "x" | "y" | "height" | "width" | "left" | "right" | "top" | "bottom";
42
42
  };
43
43
  export declare const getDraggedItem: (measuredItems: MeasuredDropTarget[]) => MeasuredDropTarget;
@@ -1,8 +1,8 @@
1
1
  import { ReactNode, SyntheticEvent } from "react";
2
- declare type TabValue = {
2
+ interface TabValue {
3
3
  value: string;
4
4
  label: ReactNode;
5
- };
5
+ }
6
6
  export interface TabsContextValue {
7
7
  activeColor: "primary" | "secondary";
8
8
  disabled?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.33",
3
+ "version": "1.0.0-alpha.35",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,7 +26,7 @@
26
26
  "react-window": "^1.8.6",
27
27
  "rifm": "^0.12.0",
28
28
  "tinycolor2": "^1.4.2",
29
- "@salt-ds/core": "^1.18.1",
29
+ "@salt-ds/core": "^1.20.0",
30
30
  "@salt-ds/window": "^0.1.1",
31
31
  "@salt-ds/styles": "^0.2.1",
32
32
  "@salt-ds/icons": "^1.9.1"
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var css_248z = "/* Styles applied to Dialog component */\n.saltDialog {\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n display: flex;\n flex-direction: column;\n padding-top: var(--salt-spacing-300);\n padding-bottom: var(--salt-spacing-300);\n background: var(--salt-container-primary-background);\n box-shadow: var(--salt-overlayable-shadow-modal);\n overflow-y: auto;\n z-index: var(--salt-zIndex-drawer);\n height: min-content;\n border: var(--salt-container-borderStyle) var(--salt-separable-tertiary-borderColor) var(--salt-size-border);\n box-sizing: border-box;\n}\n\n/* Styles applied to Dialog when a status=\"info\" */\n.saltDialog-info {\n border-color: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied to Dialog when a status=\"error\" */\n.saltDialog-error {\n border-color: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied to Dialog when a status=\"warning\" */\n.saltDialog-warning {\n border-color: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied to Dialog when a status=\"success\" */\n.saltDialog-success {\n border-color: var(--salt-status-success-borderColor);\n}\n\n/* Styles applied when the component mounts */\n.saltDialog.saltDialog-enterAnimation {\n animation: var(--salt-animation-fade-in-center);\n}\n\n/* Styles applied when the component unmounts */\n.saltDialog.saltDialog-exitAnimation {\n animation: var(--salt-animation-fade-out-back);\n}\n\n/* Pending design decision on heights and widths */\n.saltDialog-small-xs {\n width: 100%;\n max-height: 48%;\n}\n\n.saltDialog-small-sm {\n width: 56%;\n max-height: 48%;\n}\n\n.saltDialog-small-md {\n width: 36%;\n max-height: 48%;\n}\n\n.saltDialog-small-lg {\n width: 24%;\n max-height: 48%;\n}\n\n.saltDialog-small-xl {\n width: 24%;\n max-height: 48%;\n}\n\n.saltDialog-medium-xs {\n width: 100%;\n max-height: 72%;\n}\n\n.saltDialog-medium-sm {\n width: 84%;\n max-height: 72%;\n}\n\n.saltDialog-medium-md {\n width: 68%;\n max-height: 72%;\n}\n\n.saltDialog-medium-lg {\n width: 48%;\n max-height: 72%;\n}\n\n.saltDialog-medium-xl {\n width: 48%;\n max-height: 72%;\n}\n\n.saltDialog-large-xs {\n width: 100%;\n max-height: 84%;\n}\n\n.saltDialog-large-sm {\n width: 96%;\n max-height: 84%;\n}\n\n.saltDialog-large-md {\n width: 84%;\n max-height: 84%;\n}\n\n.saltDialog-large-lg {\n width: 72%;\n max-height: 84%;\n}\n\n.saltDialog-large-xl {\n width: 72%;\n max-height: 84%;\n}\n";
4
-
5
- module.exports = css_248z;
6
- //# sourceMappingURL=Dialog.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dialog.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,115 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var React = require('react');
7
- var clsx = require('clsx');
8
- var react = require('@floating-ui/react');
9
- var core = require('@salt-ds/core');
10
- var window = require('@salt-ds/window');
11
- var styles = require('@salt-ds/styles');
12
- var Dialog$1 = require('./Dialog.css.js');
13
- var DialogContext = require('./DialogContext.js');
14
-
15
- const ConditionalScrimWrapper = ({
16
- condition,
17
- children
18
- }) => {
19
- return condition ? /* @__PURE__ */ jsxRuntime.jsx(core.Scrim, {
20
- fixed: true,
21
- children
22
- }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
23
- children: [
24
- children,
25
- " "
26
- ]
27
- });
28
- };
29
- const withBaseName = core.makePrefixer("saltDialog");
30
- const Dialog = React.forwardRef(function Dialog2(props, ref) {
31
- var _a, _b;
32
- const {
33
- children,
34
- className,
35
- open = false,
36
- onOpenChange,
37
- status,
38
- disableDismiss,
39
- size = "medium",
40
- disableScrim,
41
- idProp,
42
- ...rest
43
- } = props;
44
- const targetWindow = window.useWindow();
45
- styles.useComponentCssInjection({
46
- testId: "salt-dialog",
47
- css: Dialog$1,
48
- window: targetWindow
49
- });
50
- const id = core.useId(idProp);
51
- const currentbreakpoint = core.useCurrentBreakpoint();
52
- const [showComponent, setShowComponent] = React.useState(false);
53
- const { context, floating, elements } = core.useFloatingUI({
54
- open,
55
- onOpenChange
56
- });
57
- const { getFloatingProps } = react.useInteractions([
58
- react.useClick(context),
59
- react.useDismiss(context, { enabled: !disableDismiss })
60
- ]);
61
- const { Component: FloatingComponent } = core.useFloatingComponent();
62
- const floatingRef = core.useForkRef(floating, ref);
63
- React.useEffect(() => {
64
- if (open && !showComponent) {
65
- setShowComponent(true);
66
- }
67
- if (!open && showComponent) {
68
- const animate = setTimeout(() => {
69
- setShowComponent(false);
70
- }, 300);
71
- return () => clearTimeout(animate);
72
- }
73
- }, [open, showComponent, setShowComponent]);
74
- const contextValue = React.useMemo(() => ({ status, id }), [status, id]);
75
- return /* @__PURE__ */ jsxRuntime.jsx(DialogContext.DialogContext.Provider, {
76
- value: contextValue,
77
- children: /* @__PURE__ */ jsxRuntime.jsx(ConditionalScrimWrapper, {
78
- condition: open && !disableScrim,
79
- children: /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
80
- open: showComponent,
81
- role: "dialog",
82
- "aria-modal": "true",
83
- "aria-labelledby": id,
84
- ref: floatingRef,
85
- width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
86
- height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
87
- focusManagerProps: {
88
- context
89
- },
90
- className: clsx.clsx(
91
- withBaseName(),
92
- withBaseName(size, currentbreakpoint),
93
- {
94
- [withBaseName("enterAnimation")]: open,
95
- [withBaseName("exitAnimation")]: !open,
96
- [withBaseName(status)]: status
97
- },
98
- className
99
- ),
100
- onAnimationEnd: () => {
101
- if (!open && showComponent) {
102
- setShowComponent(false);
103
- }
104
- },
105
- ...getFloatingProps(),
106
- ...rest,
107
- children
108
- })
109
- })
110
- });
111
- });
112
-
113
- exports.ConditionalScrimWrapper = ConditionalScrimWrapper;
114
- exports.Dialog = Dialog;
115
- //# sourceMappingURL=Dialog.js.map