jvdm-ui 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/bin/jvdm-ui.mjs +49 -0
  4. package/dist/atoms/index.d.ts +343 -0
  5. package/dist/atoms/index.js +3 -0
  6. package/dist/atoms/index.js.map +1 -0
  7. package/dist/chunk-AHE2576G.js +682 -0
  8. package/dist/chunk-AHE2576G.js.map +1 -0
  9. package/dist/chunk-CGDYSB4G.js +3 -0
  10. package/dist/chunk-CGDYSB4G.js.map +1 -0
  11. package/dist/chunk-JYNDKPAH.js +362 -0
  12. package/dist/chunk-JYNDKPAH.js.map +1 -0
  13. package/dist/chunk-WWOXGKLF.js +724 -0
  14. package/dist/chunk-WWOXGKLF.js.map +1 -0
  15. package/dist/client/code-block.d.ts +9 -0
  16. package/dist/client/code-block.js +65 -0
  17. package/dist/client/code-block.js.map +1 -0
  18. package/dist/client/confirm-dialog.d.ts +16 -0
  19. package/dist/client/confirm-dialog.js +181 -0
  20. package/dist/client/confirm-dialog.js.map +1 -0
  21. package/dist/client/date-picker.d.ts +10 -0
  22. package/dist/client/date-picker.js +236 -0
  23. package/dist/client/date-picker.js.map +1 -0
  24. package/dist/client/file-upload.d.ts +12 -0
  25. package/dist/client/file-upload.js +58 -0
  26. package/dist/client/file-upload.js.map +1 -0
  27. package/dist/client/gallery.d.ts +14 -0
  28. package/dist/client/gallery.js +122 -0
  29. package/dist/client/gallery.js.map +1 -0
  30. package/dist/client/menu.d.ts +24 -0
  31. package/dist/client/menu.js +115 -0
  32. package/dist/client/menu.js.map +1 -0
  33. package/dist/client/modal.d.ts +19 -0
  34. package/dist/client/modal.js +147 -0
  35. package/dist/client/modal.js.map +1 -0
  36. package/dist/client/multi-select.d.ts +16 -0
  37. package/dist/client/multi-select.js +84 -0
  38. package/dist/client/multi-select.js.map +1 -0
  39. package/dist/client/number-input.d.ts +6 -0
  40. package/dist/client/number-input.js +59 -0
  41. package/dist/client/number-input.js.map +1 -0
  42. package/dist/client/password-input.d.ts +16 -0
  43. package/dist/client/password-input.js +103 -0
  44. package/dist/client/password-input.js.map +1 -0
  45. package/dist/client/pin-input.d.ts +10 -0
  46. package/dist/client/pin-input.js +55 -0
  47. package/dist/client/pin-input.js.map +1 -0
  48. package/dist/client/theme-toggle.d.ts +8 -0
  49. package/dist/client/theme-toggle.js +126 -0
  50. package/dist/client/theme-toggle.js.map +1 -0
  51. package/dist/client/theme.d.ts +8 -0
  52. package/dist/client/theme.js +32 -0
  53. package/dist/client/theme.js.map +1 -0
  54. package/dist/client/time-picker.d.ts +10 -0
  55. package/dist/client/time-picker.js +140 -0
  56. package/dist/client/time-picker.js.map +1 -0
  57. package/dist/index.d.ts +5 -0
  58. package/dist/index.js +6 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/molecules/index.d.ts +309 -0
  61. package/dist/molecules/index.js +4 -0
  62. package/dist/molecules/index.js.map +1 -0
  63. package/dist/organisms/index.d.ts +113 -0
  64. package/dist/organisms/index.js +4 -0
  65. package/dist/organisms/index.js.map +1 -0
  66. package/dist/presets/gavel.css +19 -0
  67. package/dist/theme/index.d.ts +60 -0
  68. package/dist/theme/index.js +85 -0
  69. package/dist/theme/index.js.map +1 -0
  70. package/dist/tokens/index.d.ts +8 -0
  71. package/dist/tokens/index.js +3 -0
  72. package/dist/tokens/index.js.map +1 -0
  73. package/dist/tokens.css +129 -0
  74. package/package.json +114 -0
@@ -0,0 +1,126 @@
1
+ "use client";
2
+ "use client";
3
+
4
+ // src/atoms/icon/svg/index.tsx
5
+ import { jsx } from "react/jsx-runtime";
6
+ var SIZES = {
7
+ sm: "h-3 w-3",
8
+ md: "h-4 w-4",
9
+ lg: "h-5 w-5",
10
+ xl: "h-6 w-6",
11
+ "2xl": "h-8 w-8"
12
+ };
13
+ function Svg({ size = "md", className = "", children }) {
14
+ return /* @__PURE__ */ jsx(
15
+ "svg",
16
+ {
17
+ className: `${SIZES[size]} shrink-0 ${className}`,
18
+ viewBox: "0 0 24 24",
19
+ fill: "none",
20
+ stroke: "currentColor",
21
+ strokeWidth: "1.6",
22
+ strokeLinecap: "round",
23
+ strokeLinejoin: "round",
24
+ "aria-hidden": "true",
25
+ children
26
+ }
27
+ );
28
+ }
29
+
30
+ // src/atoms/icon/moon-icon/index.tsx
31
+ import { jsx as jsx2 } from "react/jsx-runtime";
32
+ function MoonIcon(p) {
33
+ return /* @__PURE__ */ jsx2(Svg, { ...p, children: /* @__PURE__ */ jsx2("path", { d: "M20 14.2A8.2 8.2 0 0 1 9.8 4a8.2 8.2 0 1 0 10.2 10.2Z" }) });
34
+ }
35
+
36
+ // src/atoms/icon/sun-icon/index.tsx
37
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
38
+ function SunIcon(p) {
39
+ return /* @__PURE__ */ jsxs(Svg, { ...p, children: [
40
+ /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "4" }),
41
+ /* @__PURE__ */ jsx3("path", { d: "M12 2.5v2M12 19.5v2M4.6 4.6l1.4 1.4M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4" })
42
+ ] });
43
+ }
44
+
45
+ // src/atoms/button/button-style.ts
46
+ var VARIANTS = {
47
+ primary: "bg-accent font-medium text-on-accent hover:bg-accent-ink",
48
+ secondary: "border border-line-strong hover:bg-raised",
49
+ ghost: "text-ink-muted hover:bg-raised hover:text-ink-soft",
50
+ danger: "border border-danger/50 text-danger hover:bg-danger-soft"
51
+ };
52
+ var SIZES2 = {
53
+ sm: "gap-2 px-3 py-2 text-xs",
54
+ md: "gap-2 px-4 py-3 text-sm",
55
+ lg: "gap-2 px-4 py-4 text-base",
56
+ icon: "h-10 w-10 shrink-0",
57
+ "icon-sm": "h-8 w-8 shrink-0"
58
+ };
59
+ var BASE = "inline-flex touch-manipulation select-none items-center justify-center rounded-md transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-out active:scale-95 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent focus-visible:ring-2 focus-visible:ring-accent/30 disabled:pointer-events-none disabled:opacity-50";
60
+ function buttonClass({
61
+ variant = "secondary",
62
+ size = "md",
63
+ className = ""
64
+ } = {}) {
65
+ return `${BASE} ${VARIANTS[variant]} ${SIZES2[size]} ${className}`;
66
+ }
67
+
68
+ // src/atoms/icon-button/index.tsx
69
+ import { jsx as jsx4 } from "react/jsx-runtime";
70
+ function IconButton({
71
+ label,
72
+ variant = "ghost",
73
+ size = "icon",
74
+ className,
75
+ ...props
76
+ }) {
77
+ return /* @__PURE__ */ jsx4(
78
+ "button",
79
+ {
80
+ type: "button",
81
+ ...props,
82
+ "aria-label": label,
83
+ title: label,
84
+ className: buttonClass({ variant, size, className })
85
+ }
86
+ );
87
+ }
88
+
89
+ // src/tokens/theme.ts
90
+ import { useState } from "react";
91
+ var KEY = "jvdm-ui.theme";
92
+ function stored() {
93
+ const value = localStorage.getItem(KEY);
94
+ return value === "dark" || value === "light" ? value : null;
95
+ }
96
+ function systemTheme() {
97
+ return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
98
+ }
99
+ function useTheme() {
100
+ const [theme, setTheme] = useState(() => stored() ?? systemTheme());
101
+ function toggle() {
102
+ const next = theme === "dark" ? "light" : "dark";
103
+ document.documentElement.dataset.theme = next;
104
+ localStorage.setItem(KEY, next);
105
+ setTheme(next);
106
+ }
107
+ return { theme, toggle };
108
+ }
109
+
110
+ // src/atoms/theme-toggle/locales.ts
111
+ var NAME = { dark: "dark", light: "light" };
112
+ var THEME_TOGGLE = {
113
+ label: (theme) => `Switch to ${NAME[theme === "dark" ? "light" : "dark"]} theme`
114
+ };
115
+
116
+ // src/atoms/theme-toggle/index.tsx
117
+ import { jsx as jsx5 } from "react/jsx-runtime";
118
+ function ThemeToggle({ label = THEME_TOGGLE.label }) {
119
+ const { theme, toggle } = useTheme();
120
+ const text = label(theme);
121
+ return /* @__PURE__ */ jsx5(IconButton, { label: text, size: "icon-sm", onClick: toggle, children: theme === "dark" ? /* @__PURE__ */ jsx5(SunIcon, { size: "lg" }) : /* @__PURE__ */ jsx5(MoonIcon, { size: "lg" }) });
122
+ }
123
+ export {
124
+ ThemeToggle
125
+ };
126
+ //# sourceMappingURL=theme-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/atoms/icon/svg/index.tsx","../../src/atoms/icon/moon-icon/index.tsx","../../src/atoms/icon/sun-icon/index.tsx","../../src/atoms/button/button-style.ts","../../src/atoms/icon-button/index.tsx","../../src/tokens/theme.ts","../../src/atoms/theme-toggle/locales.ts","../../src/atoms/theme-toggle/index.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst SIZES: Record<IconSize, string> = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n \"2xl\": \"h-8 w-8\",\n};\n\nexport type Props = { size?: IconSize; className?: string };\n\nexport function Svg({ size = \"md\", className = \"\", children }: Props & { children: ReactNode }) {\n return (\n <svg\n className={`${SIZES[size]} shrink-0 ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function MoonIcon(p: Props) {\n return (\n <Svg {...p}>\n <path d=\"M20 14.2A8.2 8.2 0 0 1 9.8 4a8.2 8.2 0 1 0 10.2 10.2Z\" />\n </Svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function SunIcon(p: Props) {\n return (\n <Svg {...p}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2.5v2M12 19.5v2M4.6 4.6l1.4 1.4M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4\" />\n </Svg>\n );\n}\n","export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\";\n\nconst VARIANTS: Record<ButtonVariant, string> = {\n primary: \"bg-accent font-medium text-on-accent hover:bg-accent-ink\",\n secondary: \"border border-line-strong hover:bg-raised\",\n ghost: \"text-ink-muted hover:bg-raised hover:text-ink-soft\",\n danger: \"border border-danger/50 text-danger hover:bg-danger-soft\",\n};\n\nconst SIZES: Record<ButtonSize, string> = {\n sm: \"gap-2 px-3 py-2 text-xs\",\n md: \"gap-2 px-4 py-3 text-sm\",\n lg: \"gap-2 px-4 py-4 text-base\",\n icon: \"h-10 w-10 shrink-0\",\n \"icon-sm\": \"h-8 w-8 shrink-0\",\n};\n\nconst BASE =\n \"inline-flex touch-manipulation select-none items-center justify-center rounded-md transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-out active:scale-95\" +\n \" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent focus-visible:ring-2 focus-visible:ring-accent/30\" +\n \" disabled:pointer-events-none disabled:opacity-50\";\n\nexport type ButtonOptions = {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n};\n\nexport function buttonClass({\n variant = \"secondary\",\n size = \"md\",\n className = \"\",\n}: ButtonOptions = {}) {\n return `${BASE} ${VARIANTS[variant]} ${SIZES[size]} ${className}`;\n}\n","import type { ComponentProps } from \"react\";\n\nimport { buttonClass, type ButtonVariant } from \"../button\";\n\nexport type IconButtonSize = \"icon\" | \"icon-sm\";\n\nexport function IconButton({\n label,\n variant = \"ghost\",\n size = \"icon\",\n className,\n ...props\n}: {\n label: string;\n variant?: ButtonVariant;\n size?: IconButtonSize;\n} & Omit<ComponentProps<\"button\">, \"aria-label\" | \"size\">) {\n return (\n <button\n type=\"button\"\n {...props}\n aria-label={label}\n title={label}\n className={buttonClass({ variant, size, className })}\n />\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\n\nexport type Theme = \"dark\" | \"light\";\n\nconst KEY = \"jvdm-ui.theme\";\n\nfunction stored(): Theme | null {\n const value = localStorage.getItem(KEY);\n return value === \"dark\" || value === \"light\" ? value : null;\n}\n\nfunction systemTheme(): Theme {\n return window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\";\n}\n\nexport function applyStoredTheme() {\n const theme = stored();\n if (theme) document.documentElement.dataset.theme = theme;\n}\n\nexport function useTheme() {\n const [theme, setTheme] = useState<Theme>(() => stored() ?? systemTheme());\n\n function toggle() {\n const next: Theme = theme === \"dark\" ? \"light\" : \"dark\";\n document.documentElement.dataset.theme = next;\n localStorage.setItem(KEY, next);\n setTheme(next);\n }\n\n return { theme, toggle };\n}\n","import type { Theme } from \"../../tokens\";\n\nconst NAME: Record<Theme, string> = { dark: \"dark\", light: \"light\" };\n\nexport const THEME_TOGGLE = {\n label: (theme: Theme) => `Switch to ${NAME[theme === \"dark\" ? \"light\" : \"dark\"]} theme`,\n};\n","\"use client\";\n\nimport { MoonIcon, SunIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { useTheme, type Theme } from \"../../tokens\";\nimport { THEME_TOGGLE as T } from \"./locales\";\n\nexport function ThemeToggle({ label = T.label }: { label?: (theme: Theme) => string }) {\n const { theme, toggle } = useTheme();\n const text = label(theme);\n\n return (\n <IconButton label={text} size=\"icon-sm\" onClick={toggle}>\n {theme === \"dark\" ? <SunIcon size=\"lg\" /> : <MoonIcon size=\"lg\" />}\n </IconButton>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","SIZES","jsx","jsx"]}
@@ -0,0 +1,8 @@
1
+ type Theme = "dark" | "light";
2
+ declare function applyStoredTheme(): void;
3
+ declare function useTheme(): {
4
+ theme: Theme;
5
+ toggle: () => void;
6
+ };
7
+
8
+ export { type Theme, applyStoredTheme, useTheme };
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ "use client";
3
+
4
+ // src/tokens/theme.ts
5
+ import { useState } from "react";
6
+ var KEY = "jvdm-ui.theme";
7
+ function stored() {
8
+ const value = localStorage.getItem(KEY);
9
+ return value === "dark" || value === "light" ? value : null;
10
+ }
11
+ function systemTheme() {
12
+ return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
13
+ }
14
+ function applyStoredTheme() {
15
+ const theme = stored();
16
+ if (theme) document.documentElement.dataset.theme = theme;
17
+ }
18
+ function useTheme() {
19
+ const [theme, setTheme] = useState(() => stored() ?? systemTheme());
20
+ function toggle() {
21
+ const next = theme === "dark" ? "light" : "dark";
22
+ document.documentElement.dataset.theme = next;
23
+ localStorage.setItem(KEY, next);
24
+ setTheme(next);
25
+ }
26
+ return { theme, toggle };
27
+ }
28
+ export {
29
+ applyStoredTheme,
30
+ useTheme
31
+ };
32
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokens/theme.ts"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nexport type Theme = \"dark\" | \"light\";\n\nconst KEY = \"jvdm-ui.theme\";\n\nfunction stored(): Theme | null {\n const value = localStorage.getItem(KEY);\n return value === \"dark\" || value === \"light\" ? value : null;\n}\n\nfunction systemTheme(): Theme {\n return window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\";\n}\n\nexport function applyStoredTheme() {\n const theme = stored();\n if (theme) document.documentElement.dataset.theme = theme;\n}\n\nexport function useTheme() {\n const [theme, setTheme] = useState<Theme>(() => stored() ?? systemTheme());\n\n function toggle() {\n const next: Theme = theme === \"dark\" ? \"light\" : \"dark\";\n document.documentElement.dataset.theme = next;\n localStorage.setItem(KEY, next);\n setTheme(next);\n }\n\n return { theme, toggle };\n}\n"],"mappings":";;;;AAEA,SAAS,gBAAgB;AAIzB,IAAM,MAAM;AAEZ,SAAS,SAAuB;AAC9B,QAAM,QAAQ,aAAa,QAAQ,GAAG;AACtC,SAAO,UAAU,UAAU,UAAU,UAAU,QAAQ;AACzD;AAEA,SAAS,cAAqB;AAC5B,SAAO,OAAO,WAAW,+BAA+B,EAAE,UAAU,UAAU;AAChF;AAEO,SAAS,mBAAmB;AACjC,QAAM,QAAQ,OAAO;AACrB,MAAI,MAAO,UAAS,gBAAgB,QAAQ,QAAQ;AACtD;AAEO,SAAS,WAAW;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAgB,MAAM,OAAO,KAAK,YAAY,CAAC;AAEzE,WAAS,SAAS;AAChB,UAAM,OAAc,UAAU,SAAS,UAAU;AACjD,aAAS,gBAAgB,QAAQ,QAAQ;AACzC,iBAAa,QAAQ,KAAK,IAAI;AAC9B,aAAS,IAAI;AAAA,EACf;AAEA,SAAO,EAAE,OAAO,OAAO;AACzB;","names":[]}
@@ -0,0 +1,10 @@
1
+ import * as react from 'react';
2
+ import { ComponentProps } from 'react';
3
+
4
+ declare function TimePicker({ value, defaultValue, onValueChange, className, ...props }: Omit<ComponentProps<"input">, "type" | "value" | "defaultValue" | "onChange"> & {
5
+ value?: string;
6
+ defaultValue?: string;
7
+ onValueChange?: (value: string) => void;
8
+ }): react.JSX.Element;
9
+
10
+ export { TimePicker };
@@ -0,0 +1,140 @@
1
+ "use client";
2
+ "use client";
3
+
4
+ // src/atoms/time-picker/index.tsx
5
+ import { useEffect, useRef, useState } from "react";
6
+
7
+ // src/atoms/icon/svg/index.tsx
8
+ import { jsx } from "react/jsx-runtime";
9
+ var SIZES = {
10
+ sm: "h-3 w-3",
11
+ md: "h-4 w-4",
12
+ lg: "h-5 w-5",
13
+ xl: "h-6 w-6",
14
+ "2xl": "h-8 w-8"
15
+ };
16
+ function Svg({ size = "md", className = "", children }) {
17
+ return /* @__PURE__ */ jsx(
18
+ "svg",
19
+ {
20
+ className: `${SIZES[size]} shrink-0 ${className}`,
21
+ viewBox: "0 0 24 24",
22
+ fill: "none",
23
+ stroke: "currentColor",
24
+ strokeWidth: "1.6",
25
+ strokeLinecap: "round",
26
+ strokeLinejoin: "round",
27
+ "aria-hidden": "true",
28
+ children
29
+ }
30
+ );
31
+ }
32
+
33
+ // src/atoms/icon/chevron-icon/index.tsx
34
+ import { jsx as jsx2 } from "react/jsx-runtime";
35
+ function ChevronIcon(p) {
36
+ return /* @__PURE__ */ jsx2(Svg, { ...p, children: /* @__PURE__ */ jsx2("path", { d: "m6 9 6 6 6-6" }) });
37
+ }
38
+
39
+ // src/atoms/time-picker/locales.ts
40
+ var locales = {
41
+ choose: "Choose a time",
42
+ hours: "Hours",
43
+ minutes: "Minutes"
44
+ };
45
+
46
+ // src/atoms/time-picker/index.tsx
47
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
48
+ var CONTROL = "w-full min-w-0 rounded-md border border-line-strong bg-field px-4 py-3 text-base text-ink transition-[background-color,border-color,box-shadow] duration-(--duration-fast) ease-out outline-none focus:border-accent focus:ring-2 focus:ring-accent/30 sm:text-sm";
49
+ var HOURS = Array.from({ length: 24 }, (_, index) => String(index).padStart(2, "0"));
50
+ var MINUTES = Array.from({ length: 12 }, (_, index) => String(index * 5).padStart(2, "0"));
51
+ function TimePicker({
52
+ value,
53
+ defaultValue = "",
54
+ onValueChange,
55
+ className = "",
56
+ ...props
57
+ }) {
58
+ const [selected, setSelected] = useState(value ?? defaultValue);
59
+ const [open, setOpen] = useState(false);
60
+ const ref = useRef(null);
61
+ const [selectedHour, selectedMinute] = (selected || "09:00").split(":");
62
+ useEffect(() => {
63
+ function handleDocument(event) {
64
+ if (!ref.current?.contains(event.target)) setOpen(false);
65
+ }
66
+ function handleKey(event) {
67
+ if (event.key === "Escape") setOpen(false);
68
+ }
69
+ document.addEventListener("mousedown", handleDocument);
70
+ document.addEventListener("keydown", handleKey);
71
+ return () => {
72
+ document.removeEventListener("mousedown", handleDocument);
73
+ document.removeEventListener("keydown", handleKey);
74
+ };
75
+ }, []);
76
+ function choose(hour, minute) {
77
+ const next = `${hour}:${minute}`;
78
+ setSelected(next);
79
+ onValueChange?.(next);
80
+ }
81
+ return /* @__PURE__ */ jsxs(
82
+ "div",
83
+ {
84
+ className: `time-picker-root relative w-full ${open ? "time-picker-root-open" : ""}`,
85
+ ref,
86
+ children: [
87
+ /* @__PURE__ */ jsx3(
88
+ "input",
89
+ {
90
+ ...props,
91
+ "aria-label": props["aria-label"] ?? locales.choose,
92
+ className: `${CONTROL} cursor-pointer ${className}`,
93
+ onClick: () => setOpen(true),
94
+ readOnly: true,
95
+ value: selected
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsx3(
99
+ ChevronIcon,
100
+ {
101
+ className: "pointer-events-none absolute top-1/2 right-4 -translate-y-1/2 text-ink-muted",
102
+ size: "md"
103
+ }
104
+ ),
105
+ open ? /* @__PURE__ */ jsxs("div", { className: "fixed right-4 bottom-4 left-4 z-20 grid max-h-[min(28rem,calc(100dvh-2rem))] grid-cols-2 gap-4 rounded-xl border border-line bg-surface p-4 text-ink shadow-modal sm:absolute sm:top-full sm:right-0 sm:bottom-auto sm:left-auto sm:mt-2 sm:w-64 sm:rounded-lg sm:shadow-popover", children: [
106
+ /* @__PURE__ */ jsxs("div", { children: [
107
+ /* @__PURE__ */ jsx3("p", { className: "mb-2 text-2xs tracking-caps text-ink-dim uppercase", children: locales.hours }),
108
+ /* @__PURE__ */ jsx3("div", { className: "flex max-h-60 flex-col gap-1 overflow-y-auto overscroll-contain sm:max-h-52", children: HOURS.map((hour) => /* @__PURE__ */ jsx3(
109
+ "button",
110
+ {
111
+ className: `min-h-11 rounded-sm px-3 py-2 text-left text-sm transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${hour === selectedHour ? "bg-accent text-on-accent hover:bg-accent-ink" : "text-ink-soft"}`,
112
+ onClick: () => choose(hour, selectedMinute),
113
+ type: "button",
114
+ children: hour
115
+ },
116
+ hour
117
+ )) })
118
+ ] }),
119
+ /* @__PURE__ */ jsxs("div", { children: [
120
+ /* @__PURE__ */ jsx3("p", { className: "mb-2 text-2xs tracking-caps text-ink-dim uppercase", children: locales.minutes }),
121
+ /* @__PURE__ */ jsx3("div", { className: "flex max-h-60 flex-col gap-1 overflow-y-auto overscroll-contain sm:max-h-52", children: MINUTES.map((minute) => /* @__PURE__ */ jsx3(
122
+ "button",
123
+ {
124
+ className: `min-h-11 rounded-sm px-3 py-2 text-left text-sm transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${minute === selectedMinute ? "bg-accent text-on-accent hover:bg-accent-ink" : "text-ink-soft"}`,
125
+ onClick: () => choose(selectedHour, minute),
126
+ type: "button",
127
+ children: minute
128
+ },
129
+ minute
130
+ )) })
131
+ ] })
132
+ ] }) : null
133
+ ]
134
+ }
135
+ );
136
+ }
137
+ export {
138
+ TimePicker
139
+ };
140
+ //# sourceMappingURL=time-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/atoms/time-picker/index.tsx","../../src/atoms/icon/svg/index.tsx","../../src/atoms/icon/chevron-icon/index.tsx","../../src/atoms/time-picker/locales.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ComponentProps } from \"react\";\n\nimport { ChevronIcon } from \"../icon\";\nimport { locales } from \"./locales\";\n\nconst CONTROL =\n \"w-full min-w-0 rounded-md border border-line-strong bg-field px-4 py-3 text-base text-ink transition-[background-color,border-color,box-shadow] duration-(--duration-fast) ease-out outline-none focus:border-accent focus:ring-2 focus:ring-accent/30 sm:text-sm\";\nconst HOURS = Array.from({ length: 24 }, (_, index) => String(index).padStart(2, \"0\"));\nconst MINUTES = Array.from({ length: 12 }, (_, index) => String(index * 5).padStart(2, \"0\"));\n\nexport function TimePicker({\n value,\n defaultValue = \"\",\n onValueChange,\n className = \"\",\n ...props\n}: Omit<ComponentProps<\"input\">, \"type\" | \"value\" | \"defaultValue\" | \"onChange\"> & {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}) {\n const [selected, setSelected] = useState(value ?? defaultValue);\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const [selectedHour, selectedMinute] = (selected || \"09:00\").split(\":\");\n\n useEffect(() => {\n function handleDocument(event: MouseEvent) {\n if (!ref.current?.contains(event.target as Node)) setOpen(false);\n }\n function handleKey(event: KeyboardEvent) {\n if (event.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"mousedown\", handleDocument);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleDocument);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, []);\n\n function choose(hour: string, minute: string) {\n const next = `${hour}:${minute}`;\n setSelected(next);\n onValueChange?.(next);\n }\n\n return (\n <div\n className={`time-picker-root relative w-full ${open ? \"time-picker-root-open\" : \"\"}`}\n ref={ref}\n >\n <input\n {...props}\n aria-label={props[\"aria-label\"] ?? locales.choose}\n className={`${CONTROL} cursor-pointer ${className}`}\n onClick={() => setOpen(true)}\n readOnly\n value={selected}\n />\n <ChevronIcon\n className=\"pointer-events-none absolute top-1/2 right-4 -translate-y-1/2 text-ink-muted\"\n size=\"md\"\n />\n {open ? (\n <div className=\"fixed right-4 bottom-4 left-4 z-20 grid max-h-[min(28rem,calc(100dvh-2rem))] grid-cols-2 gap-4 rounded-xl border border-line bg-surface p-4 text-ink shadow-modal sm:absolute sm:top-full sm:right-0 sm:bottom-auto sm:left-auto sm:mt-2 sm:w-64 sm:rounded-lg sm:shadow-popover\">\n <div>\n <p className=\"mb-2 text-2xs tracking-caps text-ink-dim uppercase\">{locales.hours}</p>\n <div className=\"flex max-h-60 flex-col gap-1 overflow-y-auto overscroll-contain sm:max-h-52\">\n {HOURS.map((hour) => (\n <button\n className={`min-h-11 rounded-sm px-3 py-2 text-left text-sm transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${hour === selectedHour ? \"bg-accent text-on-accent hover:bg-accent-ink\" : \"text-ink-soft\"}`}\n key={hour}\n onClick={() => choose(hour, selectedMinute)}\n type=\"button\"\n >\n {hour}\n </button>\n ))}\n </div>\n </div>\n <div>\n <p className=\"mb-2 text-2xs tracking-caps text-ink-dim uppercase\">{locales.minutes}</p>\n <div className=\"flex max-h-60 flex-col gap-1 overflow-y-auto overscroll-contain sm:max-h-52\">\n {MINUTES.map((minute) => (\n <button\n className={`min-h-11 rounded-sm px-3 py-2 text-left text-sm transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent ${minute === selectedMinute ? \"bg-accent text-on-accent hover:bg-accent-ink\" : \"text-ink-soft\"}`}\n key={minute}\n onClick={() => choose(selectedHour, minute)}\n type=\"button\"\n >\n {minute}\n </button>\n ))}\n </div>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst SIZES: Record<IconSize, string> = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n \"2xl\": \"h-8 w-8\",\n};\n\nexport type Props = { size?: IconSize; className?: string };\n\nexport function Svg({ size = \"md\", className = \"\", children }: Props & { children: ReactNode }) {\n return (\n <svg\n className={`${SIZES[size]} shrink-0 ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function ChevronIcon(p: Props) {\n return (\n <Svg {...p}>\n <path d=\"m6 9 6 6 6-6\" />\n </Svg>\n );\n}\n","export const locales = {\n choose: \"Choose a time\",\n hours: \"Hours\",\n minutes: \"Minutes\",\n};\n"],"mappings":"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","names":["jsx","jsx"]}
@@ -0,0 +1,5 @@
1
+ export { Theme, applyStoredTheme, useTheme } from './tokens/index.js';
2
+ export { AccessIcon, AlertIcon, Avatar, AvatarSize, BackIcon, Badge, BadgeTone, BoxIcon, BuildingIcon, Button, ButtonOptions, ButtonSize, ButtonVariant, CONTROL, CONTROL_SIZES, CalendarIcon, CarIcon, Card, CardPadding, Checkbox, ChevronIcon, CloseIcon, Combobox, ComboboxOption, ControlSize, DashboardIcon, DatePicker, DateTimePicker, Divider, EyeIcon, EyeOffIcon, FaceIcon, FactoryIcon, FileUpload, FormAlert, FunnelIcon, GavelIcon, IconButton, IconButtonSize, IconSize, Input, InstagramIcon, Kbd, Label, Link, LinkTone, LogoutIcon, MailIcon, MoonIcon, MoreIcon, MultiSelect, MultiSelectOption, NumberInput, PasswordInput, PencilIcon, PhoneIcon, PinInput, PlansIcon, PlusIcon, ProgressBar, ProgressTone, Props, Radio, RangeDatePicker, SearchIcon, Segmented, SegmentedOption, Select, ShieldCheckIcon, Skeleton, Slider, Spinner, SpinnerSize, StaffIcon, StudentsIcon, SunIcon, Svg, Switch, Textarea, ThemeToggle, Thumb, TimePicker, TrashIcon, WhatsappIcon, buttonClass } from './atoms/index.js';
3
+ export { Accordion, AccordionItem, Banner, BannerTone, Breadcrumb, Callout, CalloutTone, CardTitle, CodeBlock, CommandItem, CommandMenu, ConfirmDialog, Crumb, Drawer, DropdownMenu, Empty, Field, FilterBar, Gallery, ImagePreview, LoadError, Menu, MenuAlign, MenuItemOptions, MenuItemTone, MetricCard, Modal, PageHeader, Pagination, Snackbar, SnackbarStack, StatCard, Step, Stepper, Tab, Tabs, Toast, ToastTone, Tooltip, TooltipSide, TreeNode, TreeView, menuItemClass } from './molecules/index.js';
4
+ export { AreaChart, AreaPoint, Bar, BarChart, Column, DataTable, DonutChart, DonutDatum, GRID_ROW, KanbanBoard, KanbanCard, KanbanColumn, LineChart, Sparkline, Timeline, TimelineItem } from './organisms/index.js';
5
+ import 'react';
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { applyStoredTheme, useTheme } from './chunk-CGDYSB4G.js';
2
+ export { Accordion, Banner, Breadcrumb, Callout, CardTitle, CommandMenu, Drawer, DropdownMenu, Empty, Field, FilterBar, Gallery, ImagePreview, LoadError, Menu, MetricCard, PageHeader, Pagination, SnackbarStack, StatCard, Stepper, Tabs, Toast, Tooltip, TreeView, menuItemClass } from './chunk-AHE2576G.js';
3
+ export { AreaChart, BarChart, DataTable, DonutChart, GRID_ROW, KanbanBoard, LineChart, Sparkline, Timeline } from './chunk-JYNDKPAH.js';
4
+ export { AccessIcon, AlertIcon, Avatar, BackIcon, Badge, BoxIcon, BuildingIcon, Button, CONTROL, CONTROL_SIZES, CalendarIcon, CarIcon, Card, Checkbox, ChevronIcon, CloseIcon, Combobox, DashboardIcon, DateTimePicker, Divider, EyeIcon, EyeOffIcon, FaceIcon, FactoryIcon, FormAlert, FunnelIcon, GavelIcon, IconButton, Input, InstagramIcon, Kbd, Label, Link, LogoutIcon, MailIcon, MoonIcon, MoreIcon, PasswordInput, PencilIcon, PhoneIcon, PlansIcon, PlusIcon, ProgressBar, Radio, RangeDatePicker, SearchIcon, Segmented, Select, ShieldCheckIcon, Skeleton, Slider, Spinner, StaffIcon, StudentsIcon, SunIcon, Svg, Switch, Textarea, ThemeToggle, Thumb, TrashIcon, WhatsappIcon, buttonClass } from './chunk-WWOXGKLF.js';
5
+ //# sourceMappingURL=index.js.map
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}