@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,96 @@
1
+ "use client";
2
+ import { cardStyles } from "./card.styles.mjs";
3
+ import { Button } from "react-aria-components";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/card/card.tsx
6
+ /**
7
+ * Card の見出し部分。下端が罫線で仕切られる。
8
+ *
9
+ * @example
10
+ * <CardHeader>売上</CardHeader>
11
+ */
12
+ function CardHeader({ children, className }) {
13
+ return /* @__PURE__ */ jsx("div", {
14
+ "data-slot": "header",
15
+ className: cardStyles().header({ class: className }),
16
+ children
17
+ });
18
+ }
19
+ /**
20
+ * Card の本体。
21
+ *
22
+ * @example
23
+ * <CardBody>¥1,240,000</CardBody>
24
+ */
25
+ function CardBody({ children, className }) {
26
+ return /* @__PURE__ */ jsx("div", {
27
+ "data-slot": "body",
28
+ className: cardStyles().body({ class: className }),
29
+ children
30
+ });
31
+ }
32
+ /**
33
+ * Card の脚部。上端が罫線で仕切られる。
34
+ *
35
+ * @example
36
+ * <CardFooter>前月比 +12%</CardFooter>
37
+ */
38
+ function CardFooter({ children, className }) {
39
+ return /* @__PURE__ */ jsx("div", {
40
+ "data-slot": "footer",
41
+ className: cardStyles().footer({ class: className }),
42
+ children
43
+ });
44
+ }
45
+ /**
46
+ * Card の上部に置く画像。
47
+ *
48
+ * @example
49
+ * <CardImage src="/thumb.jpg" alt="" />
50
+ */
51
+ function CardImage({ className, alt = "", ...props }) {
52
+ return /* @__PURE__ */ jsx("img", {
53
+ ...props,
54
+ alt,
55
+ "data-slot": "image",
56
+ className: cardStyles().image({ class: className })
57
+ });
58
+ }
59
+ /**
60
+ * 情報のまとまりを囲む器。
61
+ *
62
+ * Flatlay では**書類の枠**。影が存在しないので、枠の罫線と区切りの罫線だけで
63
+ * まとまりを作る。`onPress` を渡すと押せるカードになり、押下で全面が反転する。
64
+ *
65
+ * @example
66
+ * <Card>
67
+ * <CardHeader>売上</CardHeader>
68
+ * <CardBody>¥1,240,000</CardBody>
69
+ * </Card>
70
+ */
71
+ function Card({ variant, radius, onPress, isDisabled, children, className, classNames, id }) {
72
+ const isPressable = onPress !== void 0;
73
+ const rootClass = cardStyles({
74
+ variant,
75
+ radius,
76
+ isPressable
77
+ }).root({ class: [className, classNames?.root] });
78
+ if (isPressable) return /* @__PURE__ */ jsx(Button, {
79
+ id,
80
+ onPress,
81
+ isDisabled,
82
+ "data-slot": "root",
83
+ className: rootClass,
84
+ children
85
+ });
86
+ return /* @__PURE__ */ jsx("div", {
87
+ id,
88
+ "data-slot": "root",
89
+ className: rootClass,
90
+ children
91
+ });
92
+ }
93
+ //#endregion
94
+ export { Card, CardBody, CardFooter, CardHeader, CardImage };
95
+
96
+ //# sourceMappingURL=card.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.mjs","names":[],"sources":["../../src/card/card.tsx"],"sourcesContent":["'use client'\n\nimport type { CardProps } from '@novi-ui/core'\nimport type { ImgHTMLAttributes, ReactNode } from 'react'\nimport { Button } from 'react-aria-components'\nimport { cardStyles } from './card.styles'\n\ninterface PartProps {\n children?: ReactNode\n className?: string\n}\n\n/**\n * Card の見出し部分。下端が罫線で仕切られる。\n *\n * @example\n * <CardHeader>売上</CardHeader>\n */\nexport function CardHeader({ children, className }: PartProps) {\n return (\n <div data-slot=\"header\" className={cardStyles().header({ class: className })}>\n {children}\n </div>\n )\n}\n\n/**\n * Card の本体。\n *\n * @example\n * <CardBody>¥1,240,000</CardBody>\n */\nexport function CardBody({ children, className }: PartProps) {\n return (\n <div data-slot=\"body\" className={cardStyles().body({ class: className })}>\n {children}\n </div>\n )\n}\n\n/**\n * Card の脚部。上端が罫線で仕切られる。\n *\n * @example\n * <CardFooter>前月比 +12%</CardFooter>\n */\nexport function CardFooter({ children, className }: PartProps) {\n return (\n <div data-slot=\"footer\" className={cardStyles().footer({ class: className })}>\n {children}\n </div>\n )\n}\n\n/**\n * Card の上部に置く画像。\n *\n * @example\n * <CardImage src=\"/thumb.jpg\" alt=\"\" />\n */\nexport function CardImage({ className, alt = '', ...props }: ImgHTMLAttributes<HTMLImageElement>) {\n return (\n <img\n {...props}\n alt={alt}\n data-slot=\"image\"\n className={cardStyles().image({ class: className })}\n />\n )\n}\n\n/**\n * 情報のまとまりを囲む器。\n *\n * Flatlay では**書類の枠**。影が存在しないので、枠の罫線と区切りの罫線だけで\n * まとまりを作る。`onPress` を渡すと押せるカードになり、押下で全面が反転する。\n *\n * @example\n * <Card>\n * <CardHeader>売上</CardHeader>\n * <CardBody>¥1,240,000</CardBody>\n * </Card>\n */\nexport function Card({\n variant,\n radius,\n onPress,\n isDisabled,\n children,\n className,\n classNames,\n id,\n}: CardProps) {\n const isPressable = onPress !== undefined\n const s = cardStyles({ variant, radius, isPressable })\n const rootClass = s.root({ class: [className, classNames?.root] })\n\n if (isPressable) {\n return (\n <Button\n id={id}\n onPress={onPress}\n isDisabled={isDisabled}\n data-slot=\"root\"\n className={rootClass}\n >\n {children}\n </Button>\n )\n }\n\n return (\n <div id={id} data-slot=\"root\" className={rootClass}>\n {children}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAgB,WAAW,EAAE,UAAU,aAAwB;CAC7D,OACE,oBAAC,OAAD;EAAK,aAAU;EAAS,WAAW,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC;EACxE;CACE,CAAA;AAET;;;;;;;AAQA,SAAgB,SAAS,EAAE,UAAU,aAAwB;CAC3D,OACE,oBAAC,OAAD;EAAK,aAAU;EAAO,WAAW,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC;EACpE;CACE,CAAA;AAET;;;;;;;AAQA,SAAgB,WAAW,EAAE,UAAU,aAAwB;CAC7D,OACE,oBAAC,OAAD;EAAK,aAAU;EAAS,WAAW,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC;EACxE;CACE,CAAA;AAET;;;;;;;AAQA,SAAgB,UAAU,EAAE,WAAW,MAAM,IAAI,GAAG,SAA8C;CAChG,OACE,oBAAC,OAAD;EACE,GAAI;EACC;EACL,aAAU;EACV,WAAW,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC;CACnD,CAAA;AAEL;;;;;;;;;;;;;AAcA,SAAgB,KAAK,EACnB,SACA,QACA,SACA,YACA,UACA,WACA,YACA,MACY;CACZ,MAAM,cAAc,YAAY,KAAA;CAEhC,MAAM,YADI,WAAW;EAAE;EAAS;EAAQ;CAAY,CAClC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;CAEjE,IAAI,aACF,OACE,oBAAC,QAAD;EACM;EACK;EACG;EACZ,aAAU;EACV,WAAW;EAEV;CACK,CAAA;CAIZ,OACE,oBAAC,OAAD;EAAS;EAAI,aAAU;EAAO,WAAW;EACtC;CACE,CAAA;AAET"}
@@ -0,0 +1,73 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/card/card.styles.d.ts
3
+ /**
4
+ * Card のスタイル定義。
5
+ *
6
+ * 押せるカードも押下は反転する(ADR-F3)。面積が大きいぶん声も大きいが、
7
+ * 沈む・浮くが使えない以上ここだけ別の語彙にはできない。100ms で戻る。
8
+ *
9
+ * @example
10
+ * const myCard = tv({ extend: cardStyles, slots: { body: 'p-6' } })
11
+ */
12
+ declare const cardStyles: import("tailwind-variants").TVReturnType<{
13
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
14
+ root: string;
15
+ }>;
16
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
17
+ root: string;
18
+ }>;
19
+ isPressable: {
20
+ true: {
21
+ root: string;
22
+ };
23
+ false: {};
24
+ };
25
+ }, {
26
+ root: string;
27
+ header: string;
28
+ body: string;
29
+ footer: string;
30
+ image: string;
31
+ }, undefined, {
32
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
33
+ root: string;
34
+ }>;
35
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
36
+ root: string;
37
+ }>;
38
+ isPressable: {
39
+ true: {
40
+ root: string;
41
+ };
42
+ false: {};
43
+ };
44
+ }, {
45
+ root: string;
46
+ header: string;
47
+ body: string;
48
+ footer: string;
49
+ image: string;
50
+ }, import("tailwind-variants").TVReturnTypeLike<{
51
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
52
+ root: string;
53
+ }>;
54
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
55
+ root: string;
56
+ }>;
57
+ isPressable: {
58
+ true: {
59
+ root: string;
60
+ };
61
+ false: {};
62
+ };
63
+ }, {
64
+ root: string;
65
+ header: string;
66
+ body: string;
67
+ footer: string;
68
+ image: string;
69
+ }>>;
70
+ type CardStyleProps = Parameters<typeof cardStyles>[0];
71
+ //#endregion
72
+ export { CardStyleProps, cardStyles };
73
+ //# sourceMappingURL=card.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.styles.d.mts","names":[],"sources":["../../src/card/card.styles.ts"],"mappings":";;;;;;;;;;;cA0Da,wCAAU;;IAzBwB;;;IAQF;;;;;;;;;;;;;;;;IARE;;;IAQF;;;;;;;;;;;;;;;;IARE;;;IAQF;;;;;;;;;;;;;;;KAyCjC,iBAAiB,kBAAkB"}
@@ -0,0 +1,72 @@
1
+ import { disabledState, focusRing } from "../styles/focus-ring.mjs";
2
+ import { tv } from "tailwind-variants";
3
+ //#region src/card/card.styles.ts
4
+ /**
5
+ * Flatlay の Card は**書類の枠**。両テーマも影は使わないが、こちらは
6
+ * 「影を使わない」ではなく「影が存在しない」ので、枠と区切りが唯一の表現になる。
7
+ *
8
+ * `surface` が `bg` と同値(浮く面の概念が無い)ため、地の色で面を持ち上げることも
9
+ * できない。header / footer を仕切るのも背景ではなく罫線1本。
10
+ */
11
+ const slots = {
12
+ root: [
13
+ "text-[var(--novi-color-fg)]",
14
+ "flex flex-col",
15
+ "border",
16
+ "rounded-[var(--novi-radius-sm)]",
17
+ "overflow-hidden"
18
+ ].join(" "),
19
+ header: "px-3 py-2 border-b border-[var(--novi-color-border)]",
20
+ body: "px-3 py-3 flex-1",
21
+ footer: "px-3 py-2 border-t border-[var(--novi-color-border)]",
22
+ image: "w-full object-cover"
23
+ };
24
+ /**
25
+ * Card のスタイル定義。
26
+ *
27
+ * 押せるカードも押下は反転する(ADR-F3)。面積が大きいぶん声も大きいが、
28
+ * 沈む・浮くが使えない以上ここだけ別の語彙にはできない。100ms で戻る。
29
+ *
30
+ * @example
31
+ * const myCard = tv({ extend: cardStyles, slots: { body: 'p-6' } })
32
+ */
33
+ const cardStyles = tv({
34
+ slots,
35
+ variants: {
36
+ variant: {
37
+ solid: { root: "bg-[var(--novi-color-subtle)] border-[var(--novi-color-border-strong)]" },
38
+ outline: { root: "bg-[var(--novi-color-bg)] border-[var(--novi-color-border-strong)]" },
39
+ soft: { root: "bg-[var(--novi-color-subtle)] border-[var(--novi-color-border)]" },
40
+ ghost: { root: "bg-transparent border-transparent" },
41
+ plain: { root: "bg-transparent border-transparent" }
42
+ },
43
+ radius: {
44
+ none: { root: "rounded-[var(--novi-radius-none)]" },
45
+ sm: { root: "rounded-[var(--novi-radius-sm)]" },
46
+ md: { root: "rounded-[var(--novi-radius-md)]" },
47
+ lg: { root: "rounded-[var(--novi-radius-lg)]" },
48
+ full: { root: "rounded-[var(--novi-radius-full)]" }
49
+ },
50
+ isPressable: {
51
+ true: { root: [
52
+ "text-left cursor-pointer",
53
+ "hover:border-[var(--novi-color-border-strong)]",
54
+ "data-[pressed]:bg-[var(--novi-color-fg)] data-[pressed]:text-[var(--novi-color-bg)]",
55
+ "transition-[background-color,border-color,color]",
56
+ "duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]",
57
+ focusRing,
58
+ disabledState
59
+ ].join(" ") },
60
+ false: {}
61
+ }
62
+ },
63
+ defaultVariants: {
64
+ variant: "outline",
65
+ radius: "sm",
66
+ isPressable: false
67
+ }
68
+ });
69
+ //#endregion
70
+ export { cardStyles };
71
+
72
+ //# sourceMappingURL=card.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.styles.mjs","names":[],"sources":["../../src/card/card.styles.ts"],"sourcesContent":["import type {\n cardRequiredSlots,\n cardSlots,\n NoviRadius,\n NoviVariant,\n SlotMap,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\nimport { disabledState, focusRing } from '../styles/focus-ring'\n\n/**\n * Flatlay の Card は**書類の枠**。両テーマも影は使わないが、こちらは\n * 「影を使わない」ではなく「影が存在しない」ので、枠と区切りが唯一の表現になる。\n *\n * `surface` が `bg` と同値(浮く面の概念が無い)ため、地の色で面を持ち上げることも\n * できない。header / footer を仕切るのも背景ではなく罫線1本。\n */\nconst slots = {\n root: [\n 'text-[var(--novi-color-fg)]',\n 'flex flex-col',\n 'border',\n 'rounded-[var(--novi-radius-sm)]',\n 'overflow-hidden',\n ].join(' '),\n // header と footer は罫線で仕切る。地の色を変えて面を増やさない\n header: 'px-3 py-2 border-b border-[var(--novi-color-border)]',\n body: 'px-3 py-3 flex-1',\n footer: 'px-3 py-2 border-t border-[var(--novi-color-border)]',\n image: 'w-full object-cover',\n} satisfies SlotMap<typeof cardSlots, (typeof cardRequiredSlots)[number]>\n\nconst variant: VariantMap<NoviVariant, { root: string }> = {\n solid: { root: 'bg-[var(--novi-color-subtle)] border-[var(--novi-color-border-strong)]' },\n outline: { root: 'bg-[var(--novi-color-bg)] border-[var(--novi-color-border-strong)]' },\n soft: { root: 'bg-[var(--novi-color-subtle)] border-[var(--novi-color-border)]' },\n ghost: { root: 'bg-transparent border-transparent' },\n plain: { root: 'bg-transparent border-transparent' },\n}\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 * Card のスタイル定義。\n *\n * 押せるカードも押下は反転する(ADR-F3)。面積が大きいぶん声も大きいが、\n * 沈む・浮くが使えない以上ここだけ別の語彙にはできない。100ms で戻る。\n *\n * @example\n * const myCard = tv({ extend: cardStyles, slots: { body: 'p-6' } })\n */\nexport const cardStyles = tv({\n slots,\n variants: {\n variant,\n radius,\n isPressable: {\n true: {\n root: [\n 'text-left cursor-pointer',\n 'hover:border-[var(--novi-color-border-strong)]',\n 'data-[pressed]:bg-[var(--novi-color-fg)] data-[pressed]:text-[var(--novi-color-bg)]',\n 'transition-[background-color,border-color,color]',\n 'duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n focusRing,\n disabledState,\n ].join(' '),\n },\n false: {},\n },\n },\n // 書類の角。Raster の lg(12px)に対して 2px\n defaultVariants: { variant: 'outline', radius: 'sm', isPressable: false },\n})\n\nexport type CardStyleProps = Parameters<typeof cardStyles>[0]\n"],"mappings":";;;;;;;;;;AAkBA,MAAM,QAAQ;CACZ,MAAM;EACJ;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,OAAO;AACT;;;;;;;;;;AA2BA,MAAa,aAAa,GAAG;CAC3B;CACA,UAAU;EACR;GA3BF,OAAO,EAAE,MAAM,yEAAyE;GACxF,SAAS,EAAE,MAAM,qEAAqE;GACtF,MAAM,EAAE,MAAM,kEAAkE;GAChF,OAAO,EAAE,MAAM,oCAAoC;GACnD,OAAO,EAAE,MAAM,oCAAoC;EAuBjD;EACA;GApBF,MAAM,EAAE,MAAM,oCAAoC;GAClD,IAAI,EAAE,MAAM,kCAAkC;GAC9C,IAAI,EAAE,MAAM,kCAAkC;GAC9C,IAAI,EAAE,MAAM,kCAAkC;GAC9C,MAAM,EAAE,MAAM,oCAAoC;EAgBhD;EACA,aAAa;GACX,MAAM,EACJ,MAAM;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;GACF,CAAC,CAAC,KAAK,GAAG,EACZ;GACA,OAAO,CAAC;EACV;CACF;CAEA,iBAAiB;EAAE,SAAS;EAAW,QAAQ;EAAM,aAAa;CAAM;AAC1E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Card, CardBody, CardFooter, CardHeader, CardImage } from "./card.mjs";
2
+ import { CardStyleProps, cardStyles } from "./card.styles.mjs";
3
+ export { Card, CardBody, CardFooter, CardHeader, CardImage, type CardStyleProps, cardStyles };
@@ -0,0 +1,27 @@
1
+ import { CheckboxGroupProps, CheckboxProps } from "@novi-ui/core";
2
+ //#region src/checkbox/checkbox.d.ts
3
+ /**
4
+ * チェックボックス。**2px 角の箱に等幅の印を入れる**。
5
+ *
6
+ * 印が図形ではなく文字なのは、帳票の記号が書くものだから(ADR-F7)。
7
+ * 選ぶと箱が塗り潰され、印が地色で立つ。
8
+ *
9
+ * @example
10
+ * <Checkbox isSelected={agreed} onChange={setAgreed}>
11
+ * 利用規約に同意する
12
+ * </Checkbox>
13
+ */
14
+ declare function Checkbox({ size, color, value, isSelected, defaultSelected, onChange, isIndeterminate, isDisabled, isReadOnly, isRequired, isInvalid, description, children, className, classNames, id }: CheckboxProps): import("react").JSX.Element;
15
+ /**
16
+ * チェックボックスのグループ。ラベルとエラーをまとめて扱う。
17
+ *
18
+ * @example
19
+ * <CheckboxGroup label="通知方法" value={ways} onChange={setWays}>
20
+ * <Checkbox value="email">メール</Checkbox>
21
+ * <Checkbox value="sms">SMS</Checkbox>
22
+ * </CheckboxGroup>
23
+ */
24
+ declare function CheckboxGroup({ label, description, errorMessage, name, value, defaultValue, onChange, orientation, isDisabled, isReadOnly, isRequired, isInvalid, children, className, classNames, id }: CheckboxGroupProps): import("react").JSX.Element;
25
+ //#endregion
26
+ export { Checkbox, CheckboxGroup };
27
+ //# sourceMappingURL=checkbox.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.mts","names":[],"sources":["../../src/checkbox/checkbox.tsx"],"mappings":";;;;;;;;;;;;;iBAuBgB,WACd,MACA,OACA,OACA,YACA,iBACA,UACA,iBACA,YACA,YACA,YACA,WACA,aACA,UACA,WACA,YACA,MACC,gCAAa,IAAA;;;;;;;;;;iBAgEA,gBACd,OACA,aACA,cACA,MACA,OACA,cACA,UACA,aACA,YACA,YACA,YACA,WACA,UACA,WACA,YACA,MACC,qCAAkB,IAAA"}
@@ -0,0 +1,109 @@
1
+ "use client";
2
+ import { checkboxGroupStyles, checkboxStyles } from "./checkbox.styles.mjs";
3
+ import { Checkbox, CheckboxGroup, FieldError, Label, Text } from "react-aria-components";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/checkbox/checkbox.tsx
6
+ /**
7
+ * チェックボックス。**2px 角の箱に等幅の印を入れる**。
8
+ *
9
+ * 印が図形ではなく文字なのは、帳票の記号が書くものだから(ADR-F7)。
10
+ * 選ぶと箱が塗り潰され、印が地色で立つ。
11
+ *
12
+ * @example
13
+ * <Checkbox isSelected={agreed} onChange={setAgreed}>
14
+ * 利用規約に同意する
15
+ * </Checkbox>
16
+ */
17
+ function Checkbox$1({ size, color, value, isSelected, defaultSelected, onChange, isIndeterminate, isDisabled, isReadOnly, isRequired, isInvalid, description, children, className, classNames, id }) {
18
+ const s = checkboxStyles({
19
+ size,
20
+ color
21
+ });
22
+ return /* @__PURE__ */ jsx(Checkbox, {
23
+ id,
24
+ value,
25
+ isSelected,
26
+ defaultSelected,
27
+ onChange,
28
+ isIndeterminate,
29
+ isDisabled,
30
+ isReadOnly,
31
+ isRequired,
32
+ isInvalid,
33
+ "data-slot": "root",
34
+ className: `group ${s.root({ class: [className, classNames?.root] })}`,
35
+ children: ({ isSelected: selected, isIndeterminate: indeterminate }) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
36
+ "data-slot": "control",
37
+ className: s.control({ class: classNames?.control }),
38
+ children: (selected || indeterminate) && /* @__PURE__ */ jsx("span", {
39
+ "aria-hidden": "true",
40
+ "data-slot": "indicator",
41
+ className: s.indicator({ class: classNames?.indicator }),
42
+ children: indeterminate ? "−" : "✓"
43
+ })
44
+ }), children !== void 0 && /* @__PURE__ */ jsxs("span", {
45
+ className: "flex flex-col gap-0.5",
46
+ children: [/* @__PURE__ */ jsx("span", {
47
+ "data-slot": "label",
48
+ className: s.label({ class: classNames?.label }),
49
+ children
50
+ }), description !== void 0 && /* @__PURE__ */ jsx("span", {
51
+ "data-slot": "description",
52
+ className: s.description({ class: classNames?.description }),
53
+ children: description
54
+ })]
55
+ })] })
56
+ });
57
+ }
58
+ /**
59
+ * チェックボックスのグループ。ラベルとエラーをまとめて扱う。
60
+ *
61
+ * @example
62
+ * <CheckboxGroup label="通知方法" value={ways} onChange={setWays}>
63
+ * <Checkbox value="email">メール</Checkbox>
64
+ * <Checkbox value="sms">SMS</Checkbox>
65
+ * </CheckboxGroup>
66
+ */
67
+ function CheckboxGroup$1({ label, description, errorMessage, name, value, defaultValue, onChange, orientation, isDisabled, isReadOnly, isRequired, isInvalid, children, className, classNames, id }) {
68
+ const s = checkboxGroupStyles({ orientation });
69
+ return /* @__PURE__ */ jsxs(CheckboxGroup, {
70
+ id,
71
+ name,
72
+ value,
73
+ defaultValue,
74
+ onChange,
75
+ isDisabled,
76
+ isReadOnly,
77
+ isRequired,
78
+ isInvalid,
79
+ "data-slot": "root",
80
+ className: s.root({ class: [className, classNames?.root] }),
81
+ children: [
82
+ label !== void 0 && /* @__PURE__ */ jsx(Label, {
83
+ "data-slot": "label",
84
+ className: s.label({ class: classNames?.label }),
85
+ children: label
86
+ }),
87
+ /* @__PURE__ */ jsx("div", {
88
+ "data-slot": "list",
89
+ className: s.list({ class: classNames?.list }),
90
+ children
91
+ }),
92
+ description !== void 0 && /* @__PURE__ */ jsx(Text, {
93
+ slot: "description",
94
+ "data-slot": "description",
95
+ className: s.description({ class: classNames?.description }),
96
+ children: description
97
+ }),
98
+ /* @__PURE__ */ jsx(FieldError, {
99
+ "data-slot": "errorMessage",
100
+ className: s.errorMessage({ class: classNames?.errorMessage }),
101
+ children: errorMessage
102
+ })
103
+ ]
104
+ });
105
+ }
106
+ //#endregion
107
+ export { Checkbox$1 as Checkbox, CheckboxGroup$1 as CheckboxGroup };
108
+
109
+ //# sourceMappingURL=checkbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.mjs","names":["Checkbox","RACCheckbox","CheckboxGroup","RACCheckboxGroup"],"sources":["../../src/checkbox/checkbox.tsx"],"sourcesContent":["'use client'\n\nimport type { CheckboxGroupProps, CheckboxProps } from '@novi-ui/core'\nimport {\n FieldError,\n Label,\n Checkbox as RACCheckbox,\n CheckboxGroup as RACCheckboxGroup,\n Text,\n} from 'react-aria-components'\nimport { checkboxGroupStyles, checkboxStyles } from './checkbox.styles'\n\n/**\n * チェックボックス。**2px 角の箱に等幅の印を入れる**。\n *\n * 印が図形ではなく文字なのは、帳票の記号が書くものだから(ADR-F7)。\n * 選ぶと箱が塗り潰され、印が地色で立つ。\n *\n * @example\n * <Checkbox isSelected={agreed} onChange={setAgreed}>\n * 利用規約に同意する\n * </Checkbox>\n */\nexport function Checkbox({\n size,\n color,\n value,\n isSelected,\n defaultSelected,\n onChange,\n isIndeterminate,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid,\n description,\n children,\n className,\n classNames,\n id,\n}: CheckboxProps) {\n const s = checkboxStyles({ size, color })\n\n return (\n <RACCheckbox\n id={id}\n value={value}\n isSelected={isSelected}\n defaultSelected={defaultSelected}\n onChange={onChange}\n isIndeterminate={isIndeterminate}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n isInvalid={isInvalid}\n data-slot=\"root\"\n // control 側から選択状態を参照するために group を付ける\n className={`group ${s.root({ class: [className, classNames?.root] })}`}\n >\n {({ isSelected: selected, isIndeterminate: indeterminate }) => (\n <>\n <span data-slot=\"control\" className={s.control({ class: classNames?.control })}>\n {(selected || indeterminate) && (\n <span\n aria-hidden=\"true\"\n data-slot=\"indicator\"\n className={s.indicator({ class: classNames?.indicator })}\n >\n {/* 一部だけ選ばれている状態は「まだ書き切っていない」ので横線 */}\n {indeterminate ? '−' : '✓'}\n </span>\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 </RACCheckbox>\n )\n}\n\n/**\n * チェックボックスのグループ。ラベルとエラーをまとめて扱う。\n *\n * @example\n * <CheckboxGroup label=\"通知方法\" value={ways} onChange={setWays}>\n * <Checkbox value=\"email\">メール</Checkbox>\n * <Checkbox value=\"sms\">SMS</Checkbox>\n * </CheckboxGroup>\n */\nexport function CheckboxGroup({\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}: CheckboxGroupProps) {\n const s = checkboxGroupStyles({ orientation })\n\n return (\n <RACCheckboxGroup\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 </RACCheckboxGroup>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAuBA,SAAgBA,WAAS,EACvB,MACA,OACA,OACA,YACA,iBACA,UACA,iBACA,YACA,YACA,YACA,WACA,aACA,UACA,WACA,YACA,MACgB;CAChB,MAAM,IAAI,eAAe;EAAE;EAAM;CAAM,CAAC;CAExC,OACE,oBAACC,UAAD;EACM;EACG;EACK;EACK;EACP;EACO;EACL;EACA;EACA;EACD;EACX,aAAU;EAEV,WAAW,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAEjE,WAAA,EAAE,YAAY,UAAU,iBAAiB,oBACzC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GAAM,aAAU;GAAU,WAAW,EAAE,QAAQ,EAAE,OAAO,YAAY,QAAQ,CAAC;GACzE,WAAA,YAAY,kBACZ,oBAAC,QAAD;IACE,eAAY;IACZ,aAAU;IACV,WAAW,EAAE,UAAU,EAAE,OAAO,YAAY,UAAU,CAAC;IAGtD,UAAA,gBAAgB,MAAM;GACnB,CAAA;EAEJ,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;CAEO,CAAA;AAEjB;;;;;;;;;;AAWA,SAAgBC,gBAAc,EAC5B,OACA,aACA,cACA,MACA,OACA,cACA,UACA,aACA,YACA,YACA,YACA,WACA,UACA,WACA,YACA,MACqB;CACrB,MAAM,IAAI,oBAAoB,EAAE,YAAY,CAAC;CAE7C,OACE,qBAACC,eAAD;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;EACI;;AAEtB"}
@@ -0,0 +1,114 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/checkbox/checkbox.styles.d.ts
3
+ /**
4
+ * Checkbox のスタイル定義。
5
+ *
6
+ * @example
7
+ * import { checkboxStyles } from '@novi-ui/flatlay'
8
+ * import { tv } from 'tailwind-variants'
9
+ *
10
+ * const myCheckbox = tv({ extend: checkboxStyles, slots: { label: 'font-medium' } })
11
+ */
12
+ declare const checkboxStyles: 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
+ * CheckboxGroup のスタイル定義。
60
+ *
61
+ * @example
62
+ * const myGroup = tv({ extend: checkboxGroupStyles, slots: { list: 'gap-4' } })
63
+ */
64
+ declare const checkboxGroupStyles: 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 CheckboxStyleProps = Parameters<typeof checkboxStyles>[0];
111
+ type CheckboxGroupStyleProps = Parameters<typeof checkboxGroupStyles>[0];
112
+ //#endregion
113
+ export { CheckboxGroupStyleProps, CheckboxStyleProps, checkboxGroupStyles, checkboxStyles };
114
+ //# sourceMappingURL=checkbox.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.styles.d.mts","names":[],"sources":["../../src/checkbox/checkbox.styles.ts"],"mappings":";;;;;;;;;;;cA0Fa,4CAAc;;IA1CgB;;;IAeC;IAAmB;IAAe;;;;;;;;;;IAfnC;;;IAeC;IAAmB;IAAe;;;;;;;;;;IAfnC;;;IAeC;IAAmB;IAAe;;;;;;;;;;;;;;;cAgDjE,iDAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWpB,qBAAqB,kBAAkB;KACvC,0BAA0B,kBAAkB"}
@@ -0,0 +1,105 @@
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/checkbox/checkbox.styles.ts
5
+ /**
6
+ * Flatlay の Checkbox は**用紙の記入欄**。2px 角の箱に印を入れる。
7
+ *
8
+ * 印が SVG ではなく文字(`✓` / `−`)なのは ADR-F7 の運用。帳票の記号は
9
+ * 書くものであって描くものではないので、等幅の字として出す。線幅を持つ図形を
10
+ * 足すと、罫線だけで階層を作っているこのテーマの中で唯一の「絵」になってしまう。
11
+ *
12
+ * 選ぶと箱が塗り潰されて印が地色で立つ。押下の反転(ADR-F3)と同じ形だが、
13
+ * こちらは**状態として残る**。押した瞬間との差は持続するかどうかだけで、
14
+ * 語彙をひとつに保つほうが手応えが読める。
15
+ */
16
+ const slots = {
17
+ root: [
18
+ "inline-flex items-start gap-2",
19
+ "cursor-pointer",
20
+ disabledState
21
+ ].join(" "),
22
+ control: [
23
+ "shrink-0 inline-grid place-items-center",
24
+ "border border-[var(--novi-color-border-strong)]",
25
+ "rounded-[var(--novi-radius-sm)]",
26
+ "bg-[var(--novi-color-bg)]",
27
+ "group-data-[selected]:bg-[var(--c)] group-data-[selected]:border-[var(--c)]",
28
+ "group-data-[indeterminate]:bg-[var(--c)] group-data-[indeterminate]:border-[var(--c)]",
29
+ "group-data-[invalid]:border-[var(--novi-color-danger)]",
30
+ "transition-[background-color,border-color]",
31
+ "duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]",
32
+ focusRing
33
+ ].join(" "),
34
+ indicator: `text-[var(--c-fg)] leading-none pointer-events-none ${mono}`,
35
+ label: "text-[var(--novi-color-fg)] leading-[var(--novi-leading-body)]",
36
+ description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`
37
+ };
38
+ /**
39
+ * Checkbox のスタイル定義。
40
+ *
41
+ * @example
42
+ * import { checkboxStyles } from '@novi-ui/flatlay'
43
+ * import { tv } from 'tailwind-variants'
44
+ *
45
+ * const myCheckbox = tv({ extend: checkboxStyles, slots: { label: 'font-medium' } })
46
+ */
47
+ const checkboxStyles = tv({
48
+ slots,
49
+ variants: {
50
+ color: {
51
+ default: { root: "[--c:var(--novi-color-fg)] [--c-fg:var(--novi-color-bg)]" },
52
+ primary: { root: "[--c:var(--novi-color-primary)] [--c-fg:var(--novi-color-primary-fg)]" },
53
+ secondary: { root: "[--c:var(--novi-color-secondary)] [--c-fg:var(--novi-color-secondary-fg)]" },
54
+ success: { root: "[--c:var(--novi-color-success)] [--c-fg:var(--novi-color-success-fg)]" },
55
+ warning: { root: "[--c:var(--novi-color-warning)] [--c-fg:var(--novi-color-warning-fg)]" },
56
+ danger: { root: "[--c:var(--novi-color-danger)] [--c-fg:var(--novi-color-danger-fg)]" }
57
+ },
58
+ size: {
59
+ sm: {
60
+ control: "size-3.5",
61
+ indicator: "text-[length:var(--novi-text-xs)]",
62
+ label: "text-[length:var(--novi-text-sm)]"
63
+ },
64
+ md: {
65
+ control: "size-4",
66
+ indicator: "text-[length:var(--novi-text-sm)]",
67
+ label: "text-[length:var(--novi-text-base)]"
68
+ },
69
+ lg: {
70
+ control: "size-5",
71
+ indicator: "text-[length:var(--novi-text-base)]",
72
+ label: "text-[length:var(--novi-text-base)]"
73
+ }
74
+ }
75
+ },
76
+ defaultVariants: {
77
+ color: "default",
78
+ size: "md"
79
+ }
80
+ });
81
+ const groupSlots = {
82
+ root: "flex flex-col gap-2",
83
+ label: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-fg)] ${mono}`,
84
+ list: "flex flex-col gap-2",
85
+ description: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-muted)] ${mono}`,
86
+ errorMessage: `text-[length:var(--novi-text-sm)] text-[var(--novi-color-danger)] ${mono}`
87
+ };
88
+ /**
89
+ * CheckboxGroup のスタイル定義。
90
+ *
91
+ * @example
92
+ * const myGroup = tv({ extend: checkboxGroupStyles, slots: { list: 'gap-4' } })
93
+ */
94
+ const checkboxGroupStyles = tv({
95
+ slots: groupSlots,
96
+ variants: { orientation: {
97
+ vertical: { list: "flex-col gap-2" },
98
+ horizontal: { list: "flex-row gap-4 flex-wrap" }
99
+ } },
100
+ defaultVariants: { orientation: "vertical" }
101
+ });
102
+ //#endregion
103
+ export { checkboxGroupStyles, checkboxStyles };
104
+
105
+ //# sourceMappingURL=checkbox.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.styles.mjs","names":[],"sources":["../../src/checkbox/checkbox.styles.ts"],"sourcesContent":["import type {\n checkboxGroupRequiredSlots,\n checkboxGroupSlots,\n checkboxRequiredSlots,\n checkboxSlots,\n NoviColor,\n NoviSize,\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 の Checkbox は**用紙の記入欄**。2px 角の箱に印を入れる。\n *\n * 印が SVG ではなく文字(`✓` / `−`)なのは ADR-F7 の運用。帳票の記号は\n * 書くものであって描くものではないので、等幅の字として出す。線幅を持つ図形を\n * 足すと、罫線だけで階層を作っているこのテーマの中で唯一の「絵」になってしまう。\n *\n * 選ぶと箱が塗り潰されて印が地色で立つ。押下の反転(ADR-F3)と同じ形だが、\n * こちらは**状態として残る**。押した瞬間との差は持続するかどうかだけで、\n * 語彙をひとつに保つほうが手応えが読める。\n */\nconst slots = {\n root: ['inline-flex items-start gap-2', 'cursor-pointer', disabledState].join(' '),\n // 円にしない。書類のチェック欄は必ず角のある箱で、丸は Radio の担当\n control: [\n 'shrink-0 inline-grid place-items-center',\n 'border border-[var(--novi-color-border-strong)]',\n 'rounded-[var(--novi-radius-sm)]',\n 'bg-[var(--novi-color-bg)]',\n 'group-data-[selected]:bg-[var(--c)] group-data-[selected]:border-[var(--c)]',\n 'group-data-[indeterminate]:bg-[var(--c)] group-data-[indeterminate]:border-[var(--c)]',\n 'group-data-[invalid]:border-[var(--novi-color-danger)]',\n 'transition-[background-color,border-color]',\n 'duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n focusRing,\n ].join(' '),\n // 印は箱いっぱいに置かない。`leading-none` で字の行送りを殺して中央に据える\n indicator: `text-[var(--c-fg)] leading-none pointer-events-none ${mono}`,\n // 選択肢の文言は読ませる文なので等幅にしない(項目名は group 側の label)\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 checkboxSlots, (typeof checkboxRequiredSlots)[number]>\n\n/** 塗り潰す色と、その上に立つ印の色。両テーマと同じローカル変数の型。 */\nconst color: VariantMap<NoviColor, { root: string }> = {\n default: { root: '[--c:var(--novi-color-fg)] [--c-fg:var(--novi-color-bg)]' },\n primary: { root: '[--c:var(--novi-color-primary)] [--c-fg:var(--novi-color-primary-fg)]' },\n secondary: { root: '[--c:var(--novi-color-secondary)] [--c-fg:var(--novi-color-secondary-fg)]' },\n success: { root: '[--c:var(--novi-color-success)] [--c-fg:var(--novi-color-success-fg)]' },\n warning: { root: '[--c:var(--novi-color-warning)] [--c-fg:var(--novi-color-warning-fg)]' },\n danger: { root: '[--c:var(--novi-color-danger)] [--c-fg:var(--novi-color-danger-fg)]' },\n}\n\n/**\n * 14 / 16 / 20px。両テーマ(16/20/24・20/24/28)より一段小さい。\n *\n * 帳票の行が 28 / 32 / 40px なので、箱が行の高さの半分ほどに収まる。\n * 指の下限には合わせない(Flatlay の前提はポインタとキーボード)。\n */\nconst size: VariantMap<NoviSize, { control: string; indicator: string; label: string }> = {\n sm: {\n control: 'size-3.5',\n indicator: 'text-[length:var(--novi-text-xs)]',\n label: 'text-[length:var(--novi-text-sm)]',\n },\n md: {\n control: 'size-4',\n indicator: 'text-[length:var(--novi-text-sm)]',\n label: 'text-[length:var(--novi-text-base)]',\n },\n lg: {\n control: 'size-5',\n indicator: 'text-[length:var(--novi-text-base)]',\n label: 'text-[length:var(--novi-text-base)]',\n },\n}\n\n/**\n * Checkbox のスタイル定義。\n *\n * @example\n * import { checkboxStyles } from '@novi-ui/flatlay'\n * import { tv } from 'tailwind-variants'\n *\n * const myCheckbox = tv({ extend: checkboxStyles, slots: { label: 'font-medium' } })\n */\nexport const checkboxStyles = 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 の label と同じ扱い・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 checkboxGroupSlots, (typeof checkboxGroupRequiredSlots)[number]>\n\n/**\n * CheckboxGroup のスタイル定義。\n *\n * @example\n * const myGroup = tv({ extend: checkboxGroupStyles, slots: { list: 'gap-4' } })\n */\nexport const checkboxGroupStyles = 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 CheckboxStyleProps = Parameters<typeof checkboxStyles>[0]\nexport type CheckboxGroupStyleProps = Parameters<typeof checkboxGroupStyles>[0]\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,MAAM,QAAQ;CACZ,MAAM;EAAC;EAAiC;EAAkB;CAAa,CAAC,CAAC,KAAK,GAAG;CAEjF,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,WAAW,uDAAuD;CAElE,OAAO;CACP,aAAa,oEAAoE;AACnF;;;;;;;;;;AA6CA,MAAa,iBAAiB,GAAG;CAC/B;CACA,UAAU;EAAE;GA3CZ,SAAS,EAAE,MAAM,2DAA2D;GAC5E,SAAS,EAAE,MAAM,wEAAwE;GACzF,WAAW,EAAE,MAAM,4EAA4E;GAC/F,SAAS,EAAE,MAAM,wEAAwE;GACzF,SAAS,EAAE,MAAM,wEAAwE;GACzF,QAAQ,EAAE,MAAM,sEAAsE;EAsC1E;EAAO;GA5BnB,IAAI;IACF,SAAS;IACT,WAAW;IACX,OAAO;GACT;GACA,IAAI;IACF,SAAS;IACT,WAAW;IACX,OAAO;GACT;GACA,IAAI;IACF,SAAS;IACT,WAAW;IACX,OAAO;GACT;EAcmB;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,sBAAsB,GAAG;CACpC,OAAO;CACP,UAAU,EACR,aAAa;EACX,UAAU,EAAE,MAAM,iBAAiB;EACnC,YAAY,EAAE,MAAM,2BAA2B;CACjD,EACF;CACA,iBAAiB,EAAE,aAAa,WAAW;AAC7C,CAAC"}