@igne-agency/react-web-ui 0.0.0-stage → 0.3.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 (702) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +239 -2
  3. package/dist/assets/spinner.js +28 -0
  4. package/dist/base.css +171 -0
  5. package/dist/components/accordion/accordion.css +93 -0
  6. package/dist/components/accordion/accordion.d.ts +46 -0
  7. package/dist/components/accordion/accordion.js +184 -0
  8. package/dist/components/accordion/accordion.module.js +16 -0
  9. package/dist/components/accordion/index.d.ts +1 -0
  10. package/dist/components/accordion/index.js +1 -0
  11. package/dist/components/active-filters/active-filter-describers.d.ts +62 -0
  12. package/dist/components/active-filters/active-filter-describers.js +48 -0
  13. package/dist/components/active-filters/active-filters.d.ts +27 -0
  14. package/dist/components/active-filters/active-filters.js +96 -0
  15. package/dist/components/active-filters/index.d.ts +2 -0
  16. package/dist/components/active-filters/index.js +3 -0
  17. package/dist/components/attachment-tile/attachment-preview.d.ts +33 -0
  18. package/dist/components/attachment-tile/attachment-preview.js +181 -0
  19. package/dist/components/attachment-tile/attachment-tile.css +92 -0
  20. package/dist/components/attachment-tile/attachment-tile.d.ts +51 -0
  21. package/dist/components/attachment-tile/attachment-tile.js +126 -0
  22. package/dist/components/attachment-tile/attachment-tile.module.js +20 -0
  23. package/dist/components/attachment-tile/index.d.ts +2 -0
  24. package/dist/components/attachment-tile/index.js +3 -0
  25. package/dist/components/avatar/avatar.css +48 -0
  26. package/dist/components/avatar/avatar.d.ts +19 -0
  27. package/dist/components/avatar/avatar.js +98 -0
  28. package/dist/components/avatar/avatar.module.js +10 -0
  29. package/dist/components/avatar/index.d.ts +1 -0
  30. package/dist/components/avatar/index.js +1 -0
  31. package/dist/components/avatar-group/avatar-group-context.d.ts +15 -0
  32. package/dist/components/avatar-group/avatar-group-context.js +14 -0
  33. package/dist/components/avatar-group/avatar-group.css +62 -0
  34. package/dist/components/avatar-group/avatar-group.d.ts +96 -0
  35. package/dist/components/avatar-group/avatar-group.js +519 -0
  36. package/dist/components/avatar-group/avatar-group.module.js +20 -0
  37. package/dist/components/avatar-group/index.d.ts +1 -0
  38. package/dist/components/avatar-group/index.js +1 -0
  39. package/dist/components/badge/badge.css +101 -0
  40. package/dist/components/badge/badge.d.ts +17 -0
  41. package/dist/components/badge/badge.js +61 -0
  42. package/dist/components/badge/badge.module.js +4 -0
  43. package/dist/components/badge/index.d.ts +1 -0
  44. package/dist/components/badge/index.js +1 -0
  45. package/dist/components/breadcrumbs/breadcrumbs.css +57 -0
  46. package/dist/components/breadcrumbs/breadcrumbs.d.ts +105 -0
  47. package/dist/components/breadcrumbs/breadcrumbs.js +710 -0
  48. package/dist/components/breadcrumbs/breadcrumbs.module.js +20 -0
  49. package/dist/components/breadcrumbs/index.d.ts +2 -0
  50. package/dist/components/breadcrumbs/index.js +3 -0
  51. package/dist/components/breadcrumbs/use-fold.d.ts +34 -0
  52. package/dist/components/breadcrumbs/use-fold.js +73 -0
  53. package/dist/components/button/button-attributes.d.ts +23 -0
  54. package/dist/components/button/button-attributes.js +17 -0
  55. package/dist/components/button/button.css +111 -0
  56. package/dist/components/button/button.d.ts +47 -0
  57. package/dist/components/button/button.js +210 -0
  58. package/dist/components/button/button.module.js +4 -0
  59. package/dist/components/button/close-button.d.ts +14 -0
  60. package/dist/components/button/close-button.js +30 -0
  61. package/dist/components/button/index.d.ts +1 -0
  62. package/dist/components/button/index.js +1 -0
  63. package/dist/components/checkbox-field/checkbox-field.d.ts +21 -0
  64. package/dist/components/checkbox-field/checkbox-field.js +181 -0
  65. package/dist/components/checkbox-field/checkbox-glyph.d.ts +12 -0
  66. package/dist/components/checkbox-field/checkbox-glyph.js +38 -0
  67. package/dist/components/checkbox-field/checkbox.css +128 -0
  68. package/dist/components/checkbox-field/checkbox.d.ts +14 -0
  69. package/dist/components/checkbox-field/checkbox.js +91 -0
  70. package/dist/components/checkbox-field/checkbox.module.js +14 -0
  71. package/dist/components/checkbox-field/index.d.ts +4 -0
  72. package/dist/components/checkbox-field/index.js +5 -0
  73. package/dist/components/checkbox-field/tsf-checkbox-field.d.ts +14 -0
  74. package/dist/components/checkbox-field/tsf-checkbox-field.js +40 -0
  75. package/dist/components/checkbox-group-field/checkbox-group-field.d.ts +33 -0
  76. package/dist/components/checkbox-group-field/checkbox-group-field.js +128 -0
  77. package/dist/components/checkbox-group-field/checkbox-group.css +31 -0
  78. package/dist/components/checkbox-group-field/checkbox-group.d.ts +38 -0
  79. package/dist/components/checkbox-group-field/checkbox-group.js +102 -0
  80. package/dist/components/checkbox-group-field/checkbox-group.module.js +8 -0
  81. package/dist/components/checkbox-group-field/index.d.ts +3 -0
  82. package/dist/components/checkbox-group-field/index.js +4 -0
  83. package/dist/components/checkbox-group-field/tsf-checkbox-group-field.d.ts +15 -0
  84. package/dist/components/checkbox-group-field/tsf-checkbox-group-field.js +41 -0
  85. package/dist/components/collapsible/collapsible.css +88 -0
  86. package/dist/components/collapsible/collapsible.d.ts +33 -0
  87. package/dist/components/collapsible/collapsible.js +146 -0
  88. package/dist/components/collapsible/collapsible.module.js +14 -0
  89. package/dist/components/collapsible/index.d.ts +1 -0
  90. package/dist/components/collapsible/index.js +1 -0
  91. package/dist/components/combobox-field/combobox-field.d.ts +66 -0
  92. package/dist/components/combobox-field/combobox-field.js +527 -0
  93. package/dist/components/combobox-field/combobox-items.d.ts +80 -0
  94. package/dist/components/combobox-field/combobox-items.js +27 -0
  95. package/dist/components/combobox-field/combobox-popup-body.d.ts +34 -0
  96. package/dist/components/combobox-field/combobox-popup-body.js +142 -0
  97. package/dist/components/combobox-field/combobox.css +535 -0
  98. package/dist/components/combobox-field/combobox.d.ts +105 -0
  99. package/dist/components/combobox-field/combobox.js +642 -0
  100. package/dist/components/combobox-field/combobox.module.js +46 -0
  101. package/dist/components/combobox-field/index.d.ts +7 -0
  102. package/dist/components/combobox-field/index.js +4 -0
  103. package/dist/components/combobox-field/item-lookups.d.ts +18 -0
  104. package/dist/components/combobox-field/item-lookups.js +8 -0
  105. package/dist/components/combobox-field/react-query.d.ts +15 -0
  106. package/dist/components/combobox-field/react-query.js +78 -0
  107. package/dist/components/combobox-field/selection.d.ts +50 -0
  108. package/dist/components/combobox-field/selection.js +38 -0
  109. package/dist/components/combobox-field/tsf-combobox-field.d.ts +33 -0
  110. package/dist/components/combobox-field/tsf-combobox-field.js +88 -0
  111. package/dist/components/combobox-field/value-state-view.css +21 -0
  112. package/dist/components/combobox-field/value-state-view.d.ts +35 -0
  113. package/dist/components/combobox-field/value-state-view.js +107 -0
  114. package/dist/components/combobox-field/value-state-view.module.js +10 -0
  115. package/dist/components/combobox-field/value-state.d.ts +49 -0
  116. package/dist/components/combobox-field/value-state.js +38 -0
  117. package/dist/components/composer/composer-attachments.d.ts +31 -0
  118. package/dist/components/composer/composer-attachments.js +158 -0
  119. package/dist/components/composer/composer-editor.css +104 -0
  120. package/dist/components/composer/composer-editor.d.ts +15 -0
  121. package/dist/components/composer/composer-editor.js +165 -0
  122. package/dist/components/composer/composer-editor.module.js +14 -0
  123. package/dist/components/composer/composer-mentions.d.ts +10 -0
  124. package/dist/components/composer/composer-mentions.js +294 -0
  125. package/dist/components/composer/composer.context.d.ts +56 -0
  126. package/dist/components/composer/composer.context.js +14 -0
  127. package/dist/components/composer/composer.css +81 -0
  128. package/dist/components/composer/composer.d.ts +77 -0
  129. package/dist/components/composer/composer.handle.d.ts +31 -0
  130. package/dist/components/composer/composer.handle.js +41 -0
  131. package/dist/components/composer/composer.js +428 -0
  132. package/dist/components/composer/composer.module.js +14 -0
  133. package/dist/components/composer/editor-behavior.d.ts +2 -0
  134. package/dist/components/composer/editor-behavior.js +99 -0
  135. package/dist/components/composer/index.d.ts +8 -0
  136. package/dist/components/composer/index.js +3 -0
  137. package/dist/components/composer/mention-node.d.ts +44 -0
  138. package/dist/components/composer/mention-node.js +71 -0
  139. package/dist/components/composer/mention-sources.d.ts +14 -0
  140. package/dist/components/composer/mention-text.css +14 -0
  141. package/dist/components/composer/mention-text.d.ts +66 -0
  142. package/dist/components/composer/mention-text.js +95 -0
  143. package/dist/components/composer/mention-text.module.js +4 -0
  144. package/dist/components/confirm-dialog/confirm-dialog.css +68 -0
  145. package/dist/components/confirm-dialog/confirm-dialog.d.ts +75 -0
  146. package/dist/components/confirm-dialog/confirm-dialog.js +399 -0
  147. package/dist/components/confirm-dialog/confirm-dialog.module.js +14 -0
  148. package/dist/components/confirm-dialog/index.d.ts +1 -0
  149. package/dist/components/confirm-dialog/index.js +1 -0
  150. package/dist/components/conversation/conversation.context.d.ts +9 -0
  151. package/dist/components/conversation/conversation.context.js +4 -0
  152. package/dist/components/conversation/conversation.css +143 -0
  153. package/dist/components/conversation/conversation.d.ts +126 -0
  154. package/dist/components/conversation/conversation.js +761 -0
  155. package/dist/components/conversation/conversation.module.js +34 -0
  156. package/dist/components/conversation/group-messages.d.ts +34 -0
  157. package/dist/components/conversation/group-messages.js +64 -0
  158. package/dist/components/conversation/index.d.ts +4 -0
  159. package/dist/components/conversation/index.js +3 -0
  160. package/dist/components/conversation/moment.d.ts +11 -0
  161. package/dist/components/conversation/moment.js +15 -0
  162. package/dist/components/date-field/date-field.d.ts +45 -0
  163. package/dist/components/date-field/date-field.js +162 -0
  164. package/dist/components/date-field/date-input.d.ts +46 -0
  165. package/dist/components/date-field/date-input.js +109 -0
  166. package/dist/components/date-field/index.d.ts +4 -0
  167. package/dist/components/date-field/index.js +4 -0
  168. package/dist/components/date-field/tsf-date-field.d.ts +14 -0
  169. package/dist/components/date-field/tsf-date-field.js +40 -0
  170. package/dist/components/date-range-field/date-range-field.d.ts +53 -0
  171. package/dist/components/date-range-field/date-range-field.js +167 -0
  172. package/dist/components/date-range-field/date-range-input.d.ts +51 -0
  173. package/dist/components/date-range-field/date-range-input.js +109 -0
  174. package/dist/components/date-range-field/index.d.ts +4 -0
  175. package/dist/components/date-range-field/index.js +5 -0
  176. package/dist/components/date-range-field/tsf-date-range-field.d.ts +15 -0
  177. package/dist/components/date-range-field/tsf-date-range-field.js +58 -0
  178. package/dist/components/detail-list/detail-list.css +32 -0
  179. package/dist/components/detail-list/detail-list.d.ts +41 -0
  180. package/dist/components/detail-list/detail-list.js +163 -0
  181. package/dist/components/detail-list/detail-list.module.js +14 -0
  182. package/dist/components/detail-list/index.d.ts +1 -0
  183. package/dist/components/detail-list/index.js +1 -0
  184. package/dist/components/dialog/dialog.css +78 -0
  185. package/dist/components/dialog/dialog.d.ts +59 -0
  186. package/dist/components/dialog/dialog.js +245 -0
  187. package/dist/components/dialog/dialog.module.js +16 -0
  188. package/dist/components/dialog/index.d.ts +1 -0
  189. package/dist/components/dialog/index.js +1 -0
  190. package/dist/components/divider/divider.css +16 -0
  191. package/dist/components/divider/divider.d.ts +13 -0
  192. package/dist/components/divider/divider.js +47 -0
  193. package/dist/components/divider/divider.module.js +10 -0
  194. package/dist/components/divider/index.d.ts +1 -0
  195. package/dist/components/divider/index.js +1 -0
  196. package/dist/components/drawer/drawer.css +168 -0
  197. package/dist/components/drawer/drawer.d.ts +65 -0
  198. package/dist/components/drawer/drawer.js +219 -0
  199. package/dist/components/drawer/drawer.module.js +16 -0
  200. package/dist/components/drawer/index.d.ts +1 -0
  201. package/dist/components/drawer/index.js +1 -0
  202. package/dist/components/email-field/email-field.d.ts +11 -0
  203. package/dist/components/email-field/email-field.js +45 -0
  204. package/dist/components/email-field/index.d.ts +2 -0
  205. package/dist/components/email-field/index.js +3 -0
  206. package/dist/components/email-field/tsf-email-field.d.ts +13 -0
  207. package/dist/components/email-field/tsf-email-field.js +14 -0
  208. package/dist/components/empty-message/empty-message.d.ts +16 -0
  209. package/dist/components/empty-message/empty-message.js +31 -0
  210. package/dist/components/empty-message/index.d.ts +1 -0
  211. package/dist/components/empty-message/index.js +1 -0
  212. package/dist/components/error-boundary/error-boundary.d.ts +43 -0
  213. package/dist/components/error-boundary/error-boundary.js +60 -0
  214. package/dist/components/error-boundary/index.d.ts +1 -0
  215. package/dist/components/error-boundary/index.js +1 -0
  216. package/dist/components/error-message/error-message.d.ts +15 -0
  217. package/dist/components/error-message/error-message.js +30 -0
  218. package/dist/components/error-message/index.d.ts +1 -0
  219. package/dist/components/error-message/index.js +1 -0
  220. package/dist/components/error-text/error-cascade.d.ts +32 -0
  221. package/dist/components/error-text/error-cascade.js +49 -0
  222. package/dist/components/error-text/error-text.css +27 -0
  223. package/dist/components/error-text/error-text.d.ts +22 -0
  224. package/dist/components/error-text/error-text.js +139 -0
  225. package/dist/components/error-text/error-text.module.js +11 -0
  226. package/dist/components/error-text/index.d.ts +1 -0
  227. package/dist/components/error-text/index.js +1 -0
  228. package/dist/components/field/choice-option.d.ts +11 -0
  229. package/dist/components/field/field-group-context.d.ts +21 -0
  230. package/dist/components/field/field-group-context.js +38 -0
  231. package/dist/components/field/field-state.d.ts +51 -0
  232. package/dist/components/field/field-state.js +28 -0
  233. package/dist/components/field/field.css +69 -0
  234. package/dist/components/field/field.d.ts +186 -0
  235. package/dist/components/field/field.js +477 -0
  236. package/dist/components/field/field.module.js +22 -0
  237. package/dist/components/field/hidden-input.d.ts +8 -0
  238. package/dist/components/field/hidden-input.js +12 -0
  239. package/dist/components/field/index.d.ts +6 -0
  240. package/dist/components/field/index.js +6 -0
  241. package/dist/components/field/input-parts.d.ts +49 -0
  242. package/dist/components/field/input-parts.js +94 -0
  243. package/dist/components/field/options-load.d.ts +54 -0
  244. package/dist/components/field/options-load.js +38 -0
  245. package/dist/components/field/rim-focus.d.ts +10 -0
  246. package/dist/components/field/rim-focus.js +23 -0
  247. package/dist/components/field/use-field-focus.d.ts +37 -0
  248. package/dist/components/field/use-field-focus.js +71 -0
  249. package/dist/components/field/use-field-state.d.ts +32 -0
  250. package/dist/components/field/use-field-state.js +77 -0
  251. package/dist/components/field-placeholder/field-placeholder.css +22 -0
  252. package/dist/components/field-placeholder/field-placeholder.d.ts +10 -0
  253. package/dist/components/field-placeholder/field-placeholder.js +54 -0
  254. package/dist/components/field-placeholder/field-placeholder.module.js +12 -0
  255. package/dist/components/field-placeholder/index.d.ts +1 -0
  256. package/dist/components/field-placeholder/index.js +1 -0
  257. package/dist/components/fieldset/field-group.d.ts +31 -0
  258. package/dist/components/fieldset/field-group.js +102 -0
  259. package/dist/components/fieldset/fieldset-root.d.ts +60 -0
  260. package/dist/components/fieldset/fieldset-root.js +285 -0
  261. package/dist/components/fieldset/fieldset.css +21 -0
  262. package/dist/components/fieldset/fieldset.d.ts +37 -0
  263. package/dist/components/fieldset/fieldset.js +127 -0
  264. package/dist/components/fieldset/fieldset.module.js +8 -0
  265. package/dist/components/fieldset/index.d.ts +4 -0
  266. package/dist/components/fieldset/index.js +4 -0
  267. package/dist/components/fieldset/tsf-field-group.d.ts +21 -0
  268. package/dist/components/fieldset/tsf-field-group.js +58 -0
  269. package/dist/components/file-field/file-field.css +101 -0
  270. package/dist/components/file-field/file-field.d.ts +59 -0
  271. package/dist/components/file-field/file-field.js +296 -0
  272. package/dist/components/file-field/file-field.module.js +10 -0
  273. package/dist/components/file-field/file-input.d.ts +85 -0
  274. package/dist/components/file-field/file-input.js +334 -0
  275. package/dist/components/file-field/file-size.d.ts +21 -0
  276. package/dist/components/file-field/file-size.js +18 -0
  277. package/dist/components/file-field/file-type.d.ts +21 -0
  278. package/dist/components/file-field/file-type.js +28 -0
  279. package/dist/components/file-field/index.d.ts +3 -0
  280. package/dist/components/file-field/index.js +4 -0
  281. package/dist/components/file-field/tsf-file-field.d.ts +14 -0
  282. package/dist/components/file-field/tsf-file-field.js +48 -0
  283. package/dist/components/filter-bar/filter-bar.css +34 -0
  284. package/dist/components/filter-bar/filter-bar.d.ts +87 -0
  285. package/dist/components/filter-bar/filter-bar.js +311 -0
  286. package/dist/components/filter-bar/filter-bar.module.js +14 -0
  287. package/dist/components/filter-bar/index.d.ts +2 -0
  288. package/dist/components/filter-bar/index.js +3 -0
  289. package/dist/components/filter-bar/use-filter-view.d.ts +86 -0
  290. package/dist/components/filter-bar/use-filter-view.js +219 -0
  291. package/dist/components/form/first-invalid.d.ts +10 -0
  292. package/dist/components/form/first-invalid.js +31 -0
  293. package/dist/components/form/form-context.d.ts +23 -0
  294. package/dist/components/form/form-context.js +28 -0
  295. package/dist/components/form/form.css +14 -0
  296. package/dist/components/form/form.d.ts +68 -0
  297. package/dist/components/form/form.js +317 -0
  298. package/dist/components/form/form.module.js +8 -0
  299. package/dist/components/form/index.d.ts +2 -0
  300. package/dist/components/form/index.js +3 -0
  301. package/dist/components/icon/icon.css +9 -0
  302. package/dist/components/icon/icon.d.ts +31 -0
  303. package/dist/components/icon/icon.js +61 -0
  304. package/dist/components/icon/icon.module.js +4 -0
  305. package/dist/components/icon/index.d.ts +1 -0
  306. package/dist/components/icon/index.js +1 -0
  307. package/dist/components/link/index.d.ts +1 -0
  308. package/dist/components/link/index.js +1 -0
  309. package/dist/components/link/link.css +18 -0
  310. package/dist/components/link/link.d.ts +11 -0
  311. package/dist/components/link/link.js +45 -0
  312. package/dist/components/link/link.module.js +4 -0
  313. package/dist/components/link-button/index.d.ts +1 -0
  314. package/dist/components/link-button/index.js +1 -0
  315. package/dist/components/link-button/link-button.d.ts +23 -0
  316. package/dist/components/link-button/link-button.js +80 -0
  317. package/dist/components/loading-message/index.d.ts +1 -0
  318. package/dist/components/loading-message/index.js +1 -0
  319. package/dist/components/loading-message/loading-message.d.ts +22 -0
  320. package/dist/components/loading-message/loading-message.js +55 -0
  321. package/dist/components/locale-provider/index.d.ts +1 -0
  322. package/dist/components/locale-provider/index.js +1 -0
  323. package/dist/components/locale-provider/locale-provider.d.ts +22 -0
  324. package/dist/components/locale-provider/locale-provider.js +50 -0
  325. package/dist/components/menu/index.d.ts +1 -0
  326. package/dist/components/menu/index.js +1 -0
  327. package/dist/components/menu/menu.css +122 -0
  328. package/dist/components/menu/menu.d.ts +78 -0
  329. package/dist/components/menu/menu.js +382 -0
  330. package/dist/components/menu/menu.module.js +20 -0
  331. package/dist/components/nav/index.d.ts +3 -0
  332. package/dist/components/nav/index.js +3 -0
  333. package/dist/components/nav/nav-context.d.ts +17 -0
  334. package/dist/components/nav/nav-context.js +5 -0
  335. package/dist/components/nav/nav-item-view.d.ts +63 -0
  336. package/dist/components/nav/nav-item-view.js +243 -0
  337. package/dist/components/nav/nav.css +310 -0
  338. package/dist/components/nav/nav.d.ts +87 -0
  339. package/dist/components/nav/nav.js +481 -0
  340. package/dist/components/nav/nav.module.js +32 -0
  341. package/dist/components/number-field/index.d.ts +4 -0
  342. package/dist/components/number-field/index.js +5 -0
  343. package/dist/components/number-field/number-field-formats.d.ts +24 -0
  344. package/dist/components/number-field/number-field-formats.js +43 -0
  345. package/dist/components/number-field/number-field.css +116 -0
  346. package/dist/components/number-field/number-field.d.ts +34 -0
  347. package/dist/components/number-field/number-field.js +168 -0
  348. package/dist/components/number-field/number-field.module.js +16 -0
  349. package/dist/components/number-field/number-input.d.ts +76 -0
  350. package/dist/components/number-field/number-input.js +383 -0
  351. package/dist/components/number-field/tsf-number-field.d.ts +14 -0
  352. package/dist/components/number-field/tsf-number-field.js +34 -0
  353. package/dist/components/otp-field/index.d.ts +3 -0
  354. package/dist/components/otp-field/index.js +4 -0
  355. package/dist/components/otp-field/otp-field.css +97 -0
  356. package/dist/components/otp-field/otp-field.d.ts +22 -0
  357. package/dist/components/otp-field/otp-field.js +91 -0
  358. package/dist/components/otp-field/otp-field.module.js +12 -0
  359. package/dist/components/otp-field/otp-input-context.d.ts +27 -0
  360. package/dist/components/otp-field/otp-input-context.js +15 -0
  361. package/dist/components/otp-field/otp-input.d.ts +76 -0
  362. package/dist/components/otp-field/otp-input.js +341 -0
  363. package/dist/components/otp-field/tsf-otp-field.d.ts +14 -0
  364. package/dist/components/otp-field/tsf-otp-field.js +34 -0
  365. package/dist/components/pagination/index.d.ts +1 -0
  366. package/dist/components/pagination/index.js +1 -0
  367. package/dist/components/pagination/pagination-context.d.ts +23 -0
  368. package/dist/components/pagination/pagination-context.js +14 -0
  369. package/dist/components/pagination/pagination.css +24 -0
  370. package/dist/components/pagination/pagination.d.ts +60 -0
  371. package/dist/components/pagination/pagination.js +341 -0
  372. package/dist/components/pagination/pagination.module.js +12 -0
  373. package/dist/components/password-field/index.d.ts +4 -0
  374. package/dist/components/password-field/index.js +4 -0
  375. package/dist/components/password-field/password-field.css +66 -0
  376. package/dist/components/password-field/password-field.d.ts +44 -0
  377. package/dist/components/password-field/password-field.js +227 -0
  378. package/dist/components/password-field/password-field.module.js +20 -0
  379. package/dist/components/password-field/password-strength.d.ts +27 -0
  380. package/dist/components/password-field/password-strength.js +124 -0
  381. package/dist/components/password-field/tsf-password-field.d.ts +14 -0
  382. package/dist/components/password-field/tsf-password-field.js +34 -0
  383. package/dist/components/phone-field/index.d.ts +2 -0
  384. package/dist/components/phone-field/index.js +3 -0
  385. package/dist/components/phone-field/phone-field.d.ts +14 -0
  386. package/dist/components/phone-field/phone-field.js +29 -0
  387. package/dist/components/phone-field/tsf-phone-field.d.ts +14 -0
  388. package/dist/components/phone-field/tsf-phone-field.js +14 -0
  389. package/dist/components/photo-field/index.d.ts +3 -0
  390. package/dist/components/photo-field/index.js +4 -0
  391. package/dist/components/photo-field/photo-field.d.ts +29 -0
  392. package/dist/components/photo-field/photo-field.js +183 -0
  393. package/dist/components/photo-field/photo-input.css +113 -0
  394. package/dist/components/photo-field/photo-input.d.ts +63 -0
  395. package/dist/components/photo-field/photo-input.js +327 -0
  396. package/dist/components/photo-field/photo-input.module.js +18 -0
  397. package/dist/components/photo-field/tsf-photo-field.d.ts +19 -0
  398. package/dist/components/photo-field/tsf-photo-field.js +56 -0
  399. package/dist/components/popover/index.d.ts +1 -0
  400. package/dist/components/popover/index.js +1 -0
  401. package/dist/components/popover/popover.css +120 -0
  402. package/dist/components/popover/popover.d.ts +72 -0
  403. package/dist/components/popover/popover.js +434 -0
  404. package/dist/components/popover/popover.module.js +34 -0
  405. package/dist/components/radio-group-field/index.d.ts +3 -0
  406. package/dist/components/radio-group-field/index.js +4 -0
  407. package/dist/components/radio-group-field/radio-group-field.d.ts +26 -0
  408. package/dist/components/radio-group-field/radio-group-field.js +128 -0
  409. package/dist/components/radio-group-field/radio-group.css +116 -0
  410. package/dist/components/radio-group-field/radio-group.d.ts +38 -0
  411. package/dist/components/radio-group-field/radio-group.js +158 -0
  412. package/dist/components/radio-group-field/radio-group.module.js +12 -0
  413. package/dist/components/radio-group-field/tsf-radio-group-field.d.ts +15 -0
  414. package/dist/components/radio-group-field/tsf-radio-group-field.js +41 -0
  415. package/dist/components/search-field/index.d.ts +2 -0
  416. package/dist/components/search-field/index.js +3 -0
  417. package/dist/components/search-field/search-field.d.ts +17 -0
  418. package/dist/components/search-field/search-field.js +45 -0
  419. package/dist/components/search-field/tsf-search-field.d.ts +14 -0
  420. package/dist/components/search-field/tsf-search-field.js +14 -0
  421. package/dist/components/segmented-control-field/index.d.ts +3 -0
  422. package/dist/components/segmented-control-field/index.js +4 -0
  423. package/dist/components/segmented-control-field/segmented-control-field.d.ts +32 -0
  424. package/dist/components/segmented-control-field/segmented-control-field.js +166 -0
  425. package/dist/components/segmented-control-field/segmented-control.css +203 -0
  426. package/dist/components/segmented-control-field/segmented-control.d.ts +58 -0
  427. package/dist/components/segmented-control-field/segmented-control.js +209 -0
  428. package/dist/components/segmented-control-field/segmented-control.module.js +12 -0
  429. package/dist/components/segmented-control-field/tsf-segmented-control-field.d.ts +15 -0
  430. package/dist/components/segmented-control-field/tsf-segmented-control-field.js +41 -0
  431. package/dist/components/select-field/index.d.ts +3 -0
  432. package/dist/components/select-field/index.js +4 -0
  433. package/dist/components/select-field/select-context.d.ts +20 -0
  434. package/dist/components/select-field/select-context.js +15 -0
  435. package/dist/components/select-field/select-field.d.ts +32 -0
  436. package/dist/components/select-field/select-field.js +312 -0
  437. package/dist/components/select-field/select.css +233 -0
  438. package/dist/components/select-field/select.d.ts +78 -0
  439. package/dist/components/select-field/select.js +529 -0
  440. package/dist/components/select-field/select.module.js +30 -0
  441. package/dist/components/select-field/tsf-select-field.d.ts +15 -0
  442. package/dist/components/select-field/tsf-select-field.js +41 -0
  443. package/dist/components/skeleton/index.d.ts +1 -0
  444. package/dist/components/skeleton/index.js +1 -0
  445. package/dist/components/skeleton/skeleton.css +16 -0
  446. package/dist/components/skeleton/skeleton.d.ts +13 -0
  447. package/dist/components/skeleton/skeleton.js +34 -0
  448. package/dist/components/skeleton/skeleton.module.js +9 -0
  449. package/dist/components/spinner/index.d.ts +1 -0
  450. package/dist/components/spinner/index.js +1 -0
  451. package/dist/components/spinner/spinner.css +7 -0
  452. package/dist/components/spinner/spinner.d.ts +15 -0
  453. package/dist/components/spinner/spinner.js +50 -0
  454. package/dist/components/spinner/spinner.module.js +4 -0
  455. package/dist/components/stale/index.d.ts +1 -0
  456. package/dist/components/stale/index.js +1 -0
  457. package/dist/components/stale/stale.css +60 -0
  458. package/dist/components/stale/stale.d.ts +68 -0
  459. package/dist/components/stale/stale.js +231 -0
  460. package/dist/components/stale/stale.module.js +16 -0
  461. package/dist/components/status-message/index.d.ts +1 -0
  462. package/dist/components/status-message/index.js +1 -0
  463. package/dist/components/status-message/status-message.css +122 -0
  464. package/dist/components/status-message/status-message.d.ts +72 -0
  465. package/dist/components/status-message/status-message.js +182 -0
  466. package/dist/components/status-message/status-message.module.js +16 -0
  467. package/dist/components/status-message/status-preset.d.ts +26 -0
  468. package/dist/components/status-message/status-preset.js +64 -0
  469. package/dist/components/switch-field/index.d.ts +3 -0
  470. package/dist/components/switch-field/index.js +4 -0
  471. package/dist/components/switch-field/switch-field.d.ts +23 -0
  472. package/dist/components/switch-field/switch-field.js +142 -0
  473. package/dist/components/switch-field/switch.css +145 -0
  474. package/dist/components/switch-field/switch.d.ts +35 -0
  475. package/dist/components/switch-field/switch.js +207 -0
  476. package/dist/components/switch-field/switch.module.js +12 -0
  477. package/dist/components/switch-field/tsf-switch-field.d.ts +14 -0
  478. package/dist/components/switch-field/tsf-switch-field.js +40 -0
  479. package/dist/components/tabs/index.d.ts +1 -0
  480. package/dist/components/tabs/index.js +1 -0
  481. package/dist/components/tabs/tabs.css +122 -0
  482. package/dist/components/tabs/tabs.d.ts +57 -0
  483. package/dist/components/tabs/tabs.js +194 -0
  484. package/dist/components/tabs/tabs.module.js +18 -0
  485. package/dist/components/tag/index.d.ts +1 -0
  486. package/dist/components/tag/index.js +1 -0
  487. package/dist/components/tag/tag.css +120 -0
  488. package/dist/components/tag/tag.d.ts +36 -0
  489. package/dist/components/tag/tag.js +124 -0
  490. package/dist/components/tag/tag.module.js +10 -0
  491. package/dist/components/tag-group/index.d.ts +1 -0
  492. package/dist/components/tag-group/index.js +1 -0
  493. package/dist/components/tag-group/tag-group.css +155 -0
  494. package/dist/components/tag-group/tag-group.d.ts +53 -0
  495. package/dist/components/tag-group/tag-group.js +182 -0
  496. package/dist/components/tag-group/tag-group.module.js +12 -0
  497. package/dist/components/text-field/connect-text-preset.d.ts +13 -0
  498. package/dist/components/text-field/connect-text-preset.js +34 -0
  499. package/dist/components/text-field/index.d.ts +5 -0
  500. package/dist/components/text-field/index.js +5 -0
  501. package/dist/components/text-field/text-field.css +171 -0
  502. package/dist/components/text-field/text-field.d.ts +57 -0
  503. package/dist/components/text-field/text-field.js +247 -0
  504. package/dist/components/text-field/text-field.module.js +22 -0
  505. package/dist/components/text-field/text-input-context.d.ts +28 -0
  506. package/dist/components/text-field/text-input-context.js +16 -0
  507. package/dist/components/text-field/text-input.d.ts +79 -0
  508. package/dist/components/text-field/text-input.js +588 -0
  509. package/dist/components/text-field/text-preset.d.ts +7 -0
  510. package/dist/components/text-field/tsf-text-field.d.ts +14 -0
  511. package/dist/components/text-field/tsf-text-field.js +34 -0
  512. package/dist/components/textarea-field/index.d.ts +3 -0
  513. package/dist/components/textarea-field/index.js +4 -0
  514. package/dist/components/textarea-field/textarea-field.css +12 -0
  515. package/dist/components/textarea-field/textarea-field.d.ts +19 -0
  516. package/dist/components/textarea-field/textarea-field.js +168 -0
  517. package/dist/components/textarea-field/textarea-field.module.js +8 -0
  518. package/dist/components/textarea-field/textarea.d.ts +19 -0
  519. package/dist/components/textarea-field/textarea.js +108 -0
  520. package/dist/components/textarea-field/tsf-textarea-field.d.ts +14 -0
  521. package/dist/components/textarea-field/tsf-textarea-field.js +34 -0
  522. package/dist/components/textarea-field/use-autosize.d.ts +11 -0
  523. package/dist/components/textarea-field/use-autosize.js +65 -0
  524. package/dist/components/time-field/index.d.ts +3 -0
  525. package/dist/components/time-field/index.js +4 -0
  526. package/dist/components/time-field/time-field.d.ts +25 -0
  527. package/dist/components/time-field/time-field.js +115 -0
  528. package/dist/components/time-field/time-input.d.ts +30 -0
  529. package/dist/components/time-field/time-input.js +66 -0
  530. package/dist/components/time-field/tsf-time-field.d.ts +14 -0
  531. package/dist/components/time-field/tsf-time-field.js +40 -0
  532. package/dist/components/time-zone-provider/index.d.ts +1 -0
  533. package/dist/components/time-zone-provider/index.js +1 -0
  534. package/dist/components/time-zone-provider/time-zone-provider.d.ts +22 -0
  535. package/dist/components/time-zone-provider/time-zone-provider.js +39 -0
  536. package/dist/components/toast/index.d.ts +2 -0
  537. package/dist/components/toast/index.js +3 -0
  538. package/dist/components/toast/toast-provider.css +99 -0
  539. package/dist/components/toast/toast-provider.d.ts +18 -0
  540. package/dist/components/toast/toast-provider.js +203 -0
  541. package/dist/components/toast/toast-provider.module.js +24 -0
  542. package/dist/components/toast/toast.d.ts +79 -0
  543. package/dist/components/toast/toast.js +68 -0
  544. package/dist/components/toggle-group-field/index.d.ts +3 -0
  545. package/dist/components/toggle-group-field/index.js +4 -0
  546. package/dist/components/toggle-group-field/toggle-group-field.d.ts +32 -0
  547. package/dist/components/toggle-group-field/toggle-group-field.js +158 -0
  548. package/dist/components/toggle-group-field/toggle-group.css +148 -0
  549. package/dist/components/toggle-group-field/toggle-group.d.ts +44 -0
  550. package/dist/components/toggle-group-field/toggle-group.js +156 -0
  551. package/dist/components/toggle-group-field/toggle-group.module.js +8 -0
  552. package/dist/components/toggle-group-field/tsf-toggle-group-field.d.ts +15 -0
  553. package/dist/components/toggle-group-field/tsf-toggle-group-field.js +41 -0
  554. package/dist/components/tooltip/index.d.ts +1 -0
  555. package/dist/components/tooltip/index.js +1 -0
  556. package/dist/components/tooltip/tooltip.css +22 -0
  557. package/dist/components/tooltip/tooltip.d.ts +46 -0
  558. package/dist/components/tooltip/tooltip.js +175 -0
  559. package/dist/components/tooltip/tooltip.module.js +4 -0
  560. package/dist/data-table/data-table-content.d.ts +27 -0
  561. package/dist/data-table/data-table-content.js +311 -0
  562. package/dist/data-table/data-table-context.d.ts +33 -0
  563. package/dist/data-table/data-table-context.js +31 -0
  564. package/dist/data-table/data-table-selection.d.ts +42 -0
  565. package/dist/data-table/data-table-selection.js +299 -0
  566. package/dist/data-table/data-table.css +515 -0
  567. package/dist/data-table/data-table.d.ts +93 -0
  568. package/dist/data-table/data-table.js +215 -0
  569. package/dist/data-table/data-table.module.js +68 -0
  570. package/dist/data-table/index.d.ts +6 -0
  571. package/dist/data-table/index.js +5 -0
  572. package/dist/data-table/resolve-view.d.ts +31 -0
  573. package/dist/data-table/resolve-view.js +37 -0
  574. package/dist/data-table/table-features.d.ts +69 -0
  575. package/dist/data-table/table-features.js +41 -0
  576. package/dist/data-table/use-sticky-offsets.d.ts +21 -0
  577. package/dist/data-table/use-sticky-offsets.js +86 -0
  578. package/dist/data-view/index.d.ts +1 -0
  579. package/dist/data-view/index.js +1 -0
  580. package/dist/data-view/use-data-view.d.ts +83 -0
  581. package/dist/data-view/use-data-view.js +135 -0
  582. package/dist/index.d.ts +70 -0
  583. package/dist/index.js +136 -0
  584. package/dist/lib/calendar/calendar-navigation.d.ts +19 -0
  585. package/dist/lib/calendar/calendar-navigation.js +216 -0
  586. package/dist/lib/calendar/calendar-state.d.ts +19 -0
  587. package/dist/lib/calendar/calendar-state.js +33 -0
  588. package/dist/lib/calendar/calendar-year.d.ts +20 -0
  589. package/dist/lib/calendar/calendar-year.js +342 -0
  590. package/dist/lib/calendar/temporal-value.d.ts +84 -0
  591. package/dist/lib/calendar/temporal-value.js +105 -0
  592. package/dist/lib/calendar/temporal.css +596 -0
  593. package/dist/lib/calendar/temporal.d.ts +134 -0
  594. package/dist/lib/calendar/temporal.js +783 -0
  595. package/dist/lib/calendar/temporal.module.js +80 -0
  596. package/dist/lib/format-bytes.d.ts +10 -0
  597. package/dist/lib/format-bytes.js +22 -0
  598. package/dist/lib/forms/context.d.ts +32 -0
  599. package/dist/lib/forms/context.js +33 -0
  600. package/dist/lib/forms/create-app-form.d.ts +33 -0
  601. package/dist/lib/forms/create-app-form.js +45 -0
  602. package/dist/lib/forms/errors.d.ts +23 -0
  603. package/dist/lib/forms/errors.js +25 -0
  604. package/dist/lib/forms/failed-submit.d.ts +16 -0
  605. package/dist/lib/forms/failed-submit.js +44 -0
  606. package/dist/lib/forms/index.d.ts +4 -0
  607. package/dist/lib/forms/index.js +5 -0
  608. package/dist/lib/forms/use-connected-field.d.ts +30 -0
  609. package/dist/lib/forms/use-connected-field.js +74 -0
  610. package/dist/lib/hooks/index.d.ts +5 -0
  611. package/dist/lib/hooks/index.js +6 -0
  612. package/dist/lib/hooks/use-busy-phase.d.ts +31 -0
  613. package/dist/lib/hooks/use-busy-phase.js +75 -0
  614. package/dist/lib/hooks/use-media-query.d.ts +8 -0
  615. package/dist/lib/hooks/use-media-query.js +34 -0
  616. package/dist/lib/hooks/use-presence.d.ts +25 -0
  617. package/dist/lib/hooks/use-presence.js +155 -0
  618. package/dist/lib/hooks/use-row-selection.d.ts +65 -0
  619. package/dist/lib/hooks/use-row-selection.js +136 -0
  620. package/dist/lib/hooks/use-theme.d.ts +28 -0
  621. package/dist/lib/hooks/use-theme.js +88 -0
  622. package/dist/lib/iso-zoned.d.ts +9 -0
  623. package/dist/lib/iso-zoned.js +19 -0
  624. package/dist/lib/password-strength/password-strength.d.ts +38 -0
  625. package/dist/lib/password-strength/password-strength.js +72 -0
  626. package/dist/lib/popup-edge-padding.d.ts +20 -0
  627. package/dist/lib/popup-edge-padding.js +41 -0
  628. package/dist/lib/sliding-indicator/index.d.ts +1 -0
  629. package/dist/lib/sliding-indicator/use-sliding-indicator.d.ts +27 -0
  630. package/dist/lib/sliding-indicator/use-sliding-indicator.js +84 -0
  631. package/dist/lib/storage.d.ts +21 -0
  632. package/dist/lib/storage.js +0 -0
  633. package/dist/lib/table-storage.d.ts +43 -0
  634. package/dist/lib/table-storage.js +62 -0
  635. package/dist/lib/text-length.d.ts +10 -0
  636. package/dist/lib/text-length.js +15 -0
  637. package/dist/lib/tone.d.ts +14 -0
  638. package/dist/lib/tone.js +0 -0
  639. package/dist/lib/unsaved-changes/before-unload.d.ts +8 -0
  640. package/dist/lib/unsaved-changes/before-unload.js +37 -0
  641. package/dist/lib/unsaved-changes/index.d.ts +4 -0
  642. package/dist/lib/unsaved-changes/index.js +5 -0
  643. package/dist/lib/unsaved-changes/leave-guard.d.ts +80 -0
  644. package/dist/lib/unsaved-changes/leave-guard.js +170 -0
  645. package/dist/lib/unsaved-changes/policy.d.ts +24 -0
  646. package/dist/lib/unsaved-changes/policy.js +17 -0
  647. package/dist/lib/unsaved-changes/registry.d.ts +36 -0
  648. package/dist/lib/unsaved-changes/registry.js +78 -0
  649. package/dist/lib/unsaved-changes/tanstack-router.d.ts +12 -0
  650. package/dist/lib/unsaved-changes/tanstack-router.js +50 -0
  651. package/dist/lib/use-infinite-scroll.d.ts +31 -0
  652. package/dist/lib/use-infinite-scroll.js +78 -0
  653. package/dist/lib/use-intent.d.ts +17 -0
  654. package/dist/lib/use-intent.js +77 -0
  655. package/dist/lib/use-required-context.d.ts +9 -0
  656. package/dist/lib/use-required-context.js +15 -0
  657. package/dist/terrazzo/index.d.ts +39 -0
  658. package/dist/terrazzo/index.js +93 -0
  659. package/dist/tokens.css +1102 -0
  660. package/dist/vendor/@material-design-icons/svg/outlined/add.js +12 -0
  661. package/dist/vendor/@material-design-icons/svg/outlined/arrow_downward.js +12 -0
  662. package/dist/vendor/@material-design-icons/svg/outlined/arrow_forward.js +12 -0
  663. package/dist/vendor/@material-design-icons/svg/outlined/arrow_upward.js +12 -0
  664. package/dist/vendor/@material-design-icons/svg/outlined/attach_file.js +12 -0
  665. package/dist/vendor/@material-design-icons/svg/outlined/block.js +12 -0
  666. package/dist/vendor/@material-design-icons/svg/outlined/calendar_today.js +12 -0
  667. package/dist/vendor/@material-design-icons/svg/outlined/check.js +12 -0
  668. package/dist/vendor/@material-design-icons/svg/outlined/check_circle.js +12 -0
  669. package/dist/vendor/@material-design-icons/svg/outlined/chevron_left.js +12 -0
  670. package/dist/vendor/@material-design-icons/svg/outlined/chevron_right.js +12 -0
  671. package/dist/vendor/@material-design-icons/svg/outlined/close.js +12 -0
  672. package/dist/vendor/@material-design-icons/svg/outlined/content_copy.js +12 -0
  673. package/dist/vendor/@material-design-icons/svg/outlined/date_range.js +12 -0
  674. package/dist/vendor/@material-design-icons/svg/outlined/description.js +12 -0
  675. package/dist/vendor/@material-design-icons/svg/outlined/download.js +12 -0
  676. package/dist/vendor/@material-design-icons/svg/outlined/error.js +12 -0
  677. package/dist/vendor/@material-design-icons/svg/outlined/error_outline.js +12 -0
  678. package/dist/vendor/@material-design-icons/svg/outlined/expand_less.js +12 -0
  679. package/dist/vendor/@material-design-icons/svg/outlined/expand_more.js +12 -0
  680. package/dist/vendor/@material-design-icons/svg/outlined/filter_alt.js +12 -0
  681. package/dist/vendor/@material-design-icons/svg/outlined/filter_alt_off.js +12 -0
  682. package/dist/vendor/@material-design-icons/svg/outlined/first_page.js +12 -0
  683. package/dist/vendor/@material-design-icons/svg/outlined/info.js +12 -0
  684. package/dist/vendor/@material-design-icons/svg/outlined/keyboard_arrow_down.js +12 -0
  685. package/dist/vendor/@material-design-icons/svg/outlined/last_page.js +12 -0
  686. package/dist/vendor/@material-design-icons/svg/outlined/mail.js +12 -0
  687. package/dist/vendor/@material-design-icons/svg/outlined/more_horiz.js +12 -0
  688. package/dist/vendor/@material-design-icons/svg/outlined/photo_camera.js +12 -0
  689. package/dist/vendor/@material-design-icons/svg/outlined/remove.js +12 -0
  690. package/dist/vendor/@material-design-icons/svg/outlined/restart_alt.js +12 -0
  691. package/dist/vendor/@material-design-icons/svg/outlined/restore.js +12 -0
  692. package/dist/vendor/@material-design-icons/svg/outlined/search.js +12 -0
  693. package/dist/vendor/@material-design-icons/svg/outlined/unfold_more.js +12 -0
  694. package/dist/vendor/@material-design-icons/svg/outlined/upload_file.js +12 -0
  695. package/dist/vendor/@material-design-icons/svg/outlined/visibility.js +12 -0
  696. package/dist/vendor/@material-design-icons/svg/outlined/visibility_off.js +12 -0
  697. package/dist/vendor/@material-design-icons/svg/outlined/warning_amber.js +12 -0
  698. package/package.json +456 -5
  699. package/tokens/dark.tokens.json +329 -0
  700. package/tokens/kit.resolver.json +38 -0
  701. package/tokens/ref.tokens.json +1436 -0
  702. package/tokens/sys.tokens.json +1267 -0
@@ -0,0 +1,66 @@
1
+ import type { QueryKey } from "@tanstack/react-query";
2
+ import { type ReactNode } from "react";
3
+ import { type FieldBlurHandler, type FieldProps } from "../field/index.ts";
4
+ import { type ComboboxItems, type ItemQuery } from "./combobox-items.ts";
5
+ import { type ComboboxPopupLabels } from "./combobox-popup-body.tsx";
6
+ import { type ComboboxMode } from "./selection.ts";
7
+ import { type ValueStateLabels } from "./value-state.ts";
8
+ /** Everything a combobox field takes besides its items, its value and how it reads them. */
9
+ export type ComboboxFieldChrome = FieldProps & ComboboxPopupLabels & Readonly<{
10
+ /** Shown in the control while nothing is chosen. */
11
+ placeholder?: string;
12
+ disabled?: boolean;
13
+ readOnly?: boolean;
14
+ /** The form field's name. */
15
+ name?: string;
16
+ /** Called when focus leaves the control. */
17
+ onBlur?: FieldBlurHandler;
18
+ /** Whether trying a failed load again can help. @default always */
19
+ retryable?: (error: unknown) => boolean;
20
+ /** Debounce before a search reaches `onSearchChange`, in ms. @default 300 */
21
+ searchDelay?: number;
22
+ /** Applied to the field wrapper, so callers can size the control. */
23
+ className?: string;
24
+ }>;
25
+ /** How a combobox field reads its items. */
26
+ export type ComboboxDerivations<TItem> = Readonly<{
27
+ /** A stable identity per item, for keys, selection and form values. */
28
+ itemKey: (item: TItem) => string;
29
+ /** An item as plain text: the filter text and its accessible name. @default itemKey */
30
+ itemToStringLabel?: (item: TItem) => string;
31
+ /** Renders one item, as a list row and as a chosen value. */
32
+ children: (item: TItem) => ReactNode;
33
+ }>;
34
+ /**
35
+ * An `itemQuery` that looks up the values the loaded list does not hold, with
36
+ * the copy for values it reports gone. Needs `ComboboxItemQueries` above it.
37
+ */
38
+ export type ComboboxItemLookup<TItem, TData = TItem, TKey extends QueryKey = QueryKey> = Readonly<{
39
+ itemQuery?: never;
40
+ }> | (Readonly<{
41
+ itemQuery: ItemQuery<TItem, TData, TKey>;
42
+ }> & ValueStateLabels);
43
+ export type ComboboxFieldProps<TItem, TData = TItem, TKey extends QueryKey = QueryKey> = ComboboxFieldChrome & ComboboxItems<TItem> & ComboboxDerivations<TItem> & ComboboxMode<TItem> & ComboboxItemLookup<TItem, TData, TKey>;
44
+ /**
45
+ * The assembled combobox: a labelled field whose control shows the selection —
46
+ * one value, or removable tags under `multiple` — and whose popup holds the
47
+ * search box and the list. Static `items` are filtered on the client; a paged
48
+ * `query` is searched on the server, debounced, and loads its next page as the
49
+ * list nears its end. An `itemQuery` looks up chosen values the list does not
50
+ * hold, and marks the ones it reports gone.
51
+ *
52
+ * @example
53
+ * <ComboboxField
54
+ * label="Reviewer"
55
+ * optionalLabel="optional"
56
+ * query={reviewersQuery}
57
+ * onSearchChange={setSearch}
58
+ * itemKey={user => user.id}
59
+ * itemToStringLabel={user => user.name}
60
+ * value={reviewer}
61
+ * onValueChange={setReviewer}
62
+ * {...comboboxCopy}>
63
+ * {user => user.name}
64
+ * </ComboboxField>
65
+ */
66
+ export declare const ComboboxField: <TItem, TData = TItem, TKey extends QueryKey = QueryKey>(props: ComboboxFieldProps<TItem, TData, TKey>) => ReactNode;
@@ -0,0 +1,527 @@
1
+ import { Field } from "../field/field.js";
2
+ import { fieldStateAttributes } from "../field/field-state.js";
3
+ import { useFieldState } from "../field/use-field-state.js";
4
+ import { detachHiddenInput } from "../field/hidden-input.js";
5
+ import { Combobox } from "./combobox.js";
6
+ import { itemsOf, loadOf, pagedProgress } from "./combobox-items.js";
7
+ import { ComboboxPopupBody } from "./combobox-popup-body.js";
8
+ import { ItemLookupsContext } from "./item-lookups.js";
9
+ import { defaultValues, emitValues, selectedValues } from "./selection.js";
10
+ import { valueStateOf } from "./value-state.js";
11
+ import { ValueStateView, ValueStatesStatus, valueStateName } from "./value-state-view.js";
12
+ import { c } from "react/compiler-runtime";
13
+ import { use, useEffect, useRef, useState } from "react";
14
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
+ // src/components/combobox-field/combobox-field.tsx
16
+ var DEFAULT_SEARCH_DELAY = 300;
17
+ var alwaysRetryable = () => true;
18
+ var FieldBody = (t0) => {
19
+ const $ = c(112);
20
+ const { chrome, source, derivations, mode, labels, values, states, onChange } = t0;
21
+ const { label, description, errors, requiredness, optionalLabel, dirty, touched, pending: t1, placeholder, readOnly, name, onBlur, retryable: t2, searchDelay: t3, className } = chrome;
22
+ const pending = t1 === void 0 ? false : t1;
23
+ const retryable = t2 === void 0 ? alwaysRetryable : t2;
24
+ const searchDelay = t3 === void 0 ? DEFAULT_SEARCH_DELAY : t3;
25
+ const { itemKey, children: renderItem } = derivations;
26
+ const itemLabel = derivations.itemToStringLabel ?? itemKey;
27
+ const ids = Field.useIds();
28
+ const anchorRef = useRef(null);
29
+ let t4;
30
+ if ($[0] !== source) {
31
+ t4 = itemsOf(source);
32
+ $[0] = source;
33
+ $[1] = t4;
34
+ } else t4 = $[1];
35
+ const items = t4;
36
+ let t5;
37
+ if ($[2] !== retryable || $[3] !== source) {
38
+ t5 = loadOf(source, retryable);
39
+ $[2] = retryable;
40
+ $[3] = source;
41
+ $[4] = t5;
42
+ } else t5 = $[4];
43
+ const load = t5;
44
+ const t6 = values.length > 0;
45
+ let t7;
46
+ if ($[5] !== chrome.disabled || $[6] !== dirty || $[7] !== errors || $[8] !== pending || $[9] !== readOnly || $[10] !== requiredness || $[11] !== t6 || $[12] !== touched) {
47
+ t7 = {
48
+ errors,
49
+ requiredness,
50
+ dirty,
51
+ touched,
52
+ pending,
53
+ disabled: chrome.disabled,
54
+ readOnly,
55
+ filled: t6
56
+ };
57
+ $[5] = chrome.disabled;
58
+ $[6] = dirty;
59
+ $[7] = errors;
60
+ $[8] = pending;
61
+ $[9] = readOnly;
62
+ $[10] = requiredness;
63
+ $[11] = t6;
64
+ $[12] = touched;
65
+ $[13] = t7;
66
+ } else t7 = $[13];
67
+ const field = useFieldState(t7);
68
+ const { disabled } = field;
69
+ const [search, setSearch] = useState("");
70
+ const searchTimer = useRef(void 0);
71
+ let t8;
72
+ let t9;
73
+ if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
74
+ t8 = () => () => clearTimeout(searchTimer.current);
75
+ t9 = [];
76
+ $[14] = t8;
77
+ $[15] = t9;
78
+ } else {
79
+ t8 = $[14];
80
+ t9 = $[15];
81
+ }
82
+ useEffect(t8, t9);
83
+ let t10;
84
+ if ($[16] !== source) {
85
+ t10 = (text, delay) => {
86
+ const { onSearchChange } = source;
87
+ if (onSearchChange === void 0) return;
88
+ clearTimeout(searchTimer.current);
89
+ searchTimer.current = setTimeout(() => onSearchChange(text), delay);
90
+ };
91
+ $[16] = source;
92
+ $[17] = t10;
93
+ } else t10 = $[17];
94
+ const searchServer = t10;
95
+ const t11 = field.state.pending === true || load.status === "pending";
96
+ let t12;
97
+ if ($[18] !== field.state || $[19] !== t11) {
98
+ t12 = {
99
+ ...field.state,
100
+ pending: t11
101
+ };
102
+ $[18] = field.state;
103
+ $[19] = t11;
104
+ $[20] = t12;
105
+ } else t12 = $[20];
106
+ const fieldState = t12;
107
+ let t13;
108
+ if ($[21] !== itemLabel || $[22] !== labels) {
109
+ t13 = (state) => valueStateName(state, itemLabel, labels);
110
+ $[21] = itemLabel;
111
+ $[22] = labels;
112
+ $[23] = t13;
113
+ } else t13 = $[23];
114
+ const nameOf = t13;
115
+ let t14;
116
+ if ($[24] !== itemLabel || $[25] !== labels || $[26] !== renderItem) {
117
+ t14 = (state_0) => /* @__PURE__ */ jsx(ValueStateView, {
118
+ state: state_0,
119
+ renderItem,
120
+ itemLabel,
121
+ labels
122
+ });
123
+ $[24] = itemLabel;
124
+ $[25] = labels;
125
+ $[26] = renderItem;
126
+ $[27] = t14;
127
+ } else t14 = $[27];
128
+ const view = t14;
129
+ const [first] = states;
130
+ const t15 = source.query === void 0 ? void 0 : null;
131
+ let t16;
132
+ if ($[28] !== itemKey) {
133
+ t16 = (item, value) => itemKey(item) === itemKey(value);
134
+ $[28] = itemKey;
135
+ $[29] = t16;
136
+ } else t16 = $[29];
137
+ const t17 = name ?? ids.controlId;
138
+ let t18;
139
+ if ($[30] !== readOnly) {
140
+ t18 = readOnly === true && { open: false };
141
+ $[30] = readOnly;
142
+ $[31] = t18;
143
+ } else t18 = $[31];
144
+ const t19 = requiredness === "required";
145
+ let t20;
146
+ if ($[32] !== searchDelay || $[33] !== searchServer) {
147
+ t20 = (next, details) => {
148
+ if (details.reason === "input-change") {
149
+ setSearch(next);
150
+ searchServer(next, searchDelay);
151
+ }
152
+ };
153
+ $[32] = searchDelay;
154
+ $[33] = searchServer;
155
+ $[34] = t20;
156
+ } else t20 = $[34];
157
+ let t21;
158
+ if ($[35] !== searchServer) {
159
+ t21 = (open) => {
160
+ if (!open) {
161
+ setSearch("");
162
+ searchServer("", 0);
163
+ }
164
+ };
165
+ $[35] = searchServer;
166
+ $[36] = t21;
167
+ } else t21 = $[36];
168
+ let t22;
169
+ if ($[37] !== disabled || $[38] !== itemKey || $[39] !== itemLabel || $[40] !== items || $[41] !== readOnly || $[42] !== t15 || $[43] !== t16 || $[44] !== t17 || $[45] !== t18 || $[46] !== t19 || $[47] !== t20 || $[48] !== t21) {
170
+ t22 = {
171
+ items,
172
+ filter: t15,
173
+ itemToStringLabel: itemLabel,
174
+ itemToStringValue: itemKey,
175
+ isItemEqualToValue: t16,
176
+ name: t17,
177
+ inputRef: detachHiddenInput,
178
+ disabled,
179
+ readOnly,
180
+ ...t18,
181
+ required: t19,
182
+ onInputValueChange: t20,
183
+ onOpenChangeComplete: t21
184
+ };
185
+ $[37] = disabled;
186
+ $[38] = itemKey;
187
+ $[39] = itemLabel;
188
+ $[40] = items;
189
+ $[41] = readOnly;
190
+ $[42] = t15;
191
+ $[43] = t16;
192
+ $[44] = t17;
193
+ $[45] = t18;
194
+ $[46] = t19;
195
+ $[47] = t20;
196
+ $[48] = t21;
197
+ $[49] = t22;
198
+ } else t22 = $[49];
199
+ const root = t22;
200
+ let t23;
201
+ if ($[50] !== label || $[51] !== optionalLabel || $[52] !== requiredness) {
202
+ t23 = /* @__PURE__ */ jsx(Field.Label, {
203
+ requiredness,
204
+ optionalLabel,
205
+ children: label
206
+ });
207
+ $[50] = label;
208
+ $[51] = optionalLabel;
209
+ $[52] = requiredness;
210
+ $[53] = t23;
211
+ } else t23 = $[53];
212
+ let t24;
213
+ if ($[54] !== disabled || $[55] !== fieldState || $[56] !== first || $[57] !== itemKey || $[58] !== mode || $[59] !== nameOf || $[60] !== onBlur || $[61] !== onChange || $[62] !== placeholder || $[63] !== readOnly || $[64] !== states || $[65] !== values || $[66] !== view) {
214
+ t24 = mode.multiple === true ? /* @__PURE__ */ jsx(Combobox.Control, {
215
+ ref: anchorRef,
216
+ state: fieldState,
217
+ onBlur,
218
+ tags: first === void 0 ? /* @__PURE__ */ jsx("span", {
219
+ "aria-hidden": "true",
220
+ children: placeholder
221
+ }) : /* @__PURE__ */ jsx(Combobox.Tags, {
222
+ label: mode.selectedLabel,
223
+ items: states,
224
+ itemKey: _temp,
225
+ itemLabel: nameOf,
226
+ removeLabel: mode.removeLabel,
227
+ removeHint: (state_2) => mode.removeHint(nameOf(state_2)),
228
+ disabled,
229
+ readOnly,
230
+ onRemove: (remaining) => {
231
+ const kept = new Set(remaining.map(_temp2));
232
+ onChange(values.filter((value_0) => kept.has(itemKey(value_0))));
233
+ },
234
+ children: view
235
+ }),
236
+ children: first === void 0 ? placeholder : states.map(nameOf).join(", ")
237
+ }) : /* @__PURE__ */ jsx(Combobox.Control, {
238
+ ref: anchorRef,
239
+ state: fieldState,
240
+ onBlur,
241
+ children: first === void 0 ? placeholder : view(first)
242
+ });
243
+ $[54] = disabled;
244
+ $[55] = fieldState;
245
+ $[56] = first;
246
+ $[57] = itemKey;
247
+ $[58] = mode;
248
+ $[59] = nameOf;
249
+ $[60] = onBlur;
250
+ $[61] = onChange;
251
+ $[62] = placeholder;
252
+ $[63] = readOnly;
253
+ $[64] = states;
254
+ $[65] = values;
255
+ $[66] = view;
256
+ $[67] = t24;
257
+ } else t24 = $[67];
258
+ let t25;
259
+ if ($[68] !== source) {
260
+ t25 = pagedProgress(source);
261
+ $[68] = source;
262
+ $[69] = t25;
263
+ } else t25 = $[69];
264
+ const t26 = source.query === void 0 ? items.length === 0 : search === "";
265
+ const t27 = mode.multiple === true;
266
+ let t28;
267
+ if ($[70] !== chrome || $[71] !== itemKey || $[72] !== load || $[73] !== renderItem || $[74] !== source.query || $[75] !== t25 || $[76] !== t26 || $[77] !== t27) {
268
+ t28 = /* @__PURE__ */ jsx(ComboboxPopupBody, {
269
+ copy: chrome,
270
+ load,
271
+ paged: t25,
272
+ pagedQuery: source.query,
273
+ noOptions: t26,
274
+ multiple: t27,
275
+ itemKey,
276
+ renderItem
277
+ });
278
+ $[70] = chrome;
279
+ $[71] = itemKey;
280
+ $[72] = load;
281
+ $[73] = renderItem;
282
+ $[74] = source.query;
283
+ $[75] = t25;
284
+ $[76] = t26;
285
+ $[77] = t27;
286
+ $[78] = t28;
287
+ } else t28 = $[78];
288
+ let t29;
289
+ if ($[79] !== label || $[80] !== t28) {
290
+ t29 = /* @__PURE__ */ jsx(Combobox.Portal, { children: /* @__PURE__ */ jsx(Combobox.Positioner, {
291
+ anchor: anchorRef,
292
+ children: /* @__PURE__ */ jsx(Combobox.Popup, {
293
+ "aria-label": label,
294
+ children: t28
295
+ })
296
+ }) });
297
+ $[79] = label;
298
+ $[80] = t28;
299
+ $[81] = t29;
300
+ } else t29 = $[81];
301
+ let t30;
302
+ if ($[82] !== labels || $[83] !== states) {
303
+ t30 = labels !== void 0 && /* @__PURE__ */ jsx(ValueStatesStatus, {
304
+ states,
305
+ labels
306
+ });
307
+ $[82] = labels;
308
+ $[83] = states;
309
+ $[84] = t30;
310
+ } else t30 = $[84];
311
+ let t31;
312
+ if ($[85] !== description) {
313
+ t31 = /* @__PURE__ */ jsx(Field.Description, { children: description });
314
+ $[85] = description;
315
+ $[86] = t31;
316
+ } else t31 = $[86];
317
+ let t32;
318
+ if ($[87] !== errors) {
319
+ t32 = /* @__PURE__ */ jsx(Field.Error, { children: errors });
320
+ $[87] = errors;
321
+ $[88] = t32;
322
+ } else t32 = $[88];
323
+ let t33;
324
+ if ($[89] !== t23 || $[90] !== t24 || $[91] !== t29 || $[92] !== t30 || $[93] !== t31 || $[94] !== t32) {
325
+ t33 = /* @__PURE__ */ jsxs(Fragment$1, { children: [
326
+ t23,
327
+ t24,
328
+ t29,
329
+ t30,
330
+ t31,
331
+ t32
332
+ ] });
333
+ $[89] = t23;
334
+ $[90] = t24;
335
+ $[91] = t29;
336
+ $[92] = t30;
337
+ $[93] = t31;
338
+ $[94] = t32;
339
+ $[95] = t33;
340
+ } else t33 = $[95];
341
+ const parts = t33;
342
+ const t34 = field.invalid;
343
+ let t35;
344
+ if ($[96] !== fieldState) {
345
+ t35 = fieldStateAttributes(fieldState);
346
+ $[96] = fieldState;
347
+ $[97] = t35;
348
+ } else t35 = $[97];
349
+ let t36;
350
+ if ($[98] !== mode.multiple || $[99] !== onChange || $[100] !== parts || $[101] !== root || $[102] !== values) {
351
+ t36 = mode.multiple === true ? /* @__PURE__ */ jsx(Combobox.Root, {
352
+ ...root,
353
+ multiple: true,
354
+ value: [...values],
355
+ onValueChange: (next_0) => onChange(next_0),
356
+ children: parts
357
+ }) : /* @__PURE__ */ jsx(Combobox.Root, {
358
+ ...root,
359
+ value: values.at(0) ?? null,
360
+ onValueChange: (next_1) => onChange(next_1 === null ? [] : [next_1]),
361
+ children: parts
362
+ });
363
+ $[98] = mode.multiple;
364
+ $[99] = onChange;
365
+ $[100] = parts;
366
+ $[101] = root;
367
+ $[102] = values;
368
+ $[103] = t36;
369
+ } else t36 = $[103];
370
+ let t37;
371
+ if ($[104] !== className || $[105] !== dirty || $[106] !== disabled || $[107] !== field.invalid || $[108] !== t35 || $[109] !== t36 || $[110] !== touched) {
372
+ t37 = /* @__PURE__ */ jsx(Field.Root, {
373
+ className,
374
+ disabled,
375
+ invalid: t34,
376
+ dirty,
377
+ touched,
378
+ ...t35,
379
+ children: t36
380
+ });
381
+ $[104] = className;
382
+ $[105] = dirty;
383
+ $[106] = disabled;
384
+ $[107] = field.invalid;
385
+ $[108] = t35;
386
+ $[109] = t36;
387
+ $[110] = touched;
388
+ $[111] = t37;
389
+ } else t37 = $[111];
390
+ return t37;
391
+ };
392
+ /**
393
+ * The assembled combobox: a labelled field whose control shows the selection —
394
+ * one value, or removable tags under `multiple` — and whose popup holds the
395
+ * search box and the list. Static `items` are filtered on the client; a paged
396
+ * `query` is searched on the server, debounced, and loads its next page as the
397
+ * list nears its end. An `itemQuery` looks up chosen values the list does not
398
+ * hold, and marks the ones it reports gone.
399
+ *
400
+ * @example
401
+ * <ComboboxField
402
+ * label="Reviewer"
403
+ * optionalLabel="optional"
404
+ * query={reviewersQuery}
405
+ * onSearchChange={setSearch}
406
+ * itemKey={user => user.id}
407
+ * itemToStringLabel={user => user.name}
408
+ * value={reviewer}
409
+ * onValueChange={setReviewer}
410
+ * {...comboboxCopy}>
411
+ * {user => user.name}
412
+ * </ComboboxField>
413
+ */
414
+ var ComboboxField = (props) => {
415
+ const $ = c(21);
416
+ const { itemKey } = props;
417
+ const Lookups = use(ItemLookupsContext);
418
+ let t0;
419
+ if ($[0] !== props) {
420
+ t0 = () => defaultValues(props);
421
+ $[0] = props;
422
+ $[1] = t0;
423
+ } else t0 = $[1];
424
+ const [own, setOwn] = useState(t0);
425
+ const [picked, setPicked] = useState(_temp3);
426
+ let asked;
427
+ let body;
428
+ let statesOf;
429
+ let t1;
430
+ if ($[2] !== itemKey || $[3] !== own || $[4] !== picked || $[5] !== props) {
431
+ t1 = Symbol.for("react.early_return_sentinel");
432
+ bb0: {
433
+ const values = selectedValues(props) ?? own;
434
+ let t2;
435
+ if ($[10] !== itemKey) {
436
+ t2 = (item) => [itemKey(item), item];
437
+ $[10] = itemKey;
438
+ $[11] = t2;
439
+ } else t2 = $[11];
440
+ const listed = new Map(itemsOf(props).map(t2));
441
+ const retryable = props.retryable ?? alwaysRetryable;
442
+ asked = values.map(itemKey).filter((key) => !picked.has(key) && !listed.has(key));
443
+ const change = (next) => {
444
+ const added = next.map(itemKey).filter((key_0) => !values.some((value) => itemKey(value) === key_0));
445
+ if (added.length > 0) setPicked(/* @__PURE__ */ new Set([...picked, ...added]));
446
+ setOwn(next);
447
+ emitValues(props, next);
448
+ };
449
+ statesOf = (lookups) => {
450
+ const lookupOf = new Map(asked.map((key_1, index) => [key_1, lookups[index]]));
451
+ return values.map((item_0) => {
452
+ const key_2 = itemKey(item_0);
453
+ return valueStateOf({
454
+ key: key_2,
455
+ item: item_0,
456
+ picked: picked.has(key_2),
457
+ listed: listed.get(key_2),
458
+ lookup: lookupOf.get(key_2),
459
+ retryable
460
+ });
461
+ });
462
+ };
463
+ body = (states, labels) => /* @__PURE__ */ jsx(FieldBody, {
464
+ chrome: props,
465
+ source: props,
466
+ derivations: props,
467
+ mode: props,
468
+ labels,
469
+ values,
470
+ states,
471
+ onChange: change
472
+ });
473
+ if (props.itemQuery === void 0) {
474
+ t1 = body(statesOf([]), void 0);
475
+ break bb0;
476
+ }
477
+ }
478
+ $[2] = itemKey;
479
+ $[3] = own;
480
+ $[4] = picked;
481
+ $[5] = props;
482
+ $[6] = asked;
483
+ $[7] = body;
484
+ $[8] = statesOf;
485
+ $[9] = t1;
486
+ } else {
487
+ asked = $[6];
488
+ body = $[7];
489
+ statesOf = $[8];
490
+ t1 = $[9];
491
+ }
492
+ if (t1 !== Symbol.for("react.early_return_sentinel")) return t1;
493
+ if (Lookups === null) throw new Error("A ComboboxField with an itemQuery needs a <ComboboxItemQueries> above it.");
494
+ const labels_0 = props;
495
+ let t2;
496
+ if ($[12] !== body || $[13] !== labels_0 || $[14] !== statesOf) {
497
+ t2 = (lookups_0) => body(statesOf(lookups_0), labels_0);
498
+ $[12] = body;
499
+ $[13] = labels_0;
500
+ $[14] = statesOf;
501
+ $[15] = t2;
502
+ } else t2 = $[15];
503
+ let t3;
504
+ if ($[16] !== Lookups || $[17] !== asked || $[18] !== props.itemQuery || $[19] !== t2) {
505
+ t3 = /* @__PURE__ */ jsx(Lookups, {
506
+ keys: asked,
507
+ itemQuery: props.itemQuery,
508
+ children: t2
509
+ });
510
+ $[16] = Lookups;
511
+ $[17] = asked;
512
+ $[18] = props.itemQuery;
513
+ $[19] = t2;
514
+ $[20] = t3;
515
+ } else t3 = $[20];
516
+ return t3;
517
+ };
518
+ function _temp(state_1) {
519
+ return state_1.key;
520
+ }
521
+ function _temp2(state_3) {
522
+ return state_3.key;
523
+ }
524
+ function _temp3() {
525
+ return /* @__PURE__ */ new Set();
526
+ }
527
+ export { ComboboxField };
@@ -0,0 +1,80 @@
1
+ import type { DefaultError, QueryKey, UseQueryOptions } from "@tanstack/react-query";
2
+ import { type OptionsLoad } from "../field/index.ts";
3
+ type Page<TItem> = Readonly<{
4
+ items?: readonly TItem[] | null;
5
+ totalCount?: number;
6
+ }>;
7
+ /**
8
+ * A query searched and paged on the server. A `useInfiniteQuery` result over
9
+ * paginated lists fits.
10
+ *
11
+ * @example
12
+ * const query: PagedQuery<Client> = useInfiniteQuery(clientsQuery(search));
13
+ */
14
+ export type PagedQuery<TItem> = Readonly<{
15
+ data: Readonly<{
16
+ pages: readonly Page<TItem>[];
17
+ }> | undefined;
18
+ error: unknown;
19
+ isFetching: boolean;
20
+ refetch: () => Promise<unknown>;
21
+ hasNextPage: boolean;
22
+ isFetchingNextPage: boolean;
23
+ fetchNextPage: () => Promise<unknown>;
24
+ }>;
25
+ /**
26
+ * The query options for one item by its key, such as a generated
27
+ * `getApiUsersByUserIdOptions`.
28
+ *
29
+ * @example
30
+ * itemQuery: userId => getApiUsersByUserIdOptions({ path: { userId } })
31
+ */
32
+ export type ItemQuery<TItem, TData = TItem, TKey extends QueryKey = QueryKey> = (key: string) => UseQueryOptions<TData, DefaultError, TItem, TKey>;
33
+ /**
34
+ * Where a combobox's items come from: a list filtered on the client, with the
35
+ * load of the query it came from, or a paged query searched on the server.
36
+ *
37
+ * @example
38
+ * const source: ComboboxItems<Client> = { query, onSearchChange: setSearch };
39
+ */
40
+ export type ComboboxItems<TItem> = Readonly<{
41
+ items: readonly TItem[];
42
+ /** How far `items` have loaded, when they come from a query. */
43
+ load?: OptionsLoad;
44
+ query?: never;
45
+ onSearchChange?: never;
46
+ }> | Readonly<{
47
+ /** The paged query, searched on the server. */
48
+ query: PagedQuery<TItem>;
49
+ /** Hands the debounced search text on to the query. */
50
+ onSearchChange: (search: string) => void;
51
+ items?: never;
52
+ load?: never;
53
+ }>;
54
+ /** How far a paged query has got: its match count, and whether it fetches another page. */
55
+ export type PagedProgress = Readonly<{
56
+ totalCount: number | undefined;
57
+ isFetchingNextPage: boolean;
58
+ }>;
59
+ /**
60
+ * The items of a source, as far as they have loaded.
61
+ *
62
+ * @example
63
+ * itemsOf({ items: ["a", "b"] }); // ["a", "b"]
64
+ */
65
+ export declare const itemsOf: <TItem>(source: ComboboxItems<TItem>) => readonly TItem[];
66
+ /**
67
+ * The load of a source: a list's own `load`, or the paged query's.
68
+ *
69
+ * @example
70
+ * loadOf({ items: statuses }, () => true); // { status: "success" }
71
+ */
72
+ export declare const loadOf: <TItem>(source: ComboboxItems<TItem>, retryable: (error: unknown) => boolean) => OptionsLoad;
73
+ /**
74
+ * A paged query's progress once it holds data, else nothing.
75
+ *
76
+ * @example
77
+ * pagedProgress({ items: statuses }); // undefined
78
+ */
79
+ export declare const pagedProgress: <TItem>(source: ComboboxItems<TItem>) => PagedProgress | undefined;
80
+ export {};
@@ -0,0 +1,27 @@
1
+ import { OPTIONS_LOADED, optionsLoad } from "../field/options-load.js";
2
+ // src/components/combobox-field/combobox-items.ts
3
+ /**
4
+ * The items of a source, as far as they have loaded.
5
+ *
6
+ * @example
7
+ * itemsOf({ items: ["a", "b"] }); // ["a", "b"]
8
+ */
9
+ var itemsOf = (source) => source.query === void 0 ? source.items : source.query.data?.pages.flatMap((page) => page.items ?? []) ?? [];
10
+ /**
11
+ * The load of a source: a list's own `load`, or the paged query's.
12
+ *
13
+ * @example
14
+ * loadOf({ items: statuses }, () => true); // { status: "success" }
15
+ */
16
+ var loadOf = (source, retryable) => source.query === void 0 ? source.load ?? OPTIONS_LOADED : optionsLoad(source.query, retryable);
17
+ /**
18
+ * A paged query's progress once it holds data, else nothing.
19
+ *
20
+ * @example
21
+ * pagedProgress({ items: statuses }); // undefined
22
+ */
23
+ var pagedProgress = (source) => source.query?.data === void 0 ? void 0 : {
24
+ totalCount: source.query.data.pages.at(0)?.totalCount,
25
+ isFetchingNextPage: source.query.isFetchingNextPage
26
+ };
27
+ export { itemsOf, loadOf, pagedProgress };