asterui 0.12.76 → 0.12.78

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,4 +1,9 @@
1
1
  import { default as React } from 'react';
2
+ export interface SelectOption {
3
+ label: React.ReactNode;
4
+ value: string | number;
5
+ disabled?: boolean;
6
+ }
2
7
  export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {
3
8
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
9
  color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
@@ -12,6 +17,8 @@ export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectE
12
17
  addonBefore?: React.ReactNode;
13
18
  /** Text/element after select (outside, using DaisyUI label) */
14
19
  addonAfter?: React.ReactNode;
20
+ /** Select options array (recommended for better performance) */
21
+ options?: SelectOption[];
15
22
  className?: string;
16
23
  children?: React.ReactNode;
17
24
  'data-testid'?: string;
@@ -1,88 +1,89 @@
1
1
  import { jsx as c, jsxs as w } from "react/jsx-runtime";
2
- import { forwardRef as W, useRef as X } from "react";
3
- import { useConfig as F } from "../providers/ConfigProvider.js";
4
- const i = "select", f = "select-bordered", G = "select-ghost", M = "select-xs", P = "select-sm", k = "select-md", q = "select-lg", A = "select-xl", D = "select-neutral", H = "select-primary", J = "select-secondary", K = "select-accent", L = "select-info", O = "select-success", y = "select-warning", N = "select-error", Q = "floating-label", U = W(
2
+ import { forwardRef as F, useRef as G } from "react";
3
+ import { useConfig as M } from "../providers/ConfigProvider.js";
4
+ const i = "select", f = "select-bordered", O = "select-ghost", P = "select-xs", k = "select-sm", q = "select-md", A = "select-lg", D = "select-xl", H = "select-neutral", J = "select-primary", K = "select-secondary", L = "select-accent", Q = "select-info", U = "select-success", y = "select-warning", N = "select-error", V = "floating-label", Y = F(
5
5
  ({
6
6
  size: j,
7
7
  color: m,
8
- status: S,
9
- ghost: v = !1,
10
- bordered: R = !0,
8
+ status: u,
9
+ ghost: R = !1,
10
+ bordered: $ = !0,
11
11
  floatingLabel: l,
12
12
  addonBefore: n,
13
13
  addonAfter: o,
14
- className: u = "",
15
- children: g,
16
- "data-testid": e,
17
- ...p
18
- }, $) => {
19
- const { componentSize: z } = F(), s = j ?? z ?? "md", B = X(null), x = $ || B, a = {
20
- xs: M,
21
- sm: P,
22
- md: k,
23
- lg: q,
24
- xl: A
25
- }, C = S ? {
14
+ options: S,
15
+ className: g = "",
16
+ children: z,
17
+ "data-testid": s,
18
+ ...h
19
+ }, B) => {
20
+ const { componentSize: E } = M(), t = j ?? E ?? "md", p = () => S ? S.map((e) => /* @__PURE__ */ c("option", { value: e.value, disabled: e.disabled, children: e.label }, e.value)) : z, T = G(null), b = B || T, a = {
21
+ xs: P,
22
+ sm: k,
23
+ md: q,
24
+ lg: A,
25
+ xl: D
26
+ }, x = u ? {
26
27
  error: N,
27
28
  warning: y
28
- }[S] : m ? {
29
- neutral: D,
30
- primary: H,
31
- secondary: J,
32
- accent: K,
33
- info: L,
34
- success: O,
29
+ }[u] : m ? {
30
+ neutral: H,
31
+ primary: J,
32
+ secondary: K,
33
+ accent: L,
34
+ info: Q,
35
+ success: U,
35
36
  warning: y,
36
37
  error: N
37
- }[m] : "", r = n || o, E = r || !!l, d = (t) => e ? `${e}-${t}` : void 0, b = e ? E ? d("select") : e : void 0, T = r ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", u].filter(Boolean).join(" ") : [
38
+ }[m] : "", r = n || o, W = r || !!l, d = (e) => s ? `${s}-${e}` : void 0, C = s ? W ? d("select") : s : void 0, X = r ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", g].filter(Boolean).join(" ") : [
38
39
  i,
39
40
  "w-full",
40
- R && f,
41
- v && G,
42
- s && a[s],
43
- C,
44
- u
45
- ].filter(Boolean).join(" "), h = /* @__PURE__ */ c("select", { ref: x, className: T, "data-testid": b, ...p, children: g });
41
+ $ && f,
42
+ R && O,
43
+ t && a[t],
44
+ x,
45
+ g
46
+ ].filter(Boolean).join(" "), v = /* @__PURE__ */ c("select", { ref: b, className: X, "data-testid": C, ...h, children: p() });
46
47
  if (l) {
47
- const t = [
48
- Q,
49
- s && a[s]
48
+ const e = [
49
+ V,
50
+ t && a[t]
50
51
  ].filter(Boolean).join(" ");
51
- return /* @__PURE__ */ w("label", { className: t, "data-testid": e, children: [
52
+ return /* @__PURE__ */ w("label", { className: e, "data-testid": s, children: [
52
53
  /* @__PURE__ */ c(
53
54
  "select",
54
55
  {
55
- ref: x,
56
+ ref: b,
56
57
  className: `${i} ${f} w-full`,
57
- "data-testid": b,
58
- ...p,
59
- children: g
58
+ "data-testid": C,
59
+ ...h,
60
+ children: p()
60
61
  }
61
62
  ),
62
63
  /* @__PURE__ */ c("span", { children: l })
63
64
  ] });
64
65
  }
65
66
  if (r) {
66
- const t = [
67
+ const e = [
67
68
  i,
68
69
  f,
69
70
  "flex",
70
71
  "items-center",
71
72
  "gap-2",
72
- s && a[s],
73
- C
73
+ t && a[t],
74
+ x
74
75
  ].filter(Boolean).join(" ");
75
- return /* @__PURE__ */ w("label", { className: t, "data-testid": e, children: [
76
+ return /* @__PURE__ */ w("label", { className: e, "data-testid": s, children: [
76
77
  n && /* @__PURE__ */ c("span", { className: "text-base-content/70", "data-testid": d("addon-before"), children: n }),
77
- h,
78
+ v,
78
79
  o && /* @__PURE__ */ c("span", { className: "text-base-content/70", "data-testid": d("addon-after"), children: o })
79
80
  ] });
80
81
  }
81
- return h;
82
+ return v;
82
83
  }
83
84
  );
84
- U.displayName = "Select";
85
+ Y.displayName = "Select";
85
86
  export {
86
- U as Select
87
+ Y as Select
87
88
  };
88
89
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dSelect = 'select'\nconst dSelectBordered = 'select-bordered'\nconst dSelectGhost = 'select-ghost'\nconst dSelectXs = 'select-xs'\nconst dSelectSm = 'select-sm'\nconst dSelectMd = 'select-md'\nconst dSelectLg = 'select-lg'\nconst dSelectXl = 'select-xl'\nconst dSelectNeutral = 'select-neutral'\nconst dSelectPrimary = 'select-primary'\nconst dSelectSecondary = 'select-secondary'\nconst dSelectAccent = 'select-accent'\nconst dSelectInfo = 'select-info'\nconst dSelectSuccess = 'select-success'\nconst dSelectWarning = 'select-warning'\nconst dSelectError = 'select-error'\nconst dFloatingLabel = 'floating-label'\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** Text/element before select (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after select (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n className?: string\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n floatingLabel,\n addonBefore,\n addonAfter,\n className = '',\n children,\n 'data-testid': testId,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const innerRef = useRef<HTMLSelectElement>(null)\n const selectRef = (ref as React.RefObject<HTMLSelectElement>) || innerRef\n\n const sizeClasses = {\n xs: dSelectXs,\n sm: dSelectSm,\n md: dSelectMd,\n lg: dSelectLg,\n xl: dSelectXl,\n }\n\n const colorClasses = {\n neutral: dSelectNeutral,\n primary: dSelectPrimary,\n secondary: dSelectSecondary,\n accent: dSelectAccent,\n info: dSelectInfo,\n success: dSelectSuccess,\n warning: dSelectWarning,\n error: dSelectError,\n }\n\n const statusClasses = {\n error: dSelectError,\n warning: dSelectWarning,\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n // When wrapped with external addons, the wrapper has the styling\n const hasExternalAddons = addonBefore || addonAfter\n const hasWrapper = hasExternalAddons || !!floatingLabel\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n const selectTestId = testId ? (hasWrapper ? getTestId('select') : testId) : undefined\n\n const selectClasses = hasExternalAddons\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n dSelect,\n 'w-full',\n bordered && dSelectBordered,\n ghost && dSelectGhost,\n effectiveSize && sizeClasses[effectiveSize],\n effectiveColorClass,\n className,\n ].filter(Boolean).join(' ')\n\n // Build the core select element\n const selectElement = (\n <select ref={selectRef} className={selectClasses} data-testid={selectTestId} {...props}>\n {children}\n </select>\n )\n\n // Wrap with floating label if specified\n if (floatingLabel) {\n const floatingClasses = [\n dFloatingLabel,\n effectiveSize && sizeClasses[effectiveSize],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses} data-testid={testId}>\n <select\n ref={selectRef}\n className={`${dSelect} ${dSelectBordered} w-full`}\n data-testid={selectTestId}\n {...props}\n >\n {children}\n </select>\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons if specified\n if (hasExternalAddons) {\n const addonClasses = [\n dSelect,\n dSelectBordered,\n 'flex',\n 'items-center',\n 'gap-2',\n effectiveSize && sizeClasses[effectiveSize],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses} data-testid={testId}>\n {addonBefore && (\n <span className=\"text-base-content/70\" data-testid={getTestId('addon-before')}>\n {addonBefore}\n </span>\n )}\n {selectElement}\n {addonAfter && (\n <span className=\"text-base-content/70\" data-testid={getTestId('addon-after')}>\n {addonAfter}\n </span>\n )}\n </label>\n )\n }\n\n return selectElement\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["dSelect","dSelectBordered","dSelectGhost","dSelectXs","dSelectSm","dSelectMd","dSelectLg","dSelectXl","dSelectNeutral","dSelectPrimary","dSelectSecondary","dSelectAccent","dSelectInfo","dSelectSuccess","dSelectWarning","dSelectError","dFloatingLabel","Select","forwardRef","size","color","status","ghost","bordered","floatingLabel","addonBefore","addonAfter","className","children","testId","props","ref","componentSize","useConfig","effectiveSize","innerRef","useRef","selectRef","sizeClasses","effectiveColorClass","hasExternalAddons","hasWrapper","getTestId","suffix","selectTestId","selectClasses","selectElement","jsx","floatingClasses","jsxs","addonClasses"],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","sources":["../../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dSelect = 'select'\nconst dSelectBordered = 'select-bordered'\nconst dSelectGhost = 'select-ghost'\nconst dSelectXs = 'select-xs'\nconst dSelectSm = 'select-sm'\nconst dSelectMd = 'select-md'\nconst dSelectLg = 'select-lg'\nconst dSelectXl = 'select-xl'\nconst dSelectNeutral = 'select-neutral'\nconst dSelectPrimary = 'select-primary'\nconst dSelectSecondary = 'select-secondary'\nconst dSelectAccent = 'select-accent'\nconst dSelectInfo = 'select-info'\nconst dSelectSuccess = 'select-success'\nconst dSelectWarning = 'select-warning'\nconst dSelectError = 'select-error'\nconst dFloatingLabel = 'floating-label'\n\nexport interface SelectOption {\n label: React.ReactNode\n value: string | number\n disabled?: boolean\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** Text/element before select (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after select (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n /** Select options array (recommended for better performance) */\n options?: SelectOption[]\n className?: string\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n floatingLabel,\n addonBefore,\n addonAfter,\n options,\n className = '',\n children,\n 'data-testid': testId,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n // Render options from array or use children\n const renderOptions = () => {\n if (options) {\n return options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))\n }\n return children\n }\n\n const innerRef = useRef<HTMLSelectElement>(null)\n const selectRef = (ref as React.RefObject<HTMLSelectElement>) || innerRef\n\n const sizeClasses = {\n xs: dSelectXs,\n sm: dSelectSm,\n md: dSelectMd,\n lg: dSelectLg,\n xl: dSelectXl,\n }\n\n const colorClasses = {\n neutral: dSelectNeutral,\n primary: dSelectPrimary,\n secondary: dSelectSecondary,\n accent: dSelectAccent,\n info: dSelectInfo,\n success: dSelectSuccess,\n warning: dSelectWarning,\n error: dSelectError,\n }\n\n const statusClasses = {\n error: dSelectError,\n warning: dSelectWarning,\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n // When wrapped with external addons, the wrapper has the styling\n const hasExternalAddons = addonBefore || addonAfter\n const hasWrapper = hasExternalAddons || !!floatingLabel\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n const selectTestId = testId ? (hasWrapper ? getTestId('select') : testId) : undefined\n\n const selectClasses = hasExternalAddons\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n dSelect,\n 'w-full',\n bordered && dSelectBordered,\n ghost && dSelectGhost,\n effectiveSize && sizeClasses[effectiveSize],\n effectiveColorClass,\n className,\n ].filter(Boolean).join(' ')\n\n // Build the core select element\n const selectElement = (\n <select ref={selectRef} className={selectClasses} data-testid={selectTestId} {...props}>\n {renderOptions()}\n </select>\n )\n\n // Wrap with floating label if specified\n if (floatingLabel) {\n const floatingClasses = [\n dFloatingLabel,\n effectiveSize && sizeClasses[effectiveSize],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses} data-testid={testId}>\n <select\n ref={selectRef}\n className={`${dSelect} ${dSelectBordered} w-full`}\n data-testid={selectTestId}\n {...props}\n >\n {renderOptions()}\n </select>\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons if specified\n if (hasExternalAddons) {\n const addonClasses = [\n dSelect,\n dSelectBordered,\n 'flex',\n 'items-center',\n 'gap-2',\n effectiveSize && sizeClasses[effectiveSize],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses} data-testid={testId}>\n {addonBefore && (\n <span className=\"text-base-content/70\" data-testid={getTestId('addon-before')}>\n {addonBefore}\n </span>\n )}\n {selectElement}\n {addonAfter && (\n <span className=\"text-base-content/70\" data-testid={getTestId('addon-after')}>\n {addonAfter}\n </span>\n )}\n </label>\n )\n }\n\n return selectElement\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["dSelect","dSelectBordered","dSelectGhost","dSelectXs","dSelectSm","dSelectMd","dSelectLg","dSelectXl","dSelectNeutral","dSelectPrimary","dSelectSecondary","dSelectAccent","dSelectInfo","dSelectSuccess","dSelectWarning","dSelectError","dFloatingLabel","Select","forwardRef","size","color","status","ghost","bordered","floatingLabel","addonBefore","addonAfter","options","className","children","testId","props","ref","componentSize","useConfig","effectiveSize","renderOptions","option","jsx","innerRef","useRef","selectRef","sizeClasses","effectiveColorClass","hasExternalAddons","hasWrapper","getTestId","suffix","selectTestId","selectClasses","selectElement","floatingClasses","jsxs","addonClasses"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { default as React } from 'react';
2
- export interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
2
+ export interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange'> {
3
3
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
4
  color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error';
5
5
  className?: string;
6
6
  /** Test ID for testing */
7
7
  'data-testid'?: string;
8
+ /** Callback fired when the checked state changes */
9
+ onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
8
10
  }
9
11
  export declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,39 +1,42 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import { forwardRef as m } from "react";
3
- import { useConfig as T } from "../providers/ConfigProvider.js";
4
- const f = "toggle", u = "toggle-xs", p = "toggle-sm", y = "toggle-md", x = "toggle-lg", S = "toggle-xl", h = "toggle-primary", k = "toggle-secondary", C = "toggle-accent", w = "toggle-neutral", z = "toggle-success", N = "toggle-warning", j = "toggle-info", X = "toggle-error", b = m(
1
+ import { jsx as f } from "react/jsx-runtime";
2
+ import { forwardRef as u } from "react";
3
+ import { useConfig as h } from "../providers/ConfigProvider.js";
4
+ const p = "toggle", y = "toggle-xs", x = "toggle-sm", C = "toggle-md", S = "toggle-lg", k = "toggle-xl", w = "toggle-primary", z = "toggle-secondary", N = "toggle-accent", j = "toggle-neutral", X = "toggle-success", b = "toggle-warning", A = "toggle-info", B = "toggle-error", E = u(
5
5
  ({
6
- size: t,
7
- color: o,
8
- className: s = "",
9
- ...e
10
- }, c) => {
11
- const { componentSize: l } = T(), g = t ?? l ?? "md", n = {
12
- xs: u,
13
- sm: p,
14
- md: y,
15
- lg: x,
16
- xl: S
17
- }, r = {
18
- primary: h,
19
- secondary: k,
20
- accent: C,
21
- neutral: w,
22
- success: z,
23
- warning: N,
24
- info: j,
25
- error: X
26
- }, a = [
27
- f,
28
- g && n[g],
29
- o && r[o],
30
- s
31
- ].filter(Boolean).join(" "), d = e.checked ? "checked" : "unchecked";
32
- return /* @__PURE__ */ i("input", { ref: c, type: "checkbox", className: a, "data-state": d, ...e });
6
+ size: s,
7
+ color: e,
8
+ className: c = "",
9
+ onChange: n,
10
+ ...o
11
+ }, l) => {
12
+ const { componentSize: r } = h(), g = s ?? r ?? "md", a = {
13
+ xs: y,
14
+ sm: x,
15
+ md: C,
16
+ lg: S,
17
+ xl: k
18
+ }, d = {
19
+ primary: w,
20
+ secondary: z,
21
+ accent: N,
22
+ neutral: j,
23
+ success: X,
24
+ warning: b,
25
+ info: A,
26
+ error: B
27
+ }, i = [
28
+ p,
29
+ g && a[g],
30
+ e && d[e],
31
+ c
32
+ ].filter(Boolean).join(" "), m = (t) => {
33
+ n?.(t.target.checked, t);
34
+ }, T = o.checked ? "checked" : "unchecked";
35
+ return /* @__PURE__ */ f("input", { ref: l, type: "checkbox", className: i, "data-state": T, ...o, onChange: m });
33
36
  }
34
37
  );
35
- b.displayName = "Toggle";
38
+ E.displayName = "Toggle";
36
39
  export {
37
- b as Toggle
40
+ E as Toggle
38
41
  };
39
42
  //# sourceMappingURL=Toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAURC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
1
+ {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n /** Test ID for testing */\n 'data-testid'?: string\n /** Callback fired when the checked state changes */\n onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n onChange,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.checked, event)\n }\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} onChange={handleChange} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","onChange","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","handleChange","event","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAYRC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBR,KAAQM,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIxB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAqB,IAAe;AAAA,MACnB,SAASpB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHc,IAAgB;AAAA,MACpB3B;AAAA,MACAwB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CP,KAASS,EAAaT,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELU,IAAe,CAACC,MAA+C;AACnE,MAAAV,IAAWU,EAAM,OAAO,SAASA,CAAK;AAAA,IACxC,GAEMC,IAAYV,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAW,EAAC,SAAA,EAAM,KAAAV,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYG,GAAY,GAAGV,GAAO,UAAUQ,EAAA,CAAc;AAAA,EAC9H;AACF;AAEAd,EAAO,cAAc;"}
package/dist/index.d.ts CHANGED
@@ -151,7 +151,7 @@ export type { RatingProps, RatingItemProps } from './components/Rating';
151
151
  export { Result } from './components/Result';
152
152
  export type { ResultProps, ResultStatus } from './components/Result';
153
153
  export { Select } from './components/Select';
154
- export type { SelectProps } from './components/Select';
154
+ export type { SelectProps, SelectOption } from './components/Select';
155
155
  export { Segmented } from './components/Segmented';
156
156
  export type { SegmentedProps, SegmentedItemProps, SegmentedValue } from './components/Segmented';
157
157
  export { Skeleton } from './components/Skeleton';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asterui",
3
- "version": "0.12.76",
3
+ "version": "0.12.78",
4
4
  "description": "React UI component library with DaisyUI",
5
5
  "homepage": "https://asterui.com",
6
6
  "repository": {