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
@@ -2,25 +2,113 @@ import type { ReactNode } from "react";
2
2
  import type { Arguments } from "../../util/function.js";
3
3
  import type { Status } from "../style/Status.js";
4
4
  /**
5
- * Notify the user with a message by dispatching a notice event.
5
+ * Notify the user with a message by dispatching a `notice` event.
6
+ *
6
7
  * - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
8
+ * - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
9
+ *
10
+ * @param message The message to show, as a React node.
11
+ * @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
12
+ * @param el Element to dispatch the event on (defaults to `window`).
13
+ * @example notify("Saved your changes", "success");
14
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notify
7
15
  */
8
16
  export declare function notify(message: ReactNode, status?: Status | undefined, el?: EventTarget): void;
9
- /** Notify the user with a success message by dispatching a notice event. */
17
+ /**
18
+ * Notify the user with a success message by dispatching a `notice` event with `"success"` status.
19
+ *
20
+ * @param message The success message to show, as a React node.
21
+ * @param el Element to dispatch the event on (defaults to `window`).
22
+ * @example notifySuccess("Profile updated");
23
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
24
+ */
10
25
  export declare function notifySuccess(message: ReactNode, el?: EventTarget): void;
11
- /** Notify the user with a success message by dispatching a notice event. */
26
+ /**
27
+ * Notify the user with an error message by dispatching a `notice` event with `"error"` status.
28
+ *
29
+ * @param message The error message to show, as a React node.
30
+ * @param el Element to dispatch the event on (defaults to `window`).
31
+ * @example notifyError("Could not save your changes");
32
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
33
+ */
12
34
  export declare function notifyError(message: ReactNode, el?: EventTarget): void;
13
- /** Look at a thrown value, extract a viable message from it, and dispatch a notice event.. */
35
+ /**
36
+ * Look at a thrown value, extract a viable message from it, and dispatch an error notice.
37
+ *
38
+ * - Uses `getMessage()` to pull a human-readable string from the thrown value.
39
+ * - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
40
+ *
41
+ * @param thrown The thrown value to report.
42
+ * @param el Element to dispatch the event on (defaults to `window`).
43
+ * @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
44
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
45
+ */
14
46
  export declare function notifyThrown(thrown: unknown, el?: EventTarget): void;
15
- /** Subscribe to notice events on the window and call a callback when they happen. */
47
+ /**
48
+ * Subscribe to `notice` events on an element and call a callback when they happen.
49
+ *
50
+ * - Stops propagation so the notice is not handled again by a higher subscriber.
51
+ *
52
+ * @param callback Called with the message and status each time a notice event fires.
53
+ * @param el Element to subscribe on (defaults to `window`).
54
+ * @returns An unsubscribe function that removes the listener.
55
+ * @example const stop = subscribeNotices((message, status) => show(message, status));
56
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
57
+ */
16
58
  export declare function subscribeNotices(callback: (message: ReactNode, status?: Status | undefined) => void, el?: EventTarget): () => void;
17
- /** Callback that can return or throw a string, which will trigger a success or error notice accordingly. */
59
+ /**
60
+ * Callback that can return or throw a value, triggering a success or error notice accordingly.
61
+ *
62
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/NoticeCallback
63
+ */
18
64
  export type NoticeCallback<A extends Arguments> = (...args: A) => PromiseLike<ReactNode | undefined | void> | ReactNode | undefined | void;
19
- /** Callback that publishes notices to the window if it returns or throws "string" */
65
+ /**
66
+ * Run a callback and dispatch a success or error notice to the window based on its return or throw.
67
+ *
68
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
69
+ * - Resolves asynchronously when the callback returns a promise.
70
+ *
71
+ * @param callback The callback to run, whose return/throw drives the notice.
72
+ * @param args Arguments forwarded to the callback.
73
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
74
+ * @example callNotified(() => save()); // notifies "success" or "error"
75
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
76
+ */
20
77
  export declare function callNotified<A extends Arguments>(callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean>;
21
- /** Await a value that publishes "success" or "error" notices to the window if it returns */
78
+ /**
79
+ * Await a pending value and dispatch a success or error notice to the window based on its resolution.
80
+ *
81
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
82
+ *
83
+ * @param pending The promise-like value to await.
84
+ * @returns `true` if the value resolved, `false` if it rejected.
85
+ * @example await awaitNotified(save());
86
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
87
+ */
22
88
  export declare function awaitNotified(pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean>;
23
- /** Callback that publishes notices to an element (defaults to the window) if it returns or throws "string" */
89
+ /**
90
+ * Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
91
+ *
92
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
93
+ * - Resolves asynchronously when the callback returns a promise.
94
+ *
95
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
96
+ * @param callback The callback to run, whose return/throw drives the notice.
97
+ * @param args Arguments forwarded to the callback.
98
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
99
+ * @example callNotifiedElement(formEl, () => save());
100
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
101
+ */
24
102
  export declare function callNotifiedElement<A extends Arguments>(el: EventTarget | undefined, callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean>;
25
- /** Await a value that publishes "success" or "error" notices to an element (defaults to the window) if it returns */
103
+ /**
104
+ * Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
105
+ *
106
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
107
+ *
108
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
109
+ * @param pending The promise-like value to await.
110
+ * @returns `true` if the value resolved, `false` if it rejected.
111
+ * @example await awaitNotifiedElement(formEl, save());
112
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
113
+ */
26
114
  export declare function awaitNotifiedElement(el: EventTarget | undefined, pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean>;
package/ui/util/notice.js CHANGED
@@ -6,8 +6,16 @@ const NOTICE_EVENT = "notice";
6
6
  class NoticeEvent extends CustomEvent {
7
7
  }
8
8
  /**
9
- * Notify the user with a message by dispatching a notice event.
9
+ * Notify the user with a message by dispatching a `notice` event.
10
+ *
10
11
  * - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
12
+ * - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
13
+ *
14
+ * @param message The message to show, as a React node.
15
+ * @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
16
+ * @param el Element to dispatch the event on (defaults to `window`).
17
+ * @example notify("Saved your changes", "success");
18
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notify
11
19
  */
12
20
  export function notify(message, status, el = window) {
13
21
  el.dispatchEvent(new NoticeEvent(NOTICE_EVENT, {
@@ -15,15 +23,39 @@ export function notify(message, status, el = window) {
15
23
  bubbles: true,
16
24
  }));
17
25
  }
18
- /** Notify the user with a success message by dispatching a notice event. */
26
+ /**
27
+ * Notify the user with a success message by dispatching a `notice` event with `"success"` status.
28
+ *
29
+ * @param message The success message to show, as a React node.
30
+ * @param el Element to dispatch the event on (defaults to `window`).
31
+ * @example notifySuccess("Profile updated");
32
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
33
+ */
19
34
  export function notifySuccess(message, el) {
20
35
  notify(message, "success", el);
21
36
  }
22
- /** Notify the user with a success message by dispatching a notice event. */
37
+ /**
38
+ * Notify the user with an error message by dispatching a `notice` event with `"error"` status.
39
+ *
40
+ * @param message The error message to show, as a React node.
41
+ * @param el Element to dispatch the event on (defaults to `window`).
42
+ * @example notifyError("Could not save your changes");
43
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
44
+ */
23
45
  export function notifyError(message, el) {
24
46
  notify(message, "error", el);
25
47
  }
26
- /** Look at a thrown value, extract a viable message from it, and dispatch a notice event.. */
48
+ /**
49
+ * Look at a thrown value, extract a viable message from it, and dispatch an error notice.
50
+ *
51
+ * - Uses `getMessage()` to pull a human-readable string from the thrown value.
52
+ * - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
53
+ *
54
+ * @param thrown The thrown value to report.
55
+ * @param el Element to dispatch the event on (defaults to `window`).
56
+ * @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
57
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
58
+ */
27
59
  export function notifyThrown(thrown, el) {
28
60
  const message = getMessage(thrown);
29
61
  if (message) {
@@ -34,7 +66,17 @@ export function notifyThrown(thrown, el) {
34
66
  console.error(thrown);
35
67
  }
36
68
  }
37
- /** Subscribe to notice events on the window and call a callback when they happen. */
69
+ /**
70
+ * Subscribe to `notice` events on an element and call a callback when they happen.
71
+ *
72
+ * - Stops propagation so the notice is not handled again by a higher subscriber.
73
+ *
74
+ * @param callback Called with the message and status each time a notice event fires.
75
+ * @param el Element to subscribe on (defaults to `window`).
76
+ * @returns An unsubscribe function that removes the listener.
77
+ * @example const stop = subscribeNotices((message, status) => show(message, status));
78
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
79
+ */
38
80
  export function subscribeNotices(callback, el = window) {
39
81
  const listener = (e) => {
40
82
  e.stopPropagation(); // Prevent bubbling to a higher notice subscriber.
@@ -44,15 +86,47 @@ export function subscribeNotices(callback, el = window) {
44
86
  el.addEventListener(NOTICE_EVENT, listener);
45
87
  return () => el.removeEventListener(NOTICE_EVENT, listener);
46
88
  }
47
- /** Callback that publishes notices to the window if it returns or throws "string" */
89
+ /**
90
+ * Run a callback and dispatch a success or error notice to the window based on its return or throw.
91
+ *
92
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
93
+ * - Resolves asynchronously when the callback returns a promise.
94
+ *
95
+ * @param callback The callback to run, whose return/throw drives the notice.
96
+ * @param args Arguments forwarded to the callback.
97
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
98
+ * @example callNotified(() => save()); // notifies "success" or "error"
99
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
100
+ */
48
101
  export function callNotified(callback, ...args) {
49
102
  return callNotifiedElement(window, callback, ...args);
50
103
  }
51
- /** Await a value that publishes "success" or "error" notices to the window if it returns */
104
+ /**
105
+ * Await a pending value and dispatch a success or error notice to the window based on its resolution.
106
+ *
107
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
108
+ *
109
+ * @param pending The promise-like value to await.
110
+ * @returns `true` if the value resolved, `false` if it rejected.
111
+ * @example await awaitNotified(save());
112
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
113
+ */
52
114
  export function awaitNotified(pending) {
53
115
  return awaitNotifiedElement(window, pending);
54
116
  }
55
- /** Callback that publishes notices to an element (defaults to the window) if it returns or throws "string" */
117
+ /**
118
+ * Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
119
+ *
120
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
121
+ * - Resolves asynchronously when the callback returns a promise.
122
+ *
123
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
124
+ * @param callback The callback to run, whose return/throw drives the notice.
125
+ * @param args Arguments forwarded to the callback.
126
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
127
+ * @example callNotifiedElement(formEl, () => save());
128
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
129
+ */
56
130
  export function callNotifiedElement(el, callback, ...args) {
57
131
  try {
58
132
  const result = callback(...args);
@@ -67,7 +141,17 @@ export function callNotifiedElement(el, callback, ...args) {
67
141
  return false;
68
142
  }
69
143
  }
70
- /** Await a value that publishes "success" or "error" notices to an element (defaults to the window) if it returns */
144
+ /**
145
+ * Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
146
+ *
147
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
148
+ *
149
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
150
+ * @param pending The promise-like value to await.
151
+ * @returns `true` if the value resolved, `false` if it rejected.
152
+ * @example await awaitNotifiedElement(formEl, save());
153
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
154
+ */
71
155
  export async function awaitNotifiedElement(el, pending) {
72
156
  try {
73
157
  const result = await pending;
package/ui/util/notice.ts CHANGED
@@ -11,8 +11,16 @@ const NOTICE_EVENT = "notice";
11
11
  class NoticeEvent extends CustomEvent<{ message: ReactNode; status: Status | undefined }> {}
12
12
 
13
13
  /**
14
- * Notify the user with a message by dispatching a notice event.
14
+ * Notify the user with a message by dispatching a `notice` event.
15
+ *
15
16
  * - This is how e.g. `<Button>` and `<FormNotify>` components send notices to the `<Notices>` list of global notices.
17
+ * - The event bubbles, so any ancestor subscribed with `subscribeNotices()` will receive it.
18
+ *
19
+ * @param message The message to show, as a React node.
20
+ * @param status Optional status (`"success"`, `"error"`, etc.) controlling how the notice is styled.
21
+ * @param el Element to dispatch the event on (defaults to `window`).
22
+ * @example notify("Saved your changes", "success");
23
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notify
16
24
  */
17
25
  export function notify(message: ReactNode, status?: Status | undefined, el: EventTarget = window): void {
18
26
  el.dispatchEvent(
@@ -23,17 +31,41 @@ export function notify(message: ReactNode, status?: Status | undefined, el: Even
23
31
  );
24
32
  }
25
33
 
26
- /** Notify the user with a success message by dispatching a notice event. */
34
+ /**
35
+ * Notify the user with a success message by dispatching a `notice` event with `"success"` status.
36
+ *
37
+ * @param message The success message to show, as a React node.
38
+ * @param el Element to dispatch the event on (defaults to `window`).
39
+ * @example notifySuccess("Profile updated");
40
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifySuccess
41
+ */
27
42
  export function notifySuccess(message: ReactNode, el?: EventTarget) {
28
43
  notify(message, "success", el);
29
44
  }
30
45
 
31
- /** Notify the user with a success message by dispatching a notice event. */
46
+ /**
47
+ * Notify the user with an error message by dispatching a `notice` event with `"error"` status.
48
+ *
49
+ * @param message The error message to show, as a React node.
50
+ * @param el Element to dispatch the event on (defaults to `window`).
51
+ * @example notifyError("Could not save your changes");
52
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyError
53
+ */
32
54
  export function notifyError(message: ReactNode, el?: EventTarget) {
33
55
  notify(message, "error", el);
34
56
  }
35
57
 
36
- /** Look at a thrown value, extract a viable message from it, and dispatch a notice event.. */
58
+ /**
59
+ * Look at a thrown value, extract a viable message from it, and dispatch an error notice.
60
+ *
61
+ * - Uses `getMessage()` to pull a human-readable string from the thrown value.
62
+ * - Falls back to a generic `"Unknown error"` notice and `console.error()` when no message can be extracted.
63
+ *
64
+ * @param thrown The thrown value to report.
65
+ * @param el Element to dispatch the event on (defaults to `window`).
66
+ * @example try { await save(); } catch (thrown) { notifyThrown(thrown); }
67
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/notifyThrown
68
+ */
37
69
  export function notifyThrown(thrown: unknown, el?: EventTarget) {
38
70
  const message = getMessage(thrown);
39
71
  if (message) {
@@ -44,7 +76,17 @@ export function notifyThrown(thrown: unknown, el?: EventTarget) {
44
76
  }
45
77
  }
46
78
 
47
- /** Subscribe to notice events on the window and call a callback when they happen. */
79
+ /**
80
+ * Subscribe to `notice` events on an element and call a callback when they happen.
81
+ *
82
+ * - Stops propagation so the notice is not handled again by a higher subscriber.
83
+ *
84
+ * @param callback Called with the message and status each time a notice event fires.
85
+ * @param el Element to subscribe on (defaults to `window`).
86
+ * @returns An unsubscribe function that removes the listener.
87
+ * @example const stop = subscribeNotices((message, status) => show(message, status));
88
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/subscribeNotices
89
+ */
48
90
  export function subscribeNotices(
49
91
  callback: (message: ReactNode, status?: Status | undefined) => void,
50
92
  el: EventTarget = window,
@@ -57,20 +99,56 @@ export function subscribeNotices(
57
99
  return () => el.removeEventListener(NOTICE_EVENT, listener);
58
100
  }
59
101
 
60
- /** Callback that can return or throw a string, which will trigger a success or error notice accordingly. */
102
+ /**
103
+ * Callback that can return or throw a value, triggering a success or error notice accordingly.
104
+ *
105
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/NoticeCallback
106
+ */
61
107
  export type NoticeCallback<A extends Arguments> = (...args: A) => PromiseLike<ReactNode | undefined | void> | ReactNode | undefined | void;
62
108
 
63
- /** Callback that publishes notices to the window if it returns or throws "string" */
109
+ /**
110
+ * Run a callback and dispatch a success or error notice to the window based on its return or throw.
111
+ *
112
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
113
+ * - Resolves asynchronously when the callback returns a promise.
114
+ *
115
+ * @param callback The callback to run, whose return/throw drives the notice.
116
+ * @param args Arguments forwarded to the callback.
117
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
118
+ * @example callNotified(() => save()); // notifies "success" or "error"
119
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotified
120
+ */
64
121
  export function callNotified<A extends Arguments>(callback: NoticeCallback<A>, ...args: A): boolean | Promise<boolean> {
65
122
  return callNotifiedElement(window, callback, ...args);
66
123
  }
67
124
 
68
- /** Await a value that publishes "success" or "error" notices to the window if it returns */
125
+ /**
126
+ * Await a pending value and dispatch a success or error notice to the window based on its resolution.
127
+ *
128
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
129
+ *
130
+ * @param pending The promise-like value to await.
131
+ * @returns `true` if the value resolved, `false` if it rejected.
132
+ * @example await awaitNotified(save());
133
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotified
134
+ */
69
135
  export function awaitNotified(pending: PromiseLike<ReactNode | undefined | void>): Promise<boolean> {
70
136
  return awaitNotifiedElement(window, pending);
71
137
  }
72
138
 
73
- /** Callback that publishes notices to an element (defaults to the window) if it returns or throws "string" */
139
+ /**
140
+ * Run a callback and dispatch a success or error notice to a specific element based on its return or throw.
141
+ *
142
+ * - A returned truthy value becomes a `"success"` notice; a thrown value becomes an `"error"` notice via `notifyThrown()`.
143
+ * - Resolves asynchronously when the callback returns a promise.
144
+ *
145
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
146
+ * @param callback The callback to run, whose return/throw drives the notice.
147
+ * @param args Arguments forwarded to the callback.
148
+ * @returns `true` if the callback succeeded, `false` if it threw (a `Promise` of the same when async).
149
+ * @example callNotifiedElement(formEl, () => save());
150
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/callNotifiedElement
151
+ */
74
152
  export function callNotifiedElement<A extends Arguments>(
75
153
  el: EventTarget | undefined,
76
154
  callback: NoticeCallback<A>,
@@ -87,7 +165,17 @@ export function callNotifiedElement<A extends Arguments>(
87
165
  }
88
166
  }
89
167
 
90
- /** Await a value that publishes "success" or "error" notices to an element (defaults to the window) if it returns */
168
+ /**
169
+ * Await a pending value and dispatch a success or error notice to a specific element based on its resolution.
170
+ *
171
+ * - A resolved truthy value becomes a `"success"` notice; a rejection becomes an `"error"` notice via `notifyThrown()`.
172
+ *
173
+ * @param el Element to dispatch the notice event on (defaults to `window` when `undefined`).
174
+ * @param pending The promise-like value to await.
175
+ * @returns `true` if the value resolved, `false` if it rejected.
176
+ * @example await awaitNotifiedElement(formEl, save());
177
+ * @see https://dhoulb.github.io/shelving/ui/util/notice/awaitNotifiedElement
178
+ */
91
179
  export async function awaitNotifiedElement(
92
180
  el: EventTarget | undefined,
93
181
  pending: PromiseLike<ReactNode | undefined | void>,
@@ -1,9 +1,17 @@
1
1
  import type { ReactNode } from "react";
2
- /** Props for a component that requires `children`. */
2
+ /**
3
+ * Props for a component that requires `children`.
4
+ *
5
+ * @see https://dhoulb.github.io/shelving/ui/util/props/ChildProps
6
+ */
3
7
  export interface ChildProps {
4
8
  readonly children: ReactNode;
5
9
  }
6
- /** Props for a component that optionally accepts `children`. */
10
+ /**
11
+ * Props for a component that optionally accepts `children`.
12
+ *
13
+ * @see https://dhoulb.github.io/shelving/ui/util/props/OptionalChildProps
14
+ */
7
15
  export interface OptionalChildProps {
8
16
  readonly children?: ReactNode | undefined;
9
17
  }
package/ui/util/props.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  import type { ReactNode } from "react";
2
2
 
3
- /** Props for a component that requires `children`. */
3
+ /**
4
+ * Props for a component that requires `children`.
5
+ *
6
+ * @see https://dhoulb.github.io/shelving/ui/util/props/ChildProps
7
+ */
4
8
  export interface ChildProps {
5
9
  readonly children: ReactNode;
6
10
  }
7
11
 
8
- /** Props for a component that optionally accepts `children`. */
12
+ /**
13
+ * Props for a component that optionally accepts `children`.
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/ui/util/props/OptionalChildProps
16
+ */
9
17
  export interface OptionalChildProps {
10
18
  readonly children?: ReactNode | undefined;
11
19
  }
@@ -1,2 +1,11 @@
1
- /** Refresh a component automatically every X milliseconds. */
1
+ /**
2
+ * Re-render a component automatically on a fixed interval.
3
+ *
4
+ * - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
5
+ * - Clears the timer on unmount or when `interval` changes.
6
+ *
7
+ * @param interval The refresh period in milliseconds.
8
+ * @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
9
+ * @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
10
+ */
2
11
  export declare function useRefresh(interval: number): void;
@@ -1,5 +1,14 @@
1
1
  import { useEffect, useState } from "react";
2
- /** Refresh a component automatically every X milliseconds. */
2
+ /**
3
+ * Re-render a component automatically on a fixed interval.
4
+ *
5
+ * - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
6
+ * - Clears the timer on unmount or when `interval` changes.
7
+ *
8
+ * @param interval The refresh period in milliseconds.
9
+ * @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
10
+ * @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
11
+ */
3
12
  export function useRefresh(interval) {
4
13
  const [_currentTime, setCurrentTime] = useState(() => Date.now());
5
14
  useEffect(() => {
@@ -1,6 +1,15 @@
1
1
  import { useEffect, useState } from "react";
2
2
 
3
- /** Refresh a component automatically every X milliseconds. */
3
+ /**
4
+ * Re-render a component automatically on a fixed interval.
5
+ *
6
+ * - Holds the current time in state and updates it every `interval` milliseconds, forcing a refresh.
7
+ * - Clears the timer on unmount or when `interval` changes.
8
+ *
9
+ * @param interval The refresh period in milliseconds.
10
+ * @example useRefresh(1000); // re-renders once per second, e.g. for a live clock
11
+ * @see https://dhoulb.github.io/shelving/ui/util/refresh/useRefresh
12
+ */
4
13
  export function useRefresh(interval: number): void {
5
14
  const [_currentTime, setCurrentTime] = useState<number>(() => Date.now());
6
15
 
@@ -2,10 +2,26 @@ import { type RefObject } from "react";
2
2
  import type { Callback } from "../../util/function.js";
3
3
  import type { Nullish } from "../../util/null.js";
4
4
  /**
5
- * Fires a callback when an element enters the visible scrolling area on the client.
6
- * - Checks that is the last element in its parent.
7
- * - Finds the closest parent above this that scrolls (e.g. `.page`, customisable with `selector` param), then fires the callbacks appropriately.
5
+ * Fire callbacks when a referenced element enters or leaves the visible scrolling area.
6
+ *
7
+ * - Returns a `ref` to attach to the element you want to observe typically the last item in a scrolling list, for infinite-scroll loading.
8
+ * - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
9
+ *
10
+ * @param onEnter Called when the element becomes fully visible.
11
+ * @param onLeave Called when the element stops being fully visible.
12
+ * @returns A React `ref` to attach to the element to observe.
13
+ * @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
14
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
8
15
  */
9
16
  export declare function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Callback>, onLeave?: Nullish<Callback>): RefObject<T | null>;
10
- /** Go through a list of `IntersectionObserverEntry` (from `IntersectionObserver`) and return the index of the one with the highest `intersectionRatio` */
17
+ /**
18
+ * Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
19
+ *
20
+ * - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
21
+ *
22
+ * @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
23
+ * @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
24
+ * @example getMostVisibleObserverEntry(entries)?.target;
25
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
26
+ */
11
27
  export declare function getMostVisibleObserverEntry(entries: IntersectionObserverEntry[]): IntersectionObserverEntry | undefined;
package/ui/util/scroll.js CHANGED
@@ -1,8 +1,15 @@
1
1
  import { useEffect, useRef } from "react";
2
2
  /**
3
- * Fires a callback when an element enters the visible scrolling area on the client.
4
- * - Checks that is the last element in its parent.
5
- * - Finds the closest parent above this that scrolls (e.g. `.page`, customisable with `selector` param), then fires the callbacks appropriately.
3
+ * Fire callbacks when a referenced element enters or leaves the visible scrolling area.
4
+ *
5
+ * - Returns a `ref` to attach to the element you want to observe typically the last item in a scrolling list, for infinite-scroll loading.
6
+ * - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
7
+ *
8
+ * @param onEnter Called when the element becomes fully visible.
9
+ * @param onLeave Called when the element stops being fully visible.
10
+ * @returns A React `ref` to attach to the element to observe.
11
+ * @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
12
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
6
13
  */
7
14
  export function useScrollIntersect(onEnter, onLeave) {
8
15
  const ref = useRef(null);
@@ -23,7 +30,16 @@ export function useScrollIntersect(onEnter, onLeave) {
23
30
  }, [onEnter, onLeave]);
24
31
  return ref;
25
32
  }
26
- /** Go through a list of `IntersectionObserverEntry` (from `IntersectionObserver`) and return the index of the one with the highest `intersectionRatio` */
33
+ /**
34
+ * Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
35
+ *
36
+ * - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
37
+ *
38
+ * @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
39
+ * @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
40
+ * @example getMostVisibleObserverEntry(entries)?.target;
41
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
42
+ */
27
43
  export function getMostVisibleObserverEntry(entries) {
28
44
  return entries.reduce(_reduceMostVisibleObserverEntry, undefined);
29
45
  }
package/ui/util/scroll.ts CHANGED
@@ -3,9 +3,16 @@ import type { Callback } from "../../util/function.js";
3
3
  import type { Nullish } from "../../util/null.js";
4
4
 
5
5
  /**
6
- * Fires a callback when an element enters the visible scrolling area on the client.
7
- * - Checks that is the last element in its parent.
8
- * - Finds the closest parent above this that scrolls (e.g. `.page`, customisable with `selector` param), then fires the callbacks appropriately.
6
+ * Fire callbacks when a referenced element enters or leaves the visible scrolling area.
7
+ *
8
+ * - Returns a `ref` to attach to the element you want to observe typically the last item in a scrolling list, for infinite-scroll loading.
9
+ * - Uses an `IntersectionObserver` with a full-visibility threshold and disconnects it on unmount or when callbacks change.
10
+ *
11
+ * @param onEnter Called when the element becomes fully visible.
12
+ * @param onLeave Called when the element stops being fully visible.
13
+ * @returns A React `ref` to attach to the element to observe.
14
+ * @example const ref = useScrollIntersect(loadMore); return <div ref={ref} />;
15
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/useScrollIntersect
9
16
  */
10
17
  export function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Callback>, onLeave?: Nullish<Callback>): RefObject<T | null> {
11
18
  const ref = useRef<T | null>(null);
@@ -28,7 +35,16 @@ export function useScrollIntersect<T extends HTMLElement>(onEnter?: Nullish<Call
28
35
  return ref;
29
36
  }
30
37
 
31
- /** Go through a list of `IntersectionObserverEntry` (from `IntersectionObserver`) and return the index of the one with the highest `intersectionRatio` */
38
+ /**
39
+ * Find the most-visible entry in a list of `IntersectionObserverEntry` objects.
40
+ *
41
+ * - Returns the entry with the highest `intersectionRatio`, or `undefined` for an empty list.
42
+ *
43
+ * @param entries The observer entries to compare (e.g. from an `IntersectionObserver` callback).
44
+ * @returns The entry with the largest visible ratio, or `undefined` when `entries` is empty.
45
+ * @example getMostVisibleObserverEntry(entries)?.target;
46
+ * @see https://dhoulb.github.io/shelving/ui/util/scroll/getMostVisibleObserverEntry
47
+ */
32
48
  export function getMostVisibleObserverEntry(entries: IntersectionObserverEntry[]): IntersectionObserverEntry | undefined {
33
49
  return entries.reduce<IntersectionObserverEntry | undefined>(_reduceMostVisibleObserverEntry, undefined);
34
50
  }