pika-ux 1.0.0-beta.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 (292) hide show
  1. package/LICENSE +9 -0
  2. package/dist/icon-generator/generate-icon-ts-indices.js +78 -0
  3. package/dist/shadcn-postinstall/index.js +114 -0
  4. package/package.json +102 -0
  5. package/readme.md +50 -0
  6. package/scripts/setup.js +100 -0
  7. package/src/App.svelte +51 -0
  8. package/src/app.css +349 -0
  9. package/src/icons/ci/index.d.ts +5009 -0
  10. package/src/icons/lucide/index.d.ts +11274 -0
  11. package/src/index.ts +23 -0
  12. package/src/lib/docsite/Navigation.svelte +77 -0
  13. package/src/lib/docsite/pages/Colors.svelte +35 -0
  14. package/src/lib/docsite/pages/Components.svelte +50 -0
  15. package/src/lib/docsite/pages/GettingStarted.svelte +21 -0
  16. package/src/lib/docsite/pages/Icons.svelte +22 -0
  17. package/src/lib/docsite/pages/components/Button.svelte +40 -0
  18. package/src/main.ts +9 -0
  19. package/src/pika/chip/chip.svelte +95 -0
  20. package/src/pika/chip/index.ts +1 -0
  21. package/src/pika/combobox/combobox-types.ts +5 -0
  22. package/src/pika/combobox/combobox.svelte +221 -0
  23. package/src/pika/combobox/index.ts +2 -0
  24. package/src/pika/confirm-dialog/confirm-dialog.svelte +48 -0
  25. package/src/pika/confirm-dialog/index.ts +1 -0
  26. package/src/pika/copy-button/copy-button.svelte +134 -0
  27. package/src/pika/copy-button/index.ts +1 -0
  28. package/src/pika/create-copy-link-button/create-copy-link-button.svelte +133 -0
  29. package/src/pika/create-copy-link-button/index.ts +1 -0
  30. package/src/pika/date-picker/date-picker.svelte +33 -0
  31. package/src/pika/date-picker/index.ts +1 -0
  32. package/src/pika/date-range-picker/date-range-picker.svelte +48 -0
  33. package/src/pika/date-range-picker/index.ts +1 -0
  34. package/src/pika/date-time-picker/date-time-picker.svelte +336 -0
  35. package/src/pika/date-time-picker/index.ts +1 -0
  36. package/src/pika/expandable-container/expandable-container.svelte +155 -0
  37. package/src/pika/expandable-container/index.ts +1 -0
  38. package/src/pika/index.ts +29 -0
  39. package/src/pika/list/index.ts +2 -0
  40. package/src/pika/list/list-types.ts +5 -0
  41. package/src/pika/list/list.svelte +349 -0
  42. package/src/pika/markdown-editor/github.scss +87 -0
  43. package/src/pika/markdown-editor/index.ts +1 -0
  44. package/src/pika/markdown-editor/markdown-editor.svelte +44 -0
  45. package/src/pika/permanent-toast/index.ts +1 -0
  46. package/src/pika/permanent-toast/permanent-toast.svelte +47 -0
  47. package/src/pika/pika-alert/index.ts +1 -0
  48. package/src/pika/pika-alert/pika-alert.svelte +53 -0
  49. package/src/pika/pika-badge/index.ts +1 -0
  50. package/src/pika/pika-badge/pika-badge.svelte +61 -0
  51. package/src/pika/pika-table/index.ts +7 -0
  52. package/src/pika/pika-table/pika-table-cell.svelte +9 -0
  53. package/src/pika/pika-table/pika-table-checkbox.svelte +8 -0
  54. package/src/pika/pika-table/pika-table-column-header.svelte +88 -0
  55. package/src/pika/pika-table/pika-table-faceted-filter.svelte +109 -0
  56. package/src/pika/pika-table/pika-table-pagination.svelte +95 -0
  57. package/src/pika/pika-table/pika-table-row-actions.svelte +58 -0
  58. package/src/pika/pika-table/pika-table-toolbar.svelte +88 -0
  59. package/src/pika/pika-table/pika-table-view-options.svelte +35 -0
  60. package/src/pika/pika-table/pika-table.svelte +295 -0
  61. package/src/pika/pika-table/types.ts +106 -0
  62. package/src/pika/pika-tabs/index.ts +18 -0
  63. package/src/pika/pika-tabs/tabs-content.svelte +16 -0
  64. package/src/pika/pika-tabs/tabs-list.svelte +12 -0
  65. package/src/pika/pika-tabs/tabs-trigger.svelte +23 -0
  66. package/src/pika/popup-help/index.ts +1 -0
  67. package/src/pika/popup-help/popup-help.svelte +33 -0
  68. package/src/pika/simple-dropdown/index.ts +2 -0
  69. package/src/pika/simple-dropdown/simple-dropdown-types.ts +5 -0
  70. package/src/pika/simple-dropdown/simple-dropdown.svelte +288 -0
  71. package/src/pika/slideout/constants.ts +5 -0
  72. package/src/pika/slideout/context.svelte.ts +110 -0
  73. package/src/pika/slideout/index.ts +19 -0
  74. package/src/pika/slideout/slideout-content.svelte +36 -0
  75. package/src/pika/slideout/slideout-panel.svelte +126 -0
  76. package/src/pika/slideout/slideout-provider.svelte +49 -0
  77. package/src/pika/slideout/slideout-rail.svelte.die +69 -0
  78. package/src/pika/slideout/slideout.svelte +33 -0
  79. package/src/pika/slideout/slideout.svelte.old +113 -0
  80. package/src/pika/text-wave-shimmer/index.ts +1 -0
  81. package/src/pika/text-wave-shimmer/text-wave-shimmer.svelte +43 -0
  82. package/src/pika/tooltip-plus/index.ts +1 -0
  83. package/src/pika/tooltip-plus/tooltip-plus.svelte +42 -0
  84. package/src/shadcn/.DS_Store +0 -0
  85. package/src/shadcn/alert/alert-description.svelte +11 -0
  86. package/src/shadcn/alert/alert-title.svelte +24 -0
  87. package/src/shadcn/alert/alert.svelte +39 -0
  88. package/src/shadcn/alert/index.ts +14 -0
  89. package/src/shadcn/avatar/avatar-fallback.svelte +13 -0
  90. package/src/shadcn/avatar/avatar-image.svelte +13 -0
  91. package/src/shadcn/avatar/avatar.svelte +19 -0
  92. package/src/shadcn/avatar/index.ts +13 -0
  93. package/src/shadcn/badge/badge.svelte +48 -0
  94. package/src/shadcn/badge/index.ts +2 -0
  95. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +12 -0
  96. package/src/shadcn/breadcrumb/breadcrumb-item.svelte +20 -0
  97. package/src/shadcn/breadcrumb/breadcrumb-link.svelte +31 -0
  98. package/src/shadcn/breadcrumb/breadcrumb-list.svelte +20 -0
  99. package/src/shadcn/breadcrumb/breadcrumb-page.svelte +23 -0
  100. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +15 -0
  101. package/src/shadcn/breadcrumb/breadcrumb.svelte +15 -0
  102. package/src/shadcn/breadcrumb/index.ts +25 -0
  103. package/src/shadcn/button/button.svelte +81 -0
  104. package/src/shadcn/button/index.ts +17 -0
  105. package/src/shadcn/calendar/calendar-caption.svelte +76 -0
  106. package/src/shadcn/calendar/calendar-cell.svelte +19 -0
  107. package/src/shadcn/calendar/calendar-day.svelte +31 -0
  108. package/src/shadcn/calendar/calendar-grid-body.svelte +12 -0
  109. package/src/shadcn/calendar/calendar-grid-head.svelte +12 -0
  110. package/src/shadcn/calendar/calendar-grid-row.svelte +12 -0
  111. package/src/shadcn/calendar/calendar-grid.svelte +16 -0
  112. package/src/shadcn/calendar/calendar-head-cell.svelte +16 -0
  113. package/src/shadcn/calendar/calendar-header.svelte +16 -0
  114. package/src/shadcn/calendar/calendar-heading.svelte +12 -0
  115. package/src/shadcn/calendar/calendar-month-select.svelte +25 -0
  116. package/src/shadcn/calendar/calendar-month.svelte +15 -0
  117. package/src/shadcn/calendar/calendar-months.svelte +20 -0
  118. package/src/shadcn/calendar/calendar-nav.svelte +19 -0
  119. package/src/shadcn/calendar/calendar-next-button.svelte +19 -0
  120. package/src/shadcn/calendar/calendar-prev-button.svelte +19 -0
  121. package/src/shadcn/calendar/calendar-year-select.svelte +25 -0
  122. package/src/shadcn/calendar/calendar.svelte +61 -0
  123. package/src/shadcn/calendar/index.ts +30 -0
  124. package/src/shadcn/card/card-content.svelte +16 -0
  125. package/src/shadcn/card/card-description.svelte +16 -0
  126. package/src/shadcn/card/card-footer.svelte +16 -0
  127. package/src/shadcn/card/card-header.svelte +16 -0
  128. package/src/shadcn/card/card-title.svelte +25 -0
  129. package/src/shadcn/card/card.svelte +20 -0
  130. package/src/shadcn/card/index.ts +22 -0
  131. package/src/shadcn/carousel/carousel-content.svelte +39 -0
  132. package/src/shadcn/carousel/carousel-item.svelte +26 -0
  133. package/src/shadcn/carousel/carousel-next.svelte +30 -0
  134. package/src/shadcn/carousel/carousel-previous.svelte +30 -0
  135. package/src/shadcn/carousel/carousel.svelte +88 -0
  136. package/src/shadcn/carousel/context.ts +51 -0
  137. package/src/shadcn/carousel/index.ts +19 -0
  138. package/src/shadcn/checkbox/checkbox.svelte +36 -0
  139. package/src/shadcn/checkbox/index.ts +6 -0
  140. package/src/shadcn/collapsible/collapsible-content.svelte +7 -0
  141. package/src/shadcn/collapsible/collapsible-trigger.svelte +7 -0
  142. package/src/shadcn/collapsible/collapsible.svelte +11 -0
  143. package/src/shadcn/collapsible/index.ts +13 -0
  144. package/src/shadcn/command/command-dialog.svelte +40 -0
  145. package/src/shadcn/command/command-empty.svelte +13 -0
  146. package/src/shadcn/command/command-group.svelte +30 -0
  147. package/src/shadcn/command/command-input.svelte +21 -0
  148. package/src/shadcn/command/command-item.svelte +16 -0
  149. package/src/shadcn/command/command-link-item.svelte +16 -0
  150. package/src/shadcn/command/command-list.svelte +13 -0
  151. package/src/shadcn/command/command-separator.svelte +13 -0
  152. package/src/shadcn/command/command-shortcut.svelte +20 -0
  153. package/src/shadcn/command/command.svelte +19 -0
  154. package/src/shadcn/command/index.ts +40 -0
  155. package/src/shadcn/data-table/data-table.svelte.ts +141 -0
  156. package/src/shadcn/data-table/flex-render.svelte +36 -0
  157. package/src/shadcn/data-table/index.ts +3 -0
  158. package/src/shadcn/data-table/render-helpers.ts +111 -0
  159. package/src/shadcn/dialog/dialog-close.svelte +7 -0
  160. package/src/shadcn/dialog/dialog-content.svelte +43 -0
  161. package/src/shadcn/dialog/dialog-description.svelte +13 -0
  162. package/src/shadcn/dialog/dialog-footer.svelte +20 -0
  163. package/src/shadcn/dialog/dialog-header.svelte +20 -0
  164. package/src/shadcn/dialog/dialog-overlay.svelte +16 -0
  165. package/src/shadcn/dialog/dialog-title.svelte +13 -0
  166. package/src/shadcn/dialog/dialog-trigger.svelte +7 -0
  167. package/src/shadcn/dialog/index.ts +37 -0
  168. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +41 -0
  169. package/src/shadcn/dropdown-menu/dropdown-menu-content.svelte +27 -0
  170. package/src/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  171. package/src/shadcn/dropdown-menu/dropdown-menu-group.svelte +7 -0
  172. package/src/shadcn/dropdown-menu/dropdown-menu-item.svelte +27 -0
  173. package/src/shadcn/dropdown-menu/dropdown-menu-label.svelte +24 -0
  174. package/src/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  175. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +26 -0
  176. package/src/shadcn/dropdown-menu/dropdown-menu-separator.svelte +13 -0
  177. package/src/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  178. package/src/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte +16 -0
  179. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  180. package/src/shadcn/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  181. package/src/shadcn/dropdown-menu/index.ts +49 -0
  182. package/src/shadcn/index.ts +40 -0
  183. package/src/shadcn/input/index.ts +7 -0
  184. package/src/shadcn/input/input.svelte +51 -0
  185. package/src/shadcn/is-mobile.svelte.ts +9 -0
  186. package/src/shadcn/label/index.ts +7 -0
  187. package/src/shadcn/label/label.svelte +16 -0
  188. package/src/shadcn/popover/index.ts +17 -0
  189. package/src/shadcn/popover/popover-content.svelte +29 -0
  190. package/src/shadcn/popover/popover-trigger.svelte +8 -0
  191. package/src/shadcn/radio-group/index.ts +10 -0
  192. package/src/shadcn/radio-group/radio-group-item.svelte +25 -0
  193. package/src/shadcn/radio-group/radio-group.svelte +19 -0
  194. package/src/shadcn/range-calendar/index.ts +30 -0
  195. package/src/shadcn/range-calendar/range-calendar-cell.svelte +19 -0
  196. package/src/shadcn/range-calendar/range-calendar-day.svelte +35 -0
  197. package/src/shadcn/range-calendar/range-calendar-grid-body.svelte +12 -0
  198. package/src/shadcn/range-calendar/range-calendar-grid-head.svelte +12 -0
  199. package/src/shadcn/range-calendar/range-calendar-grid-row.svelte +12 -0
  200. package/src/shadcn/range-calendar/range-calendar-grid.svelte +16 -0
  201. package/src/shadcn/range-calendar/range-calendar-head-cell.svelte +16 -0
  202. package/src/shadcn/range-calendar/range-calendar-header.svelte +16 -0
  203. package/src/shadcn/range-calendar/range-calendar-heading.svelte +16 -0
  204. package/src/shadcn/range-calendar/range-calendar-months.svelte +20 -0
  205. package/src/shadcn/range-calendar/range-calendar-next-button.svelte +18 -0
  206. package/src/shadcn/range-calendar/range-calendar-prev-button.svelte +18 -0
  207. package/src/shadcn/range-calendar/range-calendar.svelte +57 -0
  208. package/src/shadcn/resizable/index.ts +13 -0
  209. package/src/shadcn/resizable/resizable-handle.svelte +30 -0
  210. package/src/shadcn/resizable/resizable-pane-group.svelte +22 -0
  211. package/src/shadcn/scroll-area/index.ts +10 -0
  212. package/src/shadcn/scroll-area/scroll-area-scrollbar.svelte +28 -0
  213. package/src/shadcn/scroll-area/scroll-area.svelte +35 -0
  214. package/src/shadcn/select/index.ts +37 -0
  215. package/src/shadcn/select/select-content.svelte +38 -0
  216. package/src/shadcn/select/select-group-heading.svelte +21 -0
  217. package/src/shadcn/select/select-group.svelte +7 -0
  218. package/src/shadcn/select/select-item.svelte +31 -0
  219. package/src/shadcn/select/select-label.svelte +20 -0
  220. package/src/shadcn/select/select-scroll-down-button.svelte +11 -0
  221. package/src/shadcn/select/select-scroll-up-button.svelte +11 -0
  222. package/src/shadcn/select/select-separator.svelte +14 -0
  223. package/src/shadcn/select/select-trigger.svelte +30 -0
  224. package/src/shadcn/separator/index.ts +7 -0
  225. package/src/shadcn/separator/separator.svelte +16 -0
  226. package/src/shadcn/sheet/index.ts +36 -0
  227. package/src/shadcn/sheet/sheet-close.svelte +7 -0
  228. package/src/shadcn/sheet/sheet-content.svelte +66 -0
  229. package/src/shadcn/sheet/sheet-description.svelte +13 -0
  230. package/src/shadcn/sheet/sheet-footer.svelte +15 -0
  231. package/src/shadcn/sheet/sheet-header.svelte +15 -0
  232. package/src/shadcn/sheet/sheet-overlay.svelte +16 -0
  233. package/src/shadcn/sheet/sheet-title.svelte +13 -0
  234. package/src/shadcn/sheet/sheet-trigger.svelte +7 -0
  235. package/src/shadcn/sidebar/constants.ts +6 -0
  236. package/src/shadcn/sidebar/context.svelte.ts +80 -0
  237. package/src/shadcn/sidebar/index.ts +75 -0
  238. package/src/shadcn/sidebar/sidebar-content.svelte +24 -0
  239. package/src/shadcn/sidebar/sidebar-footer.svelte +21 -0
  240. package/src/shadcn/sidebar/sidebar-group-action.svelte +36 -0
  241. package/src/shadcn/sidebar/sidebar-group-content.svelte +21 -0
  242. package/src/shadcn/sidebar/sidebar-group-label.svelte +34 -0
  243. package/src/shadcn/sidebar/sidebar-group.svelte +21 -0
  244. package/src/shadcn/sidebar/sidebar-header.svelte +21 -0
  245. package/src/shadcn/sidebar/sidebar-input.svelte +21 -0
  246. package/src/shadcn/sidebar/sidebar-inset.svelte +24 -0
  247. package/src/shadcn/sidebar/sidebar-menu-action.svelte +43 -0
  248. package/src/shadcn/sidebar/sidebar-menu-badge.svelte +29 -0
  249. package/src/shadcn/sidebar/sidebar-menu-button.svelte +101 -0
  250. package/src/shadcn/sidebar/sidebar-menu-item.svelte +21 -0
  251. package/src/shadcn/sidebar/sidebar-menu-skeleton.svelte +36 -0
  252. package/src/shadcn/sidebar/sidebar-menu-sub-button.svelte +43 -0
  253. package/src/shadcn/sidebar/sidebar-menu-sub-item.svelte +21 -0
  254. package/src/shadcn/sidebar/sidebar-menu-sub.svelte +25 -0
  255. package/src/shadcn/sidebar/sidebar-menu.svelte +21 -0
  256. package/src/shadcn/sidebar/sidebar-provider.svelte +46 -0
  257. package/src/shadcn/sidebar/sidebar-rail.svelte +36 -0
  258. package/src/shadcn/sidebar/sidebar-separator.svelte +15 -0
  259. package/src/shadcn/sidebar/sidebar-trigger.svelte +35 -0
  260. package/src/shadcn/sidebar/sidebar.svelte +94 -0
  261. package/src/shadcn/skeleton/index.ts +7 -0
  262. package/src/shadcn/skeleton/skeleton.svelte +17 -0
  263. package/src/shadcn/slider/index.ts +7 -0
  264. package/src/shadcn/slider/slider.svelte +44 -0
  265. package/src/shadcn/sonner/index.ts +1 -0
  266. package/src/shadcn/sonner/sonner.svelte +13 -0
  267. package/src/shadcn/switch/index.ts +7 -0
  268. package/src/shadcn/switch/switch.svelte +27 -0
  269. package/src/shadcn/table/index.ts +28 -0
  270. package/src/shadcn/table/table-body.svelte +15 -0
  271. package/src/shadcn/table/table-caption.svelte +20 -0
  272. package/src/shadcn/table/table-cell.svelte +20 -0
  273. package/src/shadcn/table/table-footer.svelte +20 -0
  274. package/src/shadcn/table/table-head.svelte +23 -0
  275. package/src/shadcn/table/table-header.svelte +15 -0
  276. package/src/shadcn/table/table-row.svelte +23 -0
  277. package/src/shadcn/table/table.svelte +17 -0
  278. package/src/shadcn/tabs/index.ts +18 -0
  279. package/src/shadcn/tabs/tabs-content.svelte +21 -0
  280. package/src/shadcn/tabs/tabs-list.svelte +19 -0
  281. package/src/shadcn/tabs/tabs-trigger.svelte +21 -0
  282. package/src/shadcn/textarea/index.ts +7 -0
  283. package/src/shadcn/textarea/textarea.svelte +22 -0
  284. package/src/shadcn/toggle/index.ts +13 -0
  285. package/src/shadcn/toggle/toggle.svelte +51 -0
  286. package/src/shadcn/toggle-group/index.ts +10 -0
  287. package/src/shadcn/toggle-group/toggle-group-item.svelte +30 -0
  288. package/src/shadcn/toggle-group/toggle-group.svelte +41 -0
  289. package/src/shadcn/tooltip/index.ts +21 -0
  290. package/src/shadcn/tooltip/tooltip-content.svelte +47 -0
  291. package/src/shadcn/tooltip/tooltip-trigger.svelte +7 -0
  292. package/src/shadcn/utils.ts +14 -0
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
3
+ import { cn } from "../utils.js";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: RangeCalendarPrimitive.HeadingProps = $props();
10
+ </script>
11
+
12
+ <RangeCalendarPrimitive.Heading
13
+ bind:ref
14
+ class={cn("text-sm font-medium", className)}
15
+ {...restProps}
16
+ />
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import type { WithElementRef } from "bits-ui";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ import { cn } from "../utils.js";
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ ...restProps
11
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
12
+ </script>
13
+
14
+ <div
15
+ bind:this={ref}
16
+ class={cn("mt-4 flex flex-col space-y-4 sm:flex-row sm:space-x-4 sm:space-y-0", className)}
17
+ {...restProps}
18
+ >
19
+ {@render children?.()}
20
+ </div>
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
3
+ import ChevronRight from '$icons/lucide/chevron-right';
4
+ import { buttonVariants } from '../button/index.js';
5
+ import { cn } from '../utils.js';
6
+ let { ref = $bindable(null), class: className, children, ...restProps }: RangeCalendarPrimitive.NextButtonProps = $props();
7
+ </script>
8
+
9
+ {#snippet Fallback()}
10
+ <ChevronRight />
11
+ {/snippet}
12
+
13
+ <RangeCalendarPrimitive.NextButton
14
+ bind:ref
15
+ class={cn(buttonVariants({ variant: 'outline' }), 'size-7 bg-transparent p-0 opacity-50 hover:opacity-100', className)}
16
+ {...restProps}
17
+ children={children || Fallback}
18
+ />
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
3
+ import ChevronLeft from '$icons/lucide/chevron-left';
4
+ import { buttonVariants } from '../button/index.js';
5
+ import { cn } from '../utils.js';
6
+ let { ref = $bindable(null), class: className, children, ...restProps }: RangeCalendarPrimitive.PrevButtonProps = $props();
7
+ </script>
8
+
9
+ {#snippet Fallback()}
10
+ <ChevronLeft />
11
+ {/snippet}
12
+
13
+ <RangeCalendarPrimitive.PrevButton
14
+ bind:ref
15
+ class={cn(buttonVariants({ variant: 'outline' }), 'size-7 bg-transparent p-0 opacity-50 hover:opacity-100', className)}
16
+ {...restProps}
17
+ children={children || Fallback}
18
+ />
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import { RangeCalendar as RangeCalendarPrimitive, type WithoutChildrenOrChild } from "bits-ui";
3
+ import * as RangeCalendar from "./index.js";
4
+ import { cn } from "../utils.js";
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ value = $bindable(),
9
+ placeholder = $bindable(),
10
+ class: className,
11
+ weekdayFormat = "short",
12
+ ...restProps
13
+ }: WithoutChildrenOrChild<RangeCalendarPrimitive.RootProps> = $props();
14
+ </script>
15
+
16
+ <RangeCalendarPrimitive.Root
17
+ bind:ref
18
+ bind:value
19
+ bind:placeholder
20
+ {weekdayFormat}
21
+ class={cn("p-3", className)}
22
+ {...restProps}
23
+ >
24
+ {#snippet children({ months, weekdays })}
25
+ <RangeCalendar.Header>
26
+ <RangeCalendar.PrevButton />
27
+ <RangeCalendar.Heading />
28
+ <RangeCalendar.NextButton />
29
+ </RangeCalendar.Header>
30
+ <RangeCalendar.Months>
31
+ {#each months as month (month)}
32
+ <RangeCalendar.Grid>
33
+ <RangeCalendar.GridHead>
34
+ <RangeCalendar.GridRow class="flex">
35
+ {#each weekdays as weekday (weekday)}
36
+ <RangeCalendar.HeadCell>
37
+ {weekday.slice(0, 2)}
38
+ </RangeCalendar.HeadCell>
39
+ {/each}
40
+ </RangeCalendar.GridRow>
41
+ </RangeCalendar.GridHead>
42
+ <RangeCalendar.GridBody>
43
+ {#each month.weeks as weekDates (weekDates)}
44
+ <RangeCalendar.GridRow class="mt-2 w-full">
45
+ {#each weekDates as date (date)}
46
+ <RangeCalendar.Cell {date} month={month.value}>
47
+ <RangeCalendar.Day />
48
+ </RangeCalendar.Cell>
49
+ {/each}
50
+ </RangeCalendar.GridRow>
51
+ {/each}
52
+ </RangeCalendar.GridBody>
53
+ </RangeCalendar.Grid>
54
+ {/each}
55
+ </RangeCalendar.Months>
56
+ {/snippet}
57
+ </RangeCalendarPrimitive.Root>
@@ -0,0 +1,13 @@
1
+ import { Pane } from "paneforge";
2
+ import Handle from "./resizable-handle.svelte";
3
+ import PaneGroup from "./resizable-pane-group.svelte";
4
+
5
+ export {
6
+ PaneGroup,
7
+ Pane,
8
+ Handle,
9
+ //
10
+ PaneGroup as ResizablePaneGroup,
11
+ Pane as ResizablePane,
12
+ Handle as ResizableHandle,
13
+ };
@@ -0,0 +1,30 @@
1
+ <script lang="ts">
2
+ import GripVertical from '$icons/lucide/grip-vertical';
3
+ import * as ResizablePrimitive from 'paneforge';
4
+ import type { WithoutChildrenOrChild } from 'bits-ui';
5
+ import { cn } from '../utils.js';
6
+
7
+ let {
8
+ ref = $bindable(null),
9
+ class: className,
10
+ withHandle = false,
11
+ ...restProps
12
+ }: WithoutChildrenOrChild<ResizablePrimitive.PaneResizerProps> & {
13
+ withHandle?: boolean;
14
+ } = $props();
15
+ </script>
16
+
17
+ <ResizablePrimitive.PaneResizer
18
+ bind:ref
19
+ class={cn(
20
+ 'bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-1 data-[direction=vertical]:h-px data-[direction=vertical]:w-full data-[direction=vertical]:after:left-0 data-[direction=vertical]:after:h-1 data-[direction=vertical]:after:w-full data-[direction=vertical]:after:-translate-y-1/2 data-[direction=vertical]:after:translate-x-0 [&[data-direction=vertical]>div]:rotate-90',
21
+ className
22
+ )}
23
+ {...restProps}
24
+ >
25
+ {#if withHandle}
26
+ <div class="bg-border z-10 flex h-4 w-3 items-center justify-center rounded-sm border">
27
+ <GripVertical class="size-2.5" />
28
+ </div>
29
+ {/if}
30
+ </ResizablePrimitive.PaneResizer>
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import * as ResizablePrimitive from "paneforge";
3
+ import { cn } from "../utils.js";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ direction,
9
+ this: paneGroup = $bindable(),
10
+ ...restProps
11
+ }: ResizablePrimitive.PaneGroupProps & {
12
+ this?: ResizablePrimitive.PaneGroup;
13
+ } = $props();
14
+ </script>
15
+
16
+ <ResizablePrimitive.PaneGroup
17
+ bind:ref
18
+ bind:this={paneGroup}
19
+ {direction}
20
+ class={cn("flex h-full w-full data-[direction=vertical]:flex-col", className)}
21
+ {...restProps}
22
+ />
@@ -0,0 +1,10 @@
1
+ import Scrollbar from "./scroll-area-scrollbar.svelte";
2
+ import Root from "./scroll-area.svelte";
3
+
4
+ export {
5
+ Root,
6
+ Scrollbar,
7
+ //,
8
+ Root as ScrollArea,
9
+ Scrollbar as ScrollAreaScrollbar,
10
+ };
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import { ScrollArea as ScrollAreaPrimitive } from 'bits-ui';
3
+ import { cn, type WithoutChild } from '../utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ orientation = 'vertical',
9
+ children,
10
+ ...restProps
11
+ }: WithoutChild<ScrollAreaPrimitive.ScrollbarProps> = $props();
12
+ </script>
13
+
14
+ <ScrollAreaPrimitive.Scrollbar
15
+ bind:ref
16
+ data-slot="scroll-area-scrollbar"
17
+ {orientation}
18
+ class={cn(
19
+ 'flex touch-none select-none p-px transition-colors',
20
+ orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent',
21
+ orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',
22
+ className
23
+ )}
24
+ {...restProps}
25
+ >
26
+ {@render children?.()}
27
+ <ScrollAreaPrimitive.Thumb data-slot="scroll-area-thumb" class="bg-border relative flex-1 rounded-full" />
28
+ </ScrollAreaPrimitive.Scrollbar>
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import { ScrollArea as ScrollAreaPrimitive } from 'bits-ui';
3
+ import { Scrollbar } from './index.js';
4
+ import { cn, type WithoutChild } from '../utils.js';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ orientation = 'vertical',
10
+ scrollbarXClasses = '',
11
+ scrollbarYClasses = '',
12
+ children,
13
+ ...restProps
14
+ }: WithoutChild<ScrollAreaPrimitive.RootProps> & {
15
+ orientation?: 'vertical' | 'horizontal' | 'both' | undefined;
16
+ scrollbarXClasses?: string | undefined;
17
+ scrollbarYClasses?: string | undefined;
18
+ } = $props();
19
+ </script>
20
+
21
+ <ScrollAreaPrimitive.Root bind:ref data-slot="scroll-area" class={cn('relative', className)} {...restProps}>
22
+ <ScrollAreaPrimitive.Viewport
23
+ data-slot="scroll-area-viewport"
24
+ class="ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] focus-visible:outline-1 focus-visible:ring-4"
25
+ >
26
+ {@render children?.()}
27
+ </ScrollAreaPrimitive.Viewport>
28
+ {#if orientation === 'vertical' || orientation === 'both'}
29
+ <Scrollbar orientation="vertical" class={scrollbarYClasses} />
30
+ {/if}
31
+ {#if orientation === 'horizontal' || orientation === 'both'}
32
+ <Scrollbar orientation="horizontal" class={scrollbarXClasses} />
33
+ {/if}
34
+ <ScrollAreaPrimitive.Corner />
35
+ </ScrollAreaPrimitive.Root>
@@ -0,0 +1,37 @@
1
+ import { Select as SelectPrimitive } from "bits-ui";
2
+
3
+ import Group from "./select-group.svelte";
4
+ import Label from "./select-label.svelte";
5
+ import Item from "./select-item.svelte";
6
+ import Content from "./select-content.svelte";
7
+ import Trigger from "./select-trigger.svelte";
8
+ import Separator from "./select-separator.svelte";
9
+ import ScrollDownButton from "./select-scroll-down-button.svelte";
10
+ import ScrollUpButton from "./select-scroll-up-button.svelte";
11
+ import GroupHeading from "./select-group-heading.svelte";
12
+
13
+ const Root = SelectPrimitive.Root;
14
+
15
+ export {
16
+ Root,
17
+ Group,
18
+ Label,
19
+ Item,
20
+ Content,
21
+ Trigger,
22
+ Separator,
23
+ ScrollDownButton,
24
+ ScrollUpButton,
25
+ GroupHeading,
26
+ //
27
+ Root as Select,
28
+ Group as SelectGroup,
29
+ Label as SelectLabel,
30
+ Item as SelectItem,
31
+ Content as SelectContent,
32
+ Trigger as SelectTrigger,
33
+ Separator as SelectSeparator,
34
+ ScrollDownButton as SelectScrollDownButton,
35
+ ScrollUpButton as SelectScrollUpButton,
36
+ GroupHeading as SelectGroupHeading,
37
+ };
@@ -0,0 +1,38 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import SelectScrollUpButton from './select-scroll-up-button.svelte';
4
+ import SelectScrollDownButton from './select-scroll-down-button.svelte';
5
+ import { cn, type WithoutChild } from '../utils.js';
6
+
7
+ let {
8
+ ref = $bindable(null),
9
+ class: className,
10
+ sideOffset = 4,
11
+ portalProps,
12
+ children,
13
+ ...restProps
14
+ }: WithoutChild<SelectPrimitive.ContentProps> & {
15
+ portalProps?: SelectPrimitive.PortalProps;
16
+ } = $props();
17
+ </script>
18
+
19
+ <SelectPrimitive.Portal {...portalProps}>
20
+ <SelectPrimitive.Content
21
+ bind:ref
22
+ {sideOffset}
23
+ data-slot="select-content"
24
+ class={cn(
25
+ 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-(--bits-select-content-available-height) origin-(--bits-select-content-transform-origin) relative z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border shadow-md data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
26
+ className
27
+ )}
28
+ {...restProps}
29
+ >
30
+ <SelectScrollUpButton />
31
+ <SelectPrimitive.Viewport
32
+ class={cn('h-(--bits-select-anchor-height) min-w-(--bits-select-anchor-width) w-full scroll-my-1 p-1')}
33
+ >
34
+ {@render children?.()}
35
+ </SelectPrimitive.Viewport>
36
+ <SelectScrollDownButton />
37
+ </SelectPrimitive.Content>
38
+ </SelectPrimitive.Portal>
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import { cn } from '../utils.js';
4
+ import type { ComponentProps } from 'svelte';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ ...restProps
11
+ }: ComponentProps<typeof SelectPrimitive.GroupHeading> = $props();
12
+ </script>
13
+
14
+ <SelectPrimitive.GroupHeading
15
+ bind:ref
16
+ data-slot="select-group-heading"
17
+ class={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}
18
+ {...restProps}
19
+ >
20
+ {@render children?.()}
21
+ </SelectPrimitive.GroupHeading>
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+
4
+ let { ref = $bindable(null), ...restProps }: SelectPrimitive.GroupProps = $props();
5
+ </script>
6
+
7
+ <SelectPrimitive.Group data-slot="select-group" {...restProps} />
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import CheckIcon from '$icons/lucide/check';
3
+ import { Select as SelectPrimitive } from 'bits-ui';
4
+ import { cn, type WithoutChild } from '../utils.js';
5
+
6
+ let { ref = $bindable(null), class: className, value, label, children: childrenProp, ...restProps }: WithoutChild<SelectPrimitive.ItemProps> = $props();
7
+ </script>
8
+
9
+ <SelectPrimitive.Item
10
+ bind:ref
11
+ {value}
12
+ data-slot="select-item"
13
+ class={cn(
14
+ "data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-8 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
15
+ className
16
+ )}
17
+ {...restProps}
18
+ >
19
+ {#snippet children({ selected, highlighted })}
20
+ <span class="absolute right-2 flex size-3.5 items-center justify-center">
21
+ {#if selected}
22
+ <CheckIcon class="size-4" />
23
+ {/if}
24
+ </span>
25
+ {#if childrenProp}
26
+ {@render childrenProp({ selected, highlighted })}
27
+ {:else}
28
+ {label || value}
29
+ {/if}
30
+ {/snippet}
31
+ </SelectPrimitive.Item>
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { cn, type WithElementRef } from '../utils.js';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ children,
9
+ ...restProps
10
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> & {} = $props();
11
+ </script>
12
+
13
+ <div
14
+ bind:this={ref}
15
+ data-slot="select-label"
16
+ class={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}
17
+ {...restProps}
18
+ >
19
+ {@render children?.()}
20
+ </div>
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import ChevronDownIcon from '$icons/lucide/chevron-down';
3
+ import { Select as SelectPrimitive } from 'bits-ui';
4
+ import { cn, type WithoutChildrenOrChild } from '../utils.js';
5
+
6
+ let { ref = $bindable(null), class: className, ...restProps }: WithoutChildrenOrChild<SelectPrimitive.ScrollDownButtonProps> = $props();
7
+ </script>
8
+
9
+ <SelectPrimitive.ScrollDownButton bind:ref data-slot="select-scroll-down-button" class={cn('flex cursor-default items-center justify-center py-1', className)} {...restProps}>
10
+ <ChevronDownIcon class="size-4" />
11
+ </SelectPrimitive.ScrollDownButton>
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import ChevronUpIcon from '$icons/lucide/chevron-up';
3
+ import { Select as SelectPrimitive } from 'bits-ui';
4
+ import { cn, type WithoutChildrenOrChild } from '../utils.js';
5
+
6
+ let { ref = $bindable(null), class: className, ...restProps }: WithoutChildrenOrChild<SelectPrimitive.ScrollUpButtonProps> = $props();
7
+ </script>
8
+
9
+ <SelectPrimitive.ScrollUpButton bind:ref data-slot="select-scroll-up-button" class={cn('flex cursor-default items-center justify-center py-1', className)} {...restProps}>
10
+ <ChevronUpIcon class="size-4" />
11
+ </SelectPrimitive.ScrollUpButton>
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { Separator as SeparatorPrimitive } from 'bits-ui';
3
+ import { Separator } from '../separator/index.js';
4
+ import { cn } from '../utils.js';
5
+
6
+ let { ref = $bindable(null), class: className, ...restProps }: SeparatorPrimitive.RootProps = $props();
7
+ </script>
8
+
9
+ <Separator
10
+ bind:ref
11
+ data-slot="select-separator"
12
+ class={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}
13
+ {...restProps}
14
+ />
@@ -0,0 +1,30 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import ChevronDownIcon from '$icons/lucide/chevron-down';
4
+ import { cn, type WithoutChild } from '../utils.js';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ size = 'default',
11
+ ...restProps
12
+ }: WithoutChild<SelectPrimitive.TriggerProps> & {
13
+ size?: 'sm' | 'default';
14
+ } = $props();
15
+ </script>
16
+
17
+ <!-- CUSTOM CHANGE: Changed w-fit to w-full to make select triggers fill available width (original: w-fit) -->
18
+ <SelectPrimitive.Trigger
19
+ bind:ref
20
+ data-slot="select-trigger"
21
+ data-size={size}
22
+ class={cn(
23
+ "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 shadow-xs flex w-full select-none items-center justify-between gap-2 whitespace-nowrap rounded-md border bg-transparent px-3 py-2 text-sm outline-none transition-[color,box-shadow] focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
24
+ className
25
+ )}
26
+ {...restProps}
27
+ >
28
+ {@render children?.()}
29
+ <ChevronDownIcon class="size-4 opacity-50" />
30
+ </SelectPrimitive.Trigger>
@@ -0,0 +1,7 @@
1
+ import Root from "./separator.svelte";
2
+
3
+ export {
4
+ Root,
5
+ //
6
+ Root as Separator,
7
+ };
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import { Separator as SeparatorPrimitive } from 'bits-ui';
3
+ import { cn } from '../utils.js';
4
+
5
+ let { ref = $bindable(null), class: className, ...restProps }: SeparatorPrimitive.RootProps = $props();
6
+ </script>
7
+
8
+ <SeparatorPrimitive.Root
9
+ bind:ref
10
+ data-slot="separator"
11
+ class={cn(
12
+ 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=vertical]:h-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px',
13
+ className
14
+ )}
15
+ {...restProps}
16
+ />
@@ -0,0 +1,36 @@
1
+ import { Dialog as SheetPrimitive } from "bits-ui";
2
+ import Trigger from "./sheet-trigger.svelte";
3
+ import Close from "./sheet-close.svelte";
4
+ import Overlay from "./sheet-overlay.svelte";
5
+ import Content from "./sheet-content.svelte";
6
+ import Header from "./sheet-header.svelte";
7
+ import Footer from "./sheet-footer.svelte";
8
+ import Title from "./sheet-title.svelte";
9
+ import Description from "./sheet-description.svelte";
10
+
11
+ const Root = SheetPrimitive.Root;
12
+ const Portal = SheetPrimitive.Portal;
13
+
14
+ export {
15
+ Root,
16
+ Close,
17
+ Trigger,
18
+ Portal,
19
+ Overlay,
20
+ Content,
21
+ Header,
22
+ Footer,
23
+ Title,
24
+ Description,
25
+ //
26
+ Root as Sheet,
27
+ Close as SheetClose,
28
+ Trigger as SheetTrigger,
29
+ Portal as SheetPortal,
30
+ Overlay as SheetOverlay,
31
+ Content as SheetContent,
32
+ Header as SheetHeader,
33
+ Footer as SheetFooter,
34
+ Title as SheetTitle,
35
+ Description as SheetDescription,
36
+ };
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { Dialog as SheetPrimitive } from "bits-ui";
3
+
4
+ let { ref = $bindable(null), ...restProps }: SheetPrimitive.CloseProps = $props();
5
+ </script>
6
+
7
+ <SheetPrimitive.Close bind:ref data-slot="sheet-close" {...restProps} />
@@ -0,0 +1,66 @@
1
+ <script lang="ts" module>
2
+ import { tv, type VariantProps } from 'tailwind-variants';
3
+ export const sheetVariants = tv({
4
+ base: 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
5
+ variants: {
6
+ side: {
7
+ top: 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',
8
+ bottom: 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',
9
+ left: 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
10
+ right: 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm'
11
+ },
12
+ full: {
13
+ true: 'p-0',
14
+ false: 'p-6'
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ side: 'right',
19
+ full: false
20
+ }
21
+ });
22
+
23
+ export type Side = VariantProps<typeof sheetVariants>['side'];
24
+ </script>
25
+
26
+ <script lang="ts">
27
+ import { Dialog as SheetPrimitive } from 'bits-ui';
28
+ import XIcon from '$icons/lucide/x';
29
+ import type { Snippet } from 'svelte';
30
+ import SheetOverlay from './sheet-overlay.svelte';
31
+ import { cn, type WithoutChildrenOrChild } from '../utils.js';
32
+
33
+ let {
34
+ ref = $bindable(null),
35
+ class: className,
36
+ side = 'right',
37
+ full = false,
38
+ width,
39
+ portalProps,
40
+ children,
41
+ ...restProps
42
+ }: WithoutChildrenOrChild<SheetPrimitive.ContentProps> & {
43
+ portalProps?: SheetPrimitive.PortalProps;
44
+ side?: Side;
45
+ full?: boolean;
46
+ width?: string;
47
+ children: Snippet;
48
+ } = $props();
49
+
50
+ const contentStyles = $derived(width && (side === 'left' || side === 'right') ? { width, maxWidth: width } : undefined);
51
+ </script>
52
+
53
+ <SheetPrimitive.Portal {...portalProps}>
54
+ <SheetOverlay />
55
+ <SheetPrimitive.Content bind:ref data-slot="sheet-content" class={cn(sheetVariants({ side, full }), className)} style={contentStyles} {...restProps}>
56
+ {@render children?.()}
57
+ {#if !full}
58
+ <SheetPrimitive.Close
59
+ class="ring-offset-background focus-visible:ring-ring rounded-xs focus-visible:outline-hidden absolute right-4 top-4 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none"
60
+ >
61
+ <XIcon class="size-4" />
62
+ <span class="sr-only">Close</span>
63
+ </SheetPrimitive.Close>
64
+ {/if}
65
+ </SheetPrimitive.Content>
66
+ </SheetPrimitive.Portal>