@widgetic/design-system 0.5.22 → 0.5.23

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 (246) hide show
  1. package/README.md +2 -0
  2. package/dist/components/CopyableHeader.svelte +260 -448
  3. package/dist/components/CopyableHeader.svelte.d.ts +8 -5
  4. package/dist/components/EmptyState.svelte +100 -128
  5. package/dist/components/EmptyState.svelte.d.ts +16 -19
  6. package/dist/components/GenerateLoader.svelte +17 -10
  7. package/dist/components/PasswordInput.svelte +41 -44
  8. package/dist/components/PasswordInput.svelte.d.ts +2 -0
  9. package/dist/components/ThumbHashImage.svelte +117 -119
  10. package/dist/components/WScrollArea.svelte +47 -41
  11. package/dist/components/chat/ActivityRow.svelte +115 -0
  12. package/dist/components/chat/ActivityRow.svelte.d.ts +18 -0
  13. package/dist/components/chat/ChatHeader.svelte +114 -0
  14. package/dist/components/chat/ChatHeader.svelte.d.ts +26 -0
  15. package/dist/components/chat/Composer.svelte +172 -0
  16. package/dist/components/chat/Composer.svelte.d.ts +27 -0
  17. package/dist/components/chat/Message.svelte +158 -0
  18. package/dist/components/chat/Message.svelte.d.ts +28 -0
  19. package/dist/components/chat/OptionRow.svelte +59 -0
  20. package/dist/components/chat/OptionRow.svelte.d.ts +14 -0
  21. package/dist/components/chat/PlanCard.svelte +220 -0
  22. package/dist/components/chat/PlanCard.svelte.d.ts +34 -0
  23. package/dist/components/chat/QuestionCard.svelte +265 -0
  24. package/dist/components/chat/QuestionCard.svelte.d.ts +38 -0
  25. package/dist/components/chat/ScrollToBottom.svelte +51 -0
  26. package/dist/components/chat/ScrollToBottom.svelte.d.ts +11 -0
  27. package/dist/components/chat/SuggestionCard.svelte +79 -0
  28. package/dist/components/chat/SuggestionCard.svelte.d.ts +20 -0
  29. package/dist/components/chat/TaskRow.svelte +59 -0
  30. package/dist/components/chat/TaskRow.svelte.d.ts +11 -0
  31. package/dist/components/chat/composerLogic.d.ts +16 -0
  32. package/dist/components/chat/composerLogic.js +29 -0
  33. package/dist/components/chat/index.d.ts +16 -0
  34. package/dist/components/chat/index.js +16 -0
  35. package/dist/components/chat/questionCardLogic.d.ts +11 -0
  36. package/dist/components/chat/questionCardLogic.js +39 -0
  37. package/dist/components/index.d.ts +10 -1
  38. package/dist/components/index.js +10 -0
  39. package/dist/components/modals/ActionModal.svelte +186 -180
  40. package/dist/components/modals/BaseModal.svelte +402 -399
  41. package/dist/components/modals/BaseModal.svelte.d.ts +1 -0
  42. package/dist/components/modals/NewItemDialog.svelte +200 -243
  43. package/dist/components/modals/Portal.svelte +107 -105
  44. package/dist/components/modals/README.md +16 -2
  45. package/dist/components/modals/RenameDialog.svelte +234 -292
  46. package/dist/components/navigation/Breadcrumbs.svelte +415 -377
  47. package/dist/components/navigation/Breadcrumbs.svelte.d.ts +3 -2
  48. package/dist/components/navigation/types.d.ts +2 -0
  49. package/dist/components/pdf/PDFViewer.svelte +1 -1
  50. package/dist/components/search-input/SearchInput.svelte +51 -104
  51. package/dist/components/search-input/SearchInput.svelte.d.ts +9 -27
  52. package/dist/components/shad-editor/editor.css +1 -1
  53. package/dist/components/shad-editor/i18n/messages.d.ts +1 -1
  54. package/dist/components/shad-editor/i18n/messages.js +1 -1
  55. package/dist/components/shell/AppShell.svelte +52 -0
  56. package/dist/components/shell/AppShell.svelte.d.ts +13 -0
  57. package/dist/components/shell/Banner.svelte +90 -0
  58. package/dist/components/shell/Banner.svelte.d.ts +61 -0
  59. package/dist/components/shell/ErrorState.svelte +60 -0
  60. package/dist/components/shell/ErrorState.svelte.d.ts +13 -0
  61. package/dist/components/shell/Link.svelte +63 -0
  62. package/dist/components/shell/Link.svelte.d.ts +53 -0
  63. package/dist/components/shell/NavDrawer.svelte +117 -0
  64. package/dist/components/shell/NavDrawer.svelte.d.ts +10 -0
  65. package/dist/components/shell/NavRow.svelte +128 -0
  66. package/dist/components/shell/NavRow.svelte.d.ts +65 -0
  67. package/dist/components/shell/NavSectionLabel.svelte +27 -0
  68. package/dist/components/shell/NavSectionLabel.svelte.d.ts +9 -0
  69. package/dist/components/shell/NotificationRow.svelte +76 -0
  70. package/dist/components/shell/NotificationRow.svelte.d.ts +16 -0
  71. package/dist/components/shell/PageHeader.svelte +42 -0
  72. package/dist/components/shell/PageHeader.svelte.d.ts +12 -0
  73. package/dist/components/shell/ProfileRow.svelte +95 -0
  74. package/dist/components/shell/ProfileRow.svelte.d.ts +54 -0
  75. package/dist/components/shell/SettingsDialog.svelte +118 -0
  76. package/dist/components/shell/SettingsDialog.svelte.d.ts +19 -0
  77. package/dist/components/shell/SettingsNav.svelte +46 -0
  78. package/dist/components/shell/SettingsNav.svelte.d.ts +11 -0
  79. package/dist/components/shell/Sidebar.svelte +82 -0
  80. package/dist/components/shell/Sidebar.svelte.d.ts +25 -0
  81. package/dist/components/shell/Stat.svelte +63 -0
  82. package/dist/components/shell/Stat.svelte.d.ts +58 -0
  83. package/dist/components/shell/TopBar.svelte +37 -0
  84. package/dist/components/shell/TopBar.svelte.d.ts +11 -0
  85. package/dist/components/shell/WidgetRow.svelte +126 -0
  86. package/dist/components/shell/WidgetRow.svelte.d.ts +78 -0
  87. package/dist/components/shell/error-state-messages.d.ts +7 -0
  88. package/dist/components/shell/error-state-messages.js +9 -0
  89. package/dist/components/shell/index.d.ts +22 -0
  90. package/dist/components/shell/index.js +25 -0
  91. package/dist/components/shell/link-external.d.ts +2 -0
  92. package/dist/components/shell/link-external.js +7 -0
  93. package/dist/components/shell/messages.d.ts +7 -0
  94. package/dist/components/shell/messages.js +5 -0
  95. package/dist/components/shell/settings-nav-types.d.ts +12 -0
  96. package/dist/components/shell/settings-nav-types.js +3 -0
  97. package/dist/components/shell/shell-utils.d.ts +7 -0
  98. package/dist/components/shell/shell-utils.js +27 -0
  99. package/dist/components/shell/stat-tone.d.ts +3 -0
  100. package/dist/components/shell/stat-tone.js +11 -0
  101. package/dist/components/toast/ToasterModal.svelte +102 -168
  102. package/dist/components/toast/ToasterModal.svelte.d.ts +2 -12
  103. package/dist/components/ui/accordion/accordion-content.svelte +3 -2
  104. package/dist/components/ui/accordion/accordion-item.svelte +10 -1
  105. package/dist/components/ui/accordion/accordion-trigger.svelte +4 -3
  106. package/dist/components/ui/alert/alert-description.svelte +5 -1
  107. package/dist/components/ui/alert/alert-title.svelte +2 -1
  108. package/dist/components/ui/alert/index.d.ts +13 -11
  109. package/dist/components/ui/alert/index.js +4 -4
  110. package/dist/components/ui/avatar/avatar-utils.d.ts +2 -0
  111. package/dist/components/ui/avatar/avatar-utils.js +9 -0
  112. package/dist/components/ui/avatar/avatar.svelte +63 -0
  113. package/dist/components/ui/avatar/avatar.svelte.d.ts +80 -0
  114. package/dist/components/ui/avatar/index.d.ts +4 -0
  115. package/dist/components/ui/avatar/index.js +4 -0
  116. package/dist/components/ui/badge/badge.svelte +22 -10
  117. package/dist/components/ui/badge/badge.svelte.d.ts +14 -15
  118. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +2 -2
  119. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
  120. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
  121. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
  122. package/dist/components/ui/button/button-padding.d.ts +9 -0
  123. package/dist/components/ui/button/button-padding.js +15 -0
  124. package/dist/components/ui/button/button.svelte +81 -31
  125. package/dist/components/ui/button/button.svelte.d.ts +48 -29
  126. package/dist/components/ui/calendar/calendar-cell.svelte +1 -1
  127. package/dist/components/ui/calendar/calendar-head-cell.svelte +1 -1
  128. package/dist/components/ui/calendar/calendar-next-button.svelte +2 -2
  129. package/dist/components/ui/calendar/calendar-prev-button.svelte +2 -2
  130. package/dist/components/ui/card/card-description.svelte +1 -1
  131. package/dist/components/ui/card/card-title.svelte +1 -1
  132. package/dist/components/ui/card/card.svelte +1 -1
  133. package/dist/components/ui/checkbox/checkbox.svelte +9 -5
  134. package/dist/components/ui/chip/chip.svelte +48 -0
  135. package/dist/components/ui/chip/chip.svelte.d.ts +13 -0
  136. package/dist/components/ui/chip/index.d.ts +2 -0
  137. package/dist/components/ui/chip/index.js +2 -0
  138. package/dist/components/ui/command/command-dialog.svelte +1 -1
  139. package/dist/components/ui/command/command-input.svelte +4 -4
  140. package/dist/components/ui/command/command-item.svelte +1 -1
  141. package/dist/components/ui/command/command.svelte +1 -1
  142. package/dist/components/ui/dialog/dialog-content.svelte +4 -4
  143. package/dist/components/ui/dialog/dialog-description.svelte +1 -1
  144. package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
  145. package/dist/components/ui/dialog/dialog-title.svelte +1 -1
  146. package/dist/components/ui/drawer/drawer-content.svelte +1 -1
  147. package/dist/components/ui/drawer/drawer-overlay.svelte +1 -1
  148. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +5 -5
  149. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  150. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  151. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +20 -2
  152. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +4 -0
  153. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +5 -1
  154. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +3 -3
  155. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +2 -1
  156. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  157. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +3 -3
  158. package/dist/components/ui/field/field-ids.d.ts +7 -0
  159. package/dist/components/ui/field/field-ids.js +15 -0
  160. package/dist/components/ui/field/field.svelte +62 -0
  161. package/dist/components/ui/field/field.svelte.d.ts +21 -0
  162. package/dist/components/ui/field/index.d.ts +3 -0
  163. package/dist/components/ui/field/index.js +3 -0
  164. package/dist/components/ui/hover-card/hover-card-content.svelte +1 -1
  165. package/dist/components/ui/icon-button/icon-button.svelte +72 -0
  166. package/dist/components/ui/icon-button/icon-button.svelte.d.ts +90 -0
  167. package/dist/components/ui/icon-button/index.d.ts +2 -0
  168. package/dist/components/ui/icon-button/index.js +4 -0
  169. package/dist/components/ui/input/index.d.ts +1 -0
  170. package/dist/components/ui/input/input.svelte +11 -4
  171. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  172. package/dist/components/ui/input-otp/input-otp-separator.svelte +2 -2
  173. package/dist/components/ui/input-otp/input-otp-slot.svelte +5 -4
  174. package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +1 -1
  175. package/dist/components/ui/input-otp/input-otp.svelte +1 -1
  176. package/dist/components/ui/label/label.svelte +3 -2
  177. package/dist/components/ui/popover/popover-content.svelte +1 -1
  178. package/dist/components/ui/progress/progress.svelte +19 -5
  179. package/dist/components/ui/progress/progress.svelte.d.ts +4 -2
  180. package/dist/components/ui/radio-group/radio-group-item.svelte +4 -4
  181. package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte +1 -1
  182. package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +2 -2
  183. package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +2 -2
  184. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +4 -1
  185. package/dist/components/ui/scroll-area/scroll-area.svelte +1 -1
  186. package/dist/components/ui/select/select-content.svelte +1 -3
  187. package/dist/components/ui/select/select-item.svelte +5 -4
  188. package/dist/components/ui/select/select-scroll-down-button.svelte +2 -2
  189. package/dist/components/ui/select/select-scroll-up-button.svelte +2 -2
  190. package/dist/components/ui/select/select-trigger.svelte +4 -3
  191. package/dist/components/ui/skeleton/index.d.ts +2 -0
  192. package/dist/components/ui/skeleton/index.js +2 -0
  193. package/dist/components/ui/skeleton/skeleton.svelte +24 -0
  194. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
  195. package/dist/components/ui/slider/slider.svelte +5 -10
  196. package/dist/components/ui/sonner/sonner.svelte +19 -13
  197. package/dist/components/ui/stepper-button/index.d.ts +3 -0
  198. package/dist/components/ui/stepper-button/index.js +2 -0
  199. package/dist/components/ui/stepper-button/stepper-button.svelte +37 -0
  200. package/dist/components/ui/stepper-button/stepper-button.svelte.d.ts +9 -0
  201. package/dist/components/ui/switch/switch.svelte +8 -3
  202. package/dist/components/ui/table/table-cell.svelte +1 -1
  203. package/dist/components/ui/table/table-head.svelte +1 -1
  204. package/dist/components/ui/table/table-row.svelte +1 -1
  205. package/dist/components/ui/tabs/tabs-list.svelte +1 -1
  206. package/dist/components/ui/tabs/tabs-trigger.svelte +1 -1
  207. package/dist/components/ui/tag/index.d.ts +2 -0
  208. package/dist/components/ui/tag/index.js +2 -0
  209. package/dist/components/ui/tag/tag.svelte +42 -0
  210. package/dist/components/ui/tag/tag.svelte.d.ts +11 -0
  211. package/dist/components/ui/textarea/textarea.svelte +4 -3
  212. package/dist/components/ui/textarea/textarea.svelte.d.ts +2 -2
  213. package/dist/components/ui/toggle/toggle.svelte +9 -9
  214. package/dist/components/ui/toggle/toggle.svelte.d.ts +14 -21
  215. package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
  216. package/dist/fonts/Inter/Inter-Black.woff2 +0 -0
  217. package/dist/fonts/Inter/Inter-BlackItalic.woff2 +0 -0
  218. package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
  219. package/dist/fonts/Inter/Inter-BoldItalic.woff2 +0 -0
  220. package/dist/fonts/Inter/Inter-ExtraBold.woff2 +0 -0
  221. package/dist/fonts/Inter/Inter-ExtraBoldItalic.woff2 +0 -0
  222. package/dist/fonts/Inter/Inter-ExtraLight-BETA.woff2 +0 -0
  223. package/dist/fonts/Inter/Inter-ExtraLightItalic-BETA.woff2 +0 -0
  224. package/dist/fonts/Inter/Inter-Italic.woff2 +0 -0
  225. package/dist/fonts/Inter/Inter-Light-BETA.woff2 +0 -0
  226. package/dist/fonts/Inter/Inter-LightItalic-BETA.woff2 +0 -0
  227. package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
  228. package/dist/fonts/Inter/Inter-MediumItalic.woff2 +0 -0
  229. package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
  230. package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  231. package/dist/fonts/Inter/Inter-SemiBoldItalic.woff2 +0 -0
  232. package/dist/fonts/Inter/Inter-Thin-BETA.woff2 +0 -0
  233. package/dist/fonts/Inter/Inter-ThinItalic-BETA.woff2 +0 -0
  234. package/dist/fonts/Inter/Inter-italic.var.woff2 +0 -0
  235. package/dist/fonts/Inter/Inter-upright.var.woff2 +0 -0
  236. package/dist/fonts/Inter/Inter.var.woff2 +0 -0
  237. package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  238. package/dist/i18n/audit/designSystemWords.d.ts +1 -1
  239. package/dist/i18n/audit/designSystemWords.js +1 -1
  240. package/dist/styles/fonts.css +18 -14
  241. package/dist/styles/global.css +7 -19
  242. package/dist/styles/tokens.css +332 -0
  243. package/dist/utils.d.ts +27 -0
  244. package/dist/utils.js +33 -2
  245. package/package.json +2 -1
  246. package/tailwind.config.ts +7 -47
@@ -1,124 +1,126 @@
1
1
  <!-- Portal component for mounting elements outside their normal DOM hierarchy -->
2
2
  <script lang="ts">
3
- import { onMount, onDestroy } from 'svelte';
4
- import { readable, type Readable } from 'svelte/store';
5
- import { useOptionalTextDirection, type TextDirection } from '../textDirection.js';
3
+ import { onMount, onDestroy } from 'svelte';
4
+ import { readable, type Readable } from 'svelte/store';
5
+ import { useOptionalTextDirection, type TextDirection } from '../textDirection.js';
6
6
 
7
- /**
8
- * Component props
9
- */
10
- let defaultTarget: string = 'portal-element';
11
- export let target: string | HTMLElement | undefined = defaultTarget;
12
- export let clickThrough = false; // Whether to allow click events to pass through
13
- // Class
14
- let className = '';
15
- export { className as class };
16
- // Style prop
17
- export let style = '';
18
- export let clientWidth = 0;
19
- export let clientHeight = 0;
7
+ /**
8
+ * Component props
9
+ */
10
+ let defaultTarget: string = 'portal-element';
11
+ export let target: string | HTMLElement | undefined = defaultTarget;
12
+ export let clickThrough = false; // Whether to allow click events to pass through
13
+ // Class
14
+ let className = '';
15
+ export { className as class };
16
+ // Style prop
17
+ export let style = '';
18
+ export let clientWidth = 0;
19
+ export let clientHeight = 0;
20
20
 
21
- /**
22
- * Local Variables
23
- */
24
- let host: HTMLElement | null = null; // host(target) container of the portal: parent target of the portal
25
- let portal: HTMLElement; // root portal element
26
- /** Only remove host on destroy if Portal created it (never remove editor portal slots). */
27
- let hostCreatedByPortal = false;
28
- // show logs
29
- let showLogs = false;
21
+ /**
22
+ * Local Variables
23
+ */
24
+ let host: HTMLElement | null = null; // host(target) container of the portal: parent target of the portal
25
+ let portal: HTMLElement; // root portal element
26
+ /** Only remove host on destroy if Portal created it (never remove editor portal slots). */
27
+ let hostCreatedByPortal = false;
28
+ // show logs
29
+ let showLogs = false;
30
30
 
31
- // The content leaves the element that carries the direction of its screen, and a pop-up in a layer of the page would read
32
- // the direction of the page instead. When a screen above gave one, the portal says it again on its own element (and says
33
- // nothing on a page whose screens never did, so the page's own `dir` stays).
34
- const screenDirection: Readable<TextDirection | undefined> = useOptionalTextDirection() ?? readable<TextDirection | undefined>(undefined);
31
+ // The content leaves the element that carries the direction of its screen, and a pop-up in a layer of the page would read
32
+ // the direction of the page instead. When a screen above gave one, the portal says it again on its own element (and says
33
+ // nothing on a page whose screens never did, so the page's own `dir` stays).
34
+ const screenDirection: Readable<TextDirection | undefined> =
35
+ useOptionalTextDirection() ?? readable<TextDirection | undefined>(undefined);
35
36
 
36
- onMount(() => {
37
- // if(showLogs) console.log('DS Portal target:', target);
38
- // If target is an HTML element, use it directly
39
- if (target instanceof HTMLElement) {
40
- // if(showLogs) console.log('DS Portal target is an HTML element:', target);
41
- host = target;
42
- } else {
43
- const targetId = (target || defaultTarget).replace(/^#/, '');
44
- // Prefer id (props-editor-file-browser-portal), then class, then body fallback
45
- host = document.getElementById(targetId) as HTMLElement | null;
46
- if (!host) {
47
- host = document.querySelector(`.${targetId}`) as HTMLElement | null;
48
- }
49
- // Never adopt the portal's own subtree as its host.
50
- //
51
- // A caller may name a target after a class that the *portalled content*
52
- // also carries (e.g. target `app-header-widget-picker` for a dropdown
53
- // whose root div has that same class, so outside-click detection can
54
- // find it). The slot is already rendered inside `portal` when onMount
55
- // runs, so the class lookup above can return that inner div. Moving
56
- // `portal` into it then throws
57
- // "HierarchyRequestError: The new child element contains the parent".
58
- // Anything equal to, inside, or containing `portal` is not a host.
59
- if (host && (host === portal || portal?.contains(host) || host.contains(portal))) {
60
- host = null;
61
- }
62
- // if(showLogs) console.log('DS Portal host:', host, 'target:', target);
37
+ onMount(() => {
38
+ // if(showLogs) console.log('DS Portal target:', target);
39
+ // If target is an HTML element, use it directly
40
+ if (target instanceof HTMLElement) {
41
+ // if(showLogs) console.log('DS Portal target is an HTML element:', target);
42
+ host = target;
43
+ } else {
44
+ const targetId = (target || defaultTarget).replace(/^#/, '');
45
+ // Prefer id (props-editor-file-browser-portal), then class, then body fallback
46
+ host = document.getElementById(targetId) as HTMLElement | null;
47
+ if (!host) {
48
+ host = document.querySelector(`.${targetId}`) as HTMLElement | null;
49
+ }
50
+ // Never adopt the portal's own subtree as its host.
51
+ //
52
+ // A caller may name a target after a class that the *portalled content*
53
+ // also carries (e.g. target `app-header-widget-picker` for a dropdown
54
+ // whose root div has that same class, so outside-click detection can
55
+ // find it). The slot is already rendered inside `portal` when onMount
56
+ // runs, so the class lookup above can return that inner div. Moving
57
+ // `portal` into it then throws
58
+ // "HierarchyRequestError: The new child element contains the parent".
59
+ // Anything equal to, inside, or containing `portal` is not a host.
60
+ if (host && (host === portal || portal?.contains(host) || host.contains(portal))) {
61
+ host = null;
62
+ }
63
+ // if(showLogs) console.log('DS Portal host:', host, 'target:', target);
63
64
 
64
- // Create host container if it doesn't exist
65
- if (!host) {
66
- hostCreatedByPortal = true;
67
- host = document.createElement('div');
68
- host.classList.add(targetId);
69
- host.id = targetId;
70
- document.body.appendChild(host);
71
- }
72
- }
65
+ // Create host container if it doesn't exist
66
+ if (!host) {
67
+ hostCreatedByPortal = true;
68
+ host = document.createElement('div');
69
+ host.classList.add(targetId);
70
+ host.id = targetId;
71
+ document.body.appendChild(host);
72
+ }
73
+ }
73
74
 
74
- // if(showLogs) console.log('DS Portal target:', target, 'host:', host, 'portal:', portal);
75
+ // if(showLogs) console.log('DS Portal target:', target, 'host:', host, 'portal:', portal);
75
76
 
76
- // Move the portal content to the host
77
- if (portal && host) host.appendChild(portal);
78
- });
77
+ // Move the portal content to the host
78
+ if (portal && host) host.appendChild(portal);
79
+ });
79
80
 
80
- onDestroy(() => {
81
- // Additional cleanup on component destroy
82
- if (portal && host && host.contains(portal)) {
83
- host.removeChild(portal);
84
- }
85
- // Only remove hosts Portal created on body — never delete editor portal slots
86
- if (hostCreatedByPortal && host?.parentNode) {
87
- host.remove();
88
- }
89
- });
81
+ onDestroy(() => {
82
+ // Additional cleanup on component destroy
83
+ if (portal && host && host.contains(portal)) {
84
+ host.removeChild(portal);
85
+ }
86
+ // Only remove hosts Portal created on body — never delete editor portal slots
87
+ if (hostCreatedByPortal && host?.parentNode) {
88
+ host.remove();
89
+ }
90
+ });
90
91
  </script>
91
92
 
92
93
  <!-- Portal Container -->
93
- <div bind:this={portal}
94
- class="{className ? `${className} ` : ''}portal-contents{clickThrough ? ' click-through' : ''}"
95
- dir={$screenDirection}
96
- style={style}
97
- bind:clientWidth
98
- bind:clientHeight
94
+ <div
95
+ bind:this={portal}
96
+ class="{className ? `${className} ` : ''}portal-contents{clickThrough ? ' click-through' : ''}"
97
+ dir={$screenDirection}
98
+ {style}
99
+ bind:clientWidth
100
+ bind:clientHeight
99
101
  >
100
- <slot />
102
+ <slot />
101
103
  </div>
102
104
 
103
105
  <style>
104
- /* Use contents to prevent extra DOM nesting */
105
- .portal-contents {
106
- position: absolute;
107
- top: 0;
108
- inset-inline-start: 0;
109
- width: 100%;
110
- height: 100%;
111
- z-index: 99999999;
112
- pointer-events: none;
113
- }
106
+ /* Use contents to prevent extra DOM nesting */
107
+ .portal-contents {
108
+ position: absolute;
109
+ top: 0;
110
+ inset-inline-start: 0;
111
+ width: 100%;
112
+ height: 100%;
113
+ z-index: 99999999;
114
+ pointer-events: none;
115
+ }
114
116
 
115
- :global(.portal-contents > *) {
116
- pointer-events: auto;
117
- }
117
+ :global(.portal-contents > *) {
118
+ pointer-events: auto;
119
+ }
118
120
 
119
- /* Click through styles */
120
- :global(.portal-contents.click-through),
121
- :global(.portal-contents.click-through *) {
122
- pointer-events: none !important;
123
- }
124
- </style>
121
+ /* Click through styles */
122
+ :global(.portal-contents.click-through),
123
+ :global(.portal-contents.click-through *) {
124
+ pointer-events: none !important;
125
+ }
126
+ </style>
@@ -23,8 +23,8 @@ The `ActionModal` component is a reusable confirmation modal that can be used ac
23
23
  | `confirmLabel` | string | `'Confirm'` | Label for the confirm button |
24
24
  | `cancelLabel` | string | `'Cancel'` | Label for the cancel button |
25
25
  | `closeLabel` | string | `'Close modal'` | The words a screen reader says for the close button |
26
- | `width` | string | `'410px'` | Width of the modal |
27
- | `height` | string | `'168px'` | Height of the modal |
26
+ | `width` | string | `'400px'` | Width of the modal (the Figma Dialog width) |
27
+ | `height` | string | `'168px'` | Kept for backwards compatibility: the modal is as tall as its content |
28
28
  | `modalId` | string | `'delete-confirmation-modal'` | ID for targeting the modal |
29
29
  | `modalType` | string | `'deleteConfirmation'` | Type for the modal (for backwards compatibility) |
30
30
  | `modalData` | any | `null` | Data for the modal (for backwards compatibility) |
@@ -99,6 +99,20 @@ You can provide custom title and message for specific contexts:
99
99
  />
100
100
  ```
101
101
 
102
+ ## BaseModal: the frame of a dialog
103
+
104
+ `BaseModal` is the card (backdrop, 24px radius, border, enter and leave motion) that the other dialogs sit in. It is
105
+ portalled into `target`, so the dim backdrop covers that part of the page and nothing else.
106
+
107
+ | Prop | Type | Default | Description |
108
+ |------|------|---------|-------------|
109
+ | `open` | boolean | `false` | Bindable. Closing it dispatches `close`. |
110
+ | `title` | string | | The title row: a page heading and the close button. |
111
+ | `titlePadding` | `'small' \| 'large'` | `'large'` | Space under the title row (8px or 16px). |
112
+ | `width`, `height` | string | `'808px'`, `'500px'` | Size of the card. The height follows the content (and eases with `animateSize`). |
113
+ | `bare` | boolean | `false` | No title row, no close button, no padding: the content draws all of it, edge to edge. The File Browser's search dialog is one (the search field is its top row). It closes with Escape or a click on the backdrop. |
114
+ | `closeLabel` | string | `'Close modal'` | The words a screen reader says for the close button. |
115
+
102
116
  ## Words in another language
103
117
 
104
118
  Every word a visitor can see or hear is a prop with an English default, so a page that shows the components in