@rebasepro/ui 0.24.0 → 0.24.1-canary.gcb918fc

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 (241) hide show
  1. package/dist/components/Alert.d.ts +6 -0
  2. package/dist/components/Alert.es.js +82 -0
  3. package/dist/components/Alert.es.js.map +1 -0
  4. package/dist/components/Autocomplete.es.js +53 -0
  5. package/dist/components/Autocomplete.es.js.map +1 -0
  6. package/dist/components/Avatar.d.ts +3 -1
  7. package/dist/components/Avatar.es.js +37 -0
  8. package/dist/components/Avatar.es.js.map +1 -0
  9. package/dist/components/Badge.es.js +27 -0
  10. package/dist/components/Badge.es.js.map +1 -0
  11. package/dist/components/BooleanSwitch.es.js +75 -0
  12. package/dist/components/BooleanSwitch.es.js.map +1 -0
  13. package/dist/components/BooleanSwitchWithLabel.es.js +55 -0
  14. package/dist/components/BooleanSwitchWithLabel.es.js.map +1 -0
  15. package/dist/components/Button.es.js +58 -0
  16. package/dist/components/Button.es.js.map +1 -0
  17. package/dist/components/Card.es.js +26 -0
  18. package/dist/components/Card.es.js.map +1 -0
  19. package/dist/components/CenteredView.es.js +23 -0
  20. package/dist/components/CenteredView.es.js.map +1 -0
  21. package/dist/components/Checkbox.es.js +62 -0
  22. package/dist/components/Checkbox.es.js.map +1 -0
  23. package/dist/components/Chip.es.js +72 -0
  24. package/dist/components/Chip.es.js.map +1 -0
  25. package/dist/components/CircularProgress.es.js +28 -0
  26. package/dist/components/CircularProgress.es.js.map +1 -0
  27. package/dist/components/CircularProgressCenter.es.js +30 -0
  28. package/dist/components/CircularProgressCenter.es.js.map +1 -0
  29. package/dist/components/Collapse.es.js +57 -0
  30. package/dist/components/Collapse.es.js.map +1 -0
  31. package/dist/components/ColorPicker.es.js +89 -0
  32. package/dist/components/ColorPicker.es.js.map +1 -0
  33. package/dist/components/Container.es.js +31 -0
  34. package/dist/components/Container.es.js.map +1 -0
  35. package/dist/components/DateTimeField.d.ts +11 -1
  36. package/dist/components/DateTimeField.es.js +253 -0
  37. package/dist/components/DateTimeField.es.js.map +1 -0
  38. package/dist/components/DebouncedTextField.es.js +93 -0
  39. package/dist/components/DebouncedTextField.es.js.map +1 -0
  40. package/dist/components/Dialog.es.js +98 -0
  41. package/dist/components/Dialog.es.js.map +1 -0
  42. package/dist/components/DialogActions.es.js +15 -0
  43. package/dist/components/DialogActions.es.js.map +1 -0
  44. package/dist/components/DialogContent.es.js +18 -0
  45. package/dist/components/DialogContent.es.js.map +1 -0
  46. package/dist/components/DialogTitle.es.js +26 -0
  47. package/dist/components/DialogTitle.es.js.map +1 -0
  48. package/dist/components/ErrorBoundary.es.js +158 -0
  49. package/dist/components/ErrorBoundary.es.js.map +1 -0
  50. package/dist/components/ExpandablePanel.es.js +91 -0
  51. package/dist/components/ExpandablePanel.es.js.map +1 -0
  52. package/dist/components/FileUpload.es.js +58 -0
  53. package/dist/components/FileUpload.es.js.map +1 -0
  54. package/dist/components/FilterChip.es.js +31 -0
  55. package/dist/components/FilterChip.es.js.map +1 -0
  56. package/dist/components/IconButton.es.js +52 -0
  57. package/dist/components/IconButton.es.js.map +1 -0
  58. package/dist/components/InfoLabel.es.js +18 -0
  59. package/dist/components/InfoLabel.es.js.map +1 -0
  60. package/dist/components/InputLabel.es.js +27 -0
  61. package/dist/components/InputLabel.es.js.map +1 -0
  62. package/dist/components/Label.es.js +18 -0
  63. package/dist/components/Label.es.js.map +1 -0
  64. package/dist/components/LoadingButton.es.js +21 -0
  65. package/dist/components/LoadingButton.es.js.map +1 -0
  66. package/dist/components/Markdown.es.js +88 -0
  67. package/dist/components/Markdown.es.js.map +1 -0
  68. package/dist/components/Menu.es.js +46 -0
  69. package/dist/components/Menu.es.js.map +1 -0
  70. package/dist/components/Menubar.es.js +142 -0
  71. package/dist/components/Menubar.es.js.map +1 -0
  72. package/dist/components/MultiSelect.d.ts +1 -7
  73. package/dist/components/MultiSelect.es.js +271 -0
  74. package/dist/components/MultiSelect.es.js.map +1 -0
  75. package/dist/components/Paper.es.js +16 -0
  76. package/dist/components/Paper.es.js.map +1 -0
  77. package/dist/components/Popover.es.js +113 -0
  78. package/dist/components/Popover.es.js.map +1 -0
  79. package/dist/components/RadioGroup.es.js +30 -0
  80. package/dist/components/RadioGroup.es.js.map +1 -0
  81. package/dist/components/ResizablePanels.d.ts +3 -1
  82. package/dist/components/ResizablePanels.es.js +137 -0
  83. package/dist/components/ResizablePanels.es.js.map +1 -0
  84. package/dist/components/SearchBar.es.js +82 -0
  85. package/dist/components/SearchBar.es.js.map +1 -0
  86. package/dist/components/Select.d.ts +8 -1
  87. package/dist/components/Select.es.js +300 -0
  88. package/dist/components/Select.es.js.map +1 -0
  89. package/dist/components/Separator.es.js +20 -0
  90. package/dist/components/Separator.es.js.map +1 -0
  91. package/dist/components/Sheet.es.js +73 -0
  92. package/dist/components/Sheet.es.js.map +1 -0
  93. package/dist/components/Skeleton.es.js +33 -0
  94. package/dist/components/Skeleton.es.js.map +1 -0
  95. package/dist/components/Slider.es.js +56 -0
  96. package/dist/components/Slider.es.js.map +1 -0
  97. package/dist/components/Table.d.ts +18 -3
  98. package/dist/components/Table.es.js +69 -0
  99. package/dist/components/Table.es.js.map +1 -0
  100. package/dist/components/Tabs.es.js +101 -0
  101. package/dist/components/Tabs.es.js.map +1 -0
  102. package/dist/components/TextField.d.ts +0 -8
  103. package/dist/components/TextField.es.js +111 -0
  104. package/dist/components/TextField.es.js.map +1 -0
  105. package/dist/components/TextareaAutosize.es.js +187 -0
  106. package/dist/components/TextareaAutosize.es.js.map +1 -0
  107. package/dist/components/ToggleButtonGroup.d.ts +6 -1
  108. package/dist/components/ToggleButtonGroup.es.js +35 -0
  109. package/dist/components/ToggleButtonGroup.es.js.map +1 -0
  110. package/dist/components/Tooltip.d.ts +24 -0
  111. package/dist/components/Tooltip.es.js +165 -0
  112. package/dist/components/Tooltip.es.js.map +1 -0
  113. package/dist/components/Typography.es.js +85 -0
  114. package/dist/components/Typography.es.js.map +1 -0
  115. package/dist/components/VirtualTable/VirtualTable.es.js +516 -0
  116. package/dist/components/VirtualTable/VirtualTable.es.js.map +1 -0
  117. package/dist/components/VirtualTable/VirtualTableCell.d.ts +1 -1
  118. package/dist/components/VirtualTable/VirtualTableCell.es.js +40 -0
  119. package/dist/components/VirtualTable/VirtualTableCell.es.js.map +1 -0
  120. package/dist/components/VirtualTable/VirtualTableHeader.es.js +209 -0
  121. package/dist/components/VirtualTable/VirtualTableHeader.es.js.map +1 -0
  122. package/dist/components/VirtualTable/VirtualTableHeaderRow.es.js +166 -0
  123. package/dist/components/VirtualTable/VirtualTableHeaderRow.es.js.map +1 -0
  124. package/dist/components/VirtualTable/VirtualTableProps.d.ts +13 -2
  125. package/dist/components/VirtualTable/VirtualTableRow.d.ts +6 -7
  126. package/dist/components/VirtualTable/VirtualTableRow.es.js +41 -0
  127. package/dist/components/VirtualTable/VirtualTableRow.es.js.map +1 -0
  128. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +2 -1
  129. package/dist/components/VirtualTable/fields/VirtualTableDateField.es.js +71 -0
  130. package/dist/components/VirtualTable/fields/VirtualTableDateField.es.js.map +1 -0
  131. package/dist/components/VirtualTable/fields/VirtualTableInput.es.js +73 -0
  132. package/dist/components/VirtualTable/fields/VirtualTableInput.es.js.map +1 -0
  133. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.es.js +47 -0
  134. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.es.js.map +1 -0
  135. package/dist/components/VirtualTable/fields/VirtualTableSelect.es.js +83 -0
  136. package/dist/components/VirtualTable/fields/VirtualTableSelect.es.js.map +1 -0
  137. package/dist/components/VirtualTable/fields/VirtualTableSwitch.es.js +22 -0
  138. package/dist/components/VirtualTable/fields/VirtualTableSwitch.es.js.map +1 -0
  139. package/dist/components/VirtualTable/selection/SelectionContext.es.js +23 -0
  140. package/dist/components/VirtualTable/selection/SelectionContext.es.js.map +1 -0
  141. package/dist/components/VirtualTable/selection/SelectionStore.es.js +43 -0
  142. package/dist/components/VirtualTable/selection/SelectionStore.es.js.map +1 -0
  143. package/dist/components/VirtualTable/types.d.ts +1 -1
  144. package/dist/components/common/SelectInputLabel.es.js +28 -0
  145. package/dist/components/common/SelectInputLabel.es.js.map +1 -0
  146. package/dist/components/index.es.js +64 -0
  147. package/dist/hooks/PortalContainerContext.es.js +40 -0
  148. package/dist/hooks/PortalContainerContext.es.js.map +1 -0
  149. package/dist/hooks/UiLabelsContext.d.ts +63 -0
  150. package/dist/hooks/UiLabelsContext.es.js +59 -0
  151. package/dist/hooks/UiLabelsContext.es.js.map +1 -0
  152. package/dist/hooks/useDebounceCallback.es.js +15 -0
  153. package/dist/hooks/useDebounceCallback.es.js.map +1 -0
  154. package/dist/hooks/useDebounceValue.es.js +19 -0
  155. package/dist/hooks/useDebounceValue.es.js.map +1 -0
  156. package/dist/hooks/useDebouncedCallback.es.js +36 -0
  157. package/dist/hooks/useDebouncedCallback.es.js.map +1 -0
  158. package/dist/hooks/useInjectStyles.es.js +27 -0
  159. package/dist/hooks/useInjectStyles.es.js.map +1 -0
  160. package/dist/hooks/useIsDarkMode.es.js +61 -0
  161. package/dist/hooks/useIsDarkMode.es.js.map +1 -0
  162. package/dist/hooks/useModalFocus.es.js +81 -0
  163. package/dist/hooks/useModalFocus.es.js.map +1 -0
  164. package/dist/hooks/useOutsideAlerter.es.js +41 -0
  165. package/dist/hooks/useOutsideAlerter.es.js.map +1 -0
  166. package/dist/hooks/useRestoreInterruptedFocus.es.js +61 -0
  167. package/dist/hooks/useRestoreInterruptedFocus.es.js.map +1 -0
  168. package/dist/icons/GitHubIcon.es.js +23 -0
  169. package/dist/icons/GitHubIcon.es.js.map +1 -0
  170. package/dist/icons/HandleIcon.es.js +60 -0
  171. package/dist/icons/HandleIcon.es.js.map +1 -0
  172. package/dist/icons/Icon.es.js +25 -0
  173. package/dist/icons/Icon.es.js.map +1 -0
  174. package/dist/icons/LucideIconByName.d.ts +12 -9
  175. package/dist/icons/LucideIconByName.es.js +83 -0
  176. package/dist/icons/LucideIconByName.es.js.map +1 -0
  177. package/dist/icons/cool_icon_keys.es.js +55 -0
  178. package/dist/icons/cool_icon_keys.es.js.map +1 -0
  179. package/dist/icons/icon_keys.es.js +1941 -0
  180. package/dist/icons/icon_keys.es.js.map +1 -0
  181. package/dist/icons/index.d.ts +4 -3
  182. package/dist/icons/index.es.js +8 -0
  183. package/dist/icons/lucide_icon_map.d.ts +12 -0
  184. package/dist/icons/lucide_icon_map.es.js +2 -0
  185. package/dist/index.d.ts +2 -0
  186. package/dist/index.es.js +87 -9563
  187. package/dist/styles.es.js +158 -0
  188. package/dist/styles.es.js.map +1 -0
  189. package/dist/util/chip_colors.es.js +290 -0
  190. package/dist/util/chip_colors.es.js.map +1 -0
  191. package/dist/util/cls.es.js +10 -0
  192. package/dist/util/cls.es.js.map +1 -0
  193. package/dist/util/debounce.es.js +22 -0
  194. package/dist/util/debounce.es.js.map +1 -0
  195. package/dist/util/hash.es.js +16 -0
  196. package/dist/util/hash.es.js.map +1 -0
  197. package/dist/util/keys.es.js +37 -0
  198. package/dist/util/keys.es.js.map +1 -0
  199. package/dist/util/lazy_chunk.es.js +96 -0
  200. package/dist/util/lazy_chunk.es.js.map +1 -0
  201. package/dist/views/CardView.d.ts +26 -2
  202. package/dist/views/CardView.es.js +435 -0
  203. package/dist/views/CardView.es.js.map +1 -0
  204. package/dist/views/CollectionView/CollectionCardView.es.js +179 -0
  205. package/dist/views/CollectionView/CollectionCardView.es.js.map +1 -0
  206. package/dist/views/CollectionView/CollectionKanbanView.es.js +172 -0
  207. package/dist/views/CollectionView/CollectionKanbanView.es.js.map +1 -0
  208. package/dist/views/CollectionView/CollectionListView.es.js +156 -0
  209. package/dist/views/CollectionView/CollectionListView.es.js.map +1 -0
  210. package/dist/views/CollectionView/CollectionTableView.es.js +149 -0
  211. package/dist/views/CollectionView/CollectionTableView.es.js.map +1 -0
  212. package/dist/views/CollectionView/CollectionView.es.js +197 -0
  213. package/dist/views/CollectionView/CollectionView.es.js.map +1 -0
  214. package/dist/views/CollectionView/CollectionViewToolbar.es.js +155 -0
  215. package/dist/views/CollectionView/CollectionViewToolbar.es.js.map +1 -0
  216. package/dist/views/CollectionView/DefaultCellRenderer.es.js +302 -0
  217. package/dist/views/CollectionView/DefaultCellRenderer.es.js.map +1 -0
  218. package/dist/views/CollectionView/resolveTitleProperty.es.js +56 -0
  219. package/dist/views/CollectionView/resolveTitleProperty.es.js.map +1 -0
  220. package/dist/views/CollectionView/utils.es.js +19 -0
  221. package/dist/views/CollectionView/utils.es.js.map +1 -0
  222. package/dist/views/Kanban/Board.es.js +237 -0
  223. package/dist/views/Kanban/Board.es.js.map +1 -0
  224. package/dist/views/Kanban/BoardColumn.es.js +81 -0
  225. package/dist/views/Kanban/BoardColumn.es.js.map +1 -0
  226. package/dist/views/Kanban/BoardColumnTitle.es.js +27 -0
  227. package/dist/views/Kanban/BoardColumnTitle.es.js.map +1 -0
  228. package/dist/views/Kanban/BoardSortableList.es.js +98 -0
  229. package/dist/views/Kanban/BoardSortableList.es.js.map +1 -0
  230. package/dist/views/Kanban/placement.es.js +27 -0
  231. package/dist/views/Kanban/placement.es.js.map +1 -0
  232. package/dist/views/KanbanView.es.js +11 -0
  233. package/dist/views/KanbanView.es.js.map +1 -0
  234. package/dist/views/ListView.d.ts +15 -2
  235. package/dist/views/ListView.es.js +245 -0
  236. package/dist/views/ListView.es.js.map +1 -0
  237. package/dist/views/useScrollParentRestoration.d.ts +8 -1
  238. package/dist/views/useScrollParentRestoration.es.js +75 -0
  239. package/dist/views/useScrollParentRestoration.es.js.map +1 -0
  240. package/package.json +2 -2
  241. package/dist/index.es.js.map +0 -1
@@ -1,31 +1,34 @@
1
1
  import React from "react";
2
2
  import type { LucideIcon } from "lucide-react";
3
3
  /**
4
- * Rendering a Lucide icon chosen at runtime, without shipping all 1,600 of them
4
+ * Rendering a Lucide icon chosen at runtime, without shipping all ~1,750 of them
5
5
  * on the login screen.
6
6
  *
7
- * `@rebasepro/ui` used to re-export lucide's whole `icons` map:
7
+ * `@rebasepro/ui` re-exports lucide's whole `icons` map:
8
8
  *
9
9
  * export { icons as lucideIcons } from "lucide-react";
10
10
  *
11
11
  * That map is an object literal holding a reference to every icon component in
12
12
  * the library, so a tree-shaker cannot drop a single one — reaching the map
13
- * reaches all of them. Two callers reached it, both by name lookup: `getIcon`
13
+ * reaches all of them. Two callers used to reach it, both by name lookup: `getIcon`
14
14
  * in `@rebasepro/app` (a collection's `icon: "ShoppingCart"`) and the admin's
15
- * icon picker. That put 822 kB of SVG components into the entry chunk's static
16
- * graph, `modulepreload`ed before authentication.
15
+ * icon picker. That put 822 kB of SVG components (unminified) into the entry
16
+ * chunk's static graph, `modulepreload`ed before authentication.
17
17
  *
18
18
  * The ~130 icons the product's own chrome uses are still plain named imports
19
19
  * from `lucide-react`, which tree-shake to just those. Only the by-name lookup
20
- * goes through here, and it pays for the map once, asynchronously, the first
21
- * time a runtime-chosen icon is rendered.
20
+ * goes through here (both callers render {@link LucideIconByName} now), and it
21
+ * pays for the map once, asynchronously, the first time a runtime-chosen icon
22
+ * is rendered: an async chunk of ~480 kB minified, ~120 kB gzipped.
22
23
  */
23
24
  type IconsMap = Record<string, LucideIcon | undefined>;
24
25
  /**
25
26
  * The full lucide icon map, fetched on first use and cached for the session.
26
27
  *
27
- * Prefer {@link LucideIconByName}. This is here for callers that need to know
28
- * whether a name resolves, such as the icon picker's grid.
28
+ * Prefer {@link LucideIconByName}, which calls this. It is exported for callers
29
+ * that need the whole set at once; nothing in the admin does (the icon picker
30
+ * renders `LucideIconByName` per icon). To ask whether a name exists without
31
+ * fetching anything, use `iconKeys`.
29
32
  */
30
33
  export declare function loadLucideIcons(): Promise<IconsMap>;
31
34
  /** The map if it has already been fetched, otherwise `undefined`. Never fetches. */
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { Fragment, jsx } from "react/jsx-runtime";
4
+ //#region src/icons/LucideIconByName.tsx
5
+ var loaded;
6
+ var pending;
7
+ /**
8
+ * The full lucide icon map, fetched on first use and cached for the session.
9
+ *
10
+ * Prefer {@link LucideIconByName}, which calls this. It is exported for callers
11
+ * that need the whole set at once; nothing in the admin does (the icon picker
12
+ * renders `LucideIconByName` per icon). To ask whether a name exists without
13
+ * fetching anything, use `iconKeys`.
14
+ */
15
+ function loadLucideIcons() {
16
+ if (loaded) return Promise.resolve(loaded);
17
+ pending ??= import("./lucide_icon_map.es.js").then(({ icons }) => {
18
+ loaded = icons;
19
+ return loaded;
20
+ });
21
+ return pending;
22
+ }
23
+ /** The map if it has already been fetched, otherwise `undefined`. Never fetches. */
24
+ function getLoadedLucideIcons() {
25
+ return loaded;
26
+ }
27
+ /**
28
+ * Subscribe to the icon map.
29
+ *
30
+ * Returns it synchronously once loaded — including on the very first render of
31
+ * every icon after the first one anywhere, which is what stops a page full of
32
+ * icons from each flashing its placeholder.
33
+ */
34
+ function useLucideIcons() {
35
+ const [map, setMap] = React.useState(loaded);
36
+ React.useEffect(() => {
37
+ if (map) return;
38
+ let cancelled = false;
39
+ loadLucideIcons().then((resolved) => {
40
+ if (!cancelled) setMap(resolved);
41
+ }).catch((error) => console.error("[rebase] could not load the icon set", error));
42
+ return () => {
43
+ cancelled = true;
44
+ };
45
+ }, [map]);
46
+ return map;
47
+ }
48
+ function toPascalCase(str) {
49
+ return str.split(/[-_]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
50
+ }
51
+ /**
52
+ * The same resolution order the two call sites used against the eager map:
53
+ * exact name, then PascalCase, then `CircleAlert` as the visible "unknown icon".
54
+ */
55
+ function resolveLucideIcon(icons, name) {
56
+ return icons[name] ?? icons[toPascalCase(name)] ?? icons.CircleAlert;
57
+ }
58
+ /**
59
+ * An icon named at runtime. Renders `fallback` until the icon set arrives.
60
+ */
61
+ var LucideIconByName = React.memo(function LucideIconByName({ name, size, className, fallback }) {
62
+ const icons = useLucideIcons();
63
+ const Icon = icons ? resolveLucideIcon(icons, name) : void 0;
64
+ if (!Icon) {
65
+ if (fallback !== void 0) return /* @__PURE__ */ jsx(Fragment, { children: fallback });
66
+ return /* @__PURE__ */ jsx("span", {
67
+ "aria-hidden": true,
68
+ className: "inline-block shrink-0",
69
+ style: {
70
+ width: size,
71
+ height: size
72
+ }
73
+ });
74
+ }
75
+ return /* @__PURE__ */ jsx(Icon, {
76
+ size,
77
+ className
78
+ });
79
+ });
80
+ //#endregion
81
+ export { LucideIconByName, getLoadedLucideIcons, loadLucideIcons, resolveLucideIcon, useLucideIcons };
82
+
83
+ //# sourceMappingURL=LucideIconByName.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LucideIconByName.es.js","names":[],"sources":["../../src/icons/LucideIconByName.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport type { LucideIcon } from \"lucide-react\";\n\n/**\n * Rendering a Lucide icon chosen at runtime, without shipping all ~1,750 of them\n * on the login screen.\n *\n * `@rebasepro/ui` re-exports lucide's whole `icons` map:\n *\n * export { icons as lucideIcons } from \"lucide-react\";\n *\n * That map is an object literal holding a reference to every icon component in\n * the library, so a tree-shaker cannot drop a single one — reaching the map\n * reaches all of them. Two callers used to reach it, both by name lookup: `getIcon`\n * in `@rebasepro/app` (a collection's `icon: \"ShoppingCart\"`) and the admin's\n * icon picker. That put 822 kB of SVG components (unminified) into the entry\n * chunk's static graph, `modulepreload`ed before authentication.\n *\n * The ~130 icons the product's own chrome uses are still plain named imports\n * from `lucide-react`, which tree-shake to just those. Only the by-name lookup\n * goes through here (both callers render {@link LucideIconByName} now), and it\n * pays for the map once, asynchronously, the first time a runtime-chosen icon\n * is rendered: an async chunk of ~480 kB minified, ~120 kB gzipped.\n */\n\ntype IconsMap = Record<string, LucideIcon | undefined>;\n\nlet loaded: IconsMap | undefined;\nlet pending: Promise<IconsMap> | undefined;\n\n/**\n * The full lucide icon map, fetched on first use and cached for the session.\n *\n * Prefer {@link LucideIconByName}, which calls this. It is exported for callers\n * that need the whole set at once; nothing in the admin does (the icon picker\n * renders `LucideIconByName` per icon). To ask whether a name exists without\n * fetching anything, use `iconKeys`.\n */\nexport function loadLucideIcons(): Promise<IconsMap> {\n if (loaded) return Promise.resolve(loaded);\n // A local module, not `import(\"lucide-react\")`: lucide-react is statically\n // imported too, so importing IT dynamically cannot split anything off and\n // the map lands in the static chunk. See `lucide_icon_map.ts`.\n pending ??= import(\"./lucide_icon_map\").then(({ icons }) => {\n loaded = icons as IconsMap;\n return loaded;\n });\n return pending;\n}\n\n/** The map if it has already been fetched, otherwise `undefined`. Never fetches. */\nexport function getLoadedLucideIcons(): IconsMap | undefined {\n return loaded;\n}\n\n/**\n * Subscribe to the icon map.\n *\n * Returns it synchronously once loaded — including on the very first render of\n * every icon after the first one anywhere, which is what stops a page full of\n * icons from each flashing its placeholder.\n */\nexport function useLucideIcons(): IconsMap | undefined {\n const [map, setMap] = React.useState<IconsMap | undefined>(loaded);\n React.useEffect(() => {\n if (map) return;\n let cancelled = false;\n loadLucideIcons()\n .then(resolved => { if (!cancelled) setMap(resolved); })\n .catch(error => console.error(\"[rebase] could not load the icon set\", error));\n return () => { cancelled = true; };\n }, [map]);\n return map;\n}\n\nfunction toPascalCase(str: string): string {\n return str.split(/[-_]/).map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(\"\");\n}\n\n/**\n * The same resolution order the two call sites used against the eager map:\n * exact name, then PascalCase, then `CircleAlert` as the visible \"unknown icon\".\n */\nexport function resolveLucideIcon(icons: IconsMap, name: string): LucideIcon | undefined {\n return icons[name] ?? icons[toPascalCase(name)] ?? icons.CircleAlert;\n}\n\nexport type LucideIconByNameProps = {\n /**\n * A PascalCase lucide icon name, e.g. `\"ShoppingCart\"`. Whether a name\n * exists can be answered ahead of the fetch with `iconKeys`, which is a\n * plain string array and costs nothing.\n */\n name: string;\n size?: number;\n className?: string;\n /** Rendered while the icon set is in flight. Defaults to a blank box of `size`. */\n fallback?: React.ReactNode;\n};\n\n/**\n * An icon named at runtime. Renders `fallback` until the icon set arrives.\n */\nexport const LucideIconByName = React.memo(\n function LucideIconByName({ name, size, className, fallback }: LucideIconByNameProps) {\n const icons = useLucideIcons();\n const Icon = icons ? resolveLucideIcon(icons, name) : undefined;\n\n if (!Icon) {\n if (fallback !== undefined) return <>{fallback}</>;\n // A box of the right size, so the layout does not jump when the\n // icon lands.\n return <span aria-hidden={true}\n className={\"inline-block shrink-0\"}\n style={{ width: size, height: size }}/>;\n }\n\n return <Icon size={size}\n className={className}/>;\n }\n);\n"],"mappings":";;;;AA6BA,IAAI;AACJ,IAAI;;;;;;;;;AAUJ,SAAgB,kBAAqC;CACjD,IAAI,QAAQ,OAAO,QAAQ,QAAQ,MAAM;CAIzC,YAAY,OAAO,0BAAoB,CAAC,MAAM,EAAE,YAAY;EACxD,SAAS;EACT,OAAO;CACX,CAAC;CACD,OAAO;AACX;;AAGA,SAAgB,uBAA6C;CACzD,OAAO;AACX;;;;;;;;AASA,SAAgB,iBAAuC;CACnD,MAAM,CAAC,KAAK,UAAU,MAAM,SAA+B,MAAM;CACjE,MAAM,gBAAgB;EAClB,IAAI,KAAK;EACT,IAAI,YAAY;EAChB,gBAAgB,CAAC,CACZ,MAAK,aAAY;GAAE,IAAI,CAAC,WAAW,OAAO,QAAQ;EAAG,CAAC,CAAC,CACvD,OAAM,UAAS,QAAQ,MAAM,wCAAwC,KAAK,CAAC;EAChF,aAAa;GAAE,YAAY;EAAM;CACrC,GAAG,CAAC,GAAG,CAAC;CACR,OAAO;AACX;AAEA,SAAS,aAAa,KAAqB;CACvC,OAAO,IAAI,MAAM,MAAM,CAAC,CAAC,KAAI,SAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AAC9F;;;;;AAMA,SAAgB,kBAAkB,OAAiB,MAAsC;CACrF,OAAO,MAAM,SAAS,MAAM,aAAa,IAAI,MAAM,MAAM;AAC7D;;;;AAkBA,IAAa,mBAAmB,MAAM,KAClC,SAAS,iBAAiB,EAAE,MAAM,MAAM,WAAW,YAAmC;CAClF,MAAM,QAAQ,eAAe;CAC7B,MAAM,OAAO,QAAQ,kBAAkB,OAAO,IAAI,IAAI,KAAA;CAEtD,IAAI,CAAC,MAAM;EACP,IAAI,aAAa,KAAA,GAAW,OAAO,oBAAA,UAAA,EAAA,UAAG,SAAW,CAAA;EAGjD,OAAO,oBAAC,QAAD;GAAM,eAAa;GACtB,WAAW;GACX,OAAO;IAAE,OAAO;IAAM,QAAQ;GAAK;EAAG,CAAA;CAC9C;CAEA,OAAO,oBAAC,MAAD;EAAY;EACJ;CAAW,CAAA;AAC9B,CACJ"}
@@ -0,0 +1,55 @@
1
+ //#region src/icons/cool_icon_keys.ts
2
+ var coolIconKeys = [
3
+ "Rows4",
4
+ "Video",
5
+ "Plane",
6
+ "LayoutDashboard",
7
+ "LayoutGrid",
8
+ "Square",
9
+ "Snowflake",
10
+ "CircleDashed",
11
+ "AlignCenterHorizontal",
12
+ "Disc",
13
+ "Infinity",
14
+ "Maximize",
15
+ "Play",
16
+ "Sparkles",
17
+ "Music",
18
+ "Wallet",
19
+ "Layout",
20
+ "Zap",
21
+ "Circle",
22
+ "Coffee",
23
+ "ImageOff",
24
+ "Sun",
25
+ "Cable",
26
+ "CalendarDays",
27
+ "Dices",
28
+ "Shapes",
29
+ "Cloud",
30
+ "Palette",
31
+ "CreditCard",
32
+ "Headphones",
33
+ "Egg",
34
+ "Disc3",
35
+ "Flag",
36
+ "Bandage",
37
+ "Thermometer",
38
+ "Hexagon",
39
+ "Network",
40
+ "Library",
41
+ "Pizza",
42
+ "Cpu",
43
+ "Plug",
44
+ "Files",
45
+ "Globe",
46
+ "SignalZero",
47
+ "Gamepad2",
48
+ "CloudLightning",
49
+ "ListTree",
50
+ "Command"
51
+ ];
52
+ //#endregion
53
+ export { coolIconKeys };
54
+
55
+ //# sourceMappingURL=cool_icon_keys.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cool_icon_keys.es.js","names":[],"sources":["../../src/icons/cool_icon_keys.ts"],"sourcesContent":["export const coolIconKeys: string[] = [\n \"Rows4\", \"Video\",\n \"Plane\", \"LayoutDashboard\", \"LayoutGrid\", \"Square\", \"Snowflake\",\n \"CircleDashed\", \"AlignCenterHorizontal\", \"Disc\", \"Infinity\",\n \"Maximize\", \"Play\", \"Sparkles\", \"Music\",\n \"Wallet\", \"Layout\", \"Zap\", \"Circle\", \"Coffee\",\n \"ImageOff\", \"Sun\", \"Cable\", \"CalendarDays\",\n \"Dices\", \"Shapes\", \"Cloud\", \"Palette\",\n \"CreditCard\", \"Headphones\", \"Egg\", \"Disc3\", \"Flag\",\n \"Bandage\", \"Thermometer\", \"Hexagon\", \"Network\", \"Library\", \"Pizza\",\n \"Cpu\", \"Plug\", \"Files\", \"Globe\", \"SignalZero\",\n \"Gamepad2\", \"CloudLightning\", \"ListTree\", \"Command\"];\n"],"mappings":";AAAA,IAAa,eAAyB;CAClC;CAAS;CACT;CAAS;CAAmB;CAAc;CAAU;CACpD;CAAgB;CAAyB;CAAQ;CACjD;CAAY;CAAQ;CAAY;CAChC;CAAU;CAAU;CAAO;CAAU;CACrC;CAAY;CAAO;CAAS;CAC5B;CAAS;CAAU;CAAS;CAC5B;CAAc;CAAc;CAAO;CAAS;CAC5C;CAAW;CAAe;CAAW;CAAW;CAAW;CAC3D;CAAO;CAAQ;CAAS;CAAS;CACjC;CAAY;CAAkB;CAAY;AAAS"}