shelving 1.236.0 → 1.236.2

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 (793) hide show
  1. package/api/cache/APICache.d.ts +69 -6
  2. package/api/cache/APICache.js +61 -5
  3. package/api/cache/EndpointCache.d.ts +75 -7
  4. package/api/cache/EndpointCache.js +75 -7
  5. package/api/endpoint/Endpoint.d.ts +141 -25
  6. package/api/endpoint/Endpoint.js +55 -9
  7. package/api/endpoint/util.d.ts +28 -6
  8. package/api/provider/APIProvider.d.ts +58 -14
  9. package/api/provider/APIProvider.js +24 -2
  10. package/api/provider/CachedAPIProvider.d.ts +58 -5
  11. package/api/provider/CachedAPIProvider.js +58 -6
  12. package/api/provider/ClientAPIProvider.d.ts +80 -4
  13. package/api/provider/ClientAPIProvider.js +75 -4
  14. package/api/provider/DebugAPIProvider.d.ts +40 -1
  15. package/api/provider/DebugAPIProvider.js +40 -1
  16. package/api/provider/JSONAPIProvider.d.ts +18 -2
  17. package/api/provider/JSONAPIProvider.js +18 -2
  18. package/api/provider/LoggingAPIProvider.d.ts +25 -2
  19. package/api/provider/LoggingAPIProvider.js +25 -2
  20. package/api/provider/MockAPIProvider.d.ts +72 -1
  21. package/api/provider/MockAPIProvider.js +60 -4
  22. package/api/provider/MockEndpointAPIProvider.d.ts +9 -0
  23. package/api/provider/MockEndpointAPIProvider.js +9 -0
  24. package/api/provider/ThroughAPIProvider.d.ts +67 -1
  25. package/api/provider/ThroughAPIProvider.js +67 -1
  26. package/api/provider/ValidationAPIProvider.d.ts +32 -1
  27. package/api/provider/ValidationAPIProvider.js +32 -1
  28. package/api/provider/XMLAPIProvider.d.ts +18 -2
  29. package/api/provider/XMLAPIProvider.js +18 -2
  30. package/api/store/EndpointStore.d.ts +24 -1
  31. package/api/store/EndpointStore.js +24 -1
  32. package/bun/BunPostgreSQLProvider.d.ts +38 -0
  33. package/bun/BunPostgreSQLProvider.js +38 -2
  34. package/cloudflare/CloudflareD1Provider.d.ts +29 -2
  35. package/cloudflare/CloudflareD1Provider.js +29 -2
  36. package/cloudflare/CloudflareKVProvider.d.ts +115 -0
  37. package/cloudflare/CloudflareKVProvider.js +115 -0
  38. package/cloudflare/types.d.ts +41 -7
  39. package/db/cache/CollectionCache.d.ts +83 -7
  40. package/db/cache/CollectionCache.js +83 -7
  41. package/db/cache/DBCache.d.ts +93 -8
  42. package/db/cache/DBCache.js +85 -7
  43. package/db/collection/Collection.d.ts +103 -15
  44. package/db/collection/Collection.js +58 -6
  45. package/db/migrate/DBMigrator.d.ts +29 -1
  46. package/db/migrate/DBMigrator.js +20 -1
  47. package/db/migrate/PostgreSQLMigrator.d.ts +8 -1
  48. package/db/migrate/PostgreSQLMigrator.js +8 -1
  49. package/db/migrate/SQLMigrator.d.ts +63 -4
  50. package/db/migrate/SQLMigrator.js +51 -1
  51. package/db/migrate/SQLiteMigrator.d.ts +8 -1
  52. package/db/migrate/SQLiteMigrator.js +8 -1
  53. package/db/provider/CacheDBProvider.d.ts +135 -1
  54. package/db/provider/CacheDBProvider.js +135 -1
  55. package/db/provider/ChangesDBProvider.d.ts +84 -3
  56. package/db/provider/ChangesDBProvider.js +77 -2
  57. package/db/provider/DBProvider.d.ts +148 -1
  58. package/db/provider/DBProvider.js +51 -1
  59. package/db/provider/DebugDBProvider.d.ts +118 -1
  60. package/db/provider/DebugDBProvider.js +118 -1
  61. package/db/provider/MemoryDBProvider.d.ts +262 -7
  62. package/db/provider/MemoryDBProvider.js +262 -7
  63. package/db/provider/MockDBProvider.d.ts +113 -2
  64. package/db/provider/MockDBProvider.js +106 -1
  65. package/db/provider/PostgreSQLProvider.d.ts +34 -2
  66. package/db/provider/PostgreSQLProvider.js +34 -4
  67. package/db/provider/SQLProvider.d.ts +250 -14
  68. package/db/provider/SQLProvider.js +237 -13
  69. package/db/provider/SQLiteProvider.d.ts +41 -1
  70. package/db/provider/SQLiteProvider.js +41 -4
  71. package/db/provider/ThroughDBProvider.d.ts +156 -1
  72. package/db/provider/ThroughDBProvider.js +156 -1
  73. package/db/provider/ValidationDBProvider.d.ts +120 -1
  74. package/db/provider/ValidationDBProvider.js +120 -1
  75. package/db/store/ItemStore.d.ts +38 -2
  76. package/db/store/ItemStore.js +38 -2
  77. package/db/store/QueryStore.d.ts +64 -6
  78. package/db/store/QueryStore.js +64 -6
  79. package/error/BaseError.d.ts +27 -2
  80. package/error/BaseError.js +14 -0
  81. package/error/Errors.d.ts +12 -1
  82. package/error/Errors.js +12 -1
  83. package/error/NetworkError.d.ts +13 -1
  84. package/error/NetworkError.js +13 -1
  85. package/error/RequestError.d.ts +90 -7
  86. package/error/RequestError.js +90 -7
  87. package/error/RequiredError.d.ts +11 -1
  88. package/error/RequiredError.js +11 -1
  89. package/error/ResponseError.d.ts +19 -2
  90. package/error/ResponseError.js +19 -2
  91. package/error/UnexpectedError.d.ts +14 -1
  92. package/error/UnexpectedError.js +14 -1
  93. package/error/UnimplementedError.d.ts +13 -1
  94. package/error/UnimplementedError.js +13 -1
  95. package/error/ValueError.d.ts +14 -1
  96. package/error/ValueError.js +14 -1
  97. package/extract/DirectoryExtractor.d.ts +35 -1
  98. package/extract/DirectoryExtractor.js +30 -0
  99. package/extract/Extractor.d.ts +21 -2
  100. package/extract/Extractor.js +7 -1
  101. package/extract/FileExtractor.d.ts +18 -0
  102. package/extract/FileExtractor.js +18 -0
  103. package/extract/IndexExtractor.d.ts +36 -1
  104. package/extract/IndexExtractor.js +31 -0
  105. package/extract/MarkupExtractor.d.ts +15 -0
  106. package/extract/MarkupExtractor.js +15 -0
  107. package/extract/MergingExtractor.d.ts +36 -1
  108. package/extract/MergingExtractor.js +31 -0
  109. package/extract/ModuleExtractor.d.ts +25 -1
  110. package/extract/ModuleExtractor.js +20 -0
  111. package/extract/PackageExtractor.d.ts +36 -1
  112. package/extract/PackageExtractor.js +31 -0
  113. package/extract/ThroughExtractor.d.ts +22 -1
  114. package/extract/ThroughExtractor.js +22 -1
  115. package/extract/TypescriptExtractor.d.ts +21 -0
  116. package/extract/TypescriptExtractor.js +28 -3
  117. package/firestore/client/FirestoreClientProvider.d.ts +129 -4
  118. package/firestore/client/FirestoreClientProvider.js +129 -4
  119. package/firestore/lite/FirestoreLiteProvider.d.ts +128 -3
  120. package/firestore/lite/FirestoreLiteProvider.js +128 -3
  121. package/firestore/server/FirestoreServerProvider.d.ts +129 -2
  122. package/firestore/server/FirestoreServerProvider.js +129 -2
  123. package/markup/MarkupParser.d.ts +57 -10
  124. package/markup/MarkupParser.js +50 -9
  125. package/markup/MarkupRule.d.ts +34 -1
  126. package/markup/Parser.d.ts +18 -0
  127. package/markup/Parser.js +11 -0
  128. package/markup/rule/blockquote.d.ts +3 -0
  129. package/markup/rule/blockquote.js +3 -0
  130. package/markup/rule/code.d.ts +3 -0
  131. package/markup/rule/code.js +3 -0
  132. package/markup/rule/fenced.d.ts +3 -0
  133. package/markup/rule/fenced.js +3 -0
  134. package/markup/rule/heading.d.ts +3 -0
  135. package/markup/rule/heading.js +3 -0
  136. package/markup/rule/index.d.ts +16 -3
  137. package/markup/rule/index.js +16 -3
  138. package/markup/rule/inline.d.ts +4 -1
  139. package/markup/rule/inline.js +5 -2
  140. package/markup/rule/linebreak.d.ts +3 -0
  141. package/markup/rule/linebreak.js +3 -0
  142. package/markup/rule/link.d.ts +6 -0
  143. package/markup/rule/link.js +6 -0
  144. package/markup/rule/ordered.d.ts +3 -0
  145. package/markup/rule/ordered.js +3 -0
  146. package/markup/rule/paragraph.d.ts +3 -0
  147. package/markup/rule/paragraph.js +3 -0
  148. package/markup/rule/separator.d.ts +3 -0
  149. package/markup/rule/separator.js +3 -0
  150. package/markup/rule/table.d.ts +3 -0
  151. package/markup/rule/table.js +3 -0
  152. package/markup/rule/unordered.d.ts +3 -0
  153. package/markup/rule/unordered.js +3 -0
  154. package/markup/util/regexp.d.ts +80 -3
  155. package/markup/util/regexp.js +44 -0
  156. package/package.json +1 -1
  157. package/react/createAPIContext.d.ts +15 -0
  158. package/react/createAPIContext.js +10 -0
  159. package/react/createDBContext.d.ts +15 -0
  160. package/react/createDBContext.js +10 -0
  161. package/react/useInstance.d.ts +11 -0
  162. package/react/useInstance.js +11 -0
  163. package/react/useLazy.d.ts +11 -0
  164. package/react/useMap.d.ts +14 -1
  165. package/react/useMap.js +14 -1
  166. package/react/useReduce.d.ts +12 -0
  167. package/react/useSequence.d.ts +10 -0
  168. package/react/useSequence.js +10 -0
  169. package/react/useStore.d.ts +16 -1
  170. package/schema/AddressSchema.d.ts +41 -4
  171. package/schema/AddressSchema.js +36 -3
  172. package/schema/ArraySchema.d.ts +48 -6
  173. package/schema/ArraySchema.js +40 -5
  174. package/schema/BooleanSchema.d.ts +59 -3
  175. package/schema/BooleanSchema.js +51 -2
  176. package/schema/ChoiceSchema.d.ts +61 -7
  177. package/schema/ChoiceSchema.js +44 -2
  178. package/schema/ColorSchema.d.ts +41 -8
  179. package/schema/ColorSchema.js +36 -7
  180. package/schema/CountrySchema.d.ts +44 -4
  181. package/schema/CountrySchema.js +39 -3
  182. package/schema/CurrencyAmountSchema.d.ts +104 -8
  183. package/schema/CurrencyAmountSchema.js +91 -4
  184. package/schema/CurrencyCodeSchema.d.ts +56 -4
  185. package/schema/CurrencyCodeSchema.js +49 -3
  186. package/schema/DataSchema.d.ts +101 -10
  187. package/schema/DataSchema.js +87 -8
  188. package/schema/DateSchema.d.ts +73 -4
  189. package/schema/DateSchema.js +57 -2
  190. package/schema/DateTimeSchema.d.ts +40 -3
  191. package/schema/DateTimeSchema.js +40 -3
  192. package/schema/DictionarySchema.d.ts +54 -4
  193. package/schema/DictionarySchema.js +47 -3
  194. package/schema/EmailSchema.d.ts +34 -3
  195. package/schema/EmailSchema.js +34 -3
  196. package/schema/EntitySchema.d.ts +45 -4
  197. package/schema/EntitySchema.js +38 -3
  198. package/schema/FileSchema.d.ts +45 -4
  199. package/schema/FileSchema.js +39 -3
  200. package/schema/KeySchema.d.ts +32 -3
  201. package/schema/KeySchema.js +32 -3
  202. package/schema/NullableSchema.d.ts +64 -4
  203. package/schema/NullableSchema.js +59 -3
  204. package/schema/NumberSchema.d.ts +137 -12
  205. package/schema/NumberSchema.js +127 -11
  206. package/schema/OptionalSchema.d.ts +61 -4
  207. package/schema/OptionalSchema.js +56 -4
  208. package/schema/PasswordSchema.d.ts +37 -1
  209. package/schema/PasswordSchema.js +32 -1
  210. package/schema/PhoneSchema.d.ts +40 -4
  211. package/schema/PhoneSchema.js +35 -3
  212. package/schema/RequiredSchema.d.ts +39 -3
  213. package/schema/RequiredSchema.js +41 -3
  214. package/schema/Schema.d.ts +67 -7
  215. package/schema/Schema.js +42 -6
  216. package/schema/SlugSchema.d.ts +37 -5
  217. package/schema/SlugSchema.js +37 -5
  218. package/schema/StringSchema.d.ts +124 -19
  219. package/schema/StringSchema.js +107 -17
  220. package/schema/ThroughSchema.d.ts +35 -2
  221. package/schema/ThroughSchema.js +30 -1
  222. package/schema/TimeSchema.d.ts +43 -3
  223. package/schema/TimeSchema.js +43 -3
  224. package/schema/URISchema.d.ts +67 -6
  225. package/schema/URISchema.js +60 -6
  226. package/schema/URLSchema.d.ts +69 -6
  227. package/schema/URLSchema.js +61 -6
  228. package/schema/UUIDSchema.d.ts +37 -4
  229. package/schema/UUIDSchema.js +37 -4
  230. package/sequence/DeferredSequence.d.ts +49 -3
  231. package/sequence/DeferredSequence.js +39 -3
  232. package/sequence/InspectSequence.d.ts +59 -5
  233. package/sequence/InspectSequence.js +59 -5
  234. package/sequence/LazySequence.d.ts +30 -2
  235. package/sequence/LazySequence.js +30 -2
  236. package/sequence/Sequence.d.ts +11 -0
  237. package/sequence/Sequence.js +10 -0
  238. package/sequence/ThroughSequence.d.ts +15 -0
  239. package/sequence/ThroughSequence.js +15 -0
  240. package/store/ArrayStore.d.ts +74 -11
  241. package/store/ArrayStore.js +74 -11
  242. package/store/BooleanStore.d.ts +19 -2
  243. package/store/BooleanStore.js +19 -2
  244. package/store/BusyStore.d.ts +13 -1
  245. package/store/BusyStore.js +13 -1
  246. package/store/DataStore.d.ts +118 -15
  247. package/store/DataStore.js +118 -15
  248. package/store/DictionaryStore.d.ts +66 -8
  249. package/store/DictionaryStore.js +66 -8
  250. package/store/FetchStore.d.ts +43 -6
  251. package/store/FetchStore.js +36 -5
  252. package/store/PathStore.d.ts +44 -5
  253. package/store/PathStore.js +44 -5
  254. package/store/PayloadFetchStore.d.ts +16 -1
  255. package/store/PayloadFetchStore.js +9 -1
  256. package/store/Store.d.ts +85 -16
  257. package/store/Store.js +52 -10
  258. package/store/URLStore.d.ts +173 -15
  259. package/store/URLStore.js +173 -15
  260. package/test/basics.d.ts +70 -0
  261. package/test/basics.js +60 -0
  262. package/test/people.d.ts +45 -0
  263. package/test/people.js +35 -0
  264. package/test/util.d.ts +30 -3
  265. package/test/util.js +30 -3
  266. package/ui/app/App.d.ts +14 -2
  267. package/ui/app/App.js +9 -2
  268. package/ui/app/App.tsx +14 -2
  269. package/ui/block/Address.d.ts +45 -3
  270. package/ui/block/Address.js +30 -3
  271. package/ui/block/Address.tsx +46 -3
  272. package/ui/block/Block.d.ts +23 -1
  273. package/ui/block/Block.js +13 -1
  274. package/ui/block/Block.tsx +23 -1
  275. package/ui/block/Blockquote.d.ts +21 -0
  276. package/ui/block/Blockquote.js +16 -0
  277. package/ui/block/Blockquote.tsx +22 -0
  278. package/ui/block/Caption.d.ts +21 -1
  279. package/ui/block/Caption.js +16 -1
  280. package/ui/block/Caption.tsx +22 -1
  281. package/ui/block/Card.d.ts +6 -0
  282. package/ui/block/Card.js +1 -0
  283. package/ui/block/Card.tsx +6 -0
  284. package/ui/block/Definitions.d.ts +18 -0
  285. package/ui/block/Definitions.js +13 -0
  286. package/ui/block/Definitions.tsx +19 -0
  287. package/ui/block/Divider.d.ts +21 -0
  288. package/ui/block/Divider.js +16 -0
  289. package/ui/block/Divider.tsx +22 -0
  290. package/ui/block/Heading.d.ts +20 -1
  291. package/ui/block/Heading.js +15 -0
  292. package/ui/block/Heading.tsx +21 -1
  293. package/ui/block/Image.d.ts +23 -0
  294. package/ui/block/Image.js +18 -0
  295. package/ui/block/Image.tsx +24 -0
  296. package/ui/block/Label.d.ts +18 -3
  297. package/ui/block/Label.js +13 -3
  298. package/ui/block/Label.tsx +18 -3
  299. package/ui/block/List.d.ts +30 -0
  300. package/ui/block/List.js +25 -0
  301. package/ui/block/List.tsx +32 -0
  302. package/ui/block/Panel.d.ts +13 -1
  303. package/ui/block/Panel.js +3 -0
  304. package/ui/block/Panel.tsx +13 -1
  305. package/ui/block/Paragraph.d.ts +23 -0
  306. package/ui/block/Paragraph.js +18 -0
  307. package/ui/block/Paragraph.tsx +24 -0
  308. package/ui/block/Preformatted.d.ts +20 -0
  309. package/ui/block/Preformatted.js +15 -0
  310. package/ui/block/Preformatted.tsx +21 -0
  311. package/ui/block/Prose.d.ts +14 -1
  312. package/ui/block/Prose.js +9 -1
  313. package/ui/block/Prose.tsx +14 -1
  314. package/ui/block/Section.d.ts +69 -6
  315. package/ui/block/Section.js +59 -6
  316. package/ui/block/Section.tsx +70 -6
  317. package/ui/block/Subheading.d.ts +20 -1
  318. package/ui/block/Subheading.js +15 -0
  319. package/ui/block/Subheading.tsx +21 -1
  320. package/ui/block/Table.d.ts +20 -0
  321. package/ui/block/Table.js +15 -0
  322. package/ui/block/Table.tsx +21 -0
  323. package/ui/block/Title.d.ts +20 -1
  324. package/ui/block/Title.js +15 -0
  325. package/ui/block/Title.tsx +21 -1
  326. package/ui/block/Video.d.ts +50 -3
  327. package/ui/block/Video.js +30 -3
  328. package/ui/block/Video.tsx +50 -3
  329. package/ui/dialog/Dialog.d.ts +28 -1
  330. package/ui/dialog/Dialog.js +18 -1
  331. package/ui/dialog/Dialog.tsx +28 -1
  332. package/ui/dialog/Dialogs.d.ts +53 -6
  333. package/ui/dialog/Dialogs.js +43 -6
  334. package/ui/dialog/Dialogs.tsx +53 -6
  335. package/ui/dialog/Modal.d.ts +13 -0
  336. package/ui/dialog/Modal.js +8 -0
  337. package/ui/dialog/Modal.tsx +13 -0
  338. package/ui/docs/DocumentationButtons.d.ts +5 -1
  339. package/ui/docs/DocumentationButtons.tsx +5 -1
  340. package/ui/docs/DocumentationCard.d.ts +6 -1
  341. package/ui/docs/DocumentationCard.js +6 -1
  342. package/ui/docs/DocumentationCard.tsx +6 -1
  343. package/ui/docs/DocumentationKind.d.ts +13 -1
  344. package/ui/docs/DocumentationKind.js +8 -0
  345. package/ui/docs/DocumentationKind.tsx +13 -1
  346. package/ui/docs/DocumentationPage.d.ts +6 -1
  347. package/ui/docs/DocumentationPage.js +6 -1
  348. package/ui/docs/DocumentationPage.tsx +6 -1
  349. package/ui/docs/DocumentationSignatures.d.ts +10 -1
  350. package/ui/docs/DocumentationSignatures.js +5 -0
  351. package/ui/docs/DocumentationSignatures.tsx +10 -1
  352. package/ui/form/ArrayInput.d.ts +15 -0
  353. package/ui/form/ArrayInput.tsx +15 -0
  354. package/ui/form/ArrayRadioInputs.d.ts +10 -0
  355. package/ui/form/ArrayRadioInputs.js +5 -0
  356. package/ui/form/ArrayRadioInputs.tsx +10 -0
  357. package/ui/form/Button.d.ts +19 -3
  358. package/ui/form/Button.js +14 -2
  359. package/ui/form/Button.tsx +19 -3
  360. package/ui/form/ButtonInput.d.ts +14 -1
  361. package/ui/form/ButtonInput.js +9 -1
  362. package/ui/form/ButtonInput.tsx +14 -1
  363. package/ui/form/ButtonInputPopover.d.ts +10 -0
  364. package/ui/form/ButtonInputPopover.js +5 -0
  365. package/ui/form/ButtonInputPopover.tsx +10 -0
  366. package/ui/form/ButtonPopover.d.ts +11 -1
  367. package/ui/form/ButtonPopover.js +6 -1
  368. package/ui/form/ButtonPopover.tsx +11 -1
  369. package/ui/form/CheckboxInput.d.ts +14 -1
  370. package/ui/form/CheckboxInput.js +9 -1
  371. package/ui/form/CheckboxInput.tsx +14 -1
  372. package/ui/form/ChoiceRadioInputs.d.ts +10 -0
  373. package/ui/form/ChoiceRadioInputs.tsx +10 -0
  374. package/ui/form/Clickable.d.ts +45 -5
  375. package/ui/form/Clickable.js +30 -3
  376. package/ui/form/Clickable.tsx +45 -5
  377. package/ui/form/DataInput.d.ts +14 -0
  378. package/ui/form/DataInput.tsx +14 -0
  379. package/ui/form/DateInput.d.ts +14 -0
  380. package/ui/form/DateInput.js +9 -0
  381. package/ui/form/DateInput.tsx +14 -0
  382. package/ui/form/DictionaryInput.d.ts +15 -0
  383. package/ui/form/DictionaryInput.tsx +15 -0
  384. package/ui/form/Field.d.ts +5 -0
  385. package/ui/form/Field.tsx +5 -0
  386. package/ui/form/FileInput.d.ts +14 -0
  387. package/ui/form/FileInput.js +9 -0
  388. package/ui/form/FileInput.tsx +14 -0
  389. package/ui/form/Form.d.ts +55 -6
  390. package/ui/form/Form.js +35 -3
  391. package/ui/form/Form.tsx +55 -6
  392. package/ui/form/FormContext.d.ts +24 -3
  393. package/ui/form/FormContext.js +5 -1
  394. package/ui/form/FormContext.tsx +24 -3
  395. package/ui/form/FormFields.d.ts +15 -2
  396. package/ui/form/FormFields.js +15 -2
  397. package/ui/form/FormFields.tsx +15 -2
  398. package/ui/form/FormFooter.d.ts +13 -3
  399. package/ui/form/FormFooter.js +8 -3
  400. package/ui/form/FormFooter.tsx +13 -3
  401. package/ui/form/FormInput.d.ts +21 -2
  402. package/ui/form/FormInput.js +16 -2
  403. package/ui/form/FormInput.tsx +21 -2
  404. package/ui/form/FormMessage.d.ts +8 -1
  405. package/ui/form/FormMessage.js +8 -1
  406. package/ui/form/FormMessage.tsx +8 -2
  407. package/ui/form/FormNotice.d.ts +8 -1
  408. package/ui/form/FormNotice.js +8 -1
  409. package/ui/form/FormNotice.tsx +8 -2
  410. package/ui/form/FormNotify.d.ts +8 -1
  411. package/ui/form/FormNotify.js +8 -1
  412. package/ui/form/FormNotify.tsx +8 -2
  413. package/ui/form/FormStore.d.ts +50 -6
  414. package/ui/form/FormStore.js +50 -6
  415. package/ui/form/FormStore.tsx +50 -6
  416. package/ui/form/Input.d.ts +65 -1
  417. package/ui/form/Input.js +60 -0
  418. package/ui/form/Input.tsx +77 -1
  419. package/ui/form/NumberInput.d.ts +14 -0
  420. package/ui/form/NumberInput.js +9 -0
  421. package/ui/form/NumberInput.tsx +14 -0
  422. package/ui/form/OutputInput.d.ts +13 -1
  423. package/ui/form/OutputInput.js +8 -1
  424. package/ui/form/OutputInput.tsx +13 -1
  425. package/ui/form/Popover.d.ts +18 -2
  426. package/ui/form/Popover.js +8 -2
  427. package/ui/form/Popover.tsx +18 -2
  428. package/ui/form/Progress.d.ts +26 -2
  429. package/ui/form/Progress.js +16 -2
  430. package/ui/form/Progress.tsx +26 -2
  431. package/ui/form/QueryInput.d.ts +14 -5
  432. package/ui/form/QueryInput.js +9 -5
  433. package/ui/form/QueryInput.tsx +14 -5
  434. package/ui/form/RadioInput.d.ts +14 -1
  435. package/ui/form/RadioInput.js +9 -1
  436. package/ui/form/RadioInput.tsx +14 -1
  437. package/ui/form/SchemaInput.d.ts +138 -7
  438. package/ui/form/SchemaInput.js +79 -4
  439. package/ui/form/SchemaInput.tsx +138 -7
  440. package/ui/form/SelectInput.d.ts +14 -0
  441. package/ui/form/SelectInput.tsx +14 -0
  442. package/ui/form/SubmitButton.d.ts +14 -1
  443. package/ui/form/SubmitButton.js +9 -1
  444. package/ui/form/SubmitButton.tsx +14 -1
  445. package/ui/form/TextInput.d.ts +15 -0
  446. package/ui/form/TextInput.js +10 -0
  447. package/ui/form/TextInput.tsx +15 -0
  448. package/ui/inline/Code.d.ts +29 -0
  449. package/ui/inline/Code.js +24 -0
  450. package/ui/inline/Code.tsx +31 -0
  451. package/ui/inline/Deleted.d.ts +23 -0
  452. package/ui/inline/Deleted.js +18 -0
  453. package/ui/inline/Deleted.tsx +24 -0
  454. package/ui/inline/Emphasis.d.ts +23 -0
  455. package/ui/inline/Emphasis.js +18 -0
  456. package/ui/inline/Emphasis.tsx +24 -0
  457. package/ui/inline/Inserted.d.ts +23 -0
  458. package/ui/inline/Inserted.js +18 -0
  459. package/ui/inline/Inserted.tsx +24 -0
  460. package/ui/inline/Link.d.ts +23 -0
  461. package/ui/inline/Link.js +18 -0
  462. package/ui/inline/Link.tsx +24 -0
  463. package/ui/inline/Mark.d.ts +23 -0
  464. package/ui/inline/Mark.js +18 -0
  465. package/ui/inline/Mark.tsx +24 -0
  466. package/ui/inline/Small.d.ts +23 -0
  467. package/ui/inline/Small.js +18 -0
  468. package/ui/inline/Small.tsx +24 -0
  469. package/ui/inline/Strong.d.ts +23 -0
  470. package/ui/inline/Strong.js +18 -0
  471. package/ui/inline/Strong.tsx +24 -0
  472. package/ui/inline/Subscript.d.ts +23 -0
  473. package/ui/inline/Subscript.js +18 -0
  474. package/ui/inline/Subscript.tsx +24 -0
  475. package/ui/inline/Superscript.d.ts +23 -0
  476. package/ui/inline/Superscript.js +18 -0
  477. package/ui/inline/Superscript.tsx +24 -0
  478. package/ui/inline/When.d.ts +42 -3
  479. package/ui/inline/When.js +27 -3
  480. package/ui/inline/When.tsx +42 -3
  481. package/ui/layout/CenteredLayout.d.ts +12 -1
  482. package/ui/layout/CenteredLayout.js +7 -1
  483. package/ui/layout/CenteredLayout.tsx +12 -1
  484. package/ui/layout/Layout.d.ts +12 -3
  485. package/ui/layout/Layout.js +12 -3
  486. package/ui/layout/Layout.ts +12 -3
  487. package/ui/layout/SidebarLayout.d.ts +12 -0
  488. package/ui/layout/SidebarLayout.js +7 -0
  489. package/ui/layout/SidebarLayout.tsx +12 -0
  490. package/ui/menu/Menu.d.ts +22 -0
  491. package/ui/menu/Menu.js +12 -0
  492. package/ui/menu/Menu.tsx +22 -0
  493. package/ui/misc/Catcher.d.ts +77 -5
  494. package/ui/misc/Catcher.js +47 -5
  495. package/ui/misc/Catcher.tsx +77 -5
  496. package/ui/misc/Loading.d.ts +20 -0
  497. package/ui/misc/Loading.js +15 -0
  498. package/ui/misc/Loading.tsx +20 -0
  499. package/ui/misc/Mapper.d.ts +13 -1
  500. package/ui/misc/Mapper.js +4 -0
  501. package/ui/misc/Mapper.tsx +13 -1
  502. package/ui/misc/Markup.d.ts +9 -1
  503. package/ui/misc/Markup.js +4 -0
  504. package/ui/misc/Markup.tsx +9 -1
  505. package/ui/misc/MetaContext.d.ts +24 -7
  506. package/ui/misc/MetaContext.js +19 -6
  507. package/ui/misc/MetaContext.tsx +24 -7
  508. package/ui/misc/StatusIcon.d.ts +16 -1
  509. package/ui/misc/StatusIcon.js +11 -1
  510. package/ui/misc/StatusIcon.tsx +16 -1
  511. package/ui/misc/Tag.d.ts +21 -0
  512. package/ui/misc/Tag.js +11 -0
  513. package/ui/misc/Tag.tsx +21 -0
  514. package/ui/notice/Message.d.ts +27 -1
  515. package/ui/notice/Message.js +22 -1
  516. package/ui/notice/Message.tsx +27 -1
  517. package/ui/notice/Notice.d.ts +24 -0
  518. package/ui/notice/Notice.js +19 -0
  519. package/ui/notice/Notice.tsx +24 -0
  520. package/ui/notice/NoticeStore.d.ts +30 -2
  521. package/ui/notice/NoticeStore.js +30 -2
  522. package/ui/notice/NoticeStore.ts +30 -2
  523. package/ui/notice/Notices.d.ts +11 -1
  524. package/ui/notice/Notices.js +6 -1
  525. package/ui/notice/Notices.tsx +11 -1
  526. package/ui/notice/NoticesStore.d.ts +23 -3
  527. package/ui/notice/NoticesStore.js +23 -3
  528. package/ui/notice/NoticesStore.ts +23 -3
  529. package/ui/page/HTML.d.ts +13 -2
  530. package/ui/page/HTML.js +8 -2
  531. package/ui/page/HTML.tsx +13 -2
  532. package/ui/page/Head.d.ts +5 -1
  533. package/ui/page/Head.js +5 -1
  534. package/ui/page/Head.tsx +5 -1
  535. package/ui/page/Page.d.ts +12 -1
  536. package/ui/page/Page.js +7 -1
  537. package/ui/page/Page.tsx +12 -1
  538. package/ui/router/Navigation.d.ts +11 -0
  539. package/ui/router/Navigation.js +6 -0
  540. package/ui/router/Navigation.tsx +11 -0
  541. package/ui/router/NavigationContext.d.ts +14 -2
  542. package/ui/router/NavigationContext.js +14 -2
  543. package/ui/router/NavigationContext.tsx +14 -2
  544. package/ui/router/NavigationStore.d.ts +29 -1
  545. package/ui/router/NavigationStore.js +29 -1
  546. package/ui/router/NavigationStore.tsx +29 -1
  547. package/ui/router/Router.d.ts +12 -1
  548. package/ui/router/Router.js +7 -1
  549. package/ui/router/Router.tsx +12 -1
  550. package/ui/router/Routes.d.ts +14 -4
  551. package/ui/router/Routes.tsx +14 -4
  552. package/ui/style/Color.d.ts +15 -2
  553. package/ui/style/Color.js +5 -0
  554. package/ui/style/Color.tsx +15 -2
  555. package/ui/style/Flex.d.ts +41 -4
  556. package/ui/style/Flex.js +26 -3
  557. package/ui/style/Flex.tsx +41 -4
  558. package/ui/style/Gap.d.ts +18 -3
  559. package/ui/style/Gap.js +8 -1
  560. package/ui/style/Gap.tsx +18 -3
  561. package/ui/style/Padding.d.ts +18 -3
  562. package/ui/style/Padding.js +8 -1
  563. package/ui/style/Padding.tsx +18 -3
  564. package/ui/style/Scroll.d.ts +36 -1
  565. package/ui/style/Scroll.js +26 -1
  566. package/ui/style/Scroll.tsx +37 -1
  567. package/ui/style/Space.d.ts +18 -3
  568. package/ui/style/Space.js +8 -1
  569. package/ui/style/Space.tsx +18 -3
  570. package/ui/style/Status.d.ts +23 -7
  571. package/ui/style/Status.js +13 -5
  572. package/ui/style/Status.tsx +23 -7
  573. package/ui/style/Tint.d.ts +7 -1
  574. package/ui/style/Tint.js +7 -1
  575. package/ui/style/Tint.tsx +7 -1
  576. package/ui/style/Typography.d.ts +38 -6
  577. package/ui/style/Typography.js +8 -0
  578. package/ui/style/Typography.tsx +38 -6
  579. package/ui/style/Width.d.ts +18 -1
  580. package/ui/style/Width.js +8 -0
  581. package/ui/style/Width.tsx +18 -1
  582. package/ui/transition/CollapseTransition.d.ts +13 -0
  583. package/ui/transition/CollapseTransition.js +8 -0
  584. package/ui/transition/CollapseTransition.tsx +13 -0
  585. package/ui/transition/FadeTransition.d.ts +13 -0
  586. package/ui/transition/FadeTransition.js +8 -0
  587. package/ui/transition/FadeTransition.tsx +13 -0
  588. package/ui/transition/HorizontalTransition.d.ts +13 -0
  589. package/ui/transition/HorizontalTransition.js +8 -0
  590. package/ui/transition/HorizontalTransition.tsx +13 -0
  591. package/ui/transition/Transition.d.ts +12 -4
  592. package/ui/transition/Transition.js +7 -3
  593. package/ui/transition/Transition.tsx +12 -4
  594. package/ui/transition/VerticalTransition.d.ts +13 -0
  595. package/ui/transition/VerticalTransition.js +8 -0
  596. package/ui/transition/VerticalTransition.tsx +13 -0
  597. package/ui/transition/util.d.ts +16 -6
  598. package/ui/transition/util.js +7 -1
  599. package/ui/transition/util.tsx +16 -6
  600. package/ui/tree/TreeApp.d.ts +11 -0
  601. package/ui/tree/TreeApp.js +6 -0
  602. package/ui/tree/TreeApp.tsx +11 -0
  603. package/ui/tree/TreeBreadcrumbs.d.ts +11 -0
  604. package/ui/tree/TreeBreadcrumbs.js +6 -0
  605. package/ui/tree/TreeBreadcrumbs.tsx +11 -0
  606. package/ui/tree/TreeButton.d.ts +9 -1
  607. package/ui/tree/TreeButton.js +4 -0
  608. package/ui/tree/TreeButton.tsx +9 -1
  609. package/ui/tree/TreeCard.d.ts +8 -1
  610. package/ui/tree/TreeCard.js +8 -1
  611. package/ui/tree/TreeCard.tsx +8 -1
  612. package/ui/tree/TreeCards.d.ts +16 -1
  613. package/ui/tree/TreeCards.js +11 -1
  614. package/ui/tree/TreeCards.tsx +16 -1
  615. package/ui/tree/TreeContext.d.ts +18 -1
  616. package/ui/tree/TreeContext.js +18 -1
  617. package/ui/tree/TreeContext.tsx +18 -1
  618. package/ui/tree/TreeMenu.d.ts +28 -1
  619. package/ui/tree/TreeMenu.js +23 -1
  620. package/ui/tree/TreeMenu.tsx +28 -1
  621. package/ui/tree/TreePage.d.ts +6 -0
  622. package/ui/tree/TreePage.js +6 -0
  623. package/ui/tree/TreePage.tsx +6 -0
  624. package/ui/tree/TreeRouter.d.ts +17 -2
  625. package/ui/tree/TreeRouter.js +12 -2
  626. package/ui/tree/TreeRouter.tsx +17 -2
  627. package/ui/tree/TreeSidebar.d.ts +11 -0
  628. package/ui/tree/TreeSidebar.js +6 -0
  629. package/ui/tree/TreeSidebar.tsx +11 -0
  630. package/ui/util/context.d.ts +13 -1
  631. package/ui/util/context.ts +13 -1
  632. package/ui/util/css.d.ts +17 -4
  633. package/ui/util/css.js +5 -1
  634. package/ui/util/css.ts +17 -4
  635. package/ui/util/event.d.ts +9 -1
  636. package/ui/util/event.js +9 -1
  637. package/ui/util/event.ts +9 -1
  638. package/ui/util/focus.d.ts +24 -5
  639. package/ui/util/focus.js +24 -5
  640. package/ui/util/focus.ts +24 -5
  641. package/ui/util/meta.d.ts +113 -21
  642. package/ui/util/meta.js +73 -13
  643. package/ui/util/meta.ts +113 -21
  644. package/ui/util/notice.d.ts +98 -10
  645. package/ui/util/notice.js +93 -9
  646. package/ui/util/notice.ts +98 -10
  647. package/ui/util/props.d.ts +10 -2
  648. package/ui/util/props.ts +10 -2
  649. package/ui/util/refresh.d.ts +10 -1
  650. package/ui/util/refresh.js +10 -1
  651. package/ui/util/refresh.ts +10 -1
  652. package/ui/util/scroll.d.ts +20 -4
  653. package/ui/util/scroll.js +20 -4
  654. package/ui/util/scroll.ts +20 -4
  655. package/ui/util/state.d.ts +19 -5
  656. package/ui/util/state.js +19 -5
  657. package/ui/util/state.ts +19 -5
  658. package/util/ansi.d.ts +118 -0
  659. package/util/ansi.js +116 -0
  660. package/util/array.d.ts +349 -33
  661. package/util/array.js +284 -27
  662. package/util/async.d.ts +87 -9
  663. package/util/async.js +80 -8
  664. package/util/base64.d.ts +56 -6
  665. package/util/base64.js +56 -6
  666. package/util/boolean.d.ts +75 -10
  667. package/util/boolean.js +75 -10
  668. package/util/buffer.d.ts +26 -3
  669. package/util/buffer.js +21 -3
  670. package/util/bytes.d.ts +42 -4
  671. package/util/bytes.js +32 -2
  672. package/util/class.d.ts +59 -8
  673. package/util/class.js +44 -5
  674. package/util/color.d.ts +131 -13
  675. package/util/color.js +126 -12
  676. package/util/constants.d.ts +132 -19
  677. package/util/constants.js +132 -19
  678. package/util/crypto.d.ts +17 -1
  679. package/util/crypto.js +17 -1
  680. package/util/currency.d.ts +38 -4
  681. package/util/currency.js +33 -3
  682. package/util/data.d.ts +139 -24
  683. package/util/data.js +39 -5
  684. package/util/date.d.ts +152 -18
  685. package/util/date.js +147 -17
  686. package/util/debug.d.ts +112 -11
  687. package/util/debug.js +114 -11
  688. package/util/dictionary.d.ts +205 -24
  689. package/util/dictionary.js +162 -17
  690. package/util/diff.d.ts +22 -3
  691. package/util/diff.js +11 -1
  692. package/util/dispose.d.ts +74 -2
  693. package/util/dispose.js +74 -2
  694. package/util/duration.d.ts +278 -16
  695. package/util/duration.js +267 -15
  696. package/util/element.d.ts +59 -6
  697. package/util/element.js +32 -3
  698. package/util/entity.d.ts +39 -6
  699. package/util/entity.js +5 -1
  700. package/util/entry.d.ts +56 -9
  701. package/util/entry.js +32 -4
  702. package/util/env.d.ts +26 -4
  703. package/util/env.js +26 -4
  704. package/util/equal.d.ts +181 -17
  705. package/util/equal.js +181 -17
  706. package/util/error.d.ts +57 -5
  707. package/util/error.js +52 -4
  708. package/util/file.d.ts +30 -7
  709. package/util/file.js +25 -6
  710. package/util/filter.d.ts +36 -4
  711. package/util/filter.js +31 -3
  712. package/util/focus.d.ts +9 -1
  713. package/util/focus.js +9 -1
  714. package/util/format.d.ts +186 -22
  715. package/util/format.js +135 -14
  716. package/util/function.d.ts +66 -11
  717. package/util/function.js +31 -4
  718. package/util/geo.d.ts +60 -8
  719. package/util/geo.js +45 -5
  720. package/util/hash.d.ts +21 -2
  721. package/util/hash.js +21 -2
  722. package/util/http.d.ts +134 -19
  723. package/util/http.js +94 -11
  724. package/util/hydrate.d.ts +19 -2
  725. package/util/hydrate.js +12 -1
  726. package/util/item.d.ts +70 -11
  727. package/util/item.js +35 -4
  728. package/util/iterate.d.ts +109 -13
  729. package/util/iterate.js +86 -10
  730. package/util/jwt.d.ts +47 -13
  731. package/util/jwt.js +36 -12
  732. package/util/lazy.d.ts +9 -6
  733. package/util/link.d.ts +10 -3
  734. package/util/link.js +5 -2
  735. package/util/log.d.ts +26 -3
  736. package/util/log.js +26 -3
  737. package/util/map.d.ts +144 -19
  738. package/util/map.js +101 -11
  739. package/util/merge.d.ts +23 -1
  740. package/util/merge.js +6 -0
  741. package/util/null.d.ts +102 -13
  742. package/util/null.js +92 -11
  743. package/util/number.d.ts +125 -8
  744. package/util/number.js +120 -7
  745. package/util/object.d.ts +263 -31
  746. package/util/object.js +154 -17
  747. package/util/path.d.ts +91 -15
  748. package/util/path.js +60 -9
  749. package/util/query.d.ts +78 -9
  750. package/util/query.js +58 -6
  751. package/util/random.d.ts +67 -4
  752. package/util/random.js +67 -4
  753. package/util/regexp.d.ts +201 -24
  754. package/util/regexp.js +106 -11
  755. package/util/sequence.d.ts +66 -8
  756. package/util/sequence.js +52 -7
  757. package/util/serialise.d.ts +7 -1
  758. package/util/serialise.js +7 -1
  759. package/util/set.d.ts +103 -13
  760. package/util/set.js +83 -9
  761. package/util/sort.d.ts +32 -7
  762. package/util/sort.js +26 -6
  763. package/util/source.d.ts +28 -3
  764. package/util/source.js +22 -2
  765. package/util/start.d.ts +62 -5
  766. package/util/start.js +47 -2
  767. package/util/string.d.ts +209 -25
  768. package/util/string.js +188 -21
  769. package/util/template.d.ts +58 -9
  770. package/util/template.js +45 -6
  771. package/util/timeout.d.ts +35 -11
  772. package/util/timeout.js +35 -11
  773. package/util/transform.d.ts +87 -8
  774. package/util/transform.js +75 -7
  775. package/util/tree.d.ts +39 -6
  776. package/util/tree.js +3 -0
  777. package/util/types.d.ts +8 -2
  778. package/util/undefined.d.ts +47 -6
  779. package/util/undefined.js +47 -6
  780. package/util/units.d.ts +107 -12
  781. package/util/units.js +97 -12
  782. package/util/update.d.ts +36 -4
  783. package/util/update.js +24 -2
  784. package/util/uri.d.ts +138 -6
  785. package/util/uri.js +44 -3
  786. package/util/url.d.ts +152 -7
  787. package/util/url.js +136 -5
  788. package/util/uuid.d.ts +28 -3
  789. package/util/uuid.js +28 -3
  790. package/util/validate.d.ts +85 -20
  791. package/util/validate.js +61 -12
  792. package/util/xml.d.ts +9 -10
  793. package/util/xml.js +9 -10
@@ -5,8 +5,14 @@ import { Menu, MenuItem } from "../menu/Menu.js";
5
5
  import { createMapper } from "../misc/Mapper.js";
6
6
  /**
7
7
  * Match an element that should appear in the sidebar menu.
8
+ *
8
9
  * - Generic tree elements (directories and files) always qualify.
9
10
  * - For documentation elements, only `kind: "module"` qualifies — functions, classes, methods, properties, etc. are kept off the navigation.
11
+ *
12
+ * @param element The element to test.
13
+ * @returns `true` when the element should appear in the menu, `false` otherwise.
14
+ * @example matchMenuElement(element) // true
15
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/matchMenuElement
10
16
  */
11
17
  export function matchMenuElement(element) {
12
18
  const { type, props } = element;
@@ -18,24 +24,40 @@ export function matchMenuElement(element) {
18
24
  }
19
25
  /**
20
26
  * Default menu item renderer for any `tree-*` element.
27
+ *
21
28
  * - Computes its own URL path by appending its `name` to the parent's `path`.
22
29
  * - Passes both the label and the nested `<TreeMenuMapper>` to `<MenuItem>`; `<MenuItem>` itself decides whether to reveal the nested submenu based on the current URL.
30
+ *
31
+ * @param props The tree element props plus the parent's `path`.
32
+ * @returns A `<MenuItem>` for the element, with a nested `<Menu>` when it has menu-eligible children.
33
+ * @example <TreeMenuItem {...element.props} path="/" />
34
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuItem
23
35
  */
24
36
  export function TreeMenuItem({ path = "/", name, title, children }) {
25
37
  const href = joinPath(path, name);
26
38
  const submenu = Array.from(filterElements(children, matchMenuElement));
27
39
  return (_jsxs(MenuItem, { href: href, children: [title ?? name, submenu.length ? (_jsx(Menu, { children: _jsx(TreeMenuMapper, { path: href, children: submenu }) })) : null] }));
28
40
  }
29
- /** Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override. */
41
+ /**
42
+ * Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override the per-type menu-item renderers.
43
+ *
44
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuMapping
45
+ */
30
46
  export const [TreeMenuMapping, TreeMenuMapper] = createMapper({
31
47
  "tree-element": TreeMenuItem,
32
48
  "tree-documentation": TreeMenuItem,
33
49
  });
34
50
  /**
35
51
  * Sidebar navigation menu built from the children of a root tree element.
52
+ *
36
53
  * - Renders each child via `<TreeMenuItem>` (the default mapping for `tree-element`).
37
54
  * - To customise renderers for specific types, wrap in `<TreeMenuMapping mapping={…}>`.
38
55
  * - Only directories and files appear — code symbols are kept off the navigation.
56
+ *
57
+ * @param props The root `tree` element and optional root `path`.
58
+ * @returns A `<Menu>` of navigation links to the root's children.
59
+ * @example <TreeMenu tree={tree} />
60
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenu
39
61
  */
40
62
  export function TreeMenu({ path = "/", tree }) {
41
63
  return (_jsx(Menu, { children: _jsx(TreeMenuMapper, { path: path, children: filterElements(tree.props.children, matchMenuElement) }) }));
@@ -7,8 +7,14 @@ import { createMapper } from "../misc/Mapper.js";
7
7
 
8
8
  /**
9
9
  * Match an element that should appear in the sidebar menu.
10
+ *
10
11
  * - Generic tree elements (directories and files) always qualify.
11
12
  * - For documentation elements, only `kind: "module"` qualifies — functions, classes, methods, properties, etc. are kept off the navigation.
13
+ *
14
+ * @param element The element to test.
15
+ * @returns `true` when the element should appear in the menu, `false` otherwise.
16
+ * @example matchMenuElement(element) // true
17
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/matchMenuElement
12
18
  */
13
19
  export function matchMenuElement(element: Element): boolean {
14
20
  const { type, props } = element;
@@ -25,8 +31,14 @@ interface TreeMenuExtras {
25
31
 
26
32
  /**
27
33
  * Default menu item renderer for any `tree-*` element.
34
+ *
28
35
  * - Computes its own URL path by appending its `name` to the parent's `path`.
29
36
  * - Passes both the label and the nested `<TreeMenuMapper>` to `<MenuItem>`; `<MenuItem>` itself decides whether to reveal the nested submenu based on the current URL.
37
+ *
38
+ * @param props The tree element props plus the parent's `path`.
39
+ * @returns A `<MenuItem>` for the element, with a nested `<Menu>` when it has menu-eligible children.
40
+ * @example <TreeMenuItem {...element.props} path="/" />
41
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuItem
30
42
  */
31
43
  export function TreeMenuItem({ path = "/", name, title, children }: TreeElementProps & TreeMenuExtras): ReactNode {
32
44
  const href = joinPath(path, name);
@@ -43,12 +55,21 @@ export function TreeMenuItem({ path = "/", name, title, children }: TreeElementP
43
55
  );
44
56
  }
45
57
 
46
- /** Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override. */
58
+ /**
59
+ * Mapping + Mapper pair for the menu — wrap children in `<TreeMenuMapping>` to override the per-type menu-item renderers.
60
+ *
61
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuMapping
62
+ */
47
63
  export const [TreeMenuMapping, TreeMenuMapper] = createMapper<TreeMenuExtras>({
48
64
  "tree-element": TreeMenuItem,
49
65
  "tree-documentation": TreeMenuItem,
50
66
  });
51
67
 
68
+ /**
69
+ * Props for the `TreeMenu` component — the root tree element plus its URL path.
70
+ *
71
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenuProps
72
+ */
52
73
  export interface TreeMenuProps {
53
74
  /** Root element whose children become the navigation links. */
54
75
  readonly tree: TreeElement;
@@ -58,9 +79,15 @@ export interface TreeMenuProps {
58
79
 
59
80
  /**
60
81
  * Sidebar navigation menu built from the children of a root tree element.
82
+ *
61
83
  * - Renders each child via `<TreeMenuItem>` (the default mapping for `tree-element`).
62
84
  * - To customise renderers for specific types, wrap in `<TreeMenuMapping mapping={…}>`.
63
85
  * - Only directories and files appear — code symbols are kept off the navigation.
86
+ *
87
+ * @param props The root `tree` element and optional root `path`.
88
+ * @returns A `<Menu>` of navigation links to the root's children.
89
+ * @example <TreeMenu tree={tree} />
90
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeMenu/TreeMenu
64
91
  */
65
92
  export function TreeMenu({ path = "/", tree }: TreeMenuProps): ReactNode {
66
93
  return (
@@ -2,7 +2,13 @@ import type { ReactNode } from "react";
2
2
  import type { TreeElementProps } from "../../util/tree.js";
3
3
  /**
4
4
  * Page renderer for a generic `tree-element` (a directory or file).
5
+ *
5
6
  * - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
6
7
  * - Child cards cover both nested directories/files and the code symbols of a source file.
8
+ *
9
+ * @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
10
+ * @returns A `<Page>` with the title, prose content, and a stack of child cards.
11
+ * @example <TreePage {...element.props} />
12
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
7
13
  */
8
14
  export declare function TreePage({ title, name, description, content, children }: TreeElementProps): ReactNode;
@@ -7,8 +7,14 @@ import { Page } from "../page/Page.js";
7
7
  import { TreeCards } from "./TreeCards.js";
8
8
  /**
9
9
  * Page renderer for a generic `tree-element` (a directory or file).
10
+ *
10
11
  * - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
11
12
  * - Child cards cover both nested directories/files and the code symbols of a source file.
13
+ *
14
+ * @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
15
+ * @returns A `<Page>` with the title, prose content, and a stack of child cards.
16
+ * @example <TreePage {...element.props} />
17
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
12
18
  */
13
19
  export function TreePage({ title, name, description, content, children }) {
14
20
  return (_jsxs(Page, { title: title ?? name, description: description, children: [_jsx(Header, { wide: true, children: _jsx(Title, { children: title ?? name }) }), _jsx(Section, { wide: true, children: content && (_jsx(Prose, { children: _jsx(Markup, { children: content }) })) }), _jsx(Section, { wide: true, children: _jsx(TreeCards, { children: children }) })] }));
@@ -9,8 +9,14 @@ import { TreeCards } from "./TreeCards.js";
9
9
 
10
10
  /**
11
11
  * Page renderer for a generic `tree-element` (a directory or file).
12
+ *
12
13
  * - Shows the title, any absorbed prose content, and the element's children as a stack of cards.
13
14
  * - Child cards cover both nested directories/files and the code symbols of a source file.
15
+ *
16
+ * @param props The tree element props (`title`, `name`, `description`, `content`, `children`).
17
+ * @returns A `<Page>` with the title, prose content, and a stack of child cards.
18
+ * @example <TreePage {...element.props} />
19
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreePage/TreePage
14
20
  */
15
21
  export function TreePage({ title, name, description, content, children }: TreeElementProps): ReactNode {
16
22
  return (
@@ -1,10 +1,19 @@
1
1
  import type { ReactElement, ReactNode } from "react";
2
2
  import type { TreeElement } from "../../util/tree.js";
3
3
  import type { PossibleMeta } from "../util/index.js";
4
- /** Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override. */
4
+ /**
5
+ * Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
8
+ */
5
9
  export declare const TreeRouterMapping: import("react").FunctionComponent<import("../misc/Mapper.js").MappingProps<unknown>>, TreeRouterMapper: import("react").FunctionComponent<{
6
10
  readonly children?: import("../../index.js").Elements;
7
11
  }>;
12
+ /**
13
+ * Props for the `TreeRouter` component — the tree to route plus an optional fallback and app meta.
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterProps
16
+ */
8
17
  export interface TreeRouterProps extends PossibleMeta {
9
18
  /** The tree of elements to match routes for. */
10
19
  readonly tree: TreeElement;
@@ -16,10 +25,16 @@ export interface TreeRouterProps extends PossibleMeta {
16
25
  }
17
26
  /**
18
27
  * Resolve a URL path to a tree element and render it as a full page.
28
+ *
19
29
  * - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
20
30
  * - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
21
31
  * - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
22
- * - Throws `NotFoundError` if no element matches and no `fallback` is given.
23
32
  * - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
33
+ *
34
+ * @param props The `tree` to route, an optional `fallback`, and app meta.
35
+ * @returns The resolved element rendered as a page, or the `fallback`.
36
+ * @throws NotFoundError When no element matches the URL and no `fallback` is given.
37
+ * @example <TreeRouter tree={tree} />
38
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
24
39
  */
25
40
  export declare function TreeRouter({ tree, fallback, ...meta }: TreeRouterProps): ReactNode;
@@ -5,18 +5,28 @@ import { createMapper } from "../misc/Mapper.js";
5
5
  import { MetaContext, requireMetaURL } from "../misc/MetaContext.js";
6
6
  import { TreeProvider, useTreeMap } from "./TreeContext.js";
7
7
  import { TreePage } from "./TreePage.js";
8
- /** Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override. */
8
+ /**
9
+ * Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
12
+ */
9
13
  export const [TreeRouterMapping, TreeRouterMapper] = createMapper({
10
14
  "tree-element": TreePage,
11
15
  "tree-documentation": DocumentationPage,
12
16
  });
13
17
  /**
14
18
  * Resolve a URL path to a tree element and render it as a full page.
19
+ *
15
20
  * - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
16
21
  * - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
17
22
  * - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
18
- * - Throws `NotFoundError` if no element matches and no `fallback` is given.
19
23
  * - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
24
+ *
25
+ * @param props The `tree` to route, an optional `fallback`, and app meta.
26
+ * @returns The resolved element rendered as a page, or the `fallback`.
27
+ * @throws NotFoundError When no element matches the URL and no `fallback` is given.
28
+ * @example <TreeRouter tree={tree} />
29
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
20
30
  */
21
31
  export function TreeRouter({ tree, fallback, ...meta }) {
22
32
  const { path, ...combined } = requireMetaURL(meta);
@@ -9,12 +9,21 @@ import type { PossibleMeta } from "../util/index.js";
9
9
  import { TreeProvider, useTreeMap } from "./TreeContext.js";
10
10
  import { TreePage } from "./TreePage.js";
11
11
 
12
- /** Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override. */
12
+ /**
13
+ * Mapping + Mapper pair for tree routers — wrap children in `<TreeRouterMapping>` to override the per-type page renderers.
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterMapping
16
+ */
13
17
  export const [TreeRouterMapping, TreeRouterMapper] = createMapper({
14
18
  "tree-element": TreePage,
15
19
  "tree-documentation": DocumentationPage,
16
20
  });
17
21
 
22
+ /**
23
+ * Props for the `TreeRouter` component — the tree to route plus an optional fallback and app meta.
24
+ *
25
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouterProps
26
+ */
18
27
  export interface TreeRouterProps extends PossibleMeta {
19
28
  /** The tree of elements to match routes for. */
20
29
  readonly tree: TreeElement;
@@ -28,11 +37,17 @@ export interface TreeRouterProps extends PossibleMeta {
28
37
 
29
38
  /**
30
39
  * Resolve a URL path to a tree element and render it as a full page.
40
+ *
31
41
  * - Flattens the tree once (via `<TreeProvider>`) into a `path` → element map, then resolves the current URL with a single `map.get(path)`.
32
42
  * - `/` renders the root itself; deeper paths render the matching descendant (composite module names like `/util/string` resolve for free — they're whole keys in the map).
33
43
  * - The resolved element is already stamped with its canonical `path`, so the page and its cards link straight to their own paths — nothing needs threading.
34
- * - Throws `NotFoundError` if no element matches and no `fallback` is given.
35
44
  * - To override the renderer for a specific element type, wrap in `<TreeRouterMapping mapping={…}>`.
45
+ *
46
+ * @param props The `tree` to route, an optional `fallback`, and app meta.
47
+ * @returns The resolved element rendered as a page, or the `fallback`.
48
+ * @throws NotFoundError When no element matches the URL and no `fallback` is given.
49
+ * @example <TreeRouter tree={tree} />
50
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeRouter/TreeRouter
36
51
  */
37
52
  export function TreeRouter({ tree, fallback, ...meta }: TreeRouterProps): ReactNode {
38
53
  const { path, ...combined } = requireMetaURL(meta);
@@ -1,6 +1,11 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { AbsolutePath } from "../../util/path.js";
3
3
  import type { TreeElement } from "../../util/tree.js";
4
+ /**
5
+ * Props for the `TreeSidebar` component — the root tree element plus its URL path.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebarProps
8
+ */
4
9
  export interface TreeSidebarProps {
5
10
  /** Root element of the tree. */
6
11
  readonly tree: TreeElement;
@@ -9,8 +14,14 @@ export interface TreeSidebarProps {
9
14
  }
10
15
  /**
11
16
  * Sidebar built from a tree element.
17
+ *
12
18
  * - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
13
19
  * - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
14
20
  * - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
21
+ *
22
+ * @param props The root `tree` element and optional root `path`.
23
+ * @returns A `<Menu>` with a home link plus the root's children as navigation items.
24
+ * @example <TreeSidebar tree={tree} />
25
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
15
26
  */
16
27
  export declare function TreeSidebar({ tree, path }: TreeSidebarProps): ReactNode;
@@ -4,9 +4,15 @@ import { Menu, MenuItem } from "../menu/Menu.js";
4
4
  import { matchMenuElement, TreeMenuMapper } from "./TreeMenu.js";
5
5
  /**
6
6
  * Sidebar built from a tree element.
7
+ *
7
8
  * - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
8
9
  * - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
9
10
  * - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
11
+ *
12
+ * @param props The root `tree` element and optional root `path`.
13
+ * @returns A `<Menu>` with a home link plus the root's children as navigation items.
14
+ * @example <TreeSidebar tree={tree} />
15
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
10
16
  */
11
17
  export function TreeSidebar({ tree, path = "/" }) {
12
18
  return (_jsxs(Menu, { children: [_jsx(MenuItem, { href: path, children: tree.props.title ?? tree.props.name }), _jsx(TreeMenuMapper, { path: path, children: filterElements(tree.props.children, matchMenuElement) })] }));
@@ -5,6 +5,11 @@ import type { TreeElement } from "../../util/tree.js";
5
5
  import { Menu, MenuItem } from "../menu/Menu.js";
6
6
  import { matchMenuElement, TreeMenuMapper } from "./TreeMenu.js";
7
7
 
8
+ /**
9
+ * Props for the `TreeSidebar` component — the root tree element plus its URL path.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebarProps
12
+ */
8
13
  export interface TreeSidebarProps {
9
14
  /** Root element of the tree. */
10
15
  readonly tree: TreeElement;
@@ -14,9 +19,15 @@ export interface TreeSidebarProps {
14
19
 
15
20
  /**
16
21
  * Sidebar built from a tree element.
22
+ *
17
23
  * - Renders a single "home" `<MenuItem>` for the root element itself, then the root's children as a `<TreeMenuMapper>` underneath.
18
24
  * - The home link uses `path` as its href (defaulting to `/`). The children's hrefs are computed by appending their `name` to the root's path.
19
25
  * - To customise child renderers wrap in `<TreeMenuMapping mapping={…}>` (same context as `<TreeMenu>`).
26
+ *
27
+ * @param props The root `tree` element and optional root `path`.
28
+ * @returns A `<Menu>` with a home link plus the root's children as navigation items.
29
+ * @example <TreeSidebar tree={tree} />
30
+ * @see https://dhoulb.github.io/shelving/ui/tree/TreeSidebar/TreeSidebar
20
31
  */
21
32
  export function TreeSidebar({ tree, path = "/" as AbsolutePath }: TreeSidebarProps): ReactNode {
22
33
  return (
@@ -1,6 +1,18 @@
1
1
  import { type Context } from "react";
2
2
  import type { AnyCaller } from "../../util/function.js";
3
- /** Use the value of a React `Context`, or throw `RequiredError` if the context was unset. */
3
+ /**
4
+ * Use the value of a React `Context`, or throw `RequiredError` if the context was unset.
5
+ *
6
+ * - Reads the context with React's `use()`, so it must be called inside a component or hook.
7
+ * - Treats both `null` and `undefined` as "unset" and throws, naming the context's `displayName` in the message.
8
+ *
9
+ * @param context The React `Context` to read the current value of.
10
+ * @param caller Function to attribute the thrown `RequiredError` to (defaults to `requireContext`).
11
+ * @returns The current context value, guaranteed non-nullish.
12
+ * @throws RequiredError If the context value is `null` or `undefined` (i.e. used outside its provider).
13
+ * @example const theme = requireContext(ThemeContext);
14
+ * @see https://dhoulb.github.io/shelving/ui/util/context/requireContext
15
+ */
4
16
  export declare function requireContext<T>(context: Context<T | null>, caller?: AnyCaller): T;
5
17
  export declare function requireContext<T>(context: Context<T | undefined>, caller?: AnyCaller): T;
6
18
  export declare function requireContext<T>(context: Context<T>, caller?: AnyCaller): T;
@@ -3,7 +3,19 @@ import { RequiredError } from "../../error/RequiredError.js";
3
3
  import type { AnyCaller } from "../../util/function.js";
4
4
  import { type Nullish, notNullish } from "../../util/null.js";
5
5
 
6
- /** Use the value of a React `Context`, or throw `RequiredError` if the context was unset. */
6
+ /**
7
+ * Use the value of a React `Context`, or throw `RequiredError` if the context was unset.
8
+ *
9
+ * - Reads the context with React's `use()`, so it must be called inside a component or hook.
10
+ * - Treats both `null` and `undefined` as "unset" and throws, naming the context's `displayName` in the message.
11
+ *
12
+ * @param context The React `Context` to read the current value of.
13
+ * @param caller Function to attribute the thrown `RequiredError` to (defaults to `requireContext`).
14
+ * @returns The current context value, guaranteed non-nullish.
15
+ * @throws RequiredError If the context value is `null` or `undefined` (i.e. used outside its provider).
16
+ * @example const theme = requireContext(ThemeContext);
17
+ * @see https://dhoulb.github.io/shelving/ui/util/context/requireContext
18
+ */
7
19
  export function requireContext<T>(context: Context<T | null>, caller?: AnyCaller): T;
8
20
  export function requireContext<T>(context: Context<T | undefined>, caller?: AnyCaller): T;
9
21
  export function requireContext<T>(context: Context<T>, caller?: AnyCaller): T;
package/ui/util/css.d.ts CHANGED
@@ -1,24 +1,33 @@
1
1
  import { type ImmutableDictionary } from "../../util/dictionary.js";
2
2
  /**
3
- * Set of classnames that can be joined.
3
+ * Set of classnames that can be joined into a single `className` string.
4
4
  *
5
5
  * - `string` — used directly as a classname.
6
6
  * - `null` or `undefined` — ignored.
7
7
  * - Array of classnames — recursively parsed.
8
+ *
9
+ * @see https://dhoulb.github.io/shelving/ui/util/css/Classes
8
10
  */
9
11
  export type Classes = string | null | undefined | readonly Classes[] | Variants;
10
12
  /**
11
- * Variants list is a dictionary of booleans.
13
+ * Dictionary of boolean variant flags whose `true`-valued keys become class names.
14
+ *
12
15
  * - `true` or `false` item values in dictionaries use the string `key` of the item if the value is `true`, or ignore it if the value is falsy.
13
16
  * - Anything that is not `true` has no effect, so other values can be passed in and will be ignored. This means you can pass the entire `props` into this and it'll work just fine.
14
17
  *
15
18
  * Typed as `object` (not `Data`/`Record<string, unknown>`) so plain `interface` types are accepted —
16
19
  * interfaces lack an implicit string index signature, so they don't satisfy index-signature types.
20
+ *
21
+ * @see https://dhoulb.github.io/shelving/ui/util/css/Variants
17
22
  */
18
23
  export interface Variants {
19
24
  readonly [key: string]: boolean;
20
25
  }
21
- /** CSS modules mapping of local class names to hashed runtime class names. */
26
+ /**
27
+ * CSS modules mapping of local class names to hashed runtime class names.
28
+ *
29
+ * @see https://dhoulb.github.io/shelving/ui/util/css/CSSModule
30
+ */
22
31
  export type CSSModule = ImmutableDictionary<string | undefined>;
23
32
  /**
24
33
  * Parse a list of possible `className` strings and join them into a single string.
@@ -26,6 +35,8 @@ export type CSSModule = ImmutableDictionary<string | undefined>;
26
35
  *
27
36
  * @param classes The input set of classes to merge.
28
37
  * @returns The merged string classname.
38
+ * @example getClass("button", { active: true, disabled: false }) // "button active"
39
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getClass
29
40
  */
30
41
  export declare function getClass(...classes: unknown[]): string;
31
42
  /**
@@ -37,6 +48,8 @@ export declare function getClass(...classes: unknown[]): string;
37
48
  * - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
38
49
  *
39
50
  * @param classes Class keys/values to merge.
40
- * @returns The merged string classname.
51
+ * @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
52
+ * @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
53
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
41
54
  */
42
55
  export declare function getModuleClass(module: CSSModule | string, ...classes: unknown[]): string | undefined;
package/ui/util/css.js CHANGED
@@ -6,6 +6,8 @@ import { getDictionaryItems, isDictionary } from "../../util/dictionary.js";
6
6
  *
7
7
  * @param classes The input set of classes to merge.
8
8
  * @returns The merged string classname.
9
+ * @example getClass("button", { active: true, disabled: false }) // "button active"
10
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getClass
9
11
  */
10
12
  export function getClass(...classes) {
11
13
  return Array.from(getClasses(classes)).join(" ");
@@ -41,7 +43,9 @@ function* getClasses(classes) {
41
43
  * - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
42
44
  *
43
45
  * @param classes Class keys/values to merge.
44
- * @returns The merged string classname.
46
+ * @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
47
+ * @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
48
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
45
49
  */
46
50
  export function getModuleClass(module, ...classes) {
47
51
  if (isDictionary(module))
package/ui/util/css.ts CHANGED
@@ -2,27 +2,36 @@ import { isArray } from "../../util/array.js";
2
2
  import { getDictionaryItems, type ImmutableDictionary, isDictionary } from "../../util/dictionary.js";
3
3
 
4
4
  /**
5
- * Set of classnames that can be joined.
5
+ * Set of classnames that can be joined into a single `className` string.
6
6
  *
7
7
  * - `string` — used directly as a classname.
8
8
  * - `null` or `undefined` — ignored.
9
9
  * - Array of classnames — recursively parsed.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/ui/util/css/Classes
10
12
  */
11
13
  export type Classes = string | null | undefined | readonly Classes[] | Variants;
12
14
 
13
15
  /**
14
- * Variants list is a dictionary of booleans.
16
+ * Dictionary of boolean variant flags whose `true`-valued keys become class names.
17
+ *
15
18
  * - `true` or `false` item values in dictionaries use the string `key` of the item if the value is `true`, or ignore it if the value is falsy.
16
19
  * - Anything that is not `true` has no effect, so other values can be passed in and will be ignored. This means you can pass the entire `props` into this and it'll work just fine.
17
20
  *
18
21
  * Typed as `object` (not `Data`/`Record<string, unknown>`) so plain `interface` types are accepted —
19
22
  * interfaces lack an implicit string index signature, so they don't satisfy index-signature types.
23
+ *
24
+ * @see https://dhoulb.github.io/shelving/ui/util/css/Variants
20
25
  */
21
26
  export interface Variants {
22
27
  readonly [key: string]: boolean;
23
28
  }
24
29
 
25
- /** CSS modules mapping of local class names to hashed runtime class names. */
30
+ /**
31
+ * CSS modules mapping of local class names to hashed runtime class names.
32
+ *
33
+ * @see https://dhoulb.github.io/shelving/ui/util/css/CSSModule
34
+ */
26
35
  export type CSSModule = ImmutableDictionary<string | undefined>;
27
36
 
28
37
  /**
@@ -31,6 +40,8 @@ export type CSSModule = ImmutableDictionary<string | undefined>;
31
40
  *
32
41
  * @param classes The input set of classes to merge.
33
42
  * @returns The merged string classname.
43
+ * @example getClass("button", { active: true, disabled: false }) // "button active"
44
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getClass
34
45
  */
35
46
  export function getClass(...classes: unknown[]): string {
36
47
  return Array.from(getClasses(classes)).join(" ");
@@ -67,7 +78,9 @@ function* getClasses(classes: unknown): Iterable<string> {
67
78
  * - This allows this situation to be handled gracefully and classes will be silently ignored in this environment.
68
79
  *
69
80
  * @param classes Class keys/values to merge.
70
- * @returns The merged string classname.
81
+ * @returns The merged string classname, or `undefined` when `module` is a string (unprocessed CSS module).
82
+ * @example getModuleClass(styles, "base", { active: true }) // "base_x7q active_p2k"
83
+ * @see https://dhoulb.github.io/shelving/ui/util/css/getModuleClass
71
84
  */
72
85
  export function getModuleClass(module: CSSModule | string, ...classes: unknown[]): string | undefined {
73
86
  if (isDictionary(module)) return Array.from(getModuleClasses(module, classes)).join(" ");
@@ -1,2 +1,10 @@
1
- /** Call `event.preventDefault()` on an event. */
1
+ /**
2
+ * Call `event.preventDefault()` on an event.
3
+ *
4
+ * - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
5
+ *
6
+ * @param e The event to suppress the default action of.
7
+ * @example <form onSubmit={eventPreventDefault}>…</form>
8
+ * @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
9
+ */
2
10
  export declare function eventPreventDefault(e: Pick<Event, "preventDefault">): void;
package/ui/util/event.js CHANGED
@@ -1,4 +1,12 @@
1
- /** Call `event.preventDefault()` on an event. */
1
+ /**
2
+ * Call `event.preventDefault()` on an event.
3
+ *
4
+ * - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
5
+ *
6
+ * @param e The event to suppress the default action of.
7
+ * @example <form onSubmit={eventPreventDefault}>…</form>
8
+ * @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
9
+ */
2
10
  export function eventPreventDefault(e) {
3
11
  e.preventDefault();
4
12
  }
package/ui/util/event.ts CHANGED
@@ -1,4 +1,12 @@
1
- /** Call `event.preventDefault()` on an event. */
1
+ /**
2
+ * Call `event.preventDefault()` on an event.
3
+ *
4
+ * - Handy as a ready-made event handler, e.g. `onSubmit={eventPreventDefault}`.
5
+ *
6
+ * @param e The event to suppress the default action of.
7
+ * @example <form onSubmit={eventPreventDefault}>…</form>
8
+ * @see https://dhoulb.github.io/shelving/ui/util/event/eventPreventDefault
9
+ */
2
10
  export function eventPreventDefault(e: Pick<Event, "preventDefault">) {
3
11
  e.preventDefault();
4
12
  }
@@ -1,14 +1,33 @@
1
1
  import type { Nullish } from "../../util/null.js";
2
- /** Focus on the first focusable element inside an element. */
2
+ /**
3
+ * Focus on the first focusable element inside an element.
4
+ *
5
+ * - No-op for nullish input or non-`HTMLElement` nodes, and when the element contains nothing focusable.
6
+ *
7
+ * @param el The container element to focus the first focusable descendant of.
8
+ * @example focusFirstFocusable(dialogRef.current);
9
+ * @see https://dhoulb.github.io/shelving/ui/util/focus/focusFirstFocusable
10
+ */
3
11
  export declare function focusFirstFocusable(el: Nullish<Element>): void;
4
12
  /**
5
- * Loop focus inside an element.
6
- * - Attempts to blur outside the `from` element refocus back on the first focusable element inside the element.
13
+ * Loop focus inside an element so it can't escape — refocus the first focusable child when focus moves out.
14
+ *
15
+ * - When `nextTarget` falls outside `element`, focus is pulled back to the first focusable element inside it (a simple focus trap).
16
+ *
17
+ * @param element The container to keep focus within.
18
+ * @param nextTarget The element focus is moving to.
19
+ * @example loopFocus(dialog, document.activeElement);
20
+ * @see https://dhoulb.github.io/shelving/ui/util/focus/loopFocus
7
21
  */
8
22
  export declare function loopFocus(element: Nullish<Element>, nextTarget: Nullish<Element>): void;
9
23
  /**
10
- * Loop focus inside an element in response to a `blur` event.
11
- * - Attempts to blur outside the `currentTarget` element refocus back on the first focusable element inside the element.
24
+ * Loop focus inside an element in response to a `blur` event — a ready-made `onBlur` handler that traps focus.
25
+ *
26
+ * - Pulls focus back to the first focusable child when it blurs outside the event's `currentTarget`.
27
+ *
28
+ * @param event The `blur` event, providing `currentTarget` (the container) and `relatedTarget` (the new focus target).
29
+ * @example <div onBlur={eventLoopFocus}>…</div>
30
+ * @see https://dhoulb.github.io/shelving/ui/util/focus/eventLoopFocus
12
31
  */
13
32
  export declare function eventLoopFocus({ currentTarget, relatedTarget }: {
14
33
  currentTarget: Element;