@novi-ui/raster 0.1.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 +129 -0
- package/dist/accordion/accordion.d.mts +31 -0
- package/dist/accordion/accordion.d.mts.map +1 -0
- package/dist/accordion/accordion.mjs +88 -0
- package/dist/accordion/accordion.mjs.map +1 -0
- package/dist/accordion/accordion.styles.d.mts +61 -0
- package/dist/accordion/accordion.styles.d.mts.map +1 -0
- package/dist/accordion/accordion.styles.mjs +78 -0
- package/dist/accordion/accordion.styles.mjs.map +1 -0
- package/dist/accordion/index.d.mts +3 -0
- package/dist/avatar/avatar.d.mts +19 -0
- package/dist/avatar/avatar.d.mts.map +1 -0
- package/dist/avatar/avatar.mjs +57 -0
- package/dist/avatar/avatar.mjs.map +1 -0
- package/dist/avatar/avatar.styles.d.mts +49 -0
- package/dist/avatar/avatar.styles.d.mts.map +1 -0
- package/dist/avatar/avatar.styles.mjs +45 -0
- package/dist/avatar/avatar.styles.mjs.map +1 -0
- package/dist/avatar/index.d.mts +3 -0
- package/dist/badge/badge.d.mts +15 -0
- package/dist/badge/badge.d.mts.map +1 -0
- package/dist/badge/badge.mjs +39 -0
- package/dist/badge/badge.mjs.map +1 -0
- package/dist/badge/badge.styles.d.mts +67 -0
- package/dist/badge/badge.styles.d.mts.map +1 -0
- package/dist/badge/badge.styles.mjs +99 -0
- package/dist/badge/badge.styles.mjs.map +1 -0
- package/dist/badge/index.d.mts +3 -0
- package/dist/breadcrumbs/breadcrumbs.d.mts +33 -0
- package/dist/breadcrumbs/breadcrumbs.d.mts.map +1 -0
- package/dist/breadcrumbs/breadcrumbs.mjs +79 -0
- package/dist/breadcrumbs/breadcrumbs.mjs.map +1 -0
- package/dist/breadcrumbs/breadcrumbs.styles.d.mts +46 -0
- package/dist/breadcrumbs/breadcrumbs.styles.d.mts.map +1 -0
- package/dist/breadcrumbs/breadcrumbs.styles.mjs +35 -0
- package/dist/breadcrumbs/breadcrumbs.styles.mjs.map +1 -0
- package/dist/breadcrumbs/index.d.mts +3 -0
- package/dist/button/button.d.mts +14 -0
- package/dist/button/button.d.mts.map +1 -0
- package/dist/button/button.mjs +75 -0
- package/dist/button/button.mjs.map +1 -0
- package/dist/button/button.styles.d.mts +82 -0
- package/dist/button/button.styles.d.mts.map +1 -0
- package/dist/button/button.styles.mjs +118 -0
- package/dist/button/button.styles.mjs.map +1 -0
- package/dist/button/index.d.mts +3 -0
- package/dist/card/card.d.mts +51 -0
- package/dist/card/card.d.mts.map +1 -0
- package/dist/card/card.mjs +96 -0
- package/dist/card/card.mjs.map +1 -0
- package/dist/card/card.styles.d.mts +70 -0
- package/dist/card/card.styles.d.mts.map +1 -0
- package/dist/card/card.styles.mjs +62 -0
- package/dist/card/card.styles.mjs.map +1 -0
- package/dist/card/index.d.mts +3 -0
- package/dist/checkbox/checkbox.d.mts +24 -0
- package/dist/checkbox/checkbox.d.mts.map +1 -0
- package/dist/checkbox/checkbox.mjs +124 -0
- package/dist/checkbox/checkbox.mjs.map +1 -0
- package/dist/checkbox/checkbox.styles.d.mts +111 -0
- package/dist/checkbox/checkbox.styles.d.mts.map +1 -0
- package/dist/checkbox/checkbox.styles.mjs +89 -0
- package/dist/checkbox/checkbox.styles.mjs.map +1 -0
- package/dist/checkbox/index.d.mts +3 -0
- package/dist/index.d.mts +61 -0
- package/dist/index.mjs +42 -0
- package/dist/input/index.d.mts +3 -0
- package/dist/input/input.d.mts +20 -0
- package/dist/input/input.d.mts.map +1 -0
- package/dist/input/input.mjs +86 -0
- package/dist/input/input.mjs.map +1 -0
- package/dist/input/input.styles.d.mts +81 -0
- package/dist/input/input.styles.d.mts.map +1 -0
- package/dist/input/input.styles.mjs +83 -0
- package/dist/input/input.styles.mjs.map +1 -0
- package/dist/menu/index.d.mts +3 -0
- package/dist/menu/menu.d.mts +62 -0
- package/dist/menu/menu.d.mts.map +1 -0
- package/dist/menu/menu.mjs +115 -0
- package/dist/menu/menu.mjs.map +1 -0
- package/dist/menu/menu.styles.d.mts +90 -0
- package/dist/menu/menu.styles.d.mts.map +1 -0
- package/dist/menu/menu.styles.mjs +40 -0
- package/dist/menu/menu.styles.mjs.map +1 -0
- package/dist/modal/index.d.mts +3 -0
- package/dist/modal/modal.d.mts +47 -0
- package/dist/modal/modal.d.mts.map +1 -0
- package/dist/modal/modal.mjs +110 -0
- package/dist/modal/modal.mjs.map +1 -0
- package/dist/modal/modal.styles.d.mts +58 -0
- package/dist/modal/modal.styles.d.mts.map +1 -0
- package/dist/modal/modal.styles.mjs +69 -0
- package/dist/modal/modal.styles.mjs.map +1 -0
- package/dist/popover/index.d.mts +3 -0
- package/dist/popover/popover.d.mts +40 -0
- package/dist/popover/popover.d.mts.map +1 -0
- package/dist/popover/popover.mjs +86 -0
- package/dist/popover/popover.mjs.map +1 -0
- package/dist/popover/popover.styles.d.mts +81 -0
- package/dist/popover/popover.styles.d.mts.map +1 -0
- package/dist/popover/popover.styles.mjs +53 -0
- package/dist/popover/popover.styles.mjs.map +1 -0
- package/dist/progress/index.d.mts +3 -0
- package/dist/progress/progress.d.mts +14 -0
- package/dist/progress/progress.d.mts.map +1 -0
- package/dist/progress/progress.mjs +54 -0
- package/dist/progress/progress.mjs.map +1 -0
- package/dist/progress/progress.styles.d.mts +70 -0
- package/dist/progress/progress.styles.d.mts.map +1 -0
- package/dist/progress/progress.styles.mjs +54 -0
- package/dist/progress/progress.styles.mjs.map +1 -0
- package/dist/radio/index.d.mts +3 -0
- package/dist/radio/radio.d.mts +22 -0
- package/dist/radio/radio.d.mts.map +1 -0
- package/dist/radio/radio.mjs +95 -0
- package/dist/radio/radio.mjs.map +1 -0
- package/dist/radio/radio.styles.d.mts +111 -0
- package/dist/radio/radio.styles.d.mts.map +1 -0
- package/dist/radio/radio.styles.mjs +88 -0
- package/dist/radio/radio.styles.mjs.map +1 -0
- package/dist/raster.css +92 -0
- package/dist/raster.scoped.css +92 -0
- package/dist/select/index.d.mts +3 -0
- package/dist/select/select.d.mts +33 -0
- package/dist/select/select.d.mts.map +1 -0
- package/dist/select/select.mjs +114 -0
- package/dist/select/select.mjs.map +1 -0
- package/dist/select/select.styles.d.mts +82 -0
- package/dist/select/select.styles.d.mts.map +1 -0
- package/dist/select/select.styles.mjs +93 -0
- package/dist/select/select.styles.mjs.map +1 -0
- package/dist/skeleton/index.d.mts +3 -0
- package/dist/skeleton/skeleton.d.mts +15 -0
- package/dist/skeleton/skeleton.d.mts.map +1 -0
- package/dist/skeleton/skeleton.mjs +26 -0
- package/dist/skeleton/skeleton.mjs.map +1 -0
- package/dist/skeleton/skeleton.styles.d.mts +31 -0
- package/dist/skeleton/skeleton.styles.d.mts.map +1 -0
- package/dist/skeleton/skeleton.styles.mjs +22 -0
- package/dist/skeleton/skeleton.styles.mjs.map +1 -0
- package/dist/spinner/index.d.mts +3 -0
- package/dist/spinner/spinner.d.mts +15 -0
- package/dist/spinner/spinner.d.mts.map +1 -0
- package/dist/spinner/spinner.mjs +55 -0
- package/dist/spinner/spinner.mjs.map +1 -0
- package/dist/spinner/spinner.styles.d.mts +46 -0
- package/dist/spinner/spinner.styles.d.mts.map +1 -0
- package/dist/spinner/spinner.styles.mjs +37 -0
- package/dist/spinner/spinner.styles.mjs.map +1 -0
- package/dist/styles/focus-ring.mjs +23 -0
- package/dist/styles/focus-ring.mjs.map +1 -0
- package/dist/switch/index.d.mts +3 -0
- package/dist/switch/switch.d.mts +17 -0
- package/dist/switch/switch.d.mts.map +1 -0
- package/dist/switch/switch.mjs +57 -0
- package/dist/switch/switch.mjs.map +1 -0
- package/dist/switch/switch.styles.d.mts +58 -0
- package/dist/switch/switch.styles.d.mts.map +1 -0
- package/dist/switch/switch.styles.mjs +80 -0
- package/dist/switch/switch.styles.mjs.map +1 -0
- package/dist/tabs/index.d.mts +3 -0
- package/dist/tabs/tabs.d.mts +55 -0
- package/dist/tabs/tabs.d.mts.map +1 -0
- package/dist/tabs/tabs.mjs +84 -0
- package/dist/tabs/tabs.mjs.map +1 -0
- package/dist/tabs/tabs.styles.d.mts +55 -0
- package/dist/tabs/tabs.styles.d.mts.map +1 -0
- package/dist/tabs/tabs.styles.mjs +73 -0
- package/dist/tabs/tabs.styles.mjs.map +1 -0
- package/dist/textarea/index.d.mts +3 -0
- package/dist/textarea/textarea.d.mts +15 -0
- package/dist/textarea/textarea.d.mts.map +1 -0
- package/dist/textarea/textarea.mjs +70 -0
- package/dist/textarea/textarea.mjs.map +1 -0
- package/dist/textarea/textarea.styles.d.mts +73 -0
- package/dist/textarea/textarea.styles.d.mts.map +1 -0
- package/dist/textarea/textarea.styles.mjs +81 -0
- package/dist/textarea/textarea.styles.mjs.map +1 -0
- package/dist/toast/index.d.mts +3 -0
- package/dist/toast/toast.d.mts +38 -0
- package/dist/toast/toast.d.mts.map +1 -0
- package/dist/toast/toast.mjs +86 -0
- package/dist/toast/toast.mjs.map +1 -0
- package/dist/toast/toast.styles.d.mts +61 -0
- package/dist/toast/toast.styles.d.mts.map +1 -0
- package/dist/toast/toast.styles.mjs +59 -0
- package/dist/toast/toast.styles.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { disabledState, focusRing } from "../styles/focus-ring.mjs";
|
|
2
|
+
import { tv } from "tailwind-variants";
|
|
3
|
+
//#region src/select/select.styles.ts
|
|
4
|
+
const slots = {
|
|
5
|
+
root: "flex flex-col gap-1.5",
|
|
6
|
+
label: "text-[length:var(--novi-text-sm)] font-medium text-[var(--novi-color-fg)]",
|
|
7
|
+
trigger: [
|
|
8
|
+
"text-[var(--novi-color-fg)]",
|
|
9
|
+
"flex items-center justify-between gap-2 w-full",
|
|
10
|
+
"text-left",
|
|
11
|
+
"bg-[var(--novi-color-bg)]",
|
|
12
|
+
"border border-[var(--novi-color-border-strong)]",
|
|
13
|
+
"transition-[border-color,opacity]",
|
|
14
|
+
"duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]",
|
|
15
|
+
"group-data-[invalid]:border-[var(--novi-color-danger)]",
|
|
16
|
+
focusRing,
|
|
17
|
+
disabledState
|
|
18
|
+
].join(" "),
|
|
19
|
+
value: ["truncate text-[var(--novi-color-fg)]", "data-[placeholder]:text-[var(--novi-color-muted)]"].join(" "),
|
|
20
|
+
icon: "shrink-0 text-[var(--novi-color-muted)]",
|
|
21
|
+
popover: [
|
|
22
|
+
"bg-[var(--novi-color-bg)]",
|
|
23
|
+
"text-[var(--novi-color-fg)]",
|
|
24
|
+
"border border-[var(--novi-color-border)]",
|
|
25
|
+
"rounded-[var(--novi-radius-none)]",
|
|
26
|
+
"shadow-none",
|
|
27
|
+
"w-[var(--trigger-width)]",
|
|
28
|
+
"overflow-auto max-h-64"
|
|
29
|
+
].join(" "),
|
|
30
|
+
listbox: "outline-none p-1 flex flex-col",
|
|
31
|
+
option: [
|
|
32
|
+
"flex items-center justify-between gap-2",
|
|
33
|
+
"px-2 py-1.5 cursor-pointer outline-none",
|
|
34
|
+
"text-[var(--novi-color-fg)]",
|
|
35
|
+
"rounded-[var(--novi-radius-none)]",
|
|
36
|
+
"data-[focused]:bg-[var(--novi-color-subtle)]",
|
|
37
|
+
"data-[selected]:font-medium",
|
|
38
|
+
"data-[disabled]:opacity-40 data-[disabled]:cursor-default"
|
|
39
|
+
].join(" "),
|
|
40
|
+
description: "text-[length:var(--novi-text-xs)] text-[var(--novi-color-muted)]",
|
|
41
|
+
errorMessage: "text-[length:var(--novi-text-xs)] text-[var(--novi-color-danger)]"
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Select のスタイル定義。
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* import { selectStyles } from '@novi-ui/raster'
|
|
48
|
+
* import { tv } from 'tailwind-variants'
|
|
49
|
+
*
|
|
50
|
+
* const mySelect = tv({ extend: selectStyles, slots: { popover: 'max-h-96' } })
|
|
51
|
+
*/
|
|
52
|
+
const selectStyles = tv({
|
|
53
|
+
slots,
|
|
54
|
+
variants: {
|
|
55
|
+
variant: {
|
|
56
|
+
solid: { trigger: "bg-[var(--novi-color-subtle)] border-[var(--novi-color-border-strong)]" },
|
|
57
|
+
outline: { trigger: "bg-[var(--novi-color-bg)] border-[var(--novi-color-border-strong)]" },
|
|
58
|
+
soft: { trigger: "bg-[var(--novi-color-subtle)] border-transparent" },
|
|
59
|
+
ghost: { trigger: "bg-transparent border-transparent border-b-[var(--novi-color-border-strong)]" },
|
|
60
|
+
plain: { trigger: "bg-transparent border-transparent" }
|
|
61
|
+
},
|
|
62
|
+
size: {
|
|
63
|
+
sm: {
|
|
64
|
+
trigger: "h-8 px-2.5 text-[length:var(--novi-text-sm)]",
|
|
65
|
+
option: "text-[length:var(--novi-text-sm)]"
|
|
66
|
+
},
|
|
67
|
+
md: {
|
|
68
|
+
trigger: "h-10 px-3 text-[length:var(--novi-text-base)]",
|
|
69
|
+
option: "text-[length:var(--novi-text-base)]"
|
|
70
|
+
},
|
|
71
|
+
lg: {
|
|
72
|
+
trigger: "h-12 px-3.5 text-[length:var(--novi-text-base)]",
|
|
73
|
+
option: "text-[length:var(--novi-text-base)]"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
radius: {
|
|
77
|
+
none: { trigger: "rounded-[var(--novi-radius-none)]" },
|
|
78
|
+
sm: { trigger: "rounded-[var(--novi-radius-sm)]" },
|
|
79
|
+
md: { trigger: "rounded-[var(--novi-radius-md)]" },
|
|
80
|
+
lg: { trigger: "rounded-[var(--novi-radius-lg)]" },
|
|
81
|
+
full: { trigger: "rounded-[var(--novi-radius-full)]" }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
defaultVariants: {
|
|
85
|
+
variant: "outline",
|
|
86
|
+
size: "md",
|
|
87
|
+
radius: "none"
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
//#endregion
|
|
91
|
+
export { selectStyles };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=select.styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.styles.mjs","names":[],"sources":["../../src/select/select.styles.ts"],"sourcesContent":["import type {\n NoviRadius,\n NoviSize,\n NoviVariant,\n SlotMap,\n selectRequiredSlots,\n selectSlots,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\nimport { disabledState, focusRing } from '../styles/focus-ring'\n\nconst slots = {\n root: 'flex flex-col gap-1.5',\n label: 'text-[length:var(--novi-text-sm)] font-medium text-[var(--novi-color-fg)]',\n trigger: [\n 'text-[var(--novi-color-fg)]',\n 'flex items-center justify-between gap-2 w-full',\n 'text-left',\n 'bg-[var(--novi-color-bg)]',\n 'border border-[var(--novi-color-border-strong)]',\n 'transition-[border-color,opacity]',\n 'duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n 'group-data-[invalid]:border-[var(--novi-color-danger)]',\n focusRing,\n disabledState,\n ].join(' '),\n value: [\n 'truncate text-[var(--novi-color-fg)]',\n // 未選択時のプレースホルダは補助色にする\n 'data-[placeholder]:text-[var(--novi-color-muted)]',\n ].join(' '),\n icon: 'shrink-0 text-[var(--novi-color-muted)]',\n // 影を使わず、1px の境界線と背景の差だけで浮かせる\n popover: [\n 'bg-[var(--novi-color-bg)]',\n 'text-[var(--novi-color-fg)]',\n 'border border-[var(--novi-color-border)]',\n 'rounded-[var(--novi-radius-none)]',\n 'shadow-none',\n // トリガーと同じ幅に揃える\n 'w-[var(--trigger-width)]',\n 'overflow-auto max-h-64',\n ].join(' '),\n listbox: 'outline-none p-1 flex flex-col',\n option: [\n 'flex items-center justify-between gap-2',\n 'px-2 py-1.5 cursor-pointer outline-none',\n 'text-[var(--novi-color-fg)]',\n 'rounded-[var(--novi-radius-none)]',\n // 選択中は面ではなく文字の強さで示す。面を増やさない\n 'data-[focused]:bg-[var(--novi-color-subtle)]',\n 'data-[selected]:font-medium',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-default',\n ].join(' '),\n description: 'text-[length:var(--novi-text-xs)] text-[var(--novi-color-muted)]',\n errorMessage: 'text-[length:var(--novi-text-xs)] text-[var(--novi-color-danger)]',\n} satisfies SlotMap<typeof selectSlots, (typeof selectRequiredSlots)[number]>\n\nconst variant: VariantMap<NoviVariant, { trigger: string }> = {\n solid: { trigger: 'bg-[var(--novi-color-subtle)] border-[var(--novi-color-border-strong)]' },\n outline: { trigger: 'bg-[var(--novi-color-bg)] border-[var(--novi-color-border-strong)]' },\n soft: { trigger: 'bg-[var(--novi-color-subtle)] border-transparent' },\n ghost: {\n trigger: 'bg-transparent border-transparent border-b-[var(--novi-color-border-strong)]',\n },\n plain: { trigger: 'bg-transparent border-transparent' },\n}\n\n/** 高さは Button / Input と揃える。32 / 40 / 48px。 */\nconst size: VariantMap<NoviSize, { trigger: string; option: string }> = {\n sm: {\n trigger: 'h-8 px-2.5 text-[length:var(--novi-text-sm)]',\n option: 'text-[length:var(--novi-text-sm)]',\n },\n md: {\n trigger: 'h-10 px-3 text-[length:var(--novi-text-base)]',\n option: 'text-[length:var(--novi-text-base)]',\n },\n lg: {\n trigger: 'h-12 px-3.5 text-[length:var(--novi-text-base)]',\n option: 'text-[length:var(--novi-text-base)]',\n },\n}\n\nconst radius: VariantMap<NoviRadius, { trigger: string }> = {\n none: { trigger: 'rounded-[var(--novi-radius-none)]' },\n sm: { trigger: 'rounded-[var(--novi-radius-sm)]' },\n md: { trigger: 'rounded-[var(--novi-radius-md)]' },\n lg: { trigger: 'rounded-[var(--novi-radius-lg)]' },\n full: { trigger: 'rounded-[var(--novi-radius-full)]' },\n}\n\n/**\n * Select のスタイル定義。\n *\n * @example\n * import { selectStyles } from '@novi-ui/raster'\n * import { tv } from 'tailwind-variants'\n *\n * const mySelect = tv({ extend: selectStyles, slots: { popover: 'max-h-96' } })\n */\nexport const selectStyles = tv({\n slots,\n variants: { variant, size, radius },\n defaultVariants: { variant: 'outline', size: 'md', radius: 'none' },\n})\n\nexport type SelectStyleProps = Parameters<typeof selectStyles>[0]\n"],"mappings":";;;AAYA,MAAM,QAAQ;CACZ,MAAM;CACN,OAAO;CACP,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CACV,OAAO,CACL,wCAEA,mDACF,CAAC,CAAC,KAAK,GAAG;CACV,MAAM;CAEN,SAAS;EACP;EACA;EACA;EACA;EACA;EAEA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CACV,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EAEA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CACV,aAAa;CACb,cAAc;AAChB;;;;;;;;;;AA6CA,MAAa,eAAe,GAAG;CAC7B;CACA,UAAU;EAAE;GA5CZ,OAAO,EAAE,SAAS,yEAAyE;GAC3F,SAAS,EAAE,SAAS,qEAAqE;GACzF,MAAM,EAAE,SAAS,mDAAmD;GACpE,OAAO,EACL,SAAS,+EACX;GACA,OAAO,EAAE,SAAS,oCAAoC;EAsC1C;EAAS;GAjCrB,IAAI;IACF,SAAS;IACT,QAAQ;GACV;GACA,IAAI;IACF,SAAS;IACT,QAAQ;GACV;GACA,IAAI;IACF,SAAS;IACT,QAAQ;GACV;EAsBqB;EAAM;GAlB3B,MAAM,EAAE,SAAS,oCAAoC;GACrD,IAAI,EAAE,SAAS,kCAAkC;GACjD,IAAI,EAAE,SAAS,kCAAkC;GACjD,IAAI,EAAE,SAAS,kCAAkC;GACjD,MAAM,EAAE,SAAS,oCAAoC;EAc1B;CAAO;CAClC,iBAAiB;EAAE,SAAS;EAAW,MAAM;EAAM,QAAQ;CAAO;AACpE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SkeletonProps } from "@novi-ui/core";
|
|
2
|
+
//#region src/skeleton/skeleton.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* 読み込み中の場所取り。
|
|
5
|
+
*
|
|
6
|
+
* 支援技術には読ませない。読み込み状態は Spinner か live region で伝えること。
|
|
7
|
+
* 大きさは `className` で指定する。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <Skeleton className="h-4 w-40" />
|
|
11
|
+
*/
|
|
12
|
+
declare function Skeleton({ radius, className, classNames, id }: SkeletonProps): import("react").JSX.Element;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Skeleton };
|
|
15
|
+
//# sourceMappingURL=skeleton.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.mts","names":[],"sources":["../../src/skeleton/skeleton.tsx"],"mappings":";;;;;;;;;;;iBAcgB,WAAW,QAAQ,WAAW,YAAY,MAAM,gCAAa,IAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { skeletonStyles } from "./skeleton.styles.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/skeleton/skeleton.tsx
|
|
5
|
+
/**
|
|
6
|
+
* 読み込み中の場所取り。
|
|
7
|
+
*
|
|
8
|
+
* 支援技術には読ませない。読み込み状態は Spinner か live region で伝えること。
|
|
9
|
+
* 大きさは `className` で指定する。
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton className="h-4 w-40" />
|
|
13
|
+
*/
|
|
14
|
+
function Skeleton({ radius, className, classNames, id }) {
|
|
15
|
+
const s = skeletonStyles({ radius });
|
|
16
|
+
return /* @__PURE__ */ jsx("span", {
|
|
17
|
+
id,
|
|
18
|
+
"aria-hidden": "true",
|
|
19
|
+
"data-slot": "root",
|
|
20
|
+
className: s.root({ class: [className, classNames?.root] })
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { Skeleton };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=skeleton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.mjs","names":[],"sources":["../../src/skeleton/skeleton.tsx"],"sourcesContent":["'use client'\n\nimport type { SkeletonProps } from '@novi-ui/core'\nimport { skeletonStyles } from './skeleton.styles'\n\n/**\n * 読み込み中の場所取り。\n *\n * 支援技術には読ませない。読み込み状態は Spinner か live region で伝えること。\n * 大きさは `className` で指定する。\n *\n * @example\n * <Skeleton className=\"h-4 w-40\" />\n */\nexport function Skeleton({ radius, className, classNames, id }: SkeletonProps) {\n const s = skeletonStyles({ radius })\n\n return (\n <span\n id={id}\n aria-hidden=\"true\"\n data-slot=\"root\"\n className={s.root({ class: [className, classNames?.root] })}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,SAAS,EAAE,QAAQ,WAAW,YAAY,MAAqB;CAC7E,MAAM,IAAI,eAAe,EAAE,OAAO,CAAC;CAEnC,OACE,oBAAC,QAAD;EACM;EACJ,eAAY;EACZ,aAAU;EACV,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;CAC3D,CAAA;AAEL"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { VariantMap } from "@novi-ui/core";
|
|
2
|
+
//#region src/skeleton/skeleton.styles.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Skeleton のスタイル定義。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const mySkeleton = tv({ extend: skeletonStyles, slots: { root: 'opacity-50' } })
|
|
8
|
+
*/
|
|
9
|
+
declare const skeletonStyles: import("tailwind-variants").TVReturnType<{
|
|
10
|
+
radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
|
|
11
|
+
root: string;
|
|
12
|
+
}>;
|
|
13
|
+
}, {
|
|
14
|
+
root: string;
|
|
15
|
+
}, undefined, {
|
|
16
|
+
radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
|
|
17
|
+
root: string;
|
|
18
|
+
}>;
|
|
19
|
+
}, {
|
|
20
|
+
root: string;
|
|
21
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
22
|
+
radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
|
|
23
|
+
root: string;
|
|
24
|
+
}>;
|
|
25
|
+
}, {
|
|
26
|
+
root: string;
|
|
27
|
+
}>>;
|
|
28
|
+
type SkeletonStyleProps = Parameters<typeof skeletonStyles>[0];
|
|
29
|
+
//#endregion
|
|
30
|
+
export { SkeletonStyleProps, skeletonStyles };
|
|
31
|
+
//# sourceMappingURL=skeleton.styles.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.styles.d.mts","names":[],"sources":["../../src/skeleton/skeleton.styles.ts"],"mappings":";;;;;;;;cA6Ba,4CAAc;;IAdkB;;;;;;IAAA;;;;;;IAAA;;;;;KAoBjC,qBAAqB,kBAAkB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { tv } from "tailwind-variants";
|
|
2
|
+
/**
|
|
3
|
+
* Skeleton のスタイル定義。
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const mySkeleton = tv({ extend: skeletonStyles, slots: { root: 'opacity-50' } })
|
|
7
|
+
*/
|
|
8
|
+
const skeletonStyles = tv({
|
|
9
|
+
slots: { root: "block bg-[var(--novi-color-subtle)] motion-safe:animate-pulse" },
|
|
10
|
+
variants: { radius: {
|
|
11
|
+
none: { root: "rounded-[var(--novi-radius-none)]" },
|
|
12
|
+
sm: { root: "rounded-[var(--novi-radius-sm)]" },
|
|
13
|
+
md: { root: "rounded-[var(--novi-radius-md)]" },
|
|
14
|
+
lg: { root: "rounded-[var(--novi-radius-lg)]" },
|
|
15
|
+
full: { root: "rounded-[var(--novi-radius-full)]" }
|
|
16
|
+
} },
|
|
17
|
+
defaultVariants: { radius: "none" }
|
|
18
|
+
});
|
|
19
|
+
//#endregion
|
|
20
|
+
export { skeletonStyles };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=skeleton.styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.styles.mjs","names":[],"sources":["../../src/skeleton/skeleton.styles.ts"],"sourcesContent":["import type {\n NoviRadius,\n SlotMap,\n skeletonRequiredSlots,\n skeletonSlots,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\n\nconst slots = {\n // opacity のパルスのみ。シマー(translate するグラデーション)は使わない。\n // 動きで飾らないという Raster の原則に反するため。\n root: 'block bg-[var(--novi-color-subtle)] motion-safe:animate-pulse',\n} satisfies SlotMap<typeof skeletonSlots, (typeof skeletonRequiredSlots)[number]>\n\nconst radius: VariantMap<NoviRadius, { root: string }> = {\n none: { root: 'rounded-[var(--novi-radius-none)]' },\n sm: { root: 'rounded-[var(--novi-radius-sm)]' },\n md: { root: 'rounded-[var(--novi-radius-md)]' },\n lg: { root: 'rounded-[var(--novi-radius-lg)]' },\n full: { root: 'rounded-[var(--novi-radius-full)]' },\n}\n\n/**\n * Skeleton のスタイル定義。\n *\n * @example\n * const mySkeleton = tv({ extend: skeletonStyles, slots: { root: 'opacity-50' } })\n */\nexport const skeletonStyles = tv({\n slots,\n variants: { radius },\n defaultVariants: { radius: 'none' },\n})\n\nexport type SkeletonStyleProps = Parameters<typeof skeletonStyles>[0]\n"],"mappings":";;;;;;;AA6BA,MAAa,iBAAiB,GAAG;CAC/B,SAlBA,MAAM,gEAkBN;CACA,UAAU,EAAE;EAfZ,MAAM,EAAE,MAAM,oCAAoC;EAClD,IAAI,EAAE,MAAM,kCAAkC;EAC9C,IAAI,EAAE,MAAM,kCAAkC;EAC9C,IAAI,EAAE,MAAM,kCAAkC;EAC9C,MAAM,EAAE,MAAM,oCAAoC;CAWtC,EAAO;CACnB,iBAAiB,EAAE,QAAQ,OAAO;AACpC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SpinnerProps } from "@novi-ui/core";
|
|
2
|
+
//#region src/spinner/spinner.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* 処理中であることを示す回転表示。
|
|
5
|
+
*
|
|
6
|
+
* `label` を渡すと画面にも表示される。渡さない場合も支援技術には
|
|
7
|
+
* 「読み込み中」と伝わるようにしてある。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <Spinner label="読み込み中" />
|
|
11
|
+
*/
|
|
12
|
+
declare function Spinner({ size, color, label, className, classNames, id }: SpinnerProps): import("react").JSX.Element;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Spinner };
|
|
15
|
+
//# sourceMappingURL=spinner.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.mts","names":[],"sources":["../../src/spinner/spinner.tsx"],"mappings":";;;;;;;;;;;iBAcgB,UAAU,MAAM,OAAO,OAAO,WAAW,YAAY,MAAM,+BAAY,IAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { spinnerStyles } from "./spinner.styles.mjs";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/spinner/spinner.tsx
|
|
5
|
+
/**
|
|
6
|
+
* 処理中であることを示す回転表示。
|
|
7
|
+
*
|
|
8
|
+
* `label` を渡すと画面にも表示される。渡さない場合も支援技術には
|
|
9
|
+
* 「読み込み中」と伝わるようにしてある。
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Spinner label="読み込み中" />
|
|
13
|
+
*/
|
|
14
|
+
function Spinner({ size, color, label, className, classNames, id }) {
|
|
15
|
+
const s = spinnerStyles({
|
|
16
|
+
size,
|
|
17
|
+
color
|
|
18
|
+
});
|
|
19
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
20
|
+
id,
|
|
21
|
+
role: "status",
|
|
22
|
+
"data-slot": "root",
|
|
23
|
+
className: s.root({ class: [className, classNames?.root] }),
|
|
24
|
+
children: [/* @__PURE__ */ jsxs("svg", {
|
|
25
|
+
"data-slot": "circle",
|
|
26
|
+
className: s.circle({ class: classNames?.circle }),
|
|
27
|
+
viewBox: "0 0 24 24",
|
|
28
|
+
fill: "none",
|
|
29
|
+
"aria-hidden": "true",
|
|
30
|
+
children: [/* @__PURE__ */ jsx("circle", {
|
|
31
|
+
cx: "12",
|
|
32
|
+
cy: "12",
|
|
33
|
+
r: "9",
|
|
34
|
+
stroke: "currentColor",
|
|
35
|
+
strokeWidth: "2",
|
|
36
|
+
opacity: "0.2"
|
|
37
|
+
}), /* @__PURE__ */ jsx("path", {
|
|
38
|
+
d: "M21 12a9 9 0 0 0-9-9",
|
|
39
|
+
stroke: "currentColor",
|
|
40
|
+
strokeWidth: "2"
|
|
41
|
+
})]
|
|
42
|
+
}), label !== void 0 ? /* @__PURE__ */ jsx("span", {
|
|
43
|
+
"data-slot": "label",
|
|
44
|
+
className: s.label({ class: classNames?.label }),
|
|
45
|
+
children: label
|
|
46
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
47
|
+
className: "sr-only",
|
|
48
|
+
children: "読み込み中"
|
|
49
|
+
})]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { Spinner };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=spinner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.mjs","names":[],"sources":["../../src/spinner/spinner.tsx"],"sourcesContent":["'use client'\n\nimport type { SpinnerProps } from '@novi-ui/core'\nimport { spinnerStyles } from './spinner.styles'\n\n/**\n * 処理中であることを示す回転表示。\n *\n * `label` を渡すと画面にも表示される。渡さない場合も支援技術には\n * 「読み込み中」と伝わるようにしてある。\n *\n * @example\n * <Spinner label=\"読み込み中\" />\n */\nexport function Spinner({ size, color, label, className, classNames, id }: SpinnerProps) {\n const s = spinnerStyles({ size, color })\n\n return (\n <span\n id={id}\n role=\"status\"\n data-slot=\"root\"\n className={s.root({ class: [className, classNames?.root] })}\n >\n <svg\n data-slot=\"circle\"\n className={s.circle({ class: classNames?.circle })}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" opacity=\"0.2\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n\n {label !== undefined ? (\n <span data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {label}\n </span>\n ) : (\n <span className=\"sr-only\">読み込み中</span>\n )}\n </span>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,QAAQ,EAAE,MAAM,OAAO,OAAO,WAAW,YAAY,MAAoB;CACvF,MAAM,IAAI,cAAc;EAAE;EAAM;CAAM,CAAC;CAEvC,OACE,qBAAC,QAAD;EACM;EACJ,MAAK;EACL,aAAU;EACV,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAJ5D,UAAA,CAME,qBAAC,OAAD;GACE,aAAU;GACV,WAAW,EAAE,OAAO,EAAE,OAAO,YAAY,OAAO,CAAC;GACjD,SAAQ;GACR,MAAK;GACL,eAAY;GALd,UAAA,CAOE,oBAAC,UAAD;IAAQ,IAAG;IAAK,IAAG;IAAK,GAAE;IAAI,QAAO;IAAe,aAAY;IAAI,SAAQ;GAAO,CAAA,GACnF,oBAAC,QAAD;IAAM,GAAE;IAAuB,QAAO;IAAe,aAAY;GAAK,CAAA,CACnE;EAEJ,CAAA,GAAA,UAAU,KAAA,IACT,oBAAC,QAAD;GAAM,aAAU;GAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;GACpE,UAAA;EACG,CAAA,IAEN,oBAAC,QAAD;GAAM,WAAU;GAAU,UAAA;EAAW,CAAA,CAEnC;;AAEV"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { VariantMap } from "@novi-ui/core";
|
|
2
|
+
//#region src/spinner/spinner.styles.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Spinner のスタイル定義。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const mySpinner = tv({ extend: spinnerStyles, slots: { label: 'font-medium' } })
|
|
8
|
+
*/
|
|
9
|
+
declare const spinnerStyles: import("tailwind-variants").TVReturnType<{
|
|
10
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
11
|
+
root: string;
|
|
12
|
+
}>;
|
|
13
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
14
|
+
circle: string;
|
|
15
|
+
}>;
|
|
16
|
+
}, {
|
|
17
|
+
root: string;
|
|
18
|
+
circle: string;
|
|
19
|
+
label: string;
|
|
20
|
+
}, undefined, {
|
|
21
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
22
|
+
root: string;
|
|
23
|
+
}>;
|
|
24
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
25
|
+
circle: string;
|
|
26
|
+
}>;
|
|
27
|
+
}, {
|
|
28
|
+
root: string;
|
|
29
|
+
circle: string;
|
|
30
|
+
label: string;
|
|
31
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
32
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
33
|
+
root: string;
|
|
34
|
+
}>;
|
|
35
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
36
|
+
circle: string;
|
|
37
|
+
}>;
|
|
38
|
+
}, {
|
|
39
|
+
root: string;
|
|
40
|
+
circle: string;
|
|
41
|
+
label: string;
|
|
42
|
+
}>>;
|
|
43
|
+
type SpinnerStyleProps = Parameters<typeof spinnerStyles>[0];
|
|
44
|
+
//#endregion
|
|
45
|
+
export { SpinnerStyleProps, spinnerStyles };
|
|
46
|
+
//# sourceMappingURL=spinner.styles.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.styles.d.mts","names":[],"sources":["../../src/spinner/spinner.styles.ts"],"mappings":";;;;;;;;cA4Ca,2CAAa;;IArBiB;;;IASA;;;;;;;;IATA;;;IASA;;;;;;;;IATA;;;IASA;;;;;;;KAkB/B,oBAAoB,kBAAkB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { tv } from "tailwind-variants";
|
|
2
|
+
/**
|
|
3
|
+
* Spinner のスタイル定義。
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const mySpinner = tv({ extend: spinnerStyles, slots: { label: 'font-medium' } })
|
|
7
|
+
*/
|
|
8
|
+
const spinnerStyles = tv({
|
|
9
|
+
slots: {
|
|
10
|
+
root: "inline-flex items-center gap-2",
|
|
11
|
+
circle: "shrink-0 motion-safe:animate-spin text-[var(--c)]",
|
|
12
|
+
label: "text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)]"
|
|
13
|
+
},
|
|
14
|
+
variants: {
|
|
15
|
+
color: {
|
|
16
|
+
default: { root: "[--c:var(--novi-color-fg)]" },
|
|
17
|
+
primary: { root: "[--c:var(--novi-color-primary)]" },
|
|
18
|
+
secondary: { root: "[--c:var(--novi-color-secondary)]" },
|
|
19
|
+
success: { root: "[--c:var(--novi-color-success)]" },
|
|
20
|
+
warning: { root: "[--c:var(--novi-color-warning)]" },
|
|
21
|
+
danger: { root: "[--c:var(--novi-color-danger)]" }
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
sm: { circle: "size-4" },
|
|
25
|
+
md: { circle: "size-5" },
|
|
26
|
+
lg: { circle: "size-6" }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
color: "default",
|
|
31
|
+
size: "md"
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
//#endregion
|
|
35
|
+
export { spinnerStyles };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=spinner.styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.styles.mjs","names":[],"sources":["../../src/spinner/spinner.styles.ts"],"sourcesContent":["import type {\n NoviColor,\n NoviSize,\n SlotMap,\n spinnerRequiredSlots,\n spinnerSlots,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\n\n/**\n * Spinner は `rotate` を使う**唯一の例外**(ADR-R2)。\n *\n * 代替のローディング表現(点滅・バーの往復)は視認性か情報量で劣るため、\n * ここだけ回転を許可している。デザイン規律の検査でも例外登録済み。\n * `prefers-reduced-motion` のときは回転を止める。\n */\nconst slots = {\n root: 'inline-flex items-center gap-2',\n circle: 'shrink-0 motion-safe:animate-spin text-[var(--c)]',\n label: 'text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)]',\n} satisfies SlotMap<typeof spinnerSlots, (typeof spinnerRequiredSlots)[number]>\n\nconst color: VariantMap<NoviColor, { root: string }> = {\n default: { root: '[--c:var(--novi-color-fg)]' },\n primary: { root: '[--c:var(--novi-color-primary)]' },\n secondary: { root: '[--c:var(--novi-color-secondary)]' },\n success: { root: '[--c:var(--novi-color-success)]' },\n warning: { root: '[--c:var(--novi-color-warning)]' },\n danger: { root: '[--c:var(--novi-color-danger)]' },\n}\n\nconst size: VariantMap<NoviSize, { circle: string }> = {\n sm: { circle: 'size-4' },\n md: { circle: 'size-5' },\n lg: { circle: 'size-6' },\n}\n\n/**\n * Spinner のスタイル定義。\n *\n * @example\n * const mySpinner = tv({ extend: spinnerStyles, slots: { label: 'font-medium' } })\n */\nexport const spinnerStyles = tv({\n slots,\n variants: { color, size },\n defaultVariants: { color: 'default', size: 'md' },\n})\n\nexport type SpinnerStyleProps = Parameters<typeof spinnerStyles>[0]\n"],"mappings":";;;;;;;AA4CA,MAAa,gBAAgB,GAAG;CAC9B;EA3BA,MAAM;EACN,QAAQ;EACR,OAAO;CAyBP;CACA,UAAU;EAAE;GAtBZ,SAAS,EAAE,MAAM,6BAA6B;GAC9C,SAAS,EAAE,MAAM,kCAAkC;GACnD,WAAW,EAAE,MAAM,oCAAoC;GACvD,SAAS,EAAE,MAAM,kCAAkC;GACnD,SAAS,EAAE,MAAM,kCAAkC;GACnD,QAAQ,EAAE,MAAM,iCAAiC;EAiBrC;EAAO;GAbnB,IAAI,EAAE,QAAQ,SAAS;GACvB,IAAI,EAAE,QAAQ,SAAS;GACvB,IAAI,EAAE,QAAQ,SAAS;EAWJ;CAAK;CACxB,iBAAiB;EAAE,OAAO;EAAW,MAAM;CAAK;AAClD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/styles/focus-ring.ts
|
|
2
|
+
/**
|
|
3
|
+
* 全コンポーネント共通のフォーカスリング。
|
|
4
|
+
*
|
|
5
|
+
* 個別に書くと必ずどこかで揺れる。1箇所に定義して全コンポーネントが import する。
|
|
6
|
+
*
|
|
7
|
+
* React Aria Components はキーボード操作時にのみ `data-focus-visible` を立てるため、
|
|
8
|
+
* `:focus-visible` 擬似クラスではなくその属性を使う。
|
|
9
|
+
* ポインタで押しただけでリングが出る誤動作を避けられる。
|
|
10
|
+
*/
|
|
11
|
+
const focusRing = [
|
|
12
|
+
"outline-none",
|
|
13
|
+
"data-[focus-visible]:outline",
|
|
14
|
+
"data-[focus-visible]:outline-[length:var(--novi-focus-ring-width)]",
|
|
15
|
+
"data-[focus-visible]:outline-[var(--novi-focus-ring-color)]",
|
|
16
|
+
"data-[focus-visible]:outline-offset-[var(--novi-focus-ring-offset)]"
|
|
17
|
+
].join(" ");
|
|
18
|
+
/** 無効状態の共通表現。色は変えず、透明度と操作不能だけで示す(色数を増やさない)。 */
|
|
19
|
+
const disabledState = "data-[disabled]:opacity-40 data-[disabled]:pointer-events-none";
|
|
20
|
+
//#endregion
|
|
21
|
+
export { disabledState, focusRing };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=focus-ring.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-ring.mjs","names":[],"sources":["../../src/styles/focus-ring.ts"],"sourcesContent":["/**\n * 全コンポーネント共通のフォーカスリング。\n *\n * 個別に書くと必ずどこかで揺れる。1箇所に定義して全コンポーネントが import する。\n *\n * React Aria Components はキーボード操作時にのみ `data-focus-visible` を立てるため、\n * `:focus-visible` 擬似クラスではなくその属性を使う。\n * ポインタで押しただけでリングが出る誤動作を避けられる。\n */\nexport const focusRing = [\n 'outline-none',\n 'data-[focus-visible]:outline',\n 'data-[focus-visible]:outline-[length:var(--novi-focus-ring-width)]',\n 'data-[focus-visible]:outline-[var(--novi-focus-ring-color)]',\n 'data-[focus-visible]:outline-offset-[var(--novi-focus-ring-offset)]',\n].join(' ')\n\n/** 無効状態の共通表現。色は変えず、透明度と操作不能だけで示す(色数を増やさない)。 */\nexport const disabledState = 'data-[disabled]:opacity-40 data-[disabled]:pointer-events-none'\n"],"mappings":";;;;;;;;;;AASA,MAAa,YAAY;CACvB;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,KAAK,GAAG;;AAGV,MAAa,gBAAgB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SwitchProps } from "@novi-ui/core";
|
|
2
|
+
//#region src/switch/switch.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* オン / オフの切り替え。
|
|
5
|
+
*
|
|
6
|
+
* Raster では**矩形**で表示する(ADR-R3)。形が見慣れないぶん状態が読み取りにくいため、
|
|
7
|
+
* ラベルの併記を強く推奨する。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <Switch isSelected={enabled} onChange={setEnabled}>
|
|
11
|
+
* メール通知を受け取る
|
|
12
|
+
* </Switch>
|
|
13
|
+
*/
|
|
14
|
+
declare function Switch({ size, color, name, value, isSelected, defaultSelected, onChange, isDisabled, isReadOnly, description, children, className, classNames, id }: SwitchProps): import("react").JSX.Element;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Switch };
|
|
17
|
+
//# sourceMappingURL=switch.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.d.mts","names":[],"sources":["../../src/switch/switch.tsx"],"mappings":";;;;;;;;;;;;;iBAiBgB,SACd,MACA,OACA,MACA,OACA,YACA,iBACA,UACA,YACA,YACA,aACA,UACA,WACA,YACA,MACC,8BAAW,IAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { switchStyles } from "./switch.styles.mjs";
|
|
3
|
+
import { Switch } from "react-aria-components";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
//#region src/switch/switch.tsx
|
|
6
|
+
/**
|
|
7
|
+
* オン / オフの切り替え。
|
|
8
|
+
*
|
|
9
|
+
* Raster では**矩形**で表示する(ADR-R3)。形が見慣れないぶん状態が読み取りにくいため、
|
|
10
|
+
* ラベルの併記を強く推奨する。
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* <Switch isSelected={enabled} onChange={setEnabled}>
|
|
14
|
+
* メール通知を受け取る
|
|
15
|
+
* </Switch>
|
|
16
|
+
*/
|
|
17
|
+
function Switch$1({ size, color, name, value, isSelected, defaultSelected, onChange, isDisabled, isReadOnly, description, children, className, classNames, id }) {
|
|
18
|
+
const s = switchStyles({
|
|
19
|
+
size,
|
|
20
|
+
color
|
|
21
|
+
});
|
|
22
|
+
return /* @__PURE__ */ jsxs(Switch, {
|
|
23
|
+
id,
|
|
24
|
+
name,
|
|
25
|
+
value,
|
|
26
|
+
isSelected,
|
|
27
|
+
defaultSelected,
|
|
28
|
+
onChange,
|
|
29
|
+
isDisabled,
|
|
30
|
+
isReadOnly,
|
|
31
|
+
"data-slot": "root",
|
|
32
|
+
className: `group ${s.root({ class: [className, classNames?.root] })}`,
|
|
33
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
34
|
+
"data-slot": "track",
|
|
35
|
+
className: s.track({ class: classNames?.track }),
|
|
36
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
37
|
+
"data-slot": "thumb",
|
|
38
|
+
className: s.thumb({ class: classNames?.thumb })
|
|
39
|
+
})
|
|
40
|
+
}), children !== void 0 && /* @__PURE__ */ jsxs("span", {
|
|
41
|
+
className: "flex flex-col gap-0.5",
|
|
42
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
43
|
+
"data-slot": "label",
|
|
44
|
+
className: s.label({ class: classNames?.label }),
|
|
45
|
+
children
|
|
46
|
+
}), description !== void 0 && /* @__PURE__ */ jsx("span", {
|
|
47
|
+
"data-slot": "description",
|
|
48
|
+
className: s.description({ class: classNames?.description }),
|
|
49
|
+
children: description
|
|
50
|
+
})]
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Switch$1 as Switch };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=switch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.mjs","names":["Switch","RACSwitch"],"sources":["../../src/switch/switch.tsx"],"sourcesContent":["'use client'\n\nimport type { SwitchProps } from '@novi-ui/core'\nimport { Switch as RACSwitch } from 'react-aria-components'\nimport { switchStyles } from './switch.styles'\n\n/**\n * オン / オフの切り替え。\n *\n * Raster では**矩形**で表示する(ADR-R3)。形が見慣れないぶん状態が読み取りにくいため、\n * ラベルの併記を強く推奨する。\n *\n * @example\n * <Switch isSelected={enabled} onChange={setEnabled}>\n * メール通知を受け取る\n * </Switch>\n */\nexport function Switch({\n size,\n color,\n name,\n value,\n isSelected,\n defaultSelected,\n onChange,\n isDisabled,\n isReadOnly,\n description,\n children,\n className,\n classNames,\n id,\n}: SwitchProps) {\n const s = switchStyles({ size, color })\n\n return (\n <RACSwitch\n id={id}\n name={name}\n value={value}\n isSelected={isSelected}\n defaultSelected={defaultSelected}\n onChange={onChange}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n data-slot=\"root\"\n className={`group ${s.root({ class: [className, classNames?.root] })}`}\n >\n <span data-slot=\"track\" className={s.track({ class: classNames?.track })}>\n <span data-slot=\"thumb\" className={s.thumb({ class: classNames?.thumb })} />\n </span>\n\n {children !== undefined && (\n <span className=\"flex flex-col gap-0.5\">\n <span data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {children}\n </span>\n {description !== undefined && (\n <span\n data-slot=\"description\"\n className={s.description({ class: classNames?.description })}\n >\n {description}\n </span>\n )}\n </span>\n )}\n </RACSwitch>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,SAAgBA,SAAO,EACrB,MACA,OACA,MACA,OACA,YACA,iBACA,UACA,YACA,YACA,aACA,UACA,WACA,YACA,MACc;CACd,MAAM,IAAI,aAAa;EAAE;EAAM;CAAM,CAAC;CAEtC,OACE,qBAACC,QAAD;EACM;EACE;EACC;EACK;EACK;EACP;EACE;EACA;EACZ,aAAU;EACV,WAAW,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAVrE,UAAA,CAYE,oBAAC,QAAD;GAAM,aAAU;GAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;GACrE,UAAA,oBAAC,QAAD;IAAM,aAAU;IAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;GAAI,CAAA;EACvE,CAAA,GAEL,aAAa,KAAA,KACZ,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,oBAAC,QAAD;IAAM,aAAU;IAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;IACpE;GACG,CAAA,GACL,gBAAgB,KAAA,KACf,oBAAC,QAAD;IACE,aAAU;IACV,WAAW,EAAE,YAAY,EAAE,OAAO,YAAY,YAAY,CAAC;IAE1D,UAAA;GACG,CAAA,CAEJ;EAEC,CAAA,CAAA;;AAEf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { VariantMap } from "@novi-ui/core";
|
|
2
|
+
//#region src/switch/switch.styles.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Switch のスタイル定義。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const mySwitch = tv({ extend: switchStyles, slots: { track: 'w-12' } })
|
|
8
|
+
*/
|
|
9
|
+
declare const switchStyles: import("tailwind-variants").TVReturnType<{
|
|
10
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
11
|
+
root: string;
|
|
12
|
+
}>;
|
|
13
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
14
|
+
track: string;
|
|
15
|
+
thumb: string;
|
|
16
|
+
label: string;
|
|
17
|
+
}>;
|
|
18
|
+
}, {
|
|
19
|
+
root: string;
|
|
20
|
+
track: string;
|
|
21
|
+
thumb: string;
|
|
22
|
+
label: string;
|
|
23
|
+
description: string;
|
|
24
|
+
}, undefined, {
|
|
25
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
26
|
+
root: string;
|
|
27
|
+
}>;
|
|
28
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
29
|
+
track: string;
|
|
30
|
+
thumb: string;
|
|
31
|
+
label: string;
|
|
32
|
+
}>;
|
|
33
|
+
}, {
|
|
34
|
+
root: string;
|
|
35
|
+
track: string;
|
|
36
|
+
thumb: string;
|
|
37
|
+
label: string;
|
|
38
|
+
description: string;
|
|
39
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
40
|
+
color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
|
|
41
|
+
root: string;
|
|
42
|
+
}>;
|
|
43
|
+
size: VariantMap<"sm" | "md" | "lg", {
|
|
44
|
+
track: string;
|
|
45
|
+
thumb: string;
|
|
46
|
+
label: string;
|
|
47
|
+
}>;
|
|
48
|
+
}, {
|
|
49
|
+
root: string;
|
|
50
|
+
track: string;
|
|
51
|
+
thumb: string;
|
|
52
|
+
label: string;
|
|
53
|
+
description: string;
|
|
54
|
+
}>>;
|
|
55
|
+
type SwitchStyleProps = Parameters<typeof switchStyles>[0];
|
|
56
|
+
//#endregion
|
|
57
|
+
export { SwitchStyleProps, switchStyles };
|
|
58
|
+
//# sourceMappingURL=switch.styles.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.styles.d.mts","names":[],"sources":["../../src/switch/switch.styles.ts"],"mappings":";;;;;;;;cA2Ea,0CAAY;;IAjCkB;;;IASD;IAAe;IAAe;;;;;;;;;;IAT7B;;;IASD;IAAe;IAAe;;;;;;;;;;IAT7B;;;IASD;IAAe;IAAe;;;;;;;;;KA8B5D,mBAAmB,kBAAkB"}
|