gridsmith-ui 0.4.0 → 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-6TMNEBBJ.js → chunk-XUBVMRIE.js} +44 -35
- 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-432JQGUB.js → feather-V32UNIQL.js} +2 -3
- package/dist/feather-V32UNIQL.js.map +1 -0
- package/dist/{heroicons-CCKJHFZY.js → heroicons-CA5OQ76O.js} +2 -3
- package/dist/heroicons-CA5OQ76O.js.map +1 -0
- 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-Z74WVRAK.js → lucide-AILUUOAJ.js} +2 -3
- package/dist/lucide-AILUUOAJ.js.map +1 -0
- package/dist/{phosphor-DYUCR5S2.js → phosphor-A4JOBGMT.js} +2 -3
- 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-GRXDPAHR.js → tabler-TVOR6AFM.js} +2 -3
- 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-6TMNEBBJ.js.map +0 -1
- package/dist/feather-432JQGUB.js.map +0 -1
- package/dist/heroicons-CCKJHFZY.js.map +0 -1
- package/dist/lucide-Z74WVRAK.js.map +0 -1
- package/dist/phosphor-DYUCR5S2.js.map +0 -1
- package/dist/tabler-GRXDPAHR.js.map +0 -1
package/dist/kanban.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface KanbanCard {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
tags?: string[];
|
|
9
|
+
avatar?: string;
|
|
10
|
+
}
|
|
11
|
+
interface KanbanColumn {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
cards: KanbanCard[];
|
|
15
|
+
color?: string;
|
|
16
|
+
}
|
|
17
|
+
interface KanbanBoardProps {
|
|
18
|
+
columns: KanbanColumn[];
|
|
19
|
+
onColumnsChange?: (columns: KanbanColumn[]) => void;
|
|
20
|
+
renderCard?: (card: KanbanCard) => ReactNode;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
declare function KanbanBoard({ columns: controlledCols, onColumnsChange, renderCard, className, }: KanbanBoardProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
export { KanbanBoard };
|
package/dist/kanban.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { Badge } from './chunk-4SDKQDYV.js';
|
|
2
|
+
import { useTextOverflow, Tooltip } from './chunk-CHNY75QI.js';
|
|
3
|
+
import { Icon } from './chunk-XUBVMRIE.js';
|
|
4
|
+
import { cn } from './chunk-IUBWNDUK.js';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCorners, DragOverlay } from '@dnd-kit/core';
|
|
7
|
+
import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
|
|
8
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
9
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
function SortableCard({
|
|
12
|
+
card,
|
|
13
|
+
renderCard
|
|
14
|
+
}) {
|
|
15
|
+
const {
|
|
16
|
+
attributes,
|
|
17
|
+
listeners,
|
|
18
|
+
setNodeRef,
|
|
19
|
+
transform,
|
|
20
|
+
transition,
|
|
21
|
+
isDragging
|
|
22
|
+
} = useSortable({ id: card.id });
|
|
23
|
+
const style = {
|
|
24
|
+
transform: CSS.Transform.toString(transform),
|
|
25
|
+
transition
|
|
26
|
+
};
|
|
27
|
+
return /* @__PURE__ */ jsx(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
ref: setNodeRef,
|
|
31
|
+
style,
|
|
32
|
+
...attributes,
|
|
33
|
+
...listeners,
|
|
34
|
+
className: cn(
|
|
35
|
+
"rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]",
|
|
36
|
+
"bg-[var(--ds-bg-surface)] p-ds-3 cursor-grab active:cursor-grabbing",
|
|
37
|
+
"shadow-[var(--ds-shadow-button)]",
|
|
38
|
+
"transition-shadow duration-[var(--ds-transition-speed)]",
|
|
39
|
+
"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]",
|
|
40
|
+
isDragging && "opacity-30 scale-[1.02]"
|
|
41
|
+
),
|
|
42
|
+
children: renderCard ? renderCard(card) : /* @__PURE__ */ jsx(DefaultCard, { card })
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
function ClampedDescription({ children }) {
|
|
47
|
+
const { ref, isTruncated } = useTextOverflow({ lines: 2 });
|
|
48
|
+
const el = /* @__PURE__ */ jsx("p", { ref, className: "text-xs text-[var(--ds-text-secondary)] line-clamp-2", children });
|
|
49
|
+
if (!isTruncated) return el;
|
|
50
|
+
return /* @__PURE__ */ jsx(Tooltip, { content: children, children: el });
|
|
51
|
+
}
|
|
52
|
+
function TruncTitle({ children }) {
|
|
53
|
+
const { ref, isTruncated } = useTextOverflow({ lines: 1 });
|
|
54
|
+
const el = /* @__PURE__ */ jsx("p", { ref, className: "text-sm font-medium text-[var(--ds-text-primary)] truncate", children });
|
|
55
|
+
if (!isTruncated) return el;
|
|
56
|
+
return /* @__PURE__ */ jsx(Tooltip, { content: children, children: el });
|
|
57
|
+
}
|
|
58
|
+
function DefaultCard({ card }) {
|
|
59
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-ds-2", children: [
|
|
60
|
+
/* @__PURE__ */ jsx(TruncTitle, { children: card.title }),
|
|
61
|
+
card.description && /* @__PURE__ */ jsx(ClampedDescription, { children: card.description }),
|
|
62
|
+
card.tags && card.tags.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-ds-1", children: card.tags.map((tag) => /* @__PURE__ */ jsx(Badge, { variant: "subtle", size: "sm", children: tag }, tag)) })
|
|
63
|
+
] });
|
|
64
|
+
}
|
|
65
|
+
function OverlayCard({
|
|
66
|
+
card,
|
|
67
|
+
renderCard
|
|
68
|
+
}) {
|
|
69
|
+
return /* @__PURE__ */ jsx(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
className: cn(
|
|
73
|
+
"rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]",
|
|
74
|
+
"bg-[var(--ds-bg-surface)] p-ds-3 shadow-[var(--ds-shadow-card)]",
|
|
75
|
+
"rotate-2"
|
|
76
|
+
),
|
|
77
|
+
children: renderCard ? renderCard(card) : /* @__PURE__ */ jsx(DefaultCard, { card })
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function KanbanBoard({
|
|
82
|
+
columns: controlledCols,
|
|
83
|
+
onColumnsChange,
|
|
84
|
+
renderCard,
|
|
85
|
+
className
|
|
86
|
+
}) {
|
|
87
|
+
const [internalCols, setInternalCols] = useState(controlledCols);
|
|
88
|
+
const columns = onColumnsChange ? controlledCols : internalCols;
|
|
89
|
+
const setCols = (next) => {
|
|
90
|
+
if (typeof next === "function") {
|
|
91
|
+
const updated = next(columns);
|
|
92
|
+
if (onColumnsChange) onColumnsChange(updated);
|
|
93
|
+
else setInternalCols(updated);
|
|
94
|
+
} else {
|
|
95
|
+
if (onColumnsChange) onColumnsChange(next);
|
|
96
|
+
else setInternalCols(next);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const [activeCard, setActiveCard] = useState(null);
|
|
100
|
+
const sensors = useSensors(
|
|
101
|
+
useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),
|
|
102
|
+
useSensor(KeyboardSensor, {
|
|
103
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
const findColumnByCardId = (cardId) => columns.find((col) => col.cards.some((c) => c.id === cardId));
|
|
107
|
+
const handleDragStart = (event) => {
|
|
108
|
+
const col = findColumnByCardId(String(event.active.id));
|
|
109
|
+
const card = col?.cards.find((c) => c.id === String(event.active.id));
|
|
110
|
+
if (card) setActiveCard(card);
|
|
111
|
+
};
|
|
112
|
+
const handleDragOver = (event) => {
|
|
113
|
+
const { active, over } = event;
|
|
114
|
+
if (!over) return;
|
|
115
|
+
const activeId = String(active.id);
|
|
116
|
+
const overId = String(over.id);
|
|
117
|
+
if (activeId === overId) return;
|
|
118
|
+
const activeCol = findColumnByCardId(activeId);
|
|
119
|
+
const overCol = findColumnByCardId(overId) ?? columns.find((c) => c.id === overId);
|
|
120
|
+
if (!activeCol || !overCol || activeCol.id === overCol.id) return;
|
|
121
|
+
setCols(
|
|
122
|
+
(prev) => prev.map((col) => {
|
|
123
|
+
if (col.id === activeCol.id) {
|
|
124
|
+
return { ...col, cards: col.cards.filter((c) => c.id !== activeId) };
|
|
125
|
+
}
|
|
126
|
+
if (col.id === overCol.id) {
|
|
127
|
+
const card = activeCol.cards.find((c) => c.id === activeId);
|
|
128
|
+
if (!card) return col;
|
|
129
|
+
const overIdx = col.cards.findIndex((c) => c.id === overId);
|
|
130
|
+
const newCards = [...col.cards];
|
|
131
|
+
if (overIdx >= 0) {
|
|
132
|
+
newCards.splice(overIdx, 0, card);
|
|
133
|
+
} else {
|
|
134
|
+
newCards.push(card);
|
|
135
|
+
}
|
|
136
|
+
return { ...col, cards: newCards };
|
|
137
|
+
}
|
|
138
|
+
return col;
|
|
139
|
+
})
|
|
140
|
+
);
|
|
141
|
+
};
|
|
142
|
+
const handleDragEnd = (event) => {
|
|
143
|
+
const { active, over } = event;
|
|
144
|
+
setActiveCard(null);
|
|
145
|
+
if (!over || active.id === over.id) return;
|
|
146
|
+
const activeId = String(active.id);
|
|
147
|
+
const overId = String(over.id);
|
|
148
|
+
const col = findColumnByCardId(activeId);
|
|
149
|
+
if (!col) return;
|
|
150
|
+
const oldIdx = col.cards.findIndex((c) => c.id === activeId);
|
|
151
|
+
const newIdx = col.cards.findIndex((c) => c.id === overId);
|
|
152
|
+
if (oldIdx >= 0 && newIdx >= 0 && oldIdx !== newIdx) {
|
|
153
|
+
setCols(
|
|
154
|
+
(prev) => prev.map((c) => {
|
|
155
|
+
if (c.id !== col.id) return c;
|
|
156
|
+
const newCards = [...c.cards];
|
|
157
|
+
const [moved] = newCards.splice(oldIdx, 1);
|
|
158
|
+
newCards.splice(newIdx, 0, moved);
|
|
159
|
+
return { ...c, cards: newCards };
|
|
160
|
+
})
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
return /* @__PURE__ */ jsxs(
|
|
165
|
+
DndContext,
|
|
166
|
+
{
|
|
167
|
+
sensors,
|
|
168
|
+
collisionDetection: closestCorners,
|
|
169
|
+
onDragStart: handleDragStart,
|
|
170
|
+
onDragOver: handleDragOver,
|
|
171
|
+
onDragEnd: handleDragEnd,
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ jsx("div", { className: cn("flex gap-ds-4 overflow-x-auto pb-ds-2 snap-x snap-mandatory sm:snap-none", className), children: columns.map((col) => /* @__PURE__ */ jsxs(
|
|
174
|
+
"div",
|
|
175
|
+
{
|
|
176
|
+
className: cn(
|
|
177
|
+
"flex flex-col shrink-0 w-[calc(100vw-4rem)] sm:w-[280px] snap-center",
|
|
178
|
+
"bg-[var(--ds-bg-muted)] rounded-[var(--ds-radius-lg)]",
|
|
179
|
+
"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]"
|
|
180
|
+
),
|
|
181
|
+
children: [
|
|
182
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-ds-3 py-ds-2.5", children: [
|
|
183
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-ds-2", children: [
|
|
184
|
+
col.color && /* @__PURE__ */ jsx(
|
|
185
|
+
"span",
|
|
186
|
+
{
|
|
187
|
+
className: "w-2.5 h-2.5 rounded-[var(--ds-radius-full)] shrink-0",
|
|
188
|
+
style: { backgroundColor: col.color }
|
|
189
|
+
}
|
|
190
|
+
),
|
|
191
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--ds-weight-heading)] text-[var(--ds-text-primary)]", children: col.title }),
|
|
192
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--ds-text-muted)] tabular-nums", children: col.cards.length })
|
|
193
|
+
] }),
|
|
194
|
+
/* @__PURE__ */ jsx(Icon, { name: "plus", size: 14, className: "text-[var(--ds-text-muted)]" })
|
|
195
|
+
] }),
|
|
196
|
+
/* @__PURE__ */ jsx(
|
|
197
|
+
SortableContext,
|
|
198
|
+
{
|
|
199
|
+
items: col.cards.map((c) => c.id),
|
|
200
|
+
strategy: verticalListSortingStrategy,
|
|
201
|
+
id: col.id,
|
|
202
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-ds-2.5 px-ds-3 pb-ds-3 min-h-[60px]", children: col.cards.map((card) => /* @__PURE__ */ jsx(
|
|
203
|
+
SortableCard,
|
|
204
|
+
{
|
|
205
|
+
card,
|
|
206
|
+
renderCard
|
|
207
|
+
},
|
|
208
|
+
card.id
|
|
209
|
+
)) })
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
col.id
|
|
215
|
+
)) }),
|
|
216
|
+
/* @__PURE__ */ jsx(DragOverlay, { children: activeCard && /* @__PURE__ */ jsx(OverlayCard, { card: activeCard, renderCard }) })
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export { KanbanBoard };
|
|
223
|
+
//# sourceMappingURL=kanban.js.map
|
|
224
|
+
//# sourceMappingURL=kanban.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/components/KanbanBoard.tsx"],"names":[],"mappings":"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","file":"kanban.js","sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport {\n DndContext,\n closestCorners,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../lib/icons\";\nimport { Tooltip } from \"./Tooltip\";\nimport { useTextOverflow } from \"../lib/use-text-overflow\";\nimport { Badge } from \"./Badge\";\n\nexport interface KanbanCard {\n id: string;\n title: string;\n description?: string;\n tags?: string[];\n avatar?: string;\n}\n\nexport interface KanbanColumn {\n id: string;\n title: string;\n cards: KanbanCard[];\n color?: string;\n}\n\nexport interface KanbanBoardProps {\n columns: KanbanColumn[];\n onColumnsChange?: (columns: KanbanColumn[]) => void;\n renderCard?: (card: KanbanCard) => ReactNode;\n className?: string;\n}\n\nfunction SortableCard({\n card,\n renderCard,\n}: {\n card: KanbanCard;\n renderCard?: (card: KanbanCard) => ReactNode;\n}) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: card.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n className={cn(\n \"rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n \"bg-[var(--ds-bg-surface)] p-ds-3 cursor-grab active:cursor-grabbing\",\n \"shadow-[var(--ds-shadow-button)]\",\n \"transition-shadow duration-[var(--ds-transition-speed)]\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n isDragging && \"opacity-30 scale-[1.02]\",\n )}\n >\n {renderCard ? (\n renderCard(card)\n ) : (\n <DefaultCard card={card} />\n )}\n </div>\n );\n}\n\nfunction ClampedDescription({ children }: { children: string }) {\n const { ref, isTruncated } = useTextOverflow({ lines: 2 });\n const el = <p ref={ref} className=\"text-xs text-[var(--ds-text-secondary)] line-clamp-2\">{children}</p>;\n if (!isTruncated) return el;\n return <Tooltip content={children}>{el}</Tooltip>;\n}\n\nfunction TruncTitle({ children }: { children: string }) {\n const { ref, isTruncated } = useTextOverflow({ lines: 1 });\n const el = <p ref={ref} className=\"text-sm font-medium text-[var(--ds-text-primary)] truncate\">{children}</p>;\n if (!isTruncated) return el;\n return <Tooltip content={children}>{el}</Tooltip>;\n}\n\nfunction DefaultCard({ card }: { card: KanbanCard }) {\n return (\n <div className=\"space-y-ds-2\">\n <TruncTitle>{card.title}</TruncTitle>\n {card.description && (\n <ClampedDescription>{card.description}</ClampedDescription>\n )}\n {card.tags && card.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-ds-1\">\n {card.tags.map((tag) => (\n <Badge key={tag} variant=\"subtle\" size=\"sm\">{tag}</Badge>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction OverlayCard({\n card,\n renderCard,\n}: {\n card: KanbanCard;\n renderCard?: (card: KanbanCard) => ReactNode;\n}) {\n return (\n <div\n className={cn(\n \"rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n \"bg-[var(--ds-bg-surface)] p-ds-3 shadow-[var(--ds-shadow-card)]\",\n \"rotate-2\",\n )}\n >\n {renderCard ? renderCard(card) : <DefaultCard card={card} />}\n </div>\n );\n}\n\nexport function KanbanBoard({\n columns: controlledCols,\n onColumnsChange,\n renderCard,\n className,\n}: KanbanBoardProps) {\n const [internalCols, setInternalCols] = useState<KanbanColumn[]>(controlledCols);\n const columns = onColumnsChange ? controlledCols : internalCols;\n const setCols = (next: KanbanColumn[] | ((prev: KanbanColumn[]) => KanbanColumn[])) => {\n if (typeof next === \"function\") {\n const updated = next(columns);\n if (onColumnsChange) onColumnsChange(updated);\n else setInternalCols(updated);\n } else {\n if (onColumnsChange) onColumnsChange(next);\n else setInternalCols(next);\n }\n };\n\n const [activeCard, setActiveCard] = useState<KanbanCard | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const findColumnByCardId = (cardId: string) =>\n columns.find((col) => col.cards.some((c) => c.id === cardId));\n\n const handleDragStart = (event: DragStartEvent) => {\n const col = findColumnByCardId(String(event.active.id));\n const card = col?.cards.find((c) => c.id === String(event.active.id));\n if (card) setActiveCard(card);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n const { active, over } = event;\n if (!over) return;\n\n const activeId = String(active.id);\n const overId = String(over.id);\n if (activeId === overId) return;\n\n const activeCol = findColumnByCardId(activeId);\n const overCol =\n findColumnByCardId(overId) ?? columns.find((c) => c.id === overId);\n\n if (!activeCol || !overCol || activeCol.id === overCol.id) return;\n\n setCols((prev) =>\n prev.map((col) => {\n if (col.id === activeCol.id) {\n return { ...col, cards: col.cards.filter((c) => c.id !== activeId) };\n }\n if (col.id === overCol.id) {\n const card = activeCol.cards.find((c) => c.id === activeId);\n if (!card) return col;\n const overIdx = col.cards.findIndex((c) => c.id === overId);\n const newCards = [...col.cards];\n if (overIdx >= 0) {\n newCards.splice(overIdx, 0, card);\n } else {\n newCards.push(card);\n }\n return { ...col, cards: newCards };\n }\n return col;\n }),\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n setActiveCard(null);\n if (!over || active.id === over.id) return;\n\n const activeId = String(active.id);\n const overId = String(over.id);\n\n const col = findColumnByCardId(activeId);\n if (!col) return;\n\n const oldIdx = col.cards.findIndex((c) => c.id === activeId);\n const newIdx = col.cards.findIndex((c) => c.id === overId);\n\n if (oldIdx >= 0 && newIdx >= 0 && oldIdx !== newIdx) {\n setCols((prev) =>\n prev.map((c) => {\n if (c.id !== col.id) return c;\n const newCards = [...c.cards];\n const [moved] = newCards.splice(oldIdx, 1);\n newCards.splice(newIdx, 0, moved);\n return { ...c, cards: newCards };\n }),\n );\n }\n };\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCorners}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <div className={cn(\"flex gap-ds-4 overflow-x-auto pb-ds-2 snap-x snap-mandatory sm:snap-none\", className)}>\n {columns.map((col) => (\n <div\n key={col.id}\n className={cn(\n \"flex flex-col shrink-0 w-[calc(100vw-4rem)] sm:w-[280px] snap-center\",\n \"bg-[var(--ds-bg-muted)] rounded-[var(--ds-radius-lg)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n )}\n >\n <div className=\"flex items-center justify-between px-ds-3 py-ds-2.5\">\n <div className=\"flex items-center gap-ds-2\">\n {col.color && (\n <span\n className=\"w-2.5 h-2.5 rounded-[var(--ds-radius-full)] shrink-0\"\n style={{ backgroundColor: col.color }}\n />\n )}\n <span className=\"text-sm font-[var(--ds-weight-heading)] text-[var(--ds-text-primary)]\">\n {col.title}\n </span>\n <span className=\"text-xs text-[var(--ds-text-muted)] tabular-nums\">\n {col.cards.length}\n </span>\n </div>\n <Icon name=\"plus\" size={14} className=\"text-[var(--ds-text-muted)]\" />\n </div>\n\n <SortableContext\n items={col.cards.map((c) => c.id)}\n strategy={verticalListSortingStrategy}\n id={col.id}\n >\n <div className=\"flex flex-col gap-ds-2.5 px-ds-3 pb-ds-3 min-h-[60px]\">\n {col.cards.map((card) => (\n <SortableCard\n key={card.id}\n card={card}\n renderCard={renderCard}\n />\n ))}\n </div>\n </SortableContext>\n </div>\n ))}\n </div>\n\n <DragOverlay>\n {activeCard && <OverlayCard card={activeCard} renderCard={renderCard} />}\n </DragOverlay>\n </DndContext>\n );\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { buildExtendedMap } from './chunk-GYVBRUO2.js';
|
|
2
|
-
import './chunk-5WRI5ZAA.js';
|
|
3
2
|
import { Upload, Download, Bookmark, Star, Menu, Pencil, LogOut, Send, Paperclip, Mic, GripVertical, ArrowLeft, Redo2, Undo2, Trash2, ChevronDown, ChevronUp, Type, Highlighter, Subscript, Superscript, Minus, Quote, Code, Table, Image, Link, ListChecks, ListOrdered, List, AlignRight, AlignCenter, AlignLeft, Strikethrough, Underline, Italic, Bold, CalendarDays, Clock, AlertCircle, Info, AlertTriangle, Check, User, Bell, Search, Plus, X, ChevronRight, Settings, BarChart3, FolderKanban, Home } from 'lucide-react';
|
|
4
3
|
|
|
5
4
|
var curated = {
|
|
@@ -68,5 +67,5 @@ async function loadExtended() {
|
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
export { loadCurated, loadExtended };
|
|
71
|
-
//# sourceMappingURL=lucide-
|
|
72
|
-
//# sourceMappingURL=lucide-
|
|
70
|
+
//# sourceMappingURL=lucide-AILUUOAJ.js.map
|
|
71
|
+
//# sourceMappingURL=lucide-AILUUOAJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icon-packs/lucide.ts"],"names":[],"mappings":";;;AAqBA,IAAM,OAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,IAAA;AAAA,EAAM,QAAA,EAAU,YAAA;AAAA,EAAc,OAAA,EAAS,SAAA;AAAA,EAAW,UAAA,EAAY,QAAA;AAAA,EACtE,eAAA,EAAiB,YAAA;AAAA,EAAc,OAAA,EAAS,CAAA;AAAA,EAAG,MAAA,EAAQ,IAAA;AAAA,EAAM,QAAA,EAAU,MAAA;AAAA,EACnE,MAAA,EAAQ,IAAA;AAAA,EAAM,MAAA,EAAQ,IAAA;AAAA,EAAM,OAAA,EAAS,KAAA;AAAA,EAAO,SAAA,EAAW,aAAA;AAAA,EACvD,MAAA,EAAQ,IAAA;AAAA,EAAM,OAAA,EAAS,WAAA;AAAA,EAAa,OAAA,EAAS,KAAA;AAAA,EAAO,UAAA,EAAY,YAAA;AAAA,EAChE,MAAA,EAAQ,IAAA;AAAA,EAAM,QAAA,EAAU,MAAA;AAAA,EAAQ,WAAA,EAAa,SAAA;AAAA,EAAW,eAAA,EAAiB,aAAA;AAAA,EACzE,YAAA,EAAc,SAAA;AAAA,EAAW,cAAA,EAAgB,WAAA;AAAA,EAAa,aAAA,EAAe,UAAA;AAAA,EACrE,MAAA,EAAQ,IAAA;AAAA,EAAM,cAAA,EAAgB,WAAA;AAAA,EAAa,aAAA,EAAe,UAAA;AAAA,EAC1D,MAAA,EAAQ,IAAA;AAAA,EAAM,OAAA,EAAS,KAAA;AAAA,EAAO,OAAA,EAAS,KAAA;AAAA,EAAO,MAAA,EAAQ,IAAA;AAAA,EACtD,OAAA,EAAS,KAAA;AAAA,EAAO,OAAA,EAAS,KAAA;AAAA,EAAO,aAAA,EAAe,WAAA;AAAA,EAAa,WAAA,EAAa,SAAA;AAAA,EACzE,WAAA,EAAa,WAAA;AAAA,EAAa,MAAA,EAAQ,IAAA;AAAA,EAAM,YAAA,EAAc,SAAA;AAAA,EAAW,cAAA,EAAgB,WAAA;AAAA,EACjF,OAAA,EAAS,MAAA;AAAA,EAAQ,MAAA,EAAQ,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EACxC,YAAA,EAAc,SAAA;AAAA,EAAW,eAAA,EAAiB,YAAA;AAAA,EAC1C,KAAA,EAAO,GAAA;AAAA,EAAK,WAAA,EAAa,SAAA;AAAA,EAAW,MAAA,EAAQ,IAAA;AAAA,EAC5C,SAAA,EAAW,MAAA;AAAA,EAAQ,MAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA,EAAQ,IAAA;AAAA,EAC3C,MAAA,EAAQ,IAAA;AAAA,EAAM,UAAA,EAAY,QAAA;AAAA,EAC1B,UAAA,EAAY,QAAA;AAAA,EAAU,QAAA,EAAU;AAClC,CAAA;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,OAAO,cAAc,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,CAAA,EAAyC,EAAE,CAAA;AAC7E,EAAA,MAAA,CAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT","file":"lucide-AILUUOAJ.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\nimport {\n Home, FolderKanban, BarChart3, Settings,\n ChevronRight, X, Plus, Search,\n Bell, User, Check, AlertTriangle,\n Info, AlertCircle, Clock, CalendarDays,\n Bold, Italic, Underline, Strikethrough,\n AlignLeft, AlignCenter, AlignRight,\n List, ListOrdered, ListChecks,\n Link, Image, Table, Code,\n Quote, Minus, Superscript, Subscript,\n Highlighter, Type, ChevronUp, ChevronDown,\n Trash2, Undo2, Redo2,\n ArrowLeft, GripVertical,\n Mic, Paperclip, Send,\n LogOut, Pencil, Menu,\n Star, Bookmark,\n Download, Upload,\n} from \"lucide-react\"\n\nconst curated: IconMap = {\n \"home\": Home, \"folder\": FolderKanban, \"chart\": BarChart3, \"settings\": Settings,\n \"chevron-right\": ChevronRight, \"close\": X, \"plus\": Plus, \"search\": Search,\n \"bell\": Bell, \"user\": User, \"check\": Check, \"warning\": AlertTriangle,\n \"info\": Info, \"error\": AlertCircle, \"clock\": Clock, \"calendar\": CalendarDays,\n \"bold\": Bold, \"italic\": Italic, \"underline\": Underline, \"strikethrough\": Strikethrough,\n \"align-left\": AlignLeft, \"align-center\": AlignCenter, \"align-right\": AlignRight,\n \"list\": List, \"list-ordered\": ListOrdered, \"list-checks\": ListChecks,\n \"link\": Link, \"image\": Image, \"table\": Table, \"code\": Code,\n \"quote\": Quote, \"minus\": Minus, \"superscript\": Superscript, \"subscript\": Subscript,\n \"highlight\": Highlighter, \"type\": Type, \"chevron-up\": ChevronUp, \"chevron-down\": ChevronDown,\n \"trash\": Trash2, \"undo\": Undo2, \"redo\": Redo2,\n \"arrow-left\": ArrowLeft, \"grip-vertical\": GripVertical,\n \"mic\": Mic, \"paperclip\": Paperclip, \"send\": Send,\n \"log-out\": LogOut, \"edit\": Pencil, \"menu\": Menu,\n \"star\": Star, \"bookmark\": Bookmark,\n \"download\": Download, \"upload\": Upload,\n}\n\nexport function loadCurated(): IconMap {\n return curated\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const L = await import(\"lucide-react\")\n const extended = buildExtendedMap(L as unknown as Record<string, unknown>, {})\n Object.assign(extended, curated)\n return extended\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { buildExtendedMap } from './chunk-GYVBRUO2.js';
|
|
2
|
-
import './chunk-5WRI5ZAA.js';
|
|
3
2
|
import { UploadSimple, DownloadSimple, BookmarkSimple, Star, List, PencilSimple, SignOut, PaperPlaneTilt, Paperclip, Microphone, DotsSixVertical, ArrowLeft, ArrowClockwise, ArrowCounterClockwise, Trash, CaretDown, CaretUp, TextT, Highlighter, TextSubscript, TextSuperscript, Minus, Quotes, Code, Table, Image, Link, ListChecks, ListNumbers, ListBullets, TextAlignRight, TextAlignCenter, TextAlignLeft, TextStrikethrough, TextUnderline, TextItalic, TextB, CalendarBlank, Clock, WarningCircle, Info, Warning, Check, User, Bell, MagnifyingGlass, Plus, X, CaretRight, Gear, ChartBar, FolderSimple, House } from '@phosphor-icons/react';
|
|
4
3
|
|
|
5
4
|
var curated = {
|
|
@@ -68,5 +67,5 @@ async function loadExtended() {
|
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
export { loadCurated, loadExtended };
|
|
71
|
-
//# sourceMappingURL=phosphor-
|
|
72
|
-
//# sourceMappingURL=phosphor-
|
|
70
|
+
//# sourceMappingURL=phosphor-A4JOBGMT.js.map
|
|
71
|
+
//# sourceMappingURL=phosphor-A4JOBGMT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/icon-packs/phosphor.ts"],"names":[],"mappings":";;;AAwBA,IAAM,OAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,KAAA;AAAA,EAAO,QAAA,EAAU,YAAA;AAAA,EAAc,OAAA,EAAS,QAAA;AAAA,EAChD,UAAA,EAAY,IAAA;AAAA,EAAM,eAAA,EAAiB,UAAA;AAAA,EAAY,OAAA,EAAS,CAAA;AAAA,EACxD,MAAA,EAAQ,IAAA;AAAA,EAAM,QAAA,EAAU,eAAA;AAAA,EAAiB,MAAA,EAAQ,IAAA;AAAA,EAAM,MAAA,EAAQ,IAAA;AAAA,EAC/D,OAAA,EAAS,KAAA;AAAA,EAAO,SAAA,EAAW,OAAA;AAAA,EAAS,MAAA,EAAQ,IAAA;AAAA,EAC5C,OAAA,EAAS,aAAA;AAAA,EAAe,OAAA,EAAS,KAAA;AAAA,EAAO,UAAA,EAAY,aAAA;AAAA,EACpD,MAAA,EAAQ,KAAA;AAAA,EAAO,QAAA,EAAU,UAAA;AAAA,EAAY,WAAA,EAAa,aAAA;AAAA,EAClD,eAAA,EAAiB,iBAAA;AAAA,EAAmB,YAAA,EAAc,aAAA;AAAA,EAClD,cAAA,EAAgB,eAAA;AAAA,EAAiB,aAAA,EAAe,cAAA;AAAA,EAChD,MAAA,EAAQ,WAAA;AAAA,EAAa,cAAA,EAAgB,WAAA;AAAA,EAAa,aAAA,EAAe,UAAA;AAAA,EACjE,MAAA,EAAQ,IAAA;AAAA,EAAM,OAAA,EAAS,KAAA;AAAA,EAAO,OAAA,EAAS,KAAA;AAAA,EAAO,MAAA,EAAQ,IAAA;AAAA,EACtD,OAAA,EAAS,MAAA;AAAA,EAAQ,OAAA,EAAS,KAAA;AAAA,EAAO,aAAA,EAAe,eAAA;AAAA,EAChD,WAAA,EAAa,aAAA;AAAA,EAAe,WAAA,EAAa,WAAA;AAAA,EAAa,MAAA,EAAQ,KAAA;AAAA,EAC9D,YAAA,EAAc,OAAA;AAAA,EAAS,cAAA,EAAgB,SAAA;AAAA,EAAW,OAAA,EAAS,KAAA;AAAA,EAC3D,MAAA,EAAQ,qBAAA;AAAA,EAAuB,MAAA,EAAQ,cAAA;AAAA,EACvC,YAAA,EAAc,SAAA;AAAA,EAAW,eAAA,EAAiB,eAAA;AAAA,EAC1C,KAAA,EAAO,UAAA;AAAA,EAAY,WAAA,EAAa,SAAA;AAAA,EAAW,MAAA,EAAQ,cAAA;AAAA,EACnD,SAAA,EAAW,OAAA;AAAA,EAAS,MAAA,EAAQ,YAAA;AAAA,EAAc,MAAA,EAAQ,IAAA;AAAA,EAClD,MAAA,EAAQ,IAAA;AAAA,EAAM,UAAA,EAAY,cAAA;AAAA,EAC1B,UAAA,EAAY,cAAA;AAAA,EAAgB,QAAA,EAAU;AACxC,CAAA;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,OAAO,uBAAuB,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,CAAA,EAAyC,EAAE,CAAA;AAC7E,EAAA,MAAA,CAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAC/B,EAAA,OAAO,QAAA;AACT","file":"phosphor-A4JOBGMT.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap } from './utils'\nimport {\n House, FolderSimple, ChartBar,\n Gear, CaretRight, X,\n Plus, MagnifyingGlass, Bell, User,\n Check, Warning, Info,\n WarningCircle, Clock, CalendarBlank,\n TextB, TextItalic, TextUnderline,\n TextStrikethrough, TextAlignLeft,\n TextAlignCenter, TextAlignRight,\n ListBullets, ListNumbers, ListChecks,\n Link, Image, Table, Code,\n Quotes, Minus, TextSuperscript,\n TextSubscript, Highlighter, TextT,\n CaretUp, CaretDown, Trash,\n ArrowCounterClockwise, ArrowClockwise,\n ArrowLeft, DotsSixVertical,\n Microphone, Paperclip, PaperPlaneTilt,\n SignOut, PencilSimple, List,\n Star, BookmarkSimple,\n DownloadSimple, UploadSimple,\n} from \"@phosphor-icons/react\"\n\nconst curated: IconMap = {\n \"home\": House, \"folder\": FolderSimple, \"chart\": ChartBar,\n \"settings\": Gear, \"chevron-right\": CaretRight, \"close\": X,\n \"plus\": Plus, \"search\": MagnifyingGlass, \"bell\": Bell, \"user\": User,\n \"check\": Check, \"warning\": Warning, \"info\": Info,\n \"error\": WarningCircle, \"clock\": Clock, \"calendar\": CalendarBlank,\n \"bold\": TextB, \"italic\": TextItalic, \"underline\": TextUnderline,\n \"strikethrough\": TextStrikethrough, \"align-left\": TextAlignLeft,\n \"align-center\": TextAlignCenter, \"align-right\": TextAlignRight,\n \"list\": ListBullets, \"list-ordered\": ListNumbers, \"list-checks\": ListChecks,\n \"link\": Link, \"image\": Image, \"table\": Table, \"code\": Code,\n \"quote\": Quotes, \"minus\": Minus, \"superscript\": TextSuperscript,\n \"subscript\": TextSubscript, \"highlight\": Highlighter, \"type\": TextT,\n \"chevron-up\": CaretUp, \"chevron-down\": CaretDown, \"trash\": Trash,\n \"undo\": ArrowCounterClockwise, \"redo\": ArrowClockwise,\n \"arrow-left\": ArrowLeft, \"grip-vertical\": DotsSixVertical,\n \"mic\": Microphone, \"paperclip\": Paperclip, \"send\": PaperPlaneTilt,\n \"log-out\": SignOut, \"edit\": PencilSimple, \"menu\": List,\n \"star\": Star, \"bookmark\": BookmarkSimple,\n \"download\": DownloadSimple, \"upload\": UploadSimple,\n}\n\nexport function loadCurated(): IconMap {\n return curated\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const P = await import(\"@phosphor-icons/react\")\n const extended = buildExtendedMap(P as unknown as Record<string, unknown>, {})\n Object.assign(extended, curated)\n return extended\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Separator, Panel, Group } from 'react-resizable-panels';
|
|
3
|
+
import { ComponentProps } from 'react';
|
|
4
|
+
|
|
5
|
+
type PanelGroupProps = ComponentProps<typeof Group>;
|
|
6
|
+
type Direction = "horizontal" | "vertical";
|
|
7
|
+
interface ResizablePanelGroupProps extends Omit<PanelGroupProps, "className" | "orientation"> {
|
|
8
|
+
direction?: Direction;
|
|
9
|
+
stackOnMobile?: boolean;
|
|
10
|
+
className?: string;
|
|
11
|
+
/** Map of panel id → percentage (0–100). Must be an object, never an array. Panels need matching id props. */
|
|
12
|
+
defaultLayout?: {
|
|
13
|
+
[panelId: string]: number;
|
|
14
|
+
};
|
|
15
|
+
/** Called after resize ends. Receives { [panelId]: number }, not number[]. */
|
|
16
|
+
onLayoutChanged?: (layout: {
|
|
17
|
+
[panelId: string]: number;
|
|
18
|
+
}) => void;
|
|
19
|
+
}
|
|
20
|
+
declare function ResizablePanelGroup({ className, direction, stackOnMobile, ...props }: ResizablePanelGroupProps): react_jsx_runtime.JSX.Element;
|
|
21
|
+
type PanelProps = ComponentProps<typeof Panel>;
|
|
22
|
+
interface ResizablePanelProps extends Omit<PanelProps, "className"> {
|
|
23
|
+
className?: string;
|
|
24
|
+
id?: string;
|
|
25
|
+
/** number = px. "30%" or "30" = percent. "28rem" / "400px" also valid. */
|
|
26
|
+
defaultSize?: number | string;
|
|
27
|
+
minSize?: number | string;
|
|
28
|
+
maxSize?: number | string;
|
|
29
|
+
collapsible?: boolean;
|
|
30
|
+
}
|
|
31
|
+
declare function ResizablePanel({ className, ...props }: ResizablePanelProps): react_jsx_runtime.JSX.Element;
|
|
32
|
+
type PanelResizeHandleProps = ComponentProps<typeof Separator>;
|
|
33
|
+
interface ResizableHandleProps extends Omit<PanelResizeHandleProps, "className"> {
|
|
34
|
+
withHandle?: boolean;
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
declare function ResizableHandle({ withHandle, className, ...props }: ResizableHandleProps): react_jsx_runtime.JSX.Element;
|
|
38
|
+
|
|
39
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useBreakpoint } from './chunk-DPF6776I.js';
|
|
2
|
+
import { Icon } from './chunk-XUBVMRIE.js';
|
|
3
|
+
import { cn } from './chunk-IUBWNDUK.js';
|
|
4
|
+
import { Group, Panel, Separator } from 'react-resizable-panels';
|
|
5
|
+
import { createContext, useContext } from 'react';
|
|
6
|
+
import { jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var DirectionCtx = createContext("horizontal");
|
|
9
|
+
var MobileCtx = createContext(false);
|
|
10
|
+
function ResizablePanelGroup({
|
|
11
|
+
className,
|
|
12
|
+
direction = "horizontal",
|
|
13
|
+
stackOnMobile = true,
|
|
14
|
+
...props
|
|
15
|
+
}) {
|
|
16
|
+
const isMobile = useBreakpoint("sm");
|
|
17
|
+
const shouldStack = stackOnMobile && isMobile && direction === "horizontal";
|
|
18
|
+
const effectiveDirection = shouldStack ? "vertical" : direction;
|
|
19
|
+
return /* @__PURE__ */ jsx(DirectionCtx.Provider, { value: effectiveDirection, children: /* @__PURE__ */ jsx(MobileCtx.Provider, { value: isMobile, children: /* @__PURE__ */ jsx(
|
|
20
|
+
Group,
|
|
21
|
+
{
|
|
22
|
+
className: cn(
|
|
23
|
+
"flex h-full w-full",
|
|
24
|
+
effectiveDirection === "vertical" && "flex-col",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
orientation: effectiveDirection,
|
|
28
|
+
...props
|
|
29
|
+
}
|
|
30
|
+
) }) });
|
|
31
|
+
}
|
|
32
|
+
function ResizablePanel({ className, ...props }) {
|
|
33
|
+
return /* @__PURE__ */ jsx(Panel, { className: cn("", className), ...props });
|
|
34
|
+
}
|
|
35
|
+
function ResizableHandle({
|
|
36
|
+
withHandle,
|
|
37
|
+
className,
|
|
38
|
+
...props
|
|
39
|
+
}) {
|
|
40
|
+
const direction = useContext(DirectionCtx);
|
|
41
|
+
const isMobile = useContext(MobileCtx);
|
|
42
|
+
const isVertical = direction === "vertical";
|
|
43
|
+
return /* @__PURE__ */ jsx(
|
|
44
|
+
Separator,
|
|
45
|
+
{
|
|
46
|
+
className: cn(
|
|
47
|
+
"relative flex items-center justify-center bg-[var(--ds-border-default)]",
|
|
48
|
+
isVertical ? cn(
|
|
49
|
+
"h-[var(--ds-border-width)] w-full after:absolute after:left-0 after:right-0 after:content-['']",
|
|
50
|
+
isMobile ? "after:-top-3 after:-bottom-3" : "after:-top-1 after:-bottom-1"
|
|
51
|
+
) : cn(
|
|
52
|
+
"w-[var(--ds-border-width)] after:absolute after:inset-y-0 after:content-['']",
|
|
53
|
+
isMobile ? "after:-left-3 after:-right-3" : "after:-left-1 after:-right-1"
|
|
54
|
+
),
|
|
55
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--ds-input-focus-ring)]",
|
|
56
|
+
"[&[data-resize-handle-state=drag]]:bg-[var(--ds-accent-primary)]",
|
|
57
|
+
"[&[data-resize-handle-state=hover]]:bg-[var(--ds-accent-primary)]",
|
|
58
|
+
className
|
|
59
|
+
),
|
|
60
|
+
...props,
|
|
61
|
+
children: withHandle && /* @__PURE__ */ jsx(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
className: cn(
|
|
65
|
+
"z-10 flex items-center justify-center rounded-[var(--ds-radius-sm)]",
|
|
66
|
+
"border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]",
|
|
67
|
+
"bg-[var(--ds-bg-surface)]",
|
|
68
|
+
isVertical ? isMobile ? "h-4 w-8" : "h-3 w-4" : isMobile ? "h-8 w-4" : "h-4 w-3"
|
|
69
|
+
),
|
|
70
|
+
children: /* @__PURE__ */ jsx(
|
|
71
|
+
Icon,
|
|
72
|
+
{
|
|
73
|
+
name: "grip-vertical",
|
|
74
|
+
size: isMobile ? 12 : 10,
|
|
75
|
+
className: cn(
|
|
76
|
+
"text-[var(--ds-text-muted)]",
|
|
77
|
+
isVertical && "rotate-90"
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
88
|
+
//# sourceMappingURL=resizable.js.map
|
|
89
|
+
//# sourceMappingURL=resizable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/components/ResizablePanels.tsx"],"names":["PanelGroup","PanelResizeHandle"],"mappings":";;;;;;;AAaA,IAAM,YAAA,GAAe,cAAyB,YAAY,CAAA;AAC1D,IAAM,SAAA,GAAY,cAAc,KAAK,CAAA;AAa9B,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,SAAA,GAAY,YAAA;AAAA,EACZ,aAAA,GAAgB,IAAA;AAAA,EAChB,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,MAAM,QAAA,GAAW,cAAc,IAAI,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,aAAA,IAAiB,QAAA,IAAY,SAAA,KAAc,YAAA;AAC/D,EAAA,MAAM,kBAAA,GAAqB,cAAc,UAAA,GAAa,SAAA;AAEtD,EAAA,uBACE,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,kBAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,SAAA,CAAU,QAAA,EAAV,EAAmB,KAAA,EAAO,QAAA,EACzB,QAAA,kBAAA,GAAA;AAAA,IAACA,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA,uBAAuB,UAAA,IAAc,UAAA;AAAA,QACrC;AAAA,OACF;AAAA,MACA,WAAA,EAAa,kBAAA;AAAA,MACZ,GAAG;AAAA;AAAA,KAER,CAAA,EACF,CAAA;AAEJ;AAcO,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AAC3E,EAAA,uBAAO,GAAA,CAAC,SAAM,SAAA,EAAW,EAAA,CAAG,IAAI,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACzD;AAUO,SAAS,eAAA,CAAgB;AAAA,EAC9B,UAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,MAAM,SAAA,GAAY,WAAW,YAAY,CAAA;AACzC,EAAA,MAAM,QAAA,GAAW,WAAW,SAAS,CAAA;AACrC,EAAA,MAAM,aAAa,SAAA,KAAc,UAAA;AAEjC,EAAA,uBACE,GAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,yEAAA;AAAA,QACA,UAAA,GACI,EAAA;AAAA,UACE,gGAAA;AAAA,UACA,WAAW,8BAAA,GAAiC;AAAA,SAC9C,GACA,EAAA;AAAA,UACE,8EAAA;AAAA,UACA,WAAW,8BAAA,GAAiC;AAAA,SAC9C;AAAA,QACJ,iGAAA;AAAA,QACA,kEAAA;AAAA,QACA,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,UAAA,oBACC,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,qEAAA;AAAA,YACA,0EAAA;AAAA,YACA,2BAAA;AAAA,YACA,UAAA,GACK,QAAA,GAAW,SAAA,GAAY,SAAA,GACvB,WAAW,SAAA,GAAY;AAAA,WAC9B;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,eAAA;AAAA,cACL,IAAA,EAAM,WAAW,EAAA,GAAK,EAAA;AAAA,cACtB,SAAA,EAAW,EAAA;AAAA,gBACT,6BAAA;AAAA,gBACA,UAAA,IAAc;AAAA;AAChB;AAAA;AACF;AAAA;AACF;AAAA,GAEJ;AAEJ","file":"resizable.js","sourcesContent":["import {\n Panel,\n Group as PanelGroup,\n Separator as PanelResizeHandle,\n} from \"react-resizable-panels\";\nimport { createContext, useContext, type ComponentProps } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useBreakpoint } from \"../lib/use-breakpoint\";\nimport { Icon } from \"../lib/icons\";\n\ntype PanelGroupProps = ComponentProps<typeof PanelGroup>;\n\ntype Direction = \"horizontal\" | \"vertical\";\nconst DirectionCtx = createContext<Direction>(\"horizontal\");\nconst MobileCtx = createContext(false);\n\nexport interface ResizablePanelGroupProps\n extends Omit<PanelGroupProps, \"className\" | \"orientation\"> {\n direction?: Direction;\n stackOnMobile?: boolean;\n className?: string;\n /** Map of panel id → percentage (0–100). Must be an object, never an array. Panels need matching id props. */\n defaultLayout?: { [panelId: string]: number };\n /** Called after resize ends. Receives { [panelId]: number }, not number[]. */\n onLayoutChanged?: (layout: { [panelId: string]: number }) => void;\n}\n\nexport function ResizablePanelGroup({\n className,\n direction = \"horizontal\",\n stackOnMobile = true,\n ...props\n}: ResizablePanelGroupProps) {\n const isMobile = useBreakpoint(\"sm\");\n const shouldStack = stackOnMobile && isMobile && direction === \"horizontal\";\n const effectiveDirection = shouldStack ? \"vertical\" : direction;\n\n return (\n <DirectionCtx.Provider value={effectiveDirection}>\n <MobileCtx.Provider value={isMobile}>\n <PanelGroup\n className={cn(\n \"flex h-full w-full\",\n effectiveDirection === \"vertical\" && \"flex-col\",\n className,\n )}\n orientation={effectiveDirection}\n {...props}\n />\n </MobileCtx.Provider>\n </DirectionCtx.Provider>\n );\n}\n\ntype PanelProps = ComponentProps<typeof Panel>;\n\nexport interface ResizablePanelProps extends Omit<PanelProps, \"className\"> {\n className?: string;\n id?: string;\n /** number = px. \"30%\" or \"30\" = percent. \"28rem\" / \"400px\" also valid. */\n defaultSize?: number | string;\n minSize?: number | string;\n maxSize?: number | string;\n collapsible?: boolean;\n}\n\nexport function ResizablePanel({ className, ...props }: ResizablePanelProps) {\n return <Panel className={cn(\"\", className)} {...props} />;\n}\n\ntype PanelResizeHandleProps = ComponentProps<typeof PanelResizeHandle>;\n\nexport interface ResizableHandleProps\n extends Omit<PanelResizeHandleProps, \"className\"> {\n withHandle?: boolean;\n className?: string;\n}\n\nexport function ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizableHandleProps) {\n const direction = useContext(DirectionCtx);\n const isMobile = useContext(MobileCtx);\n const isVertical = direction === \"vertical\";\n\n return (\n <PanelResizeHandle\n className={cn(\n \"relative flex items-center justify-center bg-[var(--ds-border-default)]\",\n isVertical\n ? cn(\n \"h-[var(--ds-border-width)] w-full after:absolute after:left-0 after:right-0 after:content-['']\",\n isMobile ? \"after:-top-3 after:-bottom-3\" : \"after:-top-1 after:-bottom-1\"\n )\n : cn(\n \"w-[var(--ds-border-width)] after:absolute after:inset-y-0 after:content-['']\",\n isMobile ? \"after:-left-3 after:-right-3\" : \"after:-left-1 after:-right-1\"\n ),\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--ds-input-focus-ring)]\",\n \"[&[data-resize-handle-state=drag]]:bg-[var(--ds-accent-primary)]\",\n \"[&[data-resize-handle-state=hover]]:bg-[var(--ds-accent-primary)]\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div\n className={cn(\n \"z-10 flex items-center justify-center rounded-[var(--ds-radius-sm)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]\",\n \"bg-[var(--ds-bg-surface)]\",\n isVertical\n ? (isMobile ? \"h-4 w-8\" : \"h-3 w-4\")\n : (isMobile ? \"h-8 w-4\" : \"h-4 w-3\"),\n )}\n >\n <Icon\n name=\"grip-vertical\"\n size={isMobile ? 12 : 10}\n className={cn(\n \"text-[var(--ds-text-muted)]\",\n isVertical && \"rotate-90\",\n )}\n />\n </div>\n )}\n </PanelResizeHandle>\n );\n}\n"]}
|
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);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { buildExtendedMap } from './chunk-GYVBRUO2.js';
|
|
2
|
-
import './chunk-5WRI5ZAA.js';
|
|
3
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';
|
|
4
3
|
|
|
5
4
|
var curated = {
|
|
@@ -68,5 +67,5 @@ async function loadExtended() {
|
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
export { loadCurated, loadExtended };
|
|
71
|
-
//# sourceMappingURL=tabler-
|
|
72
|
-
//# sourceMappingURL=tabler-
|
|
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
|