@nizivo/react 0.0.0-stage → 0.2.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 (461) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +120 -2
  3. package/THIRD_PARTY_NOTICES +68 -0
  4. package/dist/_engines/react-aria/dialog.client.js +126 -0
  5. package/dist/_engines/react-aria/dom-allowlist.js +19 -0
  6. package/dist/_engines/react-aria/dom.js +31 -0
  7. package/dist/_engines/react-aria/drawer.client.js +8 -0
  8. package/dist/_engines/react-aria/file-upload.client.js +50 -0
  9. package/dist/_engines/react-aria/locale.client.js +13 -0
  10. package/dist/_engines/react-aria/menu.client.js +229 -0
  11. package/dist/_engines/react-aria/open-state.client.js +53 -0
  12. package/dist/_engines/react-aria/outside-press.client.js +61 -0
  13. package/dist/_engines/react-aria/overlay.client.js +46 -0
  14. package/dist/_engines/react-aria/popover.client.js +148 -0
  15. package/dist/_engines/react-aria/popup.client.js +153 -0
  16. package/dist/_engines/react-aria/select.client.js +180 -0
  17. package/dist/_engines/react-aria/tabs.client.js +95 -0
  18. package/dist/_engines/react-aria/toast.client.js +38 -0
  19. package/dist/_engines/react-aria/tooltip.client.js +72 -0
  20. package/dist/_internal/cx.js +11 -0
  21. package/dist/_internal/data-status.d.ts +3 -0
  22. package/dist/_internal/data-status.js +13 -0
  23. package/dist/_internal/engine-part.d.ts +1 -0
  24. package/dist/_internal/field.js +20 -0
  25. package/dist/_internal/glyphs.js +87 -0
  26. package/dist/_internal/keys.js +62 -0
  27. package/dist/_internal/modal.client.js +54 -0
  28. package/dist/_internal/nested-focus.js +33 -0
  29. package/dist/_internal/overlay.d.ts +9 -0
  30. package/dist/_virtual/_rolldown/runtime.js +13 -0
  31. package/dist/alert/alert-dismiss.client.d.ts +32 -0
  32. package/dist/alert/alert-dismiss.client.js +38 -0
  33. package/dist/alert/alert.d.ts +28 -0
  34. package/dist/alert/alert.js +44 -0
  35. package/dist/alert/index.d.ts +3 -0
  36. package/dist/alert/index.js +3 -0
  37. package/dist/app-shell/app-shell.d.ts +24 -0
  38. package/dist/app-shell/app-shell.js +56 -0
  39. package/dist/app-shell/index.d.ts +2 -0
  40. package/dist/app-shell/index.js +1 -0
  41. package/dist/augment.d.ts +13 -0
  42. package/dist/augment.js +0 -0
  43. package/dist/avatar/avatar.d.ts +96 -0
  44. package/dist/avatar/avatar.js +94 -0
  45. package/dist/avatar/index.d.ts +2 -0
  46. package/dist/avatar/index.js +1 -0
  47. package/dist/badge/badge.d.ts +19 -0
  48. package/dist/badge/badge.js +22 -0
  49. package/dist/badge/index.d.ts +2 -0
  50. package/dist/badge/index.js +1 -0
  51. package/dist/banner/banner-dismiss.client.d.ts +32 -0
  52. package/dist/banner/banner-dismiss.client.js +38 -0
  53. package/dist/banner/banner.d.ts +34 -0
  54. package/dist/banner/banner.js +47 -0
  55. package/dist/banner/index.d.ts +3 -0
  56. package/dist/banner/index.js +3 -0
  57. package/dist/breadcrumb/breadcrumb.d.ts +46 -0
  58. package/dist/breadcrumb/breadcrumb.js +46 -0
  59. package/dist/breadcrumb/breadcrumb.parts.d.ts +6 -0
  60. package/dist/breadcrumb/breadcrumb.parts.js +9 -0
  61. package/dist/breadcrumb/index.d.ts +3 -0
  62. package/dist/breadcrumb/index.js +3 -0
  63. package/dist/button/button.d.ts +55 -0
  64. package/dist/button/button.js +62 -0
  65. package/dist/button/index.d.ts +2 -0
  66. package/dist/button/index.js +1 -0
  67. package/dist/card/card.d.ts +64 -0
  68. package/dist/card/card.js +62 -0
  69. package/dist/card/card.parts.d.ts +6 -0
  70. package/dist/card/card.parts.js +14 -0
  71. package/dist/card/index.d.ts +3 -0
  72. package/dist/card/index.js +3 -0
  73. package/dist/checkbox/checkbox.client.d.ts +37 -0
  74. package/dist/checkbox/checkbox.client.js +81 -0
  75. package/dist/checkbox/index.d.ts +2 -0
  76. package/dist/checkbox/index.js +1 -0
  77. package/dist/chip-group/chip-group.client.d.ts +88 -0
  78. package/dist/chip-group/chip-group.client.js +157 -0
  79. package/dist/chip-group/index.d.ts +2 -0
  80. package/dist/chip-group/index.js +1 -0
  81. package/dist/choice-card/choice-card.client.d.ts +66 -0
  82. package/dist/choice-card/choice-card.client.js +138 -0
  83. package/dist/choice-card/index.d.ts +2 -0
  84. package/dist/choice-card/index.js +1 -0
  85. package/dist/config/config.client.d.ts +24 -0
  86. package/dist/config/config.client.js +33 -0
  87. package/dist/config/index.d.ts +2 -0
  88. package/dist/config/index.js +1 -0
  89. package/dist/container/container.d.ts +13 -0
  90. package/dist/container/container.js +16 -0
  91. package/dist/container/index.d.ts +2 -0
  92. package/dist/container/index.js +1 -0
  93. package/dist/contracts/details.d.ts +13 -0
  94. package/dist/contracts/details.js +9 -0
  95. package/dist/contracts/index.d.ts +5 -0
  96. package/dist/contracts/index.js +5 -0
  97. package/dist/contracts/merge-props.d.ts +16 -0
  98. package/dist/contracts/merge-props.js +76 -0
  99. package/dist/contracts/render.d.ts +17 -0
  100. package/dist/contracts/render.js +43 -0
  101. package/dist/contracts/state.d.ts +42 -0
  102. package/dist/contracts/state.js +42 -0
  103. package/dist/css/alert.css +2 -0
  104. package/dist/css/app-shell.css +2 -0
  105. package/dist/css/avatar.css +2 -0
  106. package/dist/css/badge.css +2 -0
  107. package/dist/css/banner.css +2 -0
  108. package/dist/css/base.css +2 -0
  109. package/dist/css/breadcrumb.css +2 -0
  110. package/dist/css/button.css +2 -0
  111. package/dist/css/card.css +2 -0
  112. package/dist/css/checkbox.css +2 -0
  113. package/dist/css/chip-group.css +2 -0
  114. package/dist/css/choice-card.css +2 -0
  115. package/dist/css/container.css +2 -0
  116. package/dist/css/delta.css +2 -0
  117. package/dist/css/dialog.css +2 -0
  118. package/dist/css/drawer.css +2 -0
  119. package/dist/css/empty-state.css +2 -0
  120. package/dist/css/field.css +2 -0
  121. package/dist/css/fieldset.css +2 -0
  122. package/dist/css/file-upload.css +2 -0
  123. package/dist/css/form.css +2 -0
  124. package/dist/css/grid.css +2 -0
  125. package/dist/css/heading.css +2 -0
  126. package/dist/css/icon-button.css +2 -0
  127. package/dist/css/image.css +2 -0
  128. package/dist/css/inline-error.css +2 -0
  129. package/dist/css/inline.css +2 -0
  130. package/dist/css/input.css +2 -0
  131. package/dist/css/kbd.css +2 -0
  132. package/dist/css/kpi-tile.css +2 -0
  133. package/dist/css/menu.css +2 -0
  134. package/dist/css/meter.css +2 -0
  135. package/dist/css/metric.css +2 -0
  136. package/dist/css/mobile-tab-bar.css +2 -0
  137. package/dist/css/mobile-top-bar.css +2 -0
  138. package/dist/css/motion.css +2 -0
  139. package/dist/css/native-select.css +2 -0
  140. package/dist/css/nav-item.css +2 -0
  141. package/dist/css/number-value.css +2 -0
  142. package/dist/css/page-header.css +2 -0
  143. package/dist/css/pagination.css +2 -0
  144. package/dist/css/password-input.css +2 -0
  145. package/dist/css/popover.css +2 -0
  146. package/dist/css/progress-bar.css +2 -0
  147. package/dist/css/progress-ring.css +2 -0
  148. package/dist/css/radio-group.css +2 -0
  149. package/dist/css/ranked-list.css +2 -0
  150. package/dist/css/search-field.css +2 -0
  151. package/dist/css/segmented-control.css +2 -0
  152. package/dist/css/select.css +2 -0
  153. package/dist/css/separator.css +2 -0
  154. package/dist/css/sidebar.css +2 -0
  155. package/dist/css/skeleton.css +2 -0
  156. package/dist/css/split.css +2 -0
  157. package/dist/css/stack.css +2 -0
  158. package/dist/css/sticky-bar.css +2 -0
  159. package/dist/css/switch.css +2 -0
  160. package/dist/css/tab-nav.css +2 -0
  161. package/dist/css/table-selection.css +2 -0
  162. package/dist/css/table.css +2 -0
  163. package/dist/css/tabs.css +2 -0
  164. package/dist/css/text.css +2 -0
  165. package/dist/css/textarea.css +2 -0
  166. package/dist/css/toast.css +2 -0
  167. package/dist/css/tooltip.css +2 -0
  168. package/dist/css/top-bar.css +2 -0
  169. package/dist/css/trend-card.css +2 -0
  170. package/dist/delta/delta.d.ts +32 -0
  171. package/dist/delta/delta.js +50 -0
  172. package/dist/delta/index.d.ts +2 -0
  173. package/dist/delta/index.js +1 -0
  174. package/dist/dialog/dialog.client.d.ts +25 -0
  175. package/dist/dialog/dialog.client.js +145 -0
  176. package/dist/dialog/dialog.contract.d.ts +97 -0
  177. package/dist/dialog/dialog.parts.d.ts +6 -0
  178. package/dist/dialog/dialog.parts.js +15 -0
  179. package/dist/dialog/index.d.ts +5 -0
  180. package/dist/dialog/index.js +3 -0
  181. package/dist/drawer/drawer.client.d.ts +25 -0
  182. package/dist/drawer/drawer.client.js +154 -0
  183. package/dist/drawer/drawer.contract.d.ts +98 -0
  184. package/dist/drawer/drawer.parts.d.ts +6 -0
  185. package/dist/drawer/drawer.parts.js +16 -0
  186. package/dist/drawer/index.d.ts +5 -0
  187. package/dist/drawer/index.js +3 -0
  188. package/dist/empty-state/empty-state.d.ts +18 -0
  189. package/dist/empty-state/empty-state.js +32 -0
  190. package/dist/empty-state/index.d.ts +2 -0
  191. package/dist/empty-state/index.js +1 -0
  192. package/dist/field/field-scope.client.d.ts +50 -0
  193. package/dist/field/field-scope.client.js +212 -0
  194. package/dist/field/field-static.d.ts +122 -0
  195. package/dist/field/field-static.js +159 -0
  196. package/dist/field/field.d.ts +5 -0
  197. package/dist/field/field.js +53 -0
  198. package/dist/field/index.d.ts +4 -0
  199. package/dist/field/index.js +4 -0
  200. package/dist/fieldset/fieldset.d.ts +36 -0
  201. package/dist/fieldset/fieldset.js +63 -0
  202. package/dist/fieldset/index.d.ts +2 -0
  203. package/dist/fieldset/index.js +1 -0
  204. package/dist/file-upload/file-upload.client.d.ts +9 -0
  205. package/dist/file-upload/file-upload.client.js +406 -0
  206. package/dist/file-upload/file-upload.contract.d.ts +112 -0
  207. package/dist/file-upload/index.d.ts +3 -0
  208. package/dist/file-upload/index.js +1 -0
  209. package/dist/file-upload/seam.d.ts +1 -0
  210. package/dist/form/form.client.d.ts +38 -0
  211. package/dist/form/form.client.js +127 -0
  212. package/dist/form/form.d.ts +36 -0
  213. package/dist/form/form.js +29 -0
  214. package/dist/form/index.d.ts +4 -0
  215. package/dist/form/index.js +4 -0
  216. package/dist/form/submit-button.client.d.ts +20 -0
  217. package/dist/form/submit-button.client.js +19 -0
  218. package/dist/grid/grid.d.ts +38 -0
  219. package/dist/grid/grid.js +28 -0
  220. package/dist/grid/index.d.ts +2 -0
  221. package/dist/grid/index.js +1 -0
  222. package/dist/heading/heading.d.ts +30 -0
  223. package/dist/heading/heading.js +26 -0
  224. package/dist/heading/index.d.ts +2 -0
  225. package/dist/heading/index.js +1 -0
  226. package/dist/i18n/format-label.d.ts +24 -0
  227. package/dist/i18n/format-label.js +19 -0
  228. package/dist/i18n/index.d.ts +2 -0
  229. package/dist/i18n/index.js +1 -0
  230. package/dist/icon-button/icon-button-static.d.ts +23 -0
  231. package/dist/icon-button/icon-button-static.js +83 -0
  232. package/dist/icon-button/icon-button.client.js +29 -0
  233. package/dist/icon-button/icon-button.contract.d.ts +89 -0
  234. package/dist/icon-button/icon-button.d.ts +5 -0
  235. package/dist/icon-button/icon-button.js +21 -0
  236. package/dist/icon-button/index.d.ts +4 -0
  237. package/dist/icon-button/index.js +3 -0
  238. package/dist/image/image.d.ts +28 -0
  239. package/dist/image/image.js +24 -0
  240. package/dist/image/index.d.ts +2 -0
  241. package/dist/image/index.js +1 -0
  242. package/dist/index.d.ts +174 -0
  243. package/dist/index.js +96 -0
  244. package/dist/inline/index.d.ts +2 -0
  245. package/dist/inline/index.js +1 -0
  246. package/dist/inline/inline.d.ts +16 -0
  247. package/dist/inline/inline.js +14 -0
  248. package/dist/inline-error/index.d.ts +2 -0
  249. package/dist/inline-error/index.js +1 -0
  250. package/dist/inline-error/inline-error.d.ts +17 -0
  251. package/dist/inline-error/inline-error.js +33 -0
  252. package/dist/input/index.d.ts +2 -0
  253. package/dist/input/index.js +1 -0
  254. package/dist/input/input.client.d.ts +39 -0
  255. package/dist/input/input.client.js +82 -0
  256. package/dist/kbd/index.d.ts +2 -0
  257. package/dist/kbd/index.js +1 -0
  258. package/dist/kbd/kbd.d.ts +19 -0
  259. package/dist/kbd/kbd.js +68 -0
  260. package/dist/kpi-tile/index.d.ts +2 -0
  261. package/dist/kpi-tile/index.js +1 -0
  262. package/dist/kpi-tile/kpi-tile.d.ts +30 -0
  263. package/dist/kpi-tile/kpi-tile.js +48 -0
  264. package/dist/locales/en-US.d.ts +77 -0
  265. package/dist/locales/en-US.js +83 -0
  266. package/dist/menu/index.d.ts +5 -0
  267. package/dist/menu/index.js +3 -0
  268. package/dist/menu/menu.client.d.ts +14 -0
  269. package/dist/menu/menu.client.js +152 -0
  270. package/dist/menu/menu.contract.d.ts +152 -0
  271. package/dist/menu/menu.parts.d.ts +6 -0
  272. package/dist/menu/menu.parts.js +17 -0
  273. package/dist/meter/index.d.ts +2 -0
  274. package/dist/meter/index.js +1 -0
  275. package/dist/meter/meter.d.ts +43 -0
  276. package/dist/meter/meter.js +59 -0
  277. package/dist/metric/index.d.ts +2 -0
  278. package/dist/metric/index.js +1 -0
  279. package/dist/metric/metric.d.ts +72 -0
  280. package/dist/metric/metric.js +116 -0
  281. package/dist/mobile-tab-bar/index.d.ts +4 -0
  282. package/dist/mobile-tab-bar/index.js +4 -0
  283. package/dist/mobile-tab-bar/mobile-tab-bar-inset.client.js +38 -0
  284. package/dist/mobile-tab-bar/mobile-tab-bar-more.client.d.ts +26 -0
  285. package/dist/mobile-tab-bar/mobile-tab-bar-more.client.js +60 -0
  286. package/dist/mobile-tab-bar/mobile-tab-bar.d.ts +39 -0
  287. package/dist/mobile-tab-bar/mobile-tab-bar.js +54 -0
  288. package/dist/mobile-tab-bar/mobile-tab-bar.parts.d.ts +6 -0
  289. package/dist/mobile-tab-bar/mobile-tab-bar.parts.js +9 -0
  290. package/dist/mobile-top-bar/index.d.ts +2 -0
  291. package/dist/mobile-top-bar/index.js +1 -0
  292. package/dist/mobile-top-bar/mobile-top-bar.d.ts +17 -0
  293. package/dist/mobile-top-bar/mobile-top-bar.js +31 -0
  294. package/dist/motion/count-up.client.d.ts +39 -0
  295. package/dist/motion/count-up.client.js +109 -0
  296. package/dist/motion/index.d.ts +2 -0
  297. package/dist/motion/index.js +1 -0
  298. package/dist/native-select/index.d.ts +2 -0
  299. package/dist/native-select/index.js +1 -0
  300. package/dist/native-select/native-select.d.ts +43 -0
  301. package/dist/native-select/native-select.js +56 -0
  302. package/dist/nav-item/index.d.ts +2 -0
  303. package/dist/nav-item/index.js +1 -0
  304. package/dist/nav-item/nav-item.d.ts +35 -0
  305. package/dist/nav-item/nav-item.js +50 -0
  306. package/dist/number-value/index.d.ts +2 -0
  307. package/dist/number-value/index.js +1 -0
  308. package/dist/number-value/number-value.d.ts +25 -0
  309. package/dist/number-value/number-value.js +26 -0
  310. package/dist/page-header/index.d.ts +2 -0
  311. package/dist/page-header/index.js +1 -0
  312. package/dist/page-header/page-header.d.ts +19 -0
  313. package/dist/page-header/page-header.js +39 -0
  314. package/dist/pagination/index.d.ts +2 -0
  315. package/dist/pagination/index.js +1 -0
  316. package/dist/pagination/pagination.d.ts +74 -0
  317. package/dist/pagination/pagination.js +136 -0
  318. package/dist/password-input/index.d.ts +2 -0
  319. package/dist/password-input/index.js +1 -0
  320. package/dist/password-input/password-input.client.d.ts +52 -0
  321. package/dist/password-input/password-input.client.js +106 -0
  322. package/dist/popover/index.d.ts +5 -0
  323. package/dist/popover/index.js +3 -0
  324. package/dist/popover/popover.client.d.ts +20 -0
  325. package/dist/popover/popover.client.js +113 -0
  326. package/dist/popover/popover.contract.d.ts +88 -0
  327. package/dist/popover/popover.parts.d.ts +6 -0
  328. package/dist/popover/popover.parts.js +13 -0
  329. package/dist/progress-bar/index.d.ts +2 -0
  330. package/dist/progress-bar/index.js +1 -0
  331. package/dist/progress-bar/progress-bar.d.ts +34 -0
  332. package/dist/progress-bar/progress-bar.js +55 -0
  333. package/dist/progress-ring/index.d.ts +2 -0
  334. package/dist/progress-ring/index.js +1 -0
  335. package/dist/progress-ring/progress-ring.d.ts +38 -0
  336. package/dist/progress-ring/progress-ring.js +67 -0
  337. package/dist/radio-group/index.d.ts +3 -0
  338. package/dist/radio-group/index.js +3 -0
  339. package/dist/radio-group/radio-group.client.d.ts +22 -0
  340. package/dist/radio-group/radio-group.client.js +70 -0
  341. package/dist/radio-group/radio-group.d.ts +28 -0
  342. package/dist/radio-group/radio-group.js +35 -0
  343. package/dist/ranked-list/index.d.ts +3 -0
  344. package/dist/ranked-list/index.js +3 -0
  345. package/dist/ranked-list/ranked-list.d.ts +85 -0
  346. package/dist/ranked-list/ranked-list.js +153 -0
  347. package/dist/ranked-list/ranked-list.parts.d.ts +6 -0
  348. package/dist/ranked-list/ranked-list.parts.js +10 -0
  349. package/dist/search-field/index.d.ts +2 -0
  350. package/dist/search-field/index.js +1 -0
  351. package/dist/search-field/search-field.client.d.ts +55 -0
  352. package/dist/search-field/search-field.client.js +136 -0
  353. package/dist/segmented-control/index.d.ts +3 -0
  354. package/dist/segmented-control/index.js +3 -0
  355. package/dist/segmented-control/segmented-control.client.d.ts +61 -0
  356. package/dist/segmented-control/segmented-control.client.js +156 -0
  357. package/dist/segmented-control/segmented-control.parts.d.ts +6 -0
  358. package/dist/segmented-control/segmented-control.parts.js +9 -0
  359. package/dist/select/index.d.ts +5 -0
  360. package/dist/select/index.js +3 -0
  361. package/dist/select/select.client.d.ts +12 -0
  362. package/dist/select/select.client.js +152 -0
  363. package/dist/select/select.contract.d.ts +119 -0
  364. package/dist/select/select.parts.d.ts +6 -0
  365. package/dist/select/select.parts.js +15 -0
  366. package/dist/separator/index.d.ts +2 -0
  367. package/dist/separator/index.js +1 -0
  368. package/dist/separator/separator.d.ts +26 -0
  369. package/dist/separator/separator.js +23 -0
  370. package/dist/sidebar/index.d.ts +4 -0
  371. package/dist/sidebar/index.js +4 -0
  372. package/dist/sidebar/sidebar-item.client.d.ts +10 -0
  373. package/dist/sidebar/sidebar-item.client.js +55 -0
  374. package/dist/sidebar/sidebar.d.ts +45 -0
  375. package/dist/sidebar/sidebar.js +62 -0
  376. package/dist/sidebar/sidebar.parts.d.ts +6 -0
  377. package/dist/sidebar/sidebar.parts.js +11 -0
  378. package/dist/skeleton/index.d.ts +2 -0
  379. package/dist/skeleton/index.js +1 -0
  380. package/dist/skeleton/skeleton.d.ts +20 -0
  381. package/dist/skeleton/skeleton.js +19 -0
  382. package/dist/split/index.d.ts +3 -0
  383. package/dist/split/index.js +3 -0
  384. package/dist/split/split.d.ts +28 -0
  385. package/dist/split/split.js +33 -0
  386. package/dist/split/split.parts.d.ts +6 -0
  387. package/dist/split/split.parts.js +10 -0
  388. package/dist/stack/index.d.ts +2 -0
  389. package/dist/stack/index.js +1 -0
  390. package/dist/stack/stack.d.ts +17 -0
  391. package/dist/stack/stack.js +14 -0
  392. package/dist/sticky-bar/index.d.ts +2 -0
  393. package/dist/sticky-bar/index.js +1 -0
  394. package/dist/sticky-bar/sticky-bar.d.ts +16 -0
  395. package/dist/sticky-bar/sticky-bar.js +26 -0
  396. package/dist/styles.css +595 -0
  397. package/dist/switch/index.d.ts +2 -0
  398. package/dist/switch/index.js +1 -0
  399. package/dist/switch/switch.client.d.ts +33 -0
  400. package/dist/switch/switch.client.js +63 -0
  401. package/dist/tab-nav/index.d.ts +3 -0
  402. package/dist/tab-nav/index.js +3 -0
  403. package/dist/tab-nav/tab-nav.d.ts +36 -0
  404. package/dist/tab-nav/tab-nav.js +47 -0
  405. package/dist/tab-nav/tab-nav.parts.d.ts +6 -0
  406. package/dist/tab-nav/tab-nav.parts.js +9 -0
  407. package/dist/table/index.d.ts +3 -0
  408. package/dist/table/index.js +3 -0
  409. package/dist/table/table.d.ts +101 -0
  410. package/dist/table/table.js +121 -0
  411. package/dist/table/table.parts.d.ts +6 -0
  412. package/dist/table/table.parts.js +18 -0
  413. package/dist/table-selection/index.d.ts +3 -0
  414. package/dist/table-selection/index.js +3 -0
  415. package/dist/table-selection/table-selection.client.d.ts +14 -0
  416. package/dist/table-selection/table-selection.client.js +84 -0
  417. package/dist/table-selection/table-selection.d.ts +34 -0
  418. package/dist/table-selection/table-selection.js +50 -0
  419. package/dist/tabs/index.d.ts +4 -0
  420. package/dist/tabs/index.js +3 -0
  421. package/dist/tabs/tabs.client.d.ts +8 -0
  422. package/dist/tabs/tabs.client.js +68 -0
  423. package/dist/tabs/tabs.contract.d.ts +89 -0
  424. package/dist/tabs/tabs.parts.d.ts +6 -0
  425. package/dist/tabs/tabs.parts.js +11 -0
  426. package/dist/text/index.d.ts +2 -0
  427. package/dist/text/index.js +1 -0
  428. package/dist/text/text.d.ts +32 -0
  429. package/dist/text/text.js +17 -0
  430. package/dist/textarea/index.d.ts +2 -0
  431. package/dist/textarea/index.js +1 -0
  432. package/dist/textarea/textarea.client.d.ts +18 -0
  433. package/dist/textarea/textarea.client.js +31 -0
  434. package/dist/theme-script/index.d.ts +2 -0
  435. package/dist/theme-script/index.js +1 -0
  436. package/dist/theme-script/theme-script.d.ts +43 -0
  437. package/dist/theme-script/theme-script.js +46 -0
  438. package/dist/toast/index.d.ts +4 -0
  439. package/dist/toast/index.js +3 -0
  440. package/dist/toast/seam.d.ts +2 -0
  441. package/dist/toast/store.d.ts +19 -0
  442. package/dist/toast/store.js +136 -0
  443. package/dist/toast/toast.contract.d.ts +56 -0
  444. package/dist/toast/toaster.client.d.ts +10 -0
  445. package/dist/toast/toaster.client.js +305 -0
  446. package/dist/tooltip/index.d.ts +5 -0
  447. package/dist/tooltip/index.js +3 -0
  448. package/dist/tooltip/tooltip.client.d.ts +12 -0
  449. package/dist/tooltip/tooltip.client.js +51 -0
  450. package/dist/tooltip/tooltip.contract.d.ts +60 -0
  451. package/dist/tooltip/tooltip.parts.d.ts +6 -0
  452. package/dist/tooltip/tooltip.parts.js +10 -0
  453. package/dist/top-bar/index.d.ts +2 -0
  454. package/dist/top-bar/index.js +1 -0
  455. package/dist/top-bar/top-bar.d.ts +17 -0
  456. package/dist/top-bar/top-bar.js +35 -0
  457. package/dist/trend-card/index.d.ts +2 -0
  458. package/dist/trend-card/index.js +1 -0
  459. package/dist/trend-card/trend-card.d.ts +34 -0
  460. package/dist/trend-card/trend-card.js +74 -0
  461. package/package.json +447 -3
@@ -0,0 +1,138 @@
1
+ "use client";
2
+ import { cx } from "../_internal/cx.js";
3
+ import { mergeProps } from "../contracts/merge-props.js";
4
+ import { renderElement } from "../contracts/render.js";
5
+ import { details } from "../contracts/details.js";
6
+ import { stateAttrs } from "../contracts/state.js";
7
+ import { useFieldControl } from "../field/field-scope.client.js";
8
+ import { clearFocus, definedProps, markFocus, markKeyDown } from "../_internal/nested-focus.js";
9
+ import { createContext, use, useId, useMemo } from "react";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/choice-card/choice-card.client.tsx
12
+ const GroupContext = createContext(null);
13
+ function ChoiceCardGroup({ value, defaultValue, onValueChange, name, form, required, disabled, invalid, "aria-describedby": describedBy, "aria-labelledby": labelledBy, render, className, children, ...rest }) {
14
+ const field = useFieldControl({
15
+ name,
16
+ required,
17
+ disabled,
18
+ invalid,
19
+ "aria-describedby": describedBy
20
+ });
21
+ const generated = useId();
22
+ const { required: radioRequired, onInvalid, onInput, onBlur } = field.controlProps;
23
+ const groupName = field.name ?? generated;
24
+ const group = useMemo(() => ({
25
+ name: groupName,
26
+ value,
27
+ defaultValue,
28
+ disabled: field.disabled,
29
+ radio: definedProps({
30
+ required: radioRequired,
31
+ form,
32
+ onInvalid,
33
+ onInput,
34
+ onBlur
35
+ }),
36
+ onValueChange
37
+ }), [
38
+ groupName,
39
+ value,
40
+ defaultValue,
41
+ field.disabled,
42
+ radioRequired,
43
+ form,
44
+ onInvalid,
45
+ onInput,
46
+ onBlur,
47
+ onValueChange
48
+ ]);
49
+ return /* @__PURE__ */ jsx(GroupContext, {
50
+ value: group,
51
+ children: renderElement("div", render, {
52
+ disabled: field.disabled,
53
+ invalid: field.invalid
54
+ }, {
55
+ "data-slot": "choice-card-group",
56
+ ...stateAttrs({
57
+ disabled: field.disabled,
58
+ invalid: field.invalid,
59
+ required: field.required
60
+ }),
61
+ ...rest,
62
+ role: "radiogroup",
63
+ "aria-labelledby": labelledBy ?? field.labelledBy,
64
+ "aria-describedby": field.describedBy,
65
+ "aria-invalid": field.invalid ? true : void 0,
66
+ "aria-required": field.required ? true : void 0,
67
+ className: cx("nz-choice-card-group", className),
68
+ children
69
+ })
70
+ });
71
+ }
72
+ function ChoiceCard({ value, disabled, leading, description, trailing, render, className, children, ...rest }) {
73
+ const group = use(GroupContext);
74
+ if (group === null) throw new Error("ChoiceCard must be inside ChoiceCardGroup");
75
+ const off = disabled === true || group.disabled;
76
+ const id = useId();
77
+ const labelId = `${id}-label`;
78
+ const descriptionId = description == null ? void 0 : `${id}-description`;
79
+ const trailingId = trailing == null ? void 0 : `${id}-trailing`;
80
+ const checked = group.value === void 0 ? { defaultChecked: group.defaultValue === value } : { checked: group.value === value };
81
+ const onChange = (event) => {
82
+ if (event.currentTarget.checked) group.onValueChange?.(value, details("input", event.nativeEvent));
83
+ };
84
+ return renderElement("label", render, { disabled: off }, {
85
+ "data-slot": "choice-card",
86
+ ...stateAttrs({ disabled: off }),
87
+ ...rest,
88
+ className: cx("nz-choice-card", className),
89
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
90
+ /* @__PURE__ */ jsx("input", {
91
+ ...mergeProps(group.radio, {
92
+ onChange,
93
+ onFocus: markFocus,
94
+ onBlur: clearFocus,
95
+ onKeyDown: markKeyDown
96
+ }),
97
+ ...checked,
98
+ type: "radio",
99
+ className: "nz-choice-card-input",
100
+ "data-slot": "choice-card-input",
101
+ name: group.name,
102
+ value,
103
+ disabled: off || void 0,
104
+ "aria-labelledby": trailingId === void 0 ? labelId : `${labelId} ${trailingId}`,
105
+ "aria-describedby": descriptionId
106
+ }),
107
+ leading != null && /* @__PURE__ */ jsx("span", {
108
+ className: "nz-choice-card-leading",
109
+ "data-slot": "choice-card-leading",
110
+ "aria-hidden": "true",
111
+ children: leading
112
+ }),
113
+ /* @__PURE__ */ jsxs("span", {
114
+ className: "nz-choice-card-content",
115
+ "data-slot": "choice-card-content",
116
+ children: [/* @__PURE__ */ jsx("span", {
117
+ className: "nz-choice-card-label",
118
+ "data-slot": "choice-card-label",
119
+ id: labelId,
120
+ children
121
+ }), description != null && /* @__PURE__ */ jsx("span", {
122
+ className: "nz-choice-card-description",
123
+ "data-slot": "choice-card-description",
124
+ id: descriptionId,
125
+ children: description
126
+ })]
127
+ }),
128
+ trailing != null && /* @__PURE__ */ jsx("span", {
129
+ className: "nz-choice-card-trailing",
130
+ "data-slot": "choice-card-trailing",
131
+ id: trailingId,
132
+ children: trailing
133
+ })
134
+ ] })
135
+ });
136
+ }
137
+ //#endregion
138
+ export { ChoiceCard, ChoiceCardGroup };
@@ -0,0 +1,2 @@
1
+ import { ChoiceCard, ChoiceCardChangeReason, ChoiceCardGroup, ChoiceCardGroupProps, ChoiceCardGroupState, ChoiceCardProps, ChoiceCardState } from "./choice-card.client.js";
2
+ export { ChoiceCard, type ChoiceCardChangeReason, ChoiceCardGroup, type ChoiceCardGroupProps, type ChoiceCardGroupState, type ChoiceCardProps, type ChoiceCardState };
@@ -0,0 +1 @@
1
+ export { ChoiceCard, ChoiceCardGroup } from "./choice-card.client.js";
@@ -0,0 +1,24 @@
1
+ import { enUS } from "../locales/en-US.js";
2
+ import { JSX, ReactNode } from "react";
3
+ //#region src/config/config.client.d.ts
4
+ /**
5
+ * Built-in strings for every client part in the scope, shaped like the `enUS` catalogue
6
+ * (`@nizivo/react/locales/en-US`): keyed by component, every key and every string optional, so a
7
+ * whole catalogue of another locale fits. Read by the client parts the Strings guide lists; the
8
+ * other keys (server parts such as Pagination, Button and Breadcrumb, which cannot read a context,
9
+ * and AlertDismiss) are ignored here, and those parts take `labels` per instance.
10
+ */
11
+ export type NizivoLabels = { [K in keyof typeof enUS]?: Partial<(typeof enUS)[K]>; };
12
+ export interface NizivoConfigProps {
13
+ /** BCP 47 tag used by engine-backed parts. @default 'en-US' */
14
+ locale?: string;
15
+ /**
16
+ * Built-in strings for the client parts in this scope. A part's own `labels` prop wins key by
17
+ * key; a key neither sets falls back to the English default. Keep the object stable (a module
18
+ * constant or memoised), as with any context value.
19
+ */
20
+ labels?: NizivoLabels;
21
+ children?: ReactNode;
22
+ }
23
+ export declare function NizivoConfig({ locale, labels, children }: NizivoConfigProps): JSX.Element;
24
+ //#endregion
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { createContext, use, useMemo } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/config/config.client.tsx
5
+ const ConfigContext = createContext({ locale: "en-US" });
6
+ function NizivoConfig({ locale = "en-US", labels, children }) {
7
+ const value = useMemo(() => ({
8
+ locale,
9
+ labels
10
+ }), [locale, labels]);
11
+ return /* @__PURE__ */ jsx(ConfigContext, {
12
+ value,
13
+ children
14
+ });
15
+ }
16
+ /** The resolved locale. Internal: engine roots read it through EngineLocale. */
17
+ function useResolvedLocale() {
18
+ return use(ConfigContext).locale;
19
+ }
20
+ /**
21
+ * A client part's labels: its own `labels` prop over the scope's `NizivoConfig labels[key]`, key by
22
+ * key. Undefined when neither sets anything, so the part's own English default applies.
23
+ * Internal: server parts never call it (they cannot read a context).
24
+ */
25
+ function useLabels(key, own) {
26
+ const scope = use(ConfigContext).labels?.[key];
27
+ return scope === void 0 ? own : {
28
+ ...scope,
29
+ ...own
30
+ };
31
+ }
32
+ //#endregion
33
+ export { NizivoConfig, useLabels, useResolvedLocale };
@@ -0,0 +1,2 @@
1
+ import { NizivoConfig, NizivoConfigProps, NizivoLabels } from "./config.client.js";
2
+ export { NizivoConfig, type NizivoConfigProps, type NizivoLabels };
@@ -0,0 +1 @@
1
+ export { NizivoConfig } from "./config.client.js";
@@ -0,0 +1,13 @@
1
+ import { RenderProp } from "../contracts/render.js";
2
+ import { ComponentPropsWithRef, ReactElement } from "react";
3
+ //#region src/container/container.d.ts
4
+ export interface ContainerProps extends ComponentPropsWithRef<"div"> {
5
+ /** Another element, for example `render={<main />}`. */
6
+ render?: RenderProp<Record<string, never>>;
7
+ }
8
+ /**
9
+ * Centres page content: at most `--nz-layout-content-max` wide (358, 976, 1280 px by viewport), with
10
+ * the responsive page margin `--nz-grid-margin` (16, 24, 32 px) on both sides.
11
+ */
12
+ export declare function Container({ render, className, ...rest }: ContainerProps): ReactElement;
13
+ //#endregion
@@ -0,0 +1,16 @@
1
+ import { cx } from "../_internal/cx.js";
2
+ import { renderElement } from "../contracts/render.js";
3
+ //#region src/container/container.tsx
4
+ /**
5
+ * Centres page content: at most `--nz-layout-content-max` wide (358, 976, 1280 px by viewport), with
6
+ * the responsive page margin `--nz-grid-margin` (16, 24, 32 px) on both sides.
7
+ */
8
+ function Container({ render, className, ...rest }) {
9
+ return renderElement("div", render, {}, {
10
+ "data-slot": "container",
11
+ ...rest,
12
+ className: cx("nz-container", className)
13
+ });
14
+ }
15
+ //#endregion
16
+ export { Container };
@@ -0,0 +1,2 @@
1
+ import { Container, ContainerProps } from "./container.js";
2
+ export { Container, type ContainerProps };
@@ -0,0 +1 @@
1
+ export { Container } from "./container.js";
@@ -0,0 +1,13 @@
1
+ //#region src/contracts/details.d.ts
2
+ /**
3
+ * The second argument of every `on<X>Change(value, details)`. `reason` is Nizivo-owned: where the
4
+ * engine reports no cause, it is `'unknown'`, never a guess.
5
+ */
6
+ export interface ChangeDetails<R extends string> {
7
+ reason: R | "unknown";
8
+ event?: Event;
9
+ }
10
+ /** Why an overlay opened or closed (§12.2). */
11
+ export type OpenReason = "trigger" | "escape" | "outside-press" | "close-part" | "item-press" | "hidden" | "programmatic";
12
+ export declare function details<R extends string = never>(reason: NoInfer<R> | "unknown", event?: Event): ChangeDetails<R>;
13
+ //#endregion
@@ -0,0 +1,9 @@
1
+ //#region src/contracts/details.ts
2
+ function details(reason, event) {
3
+ return event === void 0 ? { reason } : {
4
+ reason,
5
+ event
6
+ };
7
+ }
8
+ //#endregion
9
+ export { details };
@@ -0,0 +1,5 @@
1
+ import { RenderProp, renderElement, toRenderFn } from "./render.js";
2
+ import { ChangeDetails, OpenReason, details } from "./details.js";
3
+ import { Align, Orientation, STATE_ATTR_NAMES, Side, StateAttrs, StateInput, stateAttrs } from "./state.js";
4
+ import { mergeProps } from "./merge-props.js";
5
+ export { type Align, type ChangeDetails, type OpenReason, type Orientation, type RenderProp, STATE_ATTR_NAMES, type Side, type StateAttrs, type StateInput, details, mergeProps, renderElement, stateAttrs, toRenderFn };
@@ -0,0 +1,5 @@
1
+ import { mergeProps } from "./merge-props.js";
2
+ import { renderElement, toRenderFn } from "./render.js";
3
+ import { details } from "./details.js";
4
+ import { STATE_ATTR_NAMES, stateAttrs } from "./state.js";
5
+ export { STATE_ATTR_NAMES, details, mergeProps, renderElement, stateAttrs, toRenderFn };
@@ -0,0 +1,16 @@
1
+ //#region src/contracts/merge-props.d.ts
2
+ type Props = Record<string, unknown>;
3
+ /**
4
+ * Merges prop objects from left ("ours") to right ("theirs"):
5
+ * - `className` is concatenated, ours first, without repeating a class;
6
+ * - `style` is shallow-merged, theirs winning;
7
+ * - `on*` handlers are chained theirs-first, and ours skip when the event was `defaultPrevented`;
8
+ * - refs are merged into one callback ref;
9
+ * - any other key: the right-most defined value wins, and `undefined` never overrides.
10
+ *
11
+ * A function is created only when both sides supply one, so a server component that merges a
12
+ * consumer element never synthesises a handler or ref (functions cannot cross the RSC boundary).
13
+ */
14
+ export declare function mergeProps(...sources: ReadonlyArray<Props | undefined>): Props;
15
+ //#endregion
16
+ export {};
@@ -0,0 +1,76 @@
1
+ import { cx } from "../_internal/cx.js";
2
+ //#region src/contracts/merge-props.ts
3
+ /**
4
+ * Merges prop objects from left ("ours") to right ("theirs"):
5
+ * - `className` is concatenated, ours first, without repeating a class;
6
+ * - `style` is shallow-merged, theirs winning;
7
+ * - `on*` handlers are chained theirs-first, and ours skip when the event was `defaultPrevented`;
8
+ * - refs are merged into one callback ref;
9
+ * - any other key: the right-most defined value wins, and `undefined` never overrides.
10
+ *
11
+ * A function is created only when both sides supply one, so a server component that merges a
12
+ * consumer element never synthesises a handler or ref (functions cannot cross the RSC boundary).
13
+ */
14
+ function mergeProps(...sources) {
15
+ const out = {};
16
+ for (const source of sources) {
17
+ if (source === void 0) continue;
18
+ for (const key of Object.keys(source)) {
19
+ const theirs = source[key];
20
+ if (theirs === void 0) continue;
21
+ const ours = out[key];
22
+ out[key] = ours === void 0 ? theirs : mergeValue(key, ours, theirs);
23
+ }
24
+ }
25
+ return out;
26
+ }
27
+ function mergeValue(key, ours, theirs) {
28
+ if (key === "className" && typeof ours === "string" && typeof theirs === "string") return cx(ours, theirs);
29
+ if (key === "style" && isObject(ours) && isObject(theirs)) return {
30
+ ...ours,
31
+ ...theirs
32
+ };
33
+ if (key === "ref" && isRef(ours) && isRef(theirs)) return mergeRefs(ours, theirs);
34
+ if (/^on[A-Z]/.test(key) && isFunction(ours) && isFunction(theirs)) return chain(theirs, ours);
35
+ return theirs;
36
+ }
37
+ function chain(theirs, ours) {
38
+ return (...args) => {
39
+ theirs(...args);
40
+ if (!isPrevented(args[0])) ours(...args);
41
+ };
42
+ }
43
+ function isPrevented(event) {
44
+ return isObject(event) && event["defaultPrevented"] === true;
45
+ }
46
+ function isObject(value) {
47
+ return typeof value === "object" && value !== null;
48
+ }
49
+ function isFunction(value) {
50
+ return typeof value === "function";
51
+ }
52
+ function isRefObject(value) {
53
+ return isObject(value) && "current" in value;
54
+ }
55
+ function isRef(value) {
56
+ return isFunction(value) || isRefObject(value);
57
+ }
58
+ /** Assigns `node` and returns the ref's React 19 cleanup, if it returned one. */
59
+ function assignRef(ref, node) {
60
+ if (isFunction(ref)) {
61
+ const cleanup = ref(node);
62
+ return isFunction(cleanup) ? cleanup : void 0;
63
+ }
64
+ ref.current = node;
65
+ }
66
+ /** One callback ref for both; honours React 19 ref cleanups. */
67
+ function mergeRefs(a, b) {
68
+ return (node) => {
69
+ const cleanups = [assignRef(a, node), assignRef(b, node)];
70
+ return () => {
71
+ cleanups.forEach((cleanup, i) => cleanup ? cleanup() : assignRef(i === 0 ? a : b, null));
72
+ };
73
+ };
74
+ }
75
+ //#endregion
76
+ export { mergeProps };
@@ -0,0 +1,17 @@
1
+ import { ReactElement } from "react";
2
+ //#region src/contracts/render.d.ts
3
+ /**
4
+ * Composition without `asChild` or a polymorphic `as`:
5
+ * - element form: `render={<Link href="/orders" />}`, serializable from Server Components;
6
+ * - function form: `render={(props, state) => <a {...props} />}`, client code only.
7
+ */
8
+ export type RenderProp<S> = ReactElement | ((props: Record<string, unknown>, state: S) => ReactElement);
9
+ /**
10
+ * Renders `tag` with `props`, or the consumer's element/function with `props` merged in (ours first).
11
+ * Element form: `mergeProps` semantics (the element's props win), except that the part's own
12
+ * `PART_OWNED` attributes win over the element's.
13
+ */
14
+ export declare function renderElement<S>(tag: string, render: RenderProp<S> | undefined, state: S, props: Record<string, unknown>): ReactElement;
15
+ /** Normalises any render prop to the function form that engine adapters receive. */
16
+ export declare function toRenderFn<S>(render: RenderProp<S> | undefined, tag: string): (props: Record<string, unknown>, state: S) => ReactElement;
17
+ //#endregion
@@ -0,0 +1,43 @@
1
+ import { mergeProps } from "./merge-props.js";
2
+ import { cloneElement, createElement, isValidElement } from "react";
3
+ //#region src/contracts/render.ts
4
+ /**
5
+ * The presentational attributes (the `presentational` group of contracts/vocabulary.json). They
6
+ * describe the part, so when a part renders through an element, the part's values win. That element
7
+ * may be a server Button that RSC has already rendered to a host `<button data-slot="button">`.
8
+ */
9
+ const PART_OWNED = [
10
+ "data-slot",
11
+ "data-variant",
12
+ "data-size",
13
+ "data-tone",
14
+ "data-full-width",
15
+ "data-padding",
16
+ "data-elevation",
17
+ "data-shape",
18
+ "data-gap",
19
+ "data-span",
20
+ "data-span-sm",
21
+ "data-span-lg",
22
+ "data-ratio"
23
+ ];
24
+ /**
25
+ * Renders `tag` with `props`, or the consumer's element/function with `props` merged in (ours first).
26
+ * Element form: `mergeProps` semantics (the element's props win), except that the part's own
27
+ * `PART_OWNED` attributes win over the element's.
28
+ */
29
+ function renderElement(tag, render, state, props) {
30
+ if (typeof render === "function") return render(props, state);
31
+ if (isValidElement(render)) {
32
+ const merged = mergeProps(props, render.props);
33
+ for (const name of PART_OWNED) if (props[name] !== void 0) merged[name] = props[name];
34
+ return cloneElement(render, merged);
35
+ }
36
+ return createElement(tag, props);
37
+ }
38
+ /** Normalises any render prop to the function form that engine adapters receive. */
39
+ function toRenderFn(render, tag) {
40
+ return (props, state) => renderElement(tag, render, state, props);
41
+ }
42
+ //#endregion
43
+ export { PART_OWNED, renderElement, toRenderFn };
@@ -0,0 +1,42 @@
1
+ //#region src/contracts/state.d.ts
2
+ /** Value sets of the valued attributes, in contracts/vocabulary.json order (checked by the test). */
3
+ export declare const SIDES: readonly ["top", "right", "bottom", "left"];
4
+ export declare const ALIGNS: readonly ["start", "center", "end"];
5
+ export declare const ORIENTATIONS: readonly ["horizontal", "vertical"];
6
+ export declare const MIRRORS: readonly ["rtl"];
7
+ export type Side = (typeof SIDES)[number];
8
+ export type Align = (typeof ALIGNS)[number];
9
+ export type Orientation = (typeof ORIENTATIONS)[number];
10
+ /** Engine-independent state, as adapters derive it from the engine's render state. */
11
+ export interface StateInput {
12
+ open?: boolean | undefined;
13
+ entering?: boolean | undefined;
14
+ exiting?: boolean | undefined;
15
+ side?: Side | undefined;
16
+ align?: Align | undefined;
17
+ nestedOpen?: boolean | undefined;
18
+ highlighted?: boolean | undefined;
19
+ selected?: boolean | undefined;
20
+ checked?: boolean | undefined;
21
+ indeterminate?: boolean | undefined;
22
+ pressed?: boolean | undefined;
23
+ focusVisible?: boolean | undefined;
24
+ disabled?: boolean | undefined;
25
+ readOnly?: boolean | undefined;
26
+ required?: boolean | undefined;
27
+ invalid?: boolean | undefined;
28
+ placeholder?: boolean | undefined;
29
+ orientation?: Orientation | undefined;
30
+ loading?: boolean | undefined;
31
+ pending?: boolean | undefined;
32
+ empty?: boolean | undefined;
33
+ error?: boolean | undefined;
34
+ mirror?: (typeof MIRRORS)[number] | undefined;
35
+ }
36
+ /** `data-*` attributes keyed by name; presence attributes carry `""`. */
37
+ export type StateAttrs = Record<`data-${string}`, string>;
38
+ /** Every attribute name `stateAttrs()` can emit. */
39
+ export declare const STATE_ATTR_NAMES: readonly string[];
40
+ /** Maps state to vocabulary attributes. False and absent states emit nothing. */
41
+ export declare function stateAttrs(state: StateInput): StateAttrs;
42
+ //#endregion
@@ -0,0 +1,42 @@
1
+ //#region src/contracts/state.ts
2
+ const PRESENCE = [
3
+ ["open", "data-open"],
4
+ ["entering", "data-entering"],
5
+ ["exiting", "data-exiting"],
6
+ ["nestedOpen", "data-nested-open"],
7
+ ["highlighted", "data-highlighted"],
8
+ ["selected", "data-selected"],
9
+ ["checked", "data-checked"],
10
+ ["indeterminate", "data-indeterminate"],
11
+ ["pressed", "data-pressed"],
12
+ ["focusVisible", "data-focus-visible"],
13
+ ["disabled", "data-disabled"],
14
+ ["readOnly", "data-readonly"],
15
+ ["required", "data-required"],
16
+ ["invalid", "data-invalid"],
17
+ ["placeholder", "data-placeholder"],
18
+ ["loading", "data-loading"],
19
+ ["pending", "data-pending"],
20
+ ["empty", "data-empty"],
21
+ ["error", "data-error"]
22
+ ];
23
+ const VALUED = [
24
+ ["side", "data-side"],
25
+ ["align", "data-align"],
26
+ ["orientation", "data-orientation"],
27
+ ["mirror", "data-mirror"]
28
+ ];
29
+ /** Every attribute name `stateAttrs()` can emit. */
30
+ const STATE_ATTR_NAMES = [...PRESENCE, ...VALUED].map(([, name]) => name);
31
+ /** Maps state to vocabulary attributes. False and absent states emit nothing. */
32
+ function stateAttrs(state) {
33
+ const out = {};
34
+ for (const [key, name] of PRESENCE) if (state[key] === true) out[name] = "";
35
+ for (const [key, name] of VALUED) {
36
+ const value = state[key];
37
+ if (value !== void 0) out[name] = value;
38
+ }
39
+ return out;
40
+ }
41
+ //#endregion
42
+ export { STATE_ATTR_NAMES, stateAttrs };
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-alert{--_nz-alert-bg:var(--nz-bg-info-subtle);--_nz-alert-icon-fg:var(--nz-icon-info);align-items:flex-start;gap:var(--nz-alert-gap,var(--nz-space-3));padding-block:var(--nz-alert-padding-block,var(--nz-space-3));padding-inline:var(--nz-alert-padding-inline,var(--nz-space-4));border-radius:var(--nz-alert-radius,var(--nz-radius-lg));background:var(--nz-alert-bg,var(--_nz-alert-bg));color:var(--nz-text-primary);display:flex}.nz-alert-icon{inline-size:var(--nz-size-icon-md);block-size:var(--nz-size-icon-md);color:var(--nz-alert-icon-fg,var(--_nz-alert-icon-fg));font-size:var(--nz-size-icon-md);flex:none;display:inline-flex;&>svg{block-size:100%;inline-size:100%}}.nz-alert-content{gap:var(--nz-space-0-5);flex-direction:column;flex:1;min-inline-size:0;display:flex}.nz-alert-title{font:var(--nz-alert-title-font,var(--nz-font-label-m-strong))}.nz-alert-description{color:var(--nz-text-secondary);font:var(--nz-alert-description-font,var(--nz-font-body-m))}.nz-alert-action{gap:var(--nz-space-2);flex-wrap:wrap;margin-block-start:var(--nz-space-2);display:flex}.nz-alert-dismiss{flex:none}.nz-alert>.nz-icon-button.nz-alert-dismiss{--_nz-icon-button-fg:var(--nz-alert-dismiss-fg,var(--nz-icon-secondary));margin-block:calc((var(--nz-size-icon-md) - var(--nz-size-control-sm)) / 2);margin-inline:calc((var(--nz-size-icon-sm) - var(--nz-size-control-sm)) / 2)}.nz-alert[data-tone=success]{--_nz-alert-bg:var(--nz-bg-success-subtle);--_nz-alert-icon-fg:var(--nz-icon-success)}.nz-alert[data-tone=warning]{--_nz-alert-bg:var(--nz-bg-warning-subtle);--_nz-alert-icon-fg:var(--nz-icon-warning)}.nz-alert[data-tone=critical]{--_nz-alert-bg:var(--nz-bg-critical-subtle);--_nz-alert-icon-fg:var(--nz-icon-critical)}@media (forced-colors:active){.nz-alert{outline-offset:-1px;outline:1px solid canvastext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-app-shell{background:var(--nz-app-shell-bg,var(--nz-bg-canvas));min-block-size:100dvh;color:var(--nz-text-primary);grid-template-columns:auto minmax(0,1fr);display:grid}.nz-app-shell-skip{z-index:var(--nz-z-overlay);padding:var(--nz-space-2) var(--nz-space-3);border-radius:var(--nz-radius-md);background:var(--nz-bg-inverse);color:var(--nz-text-inverse);font:var(--nz-font-label-m-strong);letter-spacing:var(--nz-tracking-label-m-strong);translate:0 calc(-100% - var(--nz-space-4));text-decoration:none;position:fixed;inset-block-start:var(--nz-space-2);inset-inline-start:var(--nz-space-2);&:focus-visible{translate:none}}.nz-app-shell-sidebar{grid-column:1}.nz-app-shell-frame{flex-direction:column;grid-column:2;min-inline-size:0;display:flex}.nz-app-shell-main{box-sizing:border-box;inline-size:100%;max-inline-size:calc(var(--nz-layout-content-max) + 2 * var(--nz-grid-margin));padding:var(--nz-app-shell-main-padding,var(--nz-section-gap) var(--nz-grid-margin));outline:none;flex:auto;margin-inline:auto;padding-block-end:calc(var(--nz-section-gap) + var(--nz-layout-bottom-inset,0px))}.nz-app-shell-sidebar,.nz-app-shell-top-bar{display:none}.nz-app-shell-tab-bar{z-index:var(--nz-z-chrome);position:fixed;inset-block-end:0;inset-inline:0}@media (width>=40rem){.nz-app-shell-sidebar,.nz-app-shell-top-bar{display:block}.nz-app-shell-mobile-top-bar,.nz-app-shell-tab-bar{display:none}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-avatar{--_nz-avatar-size:var(--nz-space-8);--_nz-avatar-font:var(--nz-font-label-s);--_nz-avatar-tracking:var(--nz-tracking-label-s);box-sizing:border-box;inline-size:var(--nz-avatar-size,var(--_nz-avatar-size));block-size:var(--nz-avatar-size,var(--_nz-avatar-size));border-radius:var(--nz-avatar-radius,var(--nz-radius-full));background:var(--nz-avatar-bg,var(--nz-bg-brand-muted));color:var(--nz-avatar-fg,var(--nz-text-brand));font:var(--nz-avatar-font,var(--_nz-avatar-font));letter-spacing:var(--_nz-avatar-tracking);vertical-align:middle;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative;overflow:hidden}.nz-avatar[data-size=sm]{--_nz-avatar-size:var(--nz-space-6)}.nz-avatar[data-size=lg]{--_nz-avatar-size:var(--nz-space-10);--_nz-avatar-font:var(--nz-font-label-m);--_nz-avatar-tracking:var(--nz-tracking-label-m)}.nz-avatar[data-size=xl]{--_nz-avatar-size:calc(var(--nz-space-12) + var(--nz-space-2));--_nz-avatar-font:var(--nz-font-label-l);--_nz-avatar-tracking:var(--nz-tracking-label-l)}.nz-avatar-initials{white-space:nowrap}.nz-avatar-image{object-fit:cover;color:#0000;block-size:100%;inline-size:100%;display:block;position:absolute;inset:0}.nz-avatar-group{--_nz-avatar-group-size:var(--nz-space-8);--_nz-avatar-group-font:var(--nz-font-label-s);vertical-align:middle;align-items:center;display:inline-flex;&>.nz-avatar,&>.nz-avatar-group-more{box-shadow:0 0 0 var(--nz-border-width-focus) var(--nz-avatar-group-ring,var(--nz-bg-surface))}&>:not(:first-child){margin-inline-start:calc(-1 * var(--nz-space-2))}}.nz-avatar-group[data-size=sm]{--_nz-avatar-group-size:var(--nz-space-6)}.nz-avatar-group[data-size=lg]{--_nz-avatar-group-size:var(--nz-space-10);--_nz-avatar-group-font:var(--nz-font-label-m)}.nz-avatar-group[data-size=xl]{--_nz-avatar-group-size:calc(var(--nz-space-12) + var(--nz-space-2));--_nz-avatar-group-font:var(--nz-font-label-l)}.nz-avatar-group-more{box-sizing:border-box;inline-size:var(--_nz-avatar-group-size);block-size:var(--_nz-avatar-group-size);border-radius:var(--nz-radius-full);background:var(--nz-avatar-group-more-bg,var(--nz-bg-muted));color:var(--nz-avatar-group-more-fg,var(--nz-text-secondary));font:var(--_nz-avatar-group-font);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;justify-content:center;align-items:center;display:inline-flex}@media (forced-colors:active){.nz-avatar,.nz-avatar-group-more{outline-offset:-1px;outline:1px solid canvastext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-badge{--_nz-badge-bg:var(--nz-bg-muted);--_nz-badge-fg:var(--nz-text-secondary);--_nz-badge-dot-bg:var(--nz-icon-secondary);align-items:center;gap:var(--nz-badge-gap,var(--nz-space-1-5));padding-block:var(--nz-space-0-5);padding-inline:var(--nz-badge-padding-inline,var(--nz-space-2));border-radius:var(--nz-badge-radius,var(--nz-radius-full));background:var(--nz-badge-bg,var(--_nz-badge-bg));color:var(--nz-badge-fg,var(--_nz-badge-fg));font:var(--nz-badge-font,var(--nz-font-label-m));white-space:nowrap;display:inline-flex}.nz-badge-dot{inline-size:var(--nz-space-1-5);block-size:var(--nz-space-1-5);border-radius:var(--nz-radius-full);background:var(--nz-badge-dot-bg,var(--_nz-badge-dot-bg));flex:none}.nz-badge[data-tone=success]{--_nz-badge-bg:var(--nz-bg-success-subtle);--_nz-badge-fg:var(--nz-text-success);--_nz-badge-dot-bg:var(--nz-icon-success)}.nz-badge[data-tone=warning]{--_nz-badge-bg:var(--nz-bg-warning-subtle);--_nz-badge-fg:var(--nz-text-warning);--_nz-badge-dot-bg:var(--nz-icon-warning)}.nz-badge[data-tone=critical]{--_nz-badge-bg:var(--nz-bg-critical-subtle);--_nz-badge-fg:var(--nz-text-critical);--_nz-badge-dot-bg:var(--nz-icon-critical)}.nz-badge[data-tone=info]{--_nz-badge-bg:var(--nz-bg-info-subtle);--_nz-badge-fg:var(--nz-text-info);--_nz-badge-dot-bg:var(--nz-icon-info)}.nz-badge[data-tone=brand]{--_nz-badge-bg:var(--nz-bg-brand);--_nz-badge-fg:var(--nz-text-on-brand);--_nz-badge-dot-bg:var(--nz-text-on-brand)}@media (forced-colors:active){.nz-badge{outline-offset:-1px;outline:1px solid canvastext}.nz-badge-dot{forced-color-adjust:none;background:canvastext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-banner{--_nz-banner-bg:var(--nz-bg-brand-subtle);--_nz-banner-icon-fg:var(--nz-icon-brand);align-items:center;gap:var(--nz-banner-gap,var(--nz-space-5));padding-block:var(--nz-banner-padding-block,var(--nz-space-4));padding-inline:var(--nz-banner-padding-inline,var(--nz-space-6));border-radius:var(--nz-banner-radius,var(--nz-radius-xl));background:var(--nz-banner-bg,var(--_nz-banner-bg));color:var(--nz-text-primary);flex-wrap:wrap;display:flex}.nz-banner[data-tone=warning]{--_nz-banner-bg:var(--nz-bg-warning-subtle);--_nz-banner-icon-fg:var(--nz-icon-warning)}.nz-banner-icon{color:var(--nz-banner-icon-fg,var(--_nz-banner-icon-fg));font-size:var(--nz-size-icon-lg);flex:none;display:inline-flex;&>svg{block-size:1em;inline-size:1em}}.nz-banner-media{flex:none;block-size:4.5rem;inline-size:4.5rem;display:inline-flex;overflow:hidden;&>:is(img,svg,picture,video){object-fit:contain;block-size:100%;inline-size:100%}}.nz-banner-content{gap:var(--nz-space-0-5);flex-direction:column;flex:16rem;min-inline-size:0;display:flex}.nz-banner-title{font:var(--nz-banner-title-font,var(--nz-font-heading-h4));letter-spacing:var(--nz-tracking-heading-h4)}.nz-banner-description{color:var(--nz-text-secondary);font:var(--nz-banner-description-font,var(--nz-font-body-m));letter-spacing:var(--nz-tracking-body-m)}.nz-banner-action{gap:var(--nz-space-2);flex-wrap:wrap;flex:none;display:flex}.nz-banner-dismiss{flex:none;margin-inline-start:auto}.nz-banner>.nz-icon-button.nz-banner-dismiss{--_nz-icon-button-fg:var(--nz-banner-dismiss-fg,var(--nz-icon-secondary))}@media (forced-colors:active){.nz-banner{outline-offset:-1px;outline:1px solid canvastext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.base{:where(.nz-alert-dismiss,.nz-app-shell-skip,.nz-banner-dismiss,.nz-breadcrumb-link,.nz-button,.nz-checkbox-input,.nz-dialog-close,.nz-dialog-trigger,.nz-drawer-close,.nz-drawer-trigger,.nz-form-summary,.nz-form-summary-link,.nz-icon-button,.nz-menu-trigger,.nz-mobile-tab-bar-link,.nz-mobile-tab-bar-more-trigger,.nz-native-select-trigger,.nz-nav-item,.nz-pagination-next,.nz-pagination-page,.nz-pagination-previous,.nz-password-input-toggle,.nz-popover-close,.nz-popover-trigger,.nz-radio-input,.nz-ranked-list-action,.nz-select-trigger,.nz-sidebar-item,.nz-switch-input,.nz-tab-nav-link,.nz-table-row-link,.nz-table-sort-button,.nz-tabs-tab,.nz-textarea,.nz-toast,.nz-toast-action,.nz-toast-close,.nz-toast-region,.nz-tooltip-trigger):is(:focus-visible,[data-focus-visible]){outline:var(--nz-border-width-focus) solid var(--nz-border-focus);outline-offset:2px}:where(.nz-menu-checkbox-item,.nz-menu-item,.nz-menu-radio-item,.nz-select-item):focus-visible{outline:none}:where(.nz-menu-checkbox-item,.nz-menu-item,.nz-menu-radio-item,.nz-select-item)[data-focus-visible],:where(.nz-chip,.nz-choice-card,.nz-file-upload-dropzone,.nz-segmented-control-item):is(:has(>input:focus-visible),[data-focus-visible]),:where(.nz-input,.nz-password-input,.nz-search-field):focus-within{outline:var(--nz-border-width-focus) solid var(--nz-border-focus);outline-offset:2px}[data-focus-inset]:is(:focus-visible,[data-focus-visible],:focus-within),[data-focus-inset]:has(>input:focus-visible){outline-offset:-2px}:where(.nz-alert-dismiss,.nz-app-shell-skip,.nz-banner-dismiss,.nz-breadcrumb-link,.nz-button,.nz-checkbox-input,.nz-chip,.nz-choice-card,.nz-dialog-close,.nz-dialog-trigger,.nz-drawer-close,.nz-drawer-trigger,.nz-file-upload-dropzone,.nz-form-summary,.nz-form-summary-link,.nz-icon-button,.nz-menu-checkbox-item,.nz-menu-item,.nz-menu-radio-item,.nz-menu-trigger,.nz-mobile-tab-bar-link,.nz-mobile-tab-bar-more-trigger,.nz-native-select-trigger,.nz-nav-item,.nz-pagination-next,.nz-pagination-page,.nz-pagination-previous,.nz-password-input-toggle,.nz-popover-close,.nz-popover-trigger,.nz-radio-input,.nz-ranked-list-action,.nz-segmented-control-item,.nz-select-item,.nz-select-trigger,.nz-sidebar-item,.nz-switch-input,.nz-tab-nav-link,.nz-table-row-link,.nz-table-sort-button,.nz-tabs-tab,.nz-textarea,.nz-toast,.nz-toast-action,.nz-toast-close,.nz-toast-region,.nz-tooltip-trigger){touch-action:pan-x pan-y pinch-zoom}.nz-hit-target{position:relative}@media (pointer:coarse){.nz-hit-target:not([data-hit-inset]):after{content:"";inset:min(0px, calc((100% - var(--nz-size-touch-min)) / 2));position:absolute}}[data-nz-touch-targets=always] .nz-hit-target:not([data-hit-inset]):after{content:"";inset:min(0px, calc((100% - var(--nz-size-touch-min)) / 2));position:absolute}:dir(rtl) [data-mirror=rtl]{scale:-1 1}html{scroll-padding-block:var(--nz-layout-top-inset,0px) calc(var(--nz-layout-bottom-inset,0px) + var(--nz-toast-inset,0px))}@media (forced-colors:active){:where(.nz-checkbox-input,.nz-chip,.nz-choice-card,.nz-choice-card-input,.nz-dialog-popup,.nz-drawer-popup,.nz-menu-popup,.nz-popover-popup,.nz-radio-input,.nz-select-popup,.nz-switch-input,.nz-tooltip-popup){border:1px solid canvastext}:where(.nz-switch-thumb){forced-color-adjust:none;background:canvastext}:where(.nz-meter-track)::-moz-meter-bar{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-progress-bar-track)::-moz-progress-bar{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-meter-track)::-webkit-meter-even-less-good-value{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-meter-track)::-webkit-meter-optimum-value{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-meter-track)::-webkit-meter-suboptimum-value{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-progress-bar-track)::-webkit-progress-value{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-checkbox-input,.nz-choice-card-input,.nz-radio-input,.nz-switch-input):checked{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-chip,.nz-choice-card,.nz-segmented-control-item):has(>input:checked){outline:2px solid highlight}:where(.nz-checkbox-input):indeterminate{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-nav-item,.nz-pagination-page)[aria-current=page]{color:highlighttext;forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-tab-nav-link)[aria-current=page]:before{forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-icon-button)[aria-pressed=true],:where(.nz-menu-checkbox-item,.nz-menu-radio-item)[data-checked]{color:highlighttext;forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-file-upload-dropzone)[data-drag-over]{outline:2px solid highlight}:where(.nz-select-item)[data-selected]{color:highlighttext;forced-color-adjust:none;background:highlight;outline-color:canvastext}:where(.nz-tabs-tab)[data-selected]:before{forced-color-adjust:none;background:highlight;outline-color:canvastext}}}@layer nz.utilities{.nz-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-breadcrumb-list{align-items:center;gap:0 var(--nz-breadcrumb-gap,var(--nz-space-1-5));font:var(--nz-font-label-m);letter-spacing:var(--nz-tracking-label-m);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.nz-breadcrumb-item{align-items:center;gap:var(--nz-breadcrumb-gap,var(--nz-space-1-5));min-inline-size:0;display:inline-flex}.nz-breadcrumb-separator{inline-size:var(--nz-size-icon-sm);block-size:var(--nz-size-icon-sm);color:var(--nz-breadcrumb-separator-fg,var(--nz-icon-secondary));font-size:var(--nz-size-icon-sm);flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex;&>svg{block-size:100%;inline-size:100%}}.nz-breadcrumb-item:first-child>.nz-breadcrumb-separator{display:none}.nz-breadcrumb-link,.nz-breadcrumb-current{min-block-size:var(--nz-space-6);overflow-wrap:anywhere;align-items:center;display:inline-flex}.nz-breadcrumb-link{border-radius:var(--nz-radius-xs);color:var(--nz-breadcrumb-link-fg,var(--nz-text-secondary));transition:color var(--nz-duration-fast) var(--nz-easing-standard);text-decoration:none;@media (hover:hover){&:hover{color:var(--nz-breadcrumb-link-fg-hover,var(--nz-text-primary));text-underline-offset:var(--nz-space-1);text-decoration:underline}}}.nz-breadcrumb-current{color:var(--nz-breadcrumb-current-fg,var(--nz-text-primary));font-weight:var(--nz-font-label-m-strong-font-weight);letter-spacing:var(--nz-tracking-label-m-strong)}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-button{--_nz-button-bg:var(--nz-bg-surface);--_nz-button-bg-hover:var(--nz-bg-hover);--_nz-button-bg-pressed:var(--nz-bg-pressed);--_nz-button-fg:var(--nz-text-primary);--_nz-button-border:var(--nz-border-default);--_nz-button-border-hover:var(--nz-border-strong);--_nz-button-shadow:none;--_nz-button-height:var(--nz-size-control-md);--_nz-button-padding-inline:var(--nz-space-4);--_nz-button-gap:var(--nz-space-2);--_nz-button-radius:var(--nz-radius-md);--_nz-button-font:var(--nz-font-label-m);--_nz-button-icon-size:var(--nz-size-icon-sm);box-sizing:border-box;justify-content:center;align-items:center;gap:var(--nz-button-gap,var(--_nz-button-gap));block-size:var(--nz-button-height,var(--_nz-button-height));padding-inline:var(--nz-button-padding-inline,var(--_nz-button-padding-inline));border:var(--nz-border-width-default) solid var(--nz-button-border,var(--_nz-button-border));border-radius:var(--nz-button-radius,var(--_nz-button-radius));background:var(--nz-button-bg,var(--_nz-button-bg));color:var(--nz-button-fg,var(--_nz-button-fg));box-shadow:var(--nz-button-shadow,var(--_nz-button-shadow));font:var(--nz-button-font,var(--_nz-button-font));cursor:pointer;transition:background-color var(--nz-duration-fast) var(--nz-easing-standard), border-color var(--nz-duration-fast) var(--nz-easing-standard), scale var(--nz-duration-instant) var(--nz-easing-standard);text-decoration:none;display:inline-flex;@media (hover:hover){&:hover:not(:disabled,[data-disabled],[aria-disabled=true]){background:var(--nz-button-bg-hover,var(--_nz-button-bg-hover));border-color:var(--nz-button-border-hover,var(--_nz-button-border-hover))}}&:active:not(:disabled,[data-disabled],[aria-disabled=true]){background:var(--nz-button-bg-pressed,var(--_nz-button-bg-pressed));border-color:var(--nz-button-border-hover,var(--_nz-button-border-hover));scale:var(--nz-scale-press)}&:focus-visible{box-shadow:var(--nz-button-shadow,var(--_nz-button-shadow)), 0 0 0 calc(var(--nz-border-width-focus) + 4px) var(--nz-focus-halo)}&:is(:disabled,[data-disabled]){background:var(--nz-button-bg-disabled,var(--nz-bg-disabled));color:var(--nz-button-fg-disabled,var(--nz-text-disabled));border-color:var(--nz-border-subtle);box-shadow:none;cursor:not-allowed}&[data-pending]{cursor:progress}&[data-full-width]{inline-size:100%}}.nz-button[data-variant=primary]{--_nz-button-bg:var(--nz-bg-brand);--_nz-button-bg-hover:var(--nz-bg-brand-hover);--_nz-button-bg-pressed:var(--nz-bg-brand-pressed);--_nz-button-fg:var(--nz-text-on-brand);--_nz-button-border:transparent;--_nz-button-border-hover:transparent;--_nz-button-shadow:var(--nz-elevation-button)}.nz-button[data-variant=tertiary]{--_nz-button-bg:transparent;--_nz-button-border:transparent;--_nz-button-border-hover:transparent}.nz-button[data-variant=critical]{--_nz-button-bg:var(--nz-bg-critical);--_nz-button-bg-hover:var(--nz-bg-critical-hover);--_nz-button-bg-pressed:var(--nz-bg-critical-hover);--_nz-button-fg:var(--nz-text-on-critical);--_nz-button-border:transparent;--_nz-button-border-hover:transparent}.nz-button[data-variant=accent]{--_nz-button-bg:var(--nz-bg-accent);--_nz-button-bg-hover:var(--nz-bg-accent-hover);--_nz-button-bg-pressed:var(--nz-bg-accent-hover);--_nz-button-fg:var(--nz-text-on-accent);--_nz-button-border:transparent;--_nz-button-border-hover:transparent}.nz-button[data-size=sm]{--_nz-button-height:var(--nz-size-control-sm);--_nz-button-padding-inline:var(--nz-space-3);--_nz-button-gap:var(--nz-space-1-5);--_nz-button-radius:var(--nz-radius-sm)}.nz-button[data-size=lg]{--_nz-button-height:var(--nz-size-control-lg);--_nz-button-padding-inline:var(--nz-space-5);--_nz-button-font:var(--nz-font-label-l);--_nz-button-icon-size:var(--nz-size-icon-md)}.nz-button-icon{inline-size:var(--_nz-button-icon-size);block-size:var(--_nz-button-icon-size);font-size:var(--_nz-button-icon-size);display:inline-flex}.nz-button[data-pending] .nz-glyph-spinner{animation:nz-button-spin var(--nz-duration-spin) linear infinite}.nz-button-pending-label{white-space:nowrap;text-overflow:ellipsis;text-align:center;grid-area:1/2;display:none;overflow:hidden}.nz-button-pending-label+.nz-button-label{grid-area:1/2}@media (prefers-reduced-motion:reduce){.nz-button[data-pending]{grid-auto-flow:column;align-content:center;display:inline-grid}.nz-button-pending-label{display:block}.nz-button-pending-label+.nz-button-label{opacity:0}}[data-nz-motion=reduce] .nz-button[data-pending]{grid-auto-flow:column;align-content:center;display:inline-grid}[data-nz-motion=reduce] .nz-button-pending-label{display:block}[data-nz-motion=reduce] .nz-button-pending-label+.nz-button-label{opacity:0}@keyframes nz-button-spin{to{rotate:1turn}}@media (forced-colors:active){.nz-button{border-color:buttontext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-card{--_nz-card-bg:var(--nz-bg-surface);--_nz-card-border:var(--nz-border-subtle);--_nz-card-padding:var(--nz-space-6);--_nz-card-shadow:none;--_nz-card-pill:initial;gap:var(--nz-card-gap,var(--nz-space-5));padding:var(--nz-card-padding,var(--_nz-card-padding));border:var(--nz-border-width-default) solid var(--nz-card-border,var(--_nz-card-border));border-radius:var(--nz-card-radius,var(--nz-radius-xl));background:var(--nz-card-bg,var(--_nz-card-bg));--nz-surface:var(--nz-card-bg,var(--_nz-card-bg));box-shadow:var(--nz-card-shadow,var(--_nz-card-shadow));color:var(--nz-text-primary);flex-direction:column;display:flex}.nz-card[data-tone=subtle]{--_nz-card-bg:var(--nz-bg-subtle);--_nz-card-border:transparent}.nz-card[data-tone=brand]{--_nz-card-bg:var(--nz-bg-brand-subtle);--_nz-card-border:transparent;--_nz-card-pill:var(--nz-bg-surface)}.nz-card[data-tone=accent]{--_nz-card-bg:var(--nz-bg-accent-subtle);--_nz-card-border:transparent;--_nz-card-pill:var(--nz-bg-surface)}.nz-card:is([data-tone=brand],[data-tone=accent]) .nz-delta{--_nz-delta-fill:var(--_nz-card-pill)}.nz-card[data-padding=sm]{--_nz-card-padding:var(--nz-space-5)}.nz-card[data-elevation="1"]{--_nz-card-shadow:var(--nz-elevation-1)}.nz-card[data-tone=inverse]{--_nz-card-border:transparent}.nz-card-header{align-items:center;gap:var(--nz-space-1) var(--nz-space-3);grid-template-columns:minmax(0,1fr);display:grid}.nz-card-title{font:var(--nz-card-title-font,var(--nz-font-heading-h4));letter-spacing:var(--nz-tracking-heading-h4);grid-column:1;margin:0}.nz-card-description{color:var(--nz-text-secondary);font:var(--nz-font-body-m);grid-column:1;margin:0}.nz-card-action{align-items:center;gap:var(--nz-space-2);color:var(--nz-icon-secondary);grid-area:1/2;display:flex}.nz-card-body{min-inline-size:0}.nz-card-footer{align-items:center;gap:var(--nz-space-3);flex-wrap:wrap;display:flex}@media (forced-colors:active){.nz-card{border-color:canvastext}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-checkbox{--_nz-checkbox-size:1.25rem;justify-content:start;align-items:start;column-gap:var(--nz-checkbox-gap,var(--nz-space-2));color:var(--nz-text-primary);font:var(--nz-font-body-m);cursor:pointer;grid-template-columns:auto auto;display:inline-grid}.nz-checkbox-input,.nz-checkbox-indicator{grid-area:1/1;margin-block-start:calc((1lh - var(--nz-checkbox-size,var(--_nz-checkbox-size))) / 2)}.nz-checkbox-input{--_nz-checkbox-bg:var(--nz-bg-surface);--_nz-checkbox-border:var(--nz-border-control);appearance:none;box-sizing:border-box;inline-size:var(--nz-checkbox-size,var(--_nz-checkbox-size));block-size:var(--nz-checkbox-size,var(--_nz-checkbox-size));border:var(--nz-border-width-default) solid var(--_nz-checkbox-border);border-radius:var(--nz-checkbox-radius,var(--nz-radius-xs));background:var(--_nz-checkbox-bg);font:inherit;cursor:inherit;transition:background-color var(--nz-duration-fast) var(--nz-easing-standard), border-color var(--nz-duration-fast) var(--nz-easing-standard);margin-block-end:0;margin-inline:0}.nz-checkbox-input[aria-invalid=true]:not(:checked,:indeterminate){--_nz-checkbox-border:var(--nz-border-critical)}.nz-checkbox-input:is(:checked,:indeterminate){--_nz-checkbox-bg:var(--nz-checkbox-accent,var(--nz-bg-brand));--_nz-checkbox-border:transparent}@media (hover:hover){.nz-checkbox:hover>.nz-checkbox-input:not(:disabled,:checked,:indeterminate){--_nz-checkbox-border:var(--nz-border-control-hover)}}.nz-checkbox-input:disabled{--_nz-checkbox-bg:var(--nz-bg-disabled);--_nz-checkbox-border:var(--nz-border-subtle)}.nz-checkbox-input:disabled:is(:checked,:indeterminate){--_nz-checkbox-bg:var(--nz-bg-muted);--_nz-checkbox-border:transparent}.nz-checkbox-indicator{inline-size:var(--nz-checkbox-size,var(--_nz-checkbox-size));block-size:var(--nz-checkbox-size,var(--_nz-checkbox-size));color:var(--nz-text-on-brand);pointer-events:none;visibility:hidden;place-items:center;font-size:.875rem;display:grid;&>*{grid-area:1/1}}.nz-checkbox-input:is(:checked,:indeterminate)+.nz-checkbox-indicator{visibility:visible}.nz-checkbox-input:indeterminate+.nz-checkbox-indicator>.nz-glyph-check,.nz-checkbox-input:not(:indeterminate)+.nz-checkbox-indicator>.nz-glyph-minus{display:none}.nz-checkbox-input:disabled+.nz-checkbox-indicator{color:var(--nz-text-disabled)}.nz-checkbox-label{grid-area:1/2}.nz-checkbox:is([data-disabled],:has(>.nz-checkbox-input:disabled)){color:var(--nz-text-disabled);cursor:not-allowed}@media (forced-colors:active){.nz-checkbox-input:is(:checked,:indeterminate){forced-color-adjust:none;background:highlight}.nz-checkbox-input:disabled:is(:checked,:indeterminate){background:graytext}.nz-checkbox-indicator{color:highlighttext;forced-color-adjust:none}}}
@@ -0,0 +1,2 @@
1
+ @layer nz.tokens, nz.themes, nz.reset, nz.base, nz.components, nz.patterns, nz.utilities;
2
+ @layer nz.components{.nz-chip-group{gap:var(--nz-chip-group-gap,var(--nz-space-2));flex-wrap:wrap;display:flex}.nz-chip{--_nz-chip-edge:var(--nz-border-default);--_nz-chip-edge-width:var(--nz-border-width-default);justify-content:center;align-items:center;gap:var(--nz-space-2);box-sizing:border-box;min-inline-size:var(--nz-size-control-lg);block-size:var(--nz-chip-height,var(--nz-size-control-md));padding-inline:var(--nz-space-4);border-radius:var(--nz-chip-radius,var(--nz-radius-full));background:var(--nz-chip-bg,var(--nz-bg-surface));box-shadow:inset 0 0 0 var(--_nz-chip-edge-width) var(--_nz-chip-edge);color:var(--nz-chip-fg,var(--nz-text-primary));font:var(--nz-font-label-m);letter-spacing:var(--nz-tracking-label-m);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--nz-duration-fast) var(--nz-easing-standard), box-shadow var(--nz-duration-fast) var(--nz-easing-standard), color var(--nz-duration-fast) var(--nz-easing-standard);flex:none;display:inline-flex;position:relative;@media (hover:hover){&:hover:not(:has(>input:disabled,>input:checked)){--_nz-chip-edge:var(--nz-border-strong)}}&:has(>input:checked){--_nz-chip-edge:var(--nz-chip-edge-selected,var(--nz-border-brand));--_nz-chip-edge-width:var(--nz-border-width-focus)}&:has(>input:disabled){--_nz-chip-edge:var(--nz-border-subtle);background:var(--nz-bg-disabled);color:var(--nz-text-disabled);cursor:not-allowed}&:has(>input:checked:disabled){--_nz-chip-edge:var(--nz-border-strong)}}.nz-chip:has(>.nz-chip-leading){padding-inline:var(--nz-space-2) var(--nz-space-3)}.nz-chip-group[data-invalid]>.nz-chip:not(:has(>input:checked)){--_nz-chip-edge:var(--nz-border-critical)}.nz-chip-input{opacity:0;appearance:none;cursor:inherit;margin:0;position:absolute;inset:0}.nz-chip-leading{inline-size:var(--nz-chip-leading-size,var(--nz-size-icon-lg));block-size:var(--nz-chip-leading-size,var(--nz-size-icon-lg));border-radius:var(--nz-radius-full);outline:var(--nz-border-width-default) solid var(--nz-border-subtle);outline-offset:calc(var(--nz-border-width-default) * -1);flex:none;display:inline-flex;position:relative;overflow:hidden;&>:not(.nz-chip-strike){object-fit:cover;block-size:100%;inline-size:100%}}.nz-chip-label{text-overflow:ellipsis;overflow:hidden}.nz-chip-strike{border-radius:inherit;background:linear-gradient(to top right, transparent calc(50% - var(--nz-border-width-default)), var(--nz-chip-strike,var(--nz-border-strong)) calc(50% - var(--nz-border-width-default)), var(--nz-chip-strike,var(--nz-border-strong)) calc(50% + var(--nz-border-width-default)), transparent calc(50% + var(--nz-border-width-default)));pointer-events:none;position:absolute;inset:0}.nz-chip:has(.nz-chip-strike):not(:has(>input:disabled)){color:var(--nz-text-secondary)}@media (forced-colors:active){.nz-chip:has(>input:disabled){color:graytext}.nz-chip-strike{forced-color-adjust:none;background:linear-gradient(to top right,#0000 calc(50% - 1px),canvastext calc(50% - 1px) calc(50% + 1px),#0000 calc(50% + 1px))}}}