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.
- package/LICENSE +21 -0
- package/README.md +221 -0
- package/bin/jvdm-ui.mjs +49 -0
- package/dist/atoms/index.d.ts +343 -0
- package/dist/atoms/index.js +3 -0
- package/dist/atoms/index.js.map +1 -0
- package/dist/chunk-AHE2576G.js +682 -0
- package/dist/chunk-AHE2576G.js.map +1 -0
- package/dist/chunk-CGDYSB4G.js +3 -0
- package/dist/chunk-CGDYSB4G.js.map +1 -0
- package/dist/chunk-JYNDKPAH.js +362 -0
- package/dist/chunk-JYNDKPAH.js.map +1 -0
- package/dist/chunk-WWOXGKLF.js +724 -0
- package/dist/chunk-WWOXGKLF.js.map +1 -0
- package/dist/client/code-block.d.ts +9 -0
- package/dist/client/code-block.js +65 -0
- package/dist/client/code-block.js.map +1 -0
- package/dist/client/confirm-dialog.d.ts +16 -0
- package/dist/client/confirm-dialog.js +181 -0
- package/dist/client/confirm-dialog.js.map +1 -0
- package/dist/client/date-picker.d.ts +10 -0
- package/dist/client/date-picker.js +236 -0
- package/dist/client/date-picker.js.map +1 -0
- package/dist/client/file-upload.d.ts +12 -0
- package/dist/client/file-upload.js +58 -0
- package/dist/client/file-upload.js.map +1 -0
- package/dist/client/gallery.d.ts +14 -0
- package/dist/client/gallery.js +122 -0
- package/dist/client/gallery.js.map +1 -0
- package/dist/client/menu.d.ts +24 -0
- package/dist/client/menu.js +115 -0
- package/dist/client/menu.js.map +1 -0
- package/dist/client/modal.d.ts +19 -0
- package/dist/client/modal.js +147 -0
- package/dist/client/modal.js.map +1 -0
- package/dist/client/multi-select.d.ts +16 -0
- package/dist/client/multi-select.js +84 -0
- package/dist/client/multi-select.js.map +1 -0
- package/dist/client/number-input.d.ts +6 -0
- package/dist/client/number-input.js +59 -0
- package/dist/client/number-input.js.map +1 -0
- package/dist/client/password-input.d.ts +16 -0
- package/dist/client/password-input.js +103 -0
- package/dist/client/password-input.js.map +1 -0
- package/dist/client/pin-input.d.ts +10 -0
- package/dist/client/pin-input.js +55 -0
- package/dist/client/pin-input.js.map +1 -0
- package/dist/client/theme-toggle.d.ts +8 -0
- package/dist/client/theme-toggle.js +126 -0
- package/dist/client/theme-toggle.js.map +1 -0
- package/dist/client/theme.d.ts +8 -0
- package/dist/client/theme.js +32 -0
- package/dist/client/theme.js.map +1 -0
- package/dist/client/time-picker.d.ts +10 -0
- package/dist/client/time-picker.js +140 -0
- package/dist/client/time-picker.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/molecules/index.d.ts +309 -0
- package/dist/molecules/index.js +4 -0
- package/dist/molecules/index.js.map +1 -0
- package/dist/organisms/index.d.ts +113 -0
- package/dist/organisms/index.js +4 -0
- package/dist/organisms/index.js.map +1 -0
- package/dist/presets/gavel.css +19 -0
- package/dist/theme/index.d.ts +60 -0
- package/dist/theme/index.js +85 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/tokens/index.d.ts +8 -0
- package/dist/tokens/index.js +3 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens.css +129 -0
- 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,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"]}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|