@k8o/arte-odyssey 9.1.0 → 10.0.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 +121 -28
- package/dist/components/_internal/focus-ring.d.mts +8 -0
- package/dist/components/_internal/focus-ring.mjs +8 -0
- package/dist/components/buttons/button/button.d.mts +8 -1
- package/dist/components/buttons/button/button.mjs +13 -12
- package/dist/components/buttons/icon-button/icon-button.d.mts +7 -1
- package/dist/components/buttons/icon-button/icon-button.mjs +3 -2
- package/dist/components/data-display/accordion/accordion-button.mjs +2 -1
- package/dist/components/data-display/accordion/accordion-item.d.mts +2 -0
- package/dist/components/data-display/accordion/accordion-item.mjs +3 -1
- package/dist/components/data-display/accordion/context.d.mts +2 -0
- package/dist/components/data-display/accordion/context.mjs +12 -6
- package/dist/components/data-display/accordion/index.d.mts +9 -9
- package/dist/components/data-display/avatar/avatar.mjs +1 -1
- package/dist/components/data-display/badge/badge.d.mts +1 -1
- package/dist/components/data-display/badge/badge.mjs +3 -2
- package/dist/components/data-display/card/card.mjs +1 -1
- package/dist/components/data-display/code/find-all-colors.mjs +3 -3
- package/dist/components/feedback/alert/alert.d.mts +1 -1
- package/dist/components/feedback/alert/alert.mjs +6 -6
- package/dist/components/feedback/toast/context.d.mts +3 -4
- package/dist/components/feedback/toast/context.mjs +3 -4
- package/dist/components/feedback/toast/provider.mjs +1 -1
- package/dist/components/feedback/toast/toast.d.mts +1 -1
- package/dist/components/feedback/toast/toast.mjs +2 -2
- package/dist/components/form/autocomplete/autocomplete.mjs +6 -1
- package/dist/components/form/checkbox/checkbox.d.mts +3 -3
- package/dist/components/form/checkbox/checkbox.mjs +5 -4
- package/dist/components/form/checkbox-card/checkbox-card.mjs +2 -0
- package/dist/components/form/checkbox-group/checkbox-group.mjs +1 -0
- package/dist/components/form/checkbox-group/index.d.mts +10 -12
- package/dist/components/form/file-field/file-field.d.mts +3 -4
- package/dist/components/form/file-field/file-field.mjs +2 -7
- package/dist/components/form/number-field/cast.mjs +2 -2
- package/dist/components/form/number-field/number-field.mjs +4 -3
- package/dist/components/form/password-input/password-input.mjs +3 -2
- package/dist/components/form/radio/radio.d.mts +3 -3
- package/dist/components/form/radio/radio.mjs +6 -5
- package/dist/components/form/radio-card/radio-card.d.mts +3 -3
- package/dist/components/form/radio-card/radio-card.mjs +3 -2
- package/dist/components/form/select/select.mjs +2 -1
- package/dist/components/form/slider/slider.mjs +1 -1
- package/dist/components/form/switch/switch.d.mts +3 -3
- package/dist/components/form/switch/switch.mjs +3 -2
- package/dist/components/form/text-field/text-field.mjs +2 -1
- package/dist/components/form/textarea/textarea.mjs +2 -1
- package/dist/components/index.d.mts +3 -1
- package/dist/components/index.mjs +3 -1
- package/dist/components/layout/_shared/gap.d.mts +11 -0
- package/dist/components/layout/_shared/gap.mjs +10 -0
- package/dist/components/layout/grid/grid.d.mts +16 -0
- package/dist/components/layout/grid/grid.mjs +35 -0
- package/dist/components/layout/grid/index.d.mts +2 -0
- package/dist/components/layout/grid/index.mjs +2 -0
- package/dist/components/layout/stack/index.d.mts +2 -0
- package/dist/components/layout/stack/index.mjs +2 -0
- package/dist/components/layout/stack/stack.d.mts +13 -0
- package/dist/components/layout/stack/stack.mjs +23 -0
- package/dist/components/navigation/anchor/anchor.d.mts +9 -8
- package/dist/components/navigation/anchor/anchor.mjs +4 -3
- package/dist/components/navigation/breadcrumb/breadcrumb.d.mts +2 -4
- package/dist/components/navigation/breadcrumb/breadcrumb.mjs +3 -3
- package/dist/components/navigation/tabs/tabs.d.mts +2 -0
- package/dist/components/navigation/tabs/tabs.mjs +15 -8
- package/dist/components/overlays/dialog/dialog.d.mts +1 -2
- package/dist/components/overlays/drawer/drawer.d.mts +3 -2
- package/dist/components/overlays/drawer/drawer.mjs +6 -3
- package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +3 -3
- package/dist/components/overlays/dropdown-menu/hooks.d.mts +153 -154
- package/dist/components/overlays/list-box/hooks.d.mts +173 -174
- package/dist/components/overlays/list-box/list-box.d.mts +1 -1
- package/dist/components/overlays/list-box/list-box.mjs +5 -5
- package/dist/components/overlays/popover/hooks.d.mts +1 -2
- package/dist/components/overlays/tooltip/tooltip.d.mts +1 -2
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.mjs +2 -2
- package/dist/index.d.mts +4 -2
- package/dist/index.mjs +20 -18
- package/dist/integrations/_shared/renderers.d.mts +74 -0
- package/dist/integrations/_shared/renderers.mjs +667 -0
- package/dist/integrations/_shared/schemas.d.mts +704 -0
- package/dist/integrations/_shared/schemas.mjs +496 -0
- package/dist/integrations/json-render/catalog.d.mts +770 -0
- package/dist/integrations/json-render/catalog.mjs +229 -0
- package/dist/integrations/json-render/registry.d.mts +4 -0
- package/dist/integrations/json-render/registry.mjs +137 -0
- package/dist/integrations/openui/form-views.d.mts +31 -0
- package/dist/integrations/openui/form-views.mjs +75 -0
- package/dist/integrations/openui/library.d.mts +4 -0
- package/dist/integrations/openui/library.mjs +432 -0
- package/dist/styles/base.css +75 -0
- package/dist/styles/index.css +12 -500
- package/dist/styles/tokens.css +379 -0
- package/dist/styles/tokens.d.mts +2 -95
- package/dist/styles/tokens.generated.d.mts +839 -0
- package/dist/styles/tokens.generated.mjs +812 -0
- package/dist/styles/tokens.mjs +2 -776
- package/dist/styles/utilities.css +62 -0
- package/dist/types/index.d.mts +1 -1
- package/docs/GUIDE.md +26 -7
- package/docs/references/components.md +40 -21
- package/docs/references/hooks.md +17 -0
- package/package.json +69 -27
|
@@ -2,18 +2,17 @@
|
|
|
2
2
|
import { createSafeContext } from "../../../helpers/create-safe-context.mjs";
|
|
3
3
|
import { useCallback } from "react";
|
|
4
4
|
//#region src/components/feedback/toast/context.ts
|
|
5
|
-
const MAX_TOAST_COUNT = 5;
|
|
6
5
|
const [SetToastContext, useSetToast] = createSafeContext("useToast must be used within a ToastProvider");
|
|
7
6
|
const useToast = () => {
|
|
8
7
|
const setToasts = useSetToast();
|
|
9
8
|
return {
|
|
10
|
-
onOpen: useCallback((
|
|
9
|
+
onOpen: useCallback((tone, message) => {
|
|
11
10
|
setToasts((prev) => {
|
|
12
11
|
return [...prev, {
|
|
13
12
|
id: crypto.randomUUID(),
|
|
14
|
-
|
|
13
|
+
tone,
|
|
15
14
|
message
|
|
16
|
-
}].slice(-
|
|
15
|
+
}].slice(-5);
|
|
17
16
|
});
|
|
18
17
|
}, [setToasts]),
|
|
19
18
|
onClose: useCallback((id) => {
|
|
@@ -67,7 +67,7 @@ const ToastProvider = ({ children, portalRef = null, position = "fixed" }) => {
|
|
|
67
67
|
children: /* @__PURE__ */ jsx("div", {
|
|
68
68
|
"aria-atomic": true,
|
|
69
69
|
className: "shadow-lg",
|
|
70
|
-
role: toast.
|
|
70
|
+
role: toast.tone === "error" || toast.tone === "warning" ? "alert" : "status",
|
|
71
71
|
children: /* @__PURE__ */ jsx(Toast, { ...toast })
|
|
72
72
|
})
|
|
73
73
|
}, toast.id))
|
|
@@ -6,14 +6,14 @@ import { useCallback } from "react";
|
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/feedback/toast/toast.tsx
|
|
8
8
|
const DELAY_MS = 5e3;
|
|
9
|
-
const Toast = ({ id,
|
|
9
|
+
const Toast = ({ id, tone, message }) => {
|
|
10
10
|
const { onClose } = useToast();
|
|
11
11
|
useTimeout(useCallback(() => {
|
|
12
12
|
onClose(id);
|
|
13
13
|
}, [id, onClose]), DELAY_MS);
|
|
14
14
|
return /* @__PURE__ */ jsx(Alert, {
|
|
15
15
|
message,
|
|
16
|
-
|
|
16
|
+
tone
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
//#endregion
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_WITHIN } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useDisclosure } from "../../../hooks/disclosure/index.mjs";
|
|
4
5
|
import { CloseIcon } from "../../icons/lucide.mjs";
|
|
@@ -63,7 +64,7 @@ const Autocomplete = ({ id, name, invalid = false, disabled = false, required =
|
|
|
63
64
|
refs.setReference(node);
|
|
64
65
|
};
|
|
65
66
|
return /* @__PURE__ */ jsxs("div", {
|
|
66
|
-
className: cn("relative rounded-xl border border-border-base bg-bg-base inline-full",
|
|
67
|
+
className: cn("relative rounded-xl border border-border-base bg-bg-base inline-full", FOCUS_RING_WITHIN, "has-aria-invalid:border-border-error", "has-disabled:cursor-not-allowed has-disabled:border-border-mute has-disabled:bg-bg-mute hover:has-disabled:has-hover:bg-bg-mute"),
|
|
67
68
|
ref: setReferenceRef,
|
|
68
69
|
children: [
|
|
69
70
|
name !== void 0 && name !== "" ? currentValue.map((selectedValue) => /* @__PURE__ */ jsx("input", {
|
|
@@ -181,14 +182,18 @@ const Autocomplete = ({ id, name, invalid = false, disabled = false, required =
|
|
|
181
182
|
"aria-busy": isPending || void 0,
|
|
182
183
|
className: cn("max-h-96 py-2 transition-opacity vertical:max-h-none vertical:max-w-96", isPending && "opacity-60"),
|
|
183
184
|
id: `${id}_listbox`,
|
|
185
|
+
role: "listbox",
|
|
184
186
|
children: [filteredOptions.length === 0 && /* @__PURE__ */ jsx("li", {
|
|
185
187
|
className: "text-fg-mute px-3 py-2",
|
|
188
|
+
role: "presentation",
|
|
186
189
|
children: "該当なし"
|
|
187
190
|
}), filteredOptions.map((option, idx) => {
|
|
188
191
|
const selected = currentValue.includes(option.value);
|
|
189
192
|
return /* @__PURE__ */ jsx("li", {
|
|
193
|
+
"aria-selected": selected,
|
|
190
194
|
className: cn("cursor-pointer px-3 py-2 transition-colors", selected && "bg-primary-bg-subtle text-primary-fg", selectIndex === idx && !selected && "bg-bg-subtle", selectIndex === idx && selected && "bg-primary-bg-mute text-primary-fg"),
|
|
191
195
|
id: `${id}_option_${option.value}`,
|
|
196
|
+
role: "option",
|
|
192
197
|
onClick: (e) => {
|
|
193
198
|
e.stopPropagation();
|
|
194
199
|
reset();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeEvent, FC, InputHTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/form/checkbox/checkbox.d.ts
|
|
4
4
|
type BaseProps = {
|
|
@@ -7,13 +7,13 @@ type BaseProps = {
|
|
|
7
7
|
} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'style' | 'value' | 'onChange' | 'defaultChecked' | 'checked' | 'children'>;
|
|
8
8
|
type ControlledProps = {
|
|
9
9
|
value: boolean;
|
|
10
|
-
onChange:
|
|
10
|
+
onChange: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
|
|
11
11
|
defaultChecked?: never;
|
|
12
12
|
};
|
|
13
13
|
type UncontrolledProps = {
|
|
14
14
|
defaultChecked?: boolean;
|
|
15
15
|
value?: never;
|
|
16
|
-
onChange?:
|
|
16
|
+
onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
|
|
17
17
|
};
|
|
18
18
|
type Props = BaseProps & (ControlledProps | UncontrolledProps);
|
|
19
19
|
declare const Checkbox: FC<Props>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_PEER } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { CheckIcon } from "../../icons/lucide.mjs";
|
|
4
5
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
@@ -18,9 +19,9 @@ const Checkbox = ({ name, itemValue, disabled = false, label, value, defaultChec
|
|
|
18
19
|
const isControlled = value !== void 0;
|
|
19
20
|
const disabledResolved = disabled || groupContext?.disabled === true || pending;
|
|
20
21
|
const checked = groupContext ? groupContext.currentValue.includes(groupItemValue) : internalChecked;
|
|
21
|
-
const setChecked = (nextChecked) => {
|
|
22
|
+
const setChecked = (nextChecked, event) => {
|
|
22
23
|
setInternalChecked(nextChecked);
|
|
23
|
-
onChange?.(
|
|
24
|
+
onChange?.(nextChecked, event);
|
|
24
25
|
};
|
|
25
26
|
return /* @__PURE__ */ jsxs("label", {
|
|
26
27
|
className: cn("inline-flex items-center gap-2 text-left", disabledResolved ? "cursor-not-allowed text-fg-mute" : "cursor-pointer"),
|
|
@@ -36,14 +37,14 @@ const Checkbox = ({ name, itemValue, disabled = false, label, value, defaultChec
|
|
|
36
37
|
groupContext.toggleValue(groupItemValue);
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
|
-
setChecked(event.target.checked);
|
|
40
|
+
setChecked(event.target.checked, event);
|
|
40
41
|
},
|
|
41
42
|
type: "checkbox",
|
|
42
43
|
value: groupContext ? groupItemValue : void 0
|
|
43
44
|
}),
|
|
44
45
|
/* @__PURE__ */ jsx("span", {
|
|
45
46
|
"aria-hidden": true,
|
|
46
|
-
className: cn("inline-flex size-5 items-center justify-center rounded-md border-2 transition-colors",
|
|
47
|
+
className: cn("inline-flex size-5 items-center justify-center rounded-md border-2 transition-colors", FOCUS_RING_PEER, disabledResolved && "border-border-mute bg-bg-mute", checked ? "border-border-base bg-primary-bg text-fg-base" : "border-border-mute bg-bg-base"),
|
|
47
48
|
children: checked ? /* @__PURE__ */ jsx(CheckIcon, { size: "sm" }) : null
|
|
48
49
|
}),
|
|
49
50
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -30,6 +30,7 @@ const CheckboxCard = ({ name, disabled = false, invalid = false, options, value,
|
|
|
30
30
|
children: [
|
|
31
31
|
/* @__PURE__ */ jsx("input", {
|
|
32
32
|
"aria-describedby": hasDescription ? `${optionId}-description` : void 0,
|
|
33
|
+
"aria-labelledby": `${optionId}-label`,
|
|
33
34
|
checked,
|
|
34
35
|
className: "sr-only",
|
|
35
36
|
disabled: optionDisabled,
|
|
@@ -49,6 +50,7 @@ const CheckboxCard = ({ name, disabled = false, invalid = false, options, value,
|
|
|
49
50
|
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
50
51
|
children: [/* @__PURE__ */ jsx("span", {
|
|
51
52
|
className: "text-fg-base font-medium",
|
|
53
|
+
id: `${optionId}-label`,
|
|
52
54
|
children: option.label
|
|
53
55
|
}), hasDescription ? /* @__PURE__ */ jsx("span", {
|
|
54
56
|
className: "text-fg-mute text-sm",
|
|
@@ -29,6 +29,7 @@ const Root = ({ children, defaultValue, disabled = false, invalid = false, requi
|
|
|
29
29
|
return /* @__PURE__ */ jsx("fieldset", {
|
|
30
30
|
...rest,
|
|
31
31
|
"aria-invalid": invalid,
|
|
32
|
+
"aria-required": required,
|
|
32
33
|
className: cn("flex flex-col gap-2", disabled && "cursor-not-allowed"),
|
|
33
34
|
children: /* @__PURE__ */ jsx(CheckboxGroupContext, {
|
|
34
35
|
value: contextValue,
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import * as _$react from "react";
|
|
2
|
-
|
|
3
1
|
//#region src/components/form/checkbox-group/index.d.ts
|
|
4
|
-
declare const CheckboxGroup:
|
|
2
|
+
declare const CheckboxGroup: import("react").FC<{
|
|
5
3
|
invalid?: boolean;
|
|
6
4
|
required?: boolean;
|
|
7
5
|
name: string;
|
|
8
|
-
} & Omit<
|
|
9
|
-
children?:
|
|
6
|
+
} & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "name" | "defaultValue" | "onChange"> & {
|
|
7
|
+
children?: import("react").ReactNode | undefined;
|
|
10
8
|
} & ({
|
|
11
9
|
value: string[];
|
|
12
10
|
onChange: (value: string[]) => void;
|
|
@@ -16,12 +14,12 @@ declare const CheckboxGroup: _$react.FC<{
|
|
|
16
14
|
value?: never;
|
|
17
15
|
onChange?: (value: string[]) => void;
|
|
18
16
|
})> & {
|
|
19
|
-
Root:
|
|
17
|
+
Root: import("react").FC<{
|
|
20
18
|
invalid?: boolean;
|
|
21
19
|
required?: boolean;
|
|
22
20
|
name: string;
|
|
23
|
-
} & Omit<
|
|
24
|
-
children?:
|
|
21
|
+
} & Omit<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "style" | "name" | "defaultValue" | "onChange"> & {
|
|
22
|
+
children?: import("react").ReactNode | undefined;
|
|
25
23
|
} & ({
|
|
26
24
|
value: string[];
|
|
27
25
|
onChange: (value: string[]) => void;
|
|
@@ -32,17 +30,17 @@ declare const CheckboxGroup: _$react.FC<{
|
|
|
32
30
|
onChange?: (value: string[]) => void;
|
|
33
31
|
})>;
|
|
34
32
|
} & {
|
|
35
|
-
Item:
|
|
33
|
+
Item: import("react").FC<{
|
|
36
34
|
itemValue?: string;
|
|
37
35
|
label: string;
|
|
38
|
-
} & Omit<
|
|
36
|
+
} & Omit<import("react").InputHTMLAttributes<HTMLInputElement>, "value" | "type" | "className" | "style" | "checked" | "defaultChecked" | "children" | "onChange"> & ({
|
|
39
37
|
value: boolean;
|
|
40
|
-
onChange:
|
|
38
|
+
onChange: (checked: boolean, event: import("react").ChangeEvent<HTMLInputElement>) => void;
|
|
41
39
|
defaultChecked?: never;
|
|
42
40
|
} | {
|
|
43
41
|
defaultChecked?: boolean;
|
|
44
42
|
value?: never;
|
|
45
|
-
onChange?:
|
|
43
|
+
onChange?: (checked: boolean, event: import("react").ChangeEvent<HTMLInputElement>) => void;
|
|
46
44
|
})>;
|
|
47
45
|
};
|
|
48
46
|
//#endregion
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
1
|
+
import { ChangeEvent, FC, InputHTMLAttributes, PropsWithChildren, ReactElement } from "react";
|
|
3
2
|
|
|
4
3
|
//#region src/components/form/file-field/file-field.d.ts
|
|
5
4
|
type RootProps = PropsWithChildren<{
|
|
6
5
|
invalid?: boolean;
|
|
7
6
|
maxFiles?: number;
|
|
8
7
|
defaultValue?: File[];
|
|
9
|
-
onChange?:
|
|
8
|
+
onChange?: (files: FileList | null, event?: ChangeEvent<HTMLInputElement>) => void;
|
|
10
9
|
webkitDirectory?: boolean;
|
|
11
10
|
} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'style' | 'onChange' | 'defaultValue' | 'value' | 'children'>>;
|
|
12
11
|
declare const FileField: {
|
|
@@ -20,7 +19,7 @@ declare const FileField: {
|
|
|
20
19
|
onChange,
|
|
21
20
|
webkitDirectory,
|
|
22
21
|
...rest
|
|
23
|
-
}: RootProps) =>
|
|
22
|
+
}: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
23
|
readonly Trigger: FC<{
|
|
25
24
|
renderItem: (props: {
|
|
26
25
|
onClick: () => void;
|
|
@@ -14,7 +14,7 @@ const Root = ({ children, disabled = false, invalid = false, required = false, m
|
|
|
14
14
|
const disabledResolved = disabled || pending;
|
|
15
15
|
const [acceptedFiles, setAcceptedFiles] = useState([]);
|
|
16
16
|
const onFilesChange = useCallback((event) => {
|
|
17
|
-
onChange?.(event);
|
|
17
|
+
onChange?.(event.target.files, event);
|
|
18
18
|
const newFiles = Array.from(event.target.files ?? []).map((file) => ({
|
|
19
19
|
file,
|
|
20
20
|
id: crypto.randomUUID()
|
|
@@ -34,12 +34,7 @@ const Root = ({ children, disabled = false, invalid = false, required = false, m
|
|
|
34
34
|
const dataTransfer = new DataTransfer();
|
|
35
35
|
for (const { file } of updatedFiles) dataTransfer.items.add(file);
|
|
36
36
|
inputRef.current.files = dataTransfer.files;
|
|
37
|
-
|
|
38
|
-
Object.defineProperty(event, "target", {
|
|
39
|
-
writable: false,
|
|
40
|
-
value: inputRef.current
|
|
41
|
-
});
|
|
42
|
-
onChange(event);
|
|
37
|
+
onChange(dataTransfer.files);
|
|
43
38
|
}
|
|
44
39
|
}, [acceptedFiles, onChange]);
|
|
45
40
|
const openFilePicker = useCallback(() => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { toPrecision } from "../../../internal/to-precision.mjs";
|
|
2
2
|
//#region src/components/form/number-field/cast.ts
|
|
3
|
-
const FLOATING_POINT_REGEX = /^[Ee0-9+\-.]
|
|
3
|
+
const FLOATING_POINT_REGEX = /^[Ee0-9+\-.]$/u;
|
|
4
4
|
const isInvalidCharacter = (value) => FLOATING_POINT_REGEX.test(value);
|
|
5
5
|
const sanitize = (value) => value.split("").filter((char) => isInvalidCharacter(char)).join("");
|
|
6
|
-
const parse = (value) => Number.parseFloat(value.toString().replaceAll(/[^\w.-]+/
|
|
6
|
+
const parse = (value) => Number.parseFloat(value.toString().replaceAll(/[^\w.-]+/gu, ""));
|
|
7
7
|
const countDecimalPlaces = (value) => {
|
|
8
8
|
if (!Number.isFinite(value)) return 0;
|
|
9
9
|
let e = 1;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_WITHIN } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { ChevronIcon } from "../../icons/lucide.mjs";
|
|
4
|
-
import { toPrecision } from "../../../internal/to-precision.mjs";
|
|
5
5
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
6
|
+
import { toPrecision } from "../../../internal/to-precision.mjs";
|
|
6
7
|
import { clamp } from "../../../internal/clamp.mjs";
|
|
7
8
|
import { cast } from "./cast.mjs";
|
|
8
9
|
import { useState } from "react";
|
|
@@ -26,7 +27,7 @@ const NumberField = ({ invalid = false, disabled = false, required = false, valu
|
|
|
26
27
|
setCurrentValue(newValue);
|
|
27
28
|
};
|
|
28
29
|
return /* @__PURE__ */ jsxs("div", {
|
|
29
|
-
className: cn("relative flex h-12 w-full items-center justify-between gap-2 rounded-xl border border-border-base bg-bg-base vertical:h-auto vertical:w-12",
|
|
30
|
+
className: cn("relative flex h-12 w-full items-center justify-between gap-2 rounded-xl border border-border-base bg-bg-base vertical:h-auto vertical:w-12", FOCUS_RING_WITHIN, "has-aria-invalid:border-border-error", "has-disabled:cursor-not-allowed has-disabled:border-border-mute has-disabled:bg-bg-mute hover:has-disabled:has-hover:bg-bg-mute"),
|
|
30
31
|
children: [/* @__PURE__ */ jsx("input", {
|
|
31
32
|
autoComplete: "off",
|
|
32
33
|
autoCorrect: "off",
|
|
@@ -67,7 +68,7 @@ const NumberField = ({ invalid = false, disabled = false, required = false, valu
|
|
|
67
68
|
value: displayValue
|
|
68
69
|
}), /* @__PURE__ */ jsxs("div", {
|
|
69
70
|
"aria-hidden": "true",
|
|
70
|
-
className: "vertical:inset-e-auto vertical:bottom-1 vertical:h-auto vertical:w-full vertical:flex-row vertical:px-1 vertical:py-0 absolute
|
|
71
|
+
className: "vertical:inset-e-auto vertical:bottom-1 vertical:h-auto vertical:w-full vertical:flex-row vertical:px-1 vertical:py-0 absolute inset-e-1 flex h-full flex-col py-1",
|
|
71
72
|
children: [/* @__PURE__ */ jsxs("button", {
|
|
72
73
|
className: cn("flex w-6 grow items-center justify-center rounded-md text-fg-mute transition-colors vertical:h-6 vertical:w-auto", "hover:bg-bg-mute hover:text-fg-base", "disabled:cursor-not-allowed disabled:text-fg-mute hover:disabled:bg-transparent"),
|
|
73
74
|
disabled: disabled || pending,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_NO_BORDER, FOCUS_RING_WITHIN } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useDisclosure } from "../../../hooks/disclosure/index.mjs";
|
|
4
5
|
import { ViewIcon, ViewOffIcon } from "../../icons/lucide.mjs";
|
|
@@ -9,7 +10,7 @@ const PasswordInput = ({ invalid = false, autoComplete = "current-password", sho
|
|
|
9
10
|
const { isOpen: isVisible, toggle: toggleVisible } = useDisclosure();
|
|
10
11
|
const { pending } = useFormStatus();
|
|
11
12
|
return /* @__PURE__ */ jsxs("div", {
|
|
12
|
-
className: cn("relative flex w-full items-center rounded-xl border border-border-base bg-bg-base vertical:h-full vertical:w-auto", invalid && "border-border-error", (disabled || pending) && "cursor-not-allowed border-border-mute bg-bg-mute",
|
|
13
|
+
className: cn("relative flex w-full items-center rounded-xl border border-border-base bg-bg-base vertical:h-full vertical:w-auto", invalid && "border-border-error", (disabled || pending) && "cursor-not-allowed border-border-mute bg-bg-mute", FOCUS_RING_WITHIN),
|
|
13
14
|
children: [/* @__PURE__ */ jsx("input", {
|
|
14
15
|
"aria-invalid": invalid,
|
|
15
16
|
autoComplete,
|
|
@@ -20,7 +21,7 @@ const PasswordInput = ({ invalid = false, autoComplete = "current-password", sho
|
|
|
20
21
|
...rest
|
|
21
22
|
}), /* @__PURE__ */ jsx("button", {
|
|
22
23
|
"aria-label": isVisible ? hideLabel : showLabel,
|
|
23
|
-
className: cn("me-2 inline-flex shrink-0 items-center justify-center rounded-md p-1 text-fg-mute transition-colors",
|
|
24
|
+
className: cn("me-2 inline-flex shrink-0 items-center justify-center rounded-md p-1 text-fg-mute transition-colors", FOCUS_RING_NO_BORDER, !disabled && !pending && "hover:bg-bg-mute hover:text-fg-base", (disabled || pending) && "cursor-not-allowed text-fg-mute/70"),
|
|
24
25
|
disabled: disabled || pending,
|
|
25
26
|
onClick: toggleVisible,
|
|
26
27
|
type: "button",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Option } from "../../../types/variables.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { ChangeEvent, FC, HTMLAttributes } from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/components/form/radio/radio.d.ts
|
|
5
5
|
type BaseProps = {
|
|
@@ -10,13 +10,13 @@ type BaseProps = {
|
|
|
10
10
|
} & Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'className' | 'style' | 'children' | 'aria-labelledby' | 'onChange'>;
|
|
11
11
|
type ControlledProps = {
|
|
12
12
|
value: string;
|
|
13
|
-
onChange:
|
|
13
|
+
onChange: (value: string, event: ChangeEvent<HTMLInputElement>) => void;
|
|
14
14
|
defaultValue?: never;
|
|
15
15
|
};
|
|
16
16
|
type UncontrolledProps = {
|
|
17
17
|
defaultValue?: string;
|
|
18
18
|
value?: never;
|
|
19
|
-
onChange?:
|
|
19
|
+
onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void;
|
|
20
20
|
};
|
|
21
21
|
type Props = BaseProps & (ControlledProps | UncontrolledProps);
|
|
22
22
|
declare const Radio: FC<Props>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_PEER } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
4
5
|
import { useFormStatus } from "react-dom";
|
|
@@ -12,9 +13,9 @@ const Radio = ({ "aria-labelledby": labelledbyId, name, disabled = false, value,
|
|
|
12
13
|
const { pending } = useFormStatus();
|
|
13
14
|
const isControlled = value !== void 0;
|
|
14
15
|
const disabledResolved = disabled || pending;
|
|
15
|
-
const selectValue = (nextValue) => {
|
|
16
|
+
const selectValue = (nextValue, event) => {
|
|
16
17
|
setSelectedValue(nextValue);
|
|
17
|
-
onChange?.(
|
|
18
|
+
onChange?.(nextValue, event);
|
|
18
19
|
};
|
|
19
20
|
return /* @__PURE__ */ jsx("div", {
|
|
20
21
|
...rest,
|
|
@@ -29,15 +30,15 @@ const Radio = ({ "aria-labelledby": labelledbyId, name, disabled = false, value,
|
|
|
29
30
|
className: "peer sr-only",
|
|
30
31
|
disabled: disabledResolved,
|
|
31
32
|
name: name ?? labelledbyId,
|
|
32
|
-
onChange: () => {
|
|
33
|
-
selectValue(option.value);
|
|
33
|
+
onChange: (event) => {
|
|
34
|
+
selectValue(option.value, event);
|
|
34
35
|
},
|
|
35
36
|
type: "radio",
|
|
36
37
|
value: option.value
|
|
37
38
|
}),
|
|
38
39
|
/* @__PURE__ */ jsx("span", {
|
|
39
40
|
"aria-hidden": true,
|
|
40
|
-
className: cn("inline-flex size-5 items-center justify-center rounded-full border-2 transition-colors",
|
|
41
|
+
className: cn("inline-flex size-5 items-center justify-center rounded-full border-2 transition-colors", FOCUS_RING_PEER, selectedValue === option.value ? "border-border-base bg-primary-bg" : "border-border-mute bg-bg-base", disabledResolved && "border-border-mute bg-bg-mute"),
|
|
41
42
|
children: /* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full transition-opacity", selectedValue === option.value ? "bg-primary-border opacity-100" : "bg-transparent opacity-0") })
|
|
42
43
|
}),
|
|
43
44
|
/* @__PURE__ */ jsx("span", { children: option.label })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FC, FieldsetHTMLAttributes, ReactNode } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/form/radio-card/radio-card.d.ts
|
|
4
4
|
type RadioCardOption = Readonly<{
|
|
@@ -15,13 +15,13 @@ type BaseProps = {
|
|
|
15
15
|
} & Omit<FieldsetHTMLAttributes<HTMLFieldSetElement>, 'className' | 'style' | 'children' | 'onChange' | 'defaultValue' | 'aria-labelledby'>;
|
|
16
16
|
type ControlledProps = {
|
|
17
17
|
value: string;
|
|
18
|
-
onChange:
|
|
18
|
+
onChange: (value: string) => void;
|
|
19
19
|
defaultValue?: never;
|
|
20
20
|
};
|
|
21
21
|
type UncontrolledProps = {
|
|
22
22
|
defaultValue?: string;
|
|
23
23
|
value?: never;
|
|
24
|
-
onChange?:
|
|
24
|
+
onChange?: (value: string) => void;
|
|
25
25
|
};
|
|
26
26
|
type Props = BaseProps & (ControlledProps | UncontrolledProps);
|
|
27
27
|
declare const RadioCard: FC<Props>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_NO_BORDER } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
4
5
|
import { useId, useRef } from "react";
|
|
@@ -13,7 +14,7 @@ const RadioCard = ({ "aria-labelledby": labelledbyId, name, disabled = false, in
|
|
|
13
14
|
});
|
|
14
15
|
const selectValue = (nextValue) => {
|
|
15
16
|
setCurrentValue(nextValue);
|
|
16
|
-
onChange?.(
|
|
17
|
+
onChange?.(nextValue);
|
|
17
18
|
};
|
|
18
19
|
const focusIndex = (index) => {
|
|
19
20
|
buttonRefs.current[index]?.focus();
|
|
@@ -41,7 +42,7 @@ const RadioCard = ({ "aria-labelledby": labelledbyId, name, disabled = false, in
|
|
|
41
42
|
return /* @__PURE__ */ jsxs("button", {
|
|
42
43
|
"aria-describedby": hasDescription ? `${optionId}-description` : void 0,
|
|
43
44
|
"aria-pressed": checked,
|
|
44
|
-
className: cn("flex min-w-0 rounded-xl border bg-bg-base p-4 text-left transition-colors inline-full",
|
|
45
|
+
className: cn("flex min-w-0 rounded-xl border bg-bg-base p-4 text-left transition-colors inline-full", FOCUS_RING_NO_BORDER, checked && "border-primary-border bg-primary-bg-subtle hover:bg-primary-bg-mute", invalid ? "border-border-error" : !checked && "border-border-mute hover:bg-bg-subtle", optionDisabled && "cursor-not-allowed border-border-mute bg-bg-subtle text-fg-mute"),
|
|
45
46
|
disabled: optionDisabled,
|
|
46
47
|
id: optionId,
|
|
47
48
|
onClick: () => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_WITHIN } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { ChevronIcon } from "../../icons/lucide.mjs";
|
|
4
5
|
import { useFormStatus } from "react-dom";
|
|
@@ -7,7 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
const Select = ({ invalid = false, options, disabled = false, ...rest }) => {
|
|
8
9
|
const { pending } = useFormStatus();
|
|
9
10
|
return /* @__PURE__ */ jsxs("div", {
|
|
10
|
-
className: cn("relative flex h-fit w-full items-center rounded-xl border border-border-base bg-bg-base vertical:h-full vertical:w-fit", invalid && "border-border-error", (disabled || pending) && "cursor-not-allowed border-border-mute bg-bg-mute",
|
|
11
|
+
className: cn("relative flex h-fit w-full items-center rounded-xl border border-border-base bg-bg-base vertical:h-full vertical:w-fit", invalid && "border-border-error", (disabled || pending) && "cursor-not-allowed border-border-mute bg-bg-mute", FOCUS_RING_WITHIN),
|
|
11
12
|
children: [/* @__PURE__ */ jsx("select", {
|
|
12
13
|
"aria-invalid": invalid,
|
|
13
14
|
className: cn("w-full grow appearance-none bg-transparent px-3 py-2 text-fg-base focus-visible:outline-hidden vertical:h-full vertical:w-auto", "disabled:cursor-not-allowed"),
|
|
@@ -23,7 +23,7 @@ const Slider = ({ invalid = false, disabled = false, required = false, value, de
|
|
|
23
23
|
className: "bg-bg-mute relative rounded-full block-2 inline-full",
|
|
24
24
|
children: /* @__PURE__ */ jsx("span", {
|
|
25
25
|
"aria-hidden": true,
|
|
26
|
-
className: cn("bg-primary-bg absolute
|
|
26
|
+
className: cn("bg-primary-bg absolute inset-s-0 inset-be-0 block-full inline-(--slider-progress) rounded-full", invalid && "bg-bg-error")
|
|
27
27
|
})
|
|
28
28
|
}), /* @__PURE__ */ jsx("input", {
|
|
29
29
|
...rest,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeEvent, FC, InputHTMLAttributes } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/components/form/switch/switch.d.ts
|
|
4
4
|
type BaseProps = {
|
|
@@ -7,13 +7,13 @@ type BaseProps = {
|
|
|
7
7
|
} & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'role' | 'className' | 'style' | 'value' | 'onChange' | 'defaultChecked' | 'checked' | 'children'>;
|
|
8
8
|
type ControlledProps = {
|
|
9
9
|
value: boolean;
|
|
10
|
-
onChange:
|
|
10
|
+
onChange: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
|
|
11
11
|
defaultChecked?: never;
|
|
12
12
|
};
|
|
13
13
|
type UncontrolledProps = {
|
|
14
14
|
defaultChecked?: boolean;
|
|
15
15
|
value?: never;
|
|
16
|
-
onChange?:
|
|
16
|
+
onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
|
|
17
17
|
};
|
|
18
18
|
type Props = BaseProps & (ControlledProps | UncontrolledProps);
|
|
19
19
|
declare const Switch: FC<Props>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING_PEER_NO_BORDER } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
4
5
|
import { useId } from "react";
|
|
@@ -31,14 +32,14 @@ const Switch = ({ value, defaultChecked, id, disabled = false, invalid = false,
|
|
|
31
32
|
id: inputId,
|
|
32
33
|
onChange: (event) => {
|
|
33
34
|
setSelected(event.target.checked);
|
|
34
|
-
onChange?.(event);
|
|
35
|
+
onChange?.(event.target.checked, event);
|
|
35
36
|
},
|
|
36
37
|
required,
|
|
37
38
|
role: "switch",
|
|
38
39
|
type: "checkbox"
|
|
39
40
|
}), /* @__PURE__ */ jsx("span", {
|
|
40
41
|
"aria-hidden": true,
|
|
41
|
-
className: cn("inline-flex items-center rounded-full transition-colors", "h-7 w-12 vertical:h-12 vertical:w-7", invalid && "ring-2 ring-border-error", isSelected ? "bg-primary-bg" : "bg-bg-mute", disabledResolved && "bg-bg-subtle", "peer-focus-visible:
|
|
42
|
+
className: cn("inline-flex items-center rounded-full transition-colors", "h-7 w-12 vertical:h-12 vertical:w-7", invalid && "ring-2 ring-border-error", isSelected ? "bg-primary-bg" : "bg-bg-mute", disabledResolved && "bg-bg-subtle", FOCUS_RING_PEER_NO_BORDER, "peer-focus-visible:ring-offset-2"),
|
|
42
43
|
children: /* @__PURE__ */ jsx("span", { className: cn("ms-0.5 size-5 rounded-full bg-bg-base shadow-xs transition-transform", isSelected && "translate-x-5 vertical:translate-x-0 vertical:translate-y-5", disabledResolved && "bg-bg-emphasize") })
|
|
43
44
|
})]
|
|
44
45
|
}), label ? /* @__PURE__ */ jsx("span", { children: label }) : null]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useFormStatus } from "react-dom";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -7,7 +8,7 @@ const TextField = ({ invalid = false, readOnly, ...rest }) => {
|
|
|
7
8
|
const { pending } = useFormStatus();
|
|
8
9
|
return /* @__PURE__ */ jsx("input", {
|
|
9
10
|
"aria-invalid": invalid,
|
|
10
|
-
className: cn("rounded-xl border border-border-base bg-bg-base px-3 py-2 inline-full", "aria-invalid:border-border-error", "disabled:cursor-not-allowed disabled:border-border-mute disabled:bg-bg-mute hover:disabled:bg-bg-mute", "read-only:cursor-not-allowed read-only:bg-bg-subtle",
|
|
11
|
+
className: cn("rounded-xl border border-border-base bg-bg-base px-3 py-2 inline-full", "aria-invalid:border-border-error", "disabled:cursor-not-allowed disabled:border-border-mute disabled:bg-bg-mute hover:disabled:bg-bg-mute", "read-only:cursor-not-allowed read-only:bg-bg-subtle", FOCUS_RING),
|
|
11
12
|
readOnly: pending || readOnly,
|
|
12
13
|
type: "text",
|
|
13
14
|
...rest
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { FOCUS_RING } from "../../_internal/focus-ring.mjs";
|
|
2
3
|
import { cn } from "../../../helpers/cn.mjs";
|
|
3
4
|
import { useEffect, useRef } from "react";
|
|
4
5
|
import { useFormStatus } from "react-dom";
|
|
@@ -16,7 +17,7 @@ const Textarea = ({ invalid = false, fullHeight = false, autoResize = false, rea
|
|
|
16
17
|
}, [autoResize, value]);
|
|
17
18
|
return /* @__PURE__ */ jsx("textarea", {
|
|
18
19
|
"aria-invalid": invalid,
|
|
19
|
-
className: cn("resize-none rounded-xl border border-border-base bg-bg-base px-3 py-2 inline-full", "aria-invalid:border-border-error", "disabled:cursor-not-allowed disabled:border-border-mute disabled:bg-bg-mute hover:disabled:bg-bg-mute", "read-only:cursor-not-allowed read-only:bg-bg-subtle",
|
|
20
|
+
className: cn("resize-none rounded-xl border border-border-base bg-bg-base px-3 py-2 inline-full", "aria-invalid:border-border-error", "disabled:cursor-not-allowed disabled:border-border-mute disabled:bg-bg-mute hover:disabled:bg-bg-mute", "read-only:cursor-not-allowed read-only:bg-bg-subtle", FOCUS_RING, fullHeight && "h-full"),
|
|
20
21
|
onInput: (e) => {
|
|
21
22
|
if (autoResize) resizeToContent(e.currentTarget);
|
|
22
23
|
onInput?.(e);
|
|
@@ -39,8 +39,10 @@ import { AIIcon, AccessibilityIcon, AlertIcon, AtomIcon, BadIcon, BlogIcon, Bori
|
|
|
39
39
|
import { QiitaIcon } from "./icons/qiita.mjs";
|
|
40
40
|
import { TwitterIcon } from "./icons/twitter.mjs";
|
|
41
41
|
import { VerticalWritingIcon } from "./icons/vertical-writing.mjs";
|
|
42
|
+
import { Grid, GridProps } from "./layout/grid/grid.mjs";
|
|
42
43
|
import { ScrollLinked } from "./layout/scroll-linked/scroll-linked.mjs";
|
|
43
44
|
import { Separator } from "./layout/separator/separator.mjs";
|
|
45
|
+
import { Stack, StackProps } from "./layout/stack/stack.mjs";
|
|
44
46
|
import { Anchor } from "./navigation/anchor/anchor.mjs";
|
|
45
47
|
import { Breadcrumb } from "./navigation/breadcrumb/breadcrumb.mjs";
|
|
46
48
|
import { Pagination } from "./navigation/pagination/pagination.mjs";
|
|
@@ -54,4 +56,4 @@ import { useOpenContext } from "./overlays/popover/hooks.mjs";
|
|
|
54
56
|
import { Popover } from "./overlays/popover/popover.mjs";
|
|
55
57
|
import { ArteOdysseyProvider } from "./providers/arte-odyssey-provider.mjs";
|
|
56
58
|
import { PortalRootProvider, usePortalRoot } from "./providers/portal-root.mjs";
|
|
57
|
-
export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InteractiveCard, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
|
|
59
|
+
export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, type GridProps, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InteractiveCard, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, type StackProps, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
|
|
@@ -43,8 +43,10 @@ import { Slider } from "./form/slider/slider.mjs";
|
|
|
43
43
|
import { Switch } from "./form/switch/switch.mjs";
|
|
44
44
|
import { TextField } from "./form/text-field/text-field.mjs";
|
|
45
45
|
import { Textarea } from "./form/textarea/textarea.mjs";
|
|
46
|
+
import { Grid } from "./layout/grid/grid.mjs";
|
|
46
47
|
import { ScrollLinked } from "./layout/scroll-linked/scroll-linked.mjs";
|
|
47
48
|
import { Separator } from "./layout/separator/separator.mjs";
|
|
49
|
+
import { Stack } from "./layout/stack/stack.mjs";
|
|
48
50
|
import { Anchor } from "./navigation/anchor/anchor.mjs";
|
|
49
51
|
import { Breadcrumb } from "./navigation/breadcrumb/breadcrumb.mjs";
|
|
50
52
|
import { Pagination } from "./navigation/pagination/pagination.mjs";
|
|
@@ -54,4 +56,4 @@ import { Modal } from "./overlays/modal/modal.mjs";
|
|
|
54
56
|
import { Drawer } from "./overlays/drawer/drawer.mjs";
|
|
55
57
|
import { DropdownMenu } from "./overlays/dropdown-menu/dropdown-menu.mjs";
|
|
56
58
|
import { ListBox } from "./overlays/list-box/list-box.mjs";
|
|
57
|
-
export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InteractiveCard, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
|
|
59
|
+
export { AIIcon, AccessibilityIcon, Accordion, Alert, AlertIcon, Anchor, ArteOdyssey, ArteOdysseyProvider, AtomIcon, Autocomplete, Avatar, BadIcon, Badge, BaselineStatus, BlogIcon, BoringIcon, Breadcrumb, Button, Card, CheckIcon, Checkbox, CheckboxCard, CheckboxGroup, ChevronIcon, CloseIcon, Code, ColorContrastIcon, ColorInfoIcon, CopyIcon, DarkModeIcon, Dialog, DifficultIcon, Drawer, DropdownMenu, EasyIcon, ExternalLinkIcon, FileField, Form, FormControl, FormIcon, GitHubIcon, GoodIcon, Grid, Heading, HistoryIcon, HorizontalWritingIcon, IconButton, InformativeIcon, InteractiveCard, InterestingIcon, LightModeIcon, LinkIcon, ListBox, ListIcon, LocationIcon, Logo, LogoIcon, MailIcon, MinusIcon, MixedColorIcon, Modal, NavigationMenuIcon, NewsIcon, NumberField, Pagination, PaletteIcon, PasswordInput, PlusIcon, Popover, PortalRootProvider, PrepareIcon, Progress, PublishDateIcon, QiitaIcon, RSSIcon, Radio, RadioCard, ScrollLinked, Select, SendIcon, Separator, ShallowIcon, ShieldCheckIcon, Skeleton, SlideIcon, Slider, SparklesIcon, Spinner, Stack, SubscribeIcon, Switch, Table, TableIcon, Tabs, TagIcon, TextField, Textarea, ToastProvider, Tooltip, TwitterIcon, UpdateDateIcon, VerticalWritingIcon, ViewIcon, ViewOffIcon, useOpenContext, usePortalRoot, useToast };
|