@novi-ui/flatlay 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.
Files changed (212) hide show
  1. package/README.md +418 -0
  2. package/dist/accordion/accordion.d.mts +35 -0
  3. package/dist/accordion/accordion.d.mts.map +1 -0
  4. package/dist/accordion/accordion.mjs +74 -0
  5. package/dist/accordion/accordion.mjs.map +1 -0
  6. package/dist/accordion/accordion.styles.d.mts +61 -0
  7. package/dist/accordion/accordion.styles.d.mts.map +1 -0
  8. package/dist/accordion/accordion.styles.mjs +91 -0
  9. package/dist/accordion/accordion.styles.mjs.map +1 -0
  10. package/dist/accordion/index.d.mts +3 -0
  11. package/dist/avatar/avatar.d.mts +22 -0
  12. package/dist/avatar/avatar.d.mts.map +1 -0
  13. package/dist/avatar/avatar.mjs +60 -0
  14. package/dist/avatar/avatar.mjs.map +1 -0
  15. package/dist/avatar/avatar.styles.d.mts +49 -0
  16. package/dist/avatar/avatar.styles.d.mts.map +1 -0
  17. package/dist/avatar/avatar.styles.mjs +55 -0
  18. package/dist/avatar/avatar.styles.mjs.map +1 -0
  19. package/dist/avatar/index.d.mts +3 -0
  20. package/dist/badge/badge.d.mts +15 -0
  21. package/dist/badge/badge.d.mts.map +1 -0
  22. package/dist/badge/badge.mjs +39 -0
  23. package/dist/badge/badge.mjs.map +1 -0
  24. package/dist/badge/badge.styles.d.mts +67 -0
  25. package/dist/badge/badge.styles.d.mts.map +1 -0
  26. package/dist/badge/badge.styles.mjs +110 -0
  27. package/dist/badge/badge.styles.mjs.map +1 -0
  28. package/dist/badge/index.d.mts +3 -0
  29. package/dist/breadcrumbs/breadcrumbs.d.mts +36 -0
  30. package/dist/breadcrumbs/breadcrumbs.d.mts.map +1 -0
  31. package/dist/breadcrumbs/breadcrumbs.mjs +82 -0
  32. package/dist/breadcrumbs/breadcrumbs.mjs.map +1 -0
  33. package/dist/breadcrumbs/breadcrumbs.styles.d.mts +46 -0
  34. package/dist/breadcrumbs/breadcrumbs.styles.d.mts.map +1 -0
  35. package/dist/breadcrumbs/breadcrumbs.styles.mjs +45 -0
  36. package/dist/breadcrumbs/breadcrumbs.styles.mjs.map +1 -0
  37. package/dist/breadcrumbs/index.d.mts +3 -0
  38. package/dist/button/button.d.mts +18 -0
  39. package/dist/button/button.d.mts.map +1 -0
  40. package/dist/button/button.mjs +79 -0
  41. package/dist/button/button.mjs.map +1 -0
  42. package/dist/button/button.styles.d.mts +82 -0
  43. package/dist/button/button.styles.d.mts.map +1 -0
  44. package/dist/button/button.styles.mjs +137 -0
  45. package/dist/button/button.styles.mjs.map +1 -0
  46. package/dist/button/index.d.mts +3 -0
  47. package/dist/card/card.d.mts +51 -0
  48. package/dist/card/card.d.mts.map +1 -0
  49. package/dist/card/card.mjs +96 -0
  50. package/dist/card/card.mjs.map +1 -0
  51. package/dist/card/card.styles.d.mts +73 -0
  52. package/dist/card/card.styles.d.mts.map +1 -0
  53. package/dist/card/card.styles.mjs +72 -0
  54. package/dist/card/card.styles.mjs.map +1 -0
  55. package/dist/card/index.d.mts +3 -0
  56. package/dist/checkbox/checkbox.d.mts +27 -0
  57. package/dist/checkbox/checkbox.d.mts.map +1 -0
  58. package/dist/checkbox/checkbox.mjs +109 -0
  59. package/dist/checkbox/checkbox.mjs.map +1 -0
  60. package/dist/checkbox/checkbox.styles.d.mts +114 -0
  61. package/dist/checkbox/checkbox.styles.d.mts.map +1 -0
  62. package/dist/checkbox/checkbox.styles.mjs +105 -0
  63. package/dist/checkbox/checkbox.styles.mjs.map +1 -0
  64. package/dist/checkbox/index.d.mts +3 -0
  65. package/dist/color-picker/color-picker.d.mts +30 -0
  66. package/dist/color-picker/color-picker.d.mts.map +1 -0
  67. package/dist/color-picker/color-picker.mjs +100 -0
  68. package/dist/color-picker/color-picker.mjs.map +1 -0
  69. package/dist/color-picker/color-picker.styles.d.mts +91 -0
  70. package/dist/color-picker/color-picker.styles.d.mts.map +1 -0
  71. package/dist/color-picker/color-picker.styles.mjs +79 -0
  72. package/dist/color-picker/color-picker.styles.mjs.map +1 -0
  73. package/dist/color-picker/index.d.mts +3 -0
  74. package/dist/flatlay.css +381 -0
  75. package/dist/flatlay.scoped.css +381 -0
  76. package/dist/index.d.mts +67 -0
  77. package/dist/index.mjs +46 -0
  78. package/dist/input/index.d.mts +3 -0
  79. package/dist/input/input.d.mts +23 -0
  80. package/dist/input/input.d.mts.map +1 -0
  81. package/dist/input/input.mjs +89 -0
  82. package/dist/input/input.mjs.map +1 -0
  83. package/dist/input/input.styles.d.mts +97 -0
  84. package/dist/input/input.styles.d.mts.map +1 -0
  85. package/dist/input/input.styles.mjs +96 -0
  86. package/dist/input/input.styles.mjs.map +1 -0
  87. package/dist/menu/index.d.mts +3 -0
  88. package/dist/menu/menu.d.mts +66 -0
  89. package/dist/menu/menu.d.mts.map +1 -0
  90. package/dist/menu/menu.mjs +118 -0
  91. package/dist/menu/menu.mjs.map +1 -0
  92. package/dist/menu/menu.styles.d.mts +114 -0
  93. package/dist/menu/menu.styles.d.mts.map +1 -0
  94. package/dist/menu/menu.styles.mjs +66 -0
  95. package/dist/menu/menu.styles.mjs.map +1 -0
  96. package/dist/modal/index.d.mts +3 -0
  97. package/dist/modal/modal.d.mts +55 -0
  98. package/dist/modal/modal.d.mts.map +1 -0
  99. package/dist/modal/modal.mjs +120 -0
  100. package/dist/modal/modal.mjs.map +1 -0
  101. package/dist/modal/modal.styles.d.mts +70 -0
  102. package/dist/modal/modal.styles.d.mts.map +1 -0
  103. package/dist/modal/modal.styles.mjs +83 -0
  104. package/dist/modal/modal.styles.mjs.map +1 -0
  105. package/dist/popover/index.d.mts +3 -0
  106. package/dist/popover/popover.d.mts +33 -0
  107. package/dist/popover/popover.d.mts.map +1 -0
  108. package/dist/popover/popover.mjs +57 -0
  109. package/dist/popover/popover.mjs.map +1 -0
  110. package/dist/popover/popover.styles.d.mts +40 -0
  111. package/dist/popover/popover.styles.d.mts.map +1 -0
  112. package/dist/popover/popover.styles.mjs +47 -0
  113. package/dist/popover/popover.styles.mjs.map +1 -0
  114. package/dist/progress/index.d.mts +3 -0
  115. package/dist/progress/progress.d.mts +15 -0
  116. package/dist/progress/progress.d.mts.map +1 -0
  117. package/dist/progress/progress.mjs +55 -0
  118. package/dist/progress/progress.mjs.map +1 -0
  119. package/dist/progress/progress.styles.d.mts +100 -0
  120. package/dist/progress/progress.styles.d.mts.map +1 -0
  121. package/dist/progress/progress.styles.mjs +65 -0
  122. package/dist/progress/progress.styles.mjs.map +1 -0
  123. package/dist/radio/index.d.mts +3 -0
  124. package/dist/radio/radio.d.mts +25 -0
  125. package/dist/radio/radio.d.mts.map +1 -0
  126. package/dist/radio/radio.mjs +99 -0
  127. package/dist/radio/radio.mjs.map +1 -0
  128. package/dist/radio/radio.styles.d.mts +114 -0
  129. package/dist/radio/radio.styles.d.mts.map +1 -0
  130. package/dist/radio/radio.styles.mjs +103 -0
  131. package/dist/radio/radio.styles.mjs.map +1 -0
  132. package/dist/select/index.d.mts +3 -0
  133. package/dist/select/select.d.mts +40 -0
  134. package/dist/select/select.d.mts.map +1 -0
  135. package/dist/select/select.mjs +121 -0
  136. package/dist/select/select.mjs.map +1 -0
  137. package/dist/select/select.styles.d.mts +85 -0
  138. package/dist/select/select.styles.d.mts.map +1 -0
  139. package/dist/select/select.styles.mjs +111 -0
  140. package/dist/select/select.styles.mjs.map +1 -0
  141. package/dist/skeleton/index.d.mts +3 -0
  142. package/dist/skeleton/skeleton.d.mts +15 -0
  143. package/dist/skeleton/skeleton.d.mts.map +1 -0
  144. package/dist/skeleton/skeleton.mjs +26 -0
  145. package/dist/skeleton/skeleton.mjs.map +1 -0
  146. package/dist/skeleton/skeleton.styles.d.mts +47 -0
  147. package/dist/skeleton/skeleton.styles.d.mts.map +1 -0
  148. package/dist/skeleton/skeleton.styles.mjs +31 -0
  149. package/dist/skeleton/skeleton.styles.mjs.map +1 -0
  150. package/dist/spinner/index.d.mts +3 -0
  151. package/dist/spinner/spinner.d.mts +15 -0
  152. package/dist/spinner/spinner.d.mts.map +1 -0
  153. package/dist/spinner/spinner.mjs +55 -0
  154. package/dist/spinner/spinner.mjs.map +1 -0
  155. package/dist/spinner/spinner.styles.d.mts +46 -0
  156. package/dist/spinner/spinner.styles.d.mts.map +1 -0
  157. package/dist/spinner/spinner.styles.mjs +50 -0
  158. package/dist/spinner/spinner.styles.mjs.map +1 -0
  159. package/dist/styles/focus-ring.mjs +30 -0
  160. package/dist/styles/focus-ring.mjs.map +1 -0
  161. package/dist/styles/inflow.mjs +156 -0
  162. package/dist/styles/inflow.mjs.map +1 -0
  163. package/dist/styles/mono.mjs +24 -0
  164. package/dist/styles/mono.mjs.map +1 -0
  165. package/dist/switch/index.d.mts +3 -0
  166. package/dist/switch/switch.d.mts +18 -0
  167. package/dist/switch/switch.d.mts.map +1 -0
  168. package/dist/switch/switch.mjs +58 -0
  169. package/dist/switch/switch.mjs.map +1 -0
  170. package/dist/switch/switch.styles.d.mts +58 -0
  171. package/dist/switch/switch.styles.d.mts.map +1 -0
  172. package/dist/switch/switch.styles.mjs +86 -0
  173. package/dist/switch/switch.styles.mjs.map +1 -0
  174. package/dist/tabs/index.d.mts +3 -0
  175. package/dist/tabs/tabs.d.mts +64 -0
  176. package/dist/tabs/tabs.d.mts.map +1 -0
  177. package/dist/tabs/tabs.mjs +93 -0
  178. package/dist/tabs/tabs.mjs.map +1 -0
  179. package/dist/tabs/tabs.styles.d.mts +64 -0
  180. package/dist/tabs/tabs.styles.d.mts.map +1 -0
  181. package/dist/tabs/tabs.styles.mjs +118 -0
  182. package/dist/tabs/tabs.styles.mjs.map +1 -0
  183. package/dist/textarea/index.d.mts +3 -0
  184. package/dist/textarea/textarea.d.mts +15 -0
  185. package/dist/textarea/textarea.d.mts.map +1 -0
  186. package/dist/textarea/textarea.mjs +70 -0
  187. package/dist/textarea/textarea.mjs.map +1 -0
  188. package/dist/textarea/textarea.styles.d.mts +70 -0
  189. package/dist/textarea/textarea.styles.d.mts.map +1 -0
  190. package/dist/textarea/textarea.styles.mjs +85 -0
  191. package/dist/textarea/textarea.styles.mjs.map +1 -0
  192. package/dist/toast/index.d.mts +3 -0
  193. package/dist/toast/toast.d.mts +47 -0
  194. package/dist/toast/toast.d.mts.map +1 -0
  195. package/dist/toast/toast.mjs +100 -0
  196. package/dist/toast/toast.mjs.map +1 -0
  197. package/dist/toast/toast.styles.d.mts +61 -0
  198. package/dist/toast/toast.styles.d.mts.map +1 -0
  199. package/dist/toast/toast.styles.mjs +79 -0
  200. package/dist/toast/toast.styles.mjs.map +1 -0
  201. package/dist/tokens/color-set.mjs +124 -0
  202. package/dist/tokens/color-set.mjs.map +1 -0
  203. package/dist/tooltip/index.d.mts +3 -0
  204. package/dist/tooltip/tooltip.d.mts +20 -0
  205. package/dist/tooltip/tooltip.d.mts.map +1 -0
  206. package/dist/tooltip/tooltip.mjs +45 -0
  207. package/dist/tooltip/tooltip.mjs.map +1 -0
  208. package/dist/tooltip/tooltip.styles.d.mts +48 -0
  209. package/dist/tooltip/tooltip.styles.d.mts.map +1 -0
  210. package/dist/tooltip/tooltip.styles.mjs +39 -0
  211. package/dist/tooltip/tooltip.styles.mjs.map +1 -0
  212. package/package.json +69 -0
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ import { progressStyles } from "./progress.styles.mjs";
3
+ import { Label, ProgressBar } from "react-aria-components";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/progress/progress.tsx
6
+ /**
7
+ * 進捗の表示。`value` を省略すると不確定(indeterminate)表示になる。
8
+ *
9
+ * Flatlay の進捗は**引かれていく罫線**で、面が伸びるのではなく線が引かれる。
10
+ * `prefers-reduced-motion` が有効なときは不確定表示の点滅を止める。
11
+ *
12
+ * @example
13
+ * <Progress label="アップロード中" value={62} showValueLabel />
14
+ */
15
+ function Progress({ size, color, label, value, minValue = 0, maxValue = 100, showValueLabel, className, classNames, id }) {
16
+ const isIndeterminate = value === void 0;
17
+ const s = progressStyles({
18
+ size,
19
+ color,
20
+ isIndeterminate
21
+ });
22
+ return /* @__PURE__ */ jsx(ProgressBar, {
23
+ id,
24
+ value,
25
+ minValue,
26
+ maxValue,
27
+ isIndeterminate,
28
+ "data-slot": "root",
29
+ className: s.root({ class: [className, classNames?.root] }),
30
+ children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs(Fragment, { children: [(label !== void 0 || showValueLabel === true) && /* @__PURE__ */ jsxs("span", {
31
+ className: "flex items-baseline justify-between gap-2",
32
+ children: [label !== void 0 && /* @__PURE__ */ jsx(Label, {
33
+ "data-slot": "label",
34
+ className: s.label({ class: classNames?.label }),
35
+ children: label
36
+ }), showValueLabel === true && !isIndeterminate && /* @__PURE__ */ jsx("span", {
37
+ "data-slot": "valueLabel",
38
+ className: s.valueLabel({ class: classNames?.valueLabel }),
39
+ children: valueText
40
+ })]
41
+ }), /* @__PURE__ */ jsx("span", {
42
+ "data-slot": "track",
43
+ className: s.track({ class: classNames?.track }),
44
+ children: /* @__PURE__ */ jsx("span", {
45
+ "data-slot": "indicator",
46
+ className: s.indicator({ class: classNames?.indicator }),
47
+ style: isIndeterminate ? void 0 : { width: `${percentage ?? 0}%` }
48
+ })
49
+ })] })
50
+ });
51
+ }
52
+ //#endregion
53
+ export { Progress };
54
+
55
+ //# sourceMappingURL=progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.mjs","names":[],"sources":["../../src/progress/progress.tsx"],"sourcesContent":["'use client'\n\nimport type { ProgressProps } from '@novi-ui/core'\nimport { Label, ProgressBar } from 'react-aria-components'\nimport { progressStyles } from './progress.styles'\n\n/**\n * 進捗の表示。`value` を省略すると不確定(indeterminate)表示になる。\n *\n * Flatlay の進捗は**引かれていく罫線**で、面が伸びるのではなく線が引かれる。\n * `prefers-reduced-motion` が有効なときは不確定表示の点滅を止める。\n *\n * @example\n * <Progress label=\"アップロード中\" value={62} showValueLabel />\n */\nexport function Progress({\n size,\n color,\n label,\n value,\n minValue = 0,\n maxValue = 100,\n showValueLabel,\n className,\n classNames,\n id,\n}: ProgressProps) {\n const isIndeterminate = value === undefined\n const s = progressStyles({ size, color, isIndeterminate })\n\n return (\n <ProgressBar\n id={id}\n value={value}\n minValue={minValue}\n maxValue={maxValue}\n isIndeterminate={isIndeterminate}\n data-slot=\"root\"\n className={s.root({ class: [className, classNames?.root] })}\n >\n {({ percentage, valueText }) => (\n <>\n {(label !== undefined || showValueLabel === true) && (\n <span className=\"flex items-baseline justify-between gap-2\">\n {label !== undefined && (\n <Label data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {label}\n </Label>\n )}\n {showValueLabel === true && !isIndeterminate && (\n <span\n data-slot=\"valueLabel\"\n className={s.valueLabel({ class: classNames?.valueLabel })}\n >\n {valueText}\n </span>\n )}\n </span>\n )}\n\n <span data-slot=\"track\" className={s.track({ class: classNames?.track })}>\n <span\n data-slot=\"indicator\"\n className={s.indicator({ class: classNames?.indicator })}\n style={isIndeterminate ? undefined : { width: `${percentage ?? 0}%` }}\n />\n </span>\n </>\n )}\n </ProgressBar>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,SAAS,EACvB,MACA,OACA,OACA,OACA,WAAW,GACX,WAAW,KACX,gBACA,WACA,YACA,MACgB;CAChB,MAAM,kBAAkB,UAAU,KAAA;CAClC,MAAM,IAAI,eAAe;EAAE;EAAM;EAAO;CAAgB,CAAC;CAEzD,OACE,oBAAC,aAAD;EACM;EACG;EACG;EACA;EACO;EACjB,aAAU;EACV,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAExD,WAAA,EAAE,YAAY,gBACd,qBAAA,UAAA,EAAA,UAAA,EACI,UAAU,KAAA,KAAa,mBAAmB,SAC1C,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACG,UAAU,KAAA,KACT,oBAAC,OAAD;IAAO,aAAU;IAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;IACrE,UAAA;GACI,CAAA,GAER,mBAAmB,QAAQ,CAAC,mBAC3B,oBAAC,QAAD;IACE,aAAU;IACV,WAAW,EAAE,WAAW,EAAE,OAAO,YAAY,WAAW,CAAC;IAExD,UAAA;GACG,CAAA,CAEJ;EAGR,CAAA,GAAA,oBAAC,QAAD;GAAM,aAAU;GAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;GACrE,UAAA,oBAAC,QAAD;IACE,aAAU;IACV,WAAW,EAAE,UAAU,EAAE,OAAO,YAAY,UAAU,CAAC;IACvD,OAAO,kBAAkB,KAAA,IAAY,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG;GACrE,CAAA;EACG,CAAA,CACN,EAAA,CAAA;CAEO,CAAA;AAEjB"}
@@ -0,0 +1,100 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/progress/progress.styles.d.ts
3
+ /**
4
+ * Progress のスタイル定義。
5
+ *
6
+ * @example
7
+ * const myProgress = tv({ extend: progressStyles, slots: { track: 'h-1' } })
8
+ */
9
+ declare const progressStyles: 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
+ }>;
16
+ /**
17
+ * 不確定表示。両テーマは細い帯を translate で往復させるが、Flatlay は
18
+ * transform を持たない(FR-11)。線を全幅で引いたまま濃さを脈打たせる。
19
+ * 「進んでいるが量は分からない」を、動かさずに示す唯一の手段。
20
+ */
21
+ isIndeterminate: {
22
+ true: {
23
+ indicator: string;
24
+ };
25
+ false: {};
26
+ };
27
+ }, {
28
+ root: string;
29
+ label: string;
30
+ /**
31
+ * 引かれた罫線そのもの。地に `subtle` を使わないのは、2px の帯では L の差が
32
+ * 見えず線が消えるため。罫線の色を使うことで「まだ引かれていない部分」も
33
+ * 罫線として読める。
34
+ */
35
+ track: string;
36
+ indicator: string;
37
+ valueLabel: string;
38
+ }, undefined, {
39
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
40
+ root: string;
41
+ }>;
42
+ size: VariantMap<"sm" | "md" | "lg", {
43
+ track: string;
44
+ }>;
45
+ /**
46
+ * 不確定表示。両テーマは細い帯を translate で往復させるが、Flatlay は
47
+ * transform を持たない(FR-11)。線を全幅で引いたまま濃さを脈打たせる。
48
+ * 「進んでいるが量は分からない」を、動かさずに示す唯一の手段。
49
+ */
50
+ isIndeterminate: {
51
+ true: {
52
+ indicator: string;
53
+ };
54
+ false: {};
55
+ };
56
+ }, {
57
+ root: string;
58
+ label: string;
59
+ /**
60
+ * 引かれた罫線そのもの。地に `subtle` を使わないのは、2px の帯では L の差が
61
+ * 見えず線が消えるため。罫線の色を使うことで「まだ引かれていない部分」も
62
+ * 罫線として読める。
63
+ */
64
+ track: string;
65
+ indicator: string;
66
+ valueLabel: string;
67
+ }, import("tailwind-variants").TVReturnTypeLike<{
68
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
69
+ root: string;
70
+ }>;
71
+ size: VariantMap<"sm" | "md" | "lg", {
72
+ track: string;
73
+ }>;
74
+ /**
75
+ * 不確定表示。両テーマは細い帯を translate で往復させるが、Flatlay は
76
+ * transform を持たない(FR-11)。線を全幅で引いたまま濃さを脈打たせる。
77
+ * 「進んでいるが量は分からない」を、動かさずに示す唯一の手段。
78
+ */
79
+ isIndeterminate: {
80
+ true: {
81
+ indicator: string;
82
+ };
83
+ false: {};
84
+ };
85
+ }, {
86
+ root: string;
87
+ label: string;
88
+ /**
89
+ * 引かれた罫線そのもの。地に `subtle` を使わないのは、2px の帯では L の差が
90
+ * 見えず線が消えるため。罫線の色を使うことで「まだ引かれていない部分」も
91
+ * 罫線として読める。
92
+ */
93
+ track: string;
94
+ indicator: string;
95
+ valueLabel: string;
96
+ }>>;
97
+ type ProgressStyleProps = Parameters<typeof progressStyles>[0];
98
+ //#endregion
99
+ export { ProgressStyleProps, progressStyles };
100
+ //# sourceMappingURL=progress.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.styles.d.mts","names":[],"sources":["../../src/progress/progress.styles.ts"],"mappings":";;;;;;;;cAuDa,4CAAc;;IAtBgB;;;IAUD;;;;;;;;;;;;;;;;;;;;;;;;;;IAVC;;;IAUD;;;;;;;;;;;;;;;;;;;;;;;;;;IAVC;;;IAUD;;;;;;;;;;;;;;;;;;;;;;;;;KA8B9B,qBAAqB,kBAAkB"}
@@ -0,0 +1,65 @@
1
+ import { mono, monoNumeric } from "../styles/mono.mjs";
2
+ import { tv } from "tailwind-variants";
3
+ //#region src/progress/progress.styles.ts
4
+ const slots = {
5
+ root: "flex flex-col gap-1.5 w-full",
6
+ label: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-fg)] ${mono}`,
7
+ /**
8
+ * 引かれた罫線そのもの。地に `subtle` を使わないのは、2px の帯では L の差が
9
+ * 見えず線が消えるため。罫線の色を使うことで「まだ引かれていない部分」も
10
+ * 罫線として読める。
11
+ */
12
+ track: [
13
+ "w-full overflow-hidden",
14
+ "bg-[var(--novi-color-border)]",
15
+ "rounded-[var(--novi-radius-none)]"
16
+ ].join(" "),
17
+ indicator: [
18
+ "h-full bg-[var(--c)]",
19
+ "transition-[width]",
20
+ "duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]"
21
+ ].join(" "),
22
+ valueLabel: `text-[length:var(--novi-text-xs)] text-[var(--novi-color-muted)] ${monoNumeric}`
23
+ };
24
+ /**
25
+ * Progress のスタイル定義。
26
+ *
27
+ * @example
28
+ * const myProgress = tv({ extend: progressStyles, slots: { track: 'h-1' } })
29
+ */
30
+ const progressStyles = tv({
31
+ slots,
32
+ variants: {
33
+ color: {
34
+ default: { root: "[--c:var(--novi-color-fg)]" },
35
+ primary: { root: "[--c:var(--novi-color-primary)]" },
36
+ secondary: { root: "[--c:var(--novi-color-secondary)]" },
37
+ success: { root: "[--c:var(--novi-color-success)]" },
38
+ warning: { root: "[--c:var(--novi-color-warning)]" },
39
+ danger: { root: "[--c:var(--novi-color-danger)]" }
40
+ },
41
+ size: {
42
+ sm: { track: "h-px" },
43
+ md: { track: "h-0.5" },
44
+ lg: { track: "h-1" }
45
+ },
46
+ /**
47
+ * 不確定表示。両テーマは細い帯を translate で往復させるが、Flatlay は
48
+ * transform を持たない(FR-11)。線を全幅で引いたまま濃さを脈打たせる。
49
+ * 「進んでいるが量は分からない」を、動かさずに示す唯一の手段。
50
+ */
51
+ isIndeterminate: {
52
+ true: { indicator: "w-full motion-safe:animate-pulse" },
53
+ false: {}
54
+ }
55
+ },
56
+ defaultVariants: {
57
+ color: "default",
58
+ size: "md",
59
+ isIndeterminate: false
60
+ }
61
+ });
62
+ //#endregion
63
+ export { progressStyles };
64
+
65
+ //# sourceMappingURL=progress.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.styles.mjs","names":[],"sources":["../../src/progress/progress.styles.ts"],"sourcesContent":["import type {\n NoviColor,\n NoviSize,\n progressRequiredSlots,\n progressSlots,\n SlotMap,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\nimport { mono, monoNumeric } from '../styles/mono'\n\nconst slots = {\n root: 'flex flex-col gap-1.5 w-full',\n label: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-fg)] ${mono}`,\n /**\n * 引かれた罫線そのもの。地に `subtle` を使わないのは、2px の帯では L の差が\n * 見えず線が消えるため。罫線の色を使うことで「まだ引かれていない部分」も\n * 罫線として読める。\n */\n track: [\n 'w-full overflow-hidden',\n 'bg-[var(--novi-color-border)]',\n 'rounded-[var(--novi-radius-none)]',\n ].join(' '),\n // 伸びるのは幅だけ。transform は持たない(FR-11)\n indicator: [\n 'h-full bg-[var(--c)]',\n 'transition-[width]',\n 'duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n ].join(' '),\n valueLabel: `text-[length:var(--novi-text-xs)] text-[var(--novi-color-muted)] ${monoNumeric}`,\n} satisfies SlotMap<typeof progressSlots, (typeof progressRequiredSlots)[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\n/** 罫線の太さ。面ではなく線なので、両テーマ(2/4/6px)より1段細い。 */\nconst size: VariantMap<NoviSize, { track: string }> = {\n sm: { track: 'h-px' },\n md: { track: 'h-0.5' },\n lg: { track: 'h-1' },\n}\n\n/**\n * Progress のスタイル定義。\n *\n * @example\n * const myProgress = tv({ extend: progressStyles, slots: { track: 'h-1' } })\n */\nexport const progressStyles = tv({\n slots,\n variants: {\n color,\n size,\n /**\n * 不確定表示。両テーマは細い帯を translate で往復させるが、Flatlay は\n * transform を持たない(FR-11)。線を全幅で引いたまま濃さを脈打たせる。\n * 「進んでいるが量は分からない」を、動かさずに示す唯一の手段。\n */\n isIndeterminate: {\n true: { indicator: 'w-full motion-safe:animate-pulse' },\n false: {},\n },\n },\n defaultVariants: { color: 'default', size: 'md', isIndeterminate: false },\n})\n\nexport type ProgressStyleProps = Parameters<typeof progressStyles>[0]\n"],"mappings":";;;AAWA,MAAM,QAAQ;CACZ,MAAM;CACN,OAAO,iEAAiE;;;;;;CAMxE,OAAO;EACL;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,WAAW;EACT;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CACV,YAAY,oEAAoE;AAClF;;;;;;;AAwBA,MAAa,iBAAiB,GAAG;CAC/B;CACA,UAAU;EACR;GAxBF,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;EAmB/C;EACA;GAfF,IAAI,EAAE,OAAO,OAAO;GACpB,IAAI,EAAE,OAAO,QAAQ;GACrB,IAAI,EAAE,OAAO,MAAM;EAajB;;;;;;EAMA,iBAAiB;GACf,MAAM,EAAE,WAAW,mCAAmC;GACtD,OAAO,CAAC;EACV;CACF;CACA,iBAAiB;EAAE,OAAO;EAAW,MAAM;EAAM,iBAAiB;CAAM;AAC1E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Radio, RadioGroup } from "./radio.mjs";
2
+ import { RadioGroupStyleProps, RadioStyleProps, radioGroupStyles, radioStyles } from "./radio.styles.mjs";
3
+ export { Radio, RadioGroup, type RadioGroupStyleProps, type RadioStyleProps, radioGroupStyles, radioStyles };
@@ -0,0 +1,25 @@
1
+ import { RadioGroupProps, RadioProps } from "@novi-ui/core";
2
+ //#region src/radio/radio.d.ts
3
+ /**
4
+ * ラジオボタン。単体では使わず、必ず RadioGroup の中に置く。
5
+ *
6
+ * Flatlay では**円**で描く。Checkbox の 2px 角と形が違うことが
7
+ * 「1つだけ」と「複数」の唯一の手がかりになる。
8
+ *
9
+ * @example
10
+ * <Radio value="express">速達</Radio>
11
+ */
12
+ declare function Radio({ value, size, color, isDisabled, description, children, className, classNames, id }: RadioProps): import("react").JSX.Element;
13
+ /**
14
+ * ラジオボタンのグループ。矢印キーで項目間を移動できる。
15
+ *
16
+ * @example
17
+ * <RadioGroup label="配送方法" value={method} onChange={setMethod}>
18
+ * <Radio value="standard">通常</Radio>
19
+ * <Radio value="express">速達</Radio>
20
+ * </RadioGroup>
21
+ */
22
+ declare function RadioGroup({ label, description, errorMessage, name, value, defaultValue, onChange, orientation, isDisabled, isReadOnly, isRequired, isInvalid, children, className, classNames, id }: RadioGroupProps): import("react").JSX.Element;
23
+ //#endregion
24
+ export { Radio, RadioGroup };
25
+ //# sourceMappingURL=radio.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.d.mts","names":[],"sources":["../../src/radio/radio.tsx"],"mappings":";;;;;;;;;;;iBAqBgB,QACd,OACA,MACA,OACA,YACA,aACA,UACA,WACA,YACA,MACC,6BAAU,IAAA;;;;;;;;;;iBAuDG,aACd,OACA,aACA,cACA,MACA,OACA,cACA,UACA,aACA,YACA,YACA,YACA,WACA,UACA,WACA,YACA,MACC,kCAAe,IAAA"}
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ import { radioGroupStyles, radioStyles } from "./radio.styles.mjs";
3
+ import { FieldError, Label, Radio, RadioGroup, Text } from "react-aria-components";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/radio/radio.tsx
6
+ /**
7
+ * ラジオボタン。単体では使わず、必ず RadioGroup の中に置く。
8
+ *
9
+ * Flatlay では**円**で描く。Checkbox の 2px 角と形が違うことが
10
+ * 「1つだけ」と「複数」の唯一の手がかりになる。
11
+ *
12
+ * @example
13
+ * <Radio value="express">速達</Radio>
14
+ */
15
+ function Radio$1({ value, size, color, isDisabled, description, children, className, classNames, id }) {
16
+ const s = radioStyles({
17
+ size,
18
+ color
19
+ });
20
+ return /* @__PURE__ */ jsx(Radio, {
21
+ id,
22
+ value,
23
+ isDisabled,
24
+ "data-slot": "root",
25
+ className: `group ${s.root({ class: [className, classNames?.root] })}`,
26
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
27
+ "data-slot": "control",
28
+ className: s.control({ class: classNames?.control }),
29
+ children: isSelected && /* @__PURE__ */ jsx("span", {
30
+ "aria-hidden": "true",
31
+ "data-slot": "indicator",
32
+ className: s.indicator({ class: classNames?.indicator })
33
+ })
34
+ }), children !== void 0 && /* @__PURE__ */ jsxs("span", {
35
+ className: "flex flex-col gap-0.5",
36
+ children: [/* @__PURE__ */ jsx("span", {
37
+ "data-slot": "label",
38
+ className: s.label({ class: classNames?.label }),
39
+ children
40
+ }), description !== void 0 && /* @__PURE__ */ jsx("span", {
41
+ "data-slot": "description",
42
+ className: s.description({ class: classNames?.description }),
43
+ children: description
44
+ })]
45
+ })] })
46
+ });
47
+ }
48
+ /**
49
+ * ラジオボタンのグループ。矢印キーで項目間を移動できる。
50
+ *
51
+ * @example
52
+ * <RadioGroup label="配送方法" value={method} onChange={setMethod}>
53
+ * <Radio value="standard">通常</Radio>
54
+ * <Radio value="express">速達</Radio>
55
+ * </RadioGroup>
56
+ */
57
+ function RadioGroup$1({ label, description, errorMessage, name, value, defaultValue, onChange, orientation, isDisabled, isReadOnly, isRequired, isInvalid, children, className, classNames, id }) {
58
+ const s = radioGroupStyles({ orientation });
59
+ return /* @__PURE__ */ jsxs(RadioGroup, {
60
+ id,
61
+ name,
62
+ value,
63
+ defaultValue,
64
+ onChange,
65
+ isDisabled,
66
+ isReadOnly,
67
+ isRequired,
68
+ isInvalid,
69
+ "data-slot": "root",
70
+ className: s.root({ class: [className, classNames?.root] }),
71
+ children: [
72
+ label !== void 0 && /* @__PURE__ */ jsx(Label, {
73
+ "data-slot": "label",
74
+ className: s.label({ class: classNames?.label }),
75
+ children: label
76
+ }),
77
+ /* @__PURE__ */ jsx("div", {
78
+ "data-slot": "list",
79
+ className: s.list({ class: classNames?.list }),
80
+ children
81
+ }),
82
+ description !== void 0 && /* @__PURE__ */ jsx(Text, {
83
+ slot: "description",
84
+ "data-slot": "description",
85
+ className: s.description({ class: classNames?.description }),
86
+ children: description
87
+ }),
88
+ /* @__PURE__ */ jsx(FieldError, {
89
+ "data-slot": "errorMessage",
90
+ className: s.errorMessage({ class: classNames?.errorMessage }),
91
+ children: errorMessage
92
+ })
93
+ ]
94
+ });
95
+ }
96
+ //#endregion
97
+ export { Radio$1 as Radio, RadioGroup$1 as RadioGroup };
98
+
99
+ //# sourceMappingURL=radio.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.mjs","names":["Radio","RACRadio","RadioGroup","RACRadioGroup"],"sources":["../../src/radio/radio.tsx"],"sourcesContent":["'use client'\n\nimport type { RadioGroupProps, RadioProps } from '@novi-ui/core'\nimport {\n FieldError,\n Label,\n Radio as RACRadio,\n RadioGroup as RACRadioGroup,\n Text,\n} from 'react-aria-components'\nimport { radioGroupStyles, radioStyles } from './radio.styles'\n\n/**\n * ラジオボタン。単体では使わず、必ず RadioGroup の中に置く。\n *\n * Flatlay では**円**で描く。Checkbox の 2px 角と形が違うことが\n * 「1つだけ」と「複数」の唯一の手がかりになる。\n *\n * @example\n * <Radio value=\"express\">速達</Radio>\n */\nexport function Radio({\n value,\n size,\n color,\n isDisabled,\n description,\n children,\n className,\n classNames,\n id,\n}: RadioProps) {\n const s = radioStyles({ size, color })\n\n return (\n <RACRadio\n id={id}\n value={value}\n isDisabled={isDisabled}\n data-slot=\"root\"\n // control 側から選択状態を参照するために group を付ける\n className={`group ${s.root({ class: [className, classNames?.root] })}`}\n >\n {({ isSelected }) => (\n <>\n <span data-slot=\"control\" className={s.control({ class: classNames?.control })}>\n {/* 円の中に字を置くと小さすぎて読めないので、印だけは面で持つ */}\n {isSelected && (\n <span\n aria-hidden=\"true\"\n data-slot=\"indicator\"\n className={s.indicator({ class: classNames?.indicator })}\n />\n )}\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 </>\n )}\n </RACRadio>\n )\n}\n\n/**\n * ラジオボタンのグループ。矢印キーで項目間を移動できる。\n *\n * @example\n * <RadioGroup label=\"配送方法\" value={method} onChange={setMethod}>\n * <Radio value=\"standard\">通常</Radio>\n * <Radio value=\"express\">速達</Radio>\n * </RadioGroup>\n */\nexport function RadioGroup({\n label,\n description,\n errorMessage,\n name,\n value,\n defaultValue,\n onChange,\n orientation,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid,\n children,\n className,\n classNames,\n id,\n}: RadioGroupProps) {\n const s = radioGroupStyles({ orientation })\n\n return (\n <RACRadioGroup\n id={id}\n name={name}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n isInvalid={isInvalid}\n data-slot=\"root\"\n className={s.root({ class: [className, classNames?.root] })}\n >\n {label !== undefined && (\n <Label data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {label}\n </Label>\n )}\n\n <div data-slot=\"list\" className={s.list({ class: classNames?.list })}>\n {children}\n </div>\n\n {description !== undefined && (\n <Text\n slot=\"description\"\n data-slot=\"description\"\n className={s.description({ class: classNames?.description })}\n >\n {description}\n </Text>\n )}\n\n <FieldError\n data-slot=\"errorMessage\"\n className={s.errorMessage({ class: classNames?.errorMessage })}\n >\n {errorMessage}\n </FieldError>\n </RACRadioGroup>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,SAAgBA,QAAM,EACpB,OACA,MACA,OACA,YACA,aACA,UACA,WACA,YACA,MACa;CACb,MAAM,IAAI,YAAY;EAAE;EAAM;CAAM,CAAC;CAErC,OACE,oBAACC,OAAD;EACM;EACG;EACK;EACZ,aAAU;EAEV,WAAW,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAEjE,WAAA,EAAE,iBACF,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GAAM,aAAU;GAAU,WAAW,EAAE,QAAQ,EAAE,OAAO,YAAY,QAAQ,CAAC;GAE1E,UAAA,cACC,oBAAC,QAAD;IACE,eAAY;IACZ,aAAU;IACV,WAAW,EAAE,UAAU,EAAE,OAAO,YAAY,UAAU,CAAC;GACxD,CAAA;EAEC,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;EAER,CAAA,CAAA,EAAA,CAAA;CAEI,CAAA;AAEd;;;;;;;;;;AAWA,SAAgBC,aAAW,EACzB,OACA,aACA,cACA,MACA,OACA,cACA,UACA,aACA,YACA,YACA,YACA,WACA,UACA,WACA,YACA,MACkB;CAClB,MAAM,IAAI,iBAAiB,EAAE,YAAY,CAAC;CAE1C,OACE,qBAACC,YAAD;EACM;EACE;EACC;EACO;EACJ;EACE;EACA;EACA;EACD;EACX,aAAU;EACV,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAX5D,UAAA;GAaG,UAAU,KAAA,KACT,oBAAC,OAAD;IAAO,aAAU;IAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;IACrE,UAAA;GACI,CAAA;GAGT,oBAAC,OAAD;IAAK,aAAU;IAAO,WAAW,EAAE,KAAK,EAAE,OAAO,YAAY,KAAK,CAAC;IAChE;GACE,CAAA;GAEJ,gBAAgB,KAAA,KACf,oBAAC,MAAD;IACE,MAAK;IACL,aAAU;IACV,WAAW,EAAE,YAAY,EAAE,OAAO,YAAY,YAAY,CAAC;IAE1D,UAAA;GACG,CAAA;GAGR,oBAAC,YAAD;IACE,aAAU;IACV,WAAW,EAAE,aAAa,EAAE,OAAO,YAAY,aAAa,CAAC;IAE5D,UAAA;GACS,CAAA;EACC;;AAEnB"}
@@ -0,0 +1,114 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/radio/radio.styles.d.ts
3
+ /**
4
+ * Radio のスタイル定義。
5
+ *
6
+ * @example
7
+ * import { radioStyles } from '@novi-ui/flatlay'
8
+ * import { tv } from 'tailwind-variants'
9
+ *
10
+ * const myRadio = tv({ extend: radioStyles, slots: { label: 'font-medium' } })
11
+ */
12
+ declare const radioStyles: import("tailwind-variants").TVReturnType<{
13
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
14
+ root: string;
15
+ }>;
16
+ size: VariantMap<"sm" | "md" | "lg", {
17
+ control: string;
18
+ indicator: string;
19
+ label: string;
20
+ }>;
21
+ }, {
22
+ root: string;
23
+ control: string;
24
+ indicator: string;
25
+ label: string;
26
+ description: string;
27
+ }, undefined, {
28
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
29
+ root: string;
30
+ }>;
31
+ size: VariantMap<"sm" | "md" | "lg", {
32
+ control: string;
33
+ indicator: string;
34
+ label: string;
35
+ }>;
36
+ }, {
37
+ root: string;
38
+ control: string;
39
+ indicator: string;
40
+ label: string;
41
+ description: string;
42
+ }, import("tailwind-variants").TVReturnTypeLike<{
43
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
44
+ root: string;
45
+ }>;
46
+ size: VariantMap<"sm" | "md" | "lg", {
47
+ control: string;
48
+ indicator: string;
49
+ label: string;
50
+ }>;
51
+ }, {
52
+ root: string;
53
+ control: string;
54
+ indicator: string;
55
+ label: string;
56
+ description: string;
57
+ }>>;
58
+ /**
59
+ * RadioGroup のスタイル定義。
60
+ *
61
+ * @example
62
+ * const myGroup = tv({ extend: radioGroupStyles, slots: { list: 'gap-4' } })
63
+ */
64
+ declare const radioGroupStyles: import("tailwind-variants").TVReturnType<{
65
+ orientation: {
66
+ vertical: {
67
+ list: string;
68
+ };
69
+ horizontal: {
70
+ list: string;
71
+ };
72
+ };
73
+ }, {
74
+ root: string;
75
+ label: string;
76
+ list: string;
77
+ description: string;
78
+ errorMessage: string;
79
+ }, undefined, {
80
+ orientation: {
81
+ vertical: {
82
+ list: string;
83
+ };
84
+ horizontal: {
85
+ list: string;
86
+ };
87
+ };
88
+ }, {
89
+ root: string;
90
+ label: string;
91
+ list: string;
92
+ description: string;
93
+ errorMessage: string;
94
+ }, import("tailwind-variants").TVReturnTypeLike<{
95
+ orientation: {
96
+ vertical: {
97
+ list: string;
98
+ };
99
+ horizontal: {
100
+ list: string;
101
+ };
102
+ };
103
+ }, {
104
+ root: string;
105
+ label: string;
106
+ list: string;
107
+ description: string;
108
+ errorMessage: string;
109
+ }>>;
110
+ type RadioStyleProps = Parameters<typeof radioStyles>[0];
111
+ type RadioGroupStyleProps = Parameters<typeof radioGroupStyles>[0];
112
+ //#endregion
113
+ export { RadioGroupStyleProps, RadioStyleProps, radioGroupStyles, radioStyles };
114
+ //# sourceMappingURL=radio.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.styles.d.mts","names":[],"sources":["../../src/radio/radio.styles.ts"],"mappings":";;;;;;;;;;;cAoEa,yCAAW;;IAzBmB;;;IAUC;IAAmB;IAAe;;;;;;;;;;IAVnC;;;IAUC;IAAmB;IAAe;;;;;;;;;;IAVnC;;;IAUC;IAAmB;IAAe;;;;;;;;;;;;;;;cAoCjE,8CAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWjB,kBAAkB,kBAAkB;KACpC,uBAAuB,kBAAkB"}
@@ -0,0 +1,103 @@
1
+ import { disabledState, focusRing } from "../styles/focus-ring.mjs";
2
+ import { mono } from "../styles/mono.mjs";
3
+ import { tv } from "tailwind-variants";
4
+ //#region src/radio/radio.styles.ts
5
+ /**
6
+ * Flatlay の Radio は**円**。書類の直角(radius 0/2/2/4)に対する数少ない例外。
7
+ *
8
+ * ここで角を守ると Checkbox と同じ形になり、「複数選べる」のか
9
+ * 「1つだけ」なのかが形から読めなくなる。角丸の規律より**形の弁別**が優先する。
10
+ * Avatar と並ぶ `radius-full` の例外で、どちらも意味を形が担っている。
11
+ *
12
+ * 印が Checkbox のような文字ではなく塗りの点なのは、円の中に字を置くと
13
+ * 小さすぎて読めないため。ここだけは記号ではなく面が状態を持つ。
14
+ */
15
+ const slots = {
16
+ root: [
17
+ "inline-flex items-start gap-2",
18
+ "cursor-pointer",
19
+ disabledState
20
+ ].join(" "),
21
+ control: [
22
+ "shrink-0 inline-grid place-items-center",
23
+ "border border-[var(--novi-color-border-strong)]",
24
+ "rounded-[var(--novi-radius-full)]",
25
+ "bg-[var(--novi-color-bg)]",
26
+ "group-data-[selected]:border-[var(--c)]",
27
+ "group-data-[invalid]:border-[var(--novi-color-danger)]",
28
+ "transition-[border-color]",
29
+ "duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]",
30
+ focusRing
31
+ ].join(" "),
32
+ indicator: "rounded-[var(--novi-radius-full)] bg-[var(--c)]",
33
+ label: "text-[var(--novi-color-fg)] leading-[var(--novi-leading-body)]",
34
+ description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`
35
+ };
36
+ /**
37
+ * Radio のスタイル定義。
38
+ *
39
+ * @example
40
+ * import { radioStyles } from '@novi-ui/flatlay'
41
+ * import { tv } from 'tailwind-variants'
42
+ *
43
+ * const myRadio = tv({ extend: radioStyles, slots: { label: 'font-medium' } })
44
+ */
45
+ const radioStyles = tv({
46
+ slots,
47
+ variants: {
48
+ color: {
49
+ default: { root: "[--c:var(--novi-color-fg)]" },
50
+ primary: { root: "[--c:var(--novi-color-primary)]" },
51
+ secondary: { root: "[--c:var(--novi-color-secondary)]" },
52
+ success: { root: "[--c:var(--novi-color-success)]" },
53
+ warning: { root: "[--c:var(--novi-color-warning)]" },
54
+ danger: { root: "[--c:var(--novi-color-danger)]" }
55
+ },
56
+ size: {
57
+ sm: {
58
+ control: "size-3.5",
59
+ indicator: "size-1.5",
60
+ label: "text-[length:var(--novi-text-sm)]"
61
+ },
62
+ md: {
63
+ control: "size-4",
64
+ indicator: "size-2",
65
+ label: "text-[length:var(--novi-text-base)]"
66
+ },
67
+ lg: {
68
+ control: "size-5",
69
+ indicator: "size-2.5",
70
+ label: "text-[length:var(--novi-text-base)]"
71
+ }
72
+ }
73
+ },
74
+ defaultVariants: {
75
+ color: "default",
76
+ size: "md"
77
+ }
78
+ });
79
+ const groupSlots = {
80
+ root: "flex flex-col gap-2",
81
+ label: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-fg)] ${mono}`,
82
+ list: "flex flex-col gap-2",
83
+ description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`,
84
+ errorMessage: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-danger)] ${mono}`
85
+ };
86
+ /**
87
+ * RadioGroup のスタイル定義。
88
+ *
89
+ * @example
90
+ * const myGroup = tv({ extend: radioGroupStyles, slots: { list: 'gap-4' } })
91
+ */
92
+ const radioGroupStyles = tv({
93
+ slots: groupSlots,
94
+ variants: { orientation: {
95
+ vertical: { list: "flex-col gap-2" },
96
+ horizontal: { list: "flex-row gap-4 flex-wrap" }
97
+ } },
98
+ defaultVariants: { orientation: "vertical" }
99
+ });
100
+ //#endregion
101
+ export { radioGroupStyles, radioStyles };
102
+
103
+ //# sourceMappingURL=radio.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.styles.mjs","names":[],"sources":["../../src/radio/radio.styles.ts"],"sourcesContent":["import type {\n NoviColor,\n NoviSize,\n radioGroupRequiredSlots,\n radioGroupSlots,\n radioRequiredSlots,\n radioSlots,\n SlotMap,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\nimport { disabledState, focusRing } from '../styles/focus-ring'\nimport { mono } from '../styles/mono'\n\n/**\n * Flatlay の Radio は**円**。書類の直角(radius 0/2/2/4)に対する数少ない例外。\n *\n * ここで角を守ると Checkbox と同じ形になり、「複数選べる」のか\n * 「1つだけ」なのかが形から読めなくなる。角丸の規律より**形の弁別**が優先する。\n * Avatar と並ぶ `radius-full` の例外で、どちらも意味を形が担っている。\n *\n * 印が Checkbox のような文字ではなく塗りの点なのは、円の中に字を置くと\n * 小さすぎて読めないため。ここだけは記号ではなく面が状態を持つ。\n */\nconst slots = {\n root: ['inline-flex items-start gap-2', 'cursor-pointer', disabledState].join(' '),\n control: [\n 'shrink-0 inline-grid place-items-center',\n 'border border-[var(--novi-color-border-strong)]',\n 'rounded-[var(--novi-radius-full)]',\n 'bg-[var(--novi-color-bg)]',\n 'group-data-[selected]:border-[var(--c)]',\n 'group-data-[invalid]:border-[var(--novi-color-danger)]',\n 'transition-[border-color]',\n 'duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n focusRing,\n ].join(' '),\n // 内側の点で示す。枠ごと塗り潰すと Checkbox の選択と同じ見え方になる\n indicator: 'rounded-[var(--novi-radius-full)] bg-[var(--c)]',\n label: 'text-[var(--novi-color-fg)] leading-[var(--novi-leading-body)]',\n description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`,\n} satisfies SlotMap<typeof radioSlots, (typeof radioRequiredSlots)[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\n/** Checkbox と同じ 14 / 16 / 20px。並べたときに列が揃わないと帳票として読めない。 */\nconst size: VariantMap<NoviSize, { control: string; indicator: string; label: string }> = {\n sm: { control: 'size-3.5', indicator: 'size-1.5', label: 'text-[length:var(--novi-text-sm)]' },\n md: { control: 'size-4', indicator: 'size-2', label: 'text-[length:var(--novi-text-base)]' },\n lg: { control: 'size-5', indicator: 'size-2.5', label: 'text-[length:var(--novi-text-base)]' },\n}\n\n/**\n * Radio のスタイル定義。\n *\n * @example\n * import { radioStyles } from '@novi-ui/flatlay'\n * import { tv } from 'tailwind-variants'\n *\n * const myRadio = tv({ extend: radioStyles, slots: { label: 'font-medium' } })\n */\nexport const radioStyles = tv({\n slots,\n variants: { color, size },\n defaultVariants: { color: 'default', size: 'md' },\n})\n\nconst groupSlots = {\n root: 'flex flex-col gap-2',\n // 項目名は等幅(Input / CheckboxGroup と同じ扱い・ADR-F7)\n label: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-fg)] ${mono}`,\n list: 'flex flex-col gap-2',\n description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`,\n errorMessage: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-danger)] ${mono}`,\n} satisfies SlotMap<typeof radioGroupSlots, (typeof radioGroupRequiredSlots)[number]>\n\n/**\n * RadioGroup のスタイル定義。\n *\n * @example\n * const myGroup = tv({ extend: radioGroupStyles, slots: { list: 'gap-4' } })\n */\nexport const radioGroupStyles = tv({\n slots: groupSlots,\n variants: {\n orientation: {\n vertical: { list: 'flex-col gap-2' },\n horizontal: { list: 'flex-row gap-4 flex-wrap' },\n },\n },\n defaultVariants: { orientation: 'vertical' },\n})\n\nexport type RadioStyleProps = Parameters<typeof radioStyles>[0]\nexport type RadioGroupStyleProps = Parameters<typeof radioGroupStyles>[0]\n"],"mappings":";;;;;;;;;;;;;;AAwBA,MAAM,QAAQ;CACZ,MAAM;EAAC;EAAiC;EAAkB;CAAa,CAAC,CAAC,KAAK,GAAG;CACjF,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,WAAW;CACX,OAAO;CACP,aAAa,oEAAoE;AACnF;;;;;;;;;;AA2BA,MAAa,cAAc,GAAG;CAC5B;CACA,UAAU;EAAE;GA1BZ,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;EAqBrC;EAAO;GAhBnB,IAAI;IAAE,SAAS;IAAY,WAAW;IAAY,OAAO;GAAoC;GAC7F,IAAI;IAAE,SAAS;IAAU,WAAW;IAAU,OAAO;GAAsC;GAC3F,IAAI;IAAE,SAAS;IAAU,WAAW;IAAY,OAAO;GAAsC;EAc1E;CAAK;CACxB,iBAAiB;EAAE,OAAO;EAAW,MAAM;CAAK;AAClD,CAAC;AAED,MAAM,aAAa;CACjB,MAAM;CAEN,OAAO,iEAAiE;CACxE,MAAM;CACN,aAAa,oEAAoE;CACjF,cAAc,qEAAqE;AACrF;;;;;;;AAQA,MAAa,mBAAmB,GAAG;CACjC,OAAO;CACP,UAAU,EACR,aAAa;EACX,UAAU,EAAE,MAAM,iBAAiB;EACnC,YAAY,EAAE,MAAM,2BAA2B;CACjD,EACF;CACA,iBAAiB,EAAE,aAAa,WAAW;AAC7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Select, SelectItem, SelectItemProps } from "./select.mjs";
2
+ import { SelectStyleProps, selectStyles } from "./select.styles.mjs";
3
+ export { Select, SelectItem, type SelectItemProps, type SelectStyleProps, selectStyles };