asterui 0.12.63 → 0.12.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTabs = 'tabs'\nconst dTabsBox = 'tabs-box'\nconst dTabsBorder = 'tabs-border'\nconst dTabsLift = 'tabs-lift'\nconst dTabsXs = 'tabs-xs'\nconst dTabsSm = 'tabs-sm'\nconst dTabsMd = 'tabs-md'\nconst dTabsLg = 'tabs-lg'\nconst dTabsXl = 'tabs-xl'\nconst dTab = 'tab'\nconst dTabActive = 'tab-active'\nconst dTabDisabled = 'tab-disabled'\n\nexport type TabsVariant = 'box' | 'border' | 'lift'\nexport type TabsSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TabsPosition = 'top' | 'bottom'\n\nexport interface TabItem {\n key: string\n label: React.ReactNode\n children?: React.ReactNode\n disabled?: boolean\n icon?: React.ReactNode\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Tab panels (compound pattern) */\n children?: React.ReactNode\n /** Tab items (data-driven pattern) */\n items?: TabItem[]\n /** Current active tab key (controlled) */\n activeKey?: string\n /** Default active tab key (uncontrolled) */\n defaultActiveKey?: string\n /** Callback when tab changes */\n onChange?: (key: string) => void\n /** Visual style variant */\n variant?: TabsVariant\n /** Tab size */\n size?: TabsSize\n /** Tab position relative to content */\n position?: TabsPosition\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nexport interface TabPanelProps {\n /** Tab button label */\n tab: React.ReactNode\n /** Disable the tab */\n disabled?: boolean\n /** Tab panel content */\n children?: React.ReactNode\n /** Tab icon */\n icon?: React.ReactNode\n}\n\nconst variantClasses: Record<TabsVariant, string> = {\n box: dTabsBox,\n border: dTabsBorder,\n lift: dTabsLift,\n}\n\nconst sizeClasses: Record<TabsSize, string> = {\n xs: dTabsXs,\n sm: dTabsSm,\n md: dTabsMd,\n lg: dTabsLg,\n xl: dTabsXl,\n}\n\ninterface InternalPanelProps extends TabPanelProps {\n _key: string\n}\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(function TabsRoot(\n {\n children,\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant,\n size,\n position = 'top',\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? (componentSize as TabsSize | undefined)\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n // Get panels from children (compound pattern), extracting key from React element\n const panels = React.Children.toArray(children)\n .filter((child): child is React.ReactElement<TabPanelProps> =>\n React.isValidElement(child) && child.type === TabPanel\n )\n .map((child) => ({\n ...child.props,\n _key: child.key != null ? String(child.key) : '',\n }))\n\n // Convert items to panel-like structure if using data-driven pattern\n const effectivePanels: InternalPanelProps[] = items && items.length > 0\n ? items.map(item => ({\n _key: item.key,\n tab: item.label,\n children: item.children,\n disabled: item.disabled,\n icon: item.icon,\n }))\n : panels\n\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || effectivePanels[0]?._key || ''\n )\n const currentActiveKey = activeKey !== undefined ? activeKey : internalActiveKey\n\n const handleTabClick = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key)\n }\n onChange?.(key)\n }\n\n const classes = [\n dTabs,\n variant && variantClasses[variant],\n effectiveSize && sizeClasses[effectiveSize],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const activePanel = effectivePanels.find((panel) => panel._key === currentActiveKey)\n\n const tabList = (\n <div role=\"tablist\" className={classes} data-testid={getTestId('tablist')}>\n {effectivePanels.map((panel) => {\n const isActive = currentActiveKey === panel._key\n const tabClasses = [\n dTab,\n isActive && dTabActive,\n panel.disabled && dTabDisabled,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n key={panel._key}\n role=\"tab\"\n className={tabClasses}\n onClick={() => !panel.disabled && handleTabClick(panel._key)}\n disabled={panel.disabled}\n data-state={isActive ? 'active' : 'inactive'}\n data-testid={getTestId(`tab-${panel._key}`)}\n aria-selected={isActive}\n >\n {panel.icon && <span className=\"mr-1\">{panel.icon}</span>}\n {panel.tab}\n </button>\n )\n })}\n </div>\n )\n\n const content = activePanel && (\n <div className={position === 'top' ? 'mt-4' : 'mb-4'} role=\"tabpanel\" data-testid={getTestId('tabpanel')}>\n {activePanel.children}\n </div>\n )\n\n return (\n <div ref={ref} data-testid={testId} {...rest}>\n {position === 'top' ? (\n <>\n {tabList}\n {content}\n </>\n ) : (\n <>\n {content}\n {tabList}\n </>\n )}\n </div>\n )\n})\n\nfunction TabPanel({ children }: TabPanelProps) {\n // This component is only used for type checking and is not rendered directly\n // The actual rendering is done in TabsRoot\n return <>{children}</>\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n Panel: TabPanel,\n})\n"],"names":["dTabs","dTabsBox","dTabsBorder","dTabsLift","dTabsXs","dTabsSm","dTabsMd","dTabsLg","dTabsXl","dTab","dTabActive","dTabDisabled","variantClasses","sizeClasses","TabsRoot","forwardRef","children","items","activeKey","defaultActiveKey","onChange","variant","size","position","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","panels","React","child","TabPanel","effectivePanels","item","internalActiveKey","setInternalActiveKey","useState","currentActiveKey","handleTabClick","key","classes","activePanel","panel","tabList","jsx","isActive","tabClasses","jsxs","content","Fragment","Tabs"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState, forwardRef, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTabs = 'tabs'\nconst dTabsBox = 'tabs-box'\nconst dTabsBorder = 'tabs-border'\nconst dTabsLift = 'tabs-lift'\nconst dTabsXs = 'tabs-xs'\nconst dTabsSm = 'tabs-sm'\nconst dTabsMd = 'tabs-md'\nconst dTabsLg = 'tabs-lg'\nconst dTabsXl = 'tabs-xl'\nconst dTab = 'tab'\nconst dTabActive = 'tab-active'\nconst dTabDisabled = 'tab-disabled'\n\nexport type TabsVariant = 'box' | 'border' | 'lift'\nexport type TabsSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TabsPosition = 'top' | 'bottom'\n\nexport interface TabItem {\n key: string\n label: React.ReactNode\n children?: React.ReactNode\n disabled?: boolean\n icon?: React.ReactNode\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Tab panels (compound pattern) */\n children?: React.ReactNode\n /** Tab items (data-driven pattern) */\n items?: TabItem[]\n /** Current active tab key (controlled) */\n activeKey?: string\n /** Default active tab key (uncontrolled) */\n defaultActiveKey?: string\n /** Callback when tab changes */\n onChange?: (key: string) => void\n /** Visual style variant */\n variant?: TabsVariant\n /** Tab size */\n size?: TabsSize\n /** Tab position relative to content */\n position?: TabsPosition\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nexport interface TabPanelProps {\n /** Tab button label */\n tab: React.ReactNode\n /** Disable the tab */\n disabled?: boolean\n /** Tab panel content */\n children?: React.ReactNode\n /** Tab icon */\n icon?: React.ReactNode\n}\n\nconst variantClasses: Record<TabsVariant, string> = {\n box: dTabsBox,\n border: dTabsBorder,\n lift: dTabsLift,\n}\n\nconst sizeClasses: Record<TabsSize, string> = {\n xs: dTabsXs,\n sm: dTabsSm,\n md: dTabsMd,\n lg: dTabsLg,\n xl: dTabsXl,\n}\n\ninterface InternalPanelProps extends TabPanelProps {\n _key: string\n}\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(function TabsRoot(\n {\n children,\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant,\n size,\n position = 'top',\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? (componentSize as TabsSize | undefined)\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n // Get panels from children (compound pattern), extracting key from React element\n const panels = React.Children.toArray(children)\n .filter((child): child is React.ReactElement<TabPanelProps> =>\n React.isValidElement(child) && child.type === TabPanel\n )\n .map((child) => ({\n ...child.props,\n _key: child.key != null ? String(child.key) : '',\n }))\n\n // Convert items to panel-like structure if using data-driven pattern\n const effectivePanels: InternalPanelProps[] = items && items.length > 0\n ? items.map(item => ({\n _key: item.key,\n tab: item.label,\n children: item.children,\n disabled: item.disabled,\n icon: item.icon,\n }))\n : panels\n\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || effectivePanels[0]?._key || ''\n )\n const currentActiveKey = activeKey !== undefined ? activeKey : internalActiveKey\n\n const handleTabClick = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key)\n }\n onChange?.(key)\n }\n\n const classes = [\n dTabs,\n variant && variantClasses[variant],\n effectiveSize && sizeClasses[effectiveSize],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const baseId = useId()\n const activePanel = effectivePanels.find((panel) => panel._key === currentActiveKey)\n\n const tabList = (\n <div role=\"tablist\" className={classes} data-testid={getTestId('tablist')}>\n {effectivePanels.map((panel) => {\n const isActive = currentActiveKey === panel._key\n const tabId = `${baseId}-tab-${panel._key}`\n const panelId = `${baseId}-panel-${panel._key}`\n const tabClasses = [\n dTab,\n isActive && dTabActive,\n panel.disabled && dTabDisabled,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n key={panel._key}\n role=\"tab\"\n id={tabId}\n className={tabClasses}\n onClick={() => !panel.disabled && handleTabClick(panel._key)}\n disabled={panel.disabled}\n data-state={isActive ? 'active' : 'inactive'}\n data-testid={getTestId(`tab-${panel._key}`)}\n aria-selected={isActive}\n aria-controls={panelId}\n >\n {panel.icon && <span className=\"mr-1\">{panel.icon}</span>}\n {panel.tab}\n </button>\n )\n })}\n </div>\n )\n\n const content = activePanel && (\n <div\n className={position === 'top' ? 'mt-4' : 'mb-4'}\n role=\"tabpanel\"\n id={`${baseId}-panel-${activePanel._key}`}\n aria-labelledby={`${baseId}-tab-${activePanel._key}`}\n data-testid={getTestId('tabpanel')}\n >\n {activePanel.children}\n </div>\n )\n\n return (\n <div ref={ref} data-testid={testId} {...rest}>\n {position === 'top' ? (\n <>\n {tabList}\n {content}\n </>\n ) : (\n <>\n {content}\n {tabList}\n </>\n )}\n </div>\n )\n})\n\nfunction TabPanel({ children }: TabPanelProps) {\n // This component is only used for type checking and is not rendered directly\n // The actual rendering is done in TabsRoot\n return <>{children}</>\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n Panel: TabPanel,\n})\n"],"names":["dTabs","dTabsBox","dTabsBorder","dTabsLift","dTabsXs","dTabsSm","dTabsMd","dTabsLg","dTabsXl","dTab","dTabActive","dTabDisabled","variantClasses","sizeClasses","TabsRoot","forwardRef","children","items","activeKey","defaultActiveKey","onChange","variant","size","position","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","panels","React","child","TabPanel","effectivePanels","item","internalActiveKey","setInternalActiveKey","useState","currentActiveKey","handleTabClick","key","classes","baseId","useId","activePanel","panel","tabList","jsx","isActive","tabId","panelId","tabClasses","jsxs","content","Fragment","Tabs"],"mappings":"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"}
@@ -1,43 +1,46 @@
1
- import { jsxs as m, jsx as f } from "react/jsx-runtime";
2
- import n, { useId as u } from "react";
3
- const y = "tooltip", g = "tooltip-top", h = "tooltip-bottom", b = "tooltip-left", j = "tooltip-right", x = "tooltip-neutral", E = "tooltip-primary", I = "tooltip-secondary", N = "tooltip-accent", v = "tooltip-info", w = "tooltip-success", A = "tooltip-warning", B = "tooltip-error", C = "tooltip-open", W = ({
1
+ import { jsxs as f, jsx as u } from "react/jsx-runtime";
2
+ import e, { useId as b } from "react";
3
+ const g = "tooltip", h = "tooltip-top", x = "tooltip-bottom", B = "tooltip-left", j = "tooltip-right", E = "tooltip-neutral", I = "tooltip-primary", N = "tooltip-secondary", v = "tooltip-accent", w = "tooltip-info", A = "tooltip-success", C = "tooltip-warning", D = "tooltip-error", R = "tooltip-open", $ = ({
4
4
  children: o,
5
- tip: t,
6
- className: p = "",
7
- position: c = "top",
8
- color: i,
9
- open: s = !1,
10
- ...e
5
+ tip: i,
6
+ className: c = "",
7
+ position: p = "top",
8
+ color: s,
9
+ open: l = !1,
10
+ ...r
11
11
  }) => {
12
- const l = u(), r = {
13
- top: g,
14
- bottom: h,
15
- left: b,
12
+ const t = b(), a = {
13
+ top: h,
14
+ bottom: x,
15
+ left: B,
16
16
  right: j
17
- }, a = i ? {
18
- neutral: x,
19
- primary: E,
20
- secondary: I,
21
- accent: N,
22
- info: v,
23
- success: w,
24
- warning: A,
25
- error: B
26
- }[i] : void 0, d = [
27
- y,
28
- r[c],
29
- a,
30
- s && C,
31
- p
32
- ].filter(Boolean).join(" "), T = n.isValidElement(o) ? n.cloneElement(o, {
33
- "aria-describedby": l
34
- }) : o;
35
- return /* @__PURE__ */ m("div", { className: d, "data-tip": t, "data-state": s ? "open" : "closed", ...e, children: [
36
- T,
37
- /* @__PURE__ */ f("span", { id: l, role: "tooltip", className: "sr-only", children: t })
17
+ }, d = s ? {
18
+ neutral: E,
19
+ primary: I,
20
+ secondary: N,
21
+ accent: v,
22
+ info: w,
23
+ success: A,
24
+ warning: C,
25
+ error: D
26
+ }[s] : void 0, T = [
27
+ g,
28
+ a[p],
29
+ d,
30
+ l && R,
31
+ c
32
+ ].filter(Boolean).join(" "), m = e.isValidElement(o) ? (() => {
33
+ const n = o.props["aria-describedby"], y = n ? `${n} ${t}` : t;
34
+ return e.cloneElement(o, {
35
+ "aria-describedby": y
36
+ });
37
+ })() : o;
38
+ return /* @__PURE__ */ f("div", { className: T, "data-tip": i, "data-state": l ? "open" : "closed", ...r, children: [
39
+ m,
40
+ /* @__PURE__ */ u("span", { id: t, role: "tooltip", className: "sr-only", children: i })
38
41
  ] });
39
42
  };
40
43
  export {
41
- W as Tooltip
44
+ $ as Tooltip
42
45
  };
43
46
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../src/components/Tooltip.tsx"],"sourcesContent":["import React, { useId } from 'react'\n\n// DaisyUI classes\nconst dTooltip = 'tooltip'\nconst dTooltipTop = 'tooltip-top'\nconst dTooltipBottom = 'tooltip-bottom'\nconst dTooltipLeft = 'tooltip-left'\nconst dTooltipRight = 'tooltip-right'\nconst dTooltipNeutral = 'tooltip-neutral'\nconst dTooltipPrimary = 'tooltip-primary'\nconst dTooltipSecondary = 'tooltip-secondary'\nconst dTooltipAccent = 'tooltip-accent'\nconst dTooltipInfo = 'tooltip-info'\nconst dTooltipSuccess = 'tooltip-success'\nconst dTooltipWarning = 'tooltip-warning'\nconst dTooltipError = 'tooltip-error'\nconst dTooltipOpen = 'tooltip-open'\n\nexport interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n tip: string\n position?: 'top' | 'bottom' | 'left' | 'right'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n open?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n children,\n tip,\n className = '',\n position = 'top',\n color,\n open = false,\n ...rest\n}) => {\n const tooltipId = useId()\n\n const positionClasses = {\n top: dTooltipTop,\n bottom: dTooltipBottom,\n left: dTooltipLeft,\n right: dTooltipRight,\n }\n\n const colorClasses = color\n ? {\n neutral: dTooltipNeutral,\n primary: dTooltipPrimary,\n secondary: dTooltipSecondary,\n accent: dTooltipAccent,\n info: dTooltipInfo,\n success: dTooltipSuccess,\n warning: dTooltipWarning,\n error: dTooltipError,\n }[color]\n : undefined\n\n const classes = [\n dTooltip,\n positionClasses[position],\n colorClasses,\n open && dTooltipOpen,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to add aria-describedby\n const childWithAria = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<{ 'aria-describedby'?: string }>, {\n 'aria-describedby': tooltipId,\n })\n : children\n\n return (\n <div className={classes} data-tip={tip} data-state={open ? 'open' : 'closed'} {...rest}>\n {childWithAria}\n {/* Screen reader accessible tooltip text */}\n <span id={tooltipId} role=\"tooltip\" className=\"sr-only\">\n {tip}\n </span>\n </div>\n )\n}\n"],"names":["dTooltip","dTooltipTop","dTooltipBottom","dTooltipLeft","dTooltipRight","dTooltipNeutral","dTooltipPrimary","dTooltipSecondary","dTooltipAccent","dTooltipInfo","dTooltipSuccess","dTooltipWarning","dTooltipError","dTooltipOpen","Tooltip","children","tip","className","position","color","open","rest","tooltipId","useId","positionClasses","colorClasses","classes","childWithAria","React","jsxs","jsx"],"mappings":";;AAGA,MAAMA,IAAW,WACXC,IAAc,eACdC,IAAiB,kBACjBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAkB,mBAClBC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAe,gBACfC,IAAkB,mBAClBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAe,gBAYRC,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAYC,EAAA,GAEZC,IAAkB;AAAA,IACtB,KAAKvB;AAAA,IACL,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGHqB,IAAeN,IACjB;AAAA,IACE,SAASd;AAAA,IACT,SAASC;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,SAASC;AAAA,IACT,SAASC;AAAA,IACT,OAAOC;AAAA,EAAA,EACPO,CAAK,IACP,QAEEO,IAAU;AAAA,IACd1B;AAAA,IACAwB,EAAgBN,CAAQ;AAAA,IACxBO;AAAA,IACAL,KAAQP;AAAA,IACRI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGLU,IAAgBC,EAAM,eAAeb,CAAQ,IAC/Ca,EAAM,aAAab,GAAiE;AAAA,IAClF,oBAAoBO;AAAA,EAAA,CACrB,IACDP;AAEJ,SACE,gBAAAc,EAAC,OAAA,EAAI,WAAWH,GAAS,YAAUV,GAAK,cAAYI,IAAO,SAAS,UAAW,GAAGC,GAC/E,UAAA;AAAA,IAAAM;AAAA,IAED,gBAAAG,EAAC,UAAK,IAAIR,GAAW,MAAK,WAAU,WAAU,WAC3C,UAAAN,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../../src/components/Tooltip.tsx"],"sourcesContent":["import React, { useId } from 'react'\n\n// DaisyUI classes\nconst dTooltip = 'tooltip'\nconst dTooltipTop = 'tooltip-top'\nconst dTooltipBottom = 'tooltip-bottom'\nconst dTooltipLeft = 'tooltip-left'\nconst dTooltipRight = 'tooltip-right'\nconst dTooltipNeutral = 'tooltip-neutral'\nconst dTooltipPrimary = 'tooltip-primary'\nconst dTooltipSecondary = 'tooltip-secondary'\nconst dTooltipAccent = 'tooltip-accent'\nconst dTooltipInfo = 'tooltip-info'\nconst dTooltipSuccess = 'tooltip-success'\nconst dTooltipWarning = 'tooltip-warning'\nconst dTooltipError = 'tooltip-error'\nconst dTooltipOpen = 'tooltip-open'\n\nexport interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n tip: string\n position?: 'top' | 'bottom' | 'left' | 'right'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n open?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n children,\n tip,\n className = '',\n position = 'top',\n color,\n open = false,\n ...rest\n}) => {\n const tooltipId = useId()\n\n const positionClasses = {\n top: dTooltipTop,\n bottom: dTooltipBottom,\n left: dTooltipLeft,\n right: dTooltipRight,\n }\n\n const colorClasses = color\n ? {\n neutral: dTooltipNeutral,\n primary: dTooltipPrimary,\n secondary: dTooltipSecondary,\n accent: dTooltipAccent,\n info: dTooltipInfo,\n success: dTooltipSuccess,\n warning: dTooltipWarning,\n error: dTooltipError,\n }[color]\n : undefined\n\n const classes = [\n dTooltip,\n positionClasses[position],\n colorClasses,\n open && dTooltipOpen,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to add aria-describedby without clobbering existing values\n const childWithAria = React.isValidElement(children)\n ? (() => {\n const existingDescribedBy = (children.props as { 'aria-describedby'?: string })['aria-describedby']\n const mergedDescribedBy = existingDescribedBy ? `${existingDescribedBy} ${tooltipId}` : tooltipId\n return React.cloneElement(children as React.ReactElement<{ 'aria-describedby'?: string }>, {\n 'aria-describedby': mergedDescribedBy,\n })\n })()\n : children\n\n return (\n <div className={classes} data-tip={tip} data-state={open ? 'open' : 'closed'} {...rest}>\n {childWithAria}\n {/* Screen reader accessible tooltip text */}\n <span id={tooltipId} role=\"tooltip\" className=\"sr-only\">\n {tip}\n </span>\n </div>\n )\n}\n"],"names":["dTooltip","dTooltipTop","dTooltipBottom","dTooltipLeft","dTooltipRight","dTooltipNeutral","dTooltipPrimary","dTooltipSecondary","dTooltipAccent","dTooltipInfo","dTooltipSuccess","dTooltipWarning","dTooltipError","dTooltipOpen","Tooltip","children","tip","className","position","color","open","rest","tooltipId","useId","positionClasses","colorClasses","classes","childWithAria","React","existingDescribedBy","mergedDescribedBy","jsxs","jsx"],"mappings":";;AAGA,MAAMA,IAAW,WACXC,IAAc,eACdC,IAAiB,kBACjBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAkB,mBAClBC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAe,gBACfC,IAAkB,mBAClBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAe,gBAYRC,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAYC,EAAA,GAEZC,IAAkB;AAAA,IACtB,KAAKvB;AAAA,IACL,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGHqB,IAAeN,IACjB;AAAA,IACE,SAASd;AAAA,IACT,SAASC;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,SAASC;AAAA,IACT,SAASC;AAAA,IACT,OAAOC;AAAA,EAAA,EACPO,CAAK,IACP,QAEEO,IAAU;AAAA,IACd1B;AAAA,IACAwB,EAAgBN,CAAQ;AAAA,IACxBO;AAAA,IACAL,KAAQP;AAAA,IACRI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGLU,IAAgBC,EAAM,eAAeb,CAAQ,KAC9C,MAAM;AACL,UAAMc,IAAuBd,EAAS,MAA0C,kBAAkB,GAC5Fe,IAAoBD,IAAsB,GAAGA,CAAmB,IAAIP,CAAS,KAAKA;AACxF,WAAOM,EAAM,aAAab,GAAiE;AAAA,MACzF,oBAAoBe;AAAA,IAAA,CACrB;AAAA,EACH,OACAf;AAEJ,SACE,gBAAAgB,EAAC,OAAA,EAAI,WAAWL,GAAS,YAAUV,GAAK,cAAYI,IAAO,SAAS,UAAW,GAAGC,GAC/E,UAAA;AAAA,IAAAM;AAAA,IAED,gBAAAK,EAAC,UAAK,IAAIV,GAAW,MAAK,WAAU,WAAU,WAC3C,UAAAN,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,220 +1,229 @@
1
- import { jsxs as y, jsx as s } from "react/jsx-runtime";
2
- import { useState as j, useMemo as D, useCallback as S } from "react";
1
+ import { jsxs as y, jsx as r } from "react/jsx-runtime";
2
+ import { useState as M, useMemo as V, useCallback as S } from "react";
3
3
  import { useConfig as _ } from "../providers/ConfigProvider.js";
4
- const E = "checkbox", P = "checkbox-sm", q = "checkbox-primary", O = "input", ee = "input-sm", z = "btn", A = "btn-sm", F = "btn-outline";
4
+ const W = "checkbox", P = "checkbox-sm", q = "checkbox-primary", O = "input", ee = "input-sm", z = "btn", A = "btn-sm", F = "btn-outline";
5
5
  function G({
6
- items: r,
7
- selectedKeys: n,
6
+ items: o,
7
+ selectedKeys: s,
8
8
  onSelectChange: p,
9
- title: g,
10
- showSearch: x,
11
- filterOption: N,
12
- render: T,
13
- showSelectAll: C,
14
- disabled: d,
15
- listStyle: I,
16
- testId: B,
17
- emptyContent: L = "No data"
9
+ title: u,
10
+ showSearch: g,
11
+ filterOption: v,
12
+ render: $,
13
+ showSelectAll: w,
14
+ disabled: a,
15
+ listStyle: T,
16
+ direction: j,
17
+ testId: C,
18
+ emptyContent: B = "No data"
18
19
  }) {
19
- const [k, $] = j(""), b = D(() => k ? r.filter((e) => N(k, e)) : r, [r, k, N]), o = b.filter((e) => !e.disabled), u = o.length > 0 && o.every((e) => n.includes(e.key)), i = o.some((e) => n.includes(e.key)), M = () => {
20
- if (!d)
21
- if (u)
22
- p(n.filter((e) => !o.some((a) => a.key === e)));
20
+ const [m, D] = M(""), c = V(() => m ? o.filter((e) => v(m, e)) : o, [o, m, v]), i = c.filter((e) => !e.disabled), l = i.length > 0 && i.every((e) => s.includes(e.key)), I = i.some((e) => s.includes(e.key)), k = typeof u == "string" ? `${u} list` : j === "left" ? "Source list" : "Target list", K = typeof u == "string" ? `${u} search` : "Search", L = () => {
21
+ if (!a)
22
+ if (l)
23
+ p(s.filter((e) => !i.some((n) => n.key === e)));
23
24
  else {
24
- const e = o.map((l) => l.key), a = [.../* @__PURE__ */ new Set([...n, ...e])];
25
- p(a);
25
+ const e = i.map((x) => x.key), n = [.../* @__PURE__ */ new Set([...s, ...e])];
26
+ p(n);
26
27
  }
27
- }, v = (e, a) => {
28
- d || a || (n.includes(e) ? p(n.filter((l) => l !== e)) : p([...n, e]));
28
+ }, f = (e, n) => {
29
+ a || n || (s.includes(e) ? p(s.filter((x) => x !== e)) : p([...s, e]));
29
30
  };
30
31
  return /* @__PURE__ */ y(
31
32
  "div",
32
33
  {
33
34
  className: "flex flex-col border border-base-300 rounded-lg bg-base-100 overflow-hidden",
34
- style: { width: 200, height: 300, ...I },
35
- "data-testid": B,
35
+ style: { width: 200, height: 300, ...T },
36
+ "data-testid": C,
36
37
  children: [
37
38
  /* @__PURE__ */ y("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-base-300 bg-base-200", children: [
38
- C && /* @__PURE__ */ s(
39
+ w && /* @__PURE__ */ r(
39
40
  "input",
40
41
  {
41
42
  type: "checkbox",
42
- className: `${E} ${P} ${q}`,
43
- checked: u,
43
+ className: `${W} ${P} ${q}`,
44
+ checked: l,
44
45
  ref: (e) => {
45
- e && (e.indeterminate = i && !u);
46
+ e && (e.indeterminate = I && !l);
46
47
  },
47
- onChange: M,
48
- disabled: d || o.length === 0
48
+ onChange: L,
49
+ disabled: a || i.length === 0
49
50
  }
50
51
  ),
51
- /* @__PURE__ */ s("span", { className: "flex-1 font-medium text-sm truncate", children: g }),
52
+ /* @__PURE__ */ r("span", { className: "flex-1 font-medium text-sm truncate", children: u }),
52
53
  /* @__PURE__ */ y("span", { className: "text-xs text-base-content/50", children: [
53
- n.filter((e) => b.some((a) => a.key === e)).length,
54
+ s.filter((e) => c.some((n) => n.key === e)).length,
54
55
  "/",
55
- b.length
56
+ c.length
56
57
  ] })
57
58
  ] }),
58
- x && /* @__PURE__ */ s("div", { className: "px-2 py-2 border-b border-base-300", children: /* @__PURE__ */ s(
59
+ g && /* @__PURE__ */ r("div", { className: "px-2 py-2 border-b border-base-300", children: /* @__PURE__ */ r(
59
60
  "input",
60
61
  {
61
62
  type: "text",
62
63
  className: `${O} ${ee} w-full`,
63
64
  placeholder: "Search...",
64
- value: k,
65
- onChange: (e) => $(e.target.value),
66
- disabled: d
65
+ value: m,
66
+ onChange: (e) => D(e.target.value),
67
+ disabled: a,
68
+ "aria-label": K
67
69
  }
68
70
  ) }),
69
- /* @__PURE__ */ s("div", { className: "flex-1 overflow-auto", children: b.length > 0 ? b.map((e) => /* @__PURE__ */ y(
71
+ /* @__PURE__ */ r("div", { className: "flex-1 overflow-auto", role: "listbox", "aria-multiselectable": "true", "aria-label": k, children: c.length > 0 ? c.map((e) => /* @__PURE__ */ y(
70
72
  "div",
71
73
  {
72
74
  className: [
73
75
  "flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-base-200 transition-colors",
74
- n.includes(e.key) && "bg-primary/10",
75
- (d || e.disabled) && "opacity-50 cursor-not-allowed"
76
+ s.includes(e.key) && "bg-primary/10",
77
+ (a || e.disabled) && "opacity-50 cursor-not-allowed"
76
78
  ].filter(Boolean).join(" "),
77
- onClick: () => v(e.key, !!e.disabled),
79
+ onClick: () => f(e.key, !!e.disabled),
80
+ onKeyDown: (n) => {
81
+ (n.key === "Enter" || n.key === " ") && (n.preventDefault(), f(e.key, !!e.disabled));
82
+ },
83
+ role: "option",
84
+ "aria-selected": s.includes(e.key),
85
+ "aria-disabled": a || e.disabled,
86
+ tabIndex: a || e.disabled ? -1 : 0,
78
87
  children: [
79
- /* @__PURE__ */ s(
88
+ /* @__PURE__ */ r(
80
89
  "input",
81
90
  {
82
91
  type: "checkbox",
83
- className: `${E} ${P} ${q}`,
84
- checked: n.includes(e.key),
85
- disabled: d || e.disabled,
92
+ className: `${W} ${P} ${q}`,
93
+ checked: s.includes(e.key),
94
+ disabled: a || e.disabled,
86
95
  onChange: () => {
87
96
  }
88
97
  }
89
98
  ),
90
- /* @__PURE__ */ s("span", { className: "flex-1 truncate text-sm", children: T(e) })
99
+ /* @__PURE__ */ r("span", { className: "flex-1 truncate text-sm", children: $(e) })
91
100
  ]
92
101
  },
93
102
  e.key
94
- )) : /* @__PURE__ */ s("div", { className: "flex items-center justify-center h-full text-base-content/50 text-sm", children: L }) })
103
+ )) : /* @__PURE__ */ r("div", { className: "flex items-center justify-center h-full text-base-content/50 text-sm", children: B }) })
95
104
  ]
96
105
  }
97
106
  );
98
107
  }
99
108
  function re({
100
- dataSource: r,
101
- targetKeys: n,
109
+ dataSource: o,
110
+ targetKeys: s,
102
111
  defaultTargetKeys: p = [],
103
- onChange: g,
104
- onSelectChange: x,
105
- titles: N = ["Source", "Target"],
106
- render: T = (o) => o.title,
107
- showSearch: C = !1,
108
- filterOption: d = (o, u) => (typeof u.title == "string" ? u.title : String(u.title)).toLowerCase().includes(o.toLowerCase()),
109
- showSelectAll: I = !0,
110
- disabled: B,
111
- listStyle: L,
112
- className: k = "",
113
- "data-testid": $,
114
- ...b
112
+ onChange: u,
113
+ onSelectChange: g,
114
+ titles: v = ["Source", "Target"],
115
+ render: $ = (c) => c.title,
116
+ showSearch: w = !1,
117
+ filterOption: a = (c, i) => (typeof i.title == "string" ? i.title : String(i.title)).toLowerCase().includes(c.toLowerCase()),
118
+ showSelectAll: T = !0,
119
+ disabled: j,
120
+ listStyle: C,
121
+ className: B = "",
122
+ "data-testid": m,
123
+ ...D
115
124
  }) {
116
- const { componentDisabled: o, renderEmpty: u } = _(), i = B ?? o ?? !1, M = u?.("Transfer") ?? "No data", v = (t) => $ ? `${$}-${t}` : void 0, [e, a] = j(p), [l, V] = j([]), [h, W] = j([]), m = n ?? e, H = D(
117
- () => r.filter((t) => !m.includes(t.key)),
118
- [r, m]
119
- ), J = D(
120
- () => r.filter((t) => m.includes(t.key)),
121
- [r, m]
125
+ const { componentDisabled: c, renderEmpty: i } = _(), l = j ?? c ?? !1, I = i?.("Transfer") ?? "No data", k = (t) => m ? `${m}-${t}` : void 0, [K, L] = M(p), [f, e] = M([]), [n, x] = M([]), h = s ?? K, H = V(
126
+ () => o.filter((t) => !h.includes(t.key)),
127
+ [o, h]
128
+ ), J = V(
129
+ () => o.filter((t) => h.includes(t.key)),
130
+ [o, h]
122
131
  ), Q = S(
123
132
  (t) => {
124
- V(t), x?.(t, h);
133
+ e(t), g?.(t, n);
125
134
  },
126
- [h, x]
135
+ [n, g]
127
136
  ), R = S(
128
137
  (t) => {
129
- W(t), x?.(l, t);
138
+ x(t), g?.(f, t);
130
139
  },
131
- [l, x]
140
+ [f, g]
132
141
  ), U = S(() => {
133
- if (i || l.length === 0) return;
134
- const t = l.filter((f) => {
135
- const w = r.find((K) => K.key === f);
136
- return w && !w.disabled;
142
+ if (l || f.length === 0) return;
143
+ const t = f.filter((b) => {
144
+ const N = o.find((E) => E.key === b);
145
+ return N && !N.disabled;
137
146
  });
138
147
  if (t.length === 0) return;
139
- const c = [...m, ...t];
140
- n === void 0 && a(c), V([]), g?.(c, "right", t);
141
- }, [i, l, m, n, g, r]), X = S(() => {
142
- if (i || h.length === 0) return;
143
- const t = h.filter((f) => {
144
- const w = r.find((K) => K.key === f);
145
- return w && !w.disabled;
148
+ const d = [...h, ...t];
149
+ s === void 0 && L(d), e([]), u?.(d, "right", t);
150
+ }, [l, f, h, s, u, o]), X = S(() => {
151
+ if (l || n.length === 0) return;
152
+ const t = n.filter((b) => {
153
+ const N = o.find((E) => E.key === b);
154
+ return N && !N.disabled;
146
155
  });
147
156
  if (t.length === 0) return;
148
- const c = m.filter((f) => !t.includes(f));
149
- n === void 0 && a(c), W([]), g?.(c, "left", t);
150
- }, [i, h, m, n, g, r]), Y = l.some((t) => {
151
- const c = r.find((f) => f.key === t);
152
- return c && !c.disabled;
153
- }), Z = h.some((t) => {
154
- const c = r.find((f) => f.key === t);
155
- return c && !c.disabled;
157
+ const d = h.filter((b) => !t.includes(b));
158
+ s === void 0 && L(d), x([]), u?.(d, "left", t);
159
+ }, [l, n, h, s, u, o]), Y = f.some((t) => {
160
+ const d = o.find((b) => b.key === t);
161
+ return d && !d.disabled;
162
+ }), Z = n.some((t) => {
163
+ const d = o.find((b) => b.key === t);
164
+ return d && !d.disabled;
156
165
  });
157
- return /* @__PURE__ */ y("div", { className: `flex items-center gap-4 ${k}`, "data-testid": $, ...b, children: [
158
- /* @__PURE__ */ s(
166
+ return /* @__PURE__ */ y("div", { className: `flex items-center gap-4 ${B}`, "data-testid": m, ...D, children: [
167
+ /* @__PURE__ */ r(
159
168
  G,
160
169
  {
161
170
  items: H,
162
- selectedKeys: l,
171
+ selectedKeys: f,
163
172
  onSelectChange: Q,
164
- title: N[0],
165
- showSearch: C,
166
- filterOption: d,
167
- render: T,
168
- showSelectAll: I,
169
- disabled: i,
170
- listStyle: L,
173
+ title: v[0],
174
+ showSearch: w,
175
+ filterOption: a,
176
+ render: $,
177
+ showSelectAll: T,
178
+ disabled: l,
179
+ listStyle: C,
171
180
  direction: "left",
172
- testId: v("source"),
173
- emptyContent: M
181
+ testId: k("source"),
182
+ emptyContent: I
174
183
  }
175
184
  ),
176
185
  /* @__PURE__ */ y("div", { className: "flex flex-col gap-2", children: [
177
- /* @__PURE__ */ s(
186
+ /* @__PURE__ */ r(
178
187
  "button",
179
188
  {
180
189
  type: "button",
181
190
  className: `${z} ${A} ${F}`,
182
191
  onClick: U,
183
- disabled: i || !Y,
192
+ disabled: l || !Y,
184
193
  "aria-label": "Move to target",
185
- "data-testid": v("move-right"),
186
- children: /* @__PURE__ */ s("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ s("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
194
+ "data-testid": k("move-right"),
195
+ children: /* @__PURE__ */ r("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
187
196
  }
188
197
  ),
189
- /* @__PURE__ */ s(
198
+ /* @__PURE__ */ r(
190
199
  "button",
191
200
  {
192
201
  type: "button",
193
202
  className: `${z} ${A} ${F}`,
194
203
  onClick: X,
195
- disabled: i || !Z,
204
+ disabled: l || !Z,
196
205
  "aria-label": "Move to source",
197
- "data-testid": v("move-left"),
198
- children: /* @__PURE__ */ s("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ s("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
206
+ "data-testid": k("move-left"),
207
+ children: /* @__PURE__ */ r("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
199
208
  }
200
209
  )
201
210
  ] }),
202
- /* @__PURE__ */ s(
211
+ /* @__PURE__ */ r(
203
212
  G,
204
213
  {
205
214
  items: J,
206
- selectedKeys: h,
215
+ selectedKeys: n,
207
216
  onSelectChange: R,
208
- title: N[1],
209
- showSearch: C,
210
- filterOption: d,
211
- render: T,
212
- showSelectAll: I,
213
- disabled: i,
214
- listStyle: L,
217
+ title: v[1],
218
+ showSearch: w,
219
+ filterOption: a,
220
+ render: $,
221
+ showSelectAll: T,
222
+ disabled: l,
223
+ listStyle: C,
215
224
  direction: "right",
216
- testId: v("target"),
217
- emptyContent: M
225
+ testId: k("target"),
226
+ emptyContent: I
218
227
  }
219
228
  )
220
229
  ] });