@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.
- package/css/salt-lab.css +101 -398
- package/dist-cjs/calendar/Calendar.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarCarousel.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarCarousel.js +5 -29
- package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js +18 -19
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js +0 -2
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarNavigation.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarNavigation.js +74 -81
- package/dist-cjs/calendar/internal/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarWeekHeader.css.js +1 -1
- package/dist-cjs/calendar/useCalendar.js +14 -8
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarDay.js +15 -5
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/calendar/useSelection.js.map +1 -1
- package/dist-cjs/combo-box-next/ComboBoxNext.js +36 -13
- package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-cjs/combo-box-next/useComboBoxNext.js +16 -15
- package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -1
- package/dist-cjs/dropdown-next/DropdownNext.js +7 -8
- package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-cjs/index.js +0 -18
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/list-control/ListControlContext.js +3 -1
- package/dist-cjs/list-control/ListControlContext.js.map +1 -1
- package/dist-cjs/list-control/ListControlState.js +16 -18
- package/dist-cjs/list-control/ListControlState.js.map +1 -1
- package/dist-cjs/option/Option.css.js +1 -1
- package/dist-cjs/option/Option.js +10 -20
- package/dist-cjs/option/Option.js.map +1 -1
- package/dist-cjs/overlay/Overlay.css.js +1 -1
- package/dist-cjs/overlay/Overlay.js +1 -7
- package/dist-cjs/overlay/Overlay.js.map +1 -1
- package/dist-cjs/overlay/OverlayPanel.js +18 -24
- package/dist-cjs/overlay/OverlayPanel.js.map +1 -1
- package/dist-cjs/overlay/OverlayPanelBase.js +2 -4
- package/dist-cjs/overlay/OverlayPanelBase.js.map +1 -1
- package/dist-cjs/tabs/Tab.js +1 -1
- package/dist-cjs/tabs/Tab.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
- package/dist-cjs/tabs-next/TabstripNext.css.js +1 -1
- package/dist-cjs/tabs-next/TabstripNext.js +23 -21
- package/dist-cjs/tabs-next/TabstripNext.js.map +1 -1
- package/dist-es/calendar/Calendar.css.js +1 -1
- package/dist-es/calendar/internal/CalendarCarousel.css.js +1 -1
- package/dist-es/calendar/internal/CalendarCarousel.js +5 -29
- package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +20 -21
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js +0 -2
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/CalendarNavigation.css.js +1 -1
- package/dist-es/calendar/internal/CalendarNavigation.js +75 -82
- package/dist-es/calendar/internal/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/internal/CalendarWeekHeader.css.js +1 -1
- package/dist-es/calendar/useCalendar.js +14 -8
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarDay.js +15 -5
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/calendar/useSelection.js.map +1 -1
- package/dist-es/combo-box-next/ComboBoxNext.js +36 -13
- package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-es/combo-box-next/useComboBoxNext.js +16 -15
- package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -1
- package/dist-es/dropdown-next/DropdownNext.js +8 -9
- package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-es/index.js +0 -8
- package/dist-es/index.js.map +1 -1
- package/dist-es/list-control/ListControlContext.js +3 -1
- package/dist-es/list-control/ListControlContext.js.map +1 -1
- package/dist-es/list-control/ListControlState.js +16 -19
- package/dist-es/list-control/ListControlState.js.map +1 -1
- package/dist-es/option/Option.css.js +1 -1
- package/dist-es/option/Option.js +11 -21
- package/dist-es/option/Option.js.map +1 -1
- package/dist-es/overlay/Overlay.css.js +1 -1
- package/dist-es/overlay/Overlay.js +1 -7
- package/dist-es/overlay/Overlay.js.map +1 -1
- package/dist-es/overlay/OverlayPanel.js +19 -25
- package/dist-es/overlay/OverlayPanel.js.map +1 -1
- package/dist-es/overlay/OverlayPanelBase.js +2 -4
- package/dist-es/overlay/OverlayPanelBase.js.map +1 -1
- package/dist-es/tabs/Tab.js +1 -1
- package/dist-es/tabs/Tab.js.map +1 -1
- package/dist-es/tabs-next/TabNextContext.js.map +1 -1
- package/dist-es/tabs-next/TabstripNext.css.js +1 -1
- package/dist-es/tabs-next/TabstripNext.js +23 -21
- package/dist-es/tabs-next/TabstripNext.js.map +1 -1
- package/dist-types/calendar/internal/CalendarContext.d.ts +2 -2
- package/dist-types/calendar/internal/CalendarNavigation.d.ts +3 -7
- package/dist-types/calendar/useCalendarDay.d.ts +7 -4
- package/dist-types/calendar/useSelection.d.ts +4 -4
- package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -10
- package/dist-types/combo-box-next/useComboBoxNext.d.ts +6 -4
- package/dist-types/dropdown-next/DropdownNext.d.ts +49 -7
- package/dist-types/index.d.ts +0 -2
- package/dist-types/list-control/ListControlContext.d.ts +1 -1
- package/dist-types/list-control/ListControlState.d.ts +14 -12
- package/dist-types/option/Option.d.ts +0 -4
- package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
- package/dist-types/tabs-next/TabNextContext.d.ts +2 -2
- package/package.json +2 -2
- package/dist-cjs/dialog/Dialog.css.js +0 -6
- package/dist-cjs/dialog/Dialog.css.js.map +0 -1
- package/dist-cjs/dialog/Dialog.js +0 -115
- package/dist-cjs/dialog/Dialog.js.map +0 -1
- package/dist-cjs/dialog/DialogActions.css.js +0 -6
- package/dist-cjs/dialog/DialogActions.css.js.map +0 -1
- package/dist-cjs/dialog/DialogActions.js +0 -33
- package/dist-cjs/dialog/DialogActions.js.map +0 -1
- package/dist-cjs/dialog/DialogCloseButton.css.js +0 -6
- package/dist-cjs/dialog/DialogCloseButton.css.js.map +0 -1
- package/dist-cjs/dialog/DialogCloseButton.js +0 -39
- package/dist-cjs/dialog/DialogCloseButton.js.map +0 -1
- package/dist-cjs/dialog/DialogContent.css.js +0 -6
- package/dist-cjs/dialog/DialogContent.css.js.map +0 -1
- package/dist-cjs/dialog/DialogContent.js +0 -45
- package/dist-cjs/dialog/DialogContent.js.map +0 -1
- package/dist-cjs/dialog/DialogContext.js +0 -17
- package/dist-cjs/dialog/DialogContext.js.map +0 -1
- package/dist-cjs/dialog/DialogTitle.css.js +0 -6
- package/dist-cjs/dialog/DialogTitle.css.js.map +0 -1
- package/dist-cjs/dialog/DialogTitle.js +0 -67
- package/dist-cjs/dialog/DialogTitle.js.map +0 -1
- package/dist-cjs/drawer/Drawer.css.js +0 -6
- package/dist-cjs/drawer/Drawer.css.js.map +0 -1
- package/dist-cjs/drawer/Drawer.js +0 -104
- package/dist-cjs/drawer/Drawer.js.map +0 -1
- package/dist-cjs/drawer/DrawerCloseButton.css.js +0 -6
- package/dist-cjs/drawer/DrawerCloseButton.css.js.map +0 -1
- package/dist-cjs/drawer/DrawerCloseButton.js +0 -44
- package/dist-cjs/drawer/DrawerCloseButton.js.map +0 -1
- package/dist-es/dialog/Dialog.css.js +0 -4
- package/dist-es/dialog/Dialog.css.js.map +0 -1
- package/dist-es/dialog/Dialog.js +0 -110
- package/dist-es/dialog/Dialog.js.map +0 -1
- package/dist-es/dialog/DialogActions.css.js +0 -4
- package/dist-es/dialog/DialogActions.css.js.map +0 -1
- package/dist-es/dialog/DialogActions.js +0 -29
- package/dist-es/dialog/DialogActions.js.map +0 -1
- package/dist-es/dialog/DialogCloseButton.css.js +0 -4
- package/dist-es/dialog/DialogCloseButton.css.js.map +0 -1
- package/dist-es/dialog/DialogCloseButton.js +0 -31
- package/dist-es/dialog/DialogCloseButton.js.map +0 -1
- package/dist-es/dialog/DialogContent.css.js +0 -4
- package/dist-es/dialog/DialogContent.css.js.map +0 -1
- package/dist-es/dialog/DialogContent.js +0 -41
- package/dist-es/dialog/DialogContent.js.map +0 -1
- package/dist-es/dialog/DialogContext.js +0 -12
- package/dist-es/dialog/DialogContext.js.map +0 -1
- package/dist-es/dialog/DialogTitle.css.js +0 -4
- package/dist-es/dialog/DialogTitle.css.js.map +0 -1
- package/dist-es/dialog/DialogTitle.js +0 -59
- package/dist-es/dialog/DialogTitle.js.map +0 -1
- package/dist-es/drawer/Drawer.css.js +0 -4
- package/dist-es/drawer/Drawer.css.js.map +0 -1
- package/dist-es/drawer/Drawer.js +0 -100
- package/dist-es/drawer/Drawer.js.map +0 -1
- package/dist-es/drawer/DrawerCloseButton.css.js +0 -4
- package/dist-es/drawer/DrawerCloseButton.css.js.map +0 -1
- package/dist-es/drawer/DrawerCloseButton.js +0 -36
- package/dist-es/drawer/DrawerCloseButton.js.map +0 -1
- package/dist-types/calendar/useCalendar.d.ts +0 -60
- package/dist-types/dialog/Dialog.d.ts +0 -46
- package/dist-types/dialog/DialogActions.d.ts +0 -8
- package/dist-types/dialog/DialogCloseButton.d.ts +0 -2
- package/dist-types/dialog/DialogContent.d.ts +0 -8
- package/dist-types/dialog/DialogContext.d.ts +0 -8
- package/dist-types/dialog/DialogTitle.d.ts +0 -22
- package/dist-types/dialog/index.d.ts +0 -6
- package/dist-types/drawer/Drawer.d.ts +0 -28
- package/dist-types/drawer/DrawerCloseButton.d.ts +0 -2
- 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
|
|
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(
|
|
156
|
-
|
|
157
|
-
children: /* @__PURE__ */
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
children
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
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 {
|
|
2
|
+
import { ButtonProps } from "@salt-ds/core";
|
|
3
|
+
import { DropdownNextProps } from "../../dropdown-next";
|
|
4
4
|
import { DateValue } from "@internationalized/date";
|
|
5
|
-
declare type
|
|
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
|
|
3
|
+
export interface DayStatus {
|
|
4
4
|
outOfRange?: boolean;
|
|
5
5
|
selected?: boolean;
|
|
6
6
|
today?: boolean;
|
|
7
|
-
unselectable?:
|
|
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 |
|
|
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
|
-
|
|
13
|
+
interface RangeSelectionValueType {
|
|
14
14
|
startDate?: DateValue;
|
|
15
15
|
endDate?: DateValue;
|
|
16
|
-
}
|
|
17
|
-
|
|
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 {
|
|
4
|
-
export
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 |
|
|
92
|
+
value?: string | undefined;
|
|
50
93
|
/**
|
|
51
94
|
* Validation status, one of "error" | "warning" | "success".
|
|
52
95
|
*/
|
|
53
|
-
validationStatus?:
|
|
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;
|
package/dist-types/index.d.ts
CHANGED
|
@@ -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
|
|
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: "
|
|
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: "
|
|
30
|
-
SCROLL_SIZE: "
|
|
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: "
|
|
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: "
|
|
40
|
-
SCROLL_SIZE: "
|
|
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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salt-ds/lab",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
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.
|
|
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
|