gridsmith-ui 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +969 -0
  2. package/README.md +21 -5
  3. package/dist/charts.d.ts +2 -2
  4. package/dist/charts.js +58 -43
  5. package/dist/charts.js.map +1 -1
  6. package/dist/chat.js +4 -3
  7. package/dist/chat.js.map +1 -1
  8. package/dist/{chunk-W7GCEJEH.js → chunk-2CKSSWYG.js} +10 -6
  9. package/dist/chunk-2CKSSWYG.js.map +1 -0
  10. package/dist/chunk-3BRQRKDO.js +1 -0
  11. package/dist/chunk-3BRQRKDO.js.map +1 -1
  12. package/dist/{chunk-RWKCAKN3.js → chunk-5TUVX4B2.js} +6 -5
  13. package/dist/chunk-5TUVX4B2.js.map +1 -0
  14. package/dist/{chunk-X2HEV7FB.js → chunk-64TXZ4L7.js} +23 -33
  15. package/dist/chunk-64TXZ4L7.js.map +1 -0
  16. package/dist/chunk-7Q46JXSK.js +1 -0
  17. package/dist/chunk-7Q46JXSK.js.map +1 -1
  18. package/dist/chunk-CRQ6KCRD.js +1 -0
  19. package/dist/chunk-CRQ6KCRD.js.map +1 -1
  20. package/dist/{chunk-HZIP4EJI.js → chunk-EKBWWA6P.js} +53 -6
  21. package/dist/chunk-EKBWWA6P.js.map +1 -0
  22. package/dist/chunk-HP7WUZPK.js +1 -0
  23. package/dist/chunk-HP7WUZPK.js.map +1 -1
  24. package/dist/{chunk-QGSCF7PN.js → chunk-IXR4UEF4.js} +5 -4
  25. package/dist/chunk-IXR4UEF4.js.map +1 -0
  26. package/dist/chunk-M2QRNBDQ.js +1 -0
  27. package/dist/chunk-M2QRNBDQ.js.map +1 -1
  28. package/dist/chunk-MD2EFMES.js +1 -0
  29. package/dist/chunk-MD2EFMES.js.map +1 -1
  30. package/dist/chunk-NRHIYS5W.js +1 -0
  31. package/dist/chunk-NRHIYS5W.js.map +1 -1
  32. package/dist/chunk-OTCEJN64.js +1 -0
  33. package/dist/chunk-OTCEJN64.js.map +1 -1
  34. package/dist/chunk-OYNUU346.js +78 -0
  35. package/dist/chunk-OYNUU346.js.map +1 -0
  36. package/dist/{chunk-FHMCAOAH.js → chunk-PO65I3MQ.js} +4 -3
  37. package/dist/chunk-PO65I3MQ.js.map +1 -0
  38. package/dist/chunk-QM4SJKWV.js +1 -0
  39. package/dist/chunk-QM4SJKWV.js.map +1 -1
  40. package/dist/{chunk-3CUKJ4VP.js → chunk-R5NFCEZ3.js} +11 -8
  41. package/dist/chunk-R5NFCEZ3.js.map +1 -0
  42. package/dist/{chunk-2YSEME33.js → chunk-SFY2KMHG.js} +64 -6
  43. package/dist/chunk-SFY2KMHG.js.map +1 -0
  44. package/dist/{chunk-HYMXAIXN.js → chunk-TJEV7YAY.js} +38 -10
  45. package/dist/chunk-TJEV7YAY.js.map +1 -0
  46. package/dist/chunk-WH2FUFAC.js +1 -0
  47. package/dist/chunk-WH2FUFAC.js.map +1 -1
  48. package/dist/chunk-XVB55M3N.js +1 -0
  49. package/dist/chunk-XVB55M3N.js.map +1 -1
  50. package/dist/{chunk-JXANCXK6.js → chunk-ZI3OQDET.js} +19 -4
  51. package/dist/chunk-ZI3OQDET.js.map +1 -0
  52. package/dist/data-grid.d.ts +1 -1
  53. package/dist/data-grid.js +6 -4
  54. package/dist/data-grid.js.map +1 -1
  55. package/dist/editor-mentions.js +3 -2
  56. package/dist/editor-mentions.js.map +1 -1
  57. package/dist/editor.js +4 -3
  58. package/dist/editor.js.map +1 -1
  59. package/dist/{feather-W26ERBQV.js → feather-FNBQ74RR.js} +12 -18
  60. package/dist/feather-FNBQ74RR.js.map +1 -0
  61. package/dist/{heroicons-MY43466C.js → heroicons-DODCSYWD.js} +11 -9
  62. package/dist/heroicons-DODCSYWD.js.map +1 -0
  63. package/dist/icons.d.ts +32 -5
  64. package/dist/icons.js +2 -1
  65. package/dist/icons.js.map +1 -1
  66. package/dist/index.d.ts +469 -67
  67. package/dist/index.js +3017 -1751
  68. package/dist/index.js.map +1 -1
  69. package/dist/kanban.js +5 -5
  70. package/dist/{lucide-CMPVM3PS.js → lucide-ZWE3EPGP.js} +11 -9
  71. package/dist/lucide-ZWE3EPGP.js.map +1 -0
  72. package/dist/{phosphor-RMHZOW2O.js → phosphor-DIHPA4AJ.js} +11 -9
  73. package/dist/phosphor-DIHPA4AJ.js.map +1 -0
  74. package/dist/resizable.js +8 -7
  75. package/dist/resizable.js.map +1 -1
  76. package/dist/roots.css +43 -7
  77. package/dist/{tabler-MJVEYHA5.js → tabler-D3VYTSGI.js} +11 -9
  78. package/dist/tabler-D3VYTSGI.js.map +1 -0
  79. package/dist/tokens.css +17 -8
  80. package/dist/{use-pagination-BnKOnBdz.d.ts → use-pagination-BxcRlNQG.d.ts} +6 -0
  81. package/dist/utils.d.ts +275 -1
  82. package/dist/utils.js +875 -1
  83. package/dist/utils.js.map +1 -1
  84. package/dist/virtualized.d.ts +1 -1
  85. package/dist/virtualized.js +6 -4
  86. package/dist/virtualized.js.map +1 -1
  87. package/dist-static/tokens.css +17 -8
  88. package/package.json +5 -3
  89. package/dist/chunk-2YSEME33.js.map +0 -1
  90. package/dist/chunk-3CUKJ4VP.js.map +0 -1
  91. package/dist/chunk-FHMCAOAH.js.map +0 -1
  92. package/dist/chunk-HYMXAIXN.js.map +0 -1
  93. package/dist/chunk-HZIP4EJI.js.map +0 -1
  94. package/dist/chunk-JXANCXK6.js.map +0 -1
  95. package/dist/chunk-QGSCF7PN.js.map +0 -1
  96. package/dist/chunk-RWKCAKN3.js.map +0 -1
  97. package/dist/chunk-W7GCEJEH.js.map +0 -1
  98. package/dist/chunk-WOVYHFUD.js +0 -50
  99. package/dist/chunk-WOVYHFUD.js.map +0 -1
  100. package/dist/chunk-X2HEV7FB.js.map +0 -1
  101. package/dist/feather-W26ERBQV.js.map +0 -1
  102. package/dist/heroicons-MY43466C.js.map +0 -1
  103. package/dist/lucide-CMPVM3PS.js.map +0 -1
  104. package/dist/phosphor-RMHZOW2O.js.map +0 -1
  105. package/dist/tabler-MJVEYHA5.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { pickCurated, buildExtendedMap } from './chunk-NRHIYS5W.js';
2
3
  import { forwardRef, createElement } from 'react';
3
4
 
@@ -64,7 +65,8 @@ var CURATED = {
64
65
  "copy": "DocumentDuplicateIcon",
65
66
  "external-link": "ArrowTopRightOnSquareIcon",
66
67
  "filter": "FunnelIcon",
67
- "lock": "LockClosedIcon"
68
+ "lock": "LockClosedIcon",
69
+ "map-pin": "MapPinIcon"
68
70
  };
69
71
  var TypeGlyph = forwardRef(function TypeGlyph2(props, ref) {
70
72
  return createElement(
@@ -73,19 +75,19 @@ var TypeGlyph = forwardRef(function TypeGlyph2(props, ref) {
73
75
  createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 7.5v-3h15v3M12 4.5v15M9 19.5h6" })
74
76
  );
75
77
  });
76
- async function peer() {
77
- return await import('@heroicons/react/24/outline');
78
+ async function peer(load) {
79
+ return await load();
78
80
  }
79
- async function loadCurated() {
80
- return { ...pickCurated(await peer(), CURATED), type: TypeGlyph };
81
+ async function loadCurated(load) {
82
+ return { ...pickCurated(await peer(load), CURATED), type: TypeGlyph };
81
83
  }
82
- async function loadExtended() {
83
- const mod = await peer();
84
+ async function loadExtended(load) {
85
+ const mod = await peer(load);
84
86
  const extended = buildExtendedMap(mod, {}, { stripSuffix: "Icon" });
85
87
  Object.assign(extended, pickCurated(mod, CURATED), { type: TypeGlyph });
86
88
  return extended;
87
89
  }
88
90
 
89
91
  export { loadCurated, loadExtended };
90
- //# sourceMappingURL=heroicons-MY43466C.js.map
91
- //# sourceMappingURL=heroicons-MY43466C.js.map
92
+ //# sourceMappingURL=heroicons-DODCSYWD.js.map
93
+ //# sourceMappingURL=heroicons-DODCSYWD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/heroicons.ts"],"names":["TypeGlyph"],"mappings":"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","file":"heroicons-DODCSYWD.js","sourcesContent":["import { createElement, forwardRef } from 'react'\nimport type { IconMap, PackLoad } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Heroicons icons.\n *\n * The pack is reached only through the import the app registers for it\n * (registerIconPack, Sprint 25.21 P1): no file the library publishes names the\n * package, so a bundler never looks for a pack the app didn't install\n * (Next.js's webpack resolved every such import, and failed the build). Never a\n * static named import either: a static import of an optional peer makes a\n * consumer's production build fail on Vite 8 when the peer is not installed\n * (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the import fails, loadPack in icons.tsx reports which\n * package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"HomeIcon\",\n \"folder\": \"FolderIcon\",\n \"chart\": \"ChartBarIcon\",\n \"settings\": \"Cog6ToothIcon\",\n \"chevron-right\": \"ChevronRightIcon\",\n \"close\": \"XMarkIcon\",\n \"plus\": \"PlusIcon\",\n \"search\": \"MagnifyingGlassIcon\",\n \"bell\": \"BellIcon\",\n \"user\": \"UserIcon\",\n \"check\": \"CheckIcon\",\n \"warning\": \"ExclamationTriangleIcon\",\n \"info\": \"InformationCircleIcon\",\n \"error\": \"ExclamationCircleIcon\",\n \"clock\": \"ClockIcon\",\n \"calendar\": \"CalendarDaysIcon\",\n \"bold\": \"BoldIcon\",\n \"italic\": \"ItalicIcon\",\n \"underline\": \"UnderlineIcon\",\n \"strikethrough\": \"StrikethroughIcon\",\n \"align-left\": \"Bars3BottomLeftIcon\",\n \"align-center\": \"Bars3Icon\",\n \"align-right\": \"Bars3BottomRightIcon\",\n \"list\": \"ListBulletIcon\",\n \"list-ordered\": \"NumberedListIcon\",\n \"list-checks\": \"ClipboardDocumentCheckIcon\",\n \"link\": \"LinkIcon\",\n \"image\": \"PhotoIcon\",\n \"table\": \"TableCellsIcon\",\n \"code\": \"CodeBracketIcon\",\n \"quote\": \"ChatBubbleBottomCenterTextIcon\",\n \"minus\": \"MinusIcon\",\n \"superscript\": \"H1Icon\",\n \"subscript\": \"H2Icon\",\n \"highlight\": \"PaintBrushIcon\",\n \"chevron-up\": \"ChevronUpIcon\",\n \"chevron-down\": \"ChevronDownIcon\",\n \"chevron-left\": \"ChevronLeftIcon\",\n \"trash\": \"TrashIcon\",\n \"undo\": \"ArrowUturnLeftIcon\",\n \"redo\": \"ArrowUturnRightIcon\",\n \"arrow-left\": \"ArrowLeftIcon\",\n \"grip-vertical\": \"Bars2Icon\",\n \"mic\": \"MicrophoneIcon\",\n \"paperclip\": \"PaperClipIcon\",\n \"send\": \"PaperAirplaneIcon\",\n \"log-out\": \"ArrowRightStartOnRectangleIcon\",\n \"edit\": \"PencilIcon\",\n \"menu\": \"Bars3Icon\",\n \"more-horizontal\": \"EllipsisHorizontalIcon\",\n \"star\": \"StarIcon\",\n \"bookmark\": \"BookmarkIcon\",\n \"download\": \"ArrowDownTrayIcon\",\n \"upload\": \"ArrowUpTrayIcon\",\n \"sparkles\": \"SparklesIcon\",\n \"file\": \"DocumentIcon\",\n \"file-text\": \"DocumentTextIcon\",\n \"eye\": \"EyeIcon\",\n \"eye-off\": \"EyeSlashIcon\",\n \"copy\": \"DocumentDuplicateIcon\",\n \"external-link\": \"ArrowTopRightOnSquareIcon\",\n \"filter\": \"FunnelIcon\",\n \"lock\": \"LockClosedIcon\",\n \"map-pin\": \"MapPinIcon\",\n}\n\n/**\n * Heroicons draws no letter T, and its LanguageIcon (文A, translate) meant the wrong thing beside a document (round 28,\n * R28-35). So `type` is a T drawn in the pack's own outline style: a 24 px box, a 1.5 stroke that the theme's weight\n * overrides, round ends.\n */\nconst TypeGlyph = forwardRef<SVGSVGElement, Record<string, unknown>>(function TypeGlyph(props, ref) {\n return createElement('svg', { ref, xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: 1.5, stroke: 'currentColor', 'aria-hidden': true, 'data-slot': 'icon', ...props },\n createElement('path', { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M4.5 7.5v-3h15v3M12 4.5v15M9 19.5h6' }))\n})\n\n/** The pack's module, through the import handed to it (Sprint 25.21 P1). */\nasync function peer(load: PackLoad): Promise<Record<string, unknown>> {\n return (await load()) as Record<string, unknown>\n}\n\nexport async function loadCurated(load: PackLoad): Promise<IconMap> {\n return { ...pickCurated(await peer(load), CURATED), type: TypeGlyph }\n}\n\nexport async function loadExtended(load: PackLoad): Promise<IconMap> {\n const mod = await peer(load)\n const extended = buildExtendedMap(mod, {}, { stripSuffix: \"Icon\" })\n Object.assign(extended, pickCurated(mod, CURATED), { type: TypeGlyph })\n return extended\n}\n"]}
package/dist/icons.d.ts CHANGED
@@ -1,13 +1,31 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode, ReactElement } from 'react';
3
3
 
4
+ /**
5
+ * The import each icon pack takes, as an app writes it when it registers its theme's pack (Sprint 25.21 P1:
6
+ * `registerIconPack('feather', () => import('react-icons/fi'))`). One table for the library's warning, the shells
7
+ * `get_app_shell` writes and the engine's fix. Lucide is the library's own: every app installs it, as the fallback.
8
+ * No React here, so the platform reads it as it reads the other showcase modules.
9
+ */
10
+ declare const ICON_PACK_IMPORTS: {
11
+ readonly feather: "react-icons/fi";
12
+ readonly heroicons: "@heroicons/react/24/outline";
13
+ readonly phosphor: "@phosphor-icons/react";
14
+ readonly tabler: "@tabler/icons-react";
15
+ };
16
+ /** A pack an app registers: every pack but Lucide. */
17
+ type RegisteredIconPack = keyof typeof ICON_PACK_IMPORTS;
18
+
19
+ /** A pack's module, as an import: the app's own for its theme's pack (registerIconPack), the library's own for Lucide. */
20
+ type PackLoad = () => Promise<unknown>;
21
+
4
22
  /**
5
23
  * Runtime list of curated icon names. The CuratedIconName type derives from
6
24
  * this array, so adding a name here extends autocomplete automatically.
7
25
  * Every name must have an alias (or auto-kebab match) in ALL five packs —
8
26
  * icon-completeness.test.tsx enforces this.
9
27
  */
10
- declare const CURATED_ICON_NAMES: readonly ["home", "folder", "chart", "settings", "chevron-right", "close", "plus", "search", "bell", "user", "check", "warning", "info", "error", "clock", "calendar", "bold", "italic", "underline", "strikethrough", "align-left", "align-center", "align-right", "list", "list-ordered", "list-checks", "link", "image", "table", "code", "quote", "minus", "superscript", "subscript", "highlight", "type", "chevron-up", "chevron-down", "chevron-left", "trash", "undo", "redo", "arrow-left", "grip-vertical", "mic", "paperclip", "send", "log-out", "edit", "menu", "more-horizontal", "star", "bookmark", "download", "upload", "sparkles", "file", "file-text", "eye", "eye-off", "copy", "external-link", "filter", "lock"];
28
+ declare const CURATED_ICON_NAMES: readonly ["home", "folder", "chart", "settings", "chevron-right", "close", "plus", "search", "bell", "user", "check", "warning", "info", "error", "clock", "calendar", "bold", "italic", "underline", "strikethrough", "align-left", "align-center", "align-right", "list", "list-ordered", "list-checks", "link", "image", "table", "code", "quote", "minus", "superscript", "subscript", "highlight", "type", "chevron-up", "chevron-down", "chevron-left", "trash", "undo", "redo", "arrow-left", "grip-vertical", "mic", "paperclip", "send", "log-out", "edit", "menu", "more-horizontal", "star", "bookmark", "download", "upload", "sparkles", "file", "file-text", "eye", "eye-off", "copy", "external-link", "filter", "lock", "map-pin"];
11
29
  type CuratedIconName = (typeof CURATED_ICON_NAMES)[number];
12
30
  /**
13
31
  * Curated names provide autocomplete and work identically across all 5 packs.
@@ -16,6 +34,13 @@ type CuratedIconName = (typeof CURATED_ICON_NAMES)[number];
16
34
  */
17
35
  type IconName = CuratedIconName | (string & {});
18
36
  type IconPack = "lucide" | "phosphor" | "heroicons" | "tabler" | "feather";
37
+ /**
38
+ * The theme's icon pack, as the app's own import (Sprint 25.21 P1): `registerIconPack('feather', () =>
39
+ * import('react-icons/fi'))` at the top of the shell, before any preloadPack. The library names no pack itself, so an
40
+ * app's bundler only ever meets the pack the app installed. A pack drawn before it is registered draws Lucide's icons,
41
+ * and draws its own once registered. Lucide needs no line.
42
+ */
43
+ declare function registerIconPack(pack: RegisteredIconPack, load: PackLoad): void;
19
44
  declare function IconProvider({ pack, weight, children }: {
20
45
  pack: IconPack;
21
46
  weight: number;
@@ -23,10 +48,12 @@ declare function IconProvider({ pack, weight, children }: {
23
48
  }): react_jsx_runtime.JSX.Element;
24
49
  /**
25
50
  * Start loading a pack's icon chunk before React mounts. Call this in your
26
- * app's entry point (e.g. main.tsx) for the fastest possible cold start:
51
+ * app's entry point or shell for the fastest possible cold start, after the
52
+ * pack is registered (every pack but Lucide, Sprint 25.21 P1):
27
53
  *
28
- * import { preloadPack } from 'gridsmith-ui/icons'
29
- * preloadPack('lucide')
54
+ * import { preloadPack, registerIconPack } from 'gridsmith-ui/icons'
55
+ * registerIconPack('feather', () => import('react-icons/fi'))
56
+ * preloadPack('feather')
30
57
  */
31
58
  declare function preloadPack(pack: IconPack): void;
32
59
  declare function Icon({ name, size, className, from }: {
@@ -42,4 +69,4 @@ declare function Icon({ name, size, className, from }: {
42
69
  */
43
70
  type IconSlot = IconName | ReactElement | false | null | undefined;
44
71
 
45
- export { Icon, type IconName, type IconPack, IconProvider, type IconSlot, preloadPack };
72
+ export { Icon, type IconName, type IconPack, IconProvider, type IconSlot, preloadPack, registerIconPack };
package/dist/icons.js CHANGED
@@ -1,3 +1,4 @@
1
- export { Icon, IconProvider, preloadPack } from './chunk-HYMXAIXN.js';
1
+ "use client";
2
+ export { Icon, IconProvider, preloadPack, registerIconPack } from './chunk-TJEV7YAY.js';
2
3
  //# sourceMappingURL=icons.js.map
3
4
  //# sourceMappingURL=icons.js.map
package/dist/icons.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"icons.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"icons.js"}