sheer-ui 0.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 (635) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/package.json +369 -0
  4. package/src/lib/VENDORED.md +109 -0
  5. package/src/lib/assets/ui.css +733 -0
  6. package/src/lib/blocks/Appearance.svelte +104 -0
  7. package/src/lib/blocks/BoundaryFailed.svelte +33 -0
  8. package/src/lib/blocks/ErrorPage.svelte +65 -0
  9. package/src/lib/blocks/Footer.svelte +71 -0
  10. package/src/lib/blocks/Header.svelte +67 -0
  11. package/src/lib/blocks/Heading.svelte +86 -0
  12. package/src/lib/blocks/MobileNav.svelte +169 -0
  13. package/src/lib/blocks/PhoneInput.svelte +68 -0
  14. package/src/lib/blocks/Section.svelte +34 -0
  15. package/src/lib/blocks/alert-modal/AlertModal.svelte +83 -0
  16. package/src/lib/blocks/alert-modal/alert-modal.svelte.ts +81 -0
  17. package/src/lib/blocks/alert-modal/index.ts +2 -0
  18. package/src/lib/blocks/calendar.svelte +155 -0
  19. package/src/lib/blocks/copy-button/copy-button.svelte +43 -0
  20. package/src/lib/blocks/copy-button/copy.svelte.ts +52 -0
  21. package/src/lib/blocks/copy-button/index.ts +2 -0
  22. package/src/lib/blocks/date-picker/date-picker-with-presets.svelte +109 -0
  23. package/src/lib/blocks/date-picker/date-picker.svelte +91 -0
  24. package/src/lib/blocks/date-picker/index.ts +13 -0
  25. package/src/lib/blocks/date-picker/range-date-picker.svelte +128 -0
  26. package/src/lib/blocks/index.ts +12 -0
  27. package/src/lib/blocks/mockups/Browser.svelte +22 -0
  28. package/src/lib/blocks/mockups/Phone.svelte +44 -0
  29. package/src/lib/blocks/mockups/index.ts +2 -0
  30. package/src/lib/blocks/tab-nav/index.ts +1 -0
  31. package/src/lib/blocks/tab-nav/tab-nav.svelte +46 -0
  32. package/src/lib/blocks/time-picker/index.ts +16 -0
  33. package/src/lib/blocks/time-picker/time-input.svelte +118 -0
  34. package/src/lib/blocks/time-picker/time-picker.svelte +93 -0
  35. package/src/lib/blocks/time-picker/time-range-input.svelte +34 -0
  36. package/src/lib/blocks/time-picker/time-range-picker.svelte +180 -0
  37. package/src/lib/blocks/time-picker/time-slots.ts +61 -0
  38. package/src/lib/blocks/user-avatar/UserAvatar.svelte +36 -0
  39. package/src/lib/blocks/user-avatar/index.ts +1 -0
  40. package/src/lib/blocks/verification-code-field/VerificationCodeField.svelte +57 -0
  41. package/src/lib/blocks/verification-code-field/index.ts +1 -0
  42. package/src/lib/components/accordion/accordion.svelte.ts +43 -0
  43. package/src/lib/components/accordion/components/accordion-content.svelte +17 -0
  44. package/src/lib/components/accordion/components/accordion-item.svelte +58 -0
  45. package/src/lib/components/accordion/components/accordion-trigger.svelte +38 -0
  46. package/src/lib/components/accordion/components/accordion.svelte +24 -0
  47. package/src/lib/components/accordion/index.ts +11 -0
  48. package/src/lib/components/accordion/types.ts +19 -0
  49. package/src/lib/components/alert/alert-action.svelte +11 -0
  50. package/src/lib/components/alert/alert-description.svelte +18 -0
  51. package/src/lib/components/alert/alert-title.svelte +18 -0
  52. package/src/lib/components/alert/alert.svelte +37 -0
  53. package/src/lib/components/alert/index.ts +17 -0
  54. package/src/lib/components/avatar/avatar.svelte.ts +154 -0
  55. package/src/lib/components/avatar/components/avatar-fallback.svelte +38 -0
  56. package/src/lib/components/avatar/components/avatar-image.svelte +47 -0
  57. package/src/lib/components/avatar/components/avatar.svelte +57 -0
  58. package/src/lib/components/avatar/index.ts +9 -0
  59. package/src/lib/components/avatar/types.ts +46 -0
  60. package/src/lib/components/badge/badge.svelte +49 -0
  61. package/src/lib/components/badge/index.ts +1 -0
  62. package/src/lib/components/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
  63. package/src/lib/components/breadcrumb/breadcrumb-item.svelte +11 -0
  64. package/src/lib/components/breadcrumb/breadcrumb-link.svelte +32 -0
  65. package/src/lib/components/breadcrumb/breadcrumb-list.svelte +15 -0
  66. package/src/lib/components/breadcrumb/breadcrumb-page.svelte +18 -0
  67. package/src/lib/components/breadcrumb/breadcrumb-separator.svelte +22 -0
  68. package/src/lib/components/breadcrumb/breadcrumb.svelte +10 -0
  69. package/src/lib/components/breadcrumb/index.ts +25 -0
  70. package/src/lib/components/button/button.svelte +55 -0
  71. package/src/lib/components/button/index.ts +12 -0
  72. package/src/lib/components/button/variants.ts +51 -0
  73. package/src/lib/components/calendar/calendar.svelte.ts +1081 -0
  74. package/src/lib/components/calendar/components/calendar-cell.svelte +34 -0
  75. package/src/lib/components/calendar/components/calendar-day.svelte +36 -0
  76. package/src/lib/components/calendar/components/calendar-grid-body.svelte +29 -0
  77. package/src/lib/components/calendar/components/calendar-grid-head.svelte +29 -0
  78. package/src/lib/components/calendar/components/calendar-grid-row.svelte +29 -0
  79. package/src/lib/components/calendar/components/calendar-grid.svelte +29 -0
  80. package/src/lib/components/calendar/components/calendar-head-cell.svelte +29 -0
  81. package/src/lib/components/calendar/components/calendar-header.svelte +29 -0
  82. package/src/lib/components/calendar/components/calendar-heading.svelte +33 -0
  83. package/src/lib/components/calendar/components/calendar-month-select.svelte +50 -0
  84. package/src/lib/components/calendar/components/calendar-next-button.svelte +37 -0
  85. package/src/lib/components/calendar/components/calendar-prev-button.svelte +37 -0
  86. package/src/lib/components/calendar/components/calendar-year-select.svelte +50 -0
  87. package/src/lib/components/calendar/components/calendar.svelte +123 -0
  88. package/src/lib/components/calendar/exports.ts +31 -0
  89. package/src/lib/components/calendar/index.ts +2 -0
  90. package/src/lib/components/calendar/types.ts +417 -0
  91. package/src/lib/components/card/card-action.svelte +15 -0
  92. package/src/lib/components/card/card-content.svelte +11 -0
  93. package/src/lib/components/card/card-description.svelte +11 -0
  94. package/src/lib/components/card/card-footer.svelte +11 -0
  95. package/src/lib/components/card/card-header.svelte +18 -0
  96. package/src/lib/components/card/card-title.svelte +11 -0
  97. package/src/lib/components/card/card.svelte +15 -0
  98. package/src/lib/components/card/index.ts +25 -0
  99. package/src/lib/components/carousel/carousel-arrow.svelte +42 -0
  100. package/src/lib/components/carousel/carousel-content.svelte +25 -0
  101. package/src/lib/components/carousel/carousel-dots.svelte +21 -0
  102. package/src/lib/components/carousel/carousel-item.svelte +21 -0
  103. package/src/lib/components/carousel/carousel-next.svelte +9 -0
  104. package/src/lib/components/carousel/carousel-previous.svelte +9 -0
  105. package/src/lib/components/carousel/carousel.svelte +245 -0
  106. package/src/lib/components/carousel/carouselState.svelte.ts +30 -0
  107. package/src/lib/components/carousel/index.ts +24 -0
  108. package/src/lib/components/chart/chart-container.svelte +52 -0
  109. package/src/lib/components/chart/chart-style.svelte +29 -0
  110. package/src/lib/components/chart/chart-tooltip.svelte +163 -0
  111. package/src/lib/components/chart/chart-utils.ts +50 -0
  112. package/src/lib/components/chart/index.ts +6 -0
  113. package/src/lib/components/checkbox/checkbox.svelte.ts +199 -0
  114. package/src/lib/components/checkbox/components/checkbox-group-label.svelte +29 -0
  115. package/src/lib/components/checkbox/components/checkbox-group.svelte +48 -0
  116. package/src/lib/components/checkbox/components/checkbox.svelte +85 -0
  117. package/src/lib/components/checkbox/index.ts +9 -0
  118. package/src/lib/components/checkbox/types.ts +131 -0
  119. package/src/lib/components/checkbox-native/checkbox.svelte +96 -0
  120. package/src/lib/components/checkbox-native/index.ts +8 -0
  121. package/src/lib/components/collapsible/components/collapsible-content.svelte +16 -0
  122. package/src/lib/components/collapsible/components/collapsible-trigger.svelte +14 -0
  123. package/src/lib/components/collapsible/components/collapsible.svelte +68 -0
  124. package/src/lib/components/collapsible/index.ts +9 -0
  125. package/src/lib/components/collapsible/types.ts +25 -0
  126. package/src/lib/components/combobox/components/combobox-arrow.svelte +8 -0
  127. package/src/lib/components/combobox/components/combobox-input.svelte +46 -0
  128. package/src/lib/components/combobox/components/combobox-trigger.svelte +44 -0
  129. package/src/lib/components/combobox/components/combobox.svelte +83 -0
  130. package/src/lib/components/combobox/index.ts +30 -0
  131. package/src/lib/components/combobox/select/components/select-content-static.svelte +56 -0
  132. package/src/lib/components/combobox/select/components/select-content.svelte +95 -0
  133. package/src/lib/components/combobox/select/components/select-group-heading.svelte +51 -0
  134. package/src/lib/components/combobox/select/components/select-group.svelte +51 -0
  135. package/src/lib/components/combobox/select/components/select-hidden-input.svelte +16 -0
  136. package/src/lib/components/combobox/select/components/select-item.svelte +86 -0
  137. package/src/lib/components/combobox/select/components/select-scroll-down-button.svelte +41 -0
  138. package/src/lib/components/combobox/select/components/select-scroll-up-button.svelte +34 -0
  139. package/src/lib/components/combobox/select/components/select-trigger.svelte +32 -0
  140. package/src/lib/components/combobox/select/components/select-value.svelte +40 -0
  141. package/src/lib/components/combobox/select/components/select-viewport.svelte +29 -0
  142. package/src/lib/components/combobox/select/components/select.svelte +92 -0
  143. package/src/lib/components/combobox/select/select.svelte.ts +1596 -0
  144. package/src/lib/components/combobox/select/types.ts +291 -0
  145. package/src/lib/components/combobox/types.ts +77 -0
  146. package/src/lib/components/command/command-dialog.svelte +42 -0
  147. package/src/lib/components/command/command.svelte.ts +1506 -0
  148. package/src/lib/components/command/components/_command-label.svelte +31 -0
  149. package/src/lib/components/command/components/command-empty.svelte +34 -0
  150. package/src/lib/components/command/components/command-group-heading.svelte +29 -0
  151. package/src/lib/components/command/components/command-group-items.svelte +31 -0
  152. package/src/lib/components/command/components/command-group.svelte +76 -0
  153. package/src/lib/components/command/components/command-input.svelte +55 -0
  154. package/src/lib/components/command/components/command-item.svelte +61 -0
  155. package/src/lib/components/command/components/command-link-item.svelte +61 -0
  156. package/src/lib/components/command/components/command-list.svelte +41 -0
  157. package/src/lib/components/command/components/command-loading.svelte +30 -0
  158. package/src/lib/components/command/components/command-separator.svelte +34 -0
  159. package/src/lib/components/command/components/command-viewport.svelte +29 -0
  160. package/src/lib/components/command/components/command.svelte +143 -0
  161. package/src/lib/components/command/compute-command-score.ts +207 -0
  162. package/src/lib/components/command/index.ts +29 -0
  163. package/src/lib/components/command/types.ts +222 -0
  164. package/src/lib/components/command/utils.ts +30 -0
  165. package/src/lib/components/context-menu/components/context-menu-content-static.svelte +22 -0
  166. package/src/lib/components/context-menu/components/context-menu-content.svelte +22 -0
  167. package/src/lib/components/context-menu/components/context-menu-trigger.svelte +46 -0
  168. package/src/lib/components/context-menu/components/context-menu.svelte +8 -0
  169. package/src/lib/components/context-menu/index.ts +39 -0
  170. package/src/lib/components/context-menu/types.ts +56 -0
  171. package/src/lib/components/data-table/column-helpers.ts +97 -0
  172. package/src/lib/components/data-table/data-table-checkbox.svelte +25 -0
  173. package/src/lib/components/data-table/data-table-sort-button.svelte +16 -0
  174. package/src/lib/components/data-table/flex-render.svelte +42 -0
  175. package/src/lib/components/data-table/index.ts +29 -0
  176. package/src/lib/components/data-table/render-helpers.ts +105 -0
  177. package/src/lib/components/data-table/table-cell.svelte +9 -0
  178. package/src/lib/components/data-table/table-column-header.svelte +51 -0
  179. package/src/lib/components/data-table/table-faceted-filter.svelte +109 -0
  180. package/src/lib/components/data-table/table-pagination.svelte +54 -0
  181. package/src/lib/components/data-table/table-priority-cell.svelte +22 -0
  182. package/src/lib/components/data-table/table-row-actions.svelte +29 -0
  183. package/src/lib/components/data-table/table-status-cell.svelte +34 -0
  184. package/src/lib/components/data-table/table-title-cell.svelte +24 -0
  185. package/src/lib/components/data-table/table-toolbar.svelte +55 -0
  186. package/src/lib/components/data-table/table-view-options.svelte +25 -0
  187. package/src/lib/components/date-field/components/date-field-hidden-input.svelte +9 -0
  188. package/src/lib/components/date-field/components/date-field-input.svelte +33 -0
  189. package/src/lib/components/date-field/components/date-field-label.svelte +29 -0
  190. package/src/lib/components/date-field/components/date-field-segment.svelte +29 -0
  191. package/src/lib/components/date-field/components/date-field.svelte +106 -0
  192. package/src/lib/components/date-field/date-field.svelte.ts +1474 -0
  193. package/src/lib/components/date-field/index.ts +11 -0
  194. package/src/lib/components/date-field/types.ts +165 -0
  195. package/src/lib/components/date-range-field/components/date-range-field-input.svelte +36 -0
  196. package/src/lib/components/date-range-field/components/date-range-field-label.svelte +29 -0
  197. package/src/lib/components/date-range-field/components/date-range-field.svelte +106 -0
  198. package/src/lib/components/date-range-field/date-range-field.svelte.ts +212 -0
  199. package/src/lib/components/date-range-field/index.ts +11 -0
  200. package/src/lib/components/date-range-field/types.ts +171 -0
  201. package/src/lib/components/dialog/components/dialog-close.svelte +31 -0
  202. package/src/lib/components/dialog/components/dialog-content-headless.svelte +104 -0
  203. package/src/lib/components/dialog/components/dialog-content.svelte +69 -0
  204. package/src/lib/components/dialog/components/dialog-description.svelte +29 -0
  205. package/src/lib/components/dialog/components/dialog-overlay.svelte +31 -0
  206. package/src/lib/components/dialog/components/dialog-title.svelte +30 -0
  207. package/src/lib/components/dialog/components/dialog-trigger.svelte +30 -0
  208. package/src/lib/components/dialog/components/dialog.svelte +21 -0
  209. package/src/lib/components/dialog/components/modal-surface.svelte +131 -0
  210. package/src/lib/components/dialog/dialog.svelte.ts +371 -0
  211. package/src/lib/components/dialog/index.ts +19 -0
  212. package/src/lib/components/dialog/types.ts +105 -0
  213. package/src/lib/components/drawer/drawer-close.svelte +7 -0
  214. package/src/lib/components/drawer/drawer-content.svelte +91 -0
  215. package/src/lib/components/drawer/drawer-description.svelte +8 -0
  216. package/src/lib/components/drawer/drawer-footer.svelte +11 -0
  217. package/src/lib/components/drawer/drawer-header.svelte +11 -0
  218. package/src/lib/components/drawer/drawer-nested.svelte +44 -0
  219. package/src/lib/components/drawer/drawer-overlay.svelte +60 -0
  220. package/src/lib/components/drawer/drawer-portal.svelte +10 -0
  221. package/src/lib/components/drawer/drawer-title.svelte +8 -0
  222. package/src/lib/components/drawer/drawer-trigger.svelte +7 -0
  223. package/src/lib/components/drawer/drawer.svelte +290 -0
  224. package/src/lib/components/drawer/index.ts +37 -0
  225. package/src/lib/components/dropdown-menu/components/dropdown-menu-content-static.svelte +22 -0
  226. package/src/lib/components/dropdown-menu/components/dropdown-menu-content.svelte +22 -0
  227. package/src/lib/components/dropdown-menu/index.ts +39 -0
  228. package/src/lib/components/dropdown-menu/types.ts +41 -0
  229. package/src/lib/components/empty/empty-content.svelte +15 -0
  230. package/src/lib/components/empty/empty-description.svelte +15 -0
  231. package/src/lib/components/empty/empty-header.svelte +15 -0
  232. package/src/lib/components/empty/empty-media.svelte +21 -0
  233. package/src/lib/components/empty/empty-title.svelte +11 -0
  234. package/src/lib/components/empty/empty.svelte +18 -0
  235. package/src/lib/components/empty/index.ts +22 -0
  236. package/src/lib/components/empty/variants.ts +16 -0
  237. package/src/lib/components/field/field-content.svelte +14 -0
  238. package/src/lib/components/field/field-description.svelte +19 -0
  239. package/src/lib/components/field/field-error.svelte +47 -0
  240. package/src/lib/components/field/field-group.svelte +17 -0
  241. package/src/lib/components/field/field-label.svelte +18 -0
  242. package/src/lib/components/field/field-legend.svelte +23 -0
  243. package/src/lib/components/field/field-separator.svelte +32 -0
  244. package/src/lib/components/field/field-set.svelte +14 -0
  245. package/src/lib/components/field/field-title.svelte +14 -0
  246. package/src/lib/components/field/field.svelte +36 -0
  247. package/src/lib/components/field/index.ts +32 -0
  248. package/src/lib/components/field/variants.ts +19 -0
  249. package/src/lib/components/input/file-input.svelte +26 -0
  250. package/src/lib/components/input/index.ts +12 -0
  251. package/src/lib/components/input/input.svelte +24 -0
  252. package/src/lib/components/input/variants.ts +28 -0
  253. package/src/lib/components/item/index.ts +34 -0
  254. package/src/lib/components/item/item-actions.svelte +11 -0
  255. package/src/lib/components/item/item-content.svelte +15 -0
  256. package/src/lib/components/item/item-description.svelte +18 -0
  257. package/src/lib/components/item/item-footer.svelte +11 -0
  258. package/src/lib/components/item/item-group.svelte +16 -0
  259. package/src/lib/components/item/item-header.svelte +11 -0
  260. package/src/lib/components/item/item-media.svelte +37 -0
  261. package/src/lib/components/item/item-separator.svelte +9 -0
  262. package/src/lib/components/item/item-title.svelte +15 -0
  263. package/src/lib/components/item/item.svelte +61 -0
  264. package/src/lib/components/kbd/index.ts +10 -0
  265. package/src/lib/components/kbd/kbd-group.svelte +11 -0
  266. package/src/lib/components/kbd/kbd.svelte +18 -0
  267. package/src/lib/components/label/exports.ts +2 -0
  268. package/src/lib/components/label/index.ts +2 -0
  269. package/src/lib/components/label/label.svelte +39 -0
  270. package/src/lib/components/label/label.svelte.ts +39 -0
  271. package/src/lib/components/label/types.ts +7 -0
  272. package/src/lib/components/link-preview/components/link-preview-content.svelte +60 -0
  273. package/src/lib/components/link-preview/components/link-preview-trigger.svelte +29 -0
  274. package/src/lib/components/link-preview/components/link-preview.svelte +34 -0
  275. package/src/lib/components/link-preview/exports.ts +11 -0
  276. package/src/lib/components/link-preview/index.ts +2 -0
  277. package/src/lib/components/link-preview/link-preview.svelte.ts +270 -0
  278. package/src/lib/components/link-preview/types.ts +102 -0
  279. package/src/lib/components/menu/components/menu-arrow.svelte +14 -0
  280. package/src/lib/components/menu/components/menu-checkbox-group.svelte +42 -0
  281. package/src/lib/components/menu/components/menu-checkbox-item.svelte +85 -0
  282. package/src/lib/components/menu/components/menu-content.svelte +98 -0
  283. package/src/lib/components/menu/components/menu-group-heading.svelte +47 -0
  284. package/src/lib/components/menu/components/menu-group.svelte +36 -0
  285. package/src/lib/components/menu/components/menu-item.svelte +58 -0
  286. package/src/lib/components/menu/components/menu-radio-group.svelte +44 -0
  287. package/src/lib/components/menu/components/menu-radio-item.svelte +65 -0
  288. package/src/lib/components/menu/components/menu-separator.svelte +38 -0
  289. package/src/lib/components/menu/components/menu-sub-content-static.svelte +8 -0
  290. package/src/lib/components/menu/components/menu-sub-content.svelte +133 -0
  291. package/src/lib/components/menu/components/menu-sub-trigger.svelte +60 -0
  292. package/src/lib/components/menu/components/menu-sub.svelte +23 -0
  293. package/src/lib/components/menu/components/menu-trigger.svelte +50 -0
  294. package/src/lib/components/menu/components/menu.svelte +58 -0
  295. package/src/lib/components/menu/exports.ts +38 -0
  296. package/src/lib/components/menu/menu.svelte.ts +1599 -0
  297. package/src/lib/components/menu/types.ts +285 -0
  298. package/src/lib/components/menu/utils.ts +68 -0
  299. package/src/lib/components/menubar/components/menubar-content-static.svelte +50 -0
  300. package/src/lib/components/menubar/components/menubar-content.svelte +54 -0
  301. package/src/lib/components/menubar/components/menubar-menu.svelte +34 -0
  302. package/src/lib/components/menubar/components/menubar-trigger.svelte +50 -0
  303. package/src/lib/components/menubar/components/menubar.svelte +57 -0
  304. package/src/lib/components/menubar/exports.ts +44 -0
  305. package/src/lib/components/menubar/index.ts +2 -0
  306. package/src/lib/components/menubar/menubar.svelte.ts +394 -0
  307. package/src/lib/components/menubar/types.ts +97 -0
  308. package/src/lib/components/meter/components/meter.svelte +41 -0
  309. package/src/lib/components/meter/exports.ts +2 -0
  310. package/src/lib/components/meter/index.ts +2 -0
  311. package/src/lib/components/meter/meter.svelte.ts +47 -0
  312. package/src/lib/components/meter/types.ts +28 -0
  313. package/src/lib/components/navigation-menu/components/navigation-menu-content-impl.svelte +85 -0
  314. package/src/lib/components/navigation-menu/components/navigation-menu-content.svelte +58 -0
  315. package/src/lib/components/navigation-menu/components/navigation-menu-indicator-impl.svelte +29 -0
  316. package/src/lib/components/navigation-menu/components/navigation-menu-indicator.svelte +56 -0
  317. package/src/lib/components/navigation-menu/components/navigation-menu-item.svelte +56 -0
  318. package/src/lib/components/navigation-menu/components/navigation-menu-link.svelte +64 -0
  319. package/src/lib/components/navigation-menu/components/navigation-menu-list.svelte +59 -0
  320. package/src/lib/components/navigation-menu/components/navigation-menu-sub.svelte +46 -0
  321. package/src/lib/components/navigation-menu/components/navigation-menu-trigger.svelte +80 -0
  322. package/src/lib/components/navigation-menu/components/navigation-menu-viewport.svelte +63 -0
  323. package/src/lib/components/navigation-menu/components/navigation-menu.svelte +80 -0
  324. package/src/lib/components/navigation-menu/index.ts +28 -0
  325. package/src/lib/components/navigation-menu/navigation-menu.svelte.ts +1092 -0
  326. package/src/lib/components/navigation-menu/types.ts +189 -0
  327. package/src/lib/components/pagination/components/pagination-next-button.svelte +60 -0
  328. package/src/lib/components/pagination/components/pagination-page.svelte +65 -0
  329. package/src/lib/components/pagination/components/pagination-prev-button.svelte +60 -0
  330. package/src/lib/components/pagination/components/pagination.svelte +65 -0
  331. package/src/lib/components/pagination/index.ts +11 -0
  332. package/src/lib/components/pagination/pagination.svelte.ts +275 -0
  333. package/src/lib/components/pagination/types.ts +100 -0
  334. package/src/lib/components/pin-input/components/pin-input-cell.svelte +49 -0
  335. package/src/lib/components/pin-input/components/pin-input.svelte +76 -0
  336. package/src/lib/components/pin-input/exports.ts +4 -0
  337. package/src/lib/components/pin-input/index.ts +2 -0
  338. package/src/lib/components/pin-input/pin-input.svelte.ts +541 -0
  339. package/src/lib/components/pin-input/types.ts +118 -0
  340. package/src/lib/components/pin-input/usePasswordManager.svelte.ts +122 -0
  341. package/src/lib/components/popover/components/popover-close.svelte +38 -0
  342. package/src/lib/components/popover/components/popover-content.svelte +70 -0
  343. package/src/lib/components/popover/components/popover-header.svelte +11 -0
  344. package/src/lib/components/popover/components/popover-title.svelte +11 -0
  345. package/src/lib/components/popover/components/popover-trigger.svelte +44 -0
  346. package/src/lib/components/popover/components/popover.svelte +26 -0
  347. package/src/lib/components/popover/exports.ts +13 -0
  348. package/src/lib/components/popover/index.ts +2 -0
  349. package/src/lib/components/popover/popover.svelte.ts +392 -0
  350. package/src/lib/components/popover/types.ts +92 -0
  351. package/src/lib/components/progress/components/progress.svelte +56 -0
  352. package/src/lib/components/progress/exports.ts +3 -0
  353. package/src/lib/components/progress/index.ts +2 -0
  354. package/src/lib/components/progress/progress.svelte.ts +58 -0
  355. package/src/lib/components/progress/types.ts +28 -0
  356. package/src/lib/components/radio-group/context.ts +13 -0
  357. package/src/lib/components/radio-group/index.ts +10 -0
  358. package/src/lib/components/radio-group/radio-group-item.svelte +67 -0
  359. package/src/lib/components/radio-group/radio-group.svelte +87 -0
  360. package/src/lib/components/range-calendar/components/range-calendar-cell.svelte +31 -0
  361. package/src/lib/components/range-calendar/components/range-calendar-day.svelte +33 -0
  362. package/src/lib/components/range-calendar/components/range-calendar.svelte +120 -0
  363. package/src/lib/components/range-calendar/exports.ts +31 -0
  364. package/src/lib/components/range-calendar/index.ts +2 -0
  365. package/src/lib/components/range-calendar/range-calendar.svelte.ts +739 -0
  366. package/src/lib/components/range-calendar/types.ts +258 -0
  367. package/src/lib/components/resizable/index.ts +15 -0
  368. package/src/lib/components/resizable/resizable-handle.svelte +30 -0
  369. package/src/lib/components/resizable/resizable-pane-group.svelte +19 -0
  370. package/src/lib/components/scroll-area/components/scroll-area-corner-impl.svelte +34 -0
  371. package/src/lib/components/scroll-area/components/scroll-area-corner.svelte +18 -0
  372. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-auto.svelte +15 -0
  373. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-hover.svelte +22 -0
  374. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-scroll.svelte +16 -0
  375. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-shared.svelte +19 -0
  376. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-visible.svelte +16 -0
  377. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-x.svelte +23 -0
  378. package/src/lib/components/scroll-area/components/scroll-area-scrollbar-y.svelte +24 -0
  379. package/src/lib/components/scroll-area/components/scroll-area-scrollbar.svelte +56 -0
  380. package/src/lib/components/scroll-area/components/scroll-area-thumb-impl.svelte +49 -0
  381. package/src/lib/components/scroll-area/components/scroll-area-thumb.svelte +21 -0
  382. package/src/lib/components/scroll-area/components/scroll-area-viewport.svelte +39 -0
  383. package/src/lib/components/scroll-area/components/scroll-area.svelte +82 -0
  384. package/src/lib/components/scroll-area/exports.ts +13 -0
  385. package/src/lib/components/scroll-area/index.ts +2 -0
  386. package/src/lib/components/scroll-area/scroll-area.svelte.ts +946 -0
  387. package/src/lib/components/scroll-area/types.ts +67 -0
  388. package/src/lib/components/select/index.ts +5 -0
  389. package/src/lib/components/select/select-opt-group.svelte +10 -0
  390. package/src/lib/components/select/select-option.svelte +15 -0
  391. package/src/lib/components/select/select.svelte +281 -0
  392. package/src/lib/components/separator/components/separator.svelte +49 -0
  393. package/src/lib/components/separator/index.ts +3 -0
  394. package/src/lib/components/separator/separator.svelte.ts +43 -0
  395. package/src/lib/components/separator/types.ts +22 -0
  396. package/src/lib/components/sheet/components/sheet-close.svelte +8 -0
  397. package/src/lib/components/sheet/components/sheet-content.svelte +108 -0
  398. package/src/lib/components/sheet/components/sheet-description.svelte +9 -0
  399. package/src/lib/components/sheet/components/sheet-footer.svelte +11 -0
  400. package/src/lib/components/sheet/components/sheet-header.svelte +11 -0
  401. package/src/lib/components/sheet/components/sheet-overlay.svelte +13 -0
  402. package/src/lib/components/sheet/components/sheet-title.svelte +9 -0
  403. package/src/lib/components/sheet/components/sheet-trigger.svelte +8 -0
  404. package/src/lib/components/sheet/index.ts +47 -0
  405. package/src/lib/components/sheet/variants.ts +20 -0
  406. package/src/lib/components/sidebar/constants.ts +6 -0
  407. package/src/lib/components/sidebar/context.svelte.ts +54 -0
  408. package/src/lib/components/sidebar/index.ts +77 -0
  409. package/src/lib/components/sidebar/sidebar-content.svelte +16 -0
  410. package/src/lib/components/sidebar/sidebar-desktop-surface.svelte +60 -0
  411. package/src/lib/components/sidebar/sidebar-footer.svelte +11 -0
  412. package/src/lib/components/sidebar/sidebar-group-action.svelte +34 -0
  413. package/src/lib/components/sidebar/sidebar-group-content.svelte +16 -0
  414. package/src/lib/components/sidebar/sidebar-group-label.svelte +34 -0
  415. package/src/lib/components/sidebar/sidebar-group.svelte +16 -0
  416. package/src/lib/components/sidebar/sidebar-header.svelte +11 -0
  417. package/src/lib/components/sidebar/sidebar-input.svelte +14 -0
  418. package/src/lib/components/sidebar/sidebar-inset.svelte +18 -0
  419. package/src/lib/components/sidebar/sidebar-menu-action.svelte +38 -0
  420. package/src/lib/components/sidebar/sidebar-menu-badge.svelte +19 -0
  421. package/src/lib/components/sidebar/sidebar-menu-button.svelte +99 -0
  422. package/src/lib/components/sidebar/sidebar-menu-item.svelte +21 -0
  423. package/src/lib/components/sidebar/sidebar-menu-skeleton.svelte +34 -0
  424. package/src/lib/components/sidebar/sidebar-menu-sub-button.svelte +40 -0
  425. package/src/lib/components/sidebar/sidebar-menu-sub-item.svelte +16 -0
  426. package/src/lib/components/sidebar/sidebar-menu-sub.svelte +19 -0
  427. package/src/lib/components/sidebar/sidebar-menu.svelte +21 -0
  428. package/src/lib/components/sidebar/sidebar-mobile-surface.svelte +48 -0
  429. package/src/lib/components/sidebar/sidebar-provider.svelte +60 -0
  430. package/src/lib/components/sidebar/sidebar-rail.svelte +36 -0
  431. package/src/lib/components/sidebar/sidebar-separator.svelte +9 -0
  432. package/src/lib/components/sidebar/sidebar-trigger.svelte +35 -0
  433. package/src/lib/components/sidebar/sidebar.svelte +30 -0
  434. package/src/lib/components/sidebar/types.ts +14 -0
  435. package/src/lib/components/skeleton/index.ts +7 -0
  436. package/src/lib/components/skeleton/skeleton.svelte +9 -0
  437. package/src/lib/components/slider/components/slider-range.svelte +37 -0
  438. package/src/lib/components/slider/components/slider-thumb-label.svelte +42 -0
  439. package/src/lib/components/slider/components/slider-thumb.svelte +46 -0
  440. package/src/lib/components/slider/components/slider-tick-label.svelte +42 -0
  441. package/src/lib/components/slider/components/slider-tick.svelte +28 -0
  442. package/src/lib/components/slider/components/slider.svelte +136 -0
  443. package/src/lib/components/slider/helpers.ts +249 -0
  444. package/src/lib/components/slider/index.ts +15 -0
  445. package/src/lib/components/slider/slider.svelte.ts +979 -0
  446. package/src/lib/components/slider/types.ts +294 -0
  447. package/src/lib/components/sonner/Toast.svelte +558 -0
  448. package/src/lib/components/sonner/Toaster.svelte +603 -0
  449. package/src/lib/components/sonner/index.ts +15 -0
  450. package/src/lib/components/sonner/toast-state.svelte.ts +217 -0
  451. package/src/lib/components/sonner/types.ts +384 -0
  452. package/src/lib/components/switch/index.ts +8 -0
  453. package/src/lib/components/switch/switch.svelte +78 -0
  454. package/src/lib/components/table/index.ts +28 -0
  455. package/src/lib/components/table/table-body.svelte +15 -0
  456. package/src/lib/components/table/table-caption.svelte +10 -0
  457. package/src/lib/components/table/table-cell.svelte +14 -0
  458. package/src/lib/components/table/table-footer.svelte +19 -0
  459. package/src/lib/components/table/table-head.svelte +17 -0
  460. package/src/lib/components/table/table-header.svelte +15 -0
  461. package/src/lib/components/table/table-row.svelte +14 -0
  462. package/src/lib/components/table/table.svelte +12 -0
  463. package/src/lib/components/tabs/components/tabs-content.svelte +30 -0
  464. package/src/lib/components/tabs/components/tabs-list.svelte +38 -0
  465. package/src/lib/components/tabs/components/tabs-trigger.svelte +51 -0
  466. package/src/lib/components/tabs/components/tabs.svelte +52 -0
  467. package/src/lib/components/tabs/index.ts +11 -0
  468. package/src/lib/components/tabs/tabs.svelte.ts +253 -0
  469. package/src/lib/components/tabs/types.ts +86 -0
  470. package/src/lib/components/textarea/index.ts +7 -0
  471. package/src/lib/components/textarea/textarea.svelte +23 -0
  472. package/src/lib/components/theme-toggle/index.ts +5 -0
  473. package/src/lib/components/theme-toggle/theme-toggle.svelte +49 -0
  474. package/src/lib/components/theme-toggle/theme.svelte.ts +81 -0
  475. package/src/lib/components/time-field/components/time-field-hidden-input.svelte +9 -0
  476. package/src/lib/components/time-field/components/time-field-input.svelte +33 -0
  477. package/src/lib/components/time-field/components/time-field-label.svelte +29 -0
  478. package/src/lib/components/time-field/components/time-field-segment.svelte +29 -0
  479. package/src/lib/components/time-field/components/time-field.svelte +99 -0
  480. package/src/lib/components/time-field/index.ts +11 -0
  481. package/src/lib/components/time-field/time-field.svelte.ts +1198 -0
  482. package/src/lib/components/time-field/types.ts +174 -0
  483. package/src/lib/components/time-range-field/components/time-range-field-input.svelte +36 -0
  484. package/src/lib/components/time-range-field/components/time-range-field-label.svelte +29 -0
  485. package/src/lib/components/time-range-field/components/time-range-field.svelte +104 -0
  486. package/src/lib/components/time-range-field/index.ts +11 -0
  487. package/src/lib/components/time-range-field/time-range-field.svelte.ts +235 -0
  488. package/src/lib/components/time-range-field/types.ts +181 -0
  489. package/src/lib/components/toggle/components/toggle.svelte +55 -0
  490. package/src/lib/components/toggle/index.ts +3 -0
  491. package/src/lib/components/toggle/toggle.svelte.ts +57 -0
  492. package/src/lib/components/toggle/types.ts +33 -0
  493. package/src/lib/components/toggle/variants.ts +25 -0
  494. package/src/lib/components/toggle-group/components/toggle-group-item.svelte +67 -0
  495. package/src/lib/components/toggle-group/components/toggle-group.svelte +109 -0
  496. package/src/lib/components/toggle-group/index.ts +7 -0
  497. package/src/lib/components/toggle-group/toggle-group.svelte.ts +235 -0
  498. package/src/lib/components/toggle-group/types.ts +89 -0
  499. package/src/lib/components/toolbar/components/toolbar-button.svelte +46 -0
  500. package/src/lib/components/toolbar/components/toolbar-group-item.svelte +56 -0
  501. package/src/lib/components/toolbar/components/toolbar-group.svelte +69 -0
  502. package/src/lib/components/toolbar/components/toolbar-link.svelte +39 -0
  503. package/src/lib/components/toolbar/components/toolbar.svelte +39 -0
  504. package/src/lib/components/toolbar/index.ts +13 -0
  505. package/src/lib/components/toolbar/toolbar.svelte.ts +373 -0
  506. package/src/lib/components/toolbar/types.ts +60 -0
  507. package/src/lib/components/tooltip/components/tooltip-content.svelte +81 -0
  508. package/src/lib/components/tooltip/components/tooltip-provider.svelte +26 -0
  509. package/src/lib/components/tooltip/components/tooltip-trigger.svelte +48 -0
  510. package/src/lib/components/tooltip/components/tooltip.svelte +55 -0
  511. package/src/lib/components/tooltip/index.ts +17 -0
  512. package/src/lib/components/tooltip/tooltip.svelte.ts +796 -0
  513. package/src/lib/components/tooltip/types.ts +175 -0
  514. package/src/lib/components/tooltip/utils.ts +1 -0
  515. package/src/lib/icons/google-icon.svelte +10 -0
  516. package/src/lib/icons/google-workspace.svelte +18 -0
  517. package/src/lib/icons/icon.d.ts +19 -0
  518. package/src/lib/icons/instagram.svelte +9 -0
  519. package/src/lib/icons/instantly.svelte +10 -0
  520. package/src/lib/icons/linkedin.svelte +9 -0
  521. package/src/lib/icons/mailshake.svelte +10 -0
  522. package/src/lib/icons/microsoft-365.svelte +7 -0
  523. package/src/lib/icons/passcode.svelte +12 -0
  524. package/src/lib/icons/replyio.svelte +10 -0
  525. package/src/lib/icons/smartlead.svelte +19 -0
  526. package/src/lib/icons/smtp.svelte +10 -0
  527. package/src/lib/icons/x-logo.svelte +9 -0
  528. package/src/lib/internal/animations-settled.svelte.ts +119 -0
  529. package/src/lib/internal/arrays.ts +253 -0
  530. package/src/lib/internal/attribute-types.ts +53 -0
  531. package/src/lib/internal/attrs.ts +64 -0
  532. package/src/lib/internal/body-scroll-lock.svelte.ts +330 -0
  533. package/src/lib/internal/create-id.ts +12 -0
  534. package/src/lib/internal/date-time/announcer.ts +74 -0
  535. package/src/lib/internal/date-time/calendar-helpers.svelte.ts +399 -0
  536. package/src/lib/internal/date-time/field/helpers.ts +431 -0
  537. package/src/lib/internal/date-time/field/parts.ts +15 -0
  538. package/src/lib/internal/date-time/field/range-field.svelte.ts +45 -0
  539. package/src/lib/internal/date-time/field/segments.ts +89 -0
  540. package/src/lib/internal/date-time/field/time-helpers.ts +311 -0
  541. package/src/lib/internal/date-time/formatter.ts +86 -0
  542. package/src/lib/internal/date-time/placeholders.ts +131 -0
  543. package/src/lib/internal/date-time/types.ts +121 -0
  544. package/src/lib/internal/date-time/utils.ts +243 -0
  545. package/src/lib/internal/dismissible-layer/index.ts +3 -0
  546. package/src/lib/internal/dismissible-layer/scheduler.ts +48 -0
  547. package/src/lib/internal/dismissible-layer/types.ts +57 -0
  548. package/src/lib/internal/dismissible-layer/use-dismissable-layer.svelte.ts +291 -0
  549. package/src/lib/internal/escape-layer/index.ts +3 -0
  550. package/src/lib/internal/escape-layer/types.ts +34 -0
  551. package/src/lib/internal/escape-layer/use-escape-layer.svelte.ts +91 -0
  552. package/src/lib/internal/floating-layer/components/floating-layer-arrow.svelte +35 -0
  553. package/src/lib/internal/floating-layer/components/floating-layer-content-static.svelte +19 -0
  554. package/src/lib/internal/floating-layer/components/floating-layer-content.svelte +52 -0
  555. package/src/lib/internal/floating-layer/components/floating-layer.svelte +12 -0
  556. package/src/lib/internal/floating-layer/components/index.ts +6 -0
  557. package/src/lib/internal/floating-layer/index.ts +2 -0
  558. package/src/lib/internal/floating-layer/types.ts +126 -0
  559. package/src/lib/internal/floating-layer/use-floating-layer.svelte.ts +471 -0
  560. package/src/lib/internal/focus-scope/focus-scope.svelte.ts +310 -0
  561. package/src/lib/internal/focus-scope/index.ts +4 -0
  562. package/src/lib/internal/focus-scope/types.ts +45 -0
  563. package/src/lib/internal/focus.ts +14 -0
  564. package/src/lib/internal/global-singleton.ts +10 -0
  565. package/src/lib/internal/group-value.svelte.ts +36 -0
  566. package/src/lib/internal/hover-intent-geometry.ts +96 -0
  567. package/src/lib/internal/index.ts +44 -0
  568. package/src/lib/internal/kbd.ts +60 -0
  569. package/src/lib/internal/layer-stack.ts +37 -0
  570. package/src/lib/internal/math.ts +11 -0
  571. package/src/lib/internal/merge-props.ts +7 -0
  572. package/src/lib/internal/native-dialog-controller.svelte.ts +102 -0
  573. package/src/lib/internal/native-popover.svelte.ts +173 -0
  574. package/src/lib/internal/open-cell.svelte.ts +41 -0
  575. package/src/lib/internal/paneforge/index.ts +5 -0
  576. package/src/lib/internal/paneforge/internal/constants.ts +2 -0
  577. package/src/lib/internal/paneforge/internal/helpers.ts +354 -0
  578. package/src/lib/internal/paneforge/internal/types.ts +33 -0
  579. package/src/lib/internal/paneforge/internal/utils/adjust-layout.ts +122 -0
  580. package/src/lib/internal/paneforge/internal/utils/aria.ts +36 -0
  581. package/src/lib/internal/paneforge/internal/utils/compare.ts +15 -0
  582. package/src/lib/internal/paneforge/internal/utils/is.ts +13 -0
  583. package/src/lib/internal/paneforge/internal/utils/resize.ts +31 -0
  584. package/src/lib/internal/paneforge/internal/utils/storage.ts +116 -0
  585. package/src/lib/internal/paneforge/internal/utils/style.ts +104 -0
  586. package/src/lib/internal/paneforge/pane-group.svelte +48 -0
  587. package/src/lib/internal/paneforge/pane-resizer.svelte +40 -0
  588. package/src/lib/internal/paneforge/pane.svelte +60 -0
  589. package/src/lib/internal/paneforge/paneforge.svelte.ts +821 -0
  590. package/src/lib/internal/paneforge/types.ts +179 -0
  591. package/src/lib/internal/popper-layer/index.ts +2 -0
  592. package/src/lib/internal/popper-layer/popper-content.svelte +19 -0
  593. package/src/lib/internal/popper-layer/popper-layer-inner.svelte +122 -0
  594. package/src/lib/internal/popper-layer/popper-layer.svelte +71 -0
  595. package/src/lib/internal/popper-layer/types.ts +65 -0
  596. package/src/lib/internal/portal/index.ts +2 -0
  597. package/src/lib/internal/portal/portal.svelte +61 -0
  598. package/src/lib/internal/prop-resolvers.ts +14 -0
  599. package/src/lib/internal/roving-focus-group.ts +147 -0
  600. package/src/lib/internal/roving-focus-item.svelte.ts +51 -0
  601. package/src/lib/internal/safe-polygon.svelte.ts +239 -0
  602. package/src/lib/internal/shared-state.svelte.ts +39 -0
  603. package/src/lib/internal/state-machine.ts +32 -0
  604. package/src/lib/internal/svelte-resize-observer.svelte.ts +37 -0
  605. package/src/lib/internal/tabbable.ts +398 -0
  606. package/src/lib/internal/table/core.ts +53 -0
  607. package/src/lib/internal/table/filter-fns.ts +10 -0
  608. package/src/lib/internal/table/index.ts +2 -0
  609. package/src/lib/internal/table/sorting-fns.ts +84 -0
  610. package/src/lib/internal/table/table.svelte.ts +330 -0
  611. package/src/lib/internal/table/types.ts +33 -0
  612. package/src/lib/internal/timeout-fn.svelte.ts +36 -0
  613. package/src/lib/internal/tools/box.svelte.ts +153 -0
  614. package/src/lib/internal/tools/index.ts +22 -0
  615. package/src/lib/internal/tools/types.ts +44 -0
  616. package/src/lib/internal/tools/utils/attach-ref.ts +74 -0
  617. package/src/lib/internal/tools/utils/compose-handlers.ts +36 -0
  618. package/src/lib/internal/tools/utils/dom-context.svelte.ts +63 -0
  619. package/src/lib/internal/tools/utils/dom.ts +62 -0
  620. package/src/lib/internal/tools/utils/events.ts +1 -0
  621. package/src/lib/internal/tools/utils/index.ts +5 -0
  622. package/src/lib/internal/tools/utils/strings.ts +28 -0
  623. package/src/lib/internal/typeahead.svelte.ts +48 -0
  624. package/src/lib/internal/types.ts +119 -0
  625. package/src/lib/internal/utils.ts +10 -0
  626. package/src/lib/internal/vaul/browser.ts +8 -0
  627. package/src/lib/internal/vaul/constants.ts +19 -0
  628. package/src/lib/internal/vaul/helpers.ts +39 -0
  629. package/src/lib/internal/vaul/types.ts +142 -0
  630. package/src/lib/internal/vaul/use-drawer-content.svelte.ts +219 -0
  631. package/src/lib/internal/vaul/use-drawer-root.svelte.ts +682 -0
  632. package/src/lib/internal/vaul/use-position-fixed.svelte.ts +142 -0
  633. package/src/lib/internal/vaul/use-prevent-scroll.svelte.ts +267 -0
  634. package/src/lib/internal/vaul/use-snap-points.svelte.ts +246 -0
  635. package/src/lib/time.ts +73 -0
@@ -0,0 +1,171 @@
1
+ import type { DateValue } from '@internationalized/date';
2
+ import type { OnChangeFn, WithChild, Without } from '../../internal/types.js';
3
+ import type { BitsPrimitiveDivAttributes, BitsPrimitiveSpanAttributes } from '../../internal/attribute-types.js';
4
+ import type { DateOnInvalid, DateRange, DateRangeValidator, EditableSegmentPart, SegmentPart } from '../../internal/index.js';
5
+ import type { DateFieldSegmentProps, DateFieldSegmentPropsWithoutHTML } from '../date-field/types.js';
6
+ import type { Granularity } from '../../internal/date-time/types.js';
7
+
8
+ export type DateRangeFieldRootPropsWithoutHTML = WithChild<{
9
+ /**
10
+ * The value of the date range field.
11
+ *
12
+ * @bindable
13
+ */
14
+ value?: DateRange;
15
+
16
+ /**
17
+ * A callback that is called when the value of the date range field changes.
18
+ */
19
+ onValueChange?: OnChangeFn<DateRange | undefined>;
20
+
21
+ /**
22
+ * The placeholder value of the date field. This determines the format
23
+ * and what date the field starts at when it is empty.
24
+ *
25
+ * @bindable
26
+ */
27
+ placeholder?: DateValue;
28
+
29
+ /**
30
+ * A callback that is called when the date field's placeholder value changes.
31
+ */
32
+ onPlaceholderChange?: OnChangeFn<DateValue | undefined>;
33
+
34
+ /**
35
+ * A function that returns a string or array of strings as validation errors if the date is
36
+ * invalid, or nothing if the date is valid
37
+ */
38
+ validate?: DateRangeValidator;
39
+
40
+ /**
41
+ * A callback fired when the date field's value is invalid. Use this to display an error
42
+ * message to the user.
43
+ */
44
+ onInvalid?: DateOnInvalid;
45
+
46
+ /**
47
+ * The minimum acceptable date. When provided, the date field
48
+ * will be marked as invalid if the user enters a date before this date.
49
+ */
50
+ minValue?: DateValue;
51
+
52
+ /**
53
+ * The maximum acceptable date. When provided, the date field
54
+ * will be marked as invalid if the user enters a date after this date.
55
+ */
56
+ maxValue?: DateValue;
57
+
58
+ /**
59
+ * If true, the date field will be disabled and users will not be able
60
+ * to interact with it. This also disables the hidden input element if
61
+ * the date field is used in a form.
62
+ *
63
+ * @defaultValue false
64
+ */
65
+ disabled?: boolean;
66
+
67
+ /**
68
+ * If true, the date field will be readonly, and users will not be able to
69
+ * edit the values of any of the individual segments.
70
+ *
71
+ * @defaultValue false
72
+ */
73
+ readonly?: boolean;
74
+
75
+ /**
76
+ * If true, the date field will be required, which is useful when used within
77
+ * a form. If the date field is empty when the form is submitted, the form
78
+ * will not be valid.
79
+ *
80
+ * @defaultValue false
81
+ */
82
+ required?: boolean;
83
+
84
+ /**
85
+ * An array of segment names that should be readonly. If provided, only the
86
+ * segments not in this array will be editable.
87
+ */
88
+ readonlySegments?: EditableSegmentPart[];
89
+
90
+ /**
91
+ * The format to use for displaying the time in the input.
92
+ * If using a 12 hour clock, ensure you also include the `dayPeriod`
93
+ * segment in your input to ensure the user can select AM/PM.
94
+ *
95
+ * @defaultValue the locale's default time format
96
+ */
97
+ hourCycle?: 12 | 24;
98
+
99
+ /**
100
+ * The locale to use for formatting the date field.
101
+ *
102
+ * @defaultValue 'en'
103
+ */
104
+ locale?: string;
105
+
106
+ /**
107
+ * The granularity of the date field. This determines which
108
+ * segments will be includes in the segments array used to
109
+ * build the date field.
110
+ *
111
+ * By default, when a `CalendarDate` value is used, the granularity
112
+ * will default to `'day'`, and when a `CalendarDateTime` or `ZonedDateTime`
113
+ * value is used, the granularity will default to `'minute'`.
114
+ *
115
+ * Granularity is only used for visual purposes, and does not impact
116
+ * the value of the date field. You can have the same value synced
117
+ * between multiple date fields with different granularities and they
118
+ * will all contain the same value.
119
+ *
120
+ * @defaultValue 'day'
121
+ */
122
+ granularity?: Granularity;
123
+
124
+ /**
125
+ * Whether or not to hide the timeZoneName segment from the date field.
126
+ *
127
+ * @defaultValue false;
128
+ */
129
+ hideTimeZone?: boolean;
130
+
131
+ /**
132
+ * The `id` of the element which contains the error messages for the date field when the
133
+ * date is invalid.
134
+ */
135
+ errorMessageId?: string;
136
+ }>;
137
+
138
+ export type DateRangeFieldRootProps = DateRangeFieldRootPropsWithoutHTML &
139
+ Without<BitsPrimitiveDivAttributes, DateRangeFieldRootPropsWithoutHTML>;
140
+
141
+ export type DateRangeFieldLabelPropsWithoutHTML = WithChild;
142
+
143
+ export type DateRangeFieldLabelProps = DateRangeFieldLabelPropsWithoutHTML &
144
+ Without<BitsPrimitiveSpanAttributes, DateRangeFieldLabelPropsWithoutHTML>;
145
+
146
+ export type DateRangeFieldInputSnippetProps = {
147
+ segments: Array<{ part: SegmentPart; value: string }>;
148
+ };
149
+
150
+ export type DateRangeFieldInputPropsWithoutHTML = WithChild<
151
+ {
152
+ /**
153
+ * The name to use for the hidden input element associated with this input
154
+ * used for form submission.
155
+ */
156
+ name?: string;
157
+
158
+ /**
159
+ * Whether this input represents the start or end of the date range.
160
+ */
161
+ type: 'start' | 'end';
162
+ },
163
+ DateRangeFieldInputSnippetProps
164
+ >;
165
+
166
+ export type DateRangeFieldInputProps = DateRangeFieldInputPropsWithoutHTML &
167
+ Without<BitsPrimitiveDivAttributes, DateRangeFieldInputPropsWithoutHTML>;
168
+
169
+ export type DateRangeFieldSegmentPropsWithoutHTML = DateFieldSegmentPropsWithoutHTML;
170
+
171
+ export type DateRangeFieldSegmentProps = DateFieldSegmentProps;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogCloseState } from '../dialog.svelte.js';
5
+ import type { DialogCloseProps } from '../types.js';
6
+ import { createId } from '../../../internal/create-id.js';
7
+
8
+ const uid = $props.id();
9
+
10
+ let { children, child, id = createId(uid), ref = $bindable(null), disabled = false, ...restProps }: DialogCloseProps = $props();
11
+
12
+ const closeState = DialogCloseState.create({
13
+ variant: boxWith(() => 'close'),
14
+ id: boxWith(() => id),
15
+ ref: boxWith(
16
+ () => ref,
17
+ (v) => (ref = v),
18
+ ),
19
+ disabled: boxWith(() => Boolean(disabled)),
20
+ });
21
+
22
+ const mergedProps = $derived(mergeProps({ 'data-slot': 'dialog-close' }, restProps, closeState.props));
23
+ </script>
24
+
25
+ {#if child}
26
+ {@render child({ props: mergedProps })}
27
+ {:else}
28
+ <button {...mergedProps}>
29
+ {@render children?.()}
30
+ </button>
31
+ {/if}
@@ -0,0 +1,104 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogContentState } from '../dialog.svelte.js';
5
+ import type { DialogContentProps } from '../types.js';
6
+ import { interactOutsideAttachment } from '../../../internal/dismissible-layer/use-dismissable-layer.svelte.js';
7
+ import { escapeKeydownAttachment } from '../../../internal/escape-layer/use-escape-layer.svelte.js';
8
+ import { createFocusScopeProps } from '../../../internal/focus-scope/focus-scope.svelte.js';
9
+ import { createId } from '../../../internal/create-id.js';
10
+ import { scrollLockAttachment } from '../../../internal/body-scroll-lock.svelte.js';
11
+
12
+ /**
13
+ * Headless JS-overlay dialog content — an always-mounted <div> (visibility:hidden while closed;
14
+ * the drawer's exit keyframes hold it visible) with the FocusScope / EscapeLayer /
15
+ * DismissibleLayer / ScrollLock stack and the CSS text-selection guard. The public Dialog.Content is now the native <dialog>
16
+ * (dialog-content.svelte); this variant survives ONLY for the Drawer, whose vaul drag physics need a
17
+ * draggable in-flow <div> and cannot live in the top layer. Keep in sync with the shared Dialog state
18
+ * cell — it is the same DialogContentState, just rendered as a div instead of a modal <dialog>.
19
+ */
20
+ const uid = $props.id();
21
+
22
+ let {
23
+ id = createId(uid),
24
+ children,
25
+ child,
26
+ ref = $bindable(null),
27
+ onCloseAutoFocus = () => {},
28
+ onOpenAutoFocus = () => {},
29
+ onEscapeKeydown = () => {},
30
+ onInteractOutside = () => {},
31
+ trapFocus = true,
32
+ preventScroll = true,
33
+ restoreScrollDelay = null,
34
+ ...restProps
35
+ }: DialogContentProps = $props();
36
+
37
+ const contentState = DialogContentState.create({
38
+ id: boxWith(() => id),
39
+ ref: boxWith(
40
+ () => ref,
41
+ (v) => (ref = v),
42
+ ),
43
+ });
44
+
45
+ // Closed state, on this element only (DialogContentState.props is shared with the native
46
+ // modal surface). The scroll lock's body styles land a tick after opening, after vaul's
47
+ // open effect has snapshotted them, as they did when the mount gate flipped a flush later.
48
+ const mergedProps = $derived(mergeProps(restProps, contentState.props, { style: contentState.root.cell.open ? {} : { visibility: 'hidden' } }));
49
+
50
+ const escapeAttachment = escapeKeydownAttachment({
51
+ escapeKeydownBehavior: () => restProps.escapeKeydownBehavior ?? 'close',
52
+ onEscapeKeydown: () => (e) => {
53
+ onEscapeKeydown(e);
54
+ if (e.defaultPrevented) return;
55
+ contentState.root.handleClose();
56
+ },
57
+ enabled: () => contentState.root.cell.open,
58
+ });
59
+
60
+ // Dialog content historically dropped the dismissible focus-capture props (its default-slot
61
+ // usage never threaded them), so only `dismissible.attachment` is merged below.
62
+ const dismissible = interactOutsideAttachment({
63
+ id: () => id,
64
+ interactOutsideBehavior: () => restProps.interactOutsideBehavior ?? 'close',
65
+ onInteractOutside: () => (e) => {
66
+ onInteractOutside(e);
67
+ if (e.defaultPrevented) return;
68
+ contentState.root.handleClose();
69
+ },
70
+ onFocusOutside: () => restProps.onFocusOutside,
71
+ enabled: () => contentState.root.cell.open,
72
+ });
73
+
74
+ // Flags the open surface for the CSS text-selection guard in ui.css.
75
+ const textSelectionGuard = $derived(
76
+ contentState.root.cell.open && (restProps.preventOverflowTextSelection ?? true) ? { 'data-text-selection-guard': '' } : {},
77
+ );
78
+
79
+ // Spans `present` (open through the settled exit), the window element lifecycle used to
80
+ // give it — restoreScrollDelay covers the scrollbar restore.
81
+ const scrollLock = scrollLockAttachment({
82
+ enabled: () => preventScroll && contentState.root.present,
83
+ restoreScrollDelay: () => restoreScrollDelay,
84
+ });
85
+
86
+ const focusScope = createFocusScopeProps({
87
+ enabled: () => contentState.root.cell.open,
88
+ trap: () => trapFocus,
89
+ loop: () => true,
90
+ onCloseAutoFocus: () => onCloseAutoFocus,
91
+ onOpenAutoFocus: () => onOpenAutoFocus,
92
+ });
93
+ </script>
94
+
95
+ {#if child}
96
+ {@render child({
97
+ props: mergeProps(mergedProps, focusScope.props, escapeAttachment, dismissible.attachment, textSelectionGuard, scrollLock),
98
+ ...contentState.snippetProps,
99
+ })}
100
+ {:else}
101
+ <div {...mergeProps(mergedProps, focusScope.props, escapeAttachment, dismissible.attachment, textSelectionGuard, scrollLock)}>
102
+ {@render children?.()}
103
+ </div>
104
+ {/if}
@@ -0,0 +1,69 @@
1
+ <script lang="ts">
2
+ import { join } from 'overrule';
3
+ import ModalSurface from './modal-surface.svelte';
4
+ import type { DialogContentProps, DialogPortalProps } from '../types.js';
5
+ import type { WithoutChildrenOrChild } from '../../../internal/utils.js';
6
+
7
+ /**
8
+ * Modal dialog adapter over the shared native modal surface (modal-surface.svelte),
9
+ * which owns the skeleton: parity props, content state, controller, scroll lock, and
10
+ * the `<dialog>` render. This file owns only Dialog's visual policy.
11
+ *
12
+ * The visual surface (centered box, bg, border, radius, shadow, padding, sm:max-w-lg) is baked
13
+ * here — the shadcn convention — so a bare `<Dialog.Content>` is a styled modal; consumer
14
+ * `class` still merges to override (e.g. `max-w-md!`). Two Tailwind gotchas: no `display`
15
+ * utility on the <dialog> (grid lives on the inner wrapper); explicit centering via
16
+ * `fixed inset-0 m-auto h-fit` (preflight resets the UA `margin:auto` that would otherwise
17
+ * center it).
18
+ */
19
+ let {
20
+ children,
21
+ ref = $bindable(null),
22
+ class: className,
23
+ ...restProps
24
+ }: DialogContentProps & {
25
+ portalProps?: WithoutChildrenOrChild<DialogPortalProps>;
26
+ } = $props();
27
+ </script>
28
+
29
+ <ModalSurface
30
+ bind:ref
31
+ data-slot="dialog-content"
32
+ class={join(
33
+ 'dialog-content bg-background fixed inset-0 z-50 m-auto h-fit max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] overflow-y-auto rounded-lg border p-6 shadow-lg sm:max-w-lg',
34
+ className,
35
+ )}
36
+ {...restProps}>
37
+ <div class="grid gap-4">
38
+ {@render children?.()}
39
+ </div>
40
+ </ModalSurface>
41
+
42
+ <style>
43
+ /* Pop is a keyframe animation, not an @starting-style / display / overlay transition: WebKit
44
+ doesn't start those on top-layer changes (bug 275184; `overlay` is Chromium-only), so
45
+ transitions snapped both directions on iOS. Exit plays REVERSED on [data-state=closed] while
46
+ the dialog is still open — the controller defers close() until animations settle. The
47
+ closed-state display reset and the ::backdrop fade live in ui.css under [data-modal-surface]. */
48
+ /* Distinct in/out names on purpose: with a single name, the state flip only UPDATES the
49
+ already-finished entry animation (animation-name unchanged → no restart per spec), so the
50
+ exit would never play and the deferred close would fire instantly. */
51
+ @keyframes dialog-pop-in {
52
+ from {
53
+ scale: 0.95;
54
+ opacity: 0;
55
+ }
56
+ }
57
+ @keyframes dialog-pop-out {
58
+ to {
59
+ scale: 0.95;
60
+ opacity: 0;
61
+ }
62
+ }
63
+ :global(.dialog-content[open][data-state='open']) {
64
+ animation: dialog-pop-in 200ms cubic-bezier(0.4, 0, 0.2, 1);
65
+ }
66
+ :global(.dialog-content[open][data-state='closed']) {
67
+ animation: dialog-pop-out 200ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
68
+ }
69
+ </style>
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogDescriptionState } from '../dialog.svelte.js';
5
+ import type { DialogDescriptionProps } from '../types.js';
6
+ import { createId } from '../../../internal/create-id.js';
7
+
8
+ const uid = $props.id();
9
+
10
+ let { id = createId(uid), children, child, ref = $bindable(null), ...restProps }: DialogDescriptionProps = $props();
11
+
12
+ const descriptionState = DialogDescriptionState.create({
13
+ id: boxWith(() => id),
14
+ ref: boxWith(
15
+ () => ref,
16
+ (v) => (ref = v),
17
+ ),
18
+ });
19
+
20
+ const mergedProps = $derived(mergeProps(restProps, descriptionState.props));
21
+ </script>
22
+
23
+ {#if child}
24
+ {@render child({ props: mergedProps })}
25
+ {:else}
26
+ <div {...mergedProps}>
27
+ {@render children?.()}
28
+ </div>
29
+ {/if}
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogOverlayState } from '../dialog.svelte.js';
5
+ import type { DialogOverlayProps } from '../types.js';
6
+ import { createId } from '../../../internal/create-id.js';
7
+
8
+ const uid = $props.id();
9
+
10
+ let { id = createId(uid), child, children, ref = $bindable(null), ...restProps }: DialogOverlayProps = $props();
11
+
12
+ const overlayState = DialogOverlayState.create({
13
+ id: boxWith(() => id),
14
+ ref: boxWith(
15
+ () => ref,
16
+ (v) => (ref = v),
17
+ ),
18
+ });
19
+
20
+ // Always mounted; closed is visibility:hidden here, and the adapter's exit (the drawer's fadeOut
21
+ // keyframe, the sheet's overlay-surface transition) holds it visible while it plays.
22
+ const mergedProps = $derived(mergeProps(restProps, overlayState.props, { style: overlayState.root.cell.open ? {} : { visibility: 'hidden' } }));
23
+ </script>
24
+
25
+ {#if child}
26
+ {@render child({ props: mergedProps, ...overlayState.snippetProps })}
27
+ {:else}
28
+ <div {...mergedProps}>
29
+ {@render children?.(overlayState.snippetProps)}
30
+ </div>
31
+ {/if}
@@ -0,0 +1,30 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogTitleState } from '../dialog.svelte.js';
5
+ import type { DialogTitleProps } from '../types.js';
6
+ import { createId } from '../../../internal/create-id.js';
7
+
8
+ const uid = $props.id();
9
+
10
+ let { id = createId(uid), ref = $bindable(null), child, children, level = 2, ...restProps }: DialogTitleProps = $props();
11
+
12
+ const titleState = DialogTitleState.create({
13
+ id: boxWith(() => id),
14
+ level: boxWith(() => level),
15
+ ref: boxWith(
16
+ () => ref,
17
+ (v) => (ref = v),
18
+ ),
19
+ });
20
+
21
+ const mergedProps = $derived(mergeProps(restProps, titleState.props));
22
+ </script>
23
+
24
+ {#if child}
25
+ {@render child({ props: mergedProps })}
26
+ {:else}
27
+ <div {...mergedProps}>
28
+ {@render children?.()}
29
+ </div>
30
+ {/if}
@@ -0,0 +1,30 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { mergeProps } from '../../../internal/merge-props.js';
4
+ import { DialogTriggerState } from '../dialog.svelte.js';
5
+ import type { DialogTriggerProps } from '../types.js';
6
+ import { createId } from '../../../internal/create-id.js';
7
+
8
+ const uid = $props.id();
9
+
10
+ let { id = createId(uid), ref = $bindable(null), children, child, disabled = false, ...restProps }: DialogTriggerProps = $props();
11
+
12
+ const triggerState = DialogTriggerState.create({
13
+ id: boxWith(() => id),
14
+ ref: boxWith(
15
+ () => ref,
16
+ (v) => (ref = v),
17
+ ),
18
+ disabled: boxWith(() => Boolean(disabled)),
19
+ });
20
+
21
+ const mergedProps = $derived(mergeProps(restProps, triggerState.props));
22
+ </script>
23
+
24
+ {#if child}
25
+ {@render child({ props: mergedProps })}
26
+ {:else}
27
+ <button {...mergedProps}>
28
+ {@render children?.()}
29
+ </button>
30
+ {/if}
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { boxWith } from '../../../internal/tools/index.js';
3
+ import { DialogRootState, DialogState } from '../dialog.svelte.js';
4
+ import type { DialogRootProps } from '../types.js';
5
+
6
+ let { open = false, onOpenChangeComplete = () => {}, state, children }: DialogRootProps = $props();
7
+
8
+ // Root owns both the machinery and the cell; `open` (the prop) is the cell's
9
+ // derivation source, and the children snippet is the only way the cell leaves.
10
+ // A caller-built `state` cell (with its own source/writer) takes over both roles.
11
+ // The cell's identity is fixed at mount — swapping `state` later is not supported.
12
+ // svelte-ignore state_referenced_locally
13
+ const dialog = state ?? new DialogState(() => open);
14
+ DialogRootState.create({
15
+ variant: boxWith(() => 'dialog'),
16
+ cell: dialog,
17
+ onOpenChangeComplete: boxWith(() => onOpenChangeComplete),
18
+ });
19
+ </script>
20
+
21
+ {@render children?.(dialog)}
@@ -0,0 +1,131 @@
1
+ <script lang="ts">
2
+ import type { HTMLDialogAttributes } from 'svelte/elements';
3
+ import { boxWith } from '../../../internal/tools/index.js';
4
+ import { mergeProps } from '../../../internal/merge-props.js';
5
+ import { DialogContentState } from '../dialog.svelte.js';
6
+ import type { DialogContentProps, DialogPortalProps } from '../types.js';
7
+ import { createId } from '../../../internal/create-id.js';
8
+ import type { WithoutChildrenOrChild } from '../../../internal/utils.js';
9
+ import { scrollLockAttachment } from '../../../internal/body-scroll-lock.svelte.js';
10
+ import { nativeDialogControllerAttachment } from '../../../internal/native-dialog-controller.svelte.js';
11
+
12
+ /**
13
+ * The native modal surface: the one skeleton behind every modal `<dialog>` adapter
14
+ * (Dialog.Content, Sheet.Content). Owns what the adapters used to copy — the parity
15
+ * prop block, the content state, the controller attachment, the scroll lock, and the
16
+ * `<dialog>` render + attribute cast. Adapters supply only their visual policy:
17
+ * `class`, an `outsideEvent` override, and their inner markup.
18
+ *
19
+ * What native + CSS absorb, replacing the old JS overlay stack
20
+ * (FocusScope / EscapeLayer / DismissibleLayer / presence gate / portal + overlay <div>):
21
+ * focus trap / restore / initial focus → showModal() (drops FocusScope + the focus-memory stack)
22
+ * focus CONTAINMENT (can't tab out) → native, via inert on everything outside the dialog
23
+ * focus trap LOOP (tab wraps ends) → NOT native: inert stops escape but sequential nav lands
24
+ * on <body> for one step instead of wrapping. The
25
+ * controller's keydown handler closes that gap (via
26
+ * `trapFocus`, wired here for every adapter).
27
+ * Esc to close → native `cancel` (drops EscapeLayer + its global stack)
28
+ * inert background (clicks/focus/AT) → native modal, stronger than the JS Tab-trap
29
+ * backdrop dim → ::backdrop (drops the rendered overlay <div>; the fade
30
+ * lives in ui.css under `[data-modal-surface]`)
31
+ * mount/unmount + enter/exit timing → @starting-style + display/overlay allow-discrete
32
+ * (drops the {#if shouldRender} presence gate)
33
+ * click-outside to close → backdrop click; checked on `pointerdown` by default so
34
+ * a text-selection drag that overshoots the edge isn't
35
+ * misread as a backdrop click
36
+ * Surviving JS: the controller attachment (open↔showModal + dismissal sync + tab-wrap) and
37
+ * <ScrollLock> (native showModal makes the page inert but still scrollable; the ref-counted body
38
+ * lock stays, and `overflow:hidden` leaks touch-scroll on iOS Safari).
39
+ *
40
+ * Adapter gotcha (Tailwind): no `display` utility on the `<dialog>` itself — a grid/flex class
41
+ * overrides the UA `dialog:not([open]){display:none}`, leaving a closed dialog rendered and
42
+ * intercepting events (ui.css re-asserts the reset, but layout utilities belong on an inner
43
+ * wrapper). Each adapter's transition-property re-home stays in its own <style> — which
44
+ * properties animate (scale vs translate) is visual policy.
45
+ */
46
+ const uid = $props.id();
47
+
48
+ let {
49
+ id = createId(uid),
50
+ children,
51
+ child,
52
+ ref = $bindable(null),
53
+ // how the controller detects a backdrop dismissal; Dialog and Sheet both use the default.
54
+ outsideEvent = 'pointerdown',
55
+ // --- Accepted for API parity; the native <dialog> absorbs or no-ops these ---
56
+ // no-op: the <dialog> is always rendered; showModal()/close() toggles visibility.
57
+ forceMount = false,
58
+ // no-op: native modal restores focus to the opener on close.
59
+ onCloseAutoFocus = () => {},
60
+ // no-op: showModal() autofocuses ([autofocus] or the first focusable).
61
+ onOpenAutoFocus = () => {},
62
+ // wired below via the native `cancel` event.
63
+ onEscapeKeydown = () => {},
64
+ // wired below via backdrop click.
65
+ onInteractOutside = () => {},
66
+ // no-op: a native modal makes the background inert (no focus-outside to report).
67
+ onFocusOutside = () => {},
68
+ // honored — enables the controller's sequential-focus wrap.
69
+ trapFocus = true,
70
+ // still honored — passed to the scrollLockAttachment below.
71
+ preventScroll = true,
72
+ restoreScrollDelay = null,
73
+ // honored in the `cancel` / backdrop-click handlers below.
74
+ escapeKeydownBehavior = 'close',
75
+ interactOutsideBehavior = 'close',
76
+ // no-op: not applicable to a native modal surface.
77
+ preventOverflowTextSelection = true,
78
+ // no-op: no portal — a modal <dialog> renders in place and is promoted to the top layer.
79
+ portalProps,
80
+ ...restProps
81
+ }: DialogContentProps & {
82
+ outsideEvent?: 'pointerdown' | 'click';
83
+ portalProps?: WithoutChildrenOrChild<DialogPortalProps>;
84
+ } = $props();
85
+
86
+ const contentState = DialogContentState.create({
87
+ id: boxWith(() => id),
88
+ ref: boxWith(
89
+ () => ref,
90
+ (v) => (ref = v),
91
+ ),
92
+ });
93
+
94
+ // Bridge the shared root `open` to the native top-layer API and mirror native dismissal back
95
+ // into the root state, in one attachment. The root stays the source of truth, so Trigger /
96
+ // Close / handleClose stay authoritative.
97
+ //
98
+ // NOTE: onOpenChangeComplete is intentionally NOT re-homed here. The Dialog root watches
99
+ // `contentNode` (set by DialogContentState) and fires it once the <dialog>'s animations
100
+ // settle (useOpenChangeComplete) — a listener here would double-fire it.
101
+ const controllerAttachment = nativeDialogControllerAttachment({
102
+ open: () => contentState.root.cell.open,
103
+ onClose: () => contentState.root.handleClose(),
104
+ // the controller takes this as a plain, non-reactive value — fixed per adapter at mount
105
+ // svelte-ignore state_referenced_locally
106
+ outsideEvent,
107
+ onInteractOutside: () => onInteractOutside,
108
+ interactOutsideBehavior: () => interactOutsideBehavior,
109
+ onEscapeKeydown: () => onEscapeKeydown,
110
+ escapeKeydownBehavior: () => escapeKeydownBehavior,
111
+ trapFocus: () => trapFocus,
112
+ });
113
+
114
+ // The <dialog> persists across open/close, so the lock gates on the cell's open, not element lifecycle.
115
+ const scrollLock = scrollLockAttachment({
116
+ enabled: () => contentState.root.cell.open && preventScroll,
117
+ restoreScrollDelay: () => restoreScrollDelay,
118
+ });
119
+
120
+ const mergedProps = $derived(mergeProps({ 'data-modal-surface': '' }, restProps, contentState.props, scrollLock));
121
+ </script>
122
+
123
+ {#if child}
124
+ {@render child({ props: mergeProps(mergedProps, controllerAttachment), ...contentState.snippetProps })}
125
+ {:else}
126
+ <!-- DialogContentState.props / DialogContentProps are authored for a <div>; their generic event
127
+ handlers are typed to HTMLDivElement, so assert the merged set as dialog attributes. -->
128
+ <dialog {...controllerAttachment} {...mergedProps as unknown as HTMLDialogAttributes}>
129
+ {@render children?.()}
130
+ </dialog>
131
+ {/if}