sv5ui-plus 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/adapters/notify.d.ts +29 -0
  4. package/dist/adapters/notify.js +88 -0
  5. package/dist/compat.d.ts +6 -0
  6. package/dist/compat.js +6 -0
  7. package/dist/components/BentoGrid/BentoCard.svelte +45 -0
  8. package/dist/components/BentoGrid/BentoCard.svelte.d.ts +4 -0
  9. package/dist/components/BentoGrid/BentoGrid.svelte +9 -0
  10. package/dist/components/BentoGrid/BentoGrid.svelte.d.ts +4 -0
  11. package/dist/components/BentoGrid/bento-grid.types.d.ts +47 -0
  12. package/dist/components/BentoGrid/bento-grid.types.js +1 -0
  13. package/dist/components/BentoGrid/bento-grid.variants.d.ts +30 -0
  14. package/dist/components/BentoGrid/bento-grid.variants.js +16 -0
  15. package/dist/components/BentoGrid/index.d.ts +5 -0
  16. package/dist/components/BentoGrid/index.js +5 -0
  17. package/dist/components/Chart/Chart.svelte +62 -0
  18. package/dist/components/Chart/Chart.svelte.d.ts +4 -0
  19. package/dist/components/Chart/chart.types.d.ts +16 -0
  20. package/dist/components/Chart/chart.types.js +1 -0
  21. package/dist/components/Chart/index.d.ts +2 -0
  22. package/dist/components/Chart/index.js +2 -0
  23. package/dist/components/Chat/ChatBubble.svelte +30 -0
  24. package/dist/components/Chat/ChatBubble.svelte.d.ts +4 -0
  25. package/dist/components/Chat/ChatInput.svelte +50 -0
  26. package/dist/components/Chat/ChatInput.svelte.d.ts +4 -0
  27. package/dist/components/Chat/ChatMessage.svelte +15 -0
  28. package/dist/components/Chat/ChatMessage.svelte.d.ts +4 -0
  29. package/dist/components/Chat/chat.types.d.ts +63 -0
  30. package/dist/components/Chat/chat.types.js +1 -0
  31. package/dist/components/Chat/chat.variants.d.ts +117 -0
  32. package/dist/components/Chat/chat.variants.js +47 -0
  33. package/dist/components/Chat/index.d.ts +6 -0
  34. package/dist/components/Chat/index.js +6 -0
  35. package/dist/components/CodeBlock/CodeBlock.svelte +66 -0
  36. package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +5 -0
  37. package/dist/components/CodeBlock/code-block.types.d.ts +15 -0
  38. package/dist/components/CodeBlock/code-block.types.js +1 -0
  39. package/dist/components/CodeBlock/code-block.variants.d.ts +288 -0
  40. package/dist/components/CodeBlock/code-block.variants.js +69 -0
  41. package/dist/components/CodeBlock/index.d.ts +2 -0
  42. package/dist/components/CodeBlock/index.js +1 -0
  43. package/dist/components/ColorPicker/ColorPicker.svelte +109 -0
  44. package/dist/components/ColorPicker/ColorPicker.svelte.d.ts +4 -0
  45. package/dist/components/ColorPicker/color-picker.types.d.ts +26 -0
  46. package/dist/components/ColorPicker/color-picker.types.js +1 -0
  47. package/dist/components/ColorPicker/color-picker.variants.d.ts +69 -0
  48. package/dist/components/ColorPicker/color-picker.variants.js +13 -0
  49. package/dist/components/ColorPicker/index.d.ts +4 -0
  50. package/dist/components/ColorPicker/index.js +4 -0
  51. package/dist/components/ConfirmDialog/ConfirmDialog.svelte +175 -0
  52. package/dist/components/ConfirmDialog/ConfirmDialog.svelte.d.ts +10 -0
  53. package/dist/components/ConfirmDialog/confirm.d.ts +9 -0
  54. package/dist/components/ConfirmDialog/confirm.js +24 -0
  55. package/dist/components/ConfirmDialog/confirm.types.d.ts +21 -0
  56. package/dist/components/ConfirmDialog/confirm.types.js +1 -0
  57. package/dist/components/ConfirmDialog/index.d.ts +4 -0
  58. package/dist/components/ConfirmDialog/index.js +2 -0
  59. package/dist/components/Fonts/Fonts.svelte +32 -0
  60. package/dist/components/Fonts/Fonts.svelte.d.ts +5 -0
  61. package/dist/components/Fonts/fonts.d.ts +12 -0
  62. package/dist/components/Fonts/fonts.js +126 -0
  63. package/dist/components/Fonts/fonts.types.d.ts +40 -0
  64. package/dist/components/Fonts/fonts.types.js +1 -0
  65. package/dist/components/Fonts/index.d.ts +3 -0
  66. package/dist/components/Fonts/index.js +2 -0
  67. package/dist/components/List/List.svelte +14 -0
  68. package/dist/components/List/List.svelte.d.ts +4 -0
  69. package/dist/components/List/ListItem.svelte +64 -0
  70. package/dist/components/List/ListItem.svelte.d.ts +4 -0
  71. package/dist/components/List/index.d.ts +5 -0
  72. package/dist/components/List/index.js +5 -0
  73. package/dist/components/List/list.types.d.ts +62 -0
  74. package/dist/components/List/list.types.js +1 -0
  75. package/dist/components/List/list.variants.d.ts +99 -0
  76. package/dist/components/List/list.variants.js +42 -0
  77. package/dist/components/LocaleButton/LocaleButton.svelte +181 -0
  78. package/dist/components/LocaleButton/LocaleButton.svelte.d.ts +5 -0
  79. package/dist/components/LocaleButton/index.d.ts +2 -0
  80. package/dist/components/LocaleButton/index.js +1 -0
  81. package/dist/components/LocaleButton/locale-button.types.d.ts +208 -0
  82. package/dist/components/LocaleButton/locale-button.types.js +1 -0
  83. package/dist/components/LocaleButton/locale-button.variants.d.ts +245 -0
  84. package/dist/components/LocaleButton/locale-button.variants.js +98 -0
  85. package/dist/components/Marquee/Marquee.svelte +50 -0
  86. package/dist/components/Marquee/Marquee.svelte.d.ts +4 -0
  87. package/dist/components/Marquee/index.d.ts +4 -0
  88. package/dist/components/Marquee/index.js +4 -0
  89. package/dist/components/Marquee/marquee.types.d.ts +38 -0
  90. package/dist/components/Marquee/marquee.types.js +1 -0
  91. package/dist/components/Marquee/marquee.variants.d.ts +78 -0
  92. package/dist/components/Marquee/marquee.variants.js +28 -0
  93. package/dist/components/NavigationMenu/NavigationMenu.svelte +623 -0
  94. package/dist/components/NavigationMenu/NavigationMenu.svelte.d.ts +5 -0
  95. package/dist/components/NavigationMenu/index.d.ts +2 -0
  96. package/dist/components/NavigationMenu/index.js +1 -0
  97. package/dist/components/NavigationMenu/navigation-menu.types.d.ts +245 -0
  98. package/dist/components/NavigationMenu/navigation-menu.types.js +1 -0
  99. package/dist/components/NavigationMenu/navigation-menu.variants.d.ts +543 -0
  100. package/dist/components/NavigationMenu/navigation-menu.variants.js +287 -0
  101. package/dist/components/NumberTicker/NumberTicker.svelte +59 -0
  102. package/dist/components/NumberTicker/NumberTicker.svelte.d.ts +4 -0
  103. package/dist/components/NumberTicker/index.d.ts +4 -0
  104. package/dist/components/NumberTicker/index.js +4 -0
  105. package/dist/components/NumberTicker/number-ticker.types.d.ts +26 -0
  106. package/dist/components/NumberTicker/number-ticker.types.js +1 -0
  107. package/dist/components/NumberTicker/number-ticker.variants.d.ts +27 -0
  108. package/dist/components/NumberTicker/number-ticker.variants.js +6 -0
  109. package/dist/components/PasswordInput/PasswordInput.svelte +182 -0
  110. package/dist/components/PasswordInput/PasswordInput.svelte.d.ts +5 -0
  111. package/dist/components/PasswordInput/index.d.ts +2 -0
  112. package/dist/components/PasswordInput/index.js +1 -0
  113. package/dist/components/PasswordInput/password-input.types.d.ts +111 -0
  114. package/dist/components/PasswordInput/password-input.types.js +1 -0
  115. package/dist/components/PasswordInput/password-input.variants.d.ts +273 -0
  116. package/dist/components/PasswordInput/password-input.variants.js +105 -0
  117. package/dist/components/Prose/Prose.svelte +13 -0
  118. package/dist/components/Prose/Prose.svelte.d.ts +4 -0
  119. package/dist/components/Prose/index.d.ts +4 -0
  120. package/dist/components/Prose/index.js +4 -0
  121. package/dist/components/Prose/prose.types.d.ts +22 -0
  122. package/dist/components/Prose/prose.types.js +1 -0
  123. package/dist/components/Prose/prose.variants.d.ts +45 -0
  124. package/dist/components/Prose/prose.variants.js +45 -0
  125. package/dist/components/Resizable/Resizable.svelte +9 -0
  126. package/dist/components/Resizable/Resizable.svelte.d.ts +4 -0
  127. package/dist/components/Resizable/index.d.ts +4 -0
  128. package/dist/components/Resizable/index.js +4 -0
  129. package/dist/components/Resizable/resizable.types.d.ts +18 -0
  130. package/dist/components/Resizable/resizable.types.js +1 -0
  131. package/dist/components/Resizable/resizable.variants.d.ts +48 -0
  132. package/dist/components/Resizable/resizable.variants.js +17 -0
  133. package/dist/components/ScrollArea/ScrollArea.svelte +54 -0
  134. package/dist/components/ScrollArea/ScrollArea.svelte.d.ts +4 -0
  135. package/dist/components/ScrollArea/index.d.ts +4 -0
  136. package/dist/components/ScrollArea/index.js +4 -0
  137. package/dist/components/ScrollArea/scroll-area.types.d.ts +27 -0
  138. package/dist/components/ScrollArea/scroll-area.types.js +1 -0
  139. package/dist/components/ScrollArea/scroll-area.variants.d.ts +45 -0
  140. package/dist/components/ScrollArea/scroll-area.variants.js +27 -0
  141. package/dist/components/Search/Search.svelte +94 -0
  142. package/dist/components/Search/Search.svelte.d.ts +4 -0
  143. package/dist/components/Search/index.d.ts +2 -0
  144. package/dist/components/Search/index.js +1 -0
  145. package/dist/components/Search/search.types.d.ts +40 -0
  146. package/dist/components/Search/search.types.js +1 -0
  147. package/dist/components/SortableGroup/SortableGroup.svelte +53 -0
  148. package/dist/components/SortableGroup/SortableGroup.svelte.d.ts +13 -0
  149. package/dist/components/SortableGroup/index.d.ts +1 -0
  150. package/dist/components/SortableGroup/index.js +1 -0
  151. package/dist/components/SortableList/SortableList.svelte +81 -0
  152. package/dist/components/SortableList/SortableList.svelte.d.ts +26 -0
  153. package/dist/components/SortableList/index.d.ts +2 -0
  154. package/dist/components/SortableList/index.js +1 -0
  155. package/dist/components/SortableList/sortable-list.types.d.ts +21 -0
  156. package/dist/components/SortableList/sortable-list.types.js +1 -0
  157. package/dist/components/Spotlight/Spotlight.svelte +31 -0
  158. package/dist/components/Spotlight/Spotlight.svelte.d.ts +4 -0
  159. package/dist/components/Spotlight/index.d.ts +4 -0
  160. package/dist/components/Spotlight/index.js +4 -0
  161. package/dist/components/Spotlight/spotlight.types.d.ts +22 -0
  162. package/dist/components/Spotlight/spotlight.types.js +1 -0
  163. package/dist/components/Spotlight/spotlight.variants.d.ts +39 -0
  164. package/dist/components/Spotlight/spotlight.variants.js +8 -0
  165. package/dist/components/TableBulkActionBar/TableBulkActionBar.svelte +38 -0
  166. package/dist/components/TableBulkActionBar/TableBulkActionBar.svelte.d.ts +5 -0
  167. package/dist/components/TableBulkActionBar/index.d.ts +2 -0
  168. package/dist/components/TableBulkActionBar/index.js +1 -0
  169. package/dist/components/TableBulkActionBar/table-bulk-action-bar.types.d.ts +31 -0
  170. package/dist/components/TableBulkActionBar/table-bulk-action-bar.types.js +1 -0
  171. package/dist/components/TableBulkActionBar/table-bulk-action-bar.variants.d.ts +52 -0
  172. package/dist/components/TableBulkActionBar/table-bulk-action-bar.variants.js +10 -0
  173. package/dist/components/TreeView/TreeView.svelte +95 -0
  174. package/dist/components/TreeView/TreeView.svelte.d.ts +4 -0
  175. package/dist/components/TreeView/index.d.ts +4 -0
  176. package/dist/components/TreeView/index.js +3 -0
  177. package/dist/components/TreeView/tree-view.types.d.ts +68 -0
  178. package/dist/components/TreeView/tree-view.types.js +1 -0
  179. package/dist/components/TreeView/tree-view.variants.d.ts +69 -0
  180. package/dist/components/TreeView/tree-view.variants.js +30 -0
  181. package/dist/config.d.ts +91 -0
  182. package/dist/config.js +124 -0
  183. package/dist/editor.d.ts +2 -0
  184. package/dist/editor.js +2 -0
  185. package/dist/form/resolve-form-field-name.d.ts +5 -0
  186. package/dist/form/resolve-form-field-name.js +11 -0
  187. package/dist/hooks/internal/DragDropProviderScope.svelte +29 -0
  188. package/dist/hooks/internal/DragDropProviderScope.svelte.d.ts +7 -0
  189. package/dist/hooks/internal/SortableProvider.svelte +68 -0
  190. package/dist/hooks/internal/SortableProvider.svelte.d.ts +30 -0
  191. package/dist/hooks/internal/drag-drop-context.d.ts +12 -0
  192. package/dist/hooks/internal/drag-drop-context.js +1 -0
  193. package/dist/hooks/internal/sortable-context.d.ts +26 -0
  194. package/dist/hooks/internal/sortable-context.js +2 -0
  195. package/dist/hooks/useDragDrop/index.d.ts +1 -0
  196. package/dist/hooks/useDragDrop/index.js +1 -0
  197. package/dist/hooks/useDragDrop/useDragDrop.svelte.d.ts +40 -0
  198. package/dist/hooks/useDragDrop/useDragDrop.svelte.js +128 -0
  199. package/dist/hooks/useSortable/index.d.ts +2 -0
  200. package/dist/hooks/useSortable/index.js +2 -0
  201. package/dist/hooks/useSortable/sortable-utils.d.ts +1 -0
  202. package/dist/hooks/useSortable/sortable-utils.js +13 -0
  203. package/dist/hooks/useSortable/useSortable.svelte.d.ts +60 -0
  204. package/dist/hooks/useSortable/useSortable.svelte.js +151 -0
  205. package/dist/hooks/utils.d.ts +1 -0
  206. package/dist/hooks/utils.js +3 -0
  207. package/dist/index.d.ts +27 -0
  208. package/dist/index.js +30 -0
  209. package/dist/mcp/cursor.mcp.json +12 -0
  210. package/dist/mcp/install-template.mjs +55 -0
  211. package/dist/mcp/server.mjs +338 -0
  212. package/dist/mcp/sv5ui-plus-docs.data.json +17 -0
  213. package/dist/theme.css +64 -0
  214. package/package.json +176 -0
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 1,
3
+ "packageName": "sv5ui-plus",
4
+ "packageVersion": "4.0.0",
5
+ "generatedAt": "2026-08-09T08:37:48.437Z",
6
+ "slugs": {
7
+ "components": [],
8
+ "hooks": [
9
+ "use-drag-drop",
10
+ "use-sortable"
11
+ ]
12
+ },
13
+ "pages": {
14
+ "use-drag-drop": "<script lang=\"ts\">\n import { Badge, Button, Card, Link, useDragDrop } from '$lib/compat.js'\n\n type Task = { id: string; label: string; lane: 'todo' | 'done' }\n\n let board = $state<{ todo: Task[]; done: Task[] }>({\n todo: [\n { id: 't1', label: 'Design tokens', lane: 'todo' },\n { id: 't2', label: 'Sortable hook', lane: 'todo' },\n { id: 't3', label: 'Docs page', lane: 'todo' }\n ],\n done: [{ id: 'd1', label: 'Kickoff meeting', lane: 'done' }]\n })\n\n let dropDisabled = $state(false)\n let lastDrop = $state('')\n\n const dragDrop = useDragDrop()\n\n function moveTask(task: Task, target: 'todo' | 'done') {\n const source: 'todo' | 'done' = target === 'todo' ? 'done' : 'todo'\n const item = board[source].find((entry) => entry.id === task.id)\n if (!item) return\n\n board = {\n ...board,\n [source]: board[source].filter((entry) => entry.id !== task.id),\n [target]: [...board[target], { ...item, lane: target }]\n }\n lastDrop = `${task.label} → ${target}`\n }\n\n const draggableOptionsReference = [\n { name: 'id', type: 'string', description: 'Unique id for the draggable element.' },\n { name: 'container', type: 'string', description: 'Source zone id — must match the droppable id of the column this item is in.' },\n { name: 'data', type: 'unknown', description: 'Payload passed to droppable onDrop.' },\n { name: 'disabled', type: 'boolean | (() => boolean)', description: 'Prevent dragging.' },\n { name: 'handle', type: 'string', description: 'Optional CSS selector for a drag handle.' }\n ] as const\n\n const droppableOptionsReference = [\n { name: 'id', type: 'string', description: 'Zone id — drops from the same id are ignored.' },\n { name: 'onDrop', type: '(payload) => void', description: 'Called with { id, data? } from the draggable.' },\n { name: 'accept', type: '(payload) => boolean', description: 'Optional filter — return false to reject the drop.' },\n { name: 'disabled', type: 'boolean | (() => boolean)', description: 'Prevent dropping on this zone.' }\n ] as const\n\n const returnReference = [\n { name: 'Provider', type: 'Component', description: 'Required wrapper — mounts @dnd-kit/svelte DragDropProvider.' },\n { name: 'draggable', type: 'Action<HTMLElement, UseDraggableOptions>', description: 'Attach to drag sources.' },\n { name: 'droppable', type: 'Action<HTMLElement, UseDroppableOptions>', description: 'Attach to drop targets.' },\n { name: 'draggingId', type: 'string | null', description: 'Id of the item currently being dragged.' }\n ] as const\n</script>\n\n<div class=\"space-y-8\">\n <div class=\"space-y-2\">\n <h1 class=\"text-2xl font-bold\">useDragDrop</h1>\n <p class=\"text-on-surface-variant\">\n Cross-container drag and drop powered by\n <a href=\"https://clauderic-dnd-kit.mintlify.app/frameworks/svelte\" class=\"text-primary underline\" target=\"_blank\" rel=\"noreferrer\">@dnd-kit/svelte</a>.\n Wrap markup in\n <code class=\"rounded bg-surface-container-high px-1\">dragDrop.Provider</code>,\n use\n <code class=\"rounded bg-surface-container-high px-1\">use:dragDrop.draggable</code>\n on sources and\n <code class=\"rounded bg-surface-container-high px-1\">use:dragDrop.droppable</code>\n on targets. Browse all demos in the\n <Link href=\"/docs/drag-and-drop\" class=\"text-primary underline\">Drag & Drop playground</Link>.\n For reordering within one list, use\n <Link href=\"/docs/hooks/use-sortable\" class=\"text-primary underline\">useSortable</Link>.\n </p>\n </div>\n\n <section class=\"space-y-3\">\n <h2 id=\"When-to-use-what\" class=\"text-lg font-semibold\">\n <a href=\"#When-to-use-what\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n When to use what\n </a>\n </h2>\n <Card class=\"border border-info/20 bg-info/10 p-4 text-sm text-on-surface-variant\">\n <p>\n <strong class=\"text-on-surface\">useDragDrop</strong> — kanban, trays, moving cards between columns.\n <strong class=\"text-on-surface\">useSortable</strong> —\n <Link href=\"/docs/hooks/use-sortable\" class=\"text-primary underline\">reorder inside one list</Link>.\n <strong class=\"text-on-surface\">FileUpload</strong> —\n <Link href=\"/docs/components/file-upload\" class=\"text-primary underline\">OS file drops</Link>.\n <strong class=\"text-on-surface\">Editor</strong> —\n <Link href=\"/docs/components/editor#Drag-handle-Phase-3\" class=\"text-primary underline\">block reorder in rich text</Link>.\n </p>\n </Card>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"Kanban-board\" class=\"text-lg font-semibold\">\n <a href=\"#Kanban-board\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n Kanban board\n </a>\n </h2>\n <dragDrop.Provider>\n <div class=\"grid gap-4 md:grid-cols-2\">\n <div\n class=\"space-y-3 rounded-lg border border-outline-variant/70 bg-surface-container-low p-4\"\n use:dragDrop.droppable={{\n id: 'todo',\n disabled: () => dropDisabled,\n onDrop: ({ data }) => moveTask(data as Task, 'todo')\n }}\n >\n <h3 class=\"font-semibold\">To do</h3>\n <div class=\"space-y-2\">\n {#each board.todo as task (task.id)}\n <div\n use:dragDrop.draggable={{ id: task.id, container: 'todo', data: task }}\n class={[\n 'cursor-grab rounded-lg border border-outline-variant/60 bg-surface px-3 py-2 active:cursor-grabbing',\n dragDrop.draggingId === task.id && 'opacity-80'\n ]}\n >\n {task.label}\n </div>\n {/each}\n </div>\n </div>\n\n <div\n class=\"space-y-3 rounded-lg border border-outline-variant/70 bg-surface-container-low p-4\"\n use:dragDrop.droppable={{\n id: 'done',\n disabled: () => dropDisabled,\n accept: (payload) => String((payload.data as Task)?.label ?? '').length > 0,\n onDrop: ({ data }) => moveTask(data as Task, 'done')\n }}\n >\n <h3 class=\"font-semibold\">Done</h3>\n <p class=\"text-xs text-on-surface-variant\">accept — rejects empty labels</p>\n <div class=\"space-y-2\">\n {#each board.done as task (task.id)}\n <div\n use:dragDrop.draggable={{ id: task.id, container: 'done', data: task }}\n class={[\n 'cursor-grab rounded-lg border border-success/30 bg-success/10 px-3 py-2 active:cursor-grabbing',\n dragDrop.draggingId === task.id && 'opacity-80'\n ]}\n >\n {task.label}\n </div>\n {/each}\n </div>\n </div>\n </div>\n </dragDrop.Provider>\n\n <div class=\"flex flex-wrap items-center gap-2\">\n {#if dragDrop.draggingId}\n <Badge label=\"Dragging: {dragDrop.draggingId}\" color=\"primary\" variant=\"soft\" />\n {/if}\n {#if lastDrop}\n <Badge label=\"Last drop: {lastDrop}\" color=\"success\" variant=\"soft\" />\n {/if}\n <Button\n variant={dropDisabled ? 'solid' : 'outline'}\n size=\"sm\"\n label={dropDisabled ? 'Drops disabled' : 'Disable drops'}\n onclick={() => (dropDisabled = !dropDisabled)}\n />\n </div>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"API-Reference\" class=\"text-lg font-semibold\">\n <a href=\"#API-Reference\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n API Reference\n </a>\n </h2>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <Card class=\"border border-outline-variant/70\">\n <div class=\"space-y-4\">\n <h3 class=\"text-base font-semibold\">draggable options</h3>\n <div class=\"space-y-3\">\n {#each draggableOptionsReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-primary\">{item.name}</p>\n <p class=\"mt-1 text-sm font-medium\">{item.type}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n <Card class=\"border border-outline-variant/70\">\n <div class=\"space-y-4\">\n <h3 class=\"text-base font-semibold\">droppable options</h3>\n <div class=\"space-y-3\">\n {#each droppableOptionsReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-primary\">{item.name}</p>\n <p class=\"mt-1 text-sm font-medium\">{item.type}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n </div>\n <Card class=\"border border-outline-variant/70\">\n <div class=\"space-y-3\">\n <h3 class=\"text-base font-semibold\">Return value</h3>\n {#each returnReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-primary\">{item.name}</p>\n <p class=\"mt-1 text-sm font-medium\">{item.type}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n </Card>\n </section>\n</div>\n",
15
+ "use-sortable": "<script lang=\"ts\">\n import { Badge, Button, Card, Link, SortableList, useSortable } from '$lib/compat.js'\n\n type Task = { id: string; title: string; color: 'primary' | 'success' | 'warning' }\n\n let tasks = $state<Task[]>([\n { id: 'design', title: 'Design system tokens', color: 'primary' },\n { id: 'build', title: 'Build sortable hook', color: 'success' },\n { id: 'docs', title: 'Write documentation', color: 'warning' },\n { id: 'ship', title: 'Ship release', color: 'primary' }\n ])\n\n let horizontalItems = $state([\n { id: 'a', label: 'Alpha' },\n { id: 'b', label: 'Beta' },\n { id: 'c', label: 'Gamma' }\n ])\n\n let sortDisabled = $state(false)\n\n const sortable = useSortable({\n getItems: () => tasks,\n getId: (task) => task.id,\n handle: '[data-sortable-handle]',\n disabled: () => sortDisabled,\n onReorder: (next) => {\n tasks = next\n }\n })\n\n const horizontalSortable = useSortable({\n getItems: () => horizontalItems,\n getId: (item) => item.id,\n axis: 'horizontal',\n handle: '[data-sortable-handle]',\n onReorder: (next) => {\n horizontalItems = next\n }\n })\n\n const sortableOptionsReference = [\n { name: 'getItems', type: '() => T[]', description: 'Reactive getter for the current array.' },\n { name: 'getId', type: '(item: T) => string | number', description: 'Stable id per row (must match data-sortable-id).' },\n { name: 'onReorder', type: '(items: T[]) => void', description: 'Called with the reordered array after drop.' },\n { name: 'axis', type: \"'vertical' | 'horizontal' | 'grid' | (() => ...)\", description: 'Drag axis. Default: vertical. Use grid for CSS grid layouts.' },\n { name: 'handle', type: 'string | (() => string | undefined)', description: 'Handle selector. Omit to drag the whole row.' },\n { name: 'disabled', type: 'boolean | (() => boolean)', description: 'Disable sorting. Default: false.' }\n ] as const\n\n const sortableReturnReference = [\n { name: 'Provider', type: 'Component', description: 'Required wrapper — mounts @dnd-kit/svelte DragDropProvider. Accepts an optional `overlay` snippet for custom drag overlays.' },\n { name: 'container', type: 'Action<HTMLElement>', description: 'Optional list wrapper — sets data-sortable-active while dragging.' },\n { name: 'item', type: 'Action<HTMLElement, { index, item }>', description: 'Attach to each row with the current index and item.' },\n { name: 'draggingId', type: 'string | number | null', description: 'Readonly id of the row currently being dragged.' }\n ] as const\n\n const markupReference = [\n { name: 'use:sortable.item', description: 'Required on each row — pass { index, item } from the #each block.' },\n { name: 'data-sortable-handle', description: 'Optional handle element when using handle selector.' },\n { name: 'data-sortable-item / data-sortable-id', description: 'Set automatically by use:sortable.item for styling hooks.' }\n ] as const\n\n function resetOrder() {\n tasks = [\n { id: 'design', title: 'Design system tokens', color: 'primary' },\n { id: 'build', title: 'Build sortable hook', color: 'success' },\n { id: 'docs', title: 'Write documentation', color: 'warning' },\n { id: 'ship', title: 'Ship release', color: 'primary' }\n ]\n }\n</script>\n\n<div class=\"space-y-8\">\n <div class=\"space-y-2\">\n <h1 class=\"text-2xl font-bold\">useSortable</h1>\n <p class=\"text-on-surface-variant\">\n Sortable list reordering powered by\n <a href=\"https://clauderic-dnd-kit.mintlify.app/frameworks/svelte\" class=\"text-primary underline\" target=\"_blank\" rel=\"noreferrer\">@dnd-kit/svelte</a>.\n Wrap markup in\n <code class=\"rounded bg-surface-container-high px-1\">sortable.Provider</code>,\n attach\n <code class=\"rounded bg-surface-container-high px-1\">use:sortable.item</code>\n to each row, and optionally use\n <code class=\"rounded bg-surface-container-high px-1\">use:sortable.container</code>\n on the list wrapper. Browse all demos in the\n <Link href=\"/docs/drag-and-drop\" class=\"text-primary underline\">Drag & Drop playground</Link>.\n </p>\n </div>\n\n <section class=\"space-y-3\">\n <h2 id=\"When-to-use-what\" class=\"text-lg font-semibold\">\n <a href=\"#When-to-use-what\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n When to use what\n </a>\n </h2>\n <div class=\"grid gap-3 md:grid-cols-2\">\n <Card class=\"space-y-2 border border-outline-variant/70 p-4\">\n <p class=\"font-semibold text-on-surface\">useSortable / SortableList</p>\n <p class=\"text-sm text-on-surface-variant\">Reorder items inside one list (tasks, menu items, table rows).</p>\n </Card>\n <Card class=\"space-y-2 border border-outline-variant/70 p-4\">\n <p class=\"font-semibold text-on-surface\">\n <Link href=\"/docs/hooks/use-drag-drop\" class=\"text-primary underline\">useDragDrop</Link>\n </p>\n <p class=\"text-sm text-on-surface-variant\">Move items between containers (kanban columns, trays).</p>\n </Card>\n <Card class=\"space-y-2 border border-outline-variant/70 p-4\">\n <p class=\"font-semibold text-on-surface\">\n <Link href=\"/docs/components/file-upload\" class=\"text-primary underline\">FileUpload</Link>\n </p>\n <p class=\"text-sm text-on-surface-variant\">Drag files from the OS onto a dropzone — not for reordering UI lists.</p>\n </Card>\n <Card class=\"space-y-2 border border-outline-variant/70 p-4\">\n <p class=\"font-semibold text-on-surface\">\n <Link href=\"/docs/components/editor\" class=\"text-primary underline\">Editor dragHandle</Link>\n </p>\n <p class=\"text-sm text-on-surface-variant\">Reorder rich-text blocks inside TipTap — built into Editor, not this hook.</p>\n </Card>\n </div>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"Manual-markup\" class=\"text-lg font-semibold\">\n <a href=\"#Manual-markup\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n Manual markup\n </a>\n </h2>\n <sortable.Provider>\n {#snippet overlay({ item })}\n <div class=\"flex items-center gap-3 rounded-lg border border-outline-variant/60 bg-surface px-3 py-2 z-50 shadow-xl scale-[1.02] opacity-95\">\n <button type=\"button\" class=\"cursor-grab rounded-md p-1 text-on-surface-variant\">::</button>\n <Badge label={item.title} color={item.color} variant=\"soft\" />\n </div>\n {/snippet}\n <div use:sortable.container class=\"space-y-2 rounded-lg bg-surface-container-high p-4\">\n {#each tasks as task, index (task.id)}\n <div\n use:sortable.item={{ index, item: task }}\n class={[\n 'relative flex items-center gap-3 rounded-lg border border-outline-variant/60 px-3 py-2 transition-colors',\n sortable.draggingId === task.id ? 'bg-transparent border-transparent' : 'bg-surface'\n ]}\n aria-grabbed={sortable.draggingId === task.id}\n >\n {#if sortable.draggingId === task.id}\n <div class=\"absolute inset-0 z-10 rounded-lg border-2 border-dashed border-primary/50 bg-primary/5 pointer-events-none\"></div>\n {/if}\n <div class={['flex w-full items-center gap-3', sortable.draggingId === task.id && 'invisible']}>\n <button\n type=\"button\"\n data-sortable-handle\n class=\"cursor-grab rounded-md p-1 text-on-surface-variant active:cursor-grabbing\"\n aria-label=\"Drag to reorder\"\n >\n ::\n </button>\n <Badge label={task.title} color={task.color} variant=\"soft\" />\n </div>\n </div>\n {/each}\n </div>\n </sortable.Provider>\n <div class=\"flex flex-wrap gap-2\">\n <Button variant=\"outline\" size=\"sm\" label=\"Reset order\" onclick={resetOrder} />\n <Button\n variant={sortDisabled ? 'solid' : 'outline'}\n size=\"sm\"\n label={sortDisabled ? 'Sorting disabled' : 'Disable sorting'}\n onclick={() => (sortDisabled = !sortDisabled)}\n />\n </div>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"Horizontal-axis\" class=\"text-lg font-semibold\">\n <a href=\"#Horizontal-axis\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n Horizontal axis\n </a>\n </h2>\n <horizontalSortable.Provider>\n <div use:horizontalSortable.container class=\"flex flex-wrap gap-2 rounded-lg bg-surface-container-high p-4\">\n {#each horizontalItems as item, index (item.id)}\n <div\n use:horizontalSortable.item={{ index, item }}\n class={[\n 'flex items-center gap-2 rounded-lg border border-outline-variant/60 bg-surface px-3 py-2',\n horizontalSortable.draggingId === item.id && 'opacity-80 shadow-md'\n ]}\n >\n <button type=\"button\" data-sortable-handle class=\"cursor-grab px-1\" aria-label=\"Drag\">::</button>\n <span class=\"text-sm font-medium\">{item.label}</span>\n </div>\n {/each}\n </div>\n </horizontalSortable.Provider>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"SortableList-component\" class=\"text-lg font-semibold\">\n <a href=\"#SortableList-component\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n SortableList component\n </a>\n </h2>\n <p class=\"text-sm text-on-surface-variant\">\n Prefer a styled wrapper? See\n <Link href=\"/docs/components/sortable-list\" class=\"text-primary underline\">SortableList</Link>.\n </p>\n <Card class=\"border border-outline-variant/70 p-4\">\n <SortableList bind:items={tasks} getKey={(task) => task.id}>\n {#snippet children({ item })}\n <span class=\"text-sm font-medium\">{item.title}</span>\n {/snippet}\n </SortableList>\n </Card>\n </section>\n\n <section class=\"space-y-3\">\n <h2 id=\"API-Reference\" class=\"text-lg font-semibold\">\n <a href=\"#API-Reference\" class=\"group relative inline-flex items-center no-underline hover:underline focus:outline-none focus-visible:underline w-fit\">\n <span class=\"absolute -left-5 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100 text-primary/60 font-normal text-base leading-none\" aria-hidden=\"true\">#</span>\n API Reference\n </a>\n </h2>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <Card class=\"border border-outline-variant/70\">\n <div class=\"space-y-4\">\n <h3 class=\"text-base font-semibold\">useSortable options</h3>\n <div class=\"space-y-3\">\n {#each sortableOptionsReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-primary\">{item.name}</p>\n <p class=\"mt-1 text-sm font-medium\">{item.type}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n <Card class=\"border border-outline-variant/70\">\n <div class=\"space-y-4\">\n <h3 class=\"text-base font-semibold\">Return value</h3>\n <div class=\"space-y-3\">\n {#each sortableReturnReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-primary\">{item.name}</p>\n <p class=\"mt-1 text-sm font-medium\">{item.type}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n <h3 class=\"pt-2 text-base font-semibold\">Markup attributes</h3>\n <div class=\"space-y-3\">\n {#each markupReference as item (item.name)}\n <div class=\"border-b border-outline-variant/60 pb-3 last:border-b-0 last:pb-0\">\n <p class=\"font-mono text-xs text-on-surface-variant\">{item.name}</p>\n <p class=\"mt-1 text-sm text-on-surface-variant\">{item.description}</p>\n </div>\n {/each}\n </div>\n </div>\n </Card>\n </div>\n </section>\n</div>\n"
16
+ }
17
+ }
package/dist/theme.css ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * SV5UI Plus addon theme.
3
+ * SV5UI owns the core design tokens; this file adds typography and addon scanning.
4
+ */
5
+ @import 'sv5ui/theme.css';
6
+ @source '.';
7
+
8
+ @layer theme {
9
+ :root {
10
+ --font-sans-family:
11
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
12
+ --font-heading-family: var(--font-sans-family);
13
+ --font-sarabun-family: var(--font-sans-family);
14
+ --font-mono-family:
15
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
16
+ 'Liberation Mono', monospace;
17
+ --scrim-color: 0 0 0;
18
+ --scrim-opacity: 0.3;
19
+ --scrim-bg: rgb(var(--scrim-color) / var(--scrim-opacity));
20
+ }
21
+ }
22
+
23
+ @theme inline {
24
+ --font-sans: var(--font-sans-family);
25
+ --font-sarabun: var(--font-sarabun-family);
26
+ --font-mono: var(--font-mono-family);
27
+ }
28
+
29
+ @layer base {
30
+ body {
31
+ cursor: default;
32
+ font-family: var(--font-sans-family);
33
+ }
34
+ }
35
+
36
+ @utility font-heading {
37
+ font-family: var(--font-heading-family);
38
+ }
39
+
40
+ .backdrop-blur-xs,
41
+ .backdrop-blur-sm,
42
+ .backdrop-blur-md,
43
+ .backdrop-blur-lg,
44
+ .backdrop-blur-xl,
45
+ .backdrop-blur-2xl,
46
+ .backdrop-blur-3xl {
47
+ will-change: backdrop-filter;
48
+ }
49
+
50
+ @media (prefers-reduced-transparency: reduce) {
51
+ :root {
52
+ --scrim-opacity: 0.7;
53
+ }
54
+
55
+ .backdrop-blur-xs,
56
+ .backdrop-blur-sm,
57
+ .backdrop-blur-md,
58
+ .backdrop-blur-lg,
59
+ .backdrop-blur-xl,
60
+ .backdrop-blur-2xl,
61
+ .backdrop-blur-3xl {
62
+ backdrop-filter: none !important;
63
+ }
64
+ }
package/package.json ADDED
@@ -0,0 +1,176 @@
1
+ {
2
+ "name": "sv5ui-plus",
3
+ "version": "4.0.0",
4
+ "description": "Community companion components and hooks for SV5UI and Svelte 5",
5
+ "packageManager": "bun@1.3.14",
6
+ "author": "asphum",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/asphum/svelora.git"
11
+ },
12
+ "homepage": "https://svelora-ui.vercel.app/",
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/asphum/svelora/issues"
18
+ },
19
+ "scripts": {
20
+ "dev": "vite dev --port 3000",
21
+ "predev": "bun run paraglide:compile",
22
+ "dev:docs": "vite dev --host 0.0.0.0 --port 4173",
23
+ "predev:docs": "bun run paraglide:compile",
24
+ "build": "vite build && bun run prepack",
25
+ "prebuild": "bun run paraglide:compile",
26
+ "preview": "vite preview",
27
+ "prepare": "bun run paraglide:compile && svelte-kit sync || echo ''",
28
+ "prepack": "svelte-kit sync && svelte-package && bun run package:mcp && publint",
29
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
30
+ "precheck": "bun run paraglide:compile",
31
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
32
+ "lint": "biome check .",
33
+ "format": "biome format --write .",
34
+ "lint:fix": "biome check --write .",
35
+ "test:unit": "vitest",
36
+ "pretest:unit": "bun run paraglide:compile",
37
+ "test": "bun run test:unit -- --run",
38
+ "paraglide:compile": "paraglide-js compile --project ./project.inlang --outdir ./src/lib/paraglide --emit-ts-declarations --strategy cookie globalVariable baseLocale",
39
+ "package:mcp": "node ./scripts/package-mcp.mjs",
40
+ "mcp:sv5ui-plus-docs": "node ./mcp/sv5ui-plus-docs/server.mjs",
41
+ "changelog:template": "node ./scripts/changelog-template.mjs",
42
+ "release:verify": "bun run check && bun run prepack && npm pack --dry-run",
43
+ "release:verify:full": "bun run check && bun run test && bun run prepack && npm pack --dry-run",
44
+ "release": "node ./scripts/release.mjs",
45
+ "release:patch": "node ./scripts/release.mjs patch",
46
+ "release:minor": "node ./scripts/release.mjs minor",
47
+ "release:major": "node ./scripts/release.mjs major",
48
+ "release:patch:full": "node ./scripts/release.mjs patch --full",
49
+ "release:minor:full": "node ./scripts/release.mjs minor --full",
50
+ "release:major:full": "node ./scripts/release.mjs major --full",
51
+ "release:patch:dry": "node ./scripts/release.mjs patch --dry-run",
52
+ "public": "node ./scripts/release.mjs public",
53
+ "public:minor": "node ./scripts/release.mjs public minor",
54
+ "public:major": "node ./scripts/release.mjs public major",
55
+ "public:full": "node ./scripts/release.mjs public --full",
56
+ "public:dry": "node ./scripts/release.mjs public --dry-run",
57
+ "public:minor:full": "node ./scripts/release.mjs public minor --full",
58
+ "public:major:full": "node ./scripts/release.mjs public major --full",
59
+ "public:minor:dry": "node ./scripts/release.mjs public minor --dry-run",
60
+ "public:major:dry": "node ./scripts/release.mjs public major --dry-run",
61
+ "clean": "rm -rf dist node_modules build .svelte-kit bun.lock",
62
+ "kill": "PORT=${PORT:-3000}; lsof -ti:$PORT | xargs kill -9 2>/dev/null || true",
63
+ "kill:docs": "for p in 4173 4174 4175; do lsof -ti:$p | xargs kill -9 2>/dev/null || true; done"
64
+ },
65
+ "files": [
66
+ "dist",
67
+ "!dist/**/*.test.*",
68
+ "!dist/**/*.spec.*",
69
+ "!dist/**/*TestWrapper*"
70
+ ],
71
+ "sideEffects": [
72
+ "**/*.css"
73
+ ],
74
+ "svelte": "./dist/index.js",
75
+ "types": "./dist/index.d.ts",
76
+ "type": "module",
77
+ "bin": {
78
+ "sv5ui-plus-mcp-docs": "./dist/mcp/server.mjs",
79
+ "sv5ui-plus-mcp-install-template": "./dist/mcp/install-template.mjs"
80
+ },
81
+ "exports": {
82
+ ".": {
83
+ "types": "./dist/index.d.ts",
84
+ "svelte": "./dist/index.js",
85
+ "default": "./dist/index.js"
86
+ },
87
+ "./compat": {
88
+ "types": "./dist/compat.d.ts",
89
+ "svelte": "./dist/compat.js",
90
+ "default": "./dist/compat.js"
91
+ },
92
+ "./mcp/server": {
93
+ "default": "./dist/mcp/server.mjs"
94
+ },
95
+ "./mcp/cursor-template": {
96
+ "default": "./dist/mcp/cursor.mcp.json"
97
+ },
98
+ "./mcp/install-template": {
99
+ "default": "./dist/mcp/install-template.mjs"
100
+ },
101
+ "./editor": {
102
+ "types": "./dist/editor.d.ts",
103
+ "svelte": "./dist/editor.js",
104
+ "default": "./dist/editor.js"
105
+ },
106
+ "./theme.css": {
107
+ "import": "./dist/theme.css",
108
+ "default": "./dist/theme.css"
109
+ }
110
+ },
111
+ "peerDependencies": {
112
+ "@sveltejs/kit": "^2.0.0",
113
+ "sv5ui": "^2.5.0",
114
+ "svelte": "^5.0.0",
115
+ "tailwindcss": "^4.0.0"
116
+ },
117
+ "peerDependenciesMeta": {
118
+ "@sveltejs/kit": {
119
+ "optional": true
120
+ }
121
+ },
122
+ "devDependencies": {
123
+ "@biomejs/biome": "2.5.7",
124
+ "@inlang/paraglide-js": "^2.23.2",
125
+ "@sveltejs/adapter-vercel": "^6.3.4",
126
+ "@sveltejs/kit": "^2.70.2",
127
+ "@sveltejs/package": "^2.5.8",
128
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
129
+ "@tailwindcss/vite": "^4.3.3",
130
+ "@types/node": "^26.2.0",
131
+ "@vitest/browser-playwright": "^4.1.10",
132
+ "playwright": "^1.62.1",
133
+ "publint": "^0.3.23",
134
+ "sv5ui": "^2.5.0",
135
+ "svelte": "^5.56.8",
136
+ "svelte-check": "^4.7.5",
137
+ "tailwindcss": "^4.3.3",
138
+ "typescript": "6.0.3",
139
+ "vite": "^8.2.1",
140
+ "vitest": "^4.1.10",
141
+ "vitest-browser-svelte": "^3.0.0"
142
+ },
143
+ "keywords": [
144
+ "svelte",
145
+ "svelte5",
146
+ "svelte-components",
147
+ "primitives",
148
+ "ui",
149
+ "ui-library",
150
+ "components",
151
+ "component-library",
152
+ "tailwindcss",
153
+ "tailwind",
154
+ "design-system",
155
+ "typescript",
156
+ "dark-mode",
157
+ "accessible"
158
+ ],
159
+ "dependencies": {
160
+ "@dnd-kit/abstract": "^0.5.0",
161
+ "@dnd-kit/dom": "^0.5.0",
162
+ "@dnd-kit/helpers": "^0.5.0",
163
+ "@dnd-kit/svelte": "^0.5.0",
164
+ "@modelcontextprotocol/sdk": "^1.30.0",
165
+ "apexcharts": "^6.7.0",
166
+ "bits-ui": "^2.18.1",
167
+ "shiki": "^4.4.2",
168
+ "tailwind-merge": "^3.6.0",
169
+ "tailwind-variants": "^3.3.1",
170
+ "zod": "^4.4.3"
171
+ },
172
+ "overrides": {
173
+ "tailwind-merge": "^3.6.0",
174
+ "typescript": "6.0.3"
175
+ }
176
+ }