gridsmith-ui 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/charts.js +2 -2
  2. package/dist/chat.d.ts +12 -0
  3. package/dist/chat.js +94 -0
  4. package/dist/chat.js.map +1 -0
  5. package/dist/{chunk-TTZSZNJ6.js → chunk-4KVFH5KC.js} +7 -3
  6. package/dist/chunk-4KVFH5KC.js.map +1 -0
  7. package/dist/{chunk-KXNJJKIV.js → chunk-ADTPGMOD.js} +13 -13
  8. package/dist/chunk-ADTPGMOD.js.map +1 -0
  9. package/dist/{chunk-DDKCQVKO.js → chunk-LTV5X3S7.js} +48 -20
  10. package/dist/chunk-LTV5X3S7.js.map +1 -0
  11. package/dist/{chunk-QGBG72OB.js → chunk-M3AARGLI.js} +3 -3
  12. package/dist/{chunk-QGBG72OB.js.map → chunk-M3AARGLI.js.map} +1 -1
  13. package/dist/{chunk-GX6O72IV.js → chunk-NM3BFWHH.js} +19 -26
  14. package/dist/chunk-NM3BFWHH.js.map +1 -0
  15. package/dist/{chunk-GYVBRUO2.js → chunk-NRHIYS5W.js} +14 -3
  16. package/dist/chunk-NRHIYS5W.js.map +1 -0
  17. package/dist/chunk-R2HNSJJG.js +156 -0
  18. package/dist/chunk-R2HNSJJG.js.map +1 -0
  19. package/dist/chunk-RLUK575N.js +136 -0
  20. package/dist/chunk-RLUK575N.js.map +1 -0
  21. package/dist/chunk-WH2FUFAC.js +14 -0
  22. package/dist/chunk-WH2FUFAC.js.map +1 -0
  23. package/dist/data-grid.js +4 -3
  24. package/dist/data-grid.js.map +1 -1
  25. package/dist/editor.js +17 -13
  26. package/dist/editor.js.map +1 -1
  27. package/dist/feather-B65FI6CY.js +76 -0
  28. package/dist/feather-B65FI6CY.js.map +1 -0
  29. package/dist/heroicons-DIR7PXCR.js +76 -0
  30. package/dist/heroicons-DIR7PXCR.js.map +1 -0
  31. package/dist/icons.d.ts +1 -1
  32. package/dist/icons.js +1 -1
  33. package/dist/index.d.ts +352 -17
  34. package/dist/index.js +4612 -3484
  35. package/dist/index.js.map +1 -1
  36. package/dist/kanban.js +5 -4
  37. package/dist/kanban.js.map +1 -1
  38. package/dist/lucide-JH2R3TFV.js +76 -0
  39. package/dist/lucide-JH2R3TFV.js.map +1 -0
  40. package/dist/phosphor-HCVUMVT5.js +76 -0
  41. package/dist/phosphor-HCVUMVT5.js.map +1 -0
  42. package/dist/resizable.js +2 -2
  43. package/dist/roots.css +104 -17
  44. package/dist/tabler-HHIXSM73.js +76 -0
  45. package/dist/tabler-HHIXSM73.js.map +1 -0
  46. package/dist/tokens.css +15 -7
  47. package/dist/utils.js +1 -1
  48. package/dist/virtualized.js +1 -1
  49. package/dist-static/tokens.css +15 -7
  50. package/package.json +14 -2
  51. package/dist/chunk-DDKCQVKO.js.map +0 -1
  52. package/dist/chunk-GX6O72IV.js.map +0 -1
  53. package/dist/chunk-GYVBRUO2.js.map +0 -1
  54. package/dist/chunk-KXNJJKIV.js.map +0 -1
  55. package/dist/chunk-TTZSZNJ6.js.map +0 -1
  56. package/dist/feather-U45EQTAU.js +0 -72
  57. package/dist/feather-U45EQTAU.js.map +0 -1
  58. package/dist/heroicons-D3G7QU45.js +0 -72
  59. package/dist/heroicons-D3G7QU45.js.map +0 -1
  60. package/dist/lucide-OGUV44TQ.js +0 -72
  61. package/dist/lucide-OGUV44TQ.js.map +0 -1
  62. package/dist/phosphor-QG2ZMEMZ.js +0 -72
  63. package/dist/phosphor-QG2ZMEMZ.js.map +0 -1
  64. package/dist/tabler-MW2HN55L.js +0 -72
  65. package/dist/tabler-MW2HN55L.js.map +0 -1
package/dist/kanban.js CHANGED
@@ -1,7 +1,8 @@
1
- import { Badge } from './chunk-KXNJJKIV.js';
2
- import { useTextOverflow, Tooltip } from './chunk-DDKCQVKO.js';
3
- import { Icon } from './chunk-GX6O72IV.js';
4
- import { cn } from './chunk-TTZSZNJ6.js';
1
+ import { Badge } from './chunk-ADTPGMOD.js';
2
+ import { useTextOverflow, Tooltip } from './chunk-LTV5X3S7.js';
3
+ import './chunk-WH2FUFAC.js';
4
+ import { Icon } from './chunk-NM3BFWHH.js';
5
+ import { cn } from './chunk-4KVFH5KC.js';
5
6
  import { useState } from 'react';
6
7
  import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCorners, DragOverlay } from '@dnd-kit/core';
7
8
  import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
@@ -1 +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
+ {"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"]}
@@ -0,0 +1,76 @@
1
+ import { pickCurated, buildExtendedMap } from './chunk-NRHIYS5W.js';
2
+
3
+ // ../../showcase/src/lib/icon-packs/lucide.ts
4
+ var CURATED = {
5
+ "home": "Home",
6
+ "folder": "FolderKanban",
7
+ "chart": "BarChart3",
8
+ "settings": "Settings",
9
+ "chevron-right": "ChevronRight",
10
+ "close": "X",
11
+ "plus": "Plus",
12
+ "search": "Search",
13
+ "bell": "Bell",
14
+ "user": "User",
15
+ "check": "Check",
16
+ "warning": "AlertTriangle",
17
+ "info": "Info",
18
+ "error": "AlertCircle",
19
+ "clock": "Clock",
20
+ "calendar": "CalendarDays",
21
+ "bold": "Bold",
22
+ "italic": "Italic",
23
+ "underline": "Underline",
24
+ "strikethrough": "Strikethrough",
25
+ "align-left": "AlignLeft",
26
+ "align-center": "AlignCenter",
27
+ "align-right": "AlignRight",
28
+ "list": "List",
29
+ "list-ordered": "ListOrdered",
30
+ "list-checks": "ListChecks",
31
+ "link": "Link",
32
+ "image": "Image",
33
+ "table": "Table",
34
+ "code": "Code",
35
+ "quote": "Quote",
36
+ "minus": "Minus",
37
+ "superscript": "Superscript",
38
+ "subscript": "Subscript",
39
+ "highlight": "Highlighter",
40
+ "type": "Type",
41
+ "chevron-up": "ChevronUp",
42
+ "chevron-down": "ChevronDown",
43
+ "trash": "Trash2",
44
+ "undo": "Undo2",
45
+ "redo": "Redo2",
46
+ "arrow-left": "ArrowLeft",
47
+ "grip-vertical": "GripVertical",
48
+ "mic": "Mic",
49
+ "paperclip": "Paperclip",
50
+ "send": "Send",
51
+ "log-out": "LogOut",
52
+ "edit": "Pencil",
53
+ "menu": "Menu",
54
+ "more-horizontal": "MoreHorizontal",
55
+ "star": "Star",
56
+ "bookmark": "Bookmark",
57
+ "download": "Download",
58
+ "upload": "Upload",
59
+ "sparkles": "Sparkles"
60
+ };
61
+ async function peer() {
62
+ return await import('lucide-react');
63
+ }
64
+ async function loadCurated() {
65
+ return pickCurated(await peer(), CURATED);
66
+ }
67
+ async function loadExtended() {
68
+ const mod = await peer();
69
+ const extended = buildExtendedMap(mod, {});
70
+ Object.assign(extended, pickCurated(mod, CURATED));
71
+ return extended;
72
+ }
73
+
74
+ export { loadCurated, loadExtended };
75
+ //# sourceMappingURL=lucide-JH2R3TFV.js.map
76
+ //# sourceMappingURL=lucide-JH2R3TFV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/lucide.ts"],"names":[],"mappings":";;;AAgBA,IAAM,OAAA,GAAkC;AAAA,EACtC,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,OAAA,EAAS,WAAA;AAAA,EACT,UAAA,EAAY,UAAA;AAAA,EACZ,eAAA,EAAiB,cAAA;AAAA,EACjB,OAAA,EAAS,GAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,SAAA,EAAW,eAAA;AAAA,EACX,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,aAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,UAAA,EAAY,cAAA;AAAA,EACZ,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,WAAA,EAAa,WAAA;AAAA,EACb,eAAA,EAAiB,eAAA;AAAA,EACjB,YAAA,EAAc,WAAA;AAAA,EACd,cAAA,EAAgB,aAAA;AAAA,EAChB,aAAA,EAAe,YAAA;AAAA,EACf,MAAA,EAAQ,MAAA;AAAA,EACR,cAAA,EAAgB,aAAA;AAAA,EAChB,aAAA,EAAe,YAAA;AAAA,EACf,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,aAAA,EAAe,aAAA;AAAA,EACf,WAAA,EAAa,WAAA;AAAA,EACb,WAAA,EAAa,aAAA;AAAA,EACb,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,WAAA;AAAA,EACd,cAAA,EAAgB,aAAA;AAAA,EAChB,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,MAAA,EAAQ,OAAA;AAAA,EACR,YAAA,EAAc,WAAA;AAAA,EACd,eAAA,EAAiB,cAAA;AAAA,EACjB,KAAA,EAAO,KAAA;AAAA,EACP,WAAA,EAAa,WAAA;AAAA,EACb,MAAA,EAAQ,MAAA;AAAA,EACR,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,iBAAA,EAAmB,gBAAA;AAAA,EACnB,MAAA,EAAQ,MAAA;AAAA,EACR,UAAA,EAAY,UAAA;AAAA,EACZ,UAAA,EAAY,UAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AAEA,eAAe,IAAA,GAAyC;AACtD,EAAA,OAAQ,MAAM,OAAO,cAAc,CAAA;AACrC;AAEA,eAAsB,WAAA,GAAgC;AACpD,EAAA,OAAO,WAAA,CAAY,MAAM,IAAA,EAAK,EAAG,OAAO,CAAA;AAC1C;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAK;AACvB,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,EAAK,EAAE,CAAA;AACzC,EAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,WAAA,CAAY,GAAA,EAAK,OAAO,CAAC,CAAA;AACjD,EAAA,OAAO,QAAA;AACT","file":"lucide-JH2R3TFV.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Lucide icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"Home\",\n \"folder\": \"FolderKanban\",\n \"chart\": \"BarChart3\",\n \"settings\": \"Settings\",\n \"chevron-right\": \"ChevronRight\",\n \"close\": \"X\",\n \"plus\": \"Plus\",\n \"search\": \"Search\",\n \"bell\": \"Bell\",\n \"user\": \"User\",\n \"check\": \"Check\",\n \"warning\": \"AlertTriangle\",\n \"info\": \"Info\",\n \"error\": \"AlertCircle\",\n \"clock\": \"Clock\",\n \"calendar\": \"CalendarDays\",\n \"bold\": \"Bold\",\n \"italic\": \"Italic\",\n \"underline\": \"Underline\",\n \"strikethrough\": \"Strikethrough\",\n \"align-left\": \"AlignLeft\",\n \"align-center\": \"AlignCenter\",\n \"align-right\": \"AlignRight\",\n \"list\": \"List\",\n \"list-ordered\": \"ListOrdered\",\n \"list-checks\": \"ListChecks\",\n \"link\": \"Link\",\n \"image\": \"Image\",\n \"table\": \"Table\",\n \"code\": \"Code\",\n \"quote\": \"Quote\",\n \"minus\": \"Minus\",\n \"superscript\": \"Superscript\",\n \"subscript\": \"Subscript\",\n \"highlight\": \"Highlighter\",\n \"type\": \"Type\",\n \"chevron-up\": \"ChevronUp\",\n \"chevron-down\": \"ChevronDown\",\n \"trash\": \"Trash2\",\n \"undo\": \"Undo2\",\n \"redo\": \"Redo2\",\n \"arrow-left\": \"ArrowLeft\",\n \"grip-vertical\": \"GripVertical\",\n \"mic\": \"Mic\",\n \"paperclip\": \"Paperclip\",\n \"send\": \"Send\",\n \"log-out\": \"LogOut\",\n \"edit\": \"Pencil\",\n \"menu\": \"Menu\",\n \"more-horizontal\": \"MoreHorizontal\",\n \"star\": \"Star\",\n \"bookmark\": \"Bookmark\",\n \"download\": \"Download\",\n \"upload\": \"Upload\",\n \"sparkles\": \"Sparkles\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"lucide-react\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {})\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}
@@ -0,0 +1,76 @@
1
+ import { pickCurated, buildExtendedMap } from './chunk-NRHIYS5W.js';
2
+
3
+ // ../../showcase/src/lib/icon-packs/phosphor.ts
4
+ var CURATED = {
5
+ "home": "House",
6
+ "folder": "FolderSimple",
7
+ "chart": "ChartBar",
8
+ "settings": "Gear",
9
+ "chevron-right": "CaretRight",
10
+ "close": "X",
11
+ "plus": "Plus",
12
+ "search": "MagnifyingGlass",
13
+ "bell": "Bell",
14
+ "user": "User",
15
+ "check": "Check",
16
+ "warning": "Warning",
17
+ "info": "Info",
18
+ "error": "WarningCircle",
19
+ "clock": "Clock",
20
+ "calendar": "CalendarBlank",
21
+ "bold": "TextB",
22
+ "italic": "TextItalic",
23
+ "underline": "TextUnderline",
24
+ "strikethrough": "TextStrikethrough",
25
+ "align-left": "TextAlignLeft",
26
+ "align-center": "TextAlignCenter",
27
+ "align-right": "TextAlignRight",
28
+ "list": "ListBullets",
29
+ "list-ordered": "ListNumbers",
30
+ "list-checks": "ListChecks",
31
+ "link": "Link",
32
+ "image": "Image",
33
+ "table": "Table",
34
+ "code": "Code",
35
+ "quote": "Quotes",
36
+ "minus": "Minus",
37
+ "superscript": "TextSuperscript",
38
+ "subscript": "TextSubscript",
39
+ "highlight": "Highlighter",
40
+ "type": "TextT",
41
+ "chevron-up": "CaretUp",
42
+ "chevron-down": "CaretDown",
43
+ "trash": "Trash",
44
+ "undo": "ArrowCounterClockwise",
45
+ "redo": "ArrowClockwise",
46
+ "arrow-left": "ArrowLeft",
47
+ "grip-vertical": "DotsSixVertical",
48
+ "mic": "Microphone",
49
+ "paperclip": "Paperclip",
50
+ "send": "PaperPlaneTilt",
51
+ "log-out": "SignOut",
52
+ "edit": "PencilSimple",
53
+ "menu": "List",
54
+ "more-horizontal": "DotsThree",
55
+ "star": "Star",
56
+ "bookmark": "BookmarkSimple",
57
+ "download": "DownloadSimple",
58
+ "upload": "UploadSimple",
59
+ "sparkles": "Sparkle"
60
+ };
61
+ async function peer() {
62
+ return await import('@phosphor-icons/react');
63
+ }
64
+ async function loadCurated() {
65
+ return pickCurated(await peer(), CURATED);
66
+ }
67
+ async function loadExtended() {
68
+ const mod = await peer();
69
+ const extended = buildExtendedMap(mod, {});
70
+ Object.assign(extended, pickCurated(mod, CURATED));
71
+ return extended;
72
+ }
73
+
74
+ export { loadCurated, loadExtended };
75
+ //# sourceMappingURL=phosphor-HCVUMVT5.js.map
76
+ //# sourceMappingURL=phosphor-HCVUMVT5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/icon-packs/phosphor.ts"],"names":[],"mappings":";;;AAgBA,IAAM,OAAA,GAAkC;AAAA,EACtC,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,OAAA,EAAS,UAAA;AAAA,EACT,UAAA,EAAY,MAAA;AAAA,EACZ,eAAA,EAAiB,YAAA;AAAA,EACjB,OAAA,EAAS,GAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,iBAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,eAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,UAAA,EAAY,eAAA;AAAA,EACZ,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,WAAA,EAAa,eAAA;AAAA,EACb,eAAA,EAAiB,mBAAA;AAAA,EACjB,YAAA,EAAc,eAAA;AAAA,EACd,cAAA,EAAgB,iBAAA;AAAA,EAChB,aAAA,EAAe,gBAAA;AAAA,EACf,MAAA,EAAQ,aAAA;AAAA,EACR,cAAA,EAAgB,aAAA;AAAA,EAChB,aAAA,EAAe,YAAA;AAAA,EACf,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,WAAA,EAAa,aAAA;AAAA,EACb,MAAA,EAAQ,OAAA;AAAA,EACR,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,EAAgB,WAAA;AAAA,EAChB,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,uBAAA;AAAA,EACR,MAAA,EAAQ,gBAAA;AAAA,EACR,YAAA,EAAc,WAAA;AAAA,EACd,eAAA,EAAiB,iBAAA;AAAA,EACjB,KAAA,EAAO,YAAA;AAAA,EACP,WAAA,EAAa,WAAA;AAAA,EACb,MAAA,EAAQ,gBAAA;AAAA,EACR,SAAA,EAAW,SAAA;AAAA,EACX,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,iBAAA,EAAmB,WAAA;AAAA,EACnB,MAAA,EAAQ,MAAA;AAAA,EACR,UAAA,EAAY,gBAAA;AAAA,EACZ,UAAA,EAAY,gBAAA;AAAA,EACZ,QAAA,EAAU,cAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AAEA,eAAe,IAAA,GAAyC;AACtD,EAAA,OAAQ,MAAM,OAAO,uBAAuB,CAAA;AAC9C;AAEA,eAAsB,WAAA,GAAgC;AACpD,EAAA,OAAO,WAAA,CAAY,MAAM,IAAA,EAAK,EAAG,OAAO,CAAA;AAC1C;AAEA,eAAsB,YAAA,GAAiC;AACrD,EAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAK;AACvB,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,EAAK,EAAE,CAAA;AACzC,EAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,WAAA,CAAY,GAAA,EAAK,OAAO,CAAC,CAAA;AACjD,EAAA,OAAO,QAAA;AACT","file":"phosphor-HCVUMVT5.js","sourcesContent":["import type { IconMap } from './types'\nimport { buildExtendedMap, pickCurated } from './utils'\n\n/**\n * Phosphor icons.\n *\n * The pack is reached only through the dynamic import in peer() — never a\n * static named import. A static import of an optional peer makes a consumer's\n * production build fail on Vite 8 when the peer is not installed: Vite\n * substitutes an export-less stub and the bundler treats every missing name as\n * fatal (Sprint 22 bench finding 1, 13 Sep 2026; showcase/src/test/\n * vite8-optional-peers-build.test.ts guards it). The curated names are strings\n * for the same reason; icon-completeness.test.tsx proves every one resolves in\n * the installed pack. If the pack is missing, peer() rejects and loadPack in\n * icons.tsx reports which package to install.\n */\nconst CURATED: Record<string, string> = {\n \"home\": \"House\",\n \"folder\": \"FolderSimple\",\n \"chart\": \"ChartBar\",\n \"settings\": \"Gear\",\n \"chevron-right\": \"CaretRight\",\n \"close\": \"X\",\n \"plus\": \"Plus\",\n \"search\": \"MagnifyingGlass\",\n \"bell\": \"Bell\",\n \"user\": \"User\",\n \"check\": \"Check\",\n \"warning\": \"Warning\",\n \"info\": \"Info\",\n \"error\": \"WarningCircle\",\n \"clock\": \"Clock\",\n \"calendar\": \"CalendarBlank\",\n \"bold\": \"TextB\",\n \"italic\": \"TextItalic\",\n \"underline\": \"TextUnderline\",\n \"strikethrough\": \"TextStrikethrough\",\n \"align-left\": \"TextAlignLeft\",\n \"align-center\": \"TextAlignCenter\",\n \"align-right\": \"TextAlignRight\",\n \"list\": \"ListBullets\",\n \"list-ordered\": \"ListNumbers\",\n \"list-checks\": \"ListChecks\",\n \"link\": \"Link\",\n \"image\": \"Image\",\n \"table\": \"Table\",\n \"code\": \"Code\",\n \"quote\": \"Quotes\",\n \"minus\": \"Minus\",\n \"superscript\": \"TextSuperscript\",\n \"subscript\": \"TextSubscript\",\n \"highlight\": \"Highlighter\",\n \"type\": \"TextT\",\n \"chevron-up\": \"CaretUp\",\n \"chevron-down\": \"CaretDown\",\n \"trash\": \"Trash\",\n \"undo\": \"ArrowCounterClockwise\",\n \"redo\": \"ArrowClockwise\",\n \"arrow-left\": \"ArrowLeft\",\n \"grip-vertical\": \"DotsSixVertical\",\n \"mic\": \"Microphone\",\n \"paperclip\": \"Paperclip\",\n \"send\": \"PaperPlaneTilt\",\n \"log-out\": \"SignOut\",\n \"edit\": \"PencilSimple\",\n \"menu\": \"List\",\n \"more-horizontal\": \"DotsThree\",\n \"star\": \"Star\",\n \"bookmark\": \"BookmarkSimple\",\n \"download\": \"DownloadSimple\",\n \"upload\": \"UploadSimple\",\n \"sparkles\": \"Sparkle\",\n}\n\nasync function peer(): Promise<Record<string, unknown>> {\n return (await import(\"@phosphor-icons/react\")) as unknown as Record<string, unknown>\n}\n\nexport async function loadCurated(): Promise<IconMap> {\n return pickCurated(await peer(), CURATED)\n}\n\nexport async function loadExtended(): Promise<IconMap> {\n const mod = await peer()\n const extended = buildExtendedMap(mod, {})\n Object.assign(extended, pickCurated(mod, CURATED))\n return extended\n}\n"]}
package/dist/resizable.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { useBreakpoint } from './chunk-EKQHHP72.js';
2
- import { Icon } from './chunk-GX6O72IV.js';
3
- import { cn } from './chunk-TTZSZNJ6.js';
2
+ import { Icon } from './chunk-NM3BFWHH.js';
3
+ import { cn } from './chunk-4KVFH5KC.js';
4
4
  import { Group, Panel, Separator } from 'react-resizable-panels';
5
5
  import { createContext, useContext } from 'react';
6
6
  import { jsx } from 'react/jsx-runtime';
package/dist/roots.css CHANGED
@@ -36,6 +36,10 @@
36
36
  --ds-shadow-offset-y: 0px;
37
37
  --ds-shadow-blur: 8px;
38
38
  --ds-shadow-alpha: 0.1;
39
+ /* Neumorphic inner highlight: the white inset rim on the inner bottom-right
40
+ edges of every neumorphic surface body (rendered at ×0.18 in dark mode).
41
+ 0 renders nothing; presets author their own value. */
42
+ --ds-shadow-inner-highlight: 0;
39
43
 
40
44
  --ds-transition-speed: 200ms;
41
45
  --ds-transition-ease: ease-in-out;
@@ -51,6 +55,28 @@
51
55
  --ds-ambient-hover-speed: 250ms;
52
56
  --ds-ambient-hover-ease: cubic-bezier(0.33, 1, 0.68, 1);
53
57
 
58
+ /* Hover transitions for components that move on hover. Colour always eases on
59
+ the colour curve; only motion and shadow take the hover ease, which may
60
+ overshoot — a bounce on a tint reads as a flash. Tailwind v4 writes hover
61
+ scale and lift to the individual `scale` and `translate` properties, which
62
+ a transition on `transform` alone does not cover, so all three are listed. */
63
+ --ds-transition-interactive:
64
+ color var(--ds-transition-speed) var(--ds-transition-ease),
65
+ background-color var(--ds-transition-speed) var(--ds-transition-ease),
66
+ border-color var(--ds-transition-speed) var(--ds-transition-ease),
67
+ transform var(--ds-interactive-hover-speed) var(--ds-interactive-hover-ease),
68
+ translate var(--ds-interactive-hover-speed) var(--ds-interactive-hover-ease),
69
+ scale var(--ds-interactive-hover-speed) var(--ds-interactive-hover-ease),
70
+ box-shadow var(--ds-interactive-hover-speed) var(--ds-interactive-hover-ease);
71
+ --ds-transition-ambient:
72
+ color var(--ds-transition-speed) var(--ds-transition-ease),
73
+ background-color var(--ds-transition-speed) var(--ds-transition-ease),
74
+ border-color var(--ds-transition-speed) var(--ds-transition-ease),
75
+ transform var(--ds-ambient-hover-speed) var(--ds-ambient-hover-ease),
76
+ translate var(--ds-ambient-hover-speed) var(--ds-ambient-hover-ease),
77
+ scale var(--ds-ambient-hover-speed) var(--ds-ambient-hover-ease),
78
+ box-shadow var(--ds-ambient-hover-speed) var(--ds-ambient-hover-ease);
79
+
54
80
  --ds-sidebar-width: 224px;
55
81
  --ds-sidebar-compact-width: 76px;
56
82
  --ds-sidebar-collapsed-width: 56px;
@@ -70,6 +96,9 @@
70
96
  --ds-icon-size-sm: 14px;
71
97
  --ds-icon-size-md: 16px;
72
98
  --ds-gradient: none;
99
+ /* The gradient's two ends as colours (solid accent when the theme has no gradient) — for SVG gradients such as an accent icon stroke. */
100
+ --ds-gradient-start: var(--ds-accent-primary);
101
+ --ds-gradient-end: var(--ds-accent-primary);
73
102
 
74
103
  /* ── L1: Glass Roots (defaults = off for non-glass presets) ──── */
75
104
 
@@ -219,6 +248,15 @@
219
248
  --ds-z-tooltip: 500;
220
249
  --ds-z-toast: 600;
221
250
 
251
+ /* Bottom-corner toast insets. Default one spacing step; a Launcher or
252
+ * CornerPanel occupying a corner raises the matching inset (lib/corner-insets.ts)
253
+ * so the toast stack lands above it instead of over it. */
254
+ --ds-toast-inset-bottom-right: var(--ds-space-4);
255
+ --ds-toast-inset-bottom-left: var(--ds-space-4);
256
+ /* Side insets: a docked AsidePanel raises the one on its side so toasts slide past it. */
257
+ --ds-toast-inset-right: var(--ds-space-4);
258
+ --ds-toast-inset-left: var(--ds-space-4);
259
+
222
260
  /* ── L2: Derived Shadow Scale ───────────────────────────────────── */
223
261
 
224
262
  --ds-shadow-sm:
@@ -272,12 +310,23 @@
272
310
  --ds-text-muted: var(--ds-neutral-400);
273
311
  --ds-text-on-primary: oklch(1 0 0);
274
312
 
313
+ /* Tinted surfaces (subtle colourful header): the surface colour washed with the
314
+ accent — gradient or solid — at one strength, so the tint is a pure shade of
315
+ the accent over the same paper as the cards around it. --ds-text-muted-on-tint
316
+ is the lightest neutral that clears AA over that tint; the platform recomputes
317
+ it per accent against the default surface (token-algorithms mutedOnTint). */
318
+ --ds-tint-base: var(--ds-bg-surface);
319
+ --ds-tint-strength: 0.15;
320
+ --ds-accent-wash: linear-gradient(var(--ds-accent-primary), var(--ds-accent-primary));
321
+ --ds-text-muted-on-tint: var(--ds-neutral-600);
322
+
275
323
  --ds-border-default: var(--ds-neutral-300);
276
324
  --ds-border-subtle: var(--ds-neutral-200);
277
325
  --ds-border-strong: var(--ds-neutral-500);
278
326
  --ds-border-focus: var(--ds-primary-500);
279
327
  /* Soft halo paired with --ds-border-focus on every stroke-based active state */
280
328
  --ds-ring-active: var(--ds-accent-soft);
329
+ --ds-ring-error: color-mix(in srgb, var(--ds-status-error) 30%, transparent);
281
330
 
282
331
  --ds-accent-primary: var(--ds-primary-500);
283
332
  --ds-accent-primary-hover: var(--ds-primary-600);
@@ -318,6 +367,11 @@
318
367
  --ds-status-error-bg: var(--ds-destructive-100);
319
368
  --ds-status-info: var(--ds-info-500);
320
369
  --ds-status-info-bg: var(--ds-info-100);
370
+ /* Text on the filled status surfaces — computed per palette by the theme;
371
+ defaults for the scale above (the warning fill is too light for white; the 950 tone keeps its hue) */
372
+ --ds-text-on-success: oklch(1 0 0);
373
+ --ds-text-on-warning: var(--ds-warning-950);
374
+ --ds-text-on-error: oklch(1 0 0);
321
375
 
322
376
  --ds-sidebar-bg: var(--ds-neutral-100);
323
377
  --ds-sidebar-border: var(--ds-neutral-200);
@@ -328,6 +382,14 @@
328
382
  --ds-sidebar-text-muted: var(--ds-text-muted);
329
383
  --ds-sidebar-accent: var(--ds-accent-primary);
330
384
  --ds-sidebar-accent-subtle: color-mix(in srgb, var(--ds-sidebar-accent) 10%, transparent);
385
+ /* The sidebar pill's gradient fill: the page gradient in match mode; the
386
+ independent-mode writers replace it with the target palette's gradient.
387
+ Declared per mode block so nested wrappers resolve their own gradient. */
388
+ --ds-sidebar-gradient: var(--ds-gradient);
389
+ /* Text on the sidebar / header accent — computed from the target palette in
390
+ independent modes; in match mode they follow the page */
391
+ --ds-sidebar-text-on-accent: var(--ds-text-on-primary);
392
+ --ds-header-text-on-accent: var(--ds-text-on-primary);
331
393
 
332
394
  /* Tab strip — presets can override for stronger contrast (e.g. Modern Dark) */
333
395
  --ds-tab-hover-bg: var(--ds-bg-muted);
@@ -373,6 +435,7 @@
373
435
  --ds-nav-v-track-border: var(--ds-border-width);
374
436
  --ds-nav-v-track-padding: var(--ds-space-1);
375
437
  --ds-nav-v-badge-bg: var(--ds-accent-primary);
438
+ --ds-nav-v-active-muted: var(--ds-text-secondary);
376
439
 
377
440
  --ds-tree-active-bg: var(--ds-tab-active-bg);
378
441
  --ds-tree-active-text: var(--ds-accent-primary);
@@ -383,6 +446,7 @@
383
446
  --ds-sidebar-active-text: var(--ds-sidebar-accent);
384
447
  --ds-sidebar-active-accent: var(--ds-sidebar-accent);
385
448
  --ds-sidebar-active-rail: var(--ds-border-width-thick);
449
+ --ds-sidebar-active-image: none;
386
450
  }
387
451
 
388
452
  /* ── Dark Mode Semantic Overrides ─────────────────────────────────── */
@@ -403,7 +467,7 @@
403
467
  --ds-text-primary: var(--ds-neutral-50);
404
468
  --ds-text-secondary: var(--ds-neutral-300);
405
469
  --ds-text-muted: var(--ds-neutral-400);
406
- --ds-text-on-primary: oklch(1 0 0);
470
+ --ds-text-muted-on-tint: var(--ds-neutral-400);
407
471
  color: var(--ds-text-primary);
408
472
 
409
473
  /* Borders — bumped one step lighter for visibility against 800/900 surfaces */
@@ -422,6 +486,10 @@
422
486
  --ds-status-error-bg: var(--ds-destructive-950);
423
487
  --ds-status-info: var(--ds-info-400);
424
488
  --ds-status-info-bg: var(--ds-info-950);
489
+ /* The 400 fills above are too light for white at every hue; the 950 tones keep each hue */
490
+ --ds-text-on-success: var(--ds-success-950);
491
+ --ds-text-on-warning: var(--ds-warning-950);
492
+ --ds-text-on-error: var(--ds-destructive-950);
425
493
 
426
494
  /* Sidebar — sits at canvas level, border provides separation */
427
495
  --ds-sidebar-bg: var(--ds-neutral-800);
@@ -432,6 +500,7 @@
432
500
  --ds-sidebar-text-secondary: var(--ds-text-secondary);
433
501
  --ds-sidebar-text-muted: var(--ds-text-muted);
434
502
  --ds-sidebar-accent: var(--ds-accent-primary);
503
+ --ds-sidebar-gradient: var(--ds-gradient);
435
504
 
436
505
  --ds-tab-hover-bg: var(--ds-bg-muted);
437
506
  --ds-tab-active-bg: var(--ds-bg-surface);
@@ -491,9 +560,11 @@ body {
491
560
  }
492
561
 
493
562
  [data-mode="light"] {
563
+ --ds-sidebar-gradient: var(--ds-gradient);
494
564
  --ds-text-primary: var(--ds-neutral-950);
495
565
  --ds-text-secondary: var(--ds-neutral-600);
496
566
  --ds-text-muted: var(--ds-neutral-400);
567
+ --ds-text-muted-on-tint: var(--ds-neutral-600);
497
568
  --ds-bg-canvas: var(--ds-neutral-50);
498
569
  --ds-bg-surface: oklch(1 0 0);
499
570
  --ds-bg-muted: var(--ds-neutral-100);
@@ -568,33 +639,41 @@ body {
568
639
 
569
640
  --ds-shadow-sm:
570
641
  calc(var(--ds-shadow-offset-x) * 0.33) calc(var(--ds-shadow-offset-y) * 0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
571
- calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
642
+ calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
643
+ inset calc(var(--ds-shadow-offset-x) * -0.2) calc(var(--ds-shadow-offset-y) * -0.2) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
572
644
 
573
645
  --ds-shadow-md:
574
646
  var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) var(--ds-shadow-blur) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
575
- calc(var(--ds-shadow-offset-x) * -1) calc(var(--ds-shadow-offset-y) * -1) var(--ds-shadow-blur) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
647
+ calc(var(--ds-shadow-offset-x) * -1) calc(var(--ds-shadow-offset-y) * -1) var(--ds-shadow-blur) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
648
+ inset calc(var(--ds-shadow-offset-x) * -0.25) calc(var(--ds-shadow-offset-y) * -0.25) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
576
649
 
577
650
  --ds-shadow-lg:
578
651
  calc(var(--ds-shadow-offset-x) * 1.5) calc(var(--ds-shadow-offset-y) * 1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
579
- calc(var(--ds-shadow-offset-x) * -1.5) calc(var(--ds-shadow-offset-y) * -1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
652
+ calc(var(--ds-shadow-offset-x) * -1.5) calc(var(--ds-shadow-offset-y) * -1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
653
+ inset calc(var(--ds-shadow-offset-x) * -0.4) calc(var(--ds-shadow-offset-y) * -0.4) calc(var(--ds-shadow-blur) * 0.4) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
580
654
 
581
655
  --ds-shadow-xl:
582
656
  calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
583
- calc(var(--ds-shadow-offset-x) * -2) calc(var(--ds-shadow-offset-y) * -2) calc(var(--ds-shadow-blur) * 2) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
657
+ calc(var(--ds-shadow-offset-x) * -2) calc(var(--ds-shadow-offset-y) * -2) calc(var(--ds-shadow-blur) * 2) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
658
+ inset calc(var(--ds-shadow-offset-x) * -0.5) calc(var(--ds-shadow-offset-y) * -0.5) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
584
659
 
585
660
  --ds-shadow-card:
586
661
  calc(var(--ds-shadow-offset-x) * 1.2) calc(var(--ds-shadow-offset-y) * 1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
587
- calc(var(--ds-shadow-offset-x) * -1.2) calc(var(--ds-shadow-offset-y) * -1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
662
+ calc(var(--ds-shadow-offset-x) * -1.2) calc(var(--ds-shadow-offset-y) * -1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
663
+ inset calc(var(--ds-shadow-offset-x) * -0.375) calc(var(--ds-shadow-offset-y) * -0.375) calc(var(--ds-shadow-blur) * 0.375) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
588
664
 
589
665
  --ds-shadow-button:
590
666
  calc(var(--ds-shadow-offset-x) * 0.33) calc(var(--ds-shadow-offset-y) * 0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
591
- calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1));
667
+ calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / clamp(0, calc(var(--ds-shadow-alpha) * var(--ds-nm-light-mult)), 1)),
668
+ inset calc(var(--ds-shadow-offset-x) * -0.16) calc(var(--ds-shadow-offset-y) * -0.16) calc(var(--ds-shadow-blur) * 0.16) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
592
669
 
593
670
  --ds-shadow-dropdown:
594
- var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha));
671
+ var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
672
+ inset calc(var(--ds-shadow-offset-x) * -0.25) calc(var(--ds-shadow-offset-y) * -0.25) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
595
673
 
596
674
  --ds-shadow-modal:
597
- calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha));
675
+ calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2.5) 0 oklch(var(--ds-nm-dark-l) var(--ds-nm-dark-c) var(--ds-nm-dark-h) / var(--ds-shadow-alpha)),
676
+ inset calc(var(--ds-shadow-offset-x) * -0.5) calc(var(--ds-shadow-offset-y) * -0.5) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / var(--ds-shadow-inner-highlight));
598
677
  }
599
678
 
600
679
  [data-shadow="neumorphic"][data-mode="dark"] {
@@ -604,33 +683,41 @@ body {
604
683
 
605
684
  --ds-shadow-sm:
606
685
  calc(var(--ds-shadow-offset-x) * 0.33) calc(var(--ds-shadow-offset-y) * 0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
607
- calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
686
+ calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
687
+ inset calc(var(--ds-shadow-offset-x) * -0.2) calc(var(--ds-shadow-offset-y) * -0.2) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
608
688
 
609
689
  --ds-shadow-md:
610
690
  var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) var(--ds-shadow-blur) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
611
- calc(var(--ds-shadow-offset-x) * -1) calc(var(--ds-shadow-offset-y) * -1) var(--ds-shadow-blur) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
691
+ calc(var(--ds-shadow-offset-x) * -1) calc(var(--ds-shadow-offset-y) * -1) var(--ds-shadow-blur) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
692
+ inset calc(var(--ds-shadow-offset-x) * -0.25) calc(var(--ds-shadow-offset-y) * -0.25) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
612
693
 
613
694
  --ds-shadow-lg:
614
695
  calc(var(--ds-shadow-offset-x) * 1.5) calc(var(--ds-shadow-offset-y) * 1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
615
- calc(var(--ds-shadow-offset-x) * -1.5) calc(var(--ds-shadow-offset-y) * -1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
696
+ calc(var(--ds-shadow-offset-x) * -1.5) calc(var(--ds-shadow-offset-y) * -1.5) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
697
+ inset calc(var(--ds-shadow-offset-x) * -0.4) calc(var(--ds-shadow-offset-y) * -0.4) calc(var(--ds-shadow-blur) * 0.4) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
616
698
 
617
699
  --ds-shadow-xl:
618
700
  calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
619
- calc(var(--ds-shadow-offset-x) * -2) calc(var(--ds-shadow-offset-y) * -2) calc(var(--ds-shadow-blur) * 2) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
701
+ calc(var(--ds-shadow-offset-x) * -2) calc(var(--ds-shadow-offset-y) * -2) calc(var(--ds-shadow-blur) * 2) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
702
+ inset calc(var(--ds-shadow-offset-x) * -0.5) calc(var(--ds-shadow-offset-y) * -0.5) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
620
703
 
621
704
  --ds-shadow-card:
622
705
  calc(var(--ds-shadow-offset-x) * 1.2) calc(var(--ds-shadow-offset-y) * 1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
623
- calc(var(--ds-shadow-offset-x) * -1.2) calc(var(--ds-shadow-offset-y) * -1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
706
+ calc(var(--ds-shadow-offset-x) * -1.2) calc(var(--ds-shadow-offset-y) * -1.2) calc(var(--ds-shadow-blur) * 1.2) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
707
+ inset calc(var(--ds-shadow-offset-x) * -0.375) calc(var(--ds-shadow-offset-y) * -0.375) calc(var(--ds-shadow-blur) * 0.375) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
624
708
 
625
709
  --ds-shadow-button:
626
710
  calc(var(--ds-shadow-offset-x) * 0.33) calc(var(--ds-shadow-offset-y) * 0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
627
- calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12));
711
+ calc(var(--ds-shadow-offset-x) * -0.33) calc(var(--ds-shadow-offset-y) * -0.33) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-alpha) * 0.12)),
712
+ inset calc(var(--ds-shadow-offset-x) * -0.16) calc(var(--ds-shadow-offset-y) * -0.16) calc(var(--ds-shadow-blur) * 0.16) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
628
713
 
629
714
  --ds-shadow-dropdown:
630
- var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2));
715
+ var(--ds-shadow-offset-x) var(--ds-shadow-offset-y) calc(var(--ds-shadow-blur) * 1.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
716
+ inset calc(var(--ds-shadow-offset-x) * -0.25) calc(var(--ds-shadow-offset-y) * -0.25) calc(var(--ds-shadow-blur) * 0.25) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
631
717
 
632
718
  --ds-shadow-modal:
633
- calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2));
719
+ calc(var(--ds-shadow-offset-x) * 2) calc(var(--ds-shadow-offset-y) * 2) calc(var(--ds-shadow-blur) * 2.5) 0 oklch(0 0 0 / calc(var(--ds-shadow-alpha) * 2)),
720
+ inset calc(var(--ds-shadow-offset-x) * -0.5) calc(var(--ds-shadow-offset-y) * -0.5) calc(var(--ds-shadow-blur) * 0.5) 0 oklch(1 0 0 / calc(var(--ds-shadow-inner-highlight) * 0.18));
634
721
  }
635
722
 
636
723
  /* ── Shadow Mode: Glow ──────────────────────────────────────────