@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 @@
1
+ {"version":3,"sources":["../src/visually-hidden/VisuallyHidden.module.css","../src/table/Table.module.css"],"sourcesContent":["/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/*\n * Every value is a token (--table-*). Density resolves the row padding into a\n * private custom property on the table. React Aria writes the state:\n * data-hovered, data-selected, data-disabled, data-focus-visible on rows and\n * cells; data-allows-sorting and data-sort-direction on columns;\n * data-selected and data-indeterminate on the selection checkbox.\n * Rules are ordered from general to specific so no later selector has a lower\n * specificity than an earlier one for the same element.\n */\n\n@layer components {\n .container {\n overflow: auto;\n border: var(--size-hairline) solid var(--table-border);\n border-radius: var(--table-radius);\n background-color: var(--table-bg);\n color: var(--table-fg);\n font-family: var(--table-font-family);\n font-size: var(--table-font-size);\n }\n\n .table {\n --_padding-block: var(--table-cell-padding-block-default);\n\n inline-size: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n outline: none;\n\n &[data-density=\"compact\"] {\n --_padding-block: var(--table-cell-padding-block-compact);\n }\n\n &[data-focus-visible] {\n outline: var(--table-focus-ring-width) solid var(--table-focus-ring);\n outline-offset: calc(-1 * var(--table-focus-ring-width));\n }\n }\n\n .header {\n background-color: var(--table-header-bg);\n }\n\n .container[data-sticky-header] .header {\n position: sticky;\n inset-block-start: 0;\n }\n\n .column {\n padding-block: var(--_padding-block);\n padding-inline: var(--table-cell-padding-inline);\n border-block-end: var(--size-hairline) solid var(--table-border);\n color: var(--table-header-fg);\n font-size: var(--table-header-font-size);\n font-weight: var(--table-header-font-weight);\n text-align: start;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n outline: none;\n\n &[data-align=\"end\"] {\n text-align: end;\n }\n\n &[data-allows-sorting] {\n cursor: pointer;\n }\n\n &[data-allows-sorting]::after {\n content: \"\";\n display: inline-block;\n inline-size: var(--table-header-sort-indicator-size);\n block-size: var(--table-header-sort-indicator-size);\n margin-inline-start: var(--table-header-sort-indicator-size);\n border-inline-end: var(--table-header-sort-indicator-width) solid currentcolor;\n border-block-end: var(--table-header-sort-indicator-width) solid currentcolor;\n rotate: -135deg;\n translate: 0 25%;\n opacity: 0;\n transition: opacity var(--table-motion-duration) var(--motion-easing-standard);\n }\n\n &[data-hovered]::after {\n opacity: 0.5;\n }\n\n &[data-sort-direction] {\n color: var(--table-header-fg-active);\n }\n\n &[data-sort-direction]::after {\n color: var(--table-header-sort-indicator);\n opacity: 1;\n }\n\n &[data-sort-direction=\"descending\"]::after {\n rotate: 45deg;\n translate: 0 -25%;\n }\n\n &[data-focus-visible] {\n outline: var(--table-focus-ring-width) solid var(--table-focus-ring);\n outline-offset: calc(-1 * var(--table-focus-ring-width));\n }\n }\n\n .row {\n outline: none;\n transition: background-color var(--table-motion-duration) var(--motion-easing-standard);\n\n &[data-hovered] {\n background-color: var(--table-row-bg-hover);\n }\n\n &[data-selected] {\n background-color: var(--table-row-bg-selected);\n }\n\n &[data-disabled] {\n color: var(--table-row-fg-disabled);\n }\n\n &[data-focus-visible] {\n outline: var(--table-focus-ring-width) solid var(--table-focus-ring);\n outline-offset: calc(-1 * var(--table-focus-ring-width));\n }\n }\n\n .cell {\n padding-block: var(--_padding-block);\n padding-inline: var(--table-cell-padding-inline);\n outline: none;\n\n &[data-align=\"end\"] {\n text-align: end;\n font-variant-numeric: tabular-nums;\n }\n\n &[data-focus-visible] {\n outline: var(--table-focus-ring-width) solid var(--table-focus-ring);\n outline-offset: calc(-1 * var(--table-focus-ring-width));\n }\n }\n\n .body .row:not(:last-child) .cell {\n border-block-end: var(--size-hairline) solid var(--table-border);\n }\n\n .selectColumn,\n .selectCell {\n inline-size: var(--table-select-size);\n padding-inline-end: 0;\n }\n\n .selectBox {\n display: grid;\n place-content: center;\n inline-size: var(--table-select-size);\n block-size: var(--table-select-size);\n border: var(--size-hairline) solid var(--table-select-border);\n border-radius: var(--table-select-radius);\n background-color: var(--table-select-bg);\n transition:\n background-color var(--table-motion-duration) var(--motion-easing-standard),\n border-color var(--table-motion-duration) var(--motion-easing-standard);\n\n &::after {\n content: \"\";\n inline-size: calc(var(--table-select-size) * 0.3);\n block-size: calc(var(--table-select-size) * 0.55);\n border-style: solid;\n border-color: var(--table-select-check);\n border-width: 0 var(--table-select-check-width) var(--table-select-check-width) 0;\n rotate: 45deg;\n translate: 0 -10%;\n opacity: 0;\n }\n }\n\n .select {\n display: inline-grid;\n place-items: center;\n inline-size: var(--table-select-size);\n block-size: var(--table-select-size);\n cursor: pointer;\n\n &[data-focus-visible] .selectBox {\n outline: var(--table-focus-ring-width) solid var(--table-focus-ring);\n outline-offset: var(--table-focus-ring-offset);\n }\n\n &[data-selected] .selectBox,\n &[data-indeterminate] .selectBox {\n border-color: var(--table-select-bg-checked);\n background-color: var(--table-select-bg-checked);\n\n &::after {\n opacity: 1;\n }\n }\n\n &[data-indeterminate] .selectBox::after {\n inline-size: calc(var(--table-select-size) * 0.55);\n block-size: 0;\n border-width: 0 0 var(--table-select-check-width);\n rotate: 0deg;\n translate: 0 0;\n }\n }\n\n .empty {\n padding: var(--table-empty-padding);\n color: var(--table-empty-fg);\n text-align: center;\n }\n}\n"],"mappings":"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","names":["root","container","table","header","column","row","cell","body","selectColumn","selectCell","selectBox","select","empty"]}
@@ -0,0 +1,137 @@
1
+ import * as react from 'react';
2
+ import { Ref, ReactNode, ReactElement } from 'react';
3
+
4
+ type TableSelectionMode = 'none' | 'single' | 'multiple';
5
+ type TableDensity = 'default' | 'compact';
6
+ type TableSortDirection = 'ascending' | 'descending';
7
+ interface TableSort {
8
+ column: string;
9
+ direction: TableSortDirection;
10
+ }
11
+ interface TableProps {
12
+ /** The table's accessible name. Pass `aria-labelledby` instead when a visible heading names it. */
13
+ 'aria-label'?: string;
14
+ 'aria-labelledby'?: string;
15
+ /** @default 'none' */
16
+ selectionMode?: TableSelectionMode;
17
+ /** Selected row ids (controlled). */
18
+ selected?: readonly string[];
19
+ /** @default [] */
20
+ defaultSelected?: readonly string[];
21
+ onSelectedChange?: (ids: string[]) => void;
22
+ /** Rows that cannot be selected or activated. */
23
+ disabledIds?: readonly string[];
24
+ /** Current sort (controlled). Sorting the data is the caller's job: this is the header state. */
25
+ sort?: TableSort | null;
26
+ defaultSort?: TableSort;
27
+ onSortChange?: (sort: TableSort) => void;
28
+ /** Row padding steps down one token. The brand's `space.unit` sets the base. @default 'default' */
29
+ density?: TableDensity;
30
+ /** The header stays visible while the container scrolls. Give the container a height through `className`. @default false */
31
+ stickyHeader?: boolean;
32
+ /**
33
+ * Called with the row id on Enter, on click, and on double click. Once
34
+ * rows are selectable and a selection exists, Enter and click toggle the
35
+ * selection instead (the vendor's rule, so touch users select without a
36
+ * modifier key); double click still runs the action.
37
+ */
38
+ onRowAction?: (id: string) => void;
39
+ /** Applied to the scroll container around the table. */
40
+ className?: string;
41
+ /** The `<table>` element. */
42
+ ref?: Ref<HTMLTableElement>;
43
+ /** `Table.Header` then `Table.Body`. */
44
+ children: ReactNode;
45
+ }
46
+ /**
47
+ * A data table on React Aria's grid (decision record 001): one Tab stop,
48
+ * arrows move between rows and cells, Space toggles selection, Enter runs
49
+ * the row action (see `onRowAction` for the selection rule), sortable
50
+ * headers carry `aria-sort` and are pressed to change direction. Selection and sort are the caller's state; the table
51
+ * reports changes and renders them. Compose with `Table.Header`,
52
+ * `Table.Column`, `Table.Body`, `Table.Row` and `Table.Cell`; the selection
53
+ * column appears by itself when rows are selectable.
54
+ *
55
+ * @status experimental
56
+ * @category Data
57
+ * @accessibility `role="grid"` named by `aria-label` or `aria-labelledby`; one column is the row header (`isRowHeader`), sortable columns carry `aria-sort`, selectable rows `aria-selected`, and the selection column holds real checkboxes ("Select All" in the header). One tab stop: arrows move between rows and cells, Space toggles selection, Enter runs the row action, the header cells are pressed to sort.
58
+ * @do Mark exactly one column `isRowHeader`.
59
+ * Give the table a name that says what the rows are.
60
+ * @dont Sort the data inside the table; sort your data from `onSortChange` and pass it back.
61
+ * Use it for layout.
62
+ */
63
+ declare function Table({ selectionMode, selected, defaultSelected, onSelectedChange, disabledIds, sort, defaultSort, onSortChange, density, stickyHeader, onRowAction, className, ref, children, ...rest }: TableProps): react.JSX.Element;
64
+ declare namespace Table {
65
+ var displayName: string;
66
+ var Header: typeof TableHeader;
67
+ var Column: typeof TableColumn;
68
+ var Body: typeof TableBody;
69
+ var Row: typeof TableRow;
70
+ var Cell: typeof TableCell;
71
+ }
72
+ interface TableHeaderProps {
73
+ className?: string;
74
+ /** `Table.Column` elements. */
75
+ children: ReactNode;
76
+ }
77
+ declare function TableHeader({ className, children }: TableHeaderProps): react.JSX.Element;
78
+ declare namespace TableHeader {
79
+ var displayName: string;
80
+ }
81
+ type TableAlign = 'start' | 'end';
82
+ interface TableColumnProps {
83
+ /** The column id `sort.column` refers to. Defaults to the column's text. */
84
+ id?: string;
85
+ /** Pressing the header sorts by it; the table reports the change through `onSortChange`. @default false */
86
+ allowsSorting?: boolean;
87
+ /** This column names the row for assistive technology. Exactly one column per table. @default false */
88
+ isRowHeader?: boolean;
89
+ /** @default 'start' */
90
+ align?: TableAlign;
91
+ className?: string;
92
+ children: ReactNode;
93
+ }
94
+ declare function TableColumn({ id, allowsSorting, isRowHeader, align, className, children }: TableColumnProps): react.JSX.Element;
95
+ declare namespace TableColumn {
96
+ var displayName: string;
97
+ }
98
+ interface TableBodyProps<T extends {
99
+ id: string;
100
+ }> {
101
+ /** Rows from data: each item renders through the `children` function, keyed by `item.id`. */
102
+ items?: Iterable<T>;
103
+ /** Shown when there are no rows. @default 'No rows' */
104
+ emptyMessage?: ReactNode;
105
+ className?: string;
106
+ /** `Table.Row` elements, or a function from an item to one when `items` is given. */
107
+ children: ReactNode | ((item: T) => ReactElement);
108
+ }
109
+ declare function TableBody<T extends {
110
+ id: string;
111
+ }>({ items, emptyMessage, className, children }: TableBodyProps<T>): react.JSX.Element;
112
+ declare namespace TableBody {
113
+ var displayName: string;
114
+ }
115
+ interface TableRowProps {
116
+ /** The row id used for selection, sorting callbacks and `onRowAction`. Required unless the row comes from `items`. */
117
+ id?: string;
118
+ className?: string;
119
+ /** `Table.Cell` elements. */
120
+ children: ReactNode;
121
+ }
122
+ declare function TableRow({ id, className, children }: TableRowProps): react.JSX.Element;
123
+ declare namespace TableRow {
124
+ var displayName: string;
125
+ }
126
+ interface TableCellProps {
127
+ /** @default 'start' */
128
+ align?: TableAlign;
129
+ className?: string;
130
+ children: ReactNode;
131
+ }
132
+ declare function TableCell({ align, className, children }: TableCellProps): react.JSX.Element;
133
+ declare namespace TableCell {
134
+ var displayName: string;
135
+ }
136
+
137
+ export { Table, type TableAlign, type TableDensity, type TableProps, type TableSelectionMode, type TableSort, type TableSortDirection };
package/dist/table.js ADDED
@@ -0,0 +1,6 @@
1
+ export { Table } from './chunk-F3OFZGGE.js';
2
+ import './chunk-Z4PN6B2C.js';
3
+ import './chunk-CZBCGLEM.js';
4
+ import './chunk-MI4QUKQS.js';
5
+ //# sourceMappingURL=table.js.map
6
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"table.js"}
package/dist/tabs.css ADDED
@@ -0,0 +1,75 @@
1
+ /* src/tabs/Tabs.module.css */
2
+ @layer components {
3
+ .Tabs_root {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 0;
7
+ &[data-orientation=vertical] {
8
+ flex-direction: row;
9
+ }
10
+ }
11
+ .Tabs_list {
12
+ display: flex;
13
+ gap: var(--tabs-gap);
14
+ border-block-end: 1px solid var(--tabs-list-border);
15
+ &[data-orientation=vertical] {
16
+ flex-direction: column;
17
+ border-block-end: none;
18
+ border-inline-end: 1px solid var(--tabs-list-border);
19
+ }
20
+ }
21
+ .Tabs_tab {
22
+ position: relative;
23
+ padding-block: var(--tabs-tab-padding-block);
24
+ padding-inline: var(--tabs-tab-padding-inline);
25
+ border: none;
26
+ border-radius: var(--tabs-tab-radius) var(--tabs-tab-radius) 0 0;
27
+ background-color: transparent;
28
+ color: var(--tabs-tab-fg);
29
+ font-size: var(--tabs-tab-font-size);
30
+ font-weight: var(--tabs-tab-font-weight);
31
+ line-height: 1;
32
+ white-space: nowrap;
33
+ cursor: pointer;
34
+ transition: color var(--tabs-motion-duration) var(--motion-easing-standard), background-color var(--tabs-motion-duration) var(--motion-easing-standard);
35
+ border-block-end: 2px solid transparent;
36
+ &:focus-visible {
37
+ outline: var(--tabs-focus-ring-width) solid var(--tabs-focus-ring);
38
+ outline-offset: calc(-1 * var(--tabs-focus-ring-offset));
39
+ }
40
+ &:disabled {
41
+ cursor: not-allowed;
42
+ opacity: 0.55;
43
+ }
44
+ &[data-state=active] {
45
+ color: var(--tabs-tab-fg-active);
46
+ border-block-end-color: var(--tabs-tab-indicator);
47
+ }
48
+ &:hover:not(:disabled, [data-state=active]) {
49
+ color: var(--tabs-tab-fg-hover);
50
+ background-color: var(--tabs-tab-bg-hover);
51
+ }
52
+ }
53
+ .Tabs_list[data-orientation=vertical] .Tabs_tab {
54
+ border-radius: var(--tabs-tab-radius) 0 0 var(--tabs-tab-radius);
55
+ border-block-end: none;
56
+ border-inline-end: 2px solid transparent;
57
+ text-align: start;
58
+ &[data-state=active] {
59
+ border-inline-end-color: var(--tabs-tab-indicator);
60
+ }
61
+ }
62
+ .Tabs_panel {
63
+ padding-block: var(--tabs-panel-padding-block);
64
+ color: var(--tabs-panel-fg);
65
+ &:focus-visible {
66
+ outline: var(--tabs-focus-ring-width) solid var(--tabs-focus-ring);
67
+ outline-offset: var(--tabs-focus-ring-offset);
68
+ }
69
+ }
70
+ .Tabs_root[data-orientation=vertical] .Tabs_panel {
71
+ padding-block: 0;
72
+ padding-inline-start: var(--tabs-tab-padding-inline);
73
+ }
74
+ }
75
+ /*# sourceMappingURL=tabs.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tabs/Tabs.module.css"],"sourcesContent":["/* Every value is a token (--tabs-*). The indicator is a logical border on the active tab, so vertical orientation just flips the side. */\n\n@layer components {\n .root {\n display: flex;\n flex-direction: column;\n gap: 0;\n\n &[data-orientation=\"vertical\"] {\n flex-direction: row;\n }\n }\n\n .list {\n display: flex;\n gap: var(--tabs-gap);\n border-block-end: 1px solid var(--tabs-list-border);\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n border-block-end: none;\n border-inline-end: 1px solid var(--tabs-list-border);\n }\n }\n\n .tab {\n position: relative;\n padding-block: var(--tabs-tab-padding-block);\n padding-inline: var(--tabs-tab-padding-inline);\n border: none;\n border-radius: var(--tabs-tab-radius) var(--tabs-tab-radius) 0 0;\n background-color: transparent;\n color: var(--tabs-tab-fg);\n font-size: var(--tabs-tab-font-size);\n font-weight: var(--tabs-tab-font-weight);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n transition:\n color var(--tabs-motion-duration) var(--motion-easing-standard),\n background-color var(--tabs-motion-duration) var(--motion-easing-standard);\n\n /* Indicator: a transparent border always present, coloured when active, so nothing shifts. */\n border-block-end: 2px solid transparent;\n\n &:focus-visible {\n outline: var(--tabs-focus-ring-width) solid var(--tabs-focus-ring);\n outline-offset: calc(-1 * var(--tabs-focus-ring-offset));\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-state=\"active\"] {\n color: var(--tabs-tab-fg-active);\n border-block-end-color: var(--tabs-tab-indicator);\n }\n\n &:hover:not(:disabled, [data-state=\"active\"]) {\n color: var(--tabs-tab-fg-hover);\n background-color: var(--tabs-tab-bg-hover);\n }\n }\n\n .list[data-orientation=\"vertical\"] .tab {\n border-radius: var(--tabs-tab-radius) 0 0 var(--tabs-tab-radius);\n border-block-end: none;\n border-inline-end: 2px solid transparent;\n text-align: start;\n\n &[data-state=\"active\"] {\n border-inline-end-color: var(--tabs-tab-indicator);\n }\n }\n\n .panel {\n padding-block: var(--tabs-panel-padding-block);\n color: var(--tabs-panel-fg);\n\n &:focus-visible {\n outline: var(--tabs-focus-ring-width) solid var(--tabs-focus-ring);\n outline-offset: var(--tabs-focus-ring-offset);\n }\n }\n\n .root[data-orientation=\"vertical\"] .panel {\n padding-block: 0;\n padding-inline-start: var(--tabs-tab-padding-inline);\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,aAAS;AACT,oBAAgB;AAChB,SAAK;AAEL,KAAC,CAAC;AACA,sBAAgB;AAClB;AACF;AAEA,GAACC;AACC,aAAS;AACT,SAAK,IAAI;AACT,sBAAkB,IAAI,MAAM,IAAI;AAEhC,KAAC,CAAC;AACA,sBAAgB;AAChB,wBAAkB;AAClB,yBAAmB,IAAI,MAAM,IAAI;AACnC;AACF;AAEA,GAACC;AACC,cAAU;AACV,mBAAe,IAAI;AACnB,oBAAgB,IAAI;AACpB,YAAQ;AACR,mBAAe,IAAI,mBAAmB,IAAI,mBAAmB,EAAE;AAC/D,sBAAkB;AAClB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,iBAAa;AACb,iBAAa;AACb,YAAQ;AACR,gBACE,MAAM,IAAI,wBAAwB,IAAI,yBAAyB,EAC/D,iBAAiB,IAAI,wBAAwB,IAAI;AAGnD,sBAAkB,IAAI,MAAM;AAE5B,KAAC;AACC,eAAS,IAAI,yBAAyB,MAAM,IAAI;AAChD,sBAAgB,KAAK,GAAG,EAAE,IAAI;AAChC;AAEA,KAAC;AACC,cAAQ;AACR,eAAS;AACX;AAEA,KAAC,CAAC;AACA,aAAO,IAAI;AACX,8BAAwB,IAAI;AAC9B;AAEA,KAAC,MAAM,KAAK,WAAW,CAAC;AACtB,aAAO,IAAI;AACX,wBAAkB,IAAI;AACxB;AACF;AAEA,GArDCD,SAqDI,CAAC,2BAA6B,CAzClCC;AA0CC,mBAAe,IAAI,mBAAmB,EAAE,EAAE,IAAI;AAC9C,sBAAkB;AAClB,uBAAmB,IAAI,MAAM;AAC7B,gBAAY;AAEZ,KAAC,CAAC;AACA,+BAAyB,IAAI;AAC/B;AACF;AAEA,GAACC;AACC,mBAAe,IAAI;AACnB,WAAO,IAAI;AAEX,KAAC;AACC,eAAS,IAAI,yBAAyB,MAAM,IAAI;AAChD,sBAAgB,IAAI;AACtB;AACF;AAEA,GApFCH,SAoFI,CAAC,2BAA6B,CAVlCG;AAWC,mBAAe;AACf,0BAAsB,IAAI;AAC5B;AACF;","names":["root","list","tab","panel"]}
package/dist/tabs.d.ts ADDED
@@ -0,0 +1,73 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, Ref, ReactNode, ButtonHTMLAttributes } from 'react';
3
+
4
+ type TabsOrientation = 'horizontal' | 'vertical';
5
+ type TabsActivation = 'automatic' | 'manual';
6
+ interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {
7
+ /** Controlled selected tab. */
8
+ value?: string;
9
+ /** Initially selected tab when uncontrolled. */
10
+ defaultValue?: string;
11
+ onValueChange?: (value: string) => void;
12
+ /** Layout and arrow-key axis. @default 'horizontal' */
13
+ orientation?: TabsOrientation;
14
+ /**
15
+ * `automatic` selects a tab when it receives focus (arrow keys); `manual`
16
+ * moves focus only and selects on Enter, Space or click.
17
+ * @default 'automatic'
18
+ */
19
+ activation?: TabsActivation;
20
+ ref?: Ref<HTMLDivElement>;
21
+ children: ReactNode;
22
+ }
23
+ /**
24
+ * Tabbed sections following the WAI-ARIA Tabs pattern. Compose with
25
+ * `Tabs.List`, `Tabs.Tab` and `Tabs.Panel`; ids and ARIA relationships are
26
+ * wired automatically. One tab stop: arrows move between tabs, Home and End
27
+ * jump to the ends, disabled tabs are skipped. State on the DOM:
28
+ * `data-orientation`, `data-state="active|inactive"`.
29
+ *
30
+ * @status stable
31
+ * @category Navigation
32
+ * @accessibility The WAI-ARIA Tabs pattern: `tablist` with `aria-orientation`, `tab`s carrying `aria-selected` and `aria-controls`, `tabpanel`s labelled by their tab. One tab stop: arrows move (and select with automatic activation), Home/End jump, disabled tabs are skipped.
33
+ * @do Use `activation="manual"` when switching a tab is expensive.
34
+ * Name the `Tabs.List` with `aria-label`.
35
+ * @dont Use tabs for sequential steps; use a stepper pattern.
36
+ * Put a link inside a tab.
37
+ */
38
+ declare function Tabs({ value, defaultValue, onValueChange, orientation, activation, className, ref, children, ...rest }: TabsProps): react.JSX.Element;
39
+ declare namespace Tabs {
40
+ var displayName: string;
41
+ var List: typeof TabsList;
42
+ var Tab: typeof TabsTab;
43
+ var Panel: typeof TabsPanel;
44
+ }
45
+ interface TabsListProps extends HTMLAttributes<HTMLDivElement> {
46
+ ref?: Ref<HTMLDivElement>;
47
+ children: ReactNode;
48
+ }
49
+ declare function TabsList({ className, ref, onKeyDown, children, ...rest }: TabsListProps): react.JSX.Element;
50
+ declare namespace TabsList {
51
+ var displayName: string;
52
+ }
53
+ interface TabsTabProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
54
+ /** Identifies the tab; the panel with the same value belongs to it. */
55
+ value: string;
56
+ ref?: Ref<HTMLButtonElement>;
57
+ children: ReactNode;
58
+ }
59
+ declare function TabsTab({ value, disabled, className, onClick, ref, children, ...rest }: TabsTabProps): react.JSX.Element;
60
+ declare namespace TabsTab {
61
+ var displayName: string;
62
+ }
63
+ interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {
64
+ value: string;
65
+ ref?: Ref<HTMLDivElement>;
66
+ children?: ReactNode;
67
+ }
68
+ declare function TabsPanel({ value, className, ref, children, ...rest }: TabsPanelProps): react.JSX.Element;
69
+ declare namespace TabsPanel {
70
+ var displayName: string;
71
+ }
72
+
73
+ export { Tabs, type TabsActivation, type TabsOrientation, type TabsProps };
package/dist/tabs.js ADDED
@@ -0,0 +1,5 @@
1
+ export { Tabs } from './chunk-FH54XQ35.js';
2
+ import './chunk-I5OZ63W7.js';
3
+ import './chunk-MI4QUKQS.js';
4
+ //# sourceMappingURL=tabs.js.map
5
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"tabs.js"}
@@ -0,0 +1,75 @@
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
+
29
+ /* src/text-field/TextField.module.css */
30
+ @layer components {
31
+ .TextField_field {
32
+ font-family: var(--text-field-font-family);
33
+ }
34
+ .TextField_input {
35
+ min-block-size: var(--text-field-height-md);
36
+ padding-block: 0;
37
+ padding-inline: var(--text-field-padding-inline);
38
+ border: 1px solid var(--text-field-border-default);
39
+ border-radius: var(--text-field-radius);
40
+ background-color: var(--text-field-bg);
41
+ color: var(--text-field-fg);
42
+ font-size: var(--text-field-font-size-md);
43
+ transition: border-color var(--text-field-motion-duration) var(--motion-easing-standard), background-color var(--text-field-motion-duration) var(--motion-easing-standard);
44
+ &::placeholder {
45
+ color: var(--text-field-placeholder);
46
+ }
47
+ &:focus-visible {
48
+ border-color: var(--text-field-border-focus);
49
+ outline: var(--text-field-focus-ring-width) solid var(--text-field-focus-ring);
50
+ outline-offset: var(--text-field-focus-ring-offset);
51
+ }
52
+ &:disabled {
53
+ cursor: not-allowed;
54
+ opacity: 0.55;
55
+ }
56
+ &:read-only:not(:disabled) {
57
+ background-color: var(--color-surface-sunken);
58
+ }
59
+ &:hover:not(:disabled, :focus-visible) {
60
+ border-color: var(--text-field-border-hover);
61
+ }
62
+ }
63
+ .TextField_field[data-size=sm] .TextField_input {
64
+ min-block-size: var(--text-field-height-sm);
65
+ font-size: var(--text-field-font-size-sm);
66
+ }
67
+ .TextField_field[data-size=lg] .TextField_input {
68
+ min-block-size: var(--text-field-height-lg);
69
+ font-size: var(--text-field-font-size-lg);
70
+ }
71
+ .TextField_field[data-invalid] .TextField_input {
72
+ border-color: var(--text-field-border-invalid);
73
+ }
74
+ }
75
+ /*# sourceMappingURL=text-field.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/field/Field.module.css","../src/text-field/TextField.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","/*\n * The input's own styles (--text-field-*). Label, description and error come\n * from Field. State lives on the wrapper as data attributes and on the input\n * as native pseudo-classes.\n */\n\n@layer components {\n .field {\n font-family: var(--text-field-font-family);\n }\n\n .input {\n min-block-size: var(--text-field-height-md);\n padding-block: 0;\n padding-inline: var(--text-field-padding-inline);\n border: 1px solid var(--text-field-border-default);\n border-radius: var(--text-field-radius);\n background-color: var(--text-field-bg);\n color: var(--text-field-fg);\n font-size: var(--text-field-font-size-md);\n transition:\n border-color var(--text-field-motion-duration) var(--motion-easing-standard),\n background-color var(--text-field-motion-duration) var(--motion-easing-standard);\n\n &::placeholder {\n color: var(--text-field-placeholder);\n }\n\n &:focus-visible {\n border-color: var(--text-field-border-focus);\n outline: var(--text-field-focus-ring-width) solid var(--text-field-focus-ring);\n outline-offset: var(--text-field-focus-ring-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &:read-only:not(:disabled) {\n background-color: var(--color-surface-sunken);\n }\n\n &:hover:not(:disabled, :focus-visible) {\n border-color: var(--text-field-border-hover);\n }\n }\n\n .field[data-size=\"sm\"] .input {\n min-block-size: var(--text-field-height-sm);\n font-size: var(--text-field-font-size-sm);\n }\n\n .field[data-size=\"lg\"] .input {\n min-block-size: var(--text-field-height-lg);\n font-size: var(--text-field-font-size-lg);\n }\n\n .field[data-invalid] .input {\n border-color: var(--text-field-border-invalid);\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;;;ACzBA;AACE,GAACC;AACC,iBAAa,IAAI;AACnB;AAEA,GAACC;AACC,oBAAgB,IAAI;AACpB,mBAAe;AACf,oBAAgB,IAAI;AACpB,YAAQ,IAAI,MAAM,IAAI;AACtB,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,WAAO,IAAI;AACX,eAAW,IAAI;AACf,gBACE,aAAa,IAAI,8BAA8B,IAAI,yBAAyB,EAC5E,iBAAiB,IAAI,8BAA8B,IAAI;AAEzD,KAAC;AACC,aAAO,IAAI;AACb;AAEA,KAAC;AACC,oBAAc,IAAI;AAClB,eAAS,IAAI,+BAA+B,MAAM,IAAI;AACtD,sBAAgB,IAAI;AACtB;AAEA,KAAC;AACC,cAAQ;AACR,eAAS;AACX;AAEA,KAAC,UAAU,KAAK;AACd,wBAAkB,IAAI;AACxB;AAEA,KAAC,MAAM,KAAK,WAAW;AACrB,oBAAc,IAAI;AACpB;AACF;AAEA,GAzCCD,eAyCK,CAAC,cAAgB,CArCtBC;AAsCC,oBAAgB,IAAI;AACpB,eAAW,IAAI;AACjB;AAEA,GA9CCD,eA8CK,CAAC,cAAgB,CA1CtBC;AA2CC,oBAAgB,IAAI;AACpB,eAAW,IAAI;AACjB;AAEA,GAnDCD,eAmDK,CAAC,cAAc,CA/CpBC;AAgDC,kBAAc,IAAI;AACpB;AACF;","names":["field","label","required","description","error","field","input"]}
@@ -0,0 +1,43 @@
1
+ import * as react from 'react';
2
+ import { InputHTMLAttributes, ReactNode, Ref } from 'react';
3
+
4
+ type TextFieldSize = 'sm' | 'md' | 'lg';
5
+ interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
6
+ /** Visible label. Always rendered: a placeholder is not a label. */
7
+ label: ReactNode;
8
+ /** Help text under the field, exposed as the input's accessible description. */
9
+ description?: ReactNode;
10
+ /**
11
+ * Error message. Its presence marks the input invalid (`aria-invalid`,
12
+ * `data-invalid`) and the message is announced as an alert.
13
+ */
14
+ error?: ReactNode;
15
+ /** @default 'md' */
16
+ size?: TextFieldSize;
17
+ /** The `<input>` element. */
18
+ ref?: Ref<HTMLInputElement>;
19
+ /** Applied to the wrapper, not the input. */
20
+ className?: string;
21
+ }
22
+ /**
23
+ * A single-line text input on top of `Field`: label, description and error
24
+ * wired for assistive technology. Controlled and uncontrolled behave exactly
25
+ * like the native input (`value`/`onChange` or `defaultValue`). Every value
26
+ * comes from `--text-field-*` and `--field-*` tokens; state is exposed as
27
+ * `data-size`, `data-invalid`, `data-disabled` and `data-readonly` on the
28
+ * wrapper.
29
+ *
30
+ * @status stable
31
+ * @category Forms
32
+ * @accessibility A native text `input` wired through Field: `label[for]`, `aria-describedby` for description and error, `aria-invalid` and `aria-required`. Everything the browser gives a native input (autofill, IME, forms) applies.
33
+ * @do Always pass `label`; use a visible one.
34
+ * Prefer `error` text that says how to fix the value.
35
+ * @dont Use `placeholder` as the label.
36
+ * Use it for multi-line text; use Textarea.
37
+ */
38
+ declare function TextField({ label, description, error, size, required, disabled, readOnly, id, className, ref, 'aria-describedby': describedBy, ...rest }: TextFieldProps): react.JSX.Element;
39
+ declare namespace TextField {
40
+ var displayName: string;
41
+ }
42
+
43
+ export { TextField, type TextFieldProps, type TextFieldSize };
@@ -0,0 +1,6 @@
1
+ export { TextField } from './chunk-MXWXJZFS.js';
2
+ import './chunk-2PXTVZ7H.js';
3
+ import './chunk-ZVDN3GRI.js';
4
+ import './chunk-MI4QUKQS.js';
5
+ //# sourceMappingURL=text-field.js.map
6
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-field.js"}
package/dist/text.css ADDED
@@ -0,0 +1,53 @@
1
+ /* src/text/Text.module.css */
2
+ @layer components {
3
+ .Text_text {
4
+ margin: 0;
5
+ font-family: var(--text-font-family-body);
6
+ font-size: var(--text-size-md);
7
+ font-weight: var(--text-weight-regular);
8
+ line-height: var(--text-line-height);
9
+ color: var(--text-tone-default);
10
+ &[data-size=xs] {
11
+ font-size: var(--text-size-xs);
12
+ }
13
+ &[data-size=sm] {
14
+ font-size: var(--text-size-sm);
15
+ }
16
+ &[data-size=lg] {
17
+ font-size: var(--text-size-lg);
18
+ }
19
+ &[data-size=xl] {
20
+ font-size: var(--text-size-xl);
21
+ }
22
+ &[data-weight=medium] {
23
+ font-weight: var(--text-weight-medium);
24
+ }
25
+ &[data-weight=semibold] {
26
+ font-weight: var(--text-weight-semibold);
27
+ }
28
+ &[data-tone=muted] {
29
+ color: var(--text-tone-muted);
30
+ }
31
+ &[data-tone=faint] {
32
+ color: var(--text-tone-faint);
33
+ }
34
+ &[data-family=mono] {
35
+ font-family: var(--text-font-family-mono);
36
+ }
37
+ &[data-align=start] {
38
+ text-align: start;
39
+ }
40
+ &[data-align=center] {
41
+ text-align: center;
42
+ }
43
+ &[data-align=end] {
44
+ text-align: end;
45
+ }
46
+ &[data-truncate] {
47
+ overflow: hidden;
48
+ text-overflow: ellipsis;
49
+ white-space: nowrap;
50
+ }
51
+ }
52
+ }
53
+ /*# sourceMappingURL=text.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/text/Text.module.css"],"sourcesContent":["/* Every value is a token (--text-*). Variants are data attributes. */\n\n@layer components {\n .text {\n margin: 0;\n font-family: var(--text-font-family-body);\n font-size: var(--text-size-md);\n font-weight: var(--text-weight-regular);\n line-height: var(--text-line-height);\n color: var(--text-tone-default);\n\n &[data-size=\"xs\"] { font-size: var(--text-size-xs); }\n &[data-size=\"sm\"] { font-size: var(--text-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--text-size-lg); }\n &[data-size=\"xl\"] { font-size: var(--text-size-xl); }\n &[data-weight=\"medium\"] { font-weight: var(--text-weight-medium); }\n &[data-weight=\"semibold\"] { font-weight: var(--text-weight-semibold); }\n &[data-tone=\"muted\"] { color: var(--text-tone-muted); }\n &[data-tone=\"faint\"] { color: var(--text-tone-faint); }\n &[data-family=\"mono\"] { font-family: var(--text-font-family-mono); }\n &[data-align=\"start\"] { text-align: start; }\n &[data-align=\"center\"] { text-align: center; }\n &[data-align=\"end\"] { text-align: end; }\n\n &[data-truncate] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n}\n"],"mappings":";AAEA;AACE,GAACA;AACC,YAAQ;AACR,iBAAa,IAAI;AACjB,eAAW,IAAI;AACf,iBAAa,IAAI;AACjB,iBAAa,IAAI;AACjB,WAAO,IAAI;AAEX,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAkB,iBAAW,IAAI;AAAiB;AACpD,KAAC,CAAC;AAAwB,mBAAa,IAAI;AAAuB;AAClE,KAAC,CAAC;AAA0B,mBAAa,IAAI;AAAyB;AACtE,KAAC,CAAC;AAAqB,aAAO,IAAI;AAAoB;AACtD,KAAC,CAAC;AAAqB,aAAO,IAAI;AAAoB;AACtD,KAAC,CAAC;AAAsB,mBAAa,IAAI;AAA0B;AACnE,KAAC,CAAC;AAAsB,kBAAY;AAAO;AAC3C,KAAC,CAAC;AAAuB,kBAAY;AAAQ;AAC7C,KAAC,CAAC;AAAoB,kBAAY;AAAK;AAEvC,KAAC,CAAC;AACA,gBAAU;AACV,qBAAe;AACf,mBAAa;AACf;AACF;AACF;","names":["text"]}