gridsmith-ui 0.3.5 → 0.6.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.
- package/README.md +63 -3
- package/dist/charts.d.ts +246 -0
- package/dist/charts.js +1028 -0
- package/dist/charts.js.map +1 -0
- package/dist/chunk-4SDKQDYV.js +93 -0
- package/dist/chunk-4SDKQDYV.js.map +1 -0
- package/dist/chunk-CHNY75QI.js +278 -0
- package/dist/chunk-CHNY75QI.js.map +1 -0
- package/dist/chunk-DPF6776I.js +36 -0
- package/dist/chunk-DPF6776I.js.map +1 -0
- package/dist/{chunk-5XIPPVH7.js → chunk-IUBWNDUK.js} +15 -4
- package/dist/chunk-IUBWNDUK.js.map +1 -0
- package/dist/chunk-OUYJXVLQ.js +41 -0
- package/dist/chunk-OUYJXVLQ.js.map +1 -0
- package/dist/chunk-XUBVMRIE.js +149 -0
- package/dist/chunk-XUBVMRIE.js.map +1 -0
- package/dist/data-grid.d.ts +27 -0
- package/dist/data-grid.js +293 -0
- package/dist/data-grid.js.map +1 -0
- package/dist/editor.d.ts +18 -0
- package/dist/editor.js +632 -0
- package/dist/editor.js.map +1 -0
- package/dist/feather-V32UNIQL.js +71 -0
- package/dist/feather-V32UNIQL.js.map +1 -0
- package/dist/heroicons-CA5OQ76O.js +71 -0
- package/dist/heroicons-CA5OQ76O.js.map +1 -0
- package/dist/icons.d.ts +9 -1
- package/dist/icons.js +1 -2
- package/dist/index.d.ts +430 -133
- package/dist/index.js +10510 -98031
- package/dist/index.js.map +1 -1
- package/dist/kanban.d.ts +25 -0
- package/dist/kanban.js +224 -0
- package/dist/kanban.js.map +1 -0
- package/dist/lucide-AILUUOAJ.js +71 -0
- package/dist/lucide-AILUUOAJ.js.map +1 -0
- package/dist/phosphor-A4JOBGMT.js +71 -0
- package/dist/phosphor-A4JOBGMT.js.map +1 -0
- package/dist/resizable.d.ts +39 -0
- package/dist/resizable.js +89 -0
- package/dist/resizable.js.map +1 -0
- package/dist/roots.css +46 -11
- package/dist/tabler-TVOR6AFM.js +71 -0
- package/dist/tabler-TVOR6AFM.js.map +1 -0
- package/dist/use-breakpoint-Cn51IubK.d.ts +30 -0
- package/dist/utils.js +1 -2
- package/dist/virtualized.d.ts +16 -0
- package/dist/virtualized.js +55 -0
- package/dist/virtualized.js.map +1 -0
- package/package.json +144 -4
- package/dist/chunk-5WRI5ZAA.js +0 -29
- package/dist/chunk-5WRI5ZAA.js.map +0 -1
- package/dist/chunk-5XIPPVH7.js.map +0 -1
- package/dist/chunk-WVB3SRXW.js +0 -82
- package/dist/chunk-WVB3SRXW.js.map +0 -1
- package/dist/feather-N37QZ7LA.js +0 -72
- package/dist/feather-N37QZ7LA.js.map +0 -1
- package/dist/heroicons-HJTKMLIJ.js +0 -72
- package/dist/heroicons-HJTKMLIJ.js.map +0 -1
- package/dist/lucide-6TGT4G26.js +0 -67
- package/dist/lucide-6TGT4G26.js.map +0 -1
- package/dist/phosphor-BWDP4PU7.js +0 -72
- package/dist/phosphor-BWDP4PU7.js.map +0 -1
- package/dist/tabler-6TPNTLFV.js +0 -72
- package/dist/tabler-6TPNTLFV.js.map +0 -1
package/dist/roots.css
CHANGED
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
--ds-ambient-hover-ease: cubic-bezier(0.33, 1, 0.68, 1);
|
|
53
53
|
|
|
54
54
|
--ds-sidebar-width: 224px;
|
|
55
|
-
--ds-sidebar-compact-width:
|
|
55
|
+
--ds-sidebar-compact-width: 76px;
|
|
56
56
|
--ds-sidebar-collapsed-width: 56px;
|
|
57
57
|
--ds-navbar-height: 48px;
|
|
58
58
|
--ds-navbar-height-compact: 40px;
|
|
@@ -195,11 +195,27 @@
|
|
|
195
195
|
--ds-touch-target-min: 44px;
|
|
196
196
|
|
|
197
197
|
/* ── L1: Z-Index Scale ─────────────────────────────────────────── */
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
/*
|
|
199
|
+
* Stacking order (low → high). Floating layers attached to a control
|
|
200
|
+
* (dropdowns, menus, pickers, popovers, hover cards) sit ABOVE modals
|
|
201
|
+
* because they are routinely opened from inside a Dialog or Drawer.
|
|
202
|
+
*
|
|
203
|
+
* sticky 200 navbars, sticky page headers, page-top alerts
|
|
204
|
+
* overlay 300 scrims / backdrops behind drawers and sheets
|
|
205
|
+
* modal 400 Dialog, Drawer, Sheet, CommandPalette
|
|
206
|
+
* popover 450 Dropdown, DropdownMenu, Combobox, Popover, ContextMenu,
|
|
207
|
+
* HoverCard, DatePicker/DateRangePicker/TimePicker panels,
|
|
208
|
+
* NavMenu, SidebarNav flyouts, editor menus
|
|
209
|
+
* tooltip 500 Tooltip (must show above an open popover)
|
|
210
|
+
* toast 600 Toast / ToastProvider stack
|
|
211
|
+
*
|
|
212
|
+
* --ds-z-dropdown is kept as an alias of popover for existing consumers.
|
|
213
|
+
*/
|
|
200
214
|
--ds-z-sticky: 200;
|
|
201
215
|
--ds-z-overlay: 300;
|
|
202
216
|
--ds-z-modal: 400;
|
|
217
|
+
--ds-z-popover: 450;
|
|
218
|
+
--ds-z-dropdown: var(--ds-z-popover);
|
|
203
219
|
--ds-z-tooltip: 500;
|
|
204
220
|
--ds-z-toast: 600;
|
|
205
221
|
|
|
@@ -264,13 +280,32 @@
|
|
|
264
280
|
--ds-accent-primary: var(--ds-primary-500);
|
|
265
281
|
--ds-accent-primary-hover: var(--ds-primary-600);
|
|
266
282
|
--ds-accent-primary-active: var(--ds-primary-700);
|
|
267
|
-
--ds-accent-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
283
|
+
--ds-accent-whisper: color-mix(in srgb, var(--ds-accent-primary) 5%, transparent);
|
|
284
|
+
--ds-accent-subtle: color-mix(in srgb, var(--ds-accent-primary) 10%, transparent);
|
|
285
|
+
--ds-accent-muted: color-mix(in srgb, var(--ds-accent-primary) 20%, transparent);
|
|
286
|
+
--ds-accent-soft: color-mix(in srgb, var(--ds-accent-primary) 30%, transparent);
|
|
287
|
+
--ds-accent-subtle-text: var(--ds-accent-primary);
|
|
288
|
+
|
|
289
|
+
/* Categorical chart scale — 6 series colours for data visualisation.
|
|
290
|
+
chart-1 is the accent, chart-2–6 map to palette bold variants.
|
|
291
|
+
When palette tokens are absent (no theme loaded), chart-2–6 fall
|
|
292
|
+
back to neutral shades so something visible always renders. */
|
|
293
|
+
--ds-chart-1: var(--ds-accent-primary);
|
|
294
|
+
--ds-chart-1-soft: color-mix(in oklch, var(--ds-accent-primary) 30%, transparent);
|
|
295
|
+
--ds-chart-2: var(--ds-palette-1-bold, var(--ds-neutral-500));
|
|
296
|
+
--ds-chart-2-soft: color-mix(in oklch, var(--ds-chart-2) 30%, transparent);
|
|
297
|
+
--ds-chart-3: var(--ds-palette-2-bold, var(--ds-neutral-400));
|
|
298
|
+
--ds-chart-3-soft: color-mix(in oklch, var(--ds-chart-3) 30%, transparent);
|
|
299
|
+
--ds-chart-4: var(--ds-palette-3-bold, var(--ds-neutral-600));
|
|
300
|
+
--ds-chart-4-soft: color-mix(in oklch, var(--ds-chart-4) 30%, transparent);
|
|
301
|
+
--ds-chart-5: var(--ds-palette-4-bold, var(--ds-neutral-300));
|
|
302
|
+
--ds-chart-5-soft: color-mix(in oklch, var(--ds-chart-5) 30%, transparent);
|
|
303
|
+
--ds-chart-6: var(--ds-palette-5-bold, var(--ds-neutral-700));
|
|
304
|
+
--ds-chart-6-soft: color-mix(in oklch, var(--ds-chart-6) 30%, transparent);
|
|
305
|
+
|
|
306
|
+
/* Backwards-compat aliases */
|
|
307
|
+
--ds-chart-fill: var(--ds-chart-1);
|
|
308
|
+
--ds-chart-fill-soft: var(--ds-chart-1-soft);
|
|
274
309
|
|
|
275
310
|
--ds-status-success: var(--ds-success-500);
|
|
276
311
|
--ds-status-success-bg: var(--ds-success-100);
|
|
@@ -290,7 +325,7 @@
|
|
|
290
325
|
--ds-sidebar-text-secondary: var(--ds-text-secondary);
|
|
291
326
|
--ds-sidebar-text-muted: var(--ds-text-muted);
|
|
292
327
|
--ds-sidebar-accent: var(--ds-accent-primary);
|
|
293
|
-
--ds-sidebar-accent-subtle: color-mix(in
|
|
328
|
+
--ds-sidebar-accent-subtle: color-mix(in srgb, var(--ds-sidebar-accent) 10%, transparent);
|
|
294
329
|
|
|
295
330
|
/* Tab strip — presets can override for stronger contrast (e.g. Modern Dark) */
|
|
296
331
|
--ds-tab-hover-bg: var(--ds-bg-muted);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { buildExtendedMap } from './chunk-GYVBRUO2.js';
|
|
2
|
+
import { IconUpload, IconDownload, IconBookmark, IconStar, IconMenu2, IconPencil, IconLogout, IconSend, IconPaperclip, IconMicrophone, IconGripVertical, IconArrowLeft, IconArrowForwardUp, IconArrowBackUp, IconTrash, IconChevronDown, IconChevronUp, IconTypography, IconHighlight, IconSubscript, IconSuperscript, IconMinus, IconQuote, IconCode, IconTable, IconPhoto, IconLink, IconListCheck, IconListNumbers, IconList, IconAlignRight, IconAlignCenter, IconAlignLeft, IconStrikethrough, IconUnderline, IconItalic, IconBold, IconCalendar, IconClock, IconAlertCircle, IconInfoCircle, IconAlertTriangle, IconCheck, IconUser, IconBell, IconSearch, IconPlus, IconX, IconChevronRight, IconSettings, IconChartBar, IconFolder, IconHome } from '@tabler/icons-react';
|
|
3
|
+
|
|
4
|
+
var curated = {
|
|
5
|
+
"home": IconHome,
|
|
6
|
+
"folder": IconFolder,
|
|
7
|
+
"chart": IconChartBar,
|
|
8
|
+
"settings": IconSettings,
|
|
9
|
+
"chevron-right": IconChevronRight,
|
|
10
|
+
"close": IconX,
|
|
11
|
+
"plus": IconPlus,
|
|
12
|
+
"search": IconSearch,
|
|
13
|
+
"bell": IconBell,
|
|
14
|
+
"user": IconUser,
|
|
15
|
+
"check": IconCheck,
|
|
16
|
+
"warning": IconAlertTriangle,
|
|
17
|
+
"info": IconInfoCircle,
|
|
18
|
+
"error": IconAlertCircle,
|
|
19
|
+
"clock": IconClock,
|
|
20
|
+
"calendar": IconCalendar,
|
|
21
|
+
"bold": IconBold,
|
|
22
|
+
"italic": IconItalic,
|
|
23
|
+
"underline": IconUnderline,
|
|
24
|
+
"strikethrough": IconStrikethrough,
|
|
25
|
+
"align-left": IconAlignLeft,
|
|
26
|
+
"align-center": IconAlignCenter,
|
|
27
|
+
"align-right": IconAlignRight,
|
|
28
|
+
"list": IconList,
|
|
29
|
+
"list-ordered": IconListNumbers,
|
|
30
|
+
"list-checks": IconListCheck,
|
|
31
|
+
"link": IconLink,
|
|
32
|
+
"image": IconPhoto,
|
|
33
|
+
"table": IconTable,
|
|
34
|
+
"code": IconCode,
|
|
35
|
+
"quote": IconQuote,
|
|
36
|
+
"minus": IconMinus,
|
|
37
|
+
"superscript": IconSuperscript,
|
|
38
|
+
"subscript": IconSubscript,
|
|
39
|
+
"highlight": IconHighlight,
|
|
40
|
+
"type": IconTypography,
|
|
41
|
+
"chevron-up": IconChevronUp,
|
|
42
|
+
"chevron-down": IconChevronDown,
|
|
43
|
+
"trash": IconTrash,
|
|
44
|
+
"undo": IconArrowBackUp,
|
|
45
|
+
"redo": IconArrowForwardUp,
|
|
46
|
+
"arrow-left": IconArrowLeft,
|
|
47
|
+
"grip-vertical": IconGripVertical,
|
|
48
|
+
"mic": IconMicrophone,
|
|
49
|
+
"paperclip": IconPaperclip,
|
|
50
|
+
"send": IconSend,
|
|
51
|
+
"log-out": IconLogout,
|
|
52
|
+
"edit": IconPencil,
|
|
53
|
+
"menu": IconMenu2,
|
|
54
|
+
"star": IconStar,
|
|
55
|
+
"bookmark": IconBookmark,
|
|
56
|
+
"download": IconDownload,
|
|
57
|
+
"upload": IconUpload
|
|
58
|
+
};
|
|
59
|
+
function loadCurated() {
|
|
60
|
+
return curated;
|
|
61
|
+
}
|
|
62
|
+
async function loadExtended() {
|
|
63
|
+
const T = await import('@tabler/icons-react');
|
|
64
|
+
const extended = buildExtendedMap(T, {}, { stripPrefix: "Icon" });
|
|
65
|
+
Object.assign(extended, curated);
|
|
66
|
+
return extended;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { loadCurated, loadExtended };
|
|
70
|
+
//# sourceMappingURL=tabler-TVOR6AFM.js.map
|
|
71
|
+
//# sourceMappingURL=tabler-TVOR6AFM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icon-packs/tabler.ts"],"names":[],"mappings":";;;AAyBA,IAAM,OAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,UAAA;AAAA,EAAY,OAAA,EAAS,YAAA;AAAA,EACjD,UAAA,EAAY,YAAA;AAAA,EAAc,eAAA,EAAiB,gBAAA;AAAA,EAC3C,OAAA,EAAS,KAAA;AAAA,EAAO,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,UAAA;AAAA,EAC5C,MAAA,EAAQ,QAAA;AAAA,EAAU,MAAA,EAAQ,QAAA;AAAA,EAAU,OAAA,EAAS,SAAA;AAAA,EAC7C,SAAA,EAAW,iBAAA;AAAA,EAAmB,MAAA,EAAQ,cAAA;AAAA,EACtC,OAAA,EAAS,eAAA;AAAA,EAAiB,OAAA,EAAS,SAAA;AAAA,EAAW,UAAA,EAAY,YAAA;AAAA,EAC1D,MAAA,EAAQ,QAAA;AAAA,EAAU,QAAA,EAAU,UAAA;AAAA,EAAY,WAAA,EAAa,aAAA;AAAA,EACrD,eAAA,EAAiB,iBAAA;AAAA,EAAmB,YAAA,EAAc,aAAA;AAAA,EAClD,cAAA,EAAgB,eAAA;AAAA,EAAiB,aAAA,EAAe,cAAA;AAAA,EAChD,MAAA,EAAQ,QAAA;AAAA,EAAU,cAAA,EAAgB,eAAA;AAAA,EAAiB,aAAA,EAAe,aAAA;AAAA,EAClE,MAAA,EAAQ,QAAA;AAAA,EAAU,OAAA,EAAS,SAAA;AAAA,EAAW,OAAA,EAAS,SAAA;AAAA,EAAW,MAAA,EAAQ,QAAA;AAAA,EAClE,OAAA,EAAS,SAAA;AAAA,EAAW,OAAA,EAAS,SAAA;AAAA,EAAW,aAAA,EAAe,eAAA;AAAA,EACvD,WAAA,EAAa,aAAA;AAAA,EAAe,WAAA,EAAa,aAAA;AAAA,EAAe,MAAA,EAAQ,cAAA;AAAA,EAChE,YAAA,EAAc,aAAA;AAAA,EAAe,cAAA,EAAgB,eAAA;AAAA,EAAiB,OAAA,EAAS,SAAA;AAAA,EACvE,MAAA,EAAQ,eAAA;AAAA,EAAiB,MAAA,EAAQ,kBAAA;AAAA,EACjC,YAAA,EAAc,aAAA;AAAA,EAAe,eAAA,EAAiB,gBAAA;AAAA,EAC9C,KAAA,EAAO,cAAA;AAAA,EAAgB,WAAA,EAAa,aAAA;AAAA,EAAe,MAAA,EAAQ,QAAA;AAAA,EAC3D,SAAA,EAAW,UAAA;AAAA,EAAY,MAAA,EAAQ,UAAA;AAAA,EAAY,MAAA,EAAQ,SAAA;AAAA,EACnD,MAAA,EAAQ,QAAA;AAAA,EAAU,UAAA,EAAY,YAAA;AAAA,EAC9B,UAAA,EAAY,YAAA;AAAA,EAAc,QAAA,EAAU;AACtC,CAAA;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,OAAO,qBAAqB,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,iBAAiB,CAAA,EAAyC,IAAI,EAAE,WAAA,EAAa,QAAQ,CAAA;AACtG,EAAA,MAAA,CAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT","file":"tabler-TVOR6AFM.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\nimport {\n IconHome, IconFolder, IconChartBar,\n IconSettings, IconChevronRight,\n IconX, IconPlus, IconSearch,\n IconBell, IconUser, IconCheck,\n IconAlertTriangle, IconInfoCircle,\n IconAlertCircle, IconClock, IconCalendar,\n IconBold, IconItalic, IconUnderline,\n IconStrikethrough, IconAlignLeft,\n IconAlignCenter, IconAlignRight,\n IconList, IconListNumbers, IconListCheck,\n IconLink, IconPhoto, IconTable, IconCode,\n IconQuote, IconMinus, IconSuperscript,\n IconSubscript, IconHighlight, IconTypography,\n IconChevronUp, IconChevronDown, IconTrash,\n IconArrowBackUp, IconArrowForwardUp,\n IconArrowLeft, IconGripVertical,\n IconMicrophone, IconPaperclip, IconSend,\n IconLogout, IconPencil, IconMenu2,\n IconStar, IconBookmark,\n IconDownload, IconUpload,\n} from \"@tabler/icons-react\"\n\nconst curated: IconMap = {\n \"home\": IconHome, \"folder\": IconFolder, \"chart\": IconChartBar,\n \"settings\": IconSettings, \"chevron-right\": IconChevronRight,\n \"close\": IconX, \"plus\": IconPlus, \"search\": IconSearch,\n \"bell\": IconBell, \"user\": IconUser, \"check\": IconCheck,\n \"warning\": IconAlertTriangle, \"info\": IconInfoCircle,\n \"error\": IconAlertCircle, \"clock\": IconClock, \"calendar\": IconCalendar,\n \"bold\": IconBold, \"italic\": IconItalic, \"underline\": IconUnderline,\n \"strikethrough\": IconStrikethrough, \"align-left\": IconAlignLeft,\n \"align-center\": IconAlignCenter, \"align-right\": IconAlignRight,\n \"list\": IconList, \"list-ordered\": IconListNumbers, \"list-checks\": IconListCheck,\n \"link\": IconLink, \"image\": IconPhoto, \"table\": IconTable, \"code\": IconCode,\n \"quote\": IconQuote, \"minus\": IconMinus, \"superscript\": IconSuperscript,\n \"subscript\": IconSubscript, \"highlight\": IconHighlight, \"type\": IconTypography,\n \"chevron-up\": IconChevronUp, \"chevron-down\": IconChevronDown, \"trash\": IconTrash,\n \"undo\": IconArrowBackUp, \"redo\": IconArrowForwardUp,\n \"arrow-left\": IconArrowLeft, \"grip-vertical\": IconGripVertical,\n \"mic\": IconMicrophone, \"paperclip\": IconPaperclip, \"send\": IconSend,\n \"log-out\": IconLogout, \"edit\": IconPencil, \"menu\": IconMenu2,\n \"star\": IconStar, \"bookmark\": IconBookmark,\n \"download\": IconDownload, \"upload\": IconUpload,\n}\n\nexport function loadCurated(): IconMap {\n return curated\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const T = await import(\"@tabler/icons-react\")\n const extended = buildExtendedMap(T as unknown as Record<string, unknown>, {}, { stripPrefix: \"Icon\" })\n Object.assign(extended, curated)\n return extended\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const DEFAULT_BREAKPOINTS: {
|
|
5
|
+
readonly sm: 640;
|
|
6
|
+
readonly md: 768;
|
|
7
|
+
readonly lg: 1024;
|
|
8
|
+
readonly xl: 1280;
|
|
9
|
+
};
|
|
10
|
+
type BreakpointKey = keyof typeof DEFAULT_BREAKPOINTS;
|
|
11
|
+
/**
|
|
12
|
+
* Provides an override container width for all `useBreakpoint` calls within
|
|
13
|
+
* this subtree. Used by the builder's viewport preview to make components
|
|
14
|
+
* respond to the constrained canvas width instead of the browser viewport.
|
|
15
|
+
*/
|
|
16
|
+
declare function BreakpointWidthProvider({ width, children }: {
|
|
17
|
+
width: number | null;
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
}): react.FunctionComponentElement<react.ProviderProps<number | null>>;
|
|
20
|
+
/**
|
|
21
|
+
* Reactive breakpoint check that reads `--ds-bp-*` CSS variables.
|
|
22
|
+
* Returns true when the viewport (or override container) is at or below the
|
|
23
|
+
* named breakpoint.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const isMobile = useBreakpoint("md"); // true when ≤768px
|
|
27
|
+
*/
|
|
28
|
+
declare function useBreakpoint(key: BreakpointKey): boolean;
|
|
29
|
+
|
|
30
|
+
export { type BreakpointKey as B, BreakpointWidthProvider as a, useBreakpoint as u };
|
package/dist/utils.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { GLASS_BACKDROP, GLASS_DROPDOWN, GLASS_OVERLAY, GLASS_SURFACE, cn } from './chunk-
|
|
2
|
-
import './chunk-5WRI5ZAA.js';
|
|
1
|
+
export { GLASS_BACKDROP, GLASS_DROPDOWN, GLASS_OVERLAY, GLASS_SURFACE, cn } from './chunk-IUBWNDUK.js';
|
|
3
2
|
//# sourceMappingURL=utils.js.map
|
|
4
3
|
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode, Ref } from 'react';
|
|
3
|
+
import { VirtualItem } from '@tanstack/react-virtual';
|
|
4
|
+
|
|
5
|
+
interface VirtualizedListProps<T> {
|
|
6
|
+
items: T[];
|
|
7
|
+
estimateSize: (index: number) => number;
|
|
8
|
+
renderItem: (item: T, index: number, virtualItem: VirtualItem) => ReactNode;
|
|
9
|
+
overscan?: number;
|
|
10
|
+
height?: number | string;
|
|
11
|
+
className?: string;
|
|
12
|
+
ref?: Ref<HTMLDivElement>;
|
|
13
|
+
}
|
|
14
|
+
declare function VirtualizedList<T>({ items, estimateSize, renderItem, overscan, height, className, ref, }: VirtualizedListProps<T>): react_jsx_runtime.JSX.Element;
|
|
15
|
+
|
|
16
|
+
export { VirtualizedList };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { cn } from './chunk-IUBWNDUK.js';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function VirtualizedList({
|
|
7
|
+
items,
|
|
8
|
+
estimateSize,
|
|
9
|
+
renderItem,
|
|
10
|
+
overscan = 5,
|
|
11
|
+
height = 400,
|
|
12
|
+
className,
|
|
13
|
+
ref
|
|
14
|
+
}) {
|
|
15
|
+
const parentRef = useRef(null);
|
|
16
|
+
const virtualizer = useVirtualizer({
|
|
17
|
+
count: items.length,
|
|
18
|
+
getScrollElement: () => parentRef.current,
|
|
19
|
+
estimateSize,
|
|
20
|
+
overscan
|
|
21
|
+
});
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
ref: (node) => {
|
|
26
|
+
parentRef.current = node;
|
|
27
|
+
if (typeof ref === "function") ref(node);
|
|
28
|
+
else if (ref) ref.current = node;
|
|
29
|
+
},
|
|
30
|
+
className: cn(
|
|
31
|
+
"overflow-auto",
|
|
32
|
+
"rounded-[var(--ds-radius-md)]",
|
|
33
|
+
"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]",
|
|
34
|
+
"bg-[var(--ds-bg-surface)]",
|
|
35
|
+
className
|
|
36
|
+
),
|
|
37
|
+
style: { height },
|
|
38
|
+
children: /* @__PURE__ */ jsx("div", { className: "relative w-full", style: { height: virtualizer.getTotalSize() }, children: virtualizer.getVirtualItems().map((virtualItem) => /* @__PURE__ */ jsx(
|
|
39
|
+
"div",
|
|
40
|
+
{
|
|
41
|
+
"data-index": virtualItem.index,
|
|
42
|
+
ref: virtualizer.measureElement,
|
|
43
|
+
className: "absolute top-0 left-0 w-full",
|
|
44
|
+
style: { transform: `translateY(${virtualItem.start}px)` },
|
|
45
|
+
children: renderItem(items[virtualItem.index], virtualItem.index, virtualItem)
|
|
46
|
+
},
|
|
47
|
+
virtualItem.key
|
|
48
|
+
)) })
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { VirtualizedList };
|
|
54
|
+
//# sourceMappingURL=virtualized.js.map
|
|
55
|
+
//# sourceMappingURL=virtualized.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/components/VirtualizedList.tsx"],"names":[],"mappings":";;;;;AAcO,SAAS,eAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,CAAA;AAAA,EACX,MAAA,GAAS,GAAA;AAAA,EACT,SAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,SAAA,GAAY,OAAuB,IAAI,CAAA;AAE7C,EAAA,MAAM,cAAc,cAAA,CAAe;AAAA,IACjC,OAAO,KAAA,CAAM,MAAA;AAAA,IACb,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,IAClC,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAC,UAA4D,OAAA,GAAU,IAAA;AACvE,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,aAAA,IAC9B,GAAA,EAAM,GAAA,CAAsD,OAAA,GAAU,IAAA;AAAA,MACjF,CAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,eAAA;AAAA,QACA,+BAAA;AAAA,QACA,yEAAA;AAAA,QACA,2BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,MAEhB,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,YAAA,EAAa,IACxE,QAAA,EAAA,WAAA,CAAY,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,WAAA,qBAClC,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,cAAY,WAAA,CAAY,KAAA;AAAA,UACxB,KAAK,WAAA,CAAY,cAAA;AAAA,UACjB,SAAA,EAAU,8BAAA;AAAA,UACV,OAAO,EAAE,SAAA,EAAW,CAAA,WAAA,EAAc,WAAA,CAAY,KAAK,CAAA,GAAA,CAAA,EAAM;AAAA,UAExD,qBAAW,KAAA,CAAM,WAAA,CAAY,KAAK,CAAA,EAAG,WAAA,CAAY,OAAO,WAAW;AAAA,SAAA;AAAA,QAN/D,WAAA,CAAY;AAAA,OAQpB,CAAA,EACH;AAAA;AAAA,GACF;AAEJ","file":"virtualized.js","sourcesContent":["import { useRef, type ReactNode, type Ref } from \"react\";\nimport { useVirtualizer, type VirtualItem } from \"@tanstack/react-virtual\";\nimport { cn } from \"../lib/utils\";\n\nexport interface VirtualizedListProps<T> {\n items: T[];\n estimateSize: (index: number) => number;\n renderItem: (item: T, index: number, virtualItem: VirtualItem) => ReactNode;\n overscan?: number;\n height?: number | string;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function VirtualizedList<T>({\n items,\n estimateSize,\n renderItem,\n overscan = 5,\n height = 400,\n className,\n ref,\n}: VirtualizedListProps<T>) {\n const parentRef = useRef<HTMLDivElement>(null);\n\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => parentRef.current,\n estimateSize,\n overscan,\n });\n\n return (\n <div\n ref={(node) => {\n (parentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={cn(\n \"overflow-auto\",\n \"rounded-[var(--ds-radius-md)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n \"bg-[var(--ds-bg-surface)]\",\n className,\n )}\n style={{ height }}\n >\n <div className=\"relative w-full\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualItem) => (\n <div\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n className=\"absolute top-0 left-0 w-full\"\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderItem(items[virtualItem.index], virtualItem.index, virtualItem)}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gridsmith-ui",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Gridsmith component library
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Gridsmith component library \u2014 98 React components with design tokens and a CSS custom property theming engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"*.css"
|
|
@@ -19,6 +19,30 @@
|
|
|
19
19
|
"types": "./dist/icons.d.ts",
|
|
20
20
|
"import": "./dist/icons.js"
|
|
21
21
|
},
|
|
22
|
+
"./charts": {
|
|
23
|
+
"types": "./dist/charts.d.ts",
|
|
24
|
+
"import": "./dist/charts.js"
|
|
25
|
+
},
|
|
26
|
+
"./editor": {
|
|
27
|
+
"types": "./dist/editor.d.ts",
|
|
28
|
+
"import": "./dist/editor.js"
|
|
29
|
+
},
|
|
30
|
+
"./kanban": {
|
|
31
|
+
"types": "./dist/kanban.d.ts",
|
|
32
|
+
"import": "./dist/kanban.js"
|
|
33
|
+
},
|
|
34
|
+
"./data-grid": {
|
|
35
|
+
"types": "./dist/data-grid.d.ts",
|
|
36
|
+
"import": "./dist/data-grid.js"
|
|
37
|
+
},
|
|
38
|
+
"./virtualized": {
|
|
39
|
+
"types": "./dist/virtualized.d.ts",
|
|
40
|
+
"import": "./dist/virtualized.js"
|
|
41
|
+
},
|
|
42
|
+
"./resizable": {
|
|
43
|
+
"types": "./dist/resizable.d.ts",
|
|
44
|
+
"import": "./dist/resizable.js"
|
|
45
|
+
},
|
|
22
46
|
"./roots.css": "./dist/roots.css",
|
|
23
47
|
"./tokens.css": "./dist/tokens.css",
|
|
24
48
|
"./tailwind.css": "./dist/tailwind.css"
|
|
@@ -43,12 +67,44 @@
|
|
|
43
67
|
"react": "^18.0.0 || ^19.0.0",
|
|
44
68
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
45
69
|
"lucide-react": "^1.0.0",
|
|
70
|
+
"recharts": "^3.8.0",
|
|
46
71
|
"@phosphor-icons/react": "^2.0.0",
|
|
47
72
|
"@heroicons/react": "^2.0.0",
|
|
48
73
|
"@tabler/icons-react": "^3.0.0",
|
|
49
|
-
"react-icons": "^5.0.0"
|
|
74
|
+
"react-icons": "^5.0.0",
|
|
75
|
+
"@tiptap/react": "^3.22.4",
|
|
76
|
+
"@tiptap/pm": "^3.22.4",
|
|
77
|
+
"@tiptap/starter-kit": "^3.22.4",
|
|
78
|
+
"@tiptap/extension-code-block-lowlight": "^3.22.4",
|
|
79
|
+
"@tiptap/extension-color": "^3.22.4",
|
|
80
|
+
"@tiptap/extension-font-family": "^3.22.4",
|
|
81
|
+
"@tiptap/extension-highlight": "^3.22.4",
|
|
82
|
+
"@tiptap/extension-image": "^3.22.4",
|
|
83
|
+
"@tiptap/extension-link": "^3.22.4",
|
|
84
|
+
"@tiptap/extension-placeholder": "^3.22.4",
|
|
85
|
+
"@tiptap/extension-subscript": "^3.22.4",
|
|
86
|
+
"@tiptap/extension-superscript": "^3.22.4",
|
|
87
|
+
"@tiptap/extension-table": "^3.22.4",
|
|
88
|
+
"@tiptap/extension-table-cell": "^3.22.4",
|
|
89
|
+
"@tiptap/extension-table-header": "^3.22.4",
|
|
90
|
+
"@tiptap/extension-table-row": "^3.22.4",
|
|
91
|
+
"@tiptap/extension-task-item": "^3.22.4",
|
|
92
|
+
"@tiptap/extension-task-list": "^3.22.4",
|
|
93
|
+
"@tiptap/extension-text-align": "^3.22.4",
|
|
94
|
+
"@tiptap/extension-text-style": "^3.22.4",
|
|
95
|
+
"@tiptap/extension-underline": "^3.22.4",
|
|
96
|
+
"lowlight": "^3.3.0",
|
|
97
|
+
"@dnd-kit/core": "^6.3.1",
|
|
98
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
99
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
100
|
+
"@tanstack/react-table": "^8.21.3",
|
|
101
|
+
"@tanstack/react-virtual": "^3.13.24",
|
|
102
|
+
"react-resizable-panels": "^4.10.0"
|
|
50
103
|
},
|
|
51
104
|
"peerDependenciesMeta": {
|
|
105
|
+
"recharts": {
|
|
106
|
+
"optional": true
|
|
107
|
+
},
|
|
52
108
|
"@phosphor-icons/react": {
|
|
53
109
|
"optional": true
|
|
54
110
|
},
|
|
@@ -60,6 +116,90 @@
|
|
|
60
116
|
},
|
|
61
117
|
"react-icons": {
|
|
62
118
|
"optional": true
|
|
119
|
+
},
|
|
120
|
+
"@tiptap/react": {
|
|
121
|
+
"optional": true
|
|
122
|
+
},
|
|
123
|
+
"@tiptap/pm": {
|
|
124
|
+
"optional": true
|
|
125
|
+
},
|
|
126
|
+
"@tiptap/starter-kit": {
|
|
127
|
+
"optional": true
|
|
128
|
+
},
|
|
129
|
+
"@tiptap/extension-code-block-lowlight": {
|
|
130
|
+
"optional": true
|
|
131
|
+
},
|
|
132
|
+
"@tiptap/extension-color": {
|
|
133
|
+
"optional": true
|
|
134
|
+
},
|
|
135
|
+
"@tiptap/extension-font-family": {
|
|
136
|
+
"optional": true
|
|
137
|
+
},
|
|
138
|
+
"@tiptap/extension-highlight": {
|
|
139
|
+
"optional": true
|
|
140
|
+
},
|
|
141
|
+
"@tiptap/extension-image": {
|
|
142
|
+
"optional": true
|
|
143
|
+
},
|
|
144
|
+
"@tiptap/extension-link": {
|
|
145
|
+
"optional": true
|
|
146
|
+
},
|
|
147
|
+
"@tiptap/extension-placeholder": {
|
|
148
|
+
"optional": true
|
|
149
|
+
},
|
|
150
|
+
"@tiptap/extension-subscript": {
|
|
151
|
+
"optional": true
|
|
152
|
+
},
|
|
153
|
+
"@tiptap/extension-superscript": {
|
|
154
|
+
"optional": true
|
|
155
|
+
},
|
|
156
|
+
"@tiptap/extension-table": {
|
|
157
|
+
"optional": true
|
|
158
|
+
},
|
|
159
|
+
"@tiptap/extension-table-cell": {
|
|
160
|
+
"optional": true
|
|
161
|
+
},
|
|
162
|
+
"@tiptap/extension-table-header": {
|
|
163
|
+
"optional": true
|
|
164
|
+
},
|
|
165
|
+
"@tiptap/extension-table-row": {
|
|
166
|
+
"optional": true
|
|
167
|
+
},
|
|
168
|
+
"@tiptap/extension-task-item": {
|
|
169
|
+
"optional": true
|
|
170
|
+
},
|
|
171
|
+
"@tiptap/extension-task-list": {
|
|
172
|
+
"optional": true
|
|
173
|
+
},
|
|
174
|
+
"@tiptap/extension-text-align": {
|
|
175
|
+
"optional": true
|
|
176
|
+
},
|
|
177
|
+
"@tiptap/extension-text-style": {
|
|
178
|
+
"optional": true
|
|
179
|
+
},
|
|
180
|
+
"@tiptap/extension-underline": {
|
|
181
|
+
"optional": true
|
|
182
|
+
},
|
|
183
|
+
"lowlight": {
|
|
184
|
+
"optional": true
|
|
185
|
+
},
|
|
186
|
+
"@dnd-kit/core": {
|
|
187
|
+
"optional": true
|
|
188
|
+
},
|
|
189
|
+
"@dnd-kit/sortable": {
|
|
190
|
+
"optional": true
|
|
191
|
+
},
|
|
192
|
+
"@dnd-kit/utilities": {
|
|
193
|
+
"optional": true
|
|
194
|
+
},
|
|
195
|
+
"@tanstack/react-table": {
|
|
196
|
+
"optional": true
|
|
197
|
+
},
|
|
198
|
+
"@tanstack/react-virtual": {
|
|
199
|
+
"optional": true
|
|
200
|
+
},
|
|
201
|
+
"react-resizable-panels": {
|
|
202
|
+
"optional": true
|
|
63
203
|
}
|
|
64
204
|
},
|
|
65
205
|
"devDependencies": {
|
|
@@ -86,4 +226,4 @@
|
|
|
86
226
|
"type": "git",
|
|
87
227
|
"url": "https://github.com/gridsmith/ui"
|
|
88
228
|
}
|
|
89
|
-
}
|
|
229
|
+
}
|
package/dist/chunk-5WRI5ZAA.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
19
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
20
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
21
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
22
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
23
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
24
|
-
mod
|
|
25
|
-
));
|
|
26
|
-
|
|
27
|
-
export { __commonJS, __toESM };
|
|
28
|
-
//# sourceMappingURL=chunk-5WRI5ZAA.js.map
|
|
29
|
-
//# sourceMappingURL=chunk-5WRI5ZAA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-5WRI5ZAA.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../showcase/src/lib/utils.ts"],"names":[],"mappings":";;;;AAGO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAEO,IAAM,cAAA,GAAiB;AAEvB,IAAM,aAAA,GAAgB,GAAG,cAAc,CAAA,qDAAA;AAEvC,IAAM,aAAA,GAAgB,GAAG,cAAc,CAAA,sDAAA;AAEvC,IAAM,cAAA,GAAiB,GAAG,cAAc,CAAA,yDAAA;AAExC,SAAS,cAAA,GAAiB;AAC/B,EAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AACjC;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AACjC","file":"chunk-5XIPPVH7.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\nexport const GLASS_BACKDROP = \"[backdrop-filter:var(--ds-glass-filter)] [-webkit-backdrop-filter:var(--ds-glass-filter)]\";\n\nexport const GLASS_SURFACE = `${GLASS_BACKDROP} shadow-[var(--ds-shadow-card),var(--ds-glass-inset)]`;\n\nexport const GLASS_OVERLAY = `${GLASS_BACKDROP} shadow-[var(--ds-shadow-modal),var(--ds-glass-inset)]`;\n\nexport const GLASS_DROPDOWN = `${GLASS_BACKDROP} shadow-[var(--ds-shadow-dropdown),var(--ds-glass-inset)]`;\n\nexport function lockBodyScroll() {\n document.body.style.overflow = \"hidden\";\n}\n\nexport function unlockBodyScroll() {\n document.body.style.overflow = \"\";\n}\n"]}
|
package/dist/chunk-WVB3SRXW.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext, useState, useEffect } from 'react';
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
|
|
4
|
-
// ../../showcase/src/lib/icons.tsx
|
|
5
|
-
var packCache = /* @__PURE__ */ new Map();
|
|
6
|
-
var fullyLoaded = /* @__PURE__ */ new Set();
|
|
7
|
-
async function loadPack(pack) {
|
|
8
|
-
switch (pack) {
|
|
9
|
-
case "lucide":
|
|
10
|
-
return (await import('./lucide-6TGT4G26.js')).load();
|
|
11
|
-
case "phosphor":
|
|
12
|
-
return (await import('./phosphor-BWDP4PU7.js')).load();
|
|
13
|
-
case "heroicons":
|
|
14
|
-
return (await import('./heroicons-HJTKMLIJ.js')).load();
|
|
15
|
-
case "tabler":
|
|
16
|
-
return (await import('./tabler-6TPNTLFV.js')).load();
|
|
17
|
-
case "feather":
|
|
18
|
-
return (await import('./feather-N37QZ7LA.js')).load();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
var IconCtx = createContext({ pack: "lucide", weight: 1.5 });
|
|
22
|
-
function IconProvider({ pack, weight, children }) {
|
|
23
|
-
return /* @__PURE__ */ jsx(IconCtx.Provider, { value: { pack, weight }, children });
|
|
24
|
-
}
|
|
25
|
-
function useIconMap(pack) {
|
|
26
|
-
const [map, setMap] = useState(packCache.get(pack) ?? null);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (fullyLoaded.has(pack)) {
|
|
29
|
-
const cached = packCache.get(pack);
|
|
30
|
-
if (cached) setMap(cached);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
let cancelled = false;
|
|
34
|
-
loadPack(pack).then((loaded) => {
|
|
35
|
-
packCache.set(pack, loaded);
|
|
36
|
-
fullyLoaded.add(pack);
|
|
37
|
-
if (!cancelled) setMap(loaded);
|
|
38
|
-
});
|
|
39
|
-
return () => {
|
|
40
|
-
cancelled = true;
|
|
41
|
-
};
|
|
42
|
-
}, [pack]);
|
|
43
|
-
return map;
|
|
44
|
-
}
|
|
45
|
-
function getPhosphorWeight(numericWeight) {
|
|
46
|
-
if (numericWeight <= 0.75) return "thin";
|
|
47
|
-
if (numericWeight <= 1.25) return "light";
|
|
48
|
-
if (numericWeight <= 1.75) return "regular";
|
|
49
|
-
if (numericWeight <= 2.25) return "bold";
|
|
50
|
-
return "fill";
|
|
51
|
-
}
|
|
52
|
-
function Icon({ name, size = 16, className }) {
|
|
53
|
-
const { pack, weight } = useContext(IconCtx);
|
|
54
|
-
const map = useIconMap(pack);
|
|
55
|
-
const needsFallback = pack !== "lucide" && map !== null && !map[name];
|
|
56
|
-
const lucideMap = useIconMap(needsFallback ? "lucide" : pack);
|
|
57
|
-
if (!map) return null;
|
|
58
|
-
let Comp = map[name];
|
|
59
|
-
let renderPack = pack;
|
|
60
|
-
if (!Comp) {
|
|
61
|
-
if (!needsFallback || !lucideMap?.[name]) return null;
|
|
62
|
-
Comp = lucideMap[name];
|
|
63
|
-
renderPack = "lucide";
|
|
64
|
-
}
|
|
65
|
-
if (renderPack === "phosphor") {
|
|
66
|
-
return /* @__PURE__ */ jsx(Comp, { size, weight: getPhosphorWeight(weight), className });
|
|
67
|
-
}
|
|
68
|
-
if (renderPack === "heroicons") {
|
|
69
|
-
return /* @__PURE__ */ jsx(Comp, { className, style: { width: size, height: size, strokeWidth: weight } });
|
|
70
|
-
}
|
|
71
|
-
if (renderPack === "tabler") {
|
|
72
|
-
return /* @__PURE__ */ jsx(Comp, { size, stroke: weight, className });
|
|
73
|
-
}
|
|
74
|
-
if (renderPack === "feather") {
|
|
75
|
-
return /* @__PURE__ */ jsx(Comp, { size, className, strokeWidth: weight });
|
|
76
|
-
}
|
|
77
|
-
return /* @__PURE__ */ jsx(Comp, { size, strokeWidth: weight, className });
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export { Icon, IconProvider };
|
|
81
|
-
//# sourceMappingURL=chunk-WVB3SRXW.js.map
|
|
82
|
-
//# sourceMappingURL=chunk-WVB3SRXW.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../showcase/src/lib/icons.tsx"],"names":[],"mappings":"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","file":"chunk-WVB3SRXW.js","sourcesContent":["import { createContext, useContext, useState, useEffect, type ReactNode, type ComponentType } from \"react\";\n\n/* ── Types ────────────────────────────────────────────────────── */\n\n/**\n * Runtime list of curated icon names. The CuratedIconName type derives from\n * this array, so adding a name here extends autocomplete automatically.\n * Every name must have an alias (or auto-kebab match) in ALL five packs —\n * icon-completeness.test.tsx enforces this.\n */\nexport const CURATED_ICON_NAMES = [\n \"home\", \"folder\", \"chart\", \"settings\",\n \"chevron-right\", \"close\", \"plus\", \"search\",\n \"bell\", \"user\", \"check\", \"warning\", \"info\", \"error\",\n \"clock\", \"calendar\",\n \"bold\", \"italic\", \"underline\", \"strikethrough\",\n \"align-left\", \"align-center\", \"align-right\",\n \"list\", \"list-ordered\", \"list-checks\",\n \"link\", \"image\", \"table\", \"code\", \"quote\", \"minus\",\n \"superscript\", \"subscript\", \"highlight\", \"type\",\n \"chevron-up\", \"chevron-down\", \"trash\",\n \"undo\", \"redo\",\n \"arrow-left\", \"grip-vertical\",\n \"mic\", \"paperclip\", \"send\",\n \"log-out\", \"edit\", \"menu\",\n \"star\", \"bookmark\", \"download\", \"upload\",\n] as const;\n\ntype CuratedIconName = (typeof CURATED_ICON_NAMES)[number];\n\n/**\n * Curated names provide autocomplete and work identically across all 5 packs.\n * Any kebab-case string is also accepted — it resolves directly against the\n * active pack's native exports (e.g. \"clipboard-copy\" → Lucide's ClipboardCopy).\n */\nexport type IconName = CuratedIconName | (string & {});\n\nexport type IconPack = \"lucide\" | \"phosphor\" | \"heroicons\" | \"tabler\" | \"feather\";\n\ntype IconComponent = ComponentType<Record<string, unknown>>;\ntype IconMap = Record<string, IconComponent>;\n\n/* ── Pack loading ─────────────────────────────────────────────── \n Each pack is isolated in its own file under ./icon-packs/.\n Only the active pack's module is dynamically imported at runtime,\n so bundlers (including Turbopack) won't resolve unused pack\n dependencies at build time. */\n\nconst packCache = new Map<IconPack, IconMap>();\nconst fullyLoaded = new Set<IconPack>();\n\nasync function loadPack(pack: IconPack): Promise<IconMap> {\n switch (pack) {\n case \"lucide\": return (await import(\"./icon-packs/lucide\")).load();\n case \"phosphor\": return (await import(\"./icon-packs/phosphor\")).load();\n case \"heroicons\": return (await import(\"./icon-packs/heroicons\")).load();\n case \"tabler\": return (await import(\"./icon-packs/tabler\")).load();\n case \"feather\": return (await import(\"./icon-packs/feather\")).load();\n }\n}\n\n/** Exported for the icon-completeness test — not part of the public API. */\nexport const packLoaders: Record<IconPack, () => Promise<IconMap>> = {\n lucide: () => loadPack(\"lucide\"),\n phosphor: () => loadPack(\"phosphor\"),\n heroicons: () => loadPack(\"heroicons\"),\n tabler: () => loadPack(\"tabler\"),\n feather: () => loadPack(\"feather\"),\n};\n\n/* ── Context ──────────────────────────────────────────────────── */\n\ninterface IconContextValue {\n pack: IconPack;\n weight: number;\n}\n\nconst IconCtx = createContext<IconContextValue>({ pack: \"lucide\", weight: 1.5 });\n\nexport function IconProvider({ pack, weight, children }: { pack: IconPack; weight: number; children: ReactNode }) {\n return <IconCtx.Provider value={{ pack, weight }}>{children}</IconCtx.Provider>;\n}\n\n/* ── Hook ─────────────────────────────────────────────────────── */\n\nfunction useIconMap(pack: IconPack): IconMap | null {\n const [map, setMap] = useState<IconMap | null>(packCache.get(pack) ?? null);\n\n useEffect(() => {\n if (fullyLoaded.has(pack)) {\n const cached = packCache.get(pack);\n if (cached) setMap(cached);\n return;\n }\n\n let cancelled = false;\n loadPack(pack).then((loaded) => {\n packCache.set(pack, loaded);\n fullyLoaded.add(pack);\n if (!cancelled) setMap(loaded);\n });\n return () => { cancelled = true; };\n }, [pack]);\n\n return map;\n}\n\n/* ── Phosphor weight mapping ──────────────────────────────────── */\n\nfunction getPhosphorWeight(numericWeight: number): \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\" {\n if (numericWeight <= 0.75) return \"thin\";\n if (numericWeight <= 1.25) return \"light\";\n if (numericWeight <= 1.75) return \"regular\";\n if (numericWeight <= 2.25) return \"bold\";\n return \"fill\";\n}\n\n/* ── Icon component ───────────────────────────────────────────── */\n\nexport function Icon({ name, size = 16, className }: { name: IconName; size?: number; className?: string }) {\n const { pack, weight } = useContext(IconCtx);\n const map = useIconMap(pack);\n\n // Lucide doubles as the universal fallback: when the active pack has loaded\n // but lacks the requested name, resolve against lucide instead of rendering\n // nothing. The hook call is unconditional (no conditional-hook violation) —\n // it only re-targets lucide once a miss is confirmed, which triggers the\n // lazy load and a re-render when the map arrives.\n const needsFallback = pack !== \"lucide\" && map !== null && !map[name];\n const lucideMap = useIconMap(needsFallback ? \"lucide\" : pack);\n\n if (!map) return null;\n\n let Comp = map[name];\n let renderPack: IconPack = pack;\n if (!Comp) {\n if (!needsFallback || !lucideMap?.[name]) return null;\n Comp = lucideMap[name];\n renderPack = \"lucide\";\n }\n\n if (renderPack === \"phosphor\") {\n return <Comp size={size} weight={getPhosphorWeight(weight)} className={className} />;\n }\n\n if (renderPack === \"heroicons\") {\n return <Comp className={className} style={{ width: size, height: size, strokeWidth: weight }} />;\n }\n\n if (renderPack === \"tabler\") {\n return <Comp size={size} stroke={weight} className={className} />;\n }\n\n if (renderPack === \"feather\") {\n return <Comp size={size} className={className} strokeWidth={weight} />;\n }\n\n return <Comp size={size} strokeWidth={weight} className={className} />;\n}\n"]}
|