erp-pro-ui 0.1.9 → 0.2.0
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/README.md +14 -0
- package/dist/button.cjs +1 -1
- package/dist/button.mjs +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.mjs +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.mjs +1 -1
- package/dist/chip.cjs +1 -1
- package/dist/chip.mjs +1 -1
- package/dist/chunks/{DropdownMenu-CeD9kl_N.cjs → DropdownMenu-BDrNYO-D.cjs} +5 -4
- package/dist/chunks/DropdownMenu-BDrNYO-D.cjs.map +1 -0
- package/dist/chunks/{DropdownMenu-CBdZoVQs.mjs → DropdownMenu-BtTOri-A.mjs} +5 -4
- package/dist/chunks/DropdownMenu-BtTOri-A.mjs.map +1 -0
- package/dist/chunks/{tooltip-PJaQa8_l.cjs → Tooltip-DD30yj3A.cjs} +1 -1
- package/dist/chunks/{tooltip-PJaQa8_l.cjs.map → Tooltip-DD30yj3A.cjs.map} +1 -1
- package/dist/chunks/{tooltip-CmB8xKOF.mjs → Tooltip-DK3B879v.mjs} +1 -1
- package/dist/chunks/{tooltip-CmB8xKOF.mjs.map → Tooltip-DK3B879v.mjs.map} +1 -1
- package/dist/chunks/{button-DddUhuR-.mjs → button-A6UTvrOu.mjs} +2 -2
- package/dist/chunks/{button-DddUhuR-.mjs.map → button-A6UTvrOu.mjs.map} +1 -1
- package/dist/chunks/{button-xqernofO.cjs → button-C4MXPxsC.cjs} +2 -2
- package/dist/chunks/{button-xqernofO.cjs.map → button-C4MXPxsC.cjs.map} +1 -1
- package/dist/chunks/{calendar-BVuDnWUc.mjs → calendar-5XzPqKbE.mjs} +4 -4
- package/dist/chunks/calendar-5XzPqKbE.mjs.map +1 -0
- package/dist/chunks/{calendar-CYxkfvDv.cjs → calendar-CQJgQ5H_.cjs} +4 -4
- package/dist/chunks/calendar-CQJgQ5H_.cjs.map +1 -0
- package/dist/chunks/{charts-DuVZD7el.cjs → charts-BmIV-mJy.cjs} +40 -9
- package/dist/chunks/charts-BmIV-mJy.cjs.map +1 -0
- package/dist/chunks/{charts-mfevxJSU.mjs → charts-DkVu0rFc.mjs} +40 -9
- package/dist/chunks/charts-DkVu0rFc.mjs.map +1 -0
- package/dist/chunks/{chip-BDrpg5Ux.cjs → chip-B0YzBwkz.cjs} +7 -4
- package/dist/chunks/chip-B0YzBwkz.cjs.map +1 -0
- package/dist/chunks/{chip-Dt0p0_zd.mjs → chip-CqcdcSs2.mjs} +7 -4
- package/dist/chunks/chip-CqcdcSs2.mjs.map +1 -0
- package/dist/chunks/color-palette-C3lesasJ.mjs +329 -0
- package/dist/chunks/color-palette-C3lesasJ.mjs.map +1 -0
- package/dist/chunks/color-palette-pLh6En3n.cjs +384 -0
- package/dist/chunks/color-palette-pLh6En3n.cjs.map +1 -0
- package/dist/chunks/{combobox-0n1_tB8L.mjs → combobox-B6yk5U82.mjs} +4 -4
- package/dist/chunks/combobox-B6yk5U82.mjs.map +1 -0
- package/dist/chunks/{combobox-Ca7-BcLO.cjs → combobox-CtNrGmuR.cjs} +4 -4
- package/dist/chunks/combobox-CtNrGmuR.cjs.map +1 -0
- package/dist/chunks/{data-table-Bt2c9dog.mjs → data-table-Dtf6lKpp.mjs} +11 -11
- package/dist/chunks/{data-table-Bt2c9dog.mjs.map → data-table-Dtf6lKpp.mjs.map} +1 -1
- package/dist/chunks/{data-table-DhCpQjdf.cjs → data-table-fAEuevPn.cjs} +12 -12
- package/dist/chunks/{data-table-DhCpQjdf.cjs.map → data-table-fAEuevPn.cjs.map} +1 -1
- package/dist/chunks/{date-picker-CDACysPq.mjs → date-picker-BmQ0rgwH.mjs} +2 -2
- package/dist/chunks/{date-picker-CDACysPq.mjs.map → date-picker-BmQ0rgwH.mjs.map} +1 -1
- package/dist/chunks/{date-picker-duwF35Rk.cjs → date-picker-qpUZMtZC.cjs} +2 -2
- package/dist/chunks/{date-picker-duwF35Rk.cjs.map → date-picker-qpUZMtZC.cjs.map} +1 -1
- package/dist/chunks/{form-CvNNjA1i.mjs → form-CtZ6U-_B.mjs} +2 -2
- package/dist/chunks/{form-CvNNjA1i.mjs.map → form-CtZ6U-_B.mjs.map} +1 -1
- package/dist/chunks/{form-C_JxqsSZ.cjs → form-X6Vyaavl.cjs} +2 -2
- package/dist/chunks/{form-C_JxqsSZ.cjs.map → form-X6Vyaavl.cjs.map} +1 -1
- package/dist/chunks/{input-BvTrWtRn.mjs → input-Bqo9Q5zF.mjs} +33 -12
- package/dist/chunks/input-Bqo9Q5zF.mjs.map +1 -0
- package/dist/chunks/{input-wAznik-_.cjs → input-DkCPyWXi.cjs} +33 -12
- package/dist/chunks/input-DkCPyWXi.cjs.map +1 -0
- package/dist/chunks/{label-CxmbGh0l.cjs → label-BKzqfAAq.cjs} +2 -2
- package/dist/chunks/{label-CxmbGh0l.cjs.map → label-BKzqfAAq.cjs.map} +1 -1
- package/dist/chunks/{label-C1Ekt3j2.mjs → label-Drxg0cG2.mjs} +2 -2
- package/dist/chunks/{label-C1Ekt3j2.mjs.map → label-Drxg0cG2.mjs.map} +1 -1
- package/dist/chunks/{multi-select-combobox-CdPcvP_S.cjs → multi-select-combobox-C0DoDzxQ.cjs} +5 -5
- package/dist/chunks/multi-select-combobox-C0DoDzxQ.cjs.map +1 -0
- package/dist/chunks/{multi-select-combobox-_nuc3cZ3.mjs → multi-select-combobox-Do23ZfOQ.mjs} +5 -5
- package/dist/chunks/multi-select-combobox-Do23ZfOQ.mjs.map +1 -0
- package/dist/chunks/{password-strength-meter-BEx94cfy.mjs → password-strength-meter-BsvqQBAg.mjs} +3 -3
- package/dist/chunks/{password-strength-meter-BEx94cfy.mjs.map → password-strength-meter-BsvqQBAg.mjs.map} +1 -1
- package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs → password-strength-meter-DCi_BP7e.cjs} +3 -3
- package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs.map → password-strength-meter-DCi_BP7e.cjs.map} +1 -1
- package/dist/chunks/radio-CuiM_gDv.mjs +50 -0
- package/dist/chunks/radio-CuiM_gDv.mjs.map +1 -0
- package/dist/chunks/radio-zx9xEW_C.cjs +56 -0
- package/dist/chunks/radio-zx9xEW_C.cjs.map +1 -0
- package/dist/chunks/{select-B3tfHqQo.mjs → select-CUaSNR09.mjs} +4 -4
- package/dist/chunks/select-CUaSNR09.mjs.map +1 -0
- package/dist/chunks/{select-BwB9MsSv.cjs → select-bZ9WqLOc.cjs} +4 -4
- package/dist/chunks/select-bZ9WqLOc.cjs.map +1 -0
- package/dist/chunks/{sidebar-CCKZ_NMW.mjs → sidebar-DYEDFV2u.mjs} +3 -3
- package/dist/chunks/{sidebar-CCKZ_NMW.mjs.map → sidebar-DYEDFV2u.mjs.map} +1 -1
- package/dist/chunks/{sidebar-WG9Wnwnv.cjs → sidebar-Kkr45nuN.cjs} +3 -3
- package/dist/chunks/{sidebar-WG9Wnwnv.cjs.map → sidebar-Kkr45nuN.cjs.map} +1 -1
- package/dist/chunks/{stepper-CvuyKYXC.cjs → stepper-DepvEGfr.cjs} +2 -2
- package/dist/chunks/{stepper-CvuyKYXC.cjs.map → stepper-DepvEGfr.cjs.map} +1 -1
- package/dist/chunks/{stepper-CjywisS9.mjs → stepper-Jv5OS1nY.mjs} +2 -2
- package/dist/chunks/{stepper-CjywisS9.mjs.map → stepper-Jv5OS1nY.mjs.map} +1 -1
- package/dist/chunks/{sun-to-moon-button-azXKWDYT.mjs → sun-to-moon-button-BJtBEaa3.mjs} +69 -50
- package/dist/chunks/sun-to-moon-button-BJtBEaa3.mjs.map +1 -0
- package/dist/chunks/{sun-to-moon-button-A__wuc_4.cjs → sun-to-moon-button-PwgTPsTW.cjs} +69 -50
- package/dist/chunks/sun-to-moon-button-PwgTPsTW.cjs.map +1 -0
- package/dist/chunks/{switch-DPyzVrNh.cjs → switch-X3l8xnle.cjs} +10 -29
- package/dist/chunks/switch-X3l8xnle.cjs.map +1 -0
- package/dist/chunks/{switch-C1gKE0m0.mjs → switch-iPsN1NS2.mjs} +10 -29
- package/dist/chunks/switch-iPsN1NS2.mjs.map +1 -0
- package/dist/color-palette.cjs +9 -1
- package/dist/color-palette.mjs +2 -2
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.mjs +1 -1
- package/dist/components/data-display/charts/BarChart.d.ts +5 -0
- package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
- package/dist/components/data-display/chip/Chip.d.ts +1 -1
- package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
- package/dist/components/data-display/color-palette/ColorPalette.d.ts +24 -16
- package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
- package/dist/components/data-display/color-palette/index.d.ts +2 -1
- package/dist/components/data-display/color-palette/index.d.ts.map +1 -1
- package/dist/components/data-display/dashboard-cards/StatCard.d.ts +11 -3
- package/dist/components/data-display/dashboard-cards/StatCard.d.ts.map +1 -1
- package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts +16 -1
- package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts.map +1 -1
- package/dist/components/effects/sun-to-moon-button/index.d.ts +1 -1
- package/dist/components/effects/sun-to-moon-button/index.d.ts.map +1 -1
- package/dist/components/forms/input/Input.d.ts.map +1 -1
- package/dist/components/forms/input/types.d.ts +2 -0
- package/dist/components/forms/input/types.d.ts.map +1 -1
- package/dist/components/forms/radio/Radio.d.ts.map +1 -1
- package/dist/components/forms/switch/Switch.d.ts.map +1 -1
- package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts +1 -1
- package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/overlays/dropdown-menu/types.d.ts +1 -0
- package/dist/components/overlays/dropdown-menu/types.d.ts.map +1 -1
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.mjs +1 -1
- package/dist/date-picker.cjs +1 -1
- package/dist/date-picker.mjs +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1 -1
- package/dist/index.cjs +81 -67
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +74 -68
- package/dist/index.mjs.map +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.mjs +1 -1
- package/dist/label.cjs +1 -1
- package/dist/label.mjs +1 -1
- package/dist/multi-select-combobox.cjs +1 -1
- package/dist/multi-select-combobox.mjs +1 -1
- package/dist/password-strength-meter.cjs +1 -1
- package/dist/password-strength-meter.mjs +1 -1
- package/dist/radio.cjs +1 -1
- package/dist/radio.mjs +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.mjs +1 -1
- package/dist/sidebar.cjs +1 -1
- package/dist/sidebar.mjs +1 -1
- package/dist/stepper.cjs +1 -1
- package/dist/stepper.mjs +1 -1
- package/dist/sun-to-moon-button.cjs +1 -1
- package/dist/sun-to-moon-button.mjs +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.mjs +1 -1
- package/dist/tooltip.cjs +2 -2
- package/dist/tooltip.mjs +1 -1
- package/package.json +5 -5
- package/dist/chunks/DropdownMenu-CBdZoVQs.mjs.map +0 -1
- package/dist/chunks/DropdownMenu-CeD9kl_N.cjs.map +0 -1
- package/dist/chunks/calendar-BVuDnWUc.mjs.map +0 -1
- package/dist/chunks/calendar-CYxkfvDv.cjs.map +0 -1
- package/dist/chunks/charts-DuVZD7el.cjs.map +0 -1
- package/dist/chunks/charts-mfevxJSU.mjs.map +0 -1
- package/dist/chunks/chip-BDrpg5Ux.cjs.map +0 -1
- package/dist/chunks/chip-Dt0p0_zd.mjs.map +0 -1
- package/dist/chunks/color-palette-BmQC14gE.cjs +0 -789
- package/dist/chunks/color-palette-BmQC14gE.cjs.map +0 -1
- package/dist/chunks/color-palette-DnX1sODj.mjs +0 -782
- package/dist/chunks/color-palette-DnX1sODj.mjs.map +0 -1
- package/dist/chunks/combobox-0n1_tB8L.mjs.map +0 -1
- package/dist/chunks/combobox-Ca7-BcLO.cjs.map +0 -1
- package/dist/chunks/input-BvTrWtRn.mjs.map +0 -1
- package/dist/chunks/input-wAznik-_.cjs.map +0 -1
- package/dist/chunks/multi-select-combobox-CdPcvP_S.cjs.map +0 -1
- package/dist/chunks/multi-select-combobox-_nuc3cZ3.mjs.map +0 -1
- package/dist/chunks/radio-DOkKyKKL.mjs +0 -44
- package/dist/chunks/radio-DOkKyKKL.mjs.map +0 -1
- package/dist/chunks/radio-DyQ3jF-M.cjs +0 -50
- package/dist/chunks/radio-DyQ3jF-M.cjs.map +0 -1
- package/dist/chunks/select-B3tfHqQo.mjs.map +0 -1
- package/dist/chunks/select-BwB9MsSv.cjs.map +0 -1
- package/dist/chunks/sun-to-moon-button-A__wuc_4.cjs.map +0 -1
- package/dist/chunks/sun-to-moon-button-azXKWDYT.mjs.map +0 -1
- package/dist/chunks/switch-C1gKE0m0.mjs.map +0 -1
- package/dist/chunks/switch-DPyzVrNh.cjs.map +0 -1
|
@@ -1,37 +1,14 @@
|
|
|
1
1
|
import { n as useThemeContext } from "./theme-koPrLKQv.mjs";
|
|
2
2
|
import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
|
|
3
|
-
import { t as Button } from "./button-
|
|
3
|
+
import { t as Button } from "./button-A6UTvrOu.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
{
|
|
13
|
-
value: "teal",
|
|
14
|
-
label: "Teal",
|
|
15
|
-
swatch: "var(--ds-brand-teal)"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
value: "yellow",
|
|
19
|
-
label: "Yellow",
|
|
20
|
-
swatch: "var(--ds-brand-yellow)"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
value: "green",
|
|
24
|
-
label: "Green",
|
|
25
|
-
swatch: "var(--ds-brand-green)"
|
|
26
|
-
}
|
|
27
|
-
];
|
|
28
|
-
var VARIANT_OPTIONS = [{
|
|
29
|
-
value: "default",
|
|
30
|
-
label: "Default"
|
|
31
|
-
}, {
|
|
32
|
-
value: "alt",
|
|
33
|
-
label: "Alt"
|
|
34
|
-
}];
|
|
6
|
+
var BRAND_SWATCHES = {
|
|
7
|
+
purple: "var(--ds-brand-purple)",
|
|
8
|
+
teal: "var(--ds-brand-teal)",
|
|
9
|
+
yellow: "var(--ds-brand-yellow)",
|
|
10
|
+
green: "var(--ds-brand-green)"
|
|
11
|
+
};
|
|
35
12
|
function ToggleButton({ label, active, onClick, swatch, showBrandState = false, mode }) {
|
|
36
13
|
const isLightMode = mode === "light";
|
|
37
14
|
const toneStyle = (() => {
|
|
@@ -51,7 +28,7 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
|
|
|
51
28
|
variant: "secondary",
|
|
52
29
|
size: "small",
|
|
53
30
|
onClick,
|
|
54
|
-
className: mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-
|
|
31
|
+
className: mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40" : "border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1", showBrandState && isLightMode ? "bg-ds-surface-1! hover:bg-ds-surface-1!" : null, showBrandState && active ? "text-ds-1" : null),
|
|
55
32
|
style: toneStyle,
|
|
56
33
|
"aria-pressed": active,
|
|
57
34
|
children: [swatch ? /* @__PURE__ */ jsx("span", {
|
|
@@ -61,52 +38,94 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
|
|
|
61
38
|
}) : null, /* @__PURE__ */ jsx("span", { children: label })]
|
|
62
39
|
});
|
|
63
40
|
}
|
|
64
|
-
function ThemeSwitcherButtons({ className }) {
|
|
41
|
+
function ThemeSwitcherButtons({ className, labels = {} }) {
|
|
65
42
|
const { mode, theme, variant, setMode, setTheme, setVariant } = useThemeContext();
|
|
43
|
+
const l = {
|
|
44
|
+
mode: labels.mode ?? "Mode",
|
|
45
|
+
light: labels.light ?? "Light",
|
|
46
|
+
dark: labels.dark ?? "Dark",
|
|
47
|
+
brand: labels.brand ?? "Brand",
|
|
48
|
+
variant: labels.variant ?? "Variant",
|
|
49
|
+
variantDefault: labels.variantDefault ?? "Default",
|
|
50
|
+
variantAlt: labels.variantAlt ?? "Alt",
|
|
51
|
+
purple: labels.purple ?? "Purple",
|
|
52
|
+
teal: labels.teal ?? "Teal",
|
|
53
|
+
yellow: labels.yellow ?? "Yellow",
|
|
54
|
+
green: labels.green ?? "Green"
|
|
55
|
+
};
|
|
56
|
+
const brandOptions = [
|
|
57
|
+
{
|
|
58
|
+
value: "purple",
|
|
59
|
+
label: l.purple,
|
|
60
|
+
swatch: BRAND_SWATCHES.purple
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
value: "teal",
|
|
64
|
+
label: l.teal,
|
|
65
|
+
swatch: BRAND_SWATCHES.teal
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
value: "yellow",
|
|
69
|
+
label: l.yellow,
|
|
70
|
+
swatch: BRAND_SWATCHES.yellow
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
value: "green",
|
|
74
|
+
label: l.green,
|
|
75
|
+
swatch: BRAND_SWATCHES.green
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
const variantOptions = [{
|
|
79
|
+
value: "default",
|
|
80
|
+
label: l.variantDefault
|
|
81
|
+
}, {
|
|
82
|
+
value: "alt",
|
|
83
|
+
label: l.variantAlt
|
|
84
|
+
}];
|
|
66
85
|
return /* @__PURE__ */ jsx("div", {
|
|
67
|
-
className: mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-
|
|
86
|
+
className: mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm", className),
|
|
68
87
|
children: /* @__PURE__ */ jsxs("div", {
|
|
69
88
|
className: "space-y-3",
|
|
70
89
|
children: [
|
|
71
90
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
72
91
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
73
|
-
children:
|
|
92
|
+
children: l.mode
|
|
74
93
|
}), /* @__PURE__ */ jsxs("div", {
|
|
75
94
|
className: "flex flex-wrap gap-2",
|
|
76
95
|
children: [/* @__PURE__ */ jsx(ToggleButton, {
|
|
77
|
-
label:
|
|
96
|
+
label: l.light,
|
|
78
97
|
active: mode === "light",
|
|
79
98
|
onClick: () => setMode("light")
|
|
80
99
|
}), /* @__PURE__ */ jsx(ToggleButton, {
|
|
81
|
-
label:
|
|
100
|
+
label: l.dark,
|
|
82
101
|
active: mode === "dark",
|
|
83
102
|
onClick: () => setMode("dark")
|
|
84
103
|
})]
|
|
85
104
|
})] }),
|
|
86
105
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
87
106
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
88
|
-
children:
|
|
107
|
+
children: l.brand
|
|
89
108
|
}), /* @__PURE__ */ jsx("div", {
|
|
90
109
|
className: "flex flex-wrap gap-2",
|
|
91
|
-
children:
|
|
92
|
-
label:
|
|
93
|
-
active: theme ===
|
|
94
|
-
onClick: () => setTheme(
|
|
95
|
-
swatch:
|
|
110
|
+
children: brandOptions.map((opt) => /* @__PURE__ */ jsx(ToggleButton, {
|
|
111
|
+
label: opt.label,
|
|
112
|
+
active: theme === opt.value,
|
|
113
|
+
onClick: () => setTheme(opt.value),
|
|
114
|
+
swatch: opt.swatch,
|
|
96
115
|
showBrandState: true,
|
|
97
116
|
mode
|
|
98
|
-
},
|
|
117
|
+
}, opt.value))
|
|
99
118
|
})] }),
|
|
100
119
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
101
120
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
102
|
-
children:
|
|
121
|
+
children: l.variant
|
|
103
122
|
}), /* @__PURE__ */ jsx("div", {
|
|
104
123
|
className: "flex flex-wrap gap-2",
|
|
105
|
-
children:
|
|
106
|
-
label:
|
|
107
|
-
active: variant ===
|
|
108
|
-
onClick: () => setVariant(
|
|
109
|
-
},
|
|
124
|
+
children: variantOptions.map((opt) => /* @__PURE__ */ jsx(ToggleButton, {
|
|
125
|
+
label: opt.label,
|
|
126
|
+
active: variant === opt.value,
|
|
127
|
+
onClick: () => setVariant(opt.value)
|
|
128
|
+
}, opt.value))
|
|
110
129
|
})] })
|
|
111
130
|
]
|
|
112
131
|
})
|
|
@@ -115,4 +134,4 @@ function ThemeSwitcherButtons({ className }) {
|
|
|
115
134
|
//#endregion
|
|
116
135
|
export { ThemeSwitcherButtons as t };
|
|
117
136
|
|
|
118
|
-
//# sourceMappingURL=sun-to-moon-button-
|
|
137
|
+
//# sourceMappingURL=sun-to-moon-button-BJtBEaa3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sun-to-moon-button-BJtBEaa3.mjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx"],"sourcesContent":["import type {\n ThemeColorType,\n ThemeModeType,\n ThemeVariantType,\n} from \"../../../foundations/theme\";\nimport { useThemeContext } from \"../../../foundations/theme\";\nimport { Button } from \"../../forms/button\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { CSSProperties } from \"react\";\n\nexport interface ThemeSwitcherLabels {\n mode?: string;\n light?: string;\n dark?: string;\n brand?: string;\n variant?: string;\n variantDefault?: string;\n variantAlt?: string;\n purple?: string;\n teal?: string;\n yellow?: string;\n green?: string;\n}\n\nexport interface ThemeSwitcherButtonsProps {\n className?: string;\n /** Override any label for localisation / translation. */\n labels?: ThemeSwitcherLabels;\n}\n\nconst BRAND_SWATCHES: Record<ThemeColorType, string> = {\n purple: \"var(--ds-brand-purple)\",\n teal: \"var(--ds-brand-teal)\",\n yellow: \"var(--ds-brand-yellow)\",\n green: \"var(--ds-brand-green)\",\n};\n\nfunction ToggleButton({\n label,\n active,\n onClick,\n swatch,\n showBrandState = false,\n mode,\n}: {\n label: string;\n active: boolean;\n onClick: () => void;\n swatch?: string;\n showBrandState?: boolean;\n mode?: ThemeModeType;\n}) {\n const isLightMode = mode === \"light\";\n const toneStyle: CSSProperties | undefined = (() => {\n if (!showBrandState || !swatch) {\n return undefined;\n }\n\n if (isLightMode) {\n return {\n borderColor: active ? swatch : \"var(--ds-border-2)\",\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 12%, #ffffff)`\n : \"#ffffff\",\n color: active\n ? `color-mix(in srgb, ${swatch} 76%, var(--ds-text-1))`\n : \"var(--ds-text-2)\",\n boxShadow: active\n ? `0 0 0 1px color-mix(in srgb, ${swatch} 24%, transparent)`\n : \"none\",\n };\n }\n\n return {\n borderColor: active\n ? swatch\n : `color-mix(in srgb, ${swatch} 42%, var(--ds-border-3))`,\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 16%, var(--ds-surface-1))`\n : `color-mix(in srgb, ${swatch} 6%, var(--ds-surface-1))`,\n };\n })();\n\n return (\n <Button\n variant=\"secondary\"\n size=\"small\"\n onClick={onClick}\n className={mergeClassNames(\n \"group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200\",\n active\n ? \"border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40\"\n : \"border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1\",\n showBrandState && isLightMode\n ? \"bg-ds-surface-1! hover:bg-ds-surface-1!\"\n : null,\n showBrandState && active ? \"text-ds-1\" : null,\n )}\n style={toneStyle}\n aria-pressed={active}\n >\n {swatch ? (\n <span\n className={mergeClassNames(\n \"h-2.5 w-2.5 rounded-full ring-1 ring-black/10 transition-transform duration-200 group-hover:scale-110\",\n active\n ? isLightMode\n ? \"scale-110 ring-2 ring-black/15\"\n : \"scale-110 ring-2 ring-white/35\"\n : \"scale-100 opacity-90\",\n )}\n style={{ backgroundColor: swatch }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{label}</span>\n </Button>\n );\n}\n\nexport default function ThemeSwitcherButtons({\n className,\n labels = {},\n}: ThemeSwitcherButtonsProps) {\n const { mode, theme, variant, setMode, setTheme, setVariant } =\n useThemeContext();\n\n const l: Required<ThemeSwitcherLabels> = {\n mode: labels.mode ?? \"Mode\",\n light: labels.light ?? \"Light\",\n dark: labels.dark ?? \"Dark\",\n brand: labels.brand ?? \"Brand\",\n variant: labels.variant ?? \"Variant\",\n variantDefault: labels.variantDefault ?? \"Default\",\n variantAlt: labels.variantAlt ?? \"Alt\",\n purple: labels.purple ?? \"Purple\",\n teal: labels.teal ?? \"Teal\",\n yellow: labels.yellow ?? \"Yellow\",\n green: labels.green ?? \"Green\",\n };\n\n const brandOptions: Array<{ value: ThemeColorType; label: string; swatch: string }> = [\n { value: \"purple\", label: l.purple, swatch: BRAND_SWATCHES.purple },\n { value: \"teal\", label: l.teal, swatch: BRAND_SWATCHES.teal },\n { value: \"yellow\", label: l.yellow, swatch: BRAND_SWATCHES.yellow },\n { value: \"green\", label: l.green, swatch: BRAND_SWATCHES.green },\n ];\n\n const variantOptions: Array<{ value: ThemeVariantType; label: string }> = [\n { value: \"default\", label: l.variantDefault },\n { value: \"alt\", label: l.variantAlt },\n ];\n\n return (\n <div\n className={mergeClassNames(\n \"w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm\",\n className,\n )}\n >\n <div className=\"space-y-3\">\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.mode}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <ToggleButton label={l.light} active={mode === \"light\"} onClick={() => setMode(\"light\")} />\n <ToggleButton label={l.dark} active={mode === \"dark\"} onClick={() => setMode(\"dark\")} />\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.brand}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {brandOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={theme === opt.value}\n onClick={() => setTheme(opt.value)}\n swatch={opt.swatch}\n showBrandState\n mode={mode}\n />\n ))}\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.variant}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {variantOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={variant === opt.value}\n onClick={() => setVariant(opt.value)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +1,15 @@
|
|
|
1
1
|
require("./chunk-B_GkZjkl.cjs");
|
|
2
2
|
const require_theme = require("./theme-D6B-FaoE.cjs");
|
|
3
3
|
const require_utils = require("./utils-LRbEQHYs.cjs");
|
|
4
|
-
const require_button = require("./button-
|
|
4
|
+
const require_button = require("./button-C4MXPxsC.cjs");
|
|
5
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
6
|
//#region src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
value: "teal",
|
|
15
|
-
label: "Teal",
|
|
16
|
-
swatch: "var(--ds-brand-teal)"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
value: "yellow",
|
|
20
|
-
label: "Yellow",
|
|
21
|
-
swatch: "var(--ds-brand-yellow)"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
value: "green",
|
|
25
|
-
label: "Green",
|
|
26
|
-
swatch: "var(--ds-brand-green)"
|
|
27
|
-
}
|
|
28
|
-
];
|
|
29
|
-
var VARIANT_OPTIONS = [{
|
|
30
|
-
value: "default",
|
|
31
|
-
label: "Default"
|
|
32
|
-
}, {
|
|
33
|
-
value: "alt",
|
|
34
|
-
label: "Alt"
|
|
35
|
-
}];
|
|
7
|
+
var BRAND_SWATCHES = {
|
|
8
|
+
purple: "var(--ds-brand-purple)",
|
|
9
|
+
teal: "var(--ds-brand-teal)",
|
|
10
|
+
yellow: "var(--ds-brand-yellow)",
|
|
11
|
+
green: "var(--ds-brand-green)"
|
|
12
|
+
};
|
|
36
13
|
function ToggleButton({ label, active, onClick, swatch, showBrandState = false, mode }) {
|
|
37
14
|
const isLightMode = mode === "light";
|
|
38
15
|
const toneStyle = (() => {
|
|
@@ -52,7 +29,7 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
|
|
|
52
29
|
variant: "secondary",
|
|
53
30
|
size: "small",
|
|
54
31
|
onClick,
|
|
55
|
-
className: require_utils.mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-
|
|
32
|
+
className: require_utils.mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40" : "border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1", showBrandState && isLightMode ? "bg-ds-surface-1! hover:bg-ds-surface-1!" : null, showBrandState && active ? "text-ds-1" : null),
|
|
56
33
|
style: toneStyle,
|
|
57
34
|
"aria-pressed": active,
|
|
58
35
|
children: [swatch ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -62,52 +39,94 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
|
|
|
62
39
|
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label })]
|
|
63
40
|
});
|
|
64
41
|
}
|
|
65
|
-
function ThemeSwitcherButtons({ className }) {
|
|
42
|
+
function ThemeSwitcherButtons({ className, labels = {} }) {
|
|
66
43
|
const { mode, theme, variant, setMode, setTheme, setVariant } = require_theme.useThemeContext();
|
|
44
|
+
const l = {
|
|
45
|
+
mode: labels.mode ?? "Mode",
|
|
46
|
+
light: labels.light ?? "Light",
|
|
47
|
+
dark: labels.dark ?? "Dark",
|
|
48
|
+
brand: labels.brand ?? "Brand",
|
|
49
|
+
variant: labels.variant ?? "Variant",
|
|
50
|
+
variantDefault: labels.variantDefault ?? "Default",
|
|
51
|
+
variantAlt: labels.variantAlt ?? "Alt",
|
|
52
|
+
purple: labels.purple ?? "Purple",
|
|
53
|
+
teal: labels.teal ?? "Teal",
|
|
54
|
+
yellow: labels.yellow ?? "Yellow",
|
|
55
|
+
green: labels.green ?? "Green"
|
|
56
|
+
};
|
|
57
|
+
const brandOptions = [
|
|
58
|
+
{
|
|
59
|
+
value: "purple",
|
|
60
|
+
label: l.purple,
|
|
61
|
+
swatch: BRAND_SWATCHES.purple
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
value: "teal",
|
|
65
|
+
label: l.teal,
|
|
66
|
+
swatch: BRAND_SWATCHES.teal
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
value: "yellow",
|
|
70
|
+
label: l.yellow,
|
|
71
|
+
swatch: BRAND_SWATCHES.yellow
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
value: "green",
|
|
75
|
+
label: l.green,
|
|
76
|
+
swatch: BRAND_SWATCHES.green
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
const variantOptions = [{
|
|
80
|
+
value: "default",
|
|
81
|
+
label: l.variantDefault
|
|
82
|
+
}, {
|
|
83
|
+
value: "alt",
|
|
84
|
+
label: l.variantAlt
|
|
85
|
+
}];
|
|
67
86
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
68
|
-
className: require_utils.mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-
|
|
87
|
+
className: require_utils.mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm", className),
|
|
69
88
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
70
89
|
className: "space-y-3",
|
|
71
90
|
children: [
|
|
72
91
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
73
92
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
74
|
-
children:
|
|
93
|
+
children: l.mode
|
|
75
94
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
76
95
|
className: "flex flex-wrap gap-2",
|
|
77
96
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleButton, {
|
|
78
|
-
label:
|
|
97
|
+
label: l.light,
|
|
79
98
|
active: mode === "light",
|
|
80
99
|
onClick: () => setMode("light")
|
|
81
100
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleButton, {
|
|
82
|
-
label:
|
|
101
|
+
label: l.dark,
|
|
83
102
|
active: mode === "dark",
|
|
84
103
|
onClick: () => setMode("dark")
|
|
85
104
|
})]
|
|
86
105
|
})] }),
|
|
87
106
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
88
107
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
89
|
-
children:
|
|
108
|
+
children: l.brand
|
|
90
109
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
91
110
|
className: "flex flex-wrap gap-2",
|
|
92
|
-
children:
|
|
93
|
-
label:
|
|
94
|
-
active: theme ===
|
|
95
|
-
onClick: () => setTheme(
|
|
96
|
-
swatch:
|
|
111
|
+
children: brandOptions.map((opt) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleButton, {
|
|
112
|
+
label: opt.label,
|
|
113
|
+
active: theme === opt.value,
|
|
114
|
+
onClick: () => setTheme(opt.value),
|
|
115
|
+
swatch: opt.swatch,
|
|
97
116
|
showBrandState: true,
|
|
98
117
|
mode
|
|
99
|
-
},
|
|
118
|
+
}, opt.value))
|
|
100
119
|
})] }),
|
|
101
120
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
102
121
|
className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
|
|
103
|
-
children:
|
|
122
|
+
children: l.variant
|
|
104
123
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
105
124
|
className: "flex flex-wrap gap-2",
|
|
106
|
-
children:
|
|
107
|
-
label:
|
|
108
|
-
active: variant ===
|
|
109
|
-
onClick: () => setVariant(
|
|
110
|
-
},
|
|
125
|
+
children: variantOptions.map((opt) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleButton, {
|
|
126
|
+
label: opt.label,
|
|
127
|
+
active: variant === opt.value,
|
|
128
|
+
onClick: () => setVariant(opt.value)
|
|
129
|
+
}, opt.value))
|
|
111
130
|
})] })
|
|
112
131
|
]
|
|
113
132
|
})
|
|
@@ -121,4 +140,4 @@ Object.defineProperty(exports, "ThemeSwitcherButtons", {
|
|
|
121
140
|
}
|
|
122
141
|
});
|
|
123
142
|
|
|
124
|
-
//# sourceMappingURL=sun-to-moon-button-
|
|
143
|
+
//# sourceMappingURL=sun-to-moon-button-PwgTPsTW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sun-to-moon-button-PwgTPsTW.cjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx"],"sourcesContent":["import type {\n ThemeColorType,\n ThemeModeType,\n ThemeVariantType,\n} from \"../../../foundations/theme\";\nimport { useThemeContext } from \"../../../foundations/theme\";\nimport { Button } from \"../../forms/button\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { CSSProperties } from \"react\";\n\nexport interface ThemeSwitcherLabels {\n mode?: string;\n light?: string;\n dark?: string;\n brand?: string;\n variant?: string;\n variantDefault?: string;\n variantAlt?: string;\n purple?: string;\n teal?: string;\n yellow?: string;\n green?: string;\n}\n\nexport interface ThemeSwitcherButtonsProps {\n className?: string;\n /** Override any label for localisation / translation. */\n labels?: ThemeSwitcherLabels;\n}\n\nconst BRAND_SWATCHES: Record<ThemeColorType, string> = {\n purple: \"var(--ds-brand-purple)\",\n teal: \"var(--ds-brand-teal)\",\n yellow: \"var(--ds-brand-yellow)\",\n green: \"var(--ds-brand-green)\",\n};\n\nfunction ToggleButton({\n label,\n active,\n onClick,\n swatch,\n showBrandState = false,\n mode,\n}: {\n label: string;\n active: boolean;\n onClick: () => void;\n swatch?: string;\n showBrandState?: boolean;\n mode?: ThemeModeType;\n}) {\n const isLightMode = mode === \"light\";\n const toneStyle: CSSProperties | undefined = (() => {\n if (!showBrandState || !swatch) {\n return undefined;\n }\n\n if (isLightMode) {\n return {\n borderColor: active ? swatch : \"var(--ds-border-2)\",\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 12%, #ffffff)`\n : \"#ffffff\",\n color: active\n ? `color-mix(in srgb, ${swatch} 76%, var(--ds-text-1))`\n : \"var(--ds-text-2)\",\n boxShadow: active\n ? `0 0 0 1px color-mix(in srgb, ${swatch} 24%, transparent)`\n : \"none\",\n };\n }\n\n return {\n borderColor: active\n ? swatch\n : `color-mix(in srgb, ${swatch} 42%, var(--ds-border-3))`,\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 16%, var(--ds-surface-1))`\n : `color-mix(in srgb, ${swatch} 6%, var(--ds-surface-1))`,\n };\n })();\n\n return (\n <Button\n variant=\"secondary\"\n size=\"small\"\n onClick={onClick}\n className={mergeClassNames(\n \"group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200\",\n active\n ? \"border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40\"\n : \"border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1\",\n showBrandState && isLightMode\n ? \"bg-ds-surface-1! hover:bg-ds-surface-1!\"\n : null,\n showBrandState && active ? \"text-ds-1\" : null,\n )}\n style={toneStyle}\n aria-pressed={active}\n >\n {swatch ? (\n <span\n className={mergeClassNames(\n \"h-2.5 w-2.5 rounded-full ring-1 ring-black/10 transition-transform duration-200 group-hover:scale-110\",\n active\n ? isLightMode\n ? \"scale-110 ring-2 ring-black/15\"\n : \"scale-110 ring-2 ring-white/35\"\n : \"scale-100 opacity-90\",\n )}\n style={{ backgroundColor: swatch }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{label}</span>\n </Button>\n );\n}\n\nexport default function ThemeSwitcherButtons({\n className,\n labels = {},\n}: ThemeSwitcherButtonsProps) {\n const { mode, theme, variant, setMode, setTheme, setVariant } =\n useThemeContext();\n\n const l: Required<ThemeSwitcherLabels> = {\n mode: labels.mode ?? \"Mode\",\n light: labels.light ?? \"Light\",\n dark: labels.dark ?? \"Dark\",\n brand: labels.brand ?? \"Brand\",\n variant: labels.variant ?? \"Variant\",\n variantDefault: labels.variantDefault ?? \"Default\",\n variantAlt: labels.variantAlt ?? \"Alt\",\n purple: labels.purple ?? \"Purple\",\n teal: labels.teal ?? \"Teal\",\n yellow: labels.yellow ?? \"Yellow\",\n green: labels.green ?? \"Green\",\n };\n\n const brandOptions: Array<{ value: ThemeColorType; label: string; swatch: string }> = [\n { value: \"purple\", label: l.purple, swatch: BRAND_SWATCHES.purple },\n { value: \"teal\", label: l.teal, swatch: BRAND_SWATCHES.teal },\n { value: \"yellow\", label: l.yellow, swatch: BRAND_SWATCHES.yellow },\n { value: \"green\", label: l.green, swatch: BRAND_SWATCHES.green },\n ];\n\n const variantOptions: Array<{ value: ThemeVariantType; label: string }> = [\n { value: \"default\", label: l.variantDefault },\n { value: \"alt\", label: l.variantAlt },\n ];\n\n return (\n <div\n className={mergeClassNames(\n \"w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm\",\n className,\n )}\n >\n <div className=\"space-y-3\">\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.mode}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <ToggleButton label={l.light} active={mode === \"light\"} onClick={() => setMode(\"light\")} />\n <ToggleButton label={l.dark} active={mode === \"dark\"} onClick={() => setMode(\"dark\")} />\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.brand}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {brandOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={theme === opt.value}\n onClick={() => setTheme(opt.value)}\n swatch={opt.swatch}\n showBrandState\n mode={mode}\n />\n ))}\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.variant}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {variantOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={variant === opt.value}\n onClick={() => setVariant(opt.value)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -3,35 +3,30 @@ let react = require("react");
|
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
//#region src/components/forms/switch/Switch.tsx
|
|
5
5
|
var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (direction === "rtl" || direction === "ltr") return direction;
|
|
6
|
+
function getEffectiveDir(dir) {
|
|
7
|
+
if (dir === "rtl" || dir === "ltr") return dir;
|
|
9
8
|
if (typeof document !== "undefined") {
|
|
10
|
-
|
|
11
|
-
if (explicitDirection === "rtl" || explicitDirection === "ltr") return explicitDirection;
|
|
9
|
+
if (document.documentElement.getAttribute("dir") === "rtl") return "rtl";
|
|
12
10
|
}
|
|
13
|
-
if (typeof navigator !== "undefined" && rtlLanguages.test(navigator.language)) return "rtl";
|
|
14
11
|
return "ltr";
|
|
15
12
|
}
|
|
16
13
|
var Switch = (0, react.forwardRef)(({ className = "", label, error, id, checked, dir, ...props }, ref) => {
|
|
17
14
|
const generatedId = (0, react.useId)();
|
|
18
15
|
const switchId = id || `switch-${sanitizeId(generatedId)}`;
|
|
19
|
-
const isRtl =
|
|
16
|
+
const isRtl = getEffectiveDir(dir) === "rtl";
|
|
17
|
+
const thumbClass = checked ? isRtl ? "translate-x-1" : "translate-x-6" : isRtl ? "translate-x-6" : "translate-x-1";
|
|
20
18
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21
19
|
className: `flex items-center gap-2 ${className}`.trim().replace(/\s+/g, " "),
|
|
22
20
|
dir,
|
|
23
21
|
children: [
|
|
24
22
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
25
23
|
htmlFor: switchId,
|
|
26
|
-
|
|
27
|
-
borderRadius: "var(--border-radius-full, 9999px)",
|
|
28
|
-
...checked ? {} : { background: "#E0E5F2" }
|
|
29
|
-
},
|
|
24
|
+
dir: "ltr",
|
|
30
25
|
className: `
|
|
31
26
|
relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200
|
|
32
27
|
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1
|
|
33
28
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
34
|
-
${checked ? "bg-ds-accent" : ""}
|
|
29
|
+
${checked ? "bg-ds-accent" : "bg-ds-surface-5 ring-1 ring-ds-border-field"}
|
|
35
30
|
`.trim().replace(/\s+/g, " "),
|
|
36
31
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
37
32
|
ref,
|
|
@@ -40,25 +35,11 @@ var Switch = (0, react.forwardRef)(({ className = "", label, error, id, checked,
|
|
|
40
35
|
className: "sr-only",
|
|
41
36
|
checked,
|
|
42
37
|
...props
|
|
43
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: `
|
|
44
|
-
pointer-events-none
|
|
45
|
-
inline-block
|
|
46
|
-
h-4
|
|
47
|
-
w-4
|
|
48
|
-
transform
|
|
49
|
-
rounded-full
|
|
50
|
-
bg-ds-surface-1
|
|
51
|
-
shadow-lg
|
|
52
|
-
ring-0
|
|
53
|
-
transition-transform
|
|
54
|
-
duration-300
|
|
55
|
-
ease-in-out
|
|
56
|
-
${checked ? isRtl ? "translate-x-1" : "translate-x-6" : isRtl ? "translate-x-6" : "translate-x-1"}
|
|
57
|
-
`.trim().replace(/\s+/g, " ") })]
|
|
38
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: `pointer-events-none inline-block h-4 w-4 rounded-full bg-white shadow-md ring-1 ring-ds-border-field transition-all duration-300 ease-in-out ${thumbClass}` })]
|
|
58
39
|
}),
|
|
59
40
|
label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
|
|
60
41
|
htmlFor: switchId,
|
|
61
|
-
className:
|
|
42
|
+
className: "cursor-pointer text-sm font-medium leading-none text-ds-1 text-start peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
62
43
|
children: label
|
|
63
44
|
}),
|
|
64
45
|
error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -77,4 +58,4 @@ Object.defineProperty(exports, "Switch", {
|
|
|
77
58
|
}
|
|
78
59
|
});
|
|
79
60
|
|
|
80
|
-
//# sourceMappingURL=switch-
|
|
61
|
+
//# sourceMappingURL=switch-X3l8xnle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-X3l8xnle.cjs","names":[],"sources":["../../src/components/forms/switch/Switch.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\n\nimport type { SwitchProps } from \"./types\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nfunction getEffectiveDir(dir: string | undefined): \"ltr\" | \"rtl\" {\n if (dir === \"rtl\" || dir === \"ltr\") return dir;\n if (typeof document !== \"undefined\") {\n if (document.documentElement.getAttribute(\"dir\") === \"rtl\") return \"rtl\";\n }\n return \"ltr\";\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className = \"\", label, error, id, checked, dir, ...props }, ref) => {\n const generatedId = useId();\n const switchId = id || `switch-${sanitizeId(generatedId)}`;\n const isRtl = getEffectiveDir(dir) === \"rtl\";\n\n const thumbClass = checked\n ? isRtl\n ? \"translate-x-1\"\n : \"translate-x-6\"\n : isRtl\n ? \"translate-x-6\"\n : \"translate-x-1\";\n\n return (\n <div\n className={`flex items-center gap-2 ${className}`.trim().replace(/\\s+/g, \" \")}\n dir={dir}\n >\n <label\n htmlFor={switchId}\n dir=\"ltr\"\n className={`\n relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1\n disabled:cursor-not-allowed disabled:opacity-50\n ${checked ? \"bg-ds-accent\" : \"bg-ds-surface-5 ring-1 ring-ds-border-field\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n <span\n className={`pointer-events-none inline-block h-4 w-4 rounded-full bg-white shadow-md ring-1 ring-ds-border-field transition-all duration-300 ease-in-out ${thumbClass}`}\n />\n </label>\n {label && (\n <label\n htmlFor={switchId}\n className=\"cursor-pointer text-sm font-medium leading-none text-ds-1 text-start peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n"],"mappings":";;;;AAIA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,SAAS,gBAAgB,KAAwC;AAC/D,KAAI,QAAQ,SAAS,QAAQ,MAAO,QAAO;AAC3C,KAAI,OAAO,aAAa;MAClB,SAAS,gBAAgB,aAAa,MAAM,KAAK,MAAO,QAAO;;AAErE,QAAO;;AAGT,IAAa,UAAA,GAAA,MAAA,aACV,EAAE,YAAY,IAAI,OAAO,OAAO,IAAI,SAAS,KAAK,GAAG,SAAS,QAAQ;CACrE,MAAM,eAAA,GAAA,MAAA,QAAqB;CAC3B,MAAM,WAAW,MAAM,UAAU,WAAW,YAAY;CACxD,MAAM,QAAQ,gBAAgB,IAAI,KAAK;CAEvC,MAAM,aAAa,UACf,QACE,kBACA,kBACF,QACE,kBACA;AAEN,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAW,2BAA2B,YAAY,MAAM,CAAC,QAAQ,QAAQ,IAAI;EACxE;YAFP;GAIE,iBAAA,GAAA,kBAAA,MAAC,SAAD;IACE,SAAS;IACT,KAAI;IACJ,WAAW;;;;cAIP,UAAU,iBAAiB,8CAA8C;YAE1E,MAAM,CACN,QAAQ,QAAQ,IAAI;cAVzB,CAYE,iBAAA,GAAA,kBAAA,KAAC,SAAD;KACO;KACL,MAAK;KACL,IAAI;KACJ,WAAU;KACD;KACT,GAAI;KACJ,CAAA,EACF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EACE,WAAW,gJAAgJ,cAC3J,CAAA,CACI;;GACP,SACC,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA;GAET,SACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAElE;;EAGX;AAED,OAAO,cAAc"}
|
|
@@ -2,35 +2,30 @@ import { forwardRef, useId } from "react";
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/forms/switch/Switch.tsx
|
|
4
4
|
var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (direction === "rtl" || direction === "ltr") return direction;
|
|
5
|
+
function getEffectiveDir(dir) {
|
|
6
|
+
if (dir === "rtl" || dir === "ltr") return dir;
|
|
8
7
|
if (typeof document !== "undefined") {
|
|
9
|
-
|
|
10
|
-
if (explicitDirection === "rtl" || explicitDirection === "ltr") return explicitDirection;
|
|
8
|
+
if (document.documentElement.getAttribute("dir") === "rtl") return "rtl";
|
|
11
9
|
}
|
|
12
|
-
if (typeof navigator !== "undefined" && rtlLanguages.test(navigator.language)) return "rtl";
|
|
13
10
|
return "ltr";
|
|
14
11
|
}
|
|
15
12
|
var Switch = forwardRef(({ className = "", label, error, id, checked, dir, ...props }, ref) => {
|
|
16
13
|
const generatedId = useId();
|
|
17
14
|
const switchId = id || `switch-${sanitizeId(generatedId)}`;
|
|
18
|
-
const isRtl =
|
|
15
|
+
const isRtl = getEffectiveDir(dir) === "rtl";
|
|
16
|
+
const thumbClass = checked ? isRtl ? "translate-x-1" : "translate-x-6" : isRtl ? "translate-x-6" : "translate-x-1";
|
|
19
17
|
return /* @__PURE__ */ jsxs("div", {
|
|
20
18
|
className: `flex items-center gap-2 ${className}`.trim().replace(/\s+/g, " "),
|
|
21
19
|
dir,
|
|
22
20
|
children: [
|
|
23
21
|
/* @__PURE__ */ jsxs("label", {
|
|
24
22
|
htmlFor: switchId,
|
|
25
|
-
|
|
26
|
-
borderRadius: "var(--border-radius-full, 9999px)",
|
|
27
|
-
...checked ? {} : { background: "#E0E5F2" }
|
|
28
|
-
},
|
|
23
|
+
dir: "ltr",
|
|
29
24
|
className: `
|
|
30
25
|
relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200
|
|
31
26
|
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1
|
|
32
27
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
33
|
-
${checked ? "bg-ds-accent" : ""}
|
|
28
|
+
${checked ? "bg-ds-accent" : "bg-ds-surface-5 ring-1 ring-ds-border-field"}
|
|
34
29
|
`.trim().replace(/\s+/g, " "),
|
|
35
30
|
children: [/* @__PURE__ */ jsx("input", {
|
|
36
31
|
ref,
|
|
@@ -39,25 +34,11 @@ var Switch = forwardRef(({ className = "", label, error, id, checked, dir, ...pr
|
|
|
39
34
|
className: "sr-only",
|
|
40
35
|
checked,
|
|
41
36
|
...props
|
|
42
|
-
}), /* @__PURE__ */ jsx("span", { className: `
|
|
43
|
-
pointer-events-none
|
|
44
|
-
inline-block
|
|
45
|
-
h-4
|
|
46
|
-
w-4
|
|
47
|
-
transform
|
|
48
|
-
rounded-full
|
|
49
|
-
bg-ds-surface-1
|
|
50
|
-
shadow-lg
|
|
51
|
-
ring-0
|
|
52
|
-
transition-transform
|
|
53
|
-
duration-300
|
|
54
|
-
ease-in-out
|
|
55
|
-
${checked ? isRtl ? "translate-x-1" : "translate-x-6" : isRtl ? "translate-x-6" : "translate-x-1"}
|
|
56
|
-
`.trim().replace(/\s+/g, " ") })]
|
|
37
|
+
}), /* @__PURE__ */ jsx("span", { className: `pointer-events-none inline-block h-4 w-4 rounded-full bg-white shadow-md ring-1 ring-ds-border-field transition-all duration-300 ease-in-out ${thumbClass}` })]
|
|
57
38
|
}),
|
|
58
39
|
label && /* @__PURE__ */ jsx("label", {
|
|
59
40
|
htmlFor: switchId,
|
|
60
|
-
className:
|
|
41
|
+
className: "cursor-pointer text-sm font-medium leading-none text-ds-1 text-start peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
61
42
|
children: label
|
|
62
43
|
}),
|
|
63
44
|
error && /* @__PURE__ */ jsx("p", {
|
|
@@ -71,4 +52,4 @@ Switch.displayName = "Switch";
|
|
|
71
52
|
//#endregion
|
|
72
53
|
export { Switch as t };
|
|
73
54
|
|
|
74
|
-
//# sourceMappingURL=switch-
|
|
55
|
+
//# sourceMappingURL=switch-iPsN1NS2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-iPsN1NS2.mjs","names":[],"sources":["../../src/components/forms/switch/Switch.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\n\nimport type { SwitchProps } from \"./types\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nfunction getEffectiveDir(dir: string | undefined): \"ltr\" | \"rtl\" {\n if (dir === \"rtl\" || dir === \"ltr\") return dir;\n if (typeof document !== \"undefined\") {\n if (document.documentElement.getAttribute(\"dir\") === \"rtl\") return \"rtl\";\n }\n return \"ltr\";\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className = \"\", label, error, id, checked, dir, ...props }, ref) => {\n const generatedId = useId();\n const switchId = id || `switch-${sanitizeId(generatedId)}`;\n const isRtl = getEffectiveDir(dir) === \"rtl\";\n\n const thumbClass = checked\n ? isRtl\n ? \"translate-x-1\"\n : \"translate-x-6\"\n : isRtl\n ? \"translate-x-6\"\n : \"translate-x-1\";\n\n return (\n <div\n className={`flex items-center gap-2 ${className}`.trim().replace(/\\s+/g, \" \")}\n dir={dir}\n >\n <label\n htmlFor={switchId}\n dir=\"ltr\"\n className={`\n relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1\n disabled:cursor-not-allowed disabled:opacity-50\n ${checked ? \"bg-ds-accent\" : \"bg-ds-surface-5 ring-1 ring-ds-border-field\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n <span\n className={`pointer-events-none inline-block h-4 w-4 rounded-full bg-white shadow-md ring-1 ring-ds-border-field transition-all duration-300 ease-in-out ${thumbClass}`}\n />\n </label>\n {label && (\n <label\n htmlFor={switchId}\n className=\"cursor-pointer text-sm font-medium leading-none text-ds-1 text-start peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n"],"mappings":";;;AAIA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,SAAS,gBAAgB,KAAwC;AAC/D,KAAI,QAAQ,SAAS,QAAQ,MAAO,QAAO;AAC3C,KAAI,OAAO,aAAa;MAClB,SAAS,gBAAgB,aAAa,MAAM,KAAK,MAAO,QAAO;;AAErE,QAAO;;AAGT,IAAa,SAAS,YACnB,EAAE,YAAY,IAAI,OAAO,OAAO,IAAI,SAAS,KAAK,GAAG,SAAS,QAAQ;CACrE,MAAM,cAAc,OAAO;CAC3B,MAAM,WAAW,MAAM,UAAU,WAAW,YAAY;CACxD,MAAM,QAAQ,gBAAgB,IAAI,KAAK;CAEvC,MAAM,aAAa,UACf,QACE,kBACA,kBACF,QACE,kBACA;AAEN,QACE,qBAAC,OAAD;EACE,WAAW,2BAA2B,YAAY,MAAM,CAAC,QAAQ,QAAQ,IAAI;EACxE;YAFP;GAIE,qBAAC,SAAD;IACE,SAAS;IACT,KAAI;IACJ,WAAW;;;;cAIP,UAAU,iBAAiB,8CAA8C;YAE1E,MAAM,CACN,QAAQ,QAAQ,IAAI;cAVzB,CAYE,oBAAC,SAAD;KACO;KACL,MAAK;KACL,IAAI;KACJ,WAAU;KACD;KACT,GAAI;KACJ,CAAA,EACF,oBAAC,QAAD,EACE,WAAW,gJAAgJ,cAC3J,CAAA,CACI;;GACP,SACC,oBAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA;GAET,SACC,oBAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAElE;;EAGX;AAED,OAAO,cAAc"}
|
package/dist/color-palette.cjs
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_color_palette = require("./chunks/color-palette-
|
|
2
|
+
const require_color_palette = require("./chunks/color-palette-pLh6En3n.cjs");
|
|
3
3
|
exports.ColorPalette = require_color_palette.ColorPalette;
|
|
4
|
+
exports.accentGroup = require_color_palette.accentGroup;
|
|
5
|
+
exports.accentScaleGroup = require_color_palette.accentScaleGroup;
|
|
6
|
+
exports.borderGroup = require_color_palette.borderGroup;
|
|
7
|
+
exports.brandGroup = require_color_palette.brandGroup;
|
|
8
|
+
exports.defaultGroups = require_color_palette.defaultGroups;
|
|
9
|
+
exports.statusGroup = require_color_palette.statusGroup;
|
|
10
|
+
exports.surfaceGroup = require_color_palette.surfaceGroup;
|
|
11
|
+
exports.textGroup = require_color_palette.textGroup;
|
package/dist/color-palette.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as ColorPalette } from "./chunks/color-palette-
|
|
2
|
-
export { ColorPalette };
|
|
1
|
+
import { a as brandGroup, c as surfaceGroup, i as borderGroup, l as textGroup, n as accentGroup, o as defaultGroups, r as accentScaleGroup, s as statusGroup, t as ColorPalette } from "./chunks/color-palette-C3lesasJ.mjs";
|
|
2
|
+
export { ColorPalette, accentGroup, accentScaleGroup, borderGroup, brandGroup, defaultGroups, statusGroup, surfaceGroup, textGroup };
|
package/dist/combobox.cjs
CHANGED
package/dist/combobox.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Combobox } from "./chunks/combobox-
|
|
1
|
+
import { t as Combobox } from "./chunks/combobox-B6yk5U82.mjs";
|
|
2
2
|
export { Combobox };
|
|
@@ -13,6 +13,11 @@ interface BarChartProps {
|
|
|
13
13
|
className?: string;
|
|
14
14
|
layout?: "horizontal" | "vertical";
|
|
15
15
|
maxBarSize?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Compact mode — strips axes, grid, tooltip, and margins.
|
|
18
|
+
* Designed for small sparkline-style zones (e.g. StatCard md, ~130×68 px).
|
|
19
|
+
*/
|
|
20
|
+
compact?: boolean;
|
|
16
21
|
}
|
|
17
22
|
export declare const BarChart: React.FC<BarChartProps>;
|
|
18
23
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/charts/BarChart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/charts/BarChart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAgI5C,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type ChipVariant = "filled" | "outlined" | "soft" | "glass";
|
|
2
2
|
export type ChipColor = "default" | "primary" | "secondary" | "success" | "warning" | "error" | "info";
|
|
3
|
-
export type ChipSize = "sm" | "md" | "lg";
|
|
3
|
+
export type ChipSize = "xs" | "sm" | "md" | "lg";
|
|
4
4
|
export interface ChipProps {
|
|
5
5
|
/** The content of the chip */
|
|
6
6
|
children: React.ReactNode;
|