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,13 +5,24 @@ import type { OptionalChildProps } from "../util/props.js";
5
5
  import CENTERED_LAYOUT_CSS from "./CenteredLayout.module.css";
6
6
  import { LAYOUT_CLASS } from "./Layout.js";
7
7
 
8
+ /**
9
+ * Props for `<CenteredLayout>` — optional `children` and a `fullWidth` flag to drop the max-width.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/ui/layout/CenteredLayout/CenteredLayoutProps
12
+ */
8
13
  export interface CenteredLayoutProps extends OptionalChildProps {
9
14
  fullWidth?: boolean;
10
15
  }
11
16
 
12
17
  /**
13
- * Layout that puts the content in the center of the screen with no header/footer and a narrow max-width.
18
+ * Layout that centres its content with no header/footer and a narrow max-width.
14
19
  * - Used for e.g. login/register/error/form pages where the content is the only focus.
20
+ *
21
+ * @param children The content to centre.
22
+ * @param fullWidth Drop the narrow max-width and let content fill the width (defaults to `false`).
23
+ * @returns The centred layout element.
24
+ * @example <CenteredLayout><LoginForm /></CenteredLayout>
25
+ * @see https://dhoulb.github.io/shelving/ui/layout/CenteredLayout/CenteredLayout
15
26
  */
16
27
  export function CenteredLayout({ children, fullWidth = false }: CenteredLayoutProps): ReactElement {
17
28
  const { path } = requireMetaURL();
@@ -1,9 +1,18 @@
1
- /** Resolved `.layout` class — for components that want to compose the layout's padding/scroll/safe-area behaviour onto their own element (e.g. `CenteredLayout`). */
1
+ /**
2
+ * Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
3
+ *
4
+ * @example <main className={LAYOUT_CLASS}>…</main>
5
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
6
+ */
2
7
  export declare const LAYOUT_CLASS: string | undefined;
3
8
  /**
4
- * Adapt the property to the dynamic height of the view port when the keyboard pops up.
5
- * - This dynamically updates the value we use as the "safe area"
9
+ * Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
10
+ *
11
+ * - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
6
12
  *
13
+ * @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
7
14
  * @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
15
+ * @example useEffect(useSafeKeyboardArea, []);
16
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
8
17
  */
9
18
  export declare function useSafeKeyboardArea(): (() => void) | undefined;
@@ -1,12 +1,21 @@
1
1
  import { getModuleClass } from "../util/css.js";
2
2
  import styles from "./Layout.module.css";
3
- /** Resolved `.layout` class — for components that want to compose the layout's padding/scroll/safe-area behaviour onto their own element (e.g. `CenteredLayout`). */
3
+ /**
4
+ * Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
5
+ *
6
+ * @example <main className={LAYOUT_CLASS}>…</main>
7
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
8
+ */
4
9
  export const LAYOUT_CLASS = getModuleClass(styles, "layout");
5
10
  /**
6
- * Adapt the property to the dynamic height of the view port when the keyboard pops up.
7
- * - This dynamically updates the value we use as the "safe area"
11
+ * Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
12
+ *
13
+ * - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
8
14
  *
15
+ * @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
9
16
  * @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
17
+ * @example useEffect(useSafeKeyboardArea, []);
18
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
10
19
  */
11
20
  export function useSafeKeyboardArea() {
12
21
  const vv = window.visualViewport;
@@ -1,14 +1,23 @@
1
1
  import { getModuleClass } from "../util/css.js";
2
2
  import styles from "./Layout.module.css";
3
3
 
4
- /** Resolved `.layout` class — for components that want to compose the layout's padding/scroll/safe-area behaviour onto their own element (e.g. `CenteredLayout`). */
4
+ /**
5
+ * Resolved `.layout` class for composing the layout's padding/scroll/safe-area behaviour onto a custom element.
6
+ *
7
+ * @example <main className={LAYOUT_CLASS}>…</main>
8
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/LAYOUT_CLASS
9
+ */
5
10
  export const LAYOUT_CLASS = getModuleClass(styles, "layout");
6
11
 
7
12
  /**
8
- * Adapt the property to the dynamic height of the view port when the keyboard pops up.
9
- * - This dynamically updates the value we use as the "safe area"
13
+ * Track the dynamic viewport height so layout safe-area insets follow the on-screen keyboard.
14
+ *
15
+ * - Writes a `--layout-inset-bottom` custom property reflecting the space hidden behind the keyboard.
10
16
  *
17
+ * @returns A cleanup function that removes the listeners and property, or `undefined` when `visualViewport` is unavailable.
11
18
  * @todo This can be removed once Safari iOS supports interactive-widget viewport property. https://caniuse.com/mdn-html_elements_meta_name_viewport_interactive-widget
19
+ * @example useEffect(useSafeKeyboardArea, []);
20
+ * @see https://dhoulb.github.io/shelving/ui/layout/Layout/useSafeKeyboardArea
12
21
  */
13
22
  export function useSafeKeyboardArea() {
14
23
  const vv = window.visualViewport;
@@ -1,5 +1,10 @@
1
1
  import { type ReactElement, type ReactNode } from "react";
2
2
  import type { OptionalChildProps } from "../util/props.js";
3
+ /**
4
+ * Props for `<SidebarLayout>` — the `sidebar` column content, main `children`, and a `right` placement flag.
5
+ *
6
+ * @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayoutProps
7
+ */
3
8
  export interface SidebarLayoutProps extends OptionalChildProps {
4
9
  /** Content rendered in the fixed-width side column. */
5
10
  sidebar: ReactNode;
@@ -13,5 +18,12 @@ export interface SidebarLayoutProps extends OptionalChildProps {
13
18
  * - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
14
19
  * - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
15
20
  * - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
21
+ *
22
+ * @param sidebar The side-column content, rendered inside a `<nav>`.
23
+ * @param children The main scrollable content.
24
+ * @param right Render the sidebar on the right rather than the left (defaults to `false`).
25
+ * @returns The sidebar layout element.
26
+ * @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
27
+ * @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
16
28
  */
17
29
  export declare function SidebarLayout({ sidebar, children, right }: SidebarLayoutProps): ReactElement;
@@ -13,6 +13,13 @@ import SIDEBAR_LAYOUT_CSS from "./SidebarLayout.module.css";
13
13
  * - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
14
14
  * - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
15
15
  * - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
16
+ *
17
+ * @param sidebar The side-column content, rendered inside a `<nav>`.
18
+ * @param children The main scrollable content.
19
+ * @param right Render the sidebar on the right rather than the left (defaults to `false`).
20
+ * @returns The sidebar layout element.
21
+ * @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
22
+ * @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
16
23
  */
17
24
  export function SidebarLayout({ sidebar, children, right = false }) {
18
25
  const { path } = requireMetaURL();
@@ -7,6 +7,11 @@ import type { OptionalChildProps } from "../util/props.js";
7
7
  import { LAYOUT_CLASS } from "./Layout.js";
8
8
  import SIDEBAR_LAYOUT_CSS from "./SidebarLayout.module.css";
9
9
 
10
+ /**
11
+ * Props for `<SidebarLayout>` — the `sidebar` column content, main `children`, and a `right` placement flag.
12
+ *
13
+ * @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayoutProps
14
+ */
10
15
  export interface SidebarLayoutProps extends OptionalChildProps {
11
16
  /** Content rendered in the fixed-width side column. */
12
17
  sidebar: ReactNode;
@@ -21,6 +26,13 @@ export interface SidebarLayoutProps extends OptionalChildProps {
21
26
  * - While the drawer is open an overlay dims the rest of the page; clicking the overlay closes the drawer.
22
27
  * - Inside a `<Navigation>` the drawer closes itself whenever the route changes (e.g. tapping a sidebar link).
23
28
  * - Use the `--sidebar-layout-width`, `--sidebar-layout-bg`, `--sidebar-layout-border`, and `--sidebar-layout-color-border` custom properties to override defaults.
29
+ *
30
+ * @param sidebar The side-column content, rendered inside a `<nav>`.
31
+ * @param children The main scrollable content.
32
+ * @param right Render the sidebar on the right rather than the left (defaults to `false`).
33
+ * @returns The sidebar layout element.
34
+ * @example <SidebarLayout sidebar={<Menu />}><Page /></SidebarLayout>
35
+ * @see https://dhoulb.github.io/shelving/ui/layout/SidebarLayout/SidebarLayout
24
36
  */
25
37
  export function SidebarLayout({ sidebar, children, right = false }: SidebarLayoutProps): ReactElement {
26
38
  const { path } = requireMetaURL();
package/ui/menu/Menu.d.ts CHANGED
@@ -1,14 +1,29 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { type ClickableProps } from "../form/Clickable.js";
3
3
  import type { OptionalChildProps } from "../util/props.js";
4
+ /**
5
+ * Props for `<Menu>` — optional `<MenuItem>` `children`.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuProps
8
+ */
4
9
  export interface MenuProps extends OptionalChildProps {
5
10
  }
6
11
  /**
7
12
  * A `<menu>` list of `<MenuItem>` children.
8
13
  * - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
9
14
  * - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
15
+ *
16
+ * @param children The `<MenuItem>` entries to list.
17
+ * @returns The menu element.
18
+ * @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
19
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
10
20
  */
11
21
  export declare function Menu({ children }: MenuProps): ReactNode;
22
+ /**
23
+ * Props for `<MenuItem>` — `<Clickable>` props plus `children` whose first node is the label and the rest the submenu.
24
+ *
25
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItemProps
26
+ */
12
27
  export interface MenuItemProps extends ClickableProps {
13
28
  /**
14
29
  * The first child becomes the link label (rendered inside the `<a>`).
@@ -20,5 +35,12 @@ export interface MenuItemProps extends ClickableProps {
20
35
  * A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
21
36
  * - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
22
37
  * - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
38
+ *
39
+ * @param href The link target, used to compute `active`/`proud` against the current URL.
40
+ * @param children The label (first node) and optional submenu (remaining nodes).
41
+ * @param props Additional `<Clickable>` props.
42
+ * @returns The menu item element.
43
+ * @example <MenuItem href="/settings">Settings</MenuItem>
44
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
23
45
  */
24
46
  export declare function MenuItem({ href, children, ...props }: MenuItemProps): ReactNode;
package/ui/menu/Menu.js CHANGED
@@ -14,6 +14,11 @@ const MENU_ACTIVE_CLASS = getModuleClass(MENU_CSS, "active");
14
14
  * A `<menu>` list of `<MenuItem>` children.
15
15
  * - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
16
16
  * - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
17
+ *
18
+ * @param children The `<MenuItem>` entries to list.
19
+ * @returns The menu element.
20
+ * @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
21
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
17
22
  */
18
23
  export function Menu({ children }) {
19
24
  return _jsx("menu", { className: MENU_CLASS, children: children });
@@ -22,6 +27,13 @@ export function Menu({ children }) {
22
27
  * A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
23
28
  * - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
24
29
  * - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
30
+ *
31
+ * @param href The link target, used to compute `active`/`proud` against the current URL.
32
+ * @param children The label (first node) and optional submenu (remaining nodes).
33
+ * @param props Additional `<Clickable>` props.
34
+ * @returns The menu item element.
35
+ * @example <MenuItem href="/settings">Settings</MenuItem>
36
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
25
37
  */
26
38
  export function MenuItem({ href, children, ...props }) {
27
39
  const { url, root } = requireMeta();
package/ui/menu/Menu.tsx CHANGED
@@ -13,17 +13,32 @@ const MENU_LINK_CLASS = getModuleClass(MENU_CSS, "link");
13
13
  const MENU_PROUD_CLASS = getModuleClass(MENU_CSS, "proud");
14
14
  const MENU_ACTIVE_CLASS = getModuleClass(MENU_CSS, "active");
15
15
 
16
+ /**
17
+ * Props for `<Menu>` — optional `<MenuItem>` `children`.
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuProps
20
+ */
16
21
  export interface MenuProps extends OptionalChildProps {}
17
22
 
18
23
  /**
19
24
  * A `<menu>` list of `<MenuItem>` children.
20
25
  * - Renders as a bare `<menu>` element — semantically equivalent to `<ul>` per HTML spec but more meaningful for menu contexts. Place inside a `<nav>` (or use the sidebar-style nav at the layout level) if a navigation landmark is needed.
21
26
  * - Nested `<Menu>` instances (typically inside a `<MenuItem>`) get indented via the `.menu .menu` CSS rule.
27
+ *
28
+ * @param children The `<MenuItem>` entries to list.
29
+ * @returns The menu element.
30
+ * @example <Menu><MenuItem href="/home">Home</MenuItem></Menu>
31
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/Menu
22
32
  */
23
33
  export function Menu({ children }: MenuProps): ReactNode {
24
34
  return <menu className={MENU_CLASS}>{children}</menu>;
25
35
  }
26
36
 
37
+ /**
38
+ * Props for `<MenuItem>` — `<Clickable>` props plus `children` whose first node is the label and the rest the submenu.
39
+ *
40
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItemProps
41
+ */
27
42
  export interface MenuItemProps extends ClickableProps {
28
43
  /**
29
44
  * The first child becomes the link label (rendered inside the `<a>`).
@@ -36,6 +51,13 @@ export interface MenuItemProps extends ClickableProps {
36
51
  * A `<li>` containing an `<a>` link, plus optional submenu content shown when this item is "proud".
37
52
  * - Reads the current page URL from `<Meta>` and computes `active` / `proud` against its own `href`.
38
53
  * - Splits `children` into `[label, ...after]`: label goes inside the `<a>`; `after` is rendered as siblings below it, only when proud.
54
+ *
55
+ * @param href The link target, used to compute `active`/`proud` against the current URL.
56
+ * @param children The label (first node) and optional submenu (remaining nodes).
57
+ * @param props Additional `<Clickable>` props.
58
+ * @returns The menu item element.
59
+ * @example <MenuItem href="/settings">Settings</MenuItem>
60
+ * @see https://dhoulb.github.io/shelving/ui/menu/Menu/MenuItem
39
61
  */
40
62
  export function MenuItem({ href, children, ...props }: MenuItemProps): ReactNode {
41
63
  const { url, root } = requireMeta();
@@ -2,12 +2,38 @@ import { Component, type ReactElement, type ReactNode } from "react";
2
2
  import type { Callback } from "../../util/function.js";
3
3
  import { type ButtonVariants } from "../form/Button.js";
4
4
  import type { ChildProps, OptionalChildProps } from "../util/props.js";
5
+ /**
6
+ * Props for `<RetryButton>` — `<Button>` variants plus optional `children` to override the default "Retry" label.
7
+ *
8
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButtonProps
9
+ */
5
10
  export interface RetryButtonProps extends ButtonVariants, OptionalChildProps {
6
11
  }
12
+ /**
13
+ * Button that retries the nearest `<Catcher>` error boundary when clicked.
14
+ *
15
+ * - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
16
+ * - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
17
+ *
18
+ * @param props `<Button>` variants and optional `children` for the label.
19
+ * @returns The retry button, or `null` when not inside a `<Catcher>`.
20
+ * @example <RetryButton small />
21
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
22
+ */
7
23
  export declare function RetryButton({ children, ...props }: RetryButtonProps): ReactElement | null;
24
+ /**
25
+ * Props for a component that renders a caught error `reason`.
26
+ *
27
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorComponentProps
28
+ */
8
29
  export interface ErrorComponentProps {
9
30
  reason: unknown;
10
31
  }
32
+ /**
33
+ * Props for `<Catcher>` — the `children` to guard plus the `as` component used to render any caught error.
34
+ *
35
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/CatcherProps
36
+ */
11
37
  export interface CatcherProps extends ChildProps {
12
38
  /** Component to render an error (defaults to `<ErrorNotice />`) */
13
39
  as: (props: ErrorComponentProps) => ReactElement;
@@ -17,8 +43,14 @@ type CatcherState = {
17
43
  reason: unknown;
18
44
  };
19
45
  /**
20
- * React component that provides an Error Boundary.
21
- * If an error occurs in any component under this, a general error will be shown to the user.
46
+ * React error boundary that renders a fallback component when any descendant throws.
47
+ *
48
+ * - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
49
+ * - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
50
+ *
51
+ * @example <Catcher><RiskyComponent /></Catcher>
52
+ * @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
53
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
22
54
  */
23
55
  export declare class Catcher extends Component<CatcherProps, CatcherState> {
24
56
  static defaultProps: Pick<CatcherProps, "as">;
@@ -27,16 +59,56 @@ export declare class Catcher extends Component<CatcherProps, CatcherState> {
27
59
  static getDerivedStateFromError(reason: unknown): CatcherState;
28
60
  render(): ReactNode;
29
61
  }
62
+ /**
63
+ * Props for `<PageCatcher>` — the page `children` to guard.
64
+ *
65
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcherProps
66
+ */
30
67
  export interface PageCatcherProps extends ChildProps {
31
68
  }
32
- /** Catch errors in a page. */
69
+ /**
70
+ * Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
71
+ *
72
+ * @param children The page content to guard.
73
+ * @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
74
+ * @example <PageCatcher><SettingsPage /></PageCatcher>
75
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
76
+ */
33
77
  export declare function PageCatcher({ children }: PageCatcherProps): ReactElement;
78
+ /**
79
+ * Props for `<ErrorNotice>` — the caught error `reason`.
80
+ *
81
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNoticeProps
82
+ */
34
83
  export interface ErrorNoticeProps extends ErrorComponentProps {
35
84
  }
36
- /** Output a `<Notice>` for an unknown error reason. */
85
+ /**
86
+ * Render a caught error as an inline `<Notice>` with a retry button.
87
+ *
88
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
89
+ *
90
+ * @param reason The caught error to display.
91
+ * @returns An error `<Notice>` containing the message and a `<RetryButton>`.
92
+ * @example <ErrorNotice reason={thrown} />
93
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
94
+ */
37
95
  export declare function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement;
96
+ /**
97
+ * Props for `<ErrorPage>` — the caught error `reason`.
98
+ *
99
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPageProps
100
+ */
38
101
  export interface ErrorPageProps extends ErrorComponentProps {
39
102
  }
40
- /** Output a `<Page>` with an error `<Card>` for an unknown error reason. */
103
+ /**
104
+ * Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
105
+ *
106
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
107
+ *
108
+ * @param reason The caught error to display.
109
+ * @returns A centered error page containing the message and a `<RetryButton>`.
110
+ * @example <ErrorPage reason={thrown} />
111
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
112
+ */
41
113
  export declare function ErrorPage({ reason }: ErrorPageProps): ReactElement;
42
114
  export {};
@@ -13,6 +13,17 @@ import { StatusIcon } from "./StatusIcon.js";
13
13
  const RetryContext = createContext(undefined);
14
14
  RetryContext.displayName = "RetryContext";
15
15
  const RETRY_CHILDREN = (_jsxs(_Fragment, { children: [_jsx(ArrowPathIcon, {}), "Retry"] }));
16
+ /**
17
+ * Button that retries the nearest `<Catcher>` error boundary when clicked.
18
+ *
19
+ * - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
20
+ * - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
21
+ *
22
+ * @param props `<Button>` variants and optional `children` for the label.
23
+ * @returns The retry button, or `null` when not inside a `<Catcher>`.
24
+ * @example <RetryButton small />
25
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
26
+ */
16
27
  export function RetryButton({ children = RETRY_CHILDREN, ...props }) {
17
28
  const retry = use(RetryContext);
18
29
  if (!retry)
@@ -20,8 +31,14 @@ export function RetryButton({ children = RETRY_CHILDREN, ...props }) {
20
31
  return (_jsx(Button, { onClick: retry, ...props, children: children }));
21
32
  }
22
33
  /**
23
- * React component that provides an Error Boundary.
24
- * If an error occurs in any component under this, a general error will be shown to the user.
34
+ * React error boundary that renders a fallback component when any descendant throws.
35
+ *
36
+ * - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
37
+ * - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
38
+ *
39
+ * @example <Catcher><RiskyComponent /></Catcher>
40
+ * @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
41
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
25
42
  */
26
43
  export class Catcher extends Component {
27
44
  static defaultProps = {
@@ -45,16 +62,41 @@ export class Catcher extends Component {
45
62
  return (_jsx(RetryContext, { value: retry, children: _jsx(ErrorComponent, { reason: reason }) }));
46
63
  }
47
64
  }
48
- /** Catch errors in a page. */
65
+ /**
66
+ * Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
67
+ *
68
+ * @param children The page content to guard.
69
+ * @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
70
+ * @example <PageCatcher><SettingsPage /></PageCatcher>
71
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
72
+ */
49
73
  export function PageCatcher({ children }) {
50
74
  return _jsx(Catcher, { as: ErrorPage, children: children });
51
75
  }
52
- /** Output a `<Notice>` for an unknown error reason. */
76
+ /**
77
+ * Render a caught error as an inline `<Notice>` with a retry button.
78
+ *
79
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
80
+ *
81
+ * @param reason The caught error to display.
82
+ * @returns An error `<Notice>` containing the message and a `<RetryButton>`.
83
+ * @example <ErrorNotice reason={thrown} />
84
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
85
+ */
53
86
  export function ErrorNotice({ reason }) {
54
87
  const message = getMessage(reason) ?? "Unknown error";
55
88
  return (_jsxs(Notice, { status: "error", children: [_jsx("p", { children: message }), _jsx(RetryButton, { small: true })] }));
56
89
  }
57
- /** Output a `<Page>` with an error `<Card>` for an unknown error reason. */
90
+ /**
91
+ * Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
92
+ *
93
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
94
+ *
95
+ * @param reason The caught error to display.
96
+ * @returns A centered error page containing the message and a `<RetryButton>`.
97
+ * @example <ErrorPage reason={thrown} />
98
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
99
+ */
58
100
  export function ErrorPage({ reason }) {
59
101
  const message = getMessage(reason) ?? "Unknown error";
60
102
  return (_jsx(Page, { title: "Error", children: _jsx(CenteredLayout, { children: _jsx(Card, { status: "error", children: _jsxs(Subheading, { children: [_jsxs(Row, { left: true, children: [_jsx(StatusIcon, { status: "error", size: "xlarge" }), " ", message] }), _jsx(RetryButton, {})] }) }) }) }));
@@ -15,6 +15,11 @@ import { StatusIcon } from "./StatusIcon.js";
15
15
  const RetryContext = createContext<Callback | undefined>(undefined);
16
16
  RetryContext.displayName = "RetryContext";
17
17
 
18
+ /**
19
+ * Props for `<RetryButton>` — `<Button>` variants plus optional `children` to override the default "Retry" label.
20
+ *
21
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButtonProps
22
+ */
18
23
  export interface RetryButtonProps extends ButtonVariants, OptionalChildProps {}
19
24
 
20
25
  const RETRY_CHILDREN = (
@@ -24,6 +29,17 @@ const RETRY_CHILDREN = (
24
29
  </>
25
30
  );
26
31
 
32
+ /**
33
+ * Button that retries the nearest `<Catcher>` error boundary when clicked.
34
+ *
35
+ * - Reads the retry callback from `<Catcher>`'s private context, so it renders `null` when there is no boundary above it to retry.
36
+ * - Defaults to an "Retry" label with a refresh icon; pass `children` to override.
37
+ *
38
+ * @param props `<Button>` variants and optional `children` for the label.
39
+ * @returns The retry button, or `null` when not inside a `<Catcher>`.
40
+ * @example <RetryButton small />
41
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/RetryButton
42
+ */
27
43
  export function RetryButton({ children = RETRY_CHILDREN, ...props }: RetryButtonProps): ReactElement | null {
28
44
  const retry = use(RetryContext);
29
45
  if (!retry) return null;
@@ -34,10 +50,20 @@ export function RetryButton({ children = RETRY_CHILDREN, ...props }: RetryButton
34
50
  );
35
51
  }
36
52
 
53
+ /**
54
+ * Props for a component that renders a caught error `reason`.
55
+ *
56
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorComponentProps
57
+ */
37
58
  export interface ErrorComponentProps {
38
59
  reason: unknown;
39
60
  }
40
61
 
62
+ /**
63
+ * Props for `<Catcher>` — the `children` to guard plus the `as` component used to render any caught error.
64
+ *
65
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/CatcherProps
66
+ */
41
67
  export interface CatcherProps extends ChildProps {
42
68
  /** Component to render an error (defaults to `<ErrorNotice />`) */
43
69
  as: (props: ErrorComponentProps) => ReactElement;
@@ -49,8 +75,14 @@ type CatcherState = {
49
75
  };
50
76
 
51
77
  /**
52
- * React component that provides an Error Boundary.
53
- * If an error occurs in any component under this, a general error will be shown to the user.
78
+ * React error boundary that renders a fallback component when any descendant throws.
79
+ *
80
+ * - Catches render-time errors below it and shows the `as` component (defaults to `<ErrorNotice>`) with the caught `reason`.
81
+ * - Provides a retry callback to descendant `<RetryButton>`s that clears the error and re-renders `children`.
82
+ *
83
+ * @example <Catcher><RiskyComponent /></Catcher>
84
+ * @example <Catcher as={ErrorPage}><RiskyComponent /></Catcher>
85
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/Catcher
54
86
  */
55
87
  export class Catcher extends Component<CatcherProps, CatcherState> {
56
88
  static defaultProps: Pick<CatcherProps, "as"> = {
@@ -78,16 +110,42 @@ export class Catcher extends Component<CatcherProps, CatcherState> {
78
110
  }
79
111
  }
80
112
 
113
+ /**
114
+ * Props for `<PageCatcher>` — the page `children` to guard.
115
+ *
116
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcherProps
117
+ */
81
118
  export interface PageCatcherProps extends ChildProps {}
82
119
 
83
- /** Catch errors in a page. */
120
+ /**
121
+ * Error boundary for a whole page that renders a full `<ErrorPage>` fallback on error.
122
+ *
123
+ * @param children The page content to guard.
124
+ * @returns A `<Catcher>` configured to render `<ErrorPage>` on error.
125
+ * @example <PageCatcher><SettingsPage /></PageCatcher>
126
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/PageCatcher
127
+ */
84
128
  export function PageCatcher({ children }: PageCatcherProps): ReactElement {
85
129
  return <Catcher as={ErrorPage}>{children}</Catcher>;
86
130
  }
87
131
 
132
+ /**
133
+ * Props for `<ErrorNotice>` — the caught error `reason`.
134
+ *
135
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNoticeProps
136
+ */
88
137
  export interface ErrorNoticeProps extends ErrorComponentProps {}
89
138
 
90
- /** Output a `<Notice>` for an unknown error reason. */
139
+ /**
140
+ * Render a caught error as an inline `<Notice>` with a retry button.
141
+ *
142
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
143
+ *
144
+ * @param reason The caught error to display.
145
+ * @returns An error `<Notice>` containing the message and a `<RetryButton>`.
146
+ * @example <ErrorNotice reason={thrown} />
147
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorNotice
148
+ */
91
149
  export function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement {
92
150
  const message = getMessage(reason) ?? "Unknown error";
93
151
  return (
@@ -98,9 +156,23 @@ export function ErrorNotice({ reason }: ErrorNoticeProps): ReactElement {
98
156
  );
99
157
  }
100
158
 
159
+ /**
160
+ * Props for `<ErrorPage>` — the caught error `reason`.
161
+ *
162
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPageProps
163
+ */
101
164
  export interface ErrorPageProps extends ErrorComponentProps {}
102
165
 
103
- /** Output a `<Page>` with an error `<Card>` for an unknown error reason. */
166
+ /**
167
+ * Render a caught error as a full-page `<Page>` with an error `<Card>` and retry button.
168
+ *
169
+ * - Uses `getMessage()` to extract a human-readable message, falling back to `"Unknown error"`.
170
+ *
171
+ * @param reason The caught error to display.
172
+ * @returns A centered error page containing the message and a `<RetryButton>`.
173
+ * @example <ErrorPage reason={thrown} />
174
+ * @see https://dhoulb.github.io/shelving/ui/misc/Catcher/ErrorPage
175
+ */
104
176
  export function ErrorPage({ reason }: ErrorPageProps): ReactElement {
105
177
  const message = getMessage(reason) ?? "Unknown error";
106
178
  return (
@@ -1,8 +1,28 @@
1
1
  import type { ReactElement } from "react";
2
2
  declare const _componentProps: unique symbol;
3
+ /**
4
+ * Props for `<Loading>` — takes no props (branded empty interface).
5
+ *
6
+ * @see https://dhoulb.github.io/shelving/ui/misc/Loading/LoadingProps
7
+ */
3
8
  export interface LoadingProps {
4
9
  readonly [_componentProps]?: never;
5
10
  }
11
+ /**
12
+ * Animated spinner SVG used as a loading indicator.
13
+ *
14
+ * - Self-contained inline SVG with a rotating indicator arc; inherits its colour and size from the surrounding text.
15
+ *
16
+ * @returns The spinner element.
17
+ * @example <Loading />
18
+ * @see https://dhoulb.github.io/shelving/ui/misc/Loading/Loading
19
+ */
6
20
  export declare function Loading(): ReactElement;
21
+ /**
22
+ * Shared `<Loading>` element with a stable `key`, ready to drop into `Suspense` fallbacks and lists.
23
+ *
24
+ * @example <Suspense fallback={LOADING}>…</Suspense>
25
+ * @see https://dhoulb.github.io/shelving/ui/misc/Loading/LOADING
26
+ */
7
27
  export declare const LOADING: import("react").JSX.Element;
8
28
  export {};