@pearpages/pulp-react 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/ListboxOptions-DLsT-dkV.d.ts +11 -0
  4. package/dist/ToggleField-C-qKSgHh.d.ts +3 -0
  5. package/dist/accordion.css +90 -0
  6. package/dist/accordion.css.map +1 -0
  7. package/dist/accordion.d.ts +71 -0
  8. package/dist/accordion.js +6 -0
  9. package/dist/accordion.js.map +1 -0
  10. package/dist/alert.css +246 -0
  11. package/dist/alert.css.map +1 -0
  12. package/dist/alert.d.ts +46 -0
  13. package/dist/alert.js +10 -0
  14. package/dist/alert.js.map +1 -0
  15. package/dist/badge.css +89 -0
  16. package/dist/badge.css.map +1 -0
  17. package/dist/badge.d.ts +38 -0
  18. package/dist/badge.js +5 -0
  19. package/dist/badge.js.map +1 -0
  20. package/dist/button.css +162 -0
  21. package/dist/button.css.map +1 -0
  22. package/dist/button.d.ts +61 -0
  23. package/dist/button.js +8 -0
  24. package/dist/button.js.map +1 -0
  25. package/dist/calendar.css +128 -0
  26. package/dist/calendar.css.map +1 -0
  27. package/dist/calendar.d.ts +48 -0
  28. package/dist/calendar.js +6 -0
  29. package/dist/calendar.js.map +1 -0
  30. package/dist/card.css +66 -0
  31. package/dist/card.css.map +1 -0
  32. package/dist/card.d.ts +69 -0
  33. package/dist/card.js +5 -0
  34. package/dist/card.js.map +1 -0
  35. package/dist/checkbox.css +106 -0
  36. package/dist/checkbox.css.map +1 -0
  37. package/dist/checkbox.d.ts +41 -0
  38. package/dist/checkbox.js +7 -0
  39. package/dist/checkbox.js.map +1 -0
  40. package/dist/chunk-2PXTVZ7H.js +95 -0
  41. package/dist/chunk-2PXTVZ7H.js.map +1 -0
  42. package/dist/chunk-2ZP4ZBI5.js +43 -0
  43. package/dist/chunk-2ZP4ZBI5.js.map +1 -0
  44. package/dist/chunk-3GWESUGD.js +28 -0
  45. package/dist/chunk-3GWESUGD.js.map +1 -0
  46. package/dist/chunk-4HRNRTXI.js +25 -0
  47. package/dist/chunk-4HRNRTXI.js.map +1 -0
  48. package/dist/chunk-5SBKZS56.js +56 -0
  49. package/dist/chunk-5SBKZS56.js.map +1 -0
  50. package/dist/chunk-6I26MMQF.js +19 -0
  51. package/dist/chunk-6I26MMQF.js.map +1 -0
  52. package/dist/chunk-75GTNRBH.js +45 -0
  53. package/dist/chunk-75GTNRBH.js.map +1 -0
  54. package/dist/chunk-7DS4I7OJ.js +30 -0
  55. package/dist/chunk-7DS4I7OJ.js.map +1 -0
  56. package/dist/chunk-ASNTNTJW.js +27 -0
  57. package/dist/chunk-ASNTNTJW.js.map +1 -0
  58. package/dist/chunk-ASOQ2MVR.js +19 -0
  59. package/dist/chunk-ASOQ2MVR.js.map +1 -0
  60. package/dist/chunk-AWQHULJC.js +31 -0
  61. package/dist/chunk-AWQHULJC.js.map +1 -0
  62. package/dist/chunk-BBV4L5WO.js +43 -0
  63. package/dist/chunk-BBV4L5WO.js.map +1 -0
  64. package/dist/chunk-CZBCGLEM.js +9 -0
  65. package/dist/chunk-CZBCGLEM.js.map +1 -0
  66. package/dist/chunk-DWE374JX.js +65 -0
  67. package/dist/chunk-DWE374JX.js.map +1 -0
  68. package/dist/chunk-DXOOW6Q6.js +159 -0
  69. package/dist/chunk-DXOOW6Q6.js.map +1 -0
  70. package/dist/chunk-F3OFZGGE.js +116 -0
  71. package/dist/chunk-F3OFZGGE.js.map +1 -0
  72. package/dist/chunk-FH54XQ35.js +125 -0
  73. package/dist/chunk-FH54XQ35.js.map +1 -0
  74. package/dist/chunk-FXRSZUDH.js +38 -0
  75. package/dist/chunk-FXRSZUDH.js.map +1 -0
  76. package/dist/chunk-GTTXRDXV.js +181 -0
  77. package/dist/chunk-GTTXRDXV.js.map +1 -0
  78. package/dist/chunk-I4KC4V6A.js +31 -0
  79. package/dist/chunk-I4KC4V6A.js.map +1 -0
  80. package/dist/chunk-I5OZ63W7.js +50 -0
  81. package/dist/chunk-I5OZ63W7.js.map +1 -0
  82. package/dist/chunk-IDNGNQNV.js +41 -0
  83. package/dist/chunk-IDNGNQNV.js.map +1 -0
  84. package/dist/chunk-J5S2HVHO.js +67 -0
  85. package/dist/chunk-J5S2HVHO.js.map +1 -0
  86. package/dist/chunk-K5QGGQOV.js +84 -0
  87. package/dist/chunk-K5QGGQOV.js.map +1 -0
  88. package/dist/chunk-KPQGS4PG.js +77 -0
  89. package/dist/chunk-KPQGS4PG.js.map +1 -0
  90. package/dist/chunk-MI4QUKQS.js +8 -0
  91. package/dist/chunk-MI4QUKQS.js.map +1 -0
  92. package/dist/chunk-MRQWUCBA.js +57 -0
  93. package/dist/chunk-MRQWUCBA.js.map +1 -0
  94. package/dist/chunk-MXWXJZFS.js +48 -0
  95. package/dist/chunk-MXWXJZFS.js.map +1 -0
  96. package/dist/chunk-N7L66GMG.js +129 -0
  97. package/dist/chunk-N7L66GMG.js.map +1 -0
  98. package/dist/chunk-NAYFLTK6.js +32 -0
  99. package/dist/chunk-NAYFLTK6.js.map +1 -0
  100. package/dist/chunk-O6OBFL3Q.js +155 -0
  101. package/dist/chunk-O6OBFL3Q.js.map +1 -0
  102. package/dist/chunk-OGIQRHNF.js +52 -0
  103. package/dist/chunk-OGIQRHNF.js.map +1 -0
  104. package/dist/chunk-OUFAFINB.js +45 -0
  105. package/dist/chunk-OUFAFINB.js.map +1 -0
  106. package/dist/chunk-OXYP34CG.js +43 -0
  107. package/dist/chunk-OXYP34CG.js.map +1 -0
  108. package/dist/chunk-P5C2U5ZF.js +73 -0
  109. package/dist/chunk-P5C2U5ZF.js.map +1 -0
  110. package/dist/chunk-PM4YO67Q.js +53 -0
  111. package/dist/chunk-PM4YO67Q.js.map +1 -0
  112. package/dist/chunk-Q6J6BMSB.js +86 -0
  113. package/dist/chunk-Q6J6BMSB.js.map +1 -0
  114. package/dist/chunk-T76YSNTZ.js +33 -0
  115. package/dist/chunk-T76YSNTZ.js.map +1 -0
  116. package/dist/chunk-TGMDOQCL.js +53 -0
  117. package/dist/chunk-TGMDOQCL.js.map +1 -0
  118. package/dist/chunk-TVI5AXLE.js +41 -0
  119. package/dist/chunk-TVI5AXLE.js.map +1 -0
  120. package/dist/chunk-U6QRAD73.js +22 -0
  121. package/dist/chunk-U6QRAD73.js.map +1 -0
  122. package/dist/chunk-UX42PQLT.js +76 -0
  123. package/dist/chunk-UX42PQLT.js.map +1 -0
  124. package/dist/chunk-XDVS7HX7.js +100 -0
  125. package/dist/chunk-XDVS7HX7.js.map +1 -0
  126. package/dist/chunk-Y4TZA77G.js +57 -0
  127. package/dist/chunk-Y4TZA77G.js.map +1 -0
  128. package/dist/chunk-YUHS5S5Y.js +12 -0
  129. package/dist/chunk-YUHS5S5Y.js.map +1 -0
  130. package/dist/chunk-Z4PN6B2C.js +17 -0
  131. package/dist/chunk-Z4PN6B2C.js.map +1 -0
  132. package/dist/chunk-ZVDN3GRI.js +49 -0
  133. package/dist/chunk-ZVDN3GRI.js.map +1 -0
  134. package/dist/combobox.css +280 -0
  135. package/dist/combobox.css.map +1 -0
  136. package/dist/combobox.d.ts +75 -0
  137. package/dist/combobox.js +10 -0
  138. package/dist/combobox.js.map +1 -0
  139. package/dist/component-manifest.json +3370 -0
  140. package/dist/date-picker.css +267 -0
  141. package/dist/date-picker.css.map +1 -0
  142. package/dist/date-picker.d.ts +59 -0
  143. package/dist/date-picker.js +8 -0
  144. package/dist/date-picker.js.map +1 -0
  145. package/dist/dialog.css +62 -0
  146. package/dist/dialog.css.map +1 -0
  147. package/dist/dialog.d.ts +56 -0
  148. package/dist/dialog.js +3 -0
  149. package/dist/dialog.js.map +1 -0
  150. package/dist/field.css +28 -0
  151. package/dist/field.css.map +1 -0
  152. package/dist/field.d.ts +98 -0
  153. package/dist/field.js +5 -0
  154. package/dist/field.js.map +1 -0
  155. package/dist/floating-Bw-LN_QT.d.ts +5 -0
  156. package/dist/heading.css +30 -0
  157. package/dist/heading.css.map +1 -0
  158. package/dist/heading.d.ts +316 -0
  159. package/dist/heading.js +4 -0
  160. package/dist/heading.js.map +1 -0
  161. package/dist/icon-button.css +177 -0
  162. package/dist/icon-button.css.map +1 -0
  163. package/dist/icon-button.d.ts +29 -0
  164. package/dist/icon-button.js +9 -0
  165. package/dist/icon-button.js.map +1 -0
  166. package/dist/icon.css +25 -0
  167. package/dist/icon.css.map +1 -0
  168. package/dist/icon.d.ts +33 -0
  169. package/dist/icon.js +4 -0
  170. package/dist/icon.js.map +1 -0
  171. package/dist/index.css +2345 -0
  172. package/dist/index.css.map +1 -0
  173. package/dist/index.d.ts +42 -0
  174. package/dist/index.js +49 -0
  175. package/dist/index.js.map +1 -0
  176. package/dist/inline.css +63 -0
  177. package/dist/inline.css.map +1 -0
  178. package/dist/inline.d.ts +322 -0
  179. package/dist/inline.js +4 -0
  180. package/dist/inline.js.map +1 -0
  181. package/dist/listbox.css +95 -0
  182. package/dist/listbox.css.map +1 -0
  183. package/dist/listbox.d.ts +47 -0
  184. package/dist/listbox.js +7 -0
  185. package/dist/listbox.js.map +1 -0
  186. package/dist/menu.css +102 -0
  187. package/dist/menu.css.map +1 -0
  188. package/dist/menu.d.ts +76 -0
  189. package/dist/menu.js +9 -0
  190. package/dist/menu.js.map +1 -0
  191. package/dist/pagination.css +212 -0
  192. package/dist/pagination.css.map +1 -0
  193. package/dist/pagination.d.ts +52 -0
  194. package/dist/pagination.js +10 -0
  195. package/dist/pagination.js.map +1 -0
  196. package/dist/picker.css +209 -0
  197. package/dist/picker.css.map +1 -0
  198. package/dist/picker.d.ts +57 -0
  199. package/dist/picker.js +8 -0
  200. package/dist/picker.js.map +1 -0
  201. package/dist/popover.css +48 -0
  202. package/dist/popover.css.map +1 -0
  203. package/dist/popover.d.ts +68 -0
  204. package/dist/popover.js +7 -0
  205. package/dist/popover.js.map +1 -0
  206. package/dist/progress.css +83 -0
  207. package/dist/progress.css.map +1 -0
  208. package/dist/progress.d.ts +40 -0
  209. package/dist/progress.js +5 -0
  210. package/dist/progress.js.map +1 -0
  211. package/dist/radio.css +107 -0
  212. package/dist/radio.css.map +1 -0
  213. package/dist/radio.d.ts +68 -0
  214. package/dist/radio.js +6 -0
  215. package/dist/radio.js.map +1 -0
  216. package/dist/select.css +98 -0
  217. package/dist/select.css.map +1 -0
  218. package/dist/select.d.ts +39 -0
  219. package/dist/select.js +6 -0
  220. package/dist/select.js.map +1 -0
  221. package/dist/skeleton.css +59 -0
  222. package/dist/skeleton.css.map +1 -0
  223. package/dist/skeleton.d.ts +34 -0
  224. package/dist/skeleton.js +4 -0
  225. package/dist/skeleton.js.map +1 -0
  226. package/dist/slider.css +126 -0
  227. package/dist/slider.css.map +1 -0
  228. package/dist/slider.d.ts +61 -0
  229. package/dist/slider.js +5 -0
  230. package/dist/slider.js.map +1 -0
  231. package/dist/spinner.css +60 -0
  232. package/dist/spinner.css.map +1 -0
  233. package/dist/spinner.d.ts +34 -0
  234. package/dist/spinner.js +5 -0
  235. package/dist/spinner.js.map +1 -0
  236. package/dist/stack.css +60 -0
  237. package/dist/stack.css.map +1 -0
  238. package/dist/stack.d.ts +319 -0
  239. package/dist/stack.js +4 -0
  240. package/dist/stack.js.map +1 -0
  241. package/dist/switch.css +97 -0
  242. package/dist/switch.css.map +1 -0
  243. package/dist/switch.d.ts +35 -0
  244. package/dist/switch.js +7 -0
  245. package/dist/switch.js.map +1 -0
  246. package/dist/table.css +188 -0
  247. package/dist/table.css.map +1 -0
  248. package/dist/table.d.ts +137 -0
  249. package/dist/table.js +6 -0
  250. package/dist/table.js.map +1 -0
  251. package/dist/tabs.css +75 -0
  252. package/dist/tabs.css.map +1 -0
  253. package/dist/tabs.d.ts +73 -0
  254. package/dist/tabs.js +5 -0
  255. package/dist/tabs.js.map +1 -0
  256. package/dist/text-field.css +75 -0
  257. package/dist/text-field.css.map +1 -0
  258. package/dist/text-field.d.ts +43 -0
  259. package/dist/text-field.js +6 -0
  260. package/dist/text-field.js.map +1 -0
  261. package/dist/text.css +53 -0
  262. package/dist/text.css.map +1 -0
  263. package/dist/text.d.ts +331 -0
  264. package/dist/text.js +4 -0
  265. package/dist/text.js.map +1 -0
  266. package/dist/textarea.css +84 -0
  267. package/dist/textarea.css.map +1 -0
  268. package/dist/textarea.d.ts +40 -0
  269. package/dist/textarea.js +6 -0
  270. package/dist/textarea.js.map +1 -0
  271. package/dist/toast.css +300 -0
  272. package/dist/toast.css.map +1 -0
  273. package/dist/toast.d.ts +60 -0
  274. package/dist/toast.js +11 -0
  275. package/dist/toast.js.map +1 -0
  276. package/dist/tooltip.css +36 -0
  277. package/dist/tooltip.css.map +1 -0
  278. package/dist/tooltip.d.ts +34 -0
  279. package/dist/tooltip.js +5 -0
  280. package/dist/tooltip.js.map +1 -0
  281. package/dist/visually-hidden.css +15 -0
  282. package/dist/visually-hidden.css.map +1 -0
  283. package/dist/visually-hidden.d.ts +308 -0
  284. package/dist/visually-hidden.js +4 -0
  285. package/dist/visually-hidden.js.map +1 -0
  286. package/package.json +261 -0
@@ -0,0 +1,267 @@
1
+ /* src/icon/Icon.module.css */
2
+ @layer components {
3
+ .Icon_icon {
4
+ display: inline-flex;
5
+ flex: none;
6
+ inline-size: 1em;
7
+ block-size: 1em;
8
+ font-size: var(--icon-size-md);
9
+ vertical-align: middle;
10
+ &[data-size=sm] {
11
+ font-size: var(--icon-size-sm);
12
+ }
13
+ &[data-size=lg] {
14
+ font-size: var(--icon-size-lg);
15
+ }
16
+ &[data-size=inherit] {
17
+ font-size: inherit;
18
+ }
19
+ & > * {
20
+ inline-size: 100%;
21
+ block-size: 100%;
22
+ }
23
+ }
24
+ }
25
+
26
+ /* src/calendar/Calendar.module.css */
27
+ @layer components {
28
+ .Calendar_root {
29
+ display: inline-flex;
30
+ flex-direction: column;
31
+ gap: var(--calendar-gap);
32
+ padding: var(--calendar-padding);
33
+ background-color: var(--calendar-bg);
34
+ color: var(--calendar-fg);
35
+ font-family: var(--calendar-font-family);
36
+ font-size: var(--calendar-font-size);
37
+ }
38
+ .Calendar_header {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ gap: var(--calendar-gap);
43
+ }
44
+ .Calendar_heading {
45
+ margin: 0;
46
+ font-size: var(--calendar-heading-font-size);
47
+ font-weight: var(--calendar-heading-font-weight);
48
+ }
49
+ .Calendar_nav {
50
+ display: grid;
51
+ place-items: center;
52
+ inline-size: var(--calendar-nav-size);
53
+ block-size: var(--calendar-nav-size);
54
+ padding: 0;
55
+ border: none;
56
+ border-radius: var(--calendar-nav-radius);
57
+ background-color: transparent;
58
+ color: var(--calendar-nav-fg);
59
+ cursor: pointer;
60
+ transition: background-color var(--calendar-motion-duration) var(--motion-easing-standard);
61
+ &[data-hovered] {
62
+ background-color: var(--calendar-nav-bg-hover);
63
+ color: var(--calendar-nav-fg-hover);
64
+ }
65
+ &[data-focus-visible] {
66
+ outline: var(--calendar-focus-ring-width) solid var(--calendar-focus-ring);
67
+ outline-offset: var(--calendar-focus-ring-offset);
68
+ }
69
+ &[data-disabled] {
70
+ cursor: not-allowed;
71
+ opacity: 0.55;
72
+ }
73
+ }
74
+ .Calendar_grid {
75
+ border-collapse: collapse;
76
+ border-spacing: 0;
77
+ }
78
+ .Calendar_weekday {
79
+ inline-size: var(--calendar-cell-size);
80
+ padding: 0;
81
+ color: var(--calendar-weekday-fg);
82
+ font-size: var(--calendar-weekday-font-size);
83
+ font-weight: var(--calendar-weekday-font-weight);
84
+ text-align: center;
85
+ }
86
+ .Calendar_cell {
87
+ display: grid;
88
+ place-items: center;
89
+ inline-size: var(--calendar-cell-size);
90
+ block-size: var(--calendar-cell-size);
91
+ border-radius: var(--calendar-cell-radius);
92
+ color: var(--calendar-cell-fg);
93
+ cursor: pointer;
94
+ outline: none;
95
+ transition: background-color var(--calendar-motion-duration) var(--motion-easing-standard);
96
+ &[data-outside-month] {
97
+ display: none;
98
+ }
99
+ &[data-today] {
100
+ color: var(--calendar-cell-fg-today);
101
+ font-weight: var(--calendar-heading-font-weight);
102
+ }
103
+ &[data-hovered] {
104
+ background-color: var(--calendar-cell-bg-hover);
105
+ }
106
+ &[data-selected] {
107
+ background-color: var(--calendar-cell-bg-selected);
108
+ color: var(--calendar-cell-fg-selected);
109
+ &[data-hovered] {
110
+ background-color: var(--calendar-cell-bg-selected-hover);
111
+ }
112
+ }
113
+ &[data-focus-visible] {
114
+ outline: var(--calendar-focus-ring-width) solid var(--calendar-focus-ring);
115
+ outline-offset: var(--calendar-focus-ring-offset);
116
+ }
117
+ &[data-unavailable] {
118
+ color: var(--calendar-cell-fg-unavailable);
119
+ text-decoration: line-through;
120
+ cursor: not-allowed;
121
+ }
122
+ &[data-disabled] {
123
+ color: var(--calendar-cell-fg-unavailable);
124
+ cursor: not-allowed;
125
+ }
126
+ }
127
+ }
128
+
129
+ /* src/internal/AriaField.module.css */
130
+ @layer components {
131
+ .AriaField_field {
132
+ display: flex;
133
+ flex-direction: column;
134
+ gap: var(--field-gap);
135
+ font-family: var(--font-family-body);
136
+ }
137
+ .AriaField_label {
138
+ font-size: var(--field-label-font-size);
139
+ font-weight: var(--field-label-font-weight);
140
+ color: var(--field-label-fg);
141
+ }
142
+ .AriaField_required {
143
+ margin-inline-start: var(--field-required-gap);
144
+ color: var(--field-required-fg);
145
+ }
146
+ .AriaField_description {
147
+ margin: 0;
148
+ font-size: var(--field-description-font-size);
149
+ color: var(--field-description-fg);
150
+ }
151
+ .AriaField_error {
152
+ margin: 0;
153
+ font-size: var(--field-error-font-size);
154
+ color: var(--field-error-fg);
155
+ }
156
+ }
157
+
158
+ /* src/date-picker/DatePicker.module.css */
159
+ @layer components {
160
+ .DatePicker_root {
161
+ --_height: var(--date-picker-height-md);
162
+ --_font-size: var(--date-picker-font-size-md);
163
+ --_border: var(--date-picker-border-default);
164
+ font-family: var(--date-picker-font-family);
165
+ &[data-size=sm] {
166
+ --_height: var(--date-picker-height-sm);
167
+ --_font-size: var(--date-picker-font-size-sm);
168
+ }
169
+ &[data-size=lg] {
170
+ --_height: var(--date-picker-height-lg);
171
+ --_font-size: var(--date-picker-font-size-lg);
172
+ }
173
+ &[data-invalid] {
174
+ --_border: var(--date-picker-border-invalid);
175
+ }
176
+ }
177
+ .DatePicker_control {
178
+ display: flex;
179
+ align-items: center;
180
+ min-block-size: var(--_height);
181
+ padding-inline-start: var(--date-picker-padding-inline);
182
+ border: var(--size-hairline) solid var(--_border);
183
+ border-radius: var(--date-picker-radius);
184
+ background-color: var(--date-picker-bg);
185
+ color: var(--date-picker-fg);
186
+ font-size: var(--_font-size);
187
+ transition: border-color var(--date-picker-motion-duration) var(--motion-easing-standard);
188
+ &[data-focus-within] {
189
+ border-color: var(--date-picker-border-focus);
190
+ outline: var(--date-picker-focus-ring-width) solid var(--date-picker-focus-ring);
191
+ outline-offset: var(--date-picker-focus-ring-offset);
192
+ }
193
+ &[data-disabled] {
194
+ cursor: not-allowed;
195
+ opacity: 0.55;
196
+ }
197
+ &[data-hovered]:not([data-focus-within], [data-disabled]) {
198
+ border-color: var(--date-picker-border-hover);
199
+ }
200
+ }
201
+ .DatePicker_input {
202
+ display: flex;
203
+ flex: 1;
204
+ align-items: center;
205
+ }
206
+ .DatePicker_segment {
207
+ padding-inline: var(--date-picker-segment-padding-inline);
208
+ border-radius: var(--date-picker-segment-radius);
209
+ font-variant-numeric: tabular-nums;
210
+ outline: none;
211
+ caret-color: transparent;
212
+ &[data-type=literal] {
213
+ padding-inline: 0;
214
+ }
215
+ &[data-placeholder] {
216
+ color: var(--date-picker-segment-fg-placeholder);
217
+ }
218
+ &[data-focused] {
219
+ background-color: var(--date-picker-segment-bg-focus);
220
+ color: var(--date-picker-fg);
221
+ }
222
+ }
223
+ .DatePicker_button {
224
+ display: grid;
225
+ place-items: center;
226
+ inline-size: var(--date-picker-icon-size);
227
+ block-size: calc(var(--_height) - 2 * var(--size-hairline));
228
+ padding: 0;
229
+ border: none;
230
+ border-radius: var(--date-picker-radius);
231
+ background-color: transparent;
232
+ color: var(--date-picker-icon);
233
+ cursor: pointer;
234
+ &[data-focus-visible] {
235
+ outline: var(--date-picker-focus-ring-width) solid var(--date-picker-focus-ring);
236
+ outline-offset: calc(-1 * var(--date-picker-focus-ring-width));
237
+ }
238
+ &[data-disabled] {
239
+ cursor: not-allowed;
240
+ }
241
+ }
242
+ .DatePicker_popover {
243
+ padding-block-start: var(--date-picker-gap);
244
+ animation: DatePicker_fade var(--date-picker-popover-duration) var(--motion-easing-standard);
245
+ &[data-placement=top] {
246
+ padding-block: 0 var(--date-picker-gap);
247
+ }
248
+ }
249
+ .DatePicker_dialog {
250
+ border: var(--size-hairline) solid var(--date-picker-dialog-border);
251
+ border-radius: var(--date-picker-dialog-radius);
252
+ background-color: var(--date-picker-dialog-bg);
253
+ box-shadow: var(--date-picker-popover-shadow);
254
+ outline: none;
255
+ }
256
+ @keyframes DatePicker_fade {
257
+ from {
258
+ opacity: 0;
259
+ }
260
+ }
261
+ @media (prefers-reduced-motion: reduce) {
262
+ .DatePicker_popover {
263
+ animation: none;
264
+ }
265
+ }
266
+ }
267
+ /*# sourceMappingURL=date-picker.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icon/Icon.module.css","../src/calendar/Calendar.module.css","../src/internal/AriaField.module.css","../src/date-picker/DatePicker.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/*\n * Every value is a token (--calendar-*). React Aria writes the cell state:\n * data-selected, data-focused, data-focus-visible, data-hovered,\n * data-disabled, data-unavailable, data-today, data-outside-month.\n */\n\n@layer components {\n .root {\n display: inline-flex;\n flex-direction: column;\n gap: var(--calendar-gap);\n padding: var(--calendar-padding);\n background-color: var(--calendar-bg);\n color: var(--calendar-fg);\n font-family: var(--calendar-font-family);\n font-size: var(--calendar-font-size);\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--calendar-gap);\n }\n\n .heading {\n margin: 0;\n font-size: var(--calendar-heading-font-size);\n font-weight: var(--calendar-heading-font-weight);\n }\n\n .nav {\n display: grid;\n place-items: center;\n inline-size: var(--calendar-nav-size);\n block-size: var(--calendar-nav-size);\n padding: 0;\n border: none;\n border-radius: var(--calendar-nav-radius);\n background-color: transparent;\n color: var(--calendar-nav-fg);\n cursor: pointer;\n transition: background-color var(--calendar-motion-duration) var(--motion-easing-standard);\n\n &[data-hovered] {\n background-color: var(--calendar-nav-bg-hover);\n color: var(--calendar-nav-fg-hover);\n }\n\n &[data-focus-visible] {\n outline: var(--calendar-focus-ring-width) solid var(--calendar-focus-ring);\n outline-offset: var(--calendar-focus-ring-offset);\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n }\n\n .grid {\n border-collapse: collapse;\n border-spacing: 0;\n }\n\n .weekday {\n inline-size: var(--calendar-cell-size);\n padding: 0;\n color: var(--calendar-weekday-fg);\n font-size: var(--calendar-weekday-font-size);\n font-weight: var(--calendar-weekday-font-weight);\n text-align: center;\n }\n\n .cell {\n display: grid;\n place-items: center;\n inline-size: var(--calendar-cell-size);\n block-size: var(--calendar-cell-size);\n border-radius: var(--calendar-cell-radius);\n color: var(--calendar-cell-fg);\n cursor: pointer;\n outline: none;\n transition: background-color var(--calendar-motion-duration) var(--motion-easing-standard);\n\n &[data-outside-month] {\n display: none;\n }\n\n &[data-today] {\n color: var(--calendar-cell-fg-today);\n font-weight: var(--calendar-heading-font-weight);\n }\n\n &[data-hovered] {\n background-color: var(--calendar-cell-bg-hover);\n }\n\n &[data-selected] {\n background-color: var(--calendar-cell-bg-selected);\n color: var(--calendar-cell-fg-selected);\n\n &[data-hovered] {\n background-color: var(--calendar-cell-bg-selected-hover);\n }\n }\n\n &[data-focus-visible] {\n outline: var(--calendar-focus-ring-width) solid var(--calendar-focus-ring);\n outline-offset: var(--calendar-focus-ring-offset);\n }\n\n &[data-unavailable] {\n color: var(--calendar-cell-fg-unavailable);\n text-decoration: line-through;\n cursor: not-allowed;\n }\n\n /* Disabled dims the days, not the month name, so the visible text keeps its contrast. */\n &[data-disabled] {\n color: var(--calendar-cell-fg-unavailable);\n cursor: not-allowed;\n }\n }\n}\n","/* The same --field-* tokens Field reads, on React Aria's label, description and error parts. */\n\n@layer components {\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--field-gap);\n font-family: var(--font-family-body);\n }\n\n .label {\n font-size: var(--field-label-font-size);\n font-weight: var(--field-label-font-weight);\n color: var(--field-label-fg);\n }\n\n .required {\n margin-inline-start: var(--field-required-gap);\n color: var(--field-required-fg);\n }\n\n .description {\n margin: 0;\n font-size: var(--field-description-font-size);\n color: var(--field-description-fg);\n }\n\n .error {\n margin: 0;\n font-size: var(--field-error-font-size);\n color: var(--field-error-fg);\n }\n}\n","/*\n * Every value is a token (--date-picker-*); the calendar reads --calendar-*.\n * The control is a group drawn like a text field around the date segments.\n * React Aria writes the state: data-focus-within, data-hovered,\n * data-disabled, data-invalid on the group; data-placeholder, data-focused\n * on each segment.\n */\n\n@layer components {\n .root {\n --_height: var(--date-picker-height-md);\n --_font-size: var(--date-picker-font-size-md);\n --_border: var(--date-picker-border-default);\n\n font-family: var(--date-picker-font-family);\n\n &[data-size=\"sm\"] {\n --_height: var(--date-picker-height-sm);\n --_font-size: var(--date-picker-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n --_height: var(--date-picker-height-lg);\n --_font-size: var(--date-picker-font-size-lg);\n }\n\n &[data-invalid] { --_border: var(--date-picker-border-invalid); }\n }\n\n .control {\n display: flex;\n align-items: center;\n min-block-size: var(--_height);\n padding-inline-start: var(--date-picker-padding-inline);\n border: var(--size-hairline) solid var(--_border);\n border-radius: var(--date-picker-radius);\n background-color: var(--date-picker-bg);\n color: var(--date-picker-fg);\n font-size: var(--_font-size);\n transition: border-color var(--date-picker-motion-duration) var(--motion-easing-standard);\n\n &[data-focus-within] {\n border-color: var(--date-picker-border-focus);\n outline: var(--date-picker-focus-ring-width) solid var(--date-picker-focus-ring);\n outline-offset: var(--date-picker-focus-ring-offset);\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-hovered]:not([data-focus-within], [data-disabled]) {\n border-color: var(--date-picker-border-hover);\n }\n }\n\n .input {\n display: flex;\n flex: 1;\n align-items: center;\n }\n\n .segment {\n padding-inline: var(--date-picker-segment-padding-inline);\n border-radius: var(--date-picker-segment-radius);\n font-variant-numeric: tabular-nums;\n outline: none;\n caret-color: transparent;\n\n &[data-type=\"literal\"] {\n padding-inline: 0;\n }\n\n &[data-placeholder] {\n color: var(--date-picker-segment-fg-placeholder);\n }\n\n &[data-focused] {\n background-color: var(--date-picker-segment-bg-focus);\n color: var(--date-picker-fg);\n }\n }\n\n .button {\n display: grid;\n place-items: center;\n inline-size: var(--date-picker-icon-size);\n block-size: calc(var(--_height) - 2 * var(--size-hairline));\n padding: 0;\n border: none;\n border-radius: var(--date-picker-radius);\n background-color: transparent;\n color: var(--date-picker-icon);\n cursor: pointer;\n\n &[data-focus-visible] {\n outline: var(--date-picker-focus-ring-width) solid var(--date-picker-focus-ring);\n outline-offset: calc(-1 * var(--date-picker-focus-ring-width));\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n }\n }\n\n .popover {\n padding-block-start: var(--date-picker-gap);\n animation: fade var(--date-picker-popover-duration) var(--motion-easing-standard);\n\n &[data-placement=\"top\"] {\n padding-block: 0 var(--date-picker-gap);\n }\n }\n\n .dialog {\n border: var(--size-hairline) solid var(--date-picker-dialog-border);\n border-radius: var(--date-picker-dialog-radius);\n background-color: var(--date-picker-dialog-bg);\n box-shadow: var(--date-picker-popover-shadow);\n outline: none;\n }\n\n @keyframes fade {\n from {\n opacity: 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACb,gBAAY;AACZ,eAAW,IAAI;AACf,oBAAgB;AAEhB,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAuB,iBAAW;AAAS;AAE7C,MAAE,EAAE;AACF,mBAAa;AACb,kBAAY;AACd;AACF;AACF;;;ACdA;AACE,GAACC;AACC,aAAS;AACT,oBAAgB;AAChB,SAAK,IAAI;AACT,aAAS,IAAI;AACb,sBAAkB,IAAI;AACtB,WAAO,IAAI;AACX,iBAAa,IAAI;AACjB,eAAW,IAAI;AACjB;AAEA,GAACC;AACC,aAAS;AACT,iBAAa;AACb,qBAAiB;AACjB,SAAK,IAAI;AACX;AAEA,GAACC;AACC,YAAQ;AACR,eAAW,IAAI;AACf,iBAAa,IAAI;AACnB;AAEA,GAACC;AACC,aAAS;AACT,iBAAa;AACb,iBAAa,IAAI;AACjB,gBAAY,IAAI;AAChB,aAAS;AACT,YAAQ;AACR,mBAAe,IAAI;AACnB,sBAAkB;AAClB,WAAO,IAAI;AACX,YAAQ;AACR,gBAAY,iBAAiB,IAAI,4BAA4B,IAAI;AAEjE,KAAC,CAAC;AACA,wBAAkB,IAAI;AACtB,aAAO,IAAI;AACb;AAEA,KAAC,CAAC;AACA,eAAS,IAAI,6BAA6B,MAAM,IAAI;AACpD,sBAAgB,IAAI;AACtB;AAEA,KAAC,CAAC;AACA,cAAQ;AACR,eAAS;AACX;AACF;AAEA,GAACC;AACC,qBAAiB;AACjB,oBAAgB;AAClB;AAEA,GAACC;AACC,iBAAa,IAAI;AACjB,aAAS;AACT,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,gBAAY;AACd;AAEA,GAACC;AACC,aAAS;AACT,iBAAa;AACb,iBAAa,IAAI;AACjB,gBAAY,IAAI;AAChB,mBAAe,IAAI;AACnB,WAAO,IAAI;AACX,YAAQ;AACR,aAAS;AACT,gBAAY,iBAAiB,IAAI,4BAA4B,IAAI;AAEjE,KAAC,CAAC;AACA,eAAS;AACX;AAEA,KAAC,CAAC;AACA,aAAO,IAAI;AACX,mBAAa,IAAI;AACnB;AAEA,KAAC,CAAC;AACA,wBAAkB,IAAI;AACxB;AAEA,KAAC,CAAC;AACA,wBAAkB,IAAI;AACtB,aAAO,IAAI;AAEX,OAAC,CAAC;AACA,0BAAkB,IAAI;AACxB;AACF;AAEA,KAAC,CAAC;AACA,eAAS,IAAI,6BAA6B,MAAM,IAAI;AACpD,sBAAgB,IAAI;AACtB;AAEA,KAAC,CAAC;AACA,aAAO,IAAI;AACX,uBAAiB;AACjB,cAAQ;AACV;AAGA,KAAC,CAAC;AACA,aAAO,IAAI;AACX,cAAQ;AACV;AACF;AACF;;;AC1HA;AACE,GAACC;AACC,aAAS;AACT,oBAAgB;AAChB,SAAK,IAAI;AACT,iBAAa,IAAI;AACnB;AAEA,GAACC;AACC,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,WAAO,IAAI;AACb;AAEA,GAACC;AACC,yBAAqB,IAAI;AACzB,WAAO,IAAI;AACb;AAEA,GAACC;AACC,YAAQ;AACR,eAAW,IAAI;AACf,WAAO,IAAI;AACb;AAEA,GAACC;AACC,YAAQ;AACR,eAAW,IAAI;AACf,WAAO,IAAI;AACb;AACF;;;ACxBA;AACE,GAACC;AACC,eAAW,IAAI;AACf,kBAAc,IAAI;AAClB,eAAW,IAAI;AAEf,iBAAa,IAAI;AAEjB,KAAC,CAAC;AACA,iBAAW,IAAI;AACf,oBAAc,IAAI;AACpB;AAEA,KAAC,CAAC;AACA,iBAAW,IAAI;AACf,oBAAc,IAAI;AACpB;AAEA,KAAC,CAAC;AAAgB,iBAAW,IAAI;AAA+B;AAClE;AAEA,GAACC;AACC,aAAS;AACT,iBAAa;AACb,oBAAgB,IAAI;AACpB,0BAAsB,IAAI;AAC1B,YAAQ,IAAI,iBAAiB,MAAM,IAAI;AACvC,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,gBAAY,aAAa,IAAI,+BAA+B,IAAI;AAEhE,KAAC,CAAC;AACA,oBAAc,IAAI;AAClB,eAAS,IAAI,gCAAgC,MAAM,IAAI;AACvD,sBAAgB,IAAI;AACtB;AAEA,KAAC,CAAC;AACA,cAAQ;AACR,eAAS;AACX;AAEA,KAAC,CAAC,aAAa,KAAK,CAAC,oBAAoB,CAAC;AACxC,oBAAc,IAAI;AACpB;AACF;AAEA,GAACC;AACC,aAAS;AACT,UAAM;AACN,iBAAa;AACf;AAEA,GAACC;AACC,oBAAgB,IAAI;AACpB,mBAAe,IAAI;AACnB,0BAAsB;AACtB,aAAS;AACT,iBAAa;AAEb,KAAC,CAAC;AACA,sBAAgB;AAClB;AAEA,KAAC,CAAC;AACA,aAAO,IAAI;AACb;AAEA,KAAC,CAAC;AACA,wBAAkB,IAAI;AACtB,aAAO,IAAI;AACb;AACF;AAEA,GAACC;AACC,aAAS;AACT,iBAAa;AACb,iBAAa,IAAI;AACjB,gBAAY,KAAK,IAAI,WAAW,EAAE,EAAE,EAAE,IAAI;AAC1C,aAAS;AACT,YAAQ;AACR,mBAAe,IAAI;AACnB,sBAAkB;AAClB,WAAO,IAAI;AACX,YAAQ;AAER,KAAC,CAAC;AACA,eAAS,IAAI,gCAAgC,MAAM,IAAI;AACvD,sBAAgB,KAAK,GAAG,EAAE,IAAI;AAChC;AAEA,KAAC,CAAC;AACA,cAAQ;AACV;AACF;AAEA,GAACC;AACC,yBAAqB,IAAI;AACzB,eAAW,gBAAK,IAAI,gCAAgC,IAAI;AAExD,KAAC,CAAC;AACA,qBAAe,EAAE,IAAI;AACvB;AACF;AAEA,GAACC;AACC,YAAQ,IAAI,iBAAiB,MAAM,IAAI;AACvC,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,gBAAY,IAAI;AAChB,aAAS;AACX;AAEA,aAfaC;AAgBX;AACE,eAAS;AACX;AACF;AAEA,UAAO,wBAAyB;AAC9B,KAxBDF;AAyBG,iBAAW;AACb;AACF;AACF;","names":["icon","root","header","heading","nav","grid","weekday","cell","field","label","required","description","error","root","control","input","segment","button","popover","dialog","fade"]}
@@ -0,0 +1,59 @@
1
+ import * as react from 'react';
2
+ import { ReactNode, Ref } from 'react';
3
+
4
+ type DatePickerSize = 'sm' | 'md' | 'lg';
5
+ interface DatePickerProps {
6
+ /** Visible label. Always rendered. */
7
+ label: ReactNode;
8
+ description?: ReactNode;
9
+ /** Presence marks the control invalid and announces the message. */
10
+ error?: ReactNode;
11
+ /** The date as `YYYY-MM-DD` (controlled). `null` is "none". */
12
+ value?: string | null;
13
+ defaultValue?: string | null;
14
+ onChange?: (value: string | null) => void;
15
+ /** Earliest selectable date, `YYYY-MM-DD`. */
16
+ min?: string;
17
+ /** Latest selectable date, `YYYY-MM-DD`. */
18
+ max?: string;
19
+ /** Marks single dates as unavailable in the calendar. */
20
+ isDateUnavailable?: (date: string) => boolean;
21
+ /** BCP 47 tag. Segment order, month names and the first weekday follow it; defaults to the browser's. */
22
+ locale?: string;
23
+ /** @default 'md' */
24
+ size?: DatePickerSize;
25
+ /** @default false */
26
+ required?: boolean;
27
+ /** @default false */
28
+ disabled?: boolean;
29
+ /** @default false */
30
+ readOnly?: boolean;
31
+ /** Submitted with a form as `YYYY-MM-DD` through a hidden input. */
32
+ name?: string;
33
+ autoFocus?: boolean;
34
+ /** Applied to the field wrapper. */
35
+ className?: string;
36
+ /** The wrapper element. */
37
+ ref?: Ref<HTMLDivElement>;
38
+ }
39
+ /**
40
+ * A date field with a calendar popover, on React Aria's date picker
41
+ * (decision record 001): the date is typed segment by segment in the
42
+ * user's locale order (arrows and digits, no free text to parse), and the
43
+ * button opens the same month grid as Calendar. Dates cross the API as
44
+ * ISO strings.
45
+ *
46
+ * @status experimental
47
+ * @category Forms
48
+ * @accessibility A `group` named by the label holding one `spinbutton` per date segment (day, month, year in the locale's order), a button that opens a `dialog` containing the Calendar grid, and a hidden input for forms. Arrows step a segment, digits type it, Escape closes the dialog and returns focus.
49
+ * @do Pass `locale` when the app's language is not the browser's.
50
+ * Use `min`/`max` for ranges the user cannot choose outside of.
51
+ * @dont Parse the value yourself; it is always `YYYY-MM-DD`.
52
+ * Use it for a date of birth decades away; the segments are faster than the calendar.
53
+ */
54
+ declare function DatePicker({ label, description, error, value, defaultValue, onChange, min, max, isDateUnavailable, locale, size, required, disabled, readOnly, name, autoFocus, className, ref, }: DatePickerProps): react.JSX.Element;
55
+ declare namespace DatePicker {
56
+ var displayName: string;
57
+ }
58
+
59
+ export { DatePicker, type DatePickerProps, type DatePickerSize };
@@ -0,0 +1,8 @@
1
+ export { DatePicker } from './chunk-UX42PQLT.js';
2
+ import './chunk-OXYP34CG.js';
3
+ import './chunk-4HRNRTXI.js';
4
+ import './chunk-YUHS5S5Y.js';
5
+ import './chunk-ASNTNTJW.js';
6
+ import './chunk-MI4QUKQS.js';
7
+ //# sourceMappingURL=date-picker.js.map
8
+ //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"date-picker.js"}
@@ -0,0 +1,62 @@
1
+ /* src/dialog/Dialog.module.css */
2
+ @layer components {
3
+ .Dialog_root {
4
+ --modal-bg: var(--dialog-surface);
5
+ --modal-surface-elevated: var(--dialog-surface);
6
+ --modal-surface-subtle: var(--dialog-surface-subtle);
7
+ --modal-color: var(--dialog-fg);
8
+ --modal-text-secondary: var(--dialog-fg-muted);
9
+ --modal-text-muted: var(--dialog-fg-muted);
10
+ --modal-backdrop-bg: var(--dialog-backdrop);
11
+ --modal-border-primary-color: var(--dialog-border);
12
+ --modal-border-hover-color: var(--dialog-border-hover);
13
+ --modal-border-focus-color: var(--dialog-focus);
14
+ --modal-border-accent-color: var(--dialog-border);
15
+ --modal-radius: var(--dialog-radius);
16
+ --modal-radius-md: var(--dialog-radius);
17
+ --modal-radius-sm: var(--radius-control);
18
+ --modal-button-radius: var(--radius-control);
19
+ --modal-shadow: var(--dialog-shadow);
20
+ --modal-padding: var(--dialog-padding);
21
+ --modal-spacing-xs: var(--space-1);
22
+ --modal-spacing-sm: var(--space-2);
23
+ --modal-spacing-md: var(--dialog-gap);
24
+ --modal-spacing-lg: var(--space-4);
25
+ --modal-spacing-xl: var(--space-5);
26
+ --modal-font-family: var(--dialog-font-family);
27
+ --modal-font-family-mono: var(--font-family-mono);
28
+ --modal-font-size-title: var(--dialog-title-font-size);
29
+ --modal-font-size-title-mobile: var(--dialog-title-font-size);
30
+ --modal-font-weight-title: var(--dialog-title-font-weight);
31
+ --modal-font-size-description: var(--dialog-description-font-size);
32
+ --modal-font-size-description-mobile: var(--dialog-description-font-size);
33
+ --modal-font-size-button: var(--font-size-sm);
34
+ --modal-close-bg: var(--dialog-close-bg);
35
+ --modal-close-hover-bg: var(--dialog-close-bg-hover);
36
+ --modal-close-text: var(--dialog-close-fg);
37
+ --modal-close-hover-text: var(--dialog-close-fg-hover);
38
+ --modal-interactive-hover: var(--color-action-secondary-hover);
39
+ --modal-interactive-active: var(--color-action-secondary-hover);
40
+ --modal-interactive-focus: var(--color-action-primary-quiet);
41
+ --modal-transition-duration: var(--dialog-motion-duration);
42
+ --modal-transition-easing: var(--dialog-motion-easing);
43
+ --modal-outline-width: var(--focus-ring-width);
44
+ --modal-outline-offset: var(--focus-ring-offset);
45
+ --modal-button-focus-color: var(--dialog-focus);
46
+ --modal-button-primary-bg: var(--color-action-primary);
47
+ --modal-button-primary-border: var(--color-action-primary);
48
+ --modal-button-primary-color: var(--color-text-on-action);
49
+ --modal-button-primary-hover-bg: var(--color-action-primary-hover);
50
+ --modal-button-primary-hover-border: var(--color-action-primary-hover);
51
+ --modal-button-primary-active-bg: var(--color-action-primary-active);
52
+ --modal-button-primary-active-border: var(--color-action-primary-active);
53
+ --modal-button-secondary-bg: var(--color-action-secondary);
54
+ --modal-button-secondary-border: var(--color-border-default);
55
+ --modal-button-secondary-color: var(--color-text-default);
56
+ --modal-button-secondary-hover-bg: var(--color-action-secondary-hover);
57
+ --modal-button-secondary-hover-border: var(--color-border-strong);
58
+ --modal-button-secondary-active-bg: var(--color-action-secondary-hover);
59
+ --modal-button-secondary-active-border: var(--color-border-strong);
60
+ }
61
+ }
62
+ /*# sourceMappingURL=dialog.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dialog/Dialog.module.css"],"sourcesContent":["/*\n * The vendor (@pearpages/modals) reads --modal-* custom properties. This class\n * goes on the portal element pulp owns, so every dialog inherits pulp's\n * --dialog-* tokens and the vendor's :root defaults never apply.\n */\n\n@layer components {\n .root {\n --modal-bg: var(--dialog-surface);\n --modal-surface-elevated: var(--dialog-surface);\n --modal-surface-subtle: var(--dialog-surface-subtle);\n --modal-color: var(--dialog-fg);\n --modal-text-secondary: var(--dialog-fg-muted);\n --modal-text-muted: var(--dialog-fg-muted);\n --modal-backdrop-bg: var(--dialog-backdrop);\n --modal-border-primary-color: var(--dialog-border);\n --modal-border-hover-color: var(--dialog-border-hover);\n --modal-border-focus-color: var(--dialog-focus);\n --modal-border-accent-color: var(--dialog-border);\n --modal-radius: var(--dialog-radius);\n --modal-radius-md: var(--dialog-radius);\n --modal-radius-sm: var(--radius-control);\n --modal-button-radius: var(--radius-control);\n --modal-shadow: var(--dialog-shadow);\n --modal-padding: var(--dialog-padding);\n --modal-spacing-xs: var(--space-1);\n --modal-spacing-sm: var(--space-2);\n --modal-spacing-md: var(--dialog-gap);\n --modal-spacing-lg: var(--space-4);\n --modal-spacing-xl: var(--space-5);\n --modal-font-family: var(--dialog-font-family);\n --modal-font-family-mono: var(--font-family-mono);\n --modal-font-size-title: var(--dialog-title-font-size);\n --modal-font-size-title-mobile: var(--dialog-title-font-size);\n --modal-font-weight-title: var(--dialog-title-font-weight);\n --modal-font-size-description: var(--dialog-description-font-size);\n --modal-font-size-description-mobile: var(--dialog-description-font-size);\n --modal-font-size-button: var(--font-size-sm);\n --modal-close-bg: var(--dialog-close-bg);\n --modal-close-hover-bg: var(--dialog-close-bg-hover);\n --modal-close-text: var(--dialog-close-fg);\n --modal-close-hover-text: var(--dialog-close-fg-hover);\n --modal-interactive-hover: var(--color-action-secondary-hover);\n --modal-interactive-active: var(--color-action-secondary-hover);\n --modal-interactive-focus: var(--color-action-primary-quiet);\n --modal-transition-duration: var(--dialog-motion-duration);\n --modal-transition-easing: var(--dialog-motion-easing);\n --modal-outline-width: var(--focus-ring-width);\n --modal-outline-offset: var(--focus-ring-offset);\n --modal-button-focus-color: var(--dialog-focus);\n --modal-button-primary-bg: var(--color-action-primary);\n --modal-button-primary-border: var(--color-action-primary);\n --modal-button-primary-color: var(--color-text-on-action);\n --modal-button-primary-hover-bg: var(--color-action-primary-hover);\n --modal-button-primary-hover-border: var(--color-action-primary-hover);\n --modal-button-primary-active-bg: var(--color-action-primary-active);\n --modal-button-primary-active-border: var(--color-action-primary-active);\n --modal-button-secondary-bg: var(--color-action-secondary);\n --modal-button-secondary-border: var(--color-border-default);\n --modal-button-secondary-color: var(--color-text-default);\n --modal-button-secondary-hover-bg: var(--color-action-secondary-hover);\n --modal-button-secondary-hover-border: var(--color-border-strong);\n --modal-button-secondary-active-bg: var(--color-action-secondary-hover);\n --modal-button-secondary-active-border: var(--color-border-strong);\n }\n}\n"],"mappings":";AAMA;AACE,GAACA;AACC,gBAAY,IAAI;AAChB,8BAA0B,IAAI;AAC9B,4BAAwB,IAAI;AAC5B,mBAAe,IAAI;AACnB,4BAAwB,IAAI;AAC5B,wBAAoB,IAAI;AACxB,yBAAqB,IAAI;AACzB,kCAA8B,IAAI;AAClC,gCAA4B,IAAI;AAChC,gCAA4B,IAAI;AAChC,iCAA6B,IAAI;AACjC,oBAAgB,IAAI;AACpB,uBAAmB,IAAI;AACvB,uBAAmB,IAAI;AACvB,2BAAuB,IAAI;AAC3B,oBAAgB,IAAI;AACpB,qBAAiB,IAAI;AACrB,wBAAoB,IAAI;AACxB,wBAAoB,IAAI;AACxB,wBAAoB,IAAI;AACxB,wBAAoB,IAAI;AACxB,wBAAoB,IAAI;AACxB,yBAAqB,IAAI;AACzB,8BAA0B,IAAI;AAC9B,6BAAyB,IAAI;AAC7B,oCAAgC,IAAI;AACpC,+BAA2B,IAAI;AAC/B,mCAA+B,IAAI;AACnC,0CAAsC,IAAI;AAC1C,8BAA0B,IAAI;AAC9B,sBAAkB,IAAI;AACtB,4BAAwB,IAAI;AAC5B,wBAAoB,IAAI;AACxB,8BAA0B,IAAI;AAC9B,+BAA2B,IAAI;AAC/B,gCAA4B,IAAI;AAChC,+BAA2B,IAAI;AAC/B,iCAA6B,IAAI;AACjC,+BAA2B,IAAI;AAC/B,2BAAuB,IAAI;AAC3B,4BAAwB,IAAI;AAC5B,gCAA4B,IAAI;AAChC,+BAA2B,IAAI;AAC/B,mCAA+B,IAAI;AACnC,kCAA8B,IAAI;AAClC,qCAAiC,IAAI;AACrC,yCAAqC,IAAI;AACzC,sCAAkC,IAAI;AACtC,0CAAsC,IAAI;AAC1C,iCAA6B,IAAI;AACjC,qCAAiC,IAAI;AACrC,oCAAgC,IAAI;AACpC,uCAAmC,IAAI;AACvC,2CAAuC,IAAI;AAC3C,wCAAoC,IAAI;AACxC,4CAAwC,IAAI;AAC9C;AACF;","names":["root"]}
@@ -0,0 +1,56 @@
1
+ import * as _pearpages_modals from '@pearpages/modals';
2
+ import { ModalProps, ModalSystem } from '@pearpages/modals';
3
+ import * as react from 'react';
4
+ import { ComponentProps, ReactNode } from 'react';
5
+
6
+ type DialogProps = ModalProps;
7
+ interface DialogSystemProps extends Omit<ComponentProps<typeof ModalSystem>, 'container'> {
8
+ children: ReactNode;
9
+ }
10
+ /**
11
+ * Mount once near the app root. Owns the portal element every dialog renders
12
+ * into and sets the vendor's `--modal-*` variables on it from pulp's
13
+ * `--dialog-*` tokens, so backdrop, surface, type and motion follow the
14
+ * current brand and scheme. Because the variables sit on an ancestor of the
15
+ * dialog, they win over the vendor stylesheet regardless of cascade layers
16
+ * or import order.
17
+ *
18
+ * @status stable
19
+ * @category Overlays
20
+ * @accessibility Renders nothing visible itself; the portal element it owns is where every dialog mounts, so the vendor's focus trap and `inert` handling apply to the rest of the page.
21
+ * @do Mount it once, near the app root, inside any providers dialogs need.
22
+ * @dont Nest it; one system serves every dialog.
23
+ */
24
+ declare function DialogSystem({ children, ...rest }: DialogSystemProps): react.JSX.Element;
25
+ /**
26
+ * An accessible modal dialog: focus trap, inert page, Escape and backdrop
27
+ * dismissal, stacking. Built on `@pearpages/modals`; pulp adds the theming and
28
+ * the compound API (`Dialog.Trigger`, `Dialog.Content`, `Dialog.Header`,
29
+ * `Dialog.Title`, `Dialog.Description`, `Dialog.Close`, `Dialog.Body`,
30
+ * `Dialog.Footer`). The trigger is a sibling of the dialog, not a child: a
31
+ * dialog's children render only while it is open. Use pulp's `Button` for
32
+ * actions. Requires `DialogSystem` above it and the vendor stylesheet
33
+ * `@pearpages/modals/styles.css`.
34
+ *
35
+ * @status stable
36
+ * @category Overlays
37
+ * @accessibility `role="dialog"` with `aria-modal`, named by `Dialog.Title` and described by `Dialog.Description`; focus moves in on open and back to the trigger on close; the page behind is inert; Escape and the backdrop close it. Provided by `@pearpages/modals`.
38
+ * @do Always render a `Dialog.Title`.
39
+ * Put the destructive action last in `Dialog.Footer` and make the safe one the default focus.
40
+ * @dont Open a dialog from inside a Menu or Popover that stays open.
41
+ * Use it for content that does not need the page blocked; use Popover.
42
+ */
43
+ declare function Dialog(props: DialogProps): react.JSX.Element;
44
+ declare namespace Dialog {
45
+ var displayName: string;
46
+ var Trigger: react.FC<_pearpages_modals.ModalTriggerProps>;
47
+ var Content: react.FC<_pearpages_modals.ModalContentProps>;
48
+ var Header: react.FC<_pearpages_modals.ModalHeaderProps>;
49
+ var Title: react.FC<_pearpages_modals.ModalTitleProps>;
50
+ var Description: react.FC<_pearpages_modals.ModalDescriptionProps>;
51
+ var Close: react.FC<_pearpages_modals.ModalCloseProps>;
52
+ var Body: react.FC<_pearpages_modals.ModalBodyProps>;
53
+ var Footer: react.FC<_pearpages_modals.ModalFooterProps>;
54
+ }
55
+
56
+ export { Dialog, type DialogProps, DialogSystem, type DialogSystemProps };
package/dist/dialog.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Dialog, DialogSystem } from './chunk-IDNGNQNV.js';
2
+ //# sourceMappingURL=dialog.js.map
3
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"dialog.js"}
package/dist/field.css ADDED
@@ -0,0 +1,28 @@
1
+ /* src/field/Field.module.css */
2
+ @layer components {
3
+ .Field_field {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--field-gap);
7
+ }
8
+ .Field_label {
9
+ font-size: var(--field-label-font-size);
10
+ font-weight: var(--field-label-font-weight);
11
+ color: var(--field-label-fg);
12
+ }
13
+ .Field_required {
14
+ margin-inline-start: var(--field-required-gap);
15
+ color: var(--field-required-fg);
16
+ }
17
+ .Field_description {
18
+ margin: 0;
19
+ font-size: var(--field-description-font-size);
20
+ color: var(--field-description-fg);
21
+ }
22
+ .Field_error {
23
+ margin: 0;
24
+ font-size: var(--field-error-font-size);
25
+ color: var(--field-error-fg);
26
+ }
27
+ }
28
+ /*# sourceMappingURL=field.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/field/Field.module.css"],"sourcesContent":["/* Every value is a token (--field-*). The control itself brings its own styles. */\n\n@layer components {\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--field-gap);\n }\n\n .label {\n font-size: var(--field-label-font-size);\n font-weight: var(--field-label-font-weight);\n color: var(--field-label-fg);\n }\n\n .required {\n margin-inline-start: var(--field-required-gap);\n color: var(--field-required-fg);\n }\n\n .description {\n margin: 0;\n font-size: var(--field-description-font-size);\n color: var(--field-description-fg);\n }\n\n .error {\n margin: 0;\n font-size: var(--field-error-font-size);\n color: var(--field-error-fg);\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,aAAS;AACT,oBAAgB;AAChB,SAAK,IAAI;AACX;AAEA,GAACC;AACC,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,WAAO,IAAI;AACb;AAEA,GAACC;AACC,yBAAqB,IAAI;AACzB,WAAO,IAAI;AACb;AAEA,GAACC;AACC,YAAQ;AACR,eAAW,IAAI;AACf,WAAO,IAAI;AACb;AAEA,GAACC;AACC,YAAQ;AACR,eAAW,IAAI;AACf,WAAO,IAAI;AACb;AACF;","names":["field","label","required","description","error"]}
@@ -0,0 +1,98 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, Ref, ReactNode, LabelHTMLAttributes } from 'react';
3
+
4
+ type Part = 'description' | 'error';
5
+ interface FieldContextValue {
6
+ /** The control's id; the label points at it. */
7
+ id: string;
8
+ /** The label's id, for controls that are labelled by reference (`aria-labelledby`), such as a radio group. */
9
+ labelId: string;
10
+ invalid: boolean;
11
+ disabled: boolean;
12
+ required: boolean;
13
+ /** ids of the description and error that are actually mounted, space separated. */
14
+ describedBy: string | undefined;
15
+ /** Registers a mounted part; returns the unregister function. */
16
+ register: (part: Part) => () => void;
17
+ }
18
+ /** The field's ids and state, for controls that wire themselves instead of using `Field.Control`. */
19
+ declare function useField(): FieldContextValue;
20
+ interface FieldProps extends HTMLAttributes<HTMLDivElement> {
21
+ /** The control's id. Generated when omitted. */
22
+ id?: string;
23
+ /** @default false */
24
+ invalid?: boolean;
25
+ /** @default false */
26
+ disabled?: boolean;
27
+ /** @default false */
28
+ required?: boolean;
29
+ ref?: Ref<HTMLDivElement>;
30
+ children: ReactNode;
31
+ }
32
+ /**
33
+ * The wiring every form control shares: a label pointing at the control, a
34
+ * description and an error exposed through `aria-describedby`, and invalid,
35
+ * disabled and required state in one place. Only parts that are mounted end
36
+ * up in `aria-describedby`, so no id ever dangles. Compose with
37
+ * `Field.Label`, `Field.Control`, `Field.Description` and `Field.Error`
38
+ * (one of each); state on the DOM as `data-invalid`, `data-disabled`,
39
+ * `data-required`.
40
+ *
41
+ * Known limitation: parts register in a layout effect, so server-rendered
42
+ * HTML carries no `aria-describedby` until hydration. The relationship is
43
+ * complete for every interactive use; static HTML consumers should not rely
44
+ * on it yet.
45
+ *
46
+ * @status stable
47
+ * @category Forms
48
+ * @accessibility Wires `label[for]`, `aria-describedby` (only mounted parts), `aria-invalid`, `aria-required` and `disabled` onto the control. Server-rendered HTML has no `aria-describedby` until hydration (a test pins the gap).
49
+ * @do Use `Field.Label as="span"` with `useField().labelId` for groups that cannot be labelled by `for`.
50
+ * @dont Mount two `Field.Description` or two `Field.Error`; ids would collide (development warns).
51
+ */
52
+ declare function Field({ id, invalid, disabled, required, className, ref, children, ...rest }: FieldProps): react.JSX.Element;
53
+ declare namespace Field {
54
+ var displayName: string;
55
+ var Label: typeof FieldLabel;
56
+ var Control: typeof FieldControl;
57
+ var Description: typeof FieldDescription;
58
+ var Error: typeof FieldError;
59
+ }
60
+ interface FieldLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
61
+ /**
62
+ * `label` points at the control with `for`. `span` is for controls that are
63
+ * not labelable (a radio group, a fieldset): it carries `labelId` and the
64
+ * control references it with `aria-labelledby`.
65
+ * @default 'label'
66
+ */
67
+ as?: 'label' | 'span';
68
+ ref?: Ref<HTMLLabelElement>;
69
+ children: ReactNode;
70
+ }
71
+ declare function FieldLabel({ as, className, ref, children, ...rest }: FieldLabelProps): react.JSX.Element;
72
+ declare namespace FieldLabel {
73
+ var displayName: string;
74
+ }
75
+ interface FieldControlProps {
76
+ /** Extra ids to describe the control by, kept alongside the field's own. */
77
+ 'aria-describedby'?: string;
78
+ /** The single control element; the field's wiring is merged into it. */
79
+ children: ReactNode;
80
+ }
81
+ declare function FieldControl({ 'aria-describedby': extra, children }: FieldControlProps): react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
82
+ declare namespace FieldControl {
83
+ var displayName: string;
84
+ }
85
+ interface FieldTextProps extends HTMLAttributes<HTMLParagraphElement> {
86
+ ref?: Ref<HTMLParagraphElement>;
87
+ children?: ReactNode;
88
+ }
89
+ declare function FieldDescription({ className, ref, children, ...rest }: FieldTextProps): react.JSX.Element;
90
+ declare namespace FieldDescription {
91
+ var displayName: string;
92
+ }
93
+ declare function FieldError({ className, ref, children, ...rest }: FieldTextProps): react.JSX.Element;
94
+ declare namespace FieldError {
95
+ var displayName: string;
96
+ }
97
+
98
+ export { Field, type FieldContextValue, type FieldProps, useField };
package/dist/field.js ADDED
@@ -0,0 +1,5 @@
1
+ export { Field, useField } from './chunk-2PXTVZ7H.js';
2
+ import './chunk-ZVDN3GRI.js';
3
+ import './chunk-MI4QUKQS.js';
4
+ //# sourceMappingURL=field.js.map
5
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"field.js"}
@@ -0,0 +1,5 @@
1
+ import { Placement } from '@floating-ui/react-dom';
2
+
3
+ type FloatingPlacement = Extract<Placement, 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'>;
4
+
5
+ export type { FloatingPlacement as F };