@novi-ui/raster 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +129 -0
  2. package/dist/accordion/accordion.d.mts +31 -0
  3. package/dist/accordion/accordion.d.mts.map +1 -0
  4. package/dist/accordion/accordion.mjs +88 -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 +78 -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 +19 -0
  12. package/dist/avatar/avatar.d.mts.map +1 -0
  13. package/dist/avatar/avatar.mjs +57 -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 +45 -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 +99 -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 +33 -0
  30. package/dist/breadcrumbs/breadcrumbs.d.mts.map +1 -0
  31. package/dist/breadcrumbs/breadcrumbs.mjs +79 -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 +35 -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 +14 -0
  39. package/dist/button/button.d.mts.map +1 -0
  40. package/dist/button/button.mjs +75 -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 +118 -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 +70 -0
  52. package/dist/card/card.styles.d.mts.map +1 -0
  53. package/dist/card/card.styles.mjs +62 -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 +24 -0
  57. package/dist/checkbox/checkbox.d.mts.map +1 -0
  58. package/dist/checkbox/checkbox.mjs +124 -0
  59. package/dist/checkbox/checkbox.mjs.map +1 -0
  60. package/dist/checkbox/checkbox.styles.d.mts +111 -0
  61. package/dist/checkbox/checkbox.styles.d.mts.map +1 -0
  62. package/dist/checkbox/checkbox.styles.mjs +89 -0
  63. package/dist/checkbox/checkbox.styles.mjs.map +1 -0
  64. package/dist/checkbox/index.d.mts +3 -0
  65. package/dist/index.d.mts +61 -0
  66. package/dist/index.mjs +42 -0
  67. package/dist/input/index.d.mts +3 -0
  68. package/dist/input/input.d.mts +20 -0
  69. package/dist/input/input.d.mts.map +1 -0
  70. package/dist/input/input.mjs +86 -0
  71. package/dist/input/input.mjs.map +1 -0
  72. package/dist/input/input.styles.d.mts +81 -0
  73. package/dist/input/input.styles.d.mts.map +1 -0
  74. package/dist/input/input.styles.mjs +83 -0
  75. package/dist/input/input.styles.mjs.map +1 -0
  76. package/dist/menu/index.d.mts +3 -0
  77. package/dist/menu/menu.d.mts +62 -0
  78. package/dist/menu/menu.d.mts.map +1 -0
  79. package/dist/menu/menu.mjs +115 -0
  80. package/dist/menu/menu.mjs.map +1 -0
  81. package/dist/menu/menu.styles.d.mts +90 -0
  82. package/dist/menu/menu.styles.d.mts.map +1 -0
  83. package/dist/menu/menu.styles.mjs +40 -0
  84. package/dist/menu/menu.styles.mjs.map +1 -0
  85. package/dist/modal/index.d.mts +3 -0
  86. package/dist/modal/modal.d.mts +47 -0
  87. package/dist/modal/modal.d.mts.map +1 -0
  88. package/dist/modal/modal.mjs +110 -0
  89. package/dist/modal/modal.mjs.map +1 -0
  90. package/dist/modal/modal.styles.d.mts +58 -0
  91. package/dist/modal/modal.styles.d.mts.map +1 -0
  92. package/dist/modal/modal.styles.mjs +69 -0
  93. package/dist/modal/modal.styles.mjs.map +1 -0
  94. package/dist/popover/index.d.mts +3 -0
  95. package/dist/popover/popover.d.mts +40 -0
  96. package/dist/popover/popover.d.mts.map +1 -0
  97. package/dist/popover/popover.mjs +86 -0
  98. package/dist/popover/popover.mjs.map +1 -0
  99. package/dist/popover/popover.styles.d.mts +81 -0
  100. package/dist/popover/popover.styles.d.mts.map +1 -0
  101. package/dist/popover/popover.styles.mjs +53 -0
  102. package/dist/popover/popover.styles.mjs.map +1 -0
  103. package/dist/progress/index.d.mts +3 -0
  104. package/dist/progress/progress.d.mts +14 -0
  105. package/dist/progress/progress.d.mts.map +1 -0
  106. package/dist/progress/progress.mjs +54 -0
  107. package/dist/progress/progress.mjs.map +1 -0
  108. package/dist/progress/progress.styles.d.mts +70 -0
  109. package/dist/progress/progress.styles.d.mts.map +1 -0
  110. package/dist/progress/progress.styles.mjs +54 -0
  111. package/dist/progress/progress.styles.mjs.map +1 -0
  112. package/dist/radio/index.d.mts +3 -0
  113. package/dist/radio/radio.d.mts +22 -0
  114. package/dist/radio/radio.d.mts.map +1 -0
  115. package/dist/radio/radio.mjs +95 -0
  116. package/dist/radio/radio.mjs.map +1 -0
  117. package/dist/radio/radio.styles.d.mts +111 -0
  118. package/dist/radio/radio.styles.d.mts.map +1 -0
  119. package/dist/radio/radio.styles.mjs +88 -0
  120. package/dist/radio/radio.styles.mjs.map +1 -0
  121. package/dist/raster.css +92 -0
  122. package/dist/raster.scoped.css +92 -0
  123. package/dist/select/index.d.mts +3 -0
  124. package/dist/select/select.d.mts +33 -0
  125. package/dist/select/select.d.mts.map +1 -0
  126. package/dist/select/select.mjs +114 -0
  127. package/dist/select/select.mjs.map +1 -0
  128. package/dist/select/select.styles.d.mts +82 -0
  129. package/dist/select/select.styles.d.mts.map +1 -0
  130. package/dist/select/select.styles.mjs +93 -0
  131. package/dist/select/select.styles.mjs.map +1 -0
  132. package/dist/skeleton/index.d.mts +3 -0
  133. package/dist/skeleton/skeleton.d.mts +15 -0
  134. package/dist/skeleton/skeleton.d.mts.map +1 -0
  135. package/dist/skeleton/skeleton.mjs +26 -0
  136. package/dist/skeleton/skeleton.mjs.map +1 -0
  137. package/dist/skeleton/skeleton.styles.d.mts +31 -0
  138. package/dist/skeleton/skeleton.styles.d.mts.map +1 -0
  139. package/dist/skeleton/skeleton.styles.mjs +22 -0
  140. package/dist/skeleton/skeleton.styles.mjs.map +1 -0
  141. package/dist/spinner/index.d.mts +3 -0
  142. package/dist/spinner/spinner.d.mts +15 -0
  143. package/dist/spinner/spinner.d.mts.map +1 -0
  144. package/dist/spinner/spinner.mjs +55 -0
  145. package/dist/spinner/spinner.mjs.map +1 -0
  146. package/dist/spinner/spinner.styles.d.mts +46 -0
  147. package/dist/spinner/spinner.styles.d.mts.map +1 -0
  148. package/dist/spinner/spinner.styles.mjs +37 -0
  149. package/dist/spinner/spinner.styles.mjs.map +1 -0
  150. package/dist/styles/focus-ring.mjs +23 -0
  151. package/dist/styles/focus-ring.mjs.map +1 -0
  152. package/dist/switch/index.d.mts +3 -0
  153. package/dist/switch/switch.d.mts +17 -0
  154. package/dist/switch/switch.d.mts.map +1 -0
  155. package/dist/switch/switch.mjs +57 -0
  156. package/dist/switch/switch.mjs.map +1 -0
  157. package/dist/switch/switch.styles.d.mts +58 -0
  158. package/dist/switch/switch.styles.d.mts.map +1 -0
  159. package/dist/switch/switch.styles.mjs +80 -0
  160. package/dist/switch/switch.styles.mjs.map +1 -0
  161. package/dist/tabs/index.d.mts +3 -0
  162. package/dist/tabs/tabs.d.mts +55 -0
  163. package/dist/tabs/tabs.d.mts.map +1 -0
  164. package/dist/tabs/tabs.mjs +84 -0
  165. package/dist/tabs/tabs.mjs.map +1 -0
  166. package/dist/tabs/tabs.styles.d.mts +55 -0
  167. package/dist/tabs/tabs.styles.d.mts.map +1 -0
  168. package/dist/tabs/tabs.styles.mjs +73 -0
  169. package/dist/tabs/tabs.styles.mjs.map +1 -0
  170. package/dist/textarea/index.d.mts +3 -0
  171. package/dist/textarea/textarea.d.mts +15 -0
  172. package/dist/textarea/textarea.d.mts.map +1 -0
  173. package/dist/textarea/textarea.mjs +70 -0
  174. package/dist/textarea/textarea.mjs.map +1 -0
  175. package/dist/textarea/textarea.styles.d.mts +73 -0
  176. package/dist/textarea/textarea.styles.d.mts.map +1 -0
  177. package/dist/textarea/textarea.styles.mjs +81 -0
  178. package/dist/textarea/textarea.styles.mjs.map +1 -0
  179. package/dist/toast/index.d.mts +3 -0
  180. package/dist/toast/toast.d.mts +38 -0
  181. package/dist/toast/toast.d.mts.map +1 -0
  182. package/dist/toast/toast.mjs +86 -0
  183. package/dist/toast/toast.mjs.map +1 -0
  184. package/dist/toast/toast.styles.d.mts +61 -0
  185. package/dist/toast/toast.styles.d.mts.map +1 -0
  186. package/dist/toast/toast.styles.mjs +59 -0
  187. package/dist/toast/toast.styles.mjs.map +1 -0
  188. package/package.json +59 -0
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { badgeStyles } from "./badge.styles.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/badge/badge.tsx
5
+ /**
6
+ * 短いラベルで状態や分類を示す。
7
+ *
8
+ * 色だけで意味を伝えないこと。`success` と `danger` は色相が違うが、
9
+ * 色覚特性によっては区別できない。必ず文言を伴わせる(WCAG 1.4.1)。
10
+ *
11
+ * @example
12
+ * <Badge color="success" variant="soft">公開中</Badge>
13
+ */
14
+ function Badge({ variant, size, color, radius, withDot, children, className, classNames, id }) {
15
+ const s = badgeStyles({
16
+ variant,
17
+ size,
18
+ color,
19
+ radius
20
+ });
21
+ return /* @__PURE__ */ jsxs("span", {
22
+ id,
23
+ "data-slot": "root",
24
+ className: s.root({ class: [className, classNames?.root] }),
25
+ children: [withDot === true && /* @__PURE__ */ jsx("span", {
26
+ "data-slot": "dot",
27
+ className: s.dot({ class: classNames?.dot }),
28
+ "aria-hidden": "true"
29
+ }), /* @__PURE__ */ jsx("span", {
30
+ "data-slot": "label",
31
+ className: s.label({ class: classNames?.label }),
32
+ children
33
+ })]
34
+ });
35
+ }
36
+ //#endregion
37
+ export { Badge };
38
+
39
+ //# sourceMappingURL=badge.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.mjs","names":[],"sources":["../../src/badge/badge.tsx"],"sourcesContent":["'use client'\n\nimport type { BadgeProps } from '@novi-ui/core'\nimport { badgeStyles } from './badge.styles'\n\n/**\n * 短いラベルで状態や分類を示す。\n *\n * 色だけで意味を伝えないこと。`success` と `danger` は色相が違うが、\n * 色覚特性によっては区別できない。必ず文言を伴わせる(WCAG 1.4.1)。\n *\n * @example\n * <Badge color=\"success\" variant=\"soft\">公開中</Badge>\n */\nexport function Badge({\n variant,\n size,\n color,\n radius,\n withDot,\n children,\n className,\n classNames,\n id,\n}: BadgeProps) {\n const s = badgeStyles({ variant, size, color, radius })\n\n return (\n <span id={id} data-slot=\"root\" className={s.root({ class: [className, classNames?.root] })}>\n {withDot === true && (\n <span data-slot=\"dot\" className={s.dot({ class: classNames?.dot })} aria-hidden=\"true\" />\n )}\n <span data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {children}\n </span>\n </span>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,MAAM,EACpB,SACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,MACa;CACb,MAAM,IAAI,YAAY;EAAE;EAAS;EAAM;EAAO;CAAO,CAAC;CAEtD,OACE,qBAAC,QAAD;EAAU;EAAI,aAAU;EAAO,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAAzF,UAAA,CACG,YAAY,QACX,oBAAC,QAAD;GAAM,aAAU;GAAM,WAAW,EAAE,IAAI,EAAE,OAAO,YAAY,IAAI,CAAC;GAAG,eAAY;EAAQ,CAAA,GAE1F,oBAAC,QAAD;GAAM,aAAU;GAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;GACpE;EACG,CAAA,CACF;;AAEV"}
@@ -0,0 +1,67 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/badge/badge.styles.d.ts
3
+ /**
4
+ * Badge のスタイル定義。
5
+ *
6
+ * @example
7
+ * const myBadge = tv({ extend: badgeStyles, slots: { label: 'uppercase' } })
8
+ */
9
+ declare const badgeStyles: import("tailwind-variants").TVReturnType<{
10
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
11
+ root: string;
12
+ }>;
13
+ size: VariantMap<"sm" | "md" | "lg", {
14
+ root: string;
15
+ dot: string;
16
+ }>;
17
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
18
+ root: string;
19
+ }>;
20
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
21
+ root: string;
22
+ }>;
23
+ }, {
24
+ root: string;
25
+ dot: string;
26
+ label: string;
27
+ }, undefined, {
28
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
29
+ root: string;
30
+ }>;
31
+ size: VariantMap<"sm" | "md" | "lg", {
32
+ root: string;
33
+ dot: string;
34
+ }>;
35
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
36
+ root: string;
37
+ }>;
38
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
39
+ root: string;
40
+ }>;
41
+ }, {
42
+ root: string;
43
+ dot: string;
44
+ label: string;
45
+ }, import("tailwind-variants").TVReturnTypeLike<{
46
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
47
+ root: string;
48
+ }>;
49
+ size: VariantMap<"sm" | "md" | "lg", {
50
+ root: string;
51
+ dot: string;
52
+ }>;
53
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
54
+ root: string;
55
+ }>;
56
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
57
+ root: string;
58
+ }>;
59
+ }, {
60
+ root: string;
61
+ dot: string;
62
+ label: string;
63
+ }>>;
64
+ type BadgeStyleProps = Parameters<typeof badgeStyles>[0];
65
+ //#endregion
66
+ export { BadgeStyleProps, badgeStyles };
67
+ //# sourceMappingURL=badge.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.styles.d.mts","names":[],"sources":["../../src/badge/badge.styles.ts"],"mappings":";;;;;;;;cAsGa,yCAAW;;IA/EmB;;;IA2DF;IAAa;;;IAMT;;;IAdE;;;;;;;;IAnDJ;;;IA2DF;IAAa;;;IAMT;;;IAdE;;;;;;;;IAnDJ;;;IA2DF;IAAa;;;IAMT;;;IAdE;;;;;;;KAoCnC,kBAAkB,kBAAkB"}
@@ -0,0 +1,99 @@
1
+ import { tv } from "tailwind-variants";
2
+ //#region src/badge/badge.styles.ts
3
+ const slots = {
4
+ root: [
5
+ "inline-flex items-center gap-1.5",
6
+ "font-medium whitespace-nowrap",
7
+ "border border-transparent"
8
+ ].join(" "),
9
+ dot: "shrink-0 rounded-[var(--novi-radius-none)] bg-current",
10
+ label: "truncate"
11
+ };
12
+ const color = {
13
+ default: { root: [
14
+ "[--c:var(--novi-color-default)]",
15
+ "[--c-fg:var(--novi-color-default-fg)]",
16
+ "[--c-text:var(--novi-color-fg)]",
17
+ "[--c-line:var(--novi-color-border-strong)]"
18
+ ].join(" ") },
19
+ primary: { root: [
20
+ "[--c:var(--novi-color-primary)]",
21
+ "[--c-fg:var(--novi-color-primary-fg)]",
22
+ "[--c-text:var(--novi-color-primary)]",
23
+ "[--c-line:var(--novi-color-primary)]"
24
+ ].join(" ") },
25
+ secondary: { root: [
26
+ "[--c:var(--novi-color-secondary)]",
27
+ "[--c-fg:var(--novi-color-secondary-fg)]",
28
+ "[--c-text:var(--novi-color-secondary)]",
29
+ "[--c-line:var(--novi-color-secondary)]"
30
+ ].join(" ") },
31
+ success: { root: [
32
+ "[--c:var(--novi-color-success)]",
33
+ "[--c-fg:var(--novi-color-success-fg)]",
34
+ "[--c-text:var(--novi-color-success)]",
35
+ "[--c-line:var(--novi-color-success)]"
36
+ ].join(" ") },
37
+ warning: { root: [
38
+ "[--c:var(--novi-color-warning)]",
39
+ "[--c-fg:var(--novi-color-warning-fg)]",
40
+ "[--c-text:var(--novi-color-warning)]",
41
+ "[--c-line:var(--novi-color-warning)]"
42
+ ].join(" ") },
43
+ danger: { root: [
44
+ "[--c:var(--novi-color-danger)]",
45
+ "[--c-fg:var(--novi-color-danger-fg)]",
46
+ "[--c-text:var(--novi-color-danger)]",
47
+ "[--c-line:var(--novi-color-danger)]"
48
+ ].join(" ") }
49
+ };
50
+ /**
51
+ * Badge のスタイル定義。
52
+ *
53
+ * @example
54
+ * const myBadge = tv({ extend: badgeStyles, slots: { label: 'uppercase' } })
55
+ */
56
+ const badgeStyles = tv({
57
+ slots,
58
+ variants: {
59
+ color,
60
+ size: {
61
+ sm: {
62
+ root: "h-5 px-1.5 text-[length:var(--novi-text-xs)]",
63
+ dot: "size-1.5"
64
+ },
65
+ md: {
66
+ root: "h-6 px-2 text-[length:var(--novi-text-xs)]",
67
+ dot: "size-2"
68
+ },
69
+ lg: {
70
+ root: "h-7 px-2.5 text-[length:var(--novi-text-sm)]",
71
+ dot: "size-2"
72
+ }
73
+ },
74
+ radius: {
75
+ none: { root: "rounded-[var(--novi-radius-none)]" },
76
+ sm: { root: "rounded-[var(--novi-radius-sm)]" },
77
+ md: { root: "rounded-[var(--novi-radius-md)]" },
78
+ lg: { root: "rounded-[var(--novi-radius-lg)]" },
79
+ full: { root: "rounded-[var(--novi-radius-full)]" }
80
+ },
81
+ variant: {
82
+ solid: { root: "bg-[var(--c)] text-[var(--c-fg)]" },
83
+ outline: { root: "border-[var(--c-line)] text-[var(--c-text)]" },
84
+ soft: { root: "bg-[var(--novi-color-subtle)] text-[var(--c-text)]" },
85
+ ghost: { root: "text-[var(--c-text)]" },
86
+ plain: { root: "text-[var(--c-text)] px-0" }
87
+ }
88
+ },
89
+ defaultVariants: {
90
+ color: "default",
91
+ variant: "soft",
92
+ size: "md",
93
+ radius: "none"
94
+ }
95
+ });
96
+ //#endregion
97
+ export { badgeStyles };
98
+
99
+ //# sourceMappingURL=badge.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.styles.mjs","names":[],"sources":["../../src/badge/badge.styles.ts"],"sourcesContent":["import type {\n badgeRequiredSlots,\n badgeSlots,\n NoviColor,\n NoviRadius,\n NoviSize,\n NoviVariant,\n SlotMap,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\n\nconst slots = {\n root: [\n 'inline-flex items-center gap-1.5',\n 'font-medium whitespace-nowrap',\n 'border border-transparent',\n ].join(' '),\n // 円ではなく正方形。Raster では点も角を立てる\n dot: 'shrink-0 rounded-[var(--novi-radius-none)] bg-current',\n label: 'truncate',\n} satisfies SlotMap<typeof badgeSlots, (typeof badgeRequiredSlots)[number]>\n\nconst color: VariantMap<NoviColor, { root: string }> = {\n default: {\n root: [\n '[--c:var(--novi-color-default)]',\n '[--c-fg:var(--novi-color-default-fg)]',\n '[--c-text:var(--novi-color-fg)]',\n '[--c-line:var(--novi-color-border-strong)]',\n ].join(' '),\n },\n primary: {\n root: [\n '[--c:var(--novi-color-primary)]',\n '[--c-fg:var(--novi-color-primary-fg)]',\n '[--c-text:var(--novi-color-primary)]',\n '[--c-line:var(--novi-color-primary)]',\n ].join(' '),\n },\n secondary: {\n root: [\n '[--c:var(--novi-color-secondary)]',\n '[--c-fg:var(--novi-color-secondary-fg)]',\n '[--c-text:var(--novi-color-secondary)]',\n '[--c-line:var(--novi-color-secondary)]',\n ].join(' '),\n },\n success: {\n root: [\n '[--c:var(--novi-color-success)]',\n '[--c-fg:var(--novi-color-success-fg)]',\n '[--c-text:var(--novi-color-success)]',\n '[--c-line:var(--novi-color-success)]',\n ].join(' '),\n },\n warning: {\n root: [\n '[--c:var(--novi-color-warning)]',\n '[--c-fg:var(--novi-color-warning-fg)]',\n '[--c-text:var(--novi-color-warning)]',\n '[--c-line:var(--novi-color-warning)]',\n ].join(' '),\n },\n danger: {\n root: [\n '[--c:var(--novi-color-danger)]',\n '[--c-fg:var(--novi-color-danger-fg)]',\n '[--c-text:var(--novi-color-danger)]',\n '[--c-line:var(--novi-color-danger)]',\n ].join(' '),\n },\n}\n\nconst variant: VariantMap<NoviVariant, { root: string }> = {\n solid: { root: 'bg-[var(--c)] text-[var(--c-fg)]' },\n outline: { root: 'border-[var(--c-line)] text-[var(--c-text)]' },\n soft: { root: 'bg-[var(--novi-color-subtle)] text-[var(--c-text)]' },\n ghost: { root: 'text-[var(--c-text)]' },\n plain: { root: 'text-[var(--c-text)] px-0' },\n}\n\nconst size: VariantMap<NoviSize, { root: string; dot: string }> = {\n sm: { root: 'h-5 px-1.5 text-[length:var(--novi-text-xs)]', dot: 'size-1.5' },\n md: { root: 'h-6 px-2 text-[length:var(--novi-text-xs)]', dot: 'size-2' },\n lg: { root: 'h-7 px-2.5 text-[length:var(--novi-text-sm)]', dot: 'size-2' },\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 * Badge のスタイル定義。\n *\n * @example\n * const myBadge = tv({ extend: badgeStyles, slots: { label: 'uppercase' } })\n */\nexport const badgeStyles = tv({\n slots,\n // variant を最後に宣言する。tv は宣言順に適用するため、\n // 先に書くと `plain` の px-0 が size の px-2 に負けて ghost と同じ見た目になる。\n variants: { color, size, radius, variant },\n defaultVariants: { color: 'default', variant: 'soft', size: 'md', radius: 'none' },\n})\n\nexport type BadgeStyleProps = Parameters<typeof badgeStyles>[0]\n"],"mappings":";;AAYA,MAAM,QAAQ;CACZ,MAAM;EACJ;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,KAAK;CACL,OAAO;AACT;AAEA,MAAM,QAAiD;CACrD,SAAS,EACP,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;CACA,SAAS,EACP,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;CACA,WAAW,EACT,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;CACA,SAAS,EACP,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;CACA,SAAS,EACP,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;CACA,QAAQ,EACN,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG,EACZ;AACF;;;;;;;AA8BA,MAAa,cAAc,GAAG;CAC5B;CAGA,UAAU;EAAE;EAAO;GAvBnB,IAAI;IAAE,MAAM;IAAgD,KAAK;GAAW;GAC5E,IAAI;IAAE,MAAM;IAA8C,KAAK;GAAS;GACxE,IAAI;IAAE,MAAM;IAAgD,KAAK;GAAS;EAqBvD;EAAM;GAjBzB,MAAM,EAAE,MAAM,oCAAoC;GAClD,IAAI,EAAE,MAAM,kCAAkC;GAC9C,IAAI,EAAE,MAAM,kCAAkC;GAC9C,IAAI,EAAE,MAAM,kCAAkC;GAC9C,MAAM,EAAE,MAAM,oCAAoC;EAazB;EAAQ;GA/BjC,OAAO,EAAE,MAAM,mCAAmC;GAClD,SAAS,EAAE,MAAM,8CAA8C;GAC/D,MAAM,EAAE,MAAM,qDAAqD;GACnE,OAAO,EAAE,MAAM,uBAAuB;GACtC,OAAO,EAAE,MAAM,4BAA4B;EA2BV;CAAQ;CACzC,iBAAiB;EAAE,OAAO;EAAW,SAAS;EAAQ,MAAM;EAAM,QAAQ;CAAO;AACnF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Badge } from "./badge.mjs";
2
+ import { BadgeStyleProps, badgeStyles } from "./badge.styles.mjs";
3
+ export { Badge, type BadgeStyleProps, badgeStyles };
@@ -0,0 +1,33 @@
1
+ import { ReactNode } from "react";
2
+ import { BreadcrumbsProps } from "@novi-ui/core";
3
+ //#region src/breadcrumbs/breadcrumbs.d.ts
4
+ interface BreadcrumbProps {
5
+ /** 省略すると現在地として扱い、リンクにしない */
6
+ href?: string;
7
+ children?: ReactNode;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * 階層の1段。`href` を省略した項目が現在地になる。
12
+ *
13
+ * @example
14
+ * <Breadcrumb href="/docs">ドキュメント</Breadcrumb>
15
+ */
16
+ declare function Breadcrumb({ href, children, className }: BreadcrumbProps): import("react").JSX.Element;
17
+ /**
18
+ * 階層の中で現在どこにいるかを示す。
19
+ *
20
+ * 区切り文字は装飾なので支援技術には読ませない。
21
+ * `href` を省いた項目が現在地になり、リンクにならない。
22
+ *
23
+ * @example
24
+ * <Breadcrumbs>
25
+ * <Breadcrumb href="/">ホーム</Breadcrumb>
26
+ * <Breadcrumb href="/docs">ドキュメント</Breadcrumb>
27
+ * <Breadcrumb>Button</Breadcrumb>
28
+ * </Breadcrumbs>
29
+ */
30
+ declare function Breadcrumbs({ size, separator, isDisabled, children, className, classNames, id }: BreadcrumbsProps): import("react").JSX.Element;
31
+ //#endregion
32
+ export { Breadcrumb, BreadcrumbProps, Breadcrumbs };
33
+ //# sourceMappingURL=breadcrumbs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.d.mts","names":[],"sources":["../../src/breadcrumbs/breadcrumbs.tsx"],"mappings":";;;UAoBiB;;EAEf;EACA,WAAW;EACX;;;;;;;;iBASc,aAAa,MAAM,UAAU,aAAa,kCAAe,IAAA;;;;;;;;;;;;;;iBAsCzD,cACd,MACA,WACA,YACA,UACA,WACA,YACA,MACC,mCAAgB,IAAA"}
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import { breadcrumbsStyles } from "./breadcrumbs.styles.mjs";
3
+ import { Breadcrumb, Breadcrumbs, Link } from "react-aria-components";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { createContext, useContext } from "react";
6
+ //#region src/breadcrumbs/breadcrumbs.tsx
7
+ /**
8
+ * 区切り文字を子へ渡す。
9
+ *
10
+ * 各項目が自分の前に区切りを描画し、先頭だけ CSS で隠す。
11
+ * 親側で children を加工して区切りを差し込むと、
12
+ * RAC が期待する `<ol> > <li>` の構造が壊れる。
13
+ */
14
+ const SeparatorContext = createContext("/");
15
+ /**
16
+ * 階層の1段。`href` を省略した項目が現在地になる。
17
+ *
18
+ * @example
19
+ * <Breadcrumb href="/docs">ドキュメント</Breadcrumb>
20
+ */
21
+ function Breadcrumb$1({ href, children, className }) {
22
+ const s = breadcrumbsStyles();
23
+ const separator = useContext(SeparatorContext);
24
+ return /* @__PURE__ */ jsxs(Breadcrumb, {
25
+ "data-slot": "item",
26
+ className: s.item({ class: className }),
27
+ children: [/* @__PURE__ */ jsx("span", {
28
+ "data-slot": "separator",
29
+ className: s.separator(),
30
+ "aria-hidden": "true",
31
+ children: separator
32
+ }), href === void 0 ? /* @__PURE__ */ jsx("span", {
33
+ "data-slot": "current",
34
+ "aria-current": "page",
35
+ className: s.current(),
36
+ children
37
+ }) : /* @__PURE__ */ jsx(Link, {
38
+ href,
39
+ "data-slot": "link",
40
+ className: s.link(),
41
+ children
42
+ })]
43
+ });
44
+ }
45
+ /**
46
+ * 階層の中で現在どこにいるかを示す。
47
+ *
48
+ * 区切り文字は装飾なので支援技術には読ませない。
49
+ * `href` を省いた項目が現在地になり、リンクにならない。
50
+ *
51
+ * @example
52
+ * <Breadcrumbs>
53
+ * <Breadcrumb href="/">ホーム</Breadcrumb>
54
+ * <Breadcrumb href="/docs">ドキュメント</Breadcrumb>
55
+ * <Breadcrumb>Button</Breadcrumb>
56
+ * </Breadcrumbs>
57
+ */
58
+ function Breadcrumbs$1({ size, separator = "/", isDisabled, children, className, classNames, id }) {
59
+ const s = breadcrumbsStyles({ size });
60
+ return /* @__PURE__ */ jsx(SeparatorContext.Provider, {
61
+ value: separator,
62
+ children: /* @__PURE__ */ jsx("nav", {
63
+ id,
64
+ "aria-label": "パンくずリスト",
65
+ "data-slot": "root",
66
+ className: s.root({ class: [className, classNames?.root] }),
67
+ children: /* @__PURE__ */ jsx(Breadcrumbs, {
68
+ isDisabled,
69
+ "data-slot": "list",
70
+ className: s.list({ class: classNames?.list }),
71
+ children
72
+ })
73
+ })
74
+ });
75
+ }
76
+ //#endregion
77
+ export { Breadcrumb$1 as Breadcrumb, Breadcrumbs$1 as Breadcrumbs };
78
+
79
+ //# sourceMappingURL=breadcrumbs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.mjs","names":["Breadcrumb","RACBreadcrumb","Breadcrumbs","RACBreadcrumbs"],"sources":["../../src/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["'use client'\n\nimport type { BreadcrumbsProps } from '@novi-ui/core'\nimport { createContext, type ReactNode, useContext } from 'react'\nimport {\n Link,\n Breadcrumb as RACBreadcrumb,\n Breadcrumbs as RACBreadcrumbs,\n} from 'react-aria-components'\nimport { breadcrumbsStyles } from './breadcrumbs.styles'\n\n/**\n * 区切り文字を子へ渡す。\n *\n * 各項目が自分の前に区切りを描画し、先頭だけ CSS で隠す。\n * 親側で children を加工して区切りを差し込むと、\n * RAC が期待する `<ol> > <li>` の構造が壊れる。\n */\nconst SeparatorContext = createContext<ReactNode>('/')\n\nexport interface BreadcrumbProps {\n /** 省略すると現在地として扱い、リンクにしない */\n href?: string\n children?: ReactNode\n className?: string\n}\n\n/**\n * 階層の1段。`href` を省略した項目が現在地になる。\n *\n * @example\n * <Breadcrumb href=\"/docs\">ドキュメント</Breadcrumb>\n */\nexport function Breadcrumb({ href, children, className }: BreadcrumbProps) {\n const s = breadcrumbsStyles()\n const separator = useContext(SeparatorContext)\n\n return (\n <RACBreadcrumb data-slot=\"item\" className={s.item({ class: className })}>\n <span data-slot=\"separator\" className={s.separator()} aria-hidden=\"true\">\n {separator}\n </span>\n\n {href === undefined ? (\n // 現在地はリンクにしない。RAC は Link にしか aria-current を付けないので、\n // ここでは自分で付ける必要がある\n <span data-slot=\"current\" aria-current=\"page\" className={s.current()}>\n {children}\n </span>\n ) : (\n <Link href={href} data-slot=\"link\" className={s.link()}>\n {children}\n </Link>\n )}\n </RACBreadcrumb>\n )\n}\n\n/**\n * 階層の中で現在どこにいるかを示す。\n *\n * 区切り文字は装飾なので支援技術には読ませない。\n * `href` を省いた項目が現在地になり、リンクにならない。\n *\n * @example\n * <Breadcrumbs>\n * <Breadcrumb href=\"/\">ホーム</Breadcrumb>\n * <Breadcrumb href=\"/docs\">ドキュメント</Breadcrumb>\n * <Breadcrumb>Button</Breadcrumb>\n * </Breadcrumbs>\n */\nexport function Breadcrumbs({\n size,\n separator = '/',\n isDisabled,\n children,\n className,\n classNames,\n id,\n}: BreadcrumbsProps) {\n const s = breadcrumbsStyles({ size })\n\n return (\n <SeparatorContext.Provider value={separator}>\n {/* nav でラップして現在地の階層であることを伝える */}\n <nav\n id={id}\n aria-label=\"パンくずリスト\"\n data-slot=\"root\"\n className={s.root({ class: [className, classNames?.root] })}\n >\n <RACBreadcrumbs\n isDisabled={isDisabled}\n data-slot=\"list\"\n className={s.list({ class: classNames?.list })}\n >\n {children}\n </RACBreadcrumbs>\n </nav>\n </SeparatorContext.Provider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,mBAAmB,cAAyB,GAAG;;;;;;;AAerD,SAAgBA,aAAW,EAAE,MAAM,UAAU,aAA8B;CACzE,MAAM,IAAI,kBAAkB;CAC5B,MAAM,YAAY,WAAW,gBAAgB;CAE7C,OACE,qBAACC,YAAD;EAAe,aAAU;EAAO,WAAW,EAAE,KAAK,EAAE,OAAO,UAAU,CAAC;EAAtE,UAAA,CACE,oBAAC,QAAD;GAAM,aAAU;GAAY,WAAW,EAAE,UAAU;GAAG,eAAY;GAC/D,UAAA;EACG,CAAA,GAEL,SAAS,KAAA,IAGR,oBAAC,QAAD;GAAM,aAAU;GAAU,gBAAa;GAAO,WAAW,EAAE,QAAQ;GAChE;EACG,CAAA,IAEN,oBAAC,MAAD;GAAY;GAAM,aAAU;GAAO,WAAW,EAAE,KAAK;GAClD;EACG,CAAA,CAEK;;AAEnB;;;;;;;;;;;;;;AAeA,SAAgBC,cAAY,EAC1B,MACA,YAAY,KACZ,YACA,UACA,WACA,YACA,MACmB;CACnB,MAAM,IAAI,kBAAkB,EAAE,KAAK,CAAC;CAEpC,OACE,oBAAC,iBAAiB,UAAlB;EAA2B,OAAO;EAEhC,UAAA,oBAAC,OAAD;GACM;GACJ,cAAW;GACX,aAAU;GACV,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;GAE1D,UAAA,oBAACC,aAAD;IACc;IACZ,aAAU;IACV,WAAW,EAAE,KAAK,EAAE,OAAO,YAAY,KAAK,CAAC;IAE5C;GACa,CAAA;EACb,CAAA;CACoB,CAAA;AAE/B"}
@@ -0,0 +1,46 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/breadcrumbs/breadcrumbs.styles.d.ts
3
+ /**
4
+ * Breadcrumbs のスタイル定義。
5
+ *
6
+ * @example
7
+ * const myCrumbs = tv({ extend: breadcrumbsStyles, slots: { separator: 'mx-2' } })
8
+ */
9
+ declare const breadcrumbsStyles: import("tailwind-variants").TVReturnType<{
10
+ size: VariantMap<"sm" | "md" | "lg", {
11
+ list: string;
12
+ }>;
13
+ }, {
14
+ root: string;
15
+ list: string;
16
+ item: string;
17
+ link: string;
18
+ separator: string;
19
+ current: string;
20
+ }, undefined, {
21
+ size: VariantMap<"sm" | "md" | "lg", {
22
+ list: string;
23
+ }>;
24
+ }, {
25
+ root: string;
26
+ list: string;
27
+ item: string;
28
+ link: string;
29
+ separator: string;
30
+ current: string;
31
+ }, import("tailwind-variants").TVReturnTypeLike<{
32
+ size: VariantMap<"sm" | "md" | "lg", {
33
+ list: string;
34
+ }>;
35
+ }, {
36
+ root: string;
37
+ list: string;
38
+ item: string;
39
+ link: string;
40
+ separator: string;
41
+ current: string;
42
+ }>>;
43
+ type BreadcrumbsStyleProps = Parameters<typeof breadcrumbsStyles>[0];
44
+ //#endregion
45
+ export { BreadcrumbsStyleProps, breadcrumbsStyles };
46
+ //# sourceMappingURL=breadcrumbs.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.styles.d.mts","names":[],"sources":["../../src/breadcrumbs/breadcrumbs.styles.ts"],"mappings":";;;;;;;;cA2Ca,+CAAiB;;IAZW;;;;;;;;;;;IAAA;;;;;;;;;;;IAAA;;;;;;;;;;KAkB7B,wBAAwB,kBAAkB"}
@@ -0,0 +1,35 @@
1
+ import { focusRing } from "../styles/focus-ring.mjs";
2
+ import { tv } from "tailwind-variants";
3
+ //#region src/breadcrumbs/breadcrumbs.styles.ts
4
+ const slots = {
5
+ root: "flex",
6
+ list: ["flex flex-wrap items-center gap-1.5", "[&>li:first-child>[data-slot=separator]]:hidden"].join(" "),
7
+ item: "flex items-center gap-1.5",
8
+ link: [
9
+ "text-[var(--novi-color-muted)] underline-offset-4",
10
+ "transition-colors duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]",
11
+ "hover:text-[var(--novi-color-fg)] hover:underline",
12
+ focusRing
13
+ ].join(" "),
14
+ separator: "text-[var(--novi-color-border-strong)] select-none",
15
+ current: "text-[var(--novi-color-fg)] font-medium"
16
+ };
17
+ /**
18
+ * Breadcrumbs のスタイル定義。
19
+ *
20
+ * @example
21
+ * const myCrumbs = tv({ extend: breadcrumbsStyles, slots: { separator: 'mx-2' } })
22
+ */
23
+ const breadcrumbsStyles = tv({
24
+ slots,
25
+ variants: { size: {
26
+ sm: { list: "text-[length:var(--novi-text-xs)]" },
27
+ md: { list: "text-[length:var(--novi-text-sm)]" },
28
+ lg: { list: "text-[length:var(--novi-text-base)]" }
29
+ } },
30
+ defaultVariants: { size: "md" }
31
+ });
32
+ //#endregion
33
+ export { breadcrumbsStyles };
34
+
35
+ //# sourceMappingURL=breadcrumbs.styles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.styles.mjs","names":[],"sources":["../../src/breadcrumbs/breadcrumbs.styles.ts"],"sourcesContent":["import type {\n breadcrumbsRequiredSlots,\n breadcrumbsSlots,\n NoviSize,\n SlotMap,\n VariantMap,\n} from '@novi-ui/core'\nimport { tv } from 'tailwind-variants'\nimport { focusRing } from '../styles/focus-ring'\n\nconst slots = {\n // root は <nav>、list は RAC が描画する <ol>。nav > ol が意味的に正しい構造\n root: 'flex',\n list: [\n 'flex flex-wrap items-center gap-1.5',\n // 先頭の項目だけ区切り文字を隠す。各項目が自分の前に区切りを持つ構造\n '[&>li:first-child>[data-slot=separator]]:hidden',\n ].join(' '),\n item: 'flex items-center gap-1.5',\n link: [\n 'text-[var(--novi-color-muted)] underline-offset-4',\n 'transition-colors duration-[var(--novi-duration-fast)] ease-[var(--novi-ease-standard)]',\n 'hover:text-[var(--novi-color-fg)] hover:underline',\n focusRing,\n ].join(' '),\n // 装飾なので支援技術には読ませない\n separator: 'text-[var(--novi-color-border-strong)] select-none',\n // 現在地はリンクにしない。色ではなく太さで示す\n current: 'text-[var(--novi-color-fg)] font-medium',\n} satisfies SlotMap<typeof breadcrumbsSlots, (typeof breadcrumbsRequiredSlots)[number]>\n\nconst size: VariantMap<NoviSize, { list: string }> = {\n sm: { list: 'text-[length:var(--novi-text-xs)]' },\n md: { list: 'text-[length:var(--novi-text-sm)]' },\n lg: { list: 'text-[length:var(--novi-text-base)]' },\n}\n\n/**\n * Breadcrumbs のスタイル定義。\n *\n * @example\n * const myCrumbs = tv({ extend: breadcrumbsStyles, slots: { separator: 'mx-2' } })\n */\nexport const breadcrumbsStyles = tv({\n slots,\n variants: { size },\n defaultVariants: { size: 'md' },\n})\n\nexport type BreadcrumbsStyleProps = Parameters<typeof breadcrumbsStyles>[0]\n"],"mappings":";;;AAUA,MAAM,QAAQ;CAEZ,MAAM;CACN,MAAM,CACJ,uCAEA,iDACF,CAAC,CAAC,KAAK,GAAG;CACV,MAAM;CACN,MAAM;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,GAAG;CAEV,WAAW;CAEX,SAAS;AACX;;;;;;;AAcA,MAAa,oBAAoB,GAAG;CAClC;CACA,UAAU,EAAE;EAbZ,IAAI,EAAE,MAAM,oCAAoC;EAChD,IAAI,EAAE,MAAM,oCAAoC;EAChD,IAAI,EAAE,MAAM,sCAAsC;CAWtC,EAAK;CACjB,iBAAiB,EAAE,MAAM,KAAK;AAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Breadcrumb, BreadcrumbProps, Breadcrumbs } from "./breadcrumbs.mjs";
2
+ import { BreadcrumbsStyleProps, breadcrumbsStyles } from "./breadcrumbs.styles.mjs";
3
+ export { Breadcrumb, type BreadcrumbProps, Breadcrumbs, type BreadcrumbsStyleProps, breadcrumbsStyles };
@@ -0,0 +1,14 @@
1
+ import { ButtonProps } from "@novi-ui/core";
2
+ //#region src/button/button.d.ts
3
+ /**
4
+ * ボタン。
5
+ *
6
+ * @example
7
+ * <Button variant="solid" color="primary" onPress={() => save()}>
8
+ * 保存
9
+ * </Button>
10
+ */
11
+ declare function Button({ variant, size, color, radius, isDisabled, isLoading, type, onPress, startContent, endContent, children, className, classNames, id }: ButtonProps): import("react").JSX.Element;
12
+ //#endregion
13
+ export { Button };
14
+ //# sourceMappingURL=button.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.mts","names":[],"sources":["../../src/button/button.tsx"],"mappings":";;;;;;;;;;iBAcgB,SACd,SACA,MACA,OACA,QACA,YACA,WACA,MACA,SACA,cACA,YACA,UACA,WACA,YACA,MACC,8BAAW,IAAA"}
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import { buttonStyles } from "./button.styles.mjs";
3
+ import { Button } from "react-aria-components";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/button/button.tsx
6
+ /**
7
+ * ボタン。
8
+ *
9
+ * @example
10
+ * <Button variant="solid" color="primary" onPress={() => save()}>
11
+ * 保存
12
+ * </Button>
13
+ */
14
+ function Button$1({ variant, size, color, radius, isDisabled, isLoading, type = "button", onPress, startContent, endContent, children, className, classNames, id }) {
15
+ const s = buttonStyles({
16
+ variant,
17
+ size,
18
+ color,
19
+ radius
20
+ });
21
+ return /* @__PURE__ */ jsxs(Button, {
22
+ id,
23
+ type,
24
+ isDisabled: isDisabled === true || isLoading === true,
25
+ onPress,
26
+ "data-slot": "root",
27
+ "data-loading": isLoading === true ? true : void 0,
28
+ className: s.root({ class: [className, classNames?.root] }),
29
+ children: [
30
+ isLoading === true && /* @__PURE__ */ jsx("span", {
31
+ "data-slot": "spinner",
32
+ className: s.spinner({ class: classNames?.spinner }),
33
+ "aria-hidden": "true",
34
+ children: /* @__PURE__ */ jsxs("svg", {
35
+ viewBox: "0 0 16 16",
36
+ width: "1em",
37
+ height: "1em",
38
+ fill: "none",
39
+ "aria-hidden": "true",
40
+ children: [/* @__PURE__ */ jsx("circle", {
41
+ cx: "8",
42
+ cy: "8",
43
+ r: "6",
44
+ stroke: "currentColor",
45
+ strokeWidth: "2",
46
+ opacity: "0.25"
47
+ }), /* @__PURE__ */ jsx("path", {
48
+ d: "M14 8a6 6 0 0 0-6-6",
49
+ stroke: "currentColor",
50
+ strokeWidth: "2"
51
+ })]
52
+ })
53
+ }),
54
+ startContent !== void 0 && /* @__PURE__ */ jsx("span", {
55
+ "data-slot": "startContent",
56
+ className: s.startContent({ class: classNames?.startContent }),
57
+ children: startContent
58
+ }),
59
+ /* @__PURE__ */ jsx("span", {
60
+ "data-slot": "label",
61
+ className: s.label({ class: classNames?.label }),
62
+ children
63
+ }),
64
+ endContent !== void 0 && /* @__PURE__ */ jsx("span", {
65
+ "data-slot": "endContent",
66
+ className: s.endContent({ class: classNames?.endContent }),
67
+ children: endContent
68
+ })
69
+ ]
70
+ });
71
+ }
72
+ //#endregion
73
+ export { Button$1 as Button };
74
+
75
+ //# sourceMappingURL=button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.mjs","names":["Button","RACButton"],"sources":["../../src/button/button.tsx"],"sourcesContent":["'use client'\n\nimport type { ButtonProps } from '@novi-ui/core'\nimport { Button as RACButton } from 'react-aria-components'\nimport { buttonStyles } from './button.styles'\n\n/**\n * ボタン。\n *\n * @example\n * <Button variant=\"solid\" color=\"primary\" onPress={() => save()}>\n * 保存\n * </Button>\n */\nexport function Button({\n variant,\n size,\n color,\n radius,\n isDisabled,\n isLoading,\n type = 'button',\n onPress,\n startContent,\n endContent,\n children,\n className,\n classNames,\n id,\n}: ButtonProps) {\n const s = buttonStyles({ variant, size, color, radius })\n\n return (\n <RACButton\n id={id}\n type={type}\n // 読み込み中は押せないようにする。見た目だけ変えて押せる状態にしない\n isDisabled={isDisabled === true || isLoading === true}\n onPress={onPress}\n data-slot=\"root\"\n data-loading={isLoading === true ? true : undefined}\n className={s.root({ class: [className, classNames?.root] })}\n >\n {isLoading === true && (\n <span\n data-slot=\"spinner\"\n className={s.spinner({ class: classNames?.spinner })}\n aria-hidden=\"true\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" opacity=\"0.25\" />\n <path d=\"M14 8a6 6 0 0 0-6-6\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </span>\n )}\n\n {startContent !== undefined && (\n <span\n data-slot=\"startContent\"\n className={s.startContent({ class: classNames?.startContent })}\n >\n {startContent}\n </span>\n )}\n\n <span data-slot=\"label\" className={s.label({ class: classNames?.label })}>\n {children}\n </span>\n\n {endContent !== undefined && (\n <span data-slot=\"endContent\" className={s.endContent({ class: classNames?.endContent })}>\n {endContent}\n </span>\n )}\n </RACButton>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgBA,SAAO,EACrB,SACA,MACA,OACA,QACA,YACA,WACA,OAAO,UACP,SACA,cACA,YACA,UACA,WACA,YACA,MACc;CACd,MAAM,IAAI,aAAa;EAAE;EAAS;EAAM;EAAO;CAAO,CAAC;CAEvD,OACE,qBAACC,QAAD;EACM;EACE;EAEN,YAAY,eAAe,QAAQ,cAAc;EACxC;EACT,aAAU;EACV,gBAAc,cAAc,OAAO,OAAO,KAAA;EAC1C,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC;EAR5D,UAAA;GAUG,cAAc,QACb,oBAAC,QAAD;IACE,aAAU;IACV,WAAW,EAAE,QAAQ,EAAE,OAAO,YAAY,QAAQ,CAAC;IACnD,eAAY;IAEZ,UAAA,qBAAC,OAAD;KAAK,SAAQ;KAAY,OAAM;KAAM,QAAO;KAAM,MAAK;KAAO,eAAY;KAA1E,UAAA,CACE,oBAAC,UAAD;MAAQ,IAAG;MAAI,IAAG;MAAI,GAAE;MAAI,QAAO;MAAe,aAAY;MAAI,SAAQ;KAAQ,CAAA,GAClF,oBAAC,QAAD;MAAM,GAAE;MAAsB,QAAO;MAAe,aAAY;KAAK,CAAA,CAClE;;GACD,CAAA;GAGP,iBAAiB,KAAA,KAChB,oBAAC,QAAD;IACE,aAAU;IACV,WAAW,EAAE,aAAa,EAAE,OAAO,YAAY,aAAa,CAAC;IAE5D,UAAA;GACG,CAAA;GAGR,oBAAC,QAAD;IAAM,aAAU;IAAQ,WAAW,EAAE,MAAM,EAAE,OAAO,YAAY,MAAM,CAAC;IACpE;GACG,CAAA;GAEL,eAAe,KAAA,KACd,oBAAC,QAAD;IAAM,aAAU;IAAa,WAAW,EAAE,WAAW,EAAE,OAAO,YAAY,WAAW,CAAC;IACnF,UAAA;GACG,CAAA;EAEC;;AAEf"}
@@ -0,0 +1,82 @@
1
+ import { VariantMap } from "@novi-ui/core";
2
+ //#region src/button/button.styles.d.ts
3
+ /**
4
+ * Button のスタイル定義。
5
+ *
6
+ * `tv({ extend: buttonStyles })` で拡張できるよう named export する。
7
+ * npm 配布の「コードを所有できない」という不満への回答(FR-04)。
8
+ *
9
+ * slot ベースの定義なので、拡張は `base` ではなく `slots` で行う。
10
+ * `base` は黙って無視される。
11
+ *
12
+ * @example
13
+ * import { buttonStyles } from '@novi-ui/raster'
14
+ * import { tv } from 'tailwind-variants'
15
+ *
16
+ * const myButton = tv({
17
+ * extend: buttonStyles,
18
+ * slots: { root: 'uppercase tracking-widest' },
19
+ * })
20
+ */
21
+ declare const buttonStyles: import("tailwind-variants").TVReturnType<{
22
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
23
+ root: string;
24
+ }>;
25
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
26
+ root: string;
27
+ }>;
28
+ size: VariantMap<"sm" | "md" | "lg", {
29
+ root: string;
30
+ }>;
31
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
32
+ root: string;
33
+ }>;
34
+ }, {
35
+ root: string;
36
+ label: string;
37
+ startContent: string;
38
+ endContent: string;
39
+ spinner: string;
40
+ }, undefined, {
41
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
42
+ root: string;
43
+ }>;
44
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
45
+ root: string;
46
+ }>;
47
+ size: VariantMap<"sm" | "md" | "lg", {
48
+ root: string;
49
+ }>;
50
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
51
+ root: string;
52
+ }>;
53
+ }, {
54
+ root: string;
55
+ label: string;
56
+ startContent: string;
57
+ endContent: string;
58
+ spinner: string;
59
+ }, import("tailwind-variants").TVReturnTypeLike<{
60
+ color: VariantMap<"default" | "primary" | "secondary" | "success" | "warning" | "danger", {
61
+ root: string;
62
+ }>;
63
+ variant: VariantMap<"solid" | "outline" | "soft" | "ghost" | "plain", {
64
+ root: string;
65
+ }>;
66
+ size: VariantMap<"sm" | "md" | "lg", {
67
+ root: string;
68
+ }>;
69
+ radius: VariantMap<"sm" | "md" | "lg" | "none" | "full", {
70
+ root: string;
71
+ }>;
72
+ }, {
73
+ root: string;
74
+ label: string;
75
+ startContent: string;
76
+ endContent: string;
77
+ spinner: string;
78
+ }>>;
79
+ type ButtonStyleProps = Parameters<typeof buttonStyles>[0];
80
+ //#endregion
81
+ export { ButtonStyleProps, buttonStyles };
82
+ //# sourceMappingURL=button.styles.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.styles.d.mts","names":[],"sources":["../../src/button/button.styles.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;cA0Ia,0CAAY;;IAhGkB;;;IAoDI;;;IAWN;;;IAOI;;;;;;;;;;IAtEF;;;IAoDI;;;IAWN;;;IAOI;;;;;;;;;;IAtEF;;;IAoDI;;;IAWN;;;IAOI;;;;;;;;;KAgCjC,mBAAmB,kBAAkB"}