@sepale/components 0.0.0-stage → 0.1.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 (261) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -3
  3. package/dist/components/Accordion.svelte +48 -0
  4. package/dist/components/Accordion.svelte.d.ts +24 -0
  5. package/dist/components/Alert.svelte +107 -0
  6. package/dist/components/Alert.svelte.d.ts +40 -0
  7. package/dist/components/Avatar.svelte +75 -0
  8. package/dist/components/Avatar.svelte.d.ts +37 -0
  9. package/dist/components/Badge.svelte +46 -0
  10. package/dist/components/Badge.svelte.d.ts +22 -0
  11. package/dist/components/Breadcrumbs.svelte +36 -0
  12. package/dist/components/Breadcrumbs.svelte.d.ts +18 -0
  13. package/dist/components/Bubble.svelte +43 -0
  14. package/dist/components/Bubble.svelte.d.ts +23 -0
  15. package/dist/components/Button.svelte +132 -0
  16. package/dist/components/Button.svelte.d.ts +40 -0
  17. package/dist/components/Calendar.svelte +193 -0
  18. package/dist/components/Calendar.svelte.d.ts +60 -0
  19. package/dist/components/Card.svelte +69 -0
  20. package/dist/components/Card.svelte.d.ts +37 -0
  21. package/dist/components/Carousel.svelte +550 -0
  22. package/dist/components/Carousel.svelte.d.ts +124 -0
  23. package/dist/components/Checkbox.svelte +48 -0
  24. package/dist/components/Checkbox.svelte.d.ts +26 -0
  25. package/dist/components/Chip.svelte +60 -0
  26. package/dist/components/Chip.svelte.d.ts +26 -0
  27. package/dist/components/ChipsInput.svelte +158 -0
  28. package/dist/components/ChipsInput.svelte.d.ts +64 -0
  29. package/dist/components/Collapse.svelte +101 -0
  30. package/dist/components/Collapse.svelte.d.ts +46 -0
  31. package/dist/components/ColorPicker.svelte +135 -0
  32. package/dist/components/ColorPicker.svelte.d.ts +44 -0
  33. package/dist/components/Combobox.svelte +496 -0
  34. package/dist/components/Combobox.svelte.d.ts +96 -0
  35. package/dist/components/DataControl.svelte +754 -0
  36. package/dist/components/DataControl.svelte.d.ts +143 -0
  37. package/dist/components/DataHandler.svelte +67 -0
  38. package/dist/components/DataHandler.svelte.d.ts +44 -0
  39. package/dist/components/DatePicker.svelte +185 -0
  40. package/dist/components/DatePicker.svelte.d.ts +56 -0
  41. package/dist/components/Dialog.svelte +194 -0
  42. package/dist/components/Dialog.svelte.d.ts +51 -0
  43. package/dist/components/Divider.svelte +54 -0
  44. package/dist/components/Divider.svelte.d.ts +27 -0
  45. package/dist/components/Dock.svelte +34 -0
  46. package/dist/components/Dock.svelte.d.ts +18 -0
  47. package/dist/components/Drawer.svelte +174 -0
  48. package/dist/components/Drawer.svelte.d.ts +51 -0
  49. package/dist/components/Dropdown.svelte +183 -0
  50. package/dist/components/Dropdown.svelte.d.ts +52 -0
  51. package/dist/components/Editable.svelte +292 -0
  52. package/dist/components/Editable.svelte.d.ts +113 -0
  53. package/dist/components/EmptyState.svelte +64 -0
  54. package/dist/components/EmptyState.svelte.d.ts +29 -0
  55. package/dist/components/Fieldset.svelte +42 -0
  56. package/dist/components/Fieldset.svelte.d.ts +20 -0
  57. package/dist/components/FileDropzone.svelte +154 -0
  58. package/dist/components/FileDropzone.svelte.d.ts +45 -0
  59. package/dist/components/FileExplorer.svelte +643 -0
  60. package/dist/components/FileExplorer.svelte.d.ts +114 -0
  61. package/dist/components/FileInput.svelte +125 -0
  62. package/dist/components/FileInput.svelte.d.ts +51 -0
  63. package/dist/components/FloatingLabel.svelte +38 -0
  64. package/dist/components/FloatingLabel.svelte.d.ts +24 -0
  65. package/dist/components/Footer.svelte +68 -0
  66. package/dist/components/Footer.svelte.d.ts +37 -0
  67. package/dist/components/Grid.svelte +122 -0
  68. package/dist/components/Grid.svelte.d.ts +72 -0
  69. package/dist/components/Hero.svelte +62 -0
  70. package/dist/components/Hero.svelte.d.ts +33 -0
  71. package/dist/components/Input.svelte +184 -0
  72. package/dist/components/Input.svelte.d.ts +65 -0
  73. package/dist/components/Join.svelte +38 -0
  74. package/dist/components/Join.svelte.d.ts +21 -0
  75. package/dist/components/Kanban.svelte +284 -0
  76. package/dist/components/Kanban.svelte.d.ts +93 -0
  77. package/dist/components/Label.svelte +32 -0
  78. package/dist/components/Label.svelte.d.ts +21 -0
  79. package/dist/components/LaptopFrame.svelte +44 -0
  80. package/dist/components/LaptopFrame.svelte.d.ts +21 -0
  81. package/dist/components/List.svelte +95 -0
  82. package/dist/components/List.svelte.d.ts +69 -0
  83. package/dist/components/Loading.svelte +37 -0
  84. package/dist/components/Loading.svelte.d.ts +17 -0
  85. package/dist/components/Menu.svelte +144 -0
  86. package/dist/components/Menu.svelte.d.ts +53 -0
  87. package/dist/components/MobileFrame.svelte +41 -0
  88. package/dist/components/MobileFrame.svelte.d.ts +21 -0
  89. package/dist/components/Navbar.svelte +49 -0
  90. package/dist/components/Navbar.svelte.d.ts +25 -0
  91. package/dist/components/NumberInput.svelte +255 -0
  92. package/dist/components/NumberInput.svelte.d.ts +68 -0
  93. package/dist/components/Pagination.svelte +169 -0
  94. package/dist/components/Pagination.svelte.d.ts +50 -0
  95. package/dist/components/Progress.svelte +65 -0
  96. package/dist/components/Progress.svelte.d.ts +28 -0
  97. package/dist/components/RadialProgress.svelte +48 -0
  98. package/dist/components/RadialProgress.svelte.d.ts +20 -0
  99. package/dist/components/Radio.svelte +50 -0
  100. package/dist/components/Radio.svelte.d.ts +28 -0
  101. package/dist/components/Range.svelte +53 -0
  102. package/dist/components/Range.svelte.d.ts +26 -0
  103. package/dist/components/Rating.svelte +90 -0
  104. package/dist/components/Rating.svelte.d.ts +41 -0
  105. package/dist/components/Select.svelte +338 -0
  106. package/dist/components/Select.svelte.d.ts +74 -0
  107. package/dist/components/Sidebar.svelte +100 -0
  108. package/dist/components/Sidebar.svelte.d.ts +54 -0
  109. package/dist/components/Skeleton.svelte +40 -0
  110. package/dist/components/Skeleton.svelte.d.ts +18 -0
  111. package/dist/components/Stat.svelte +71 -0
  112. package/dist/components/Stat.svelte.d.ts +35 -0
  113. package/dist/components/Stats.svelte +38 -0
  114. package/dist/components/Stats.svelte.d.ts +22 -0
  115. package/dist/components/Steps.svelte +204 -0
  116. package/dist/components/Steps.svelte.d.ts +66 -0
  117. package/dist/components/Subtitle.svelte +44 -0
  118. package/dist/components/Subtitle.svelte.d.ts +26 -0
  119. package/dist/components/Swatch.svelte +61 -0
  120. package/dist/components/Swatch.svelte.d.ts +27 -0
  121. package/dist/components/Switch.svelte +105 -0
  122. package/dist/components/Switch.svelte.d.ts +44 -0
  123. package/dist/components/Table.svelte +243 -0
  124. package/dist/components/Table.svelte.d.ts +121 -0
  125. package/dist/components/Tabs.svelte +142 -0
  126. package/dist/components/Tabs.svelte.d.ts +80 -0
  127. package/dist/components/Text.svelte +43 -0
  128. package/dist/components/Text.svelte.d.ts +25 -0
  129. package/dist/components/Textarea.svelte +76 -0
  130. package/dist/components/Textarea.svelte.d.ts +39 -0
  131. package/dist/components/Title.svelte +46 -0
  132. package/dist/components/Title.svelte.d.ts +29 -0
  133. package/dist/components/Toast.svelte +154 -0
  134. package/dist/components/Toast.svelte.d.ts +49 -0
  135. package/dist/components/Toggle.svelte +48 -0
  136. package/dist/components/Toggle.svelte.d.ts +25 -0
  137. package/dist/components/Tooltip.svelte +70 -0
  138. package/dist/components/Tooltip.svelte.d.ts +34 -0
  139. package/dist/components/WindowFrame.svelte +53 -0
  140. package/dist/components/WindowFrame.svelte.d.ts +24 -0
  141. package/dist/components/accordion-context.d.ts +8 -0
  142. package/dist/components/accordion-context.js +25 -0
  143. package/dist/components/color.d.ts +39 -0
  144. package/dist/components/color.js +92 -0
  145. package/dist/components/data-handler.svelte.d.ts +362 -0
  146. package/dist/components/data-handler.svelte.js +690 -0
  147. package/dist/components/file-icons.d.ts +25 -0
  148. package/dist/components/file-icons.js +46 -0
  149. package/dist/family-types.d.ts +45 -0
  150. package/dist/family-types.js +73 -0
  151. package/dist/generated/classes.d.ts +17 -0
  152. package/dist/generated/classes.js +2511 -0
  153. package/dist/generated/components.d.ts +39 -0
  154. package/dist/generated/components.js +28666 -0
  155. package/dist/generated/registry.d.ts +35 -0
  156. package/dist/generated/registry.js +2658 -0
  157. package/dist/index.d.ts +73 -0
  158. package/dist/index.js +99 -0
  159. package/dist/sepale-types.d.ts +8 -0
  160. package/dist/sepale-types.js +200 -0
  161. package/dist/theme.d.ts +123 -0
  162. package/dist/theme.js +226 -0
  163. package/dist/variants.d.ts +124 -0
  164. package/dist/variants.js +70 -0
  165. package/dist/vendor/air-datepicker/LICENSE.md +21 -0
  166. package/dist/vendor/air-datepicker/README.md +19 -0
  167. package/dist/vendor/air-datepicker/buttonPresets.d.ts +13 -0
  168. package/dist/vendor/air-datepicker/buttonPresets.js +12 -0
  169. package/dist/vendor/air-datepicker/consts.d.ts +18 -0
  170. package/dist/vendor/air-datepicker/consts.js +35 -0
  171. package/dist/vendor/air-datepicker/datepicker.d.ts +289 -0
  172. package/dist/vendor/air-datepicker/datepicker.js +1435 -0
  173. package/dist/vendor/air-datepicker/datepickerBody.d.ts +46 -0
  174. package/dist/vendor/air-datepicker/datepickerBody.js +386 -0
  175. package/dist/vendor/air-datepicker/datepickerButtons.d.ts +25 -0
  176. package/dist/vendor/air-datepicker/datepickerButtons.js +85 -0
  177. package/dist/vendor/air-datepicker/datepickerCell.d.ts +35 -0
  178. package/dist/vendor/air-datepicker/datepickerCell.js +297 -0
  179. package/dist/vendor/air-datepicker/datepickerKeyboard.d.ts +26 -0
  180. package/dist/vendor/air-datepicker/datepickerKeyboard.js +207 -0
  181. package/dist/vendor/air-datepicker/datepickerNav.d.ts +31 -0
  182. package/dist/vendor/air-datepicker/datepickerNav.js +200 -0
  183. package/dist/vendor/air-datepicker/datepickerTime.d.ts +60 -0
  184. package/dist/vendor/air-datepicker/datepickerTime.js +276 -0
  185. package/dist/vendor/air-datepicker/defaults.d.ts +65 -0
  186. package/dist/vendor/air-datepicker/defaults.js +79 -0
  187. package/dist/vendor/air-datepicker/index.d.ts +168 -0
  188. package/dist/vendor/air-datepicker/index.js +3 -0
  189. package/dist/vendor/air-datepicker/locale/ar.d.ts +4 -0
  190. package/dist/vendor/air-datepicker/locale/ar.js +14 -0
  191. package/dist/vendor/air-datepicker/locale/bg.d.ts +4 -0
  192. package/dist/vendor/air-datepicker/locale/bg.js +14 -0
  193. package/dist/vendor/air-datepicker/locale/ca.d.ts +4 -0
  194. package/dist/vendor/air-datepicker/locale/ca.js +14 -0
  195. package/dist/vendor/air-datepicker/locale/cs.d.ts +4 -0
  196. package/dist/vendor/air-datepicker/locale/cs.js +14 -0
  197. package/dist/vendor/air-datepicker/locale/da.d.ts +4 -0
  198. package/dist/vendor/air-datepicker/locale/da.js +14 -0
  199. package/dist/vendor/air-datepicker/locale/de.d.ts +4 -0
  200. package/dist/vendor/air-datepicker/locale/de.js +14 -0
  201. package/dist/vendor/air-datepicker/locale/el.d.ts +4 -0
  202. package/dist/vendor/air-datepicker/locale/el.js +14 -0
  203. package/dist/vendor/air-datepicker/locale/en.d.ts +4 -0
  204. package/dist/vendor/air-datepicker/locale/en.js +14 -0
  205. package/dist/vendor/air-datepicker/locale/es.d.ts +4 -0
  206. package/dist/vendor/air-datepicker/locale/es.js +14 -0
  207. package/dist/vendor/air-datepicker/locale/eu.d.ts +4 -0
  208. package/dist/vendor/air-datepicker/locale/eu.js +14 -0
  209. package/dist/vendor/air-datepicker/locale/fi.d.ts +4 -0
  210. package/dist/vendor/air-datepicker/locale/fi.js +14 -0
  211. package/dist/vendor/air-datepicker/locale/fr.d.ts +4 -0
  212. package/dist/vendor/air-datepicker/locale/fr.js +14 -0
  213. package/dist/vendor/air-datepicker/locale/hr.d.ts +4 -0
  214. package/dist/vendor/air-datepicker/locale/hr.js +14 -0
  215. package/dist/vendor/air-datepicker/locale/hu.d.ts +4 -0
  216. package/dist/vendor/air-datepicker/locale/hu.js +14 -0
  217. package/dist/vendor/air-datepicker/locale/id.d.ts +4 -0
  218. package/dist/vendor/air-datepicker/locale/id.js +14 -0
  219. package/dist/vendor/air-datepicker/locale/it.d.ts +4 -0
  220. package/dist/vendor/air-datepicker/locale/it.js +14 -0
  221. package/dist/vendor/air-datepicker/locale/ja.d.ts +4 -0
  222. package/dist/vendor/air-datepicker/locale/ja.js +14 -0
  223. package/dist/vendor/air-datepicker/locale/ko.d.ts +4 -0
  224. package/dist/vendor/air-datepicker/locale/ko.js +14 -0
  225. package/dist/vendor/air-datepicker/locale/nb.d.ts +4 -0
  226. package/dist/vendor/air-datepicker/locale/nb.js +14 -0
  227. package/dist/vendor/air-datepicker/locale/nl.d.ts +4 -0
  228. package/dist/vendor/air-datepicker/locale/nl.js +14 -0
  229. package/dist/vendor/air-datepicker/locale/pl.d.ts +4 -0
  230. package/dist/vendor/air-datepicker/locale/pl.js +14 -0
  231. package/dist/vendor/air-datepicker/locale/pt-BR.d.ts +4 -0
  232. package/dist/vendor/air-datepicker/locale/pt-BR.js +14 -0
  233. package/dist/vendor/air-datepicker/locale/pt.d.ts +4 -0
  234. package/dist/vendor/air-datepicker/locale/pt.js +14 -0
  235. package/dist/vendor/air-datepicker/locale/ro.d.ts +4 -0
  236. package/dist/vendor/air-datepicker/locale/ro.js +14 -0
  237. package/dist/vendor/air-datepicker/locale/ru.d.ts +4 -0
  238. package/dist/vendor/air-datepicker/locale/ru.js +14 -0
  239. package/dist/vendor/air-datepicker/locale/si.d.ts +4 -0
  240. package/dist/vendor/air-datepicker/locale/si.js +14 -0
  241. package/dist/vendor/air-datepicker/locale/sk.d.ts +4 -0
  242. package/dist/vendor/air-datepicker/locale/sk.js +14 -0
  243. package/dist/vendor/air-datepicker/locale/sl.d.ts +4 -0
  244. package/dist/vendor/air-datepicker/locale/sl.js +14 -0
  245. package/dist/vendor/air-datepicker/locale/sv.d.ts +4 -0
  246. package/dist/vendor/air-datepicker/locale/sv.js +14 -0
  247. package/dist/vendor/air-datepicker/locale/th.d.ts +4 -0
  248. package/dist/vendor/air-datepicker/locale/th.js +14 -0
  249. package/dist/vendor/air-datepicker/locale/tr.d.ts +4 -0
  250. package/dist/vendor/air-datepicker/locale/tr.js +16 -0
  251. package/dist/vendor/air-datepicker/locale/uk.d.ts +4 -0
  252. package/dist/vendor/air-datepicker/locale/uk.js +14 -0
  253. package/dist/vendor/air-datepicker/locale/zh.d.ts +4 -0
  254. package/dist/vendor/air-datepicker/locale/zh.js +14 -0
  255. package/dist/vendor/air-datepicker/typedefs.d.ts +3 -0
  256. package/dist/vendor/air-datepicker/typedefs.js +15 -0
  257. package/dist/vendor/air-datepicker/utils.d.ts +155 -0
  258. package/dist/vendor/air-datepicker/utils.js +395 -0
  259. package/dist/vendor/air-datepicker/withEvents.d.ts +1 -0
  260. package/dist/vendor/air-datepicker/withEvents.js +39 -0
  261. package/package.json +44 -3
@@ -0,0 +1,93 @@
1
+ /** What .kanban is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015). */
3
+ export declare const PREFIX = "kanban";
4
+ export declare const AXES: {
5
+ readonly size: readonly ["xs", "sm", "md", "lg", "xl"];
6
+ readonly gap: readonly ["none", "tight", "loose"];
7
+ };
8
+ export declare const FLAGS: {
9
+ readonly loading: "Fade the columns while new items are on their way.";
10
+ };
11
+ export declare const PARTS: readonly ["column", "column-over", "column-head", "column-title", "column-count", "column-body", "column-foot", "column-empty", "item", "item-selected", "item-dirty", "item-dragged", "marker"];
12
+ export type KanbanColumn = {
13
+ id: string;
14
+ /** Defaults to the id. */
15
+ title?: string;
16
+ };
17
+ export type KanbanMove<Item> = {
18
+ item: Item;
19
+ /** The column it leaves. */
20
+ from: string;
21
+ /** The column it lands in: `from` when it only changed places. */
22
+ to: string;
23
+ /** Its place in `to`, counted without the item itself. */
24
+ index: number;
25
+ };
26
+ /**
27
+ * Items in columns, one column per state they can be in. Like a table or a
28
+ * grid it knows nothing of where its items come from, and it moves nothing:
29
+ * dragging a card, or Shift + an arrow key on it, calls `onMove`, and the
30
+ * items only change when the caller changes them. Without `onMove` the board
31
+ * is read-only.
32
+ *
33
+ * The drag is the browser's own, which brings the drag image, Escape to
34
+ * cancel and the scrolling at the edges. An item naming a column that is not
35
+ * in `columns` is not drawn.
36
+ */
37
+ import { type Snippet } from 'svelte';
38
+ import type { HTMLAttributes } from 'svelte/elements';
39
+ declare function $$render<Item>(): {
40
+ props: {
41
+ readonly size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
42
+ readonly gap?: "none" | "tight" | "loose" | undefined;
43
+ } & {
44
+ loading?: boolean | undefined;
45
+ } & {
46
+ background?: string;
47
+ } & HTMLAttributes<HTMLDivElement> & {
48
+ /** The items: your data, as is, each column keeping their order. */
49
+ items?: Item[];
50
+ /** The columns, in order. */
51
+ columns: KanbanColumn[];
52
+ /** The id of the column an item belongs to. */
53
+ columnOf: (item: Item) => string;
54
+ /** How one item is drawn, given its place in its column. */
55
+ item: Snippet<[Item, number]>;
56
+ /** An item's identity, for `selected`, `dirty` and keyed rendering. Defaults to its index. */
57
+ key?: (item: Item, index: number) => string;
58
+ /** Replaces a column's title and count. */
59
+ head?: Snippet<[KanbanColumn, Item[]]>;
60
+ /** Drawn under a column's items: an add button, usually. */
61
+ foot?: Snippet<[KanbanColumn]>;
62
+ /** Drawn in a column with no items. */
63
+ empty?: Snippet<[KanbanColumn]>;
64
+ /** Keys of the items to draw as selected. */
65
+ selected?: Iterable<string>;
66
+ /** Keys of the items to draw as changed and not yet saved. */
67
+ dirty?: Iterable<string>;
68
+ /** An item was dropped somewhere new. Given, it makes the items movable. */
69
+ onMove?: (move: KanbanMove<Item>) => void;
70
+ class?: string;
71
+ };
72
+ exports: {};
73
+ bindings: "";
74
+ slots: {};
75
+ events: {};
76
+ };
77
+ declare class __sveltets_Render<Item> {
78
+ props(): ReturnType<typeof $$render<Item>>['props'];
79
+ events(): ReturnType<typeof $$render<Item>>['events'];
80
+ slots(): ReturnType<typeof $$render<Item>>['slots'];
81
+ bindings(): "";
82
+ exports(): {};
83
+ }
84
+ interface $$IsomorphicComponent {
85
+ new <Item>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Item>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Item>['props']>, ReturnType<__sveltets_Render<Item>['events']>, ReturnType<__sveltets_Render<Item>['slots']>> & {
86
+ $$bindings?: ReturnType<__sveltets_Render<Item>['bindings']>;
87
+ } & ReturnType<__sveltets_Render<Item>['exports']>;
88
+ <Item>(internal: unknown, props: ReturnType<__sveltets_Render<Item>['props']> & {}): ReturnType<__sveltets_Render<Item>['exports']>;
89
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
90
+ }
91
+ declare const Kanban: $$IsomorphicComponent;
92
+ type Kanban<Item> = InstanceType<typeof Kanban<Item>>;
93
+ export default Kanban;
@@ -0,0 +1,32 @@
1
+ <script module lang="ts">
2
+ /** What .label is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015).
4
+
5
+ Inline text, on its own or inside a field as a prefix/suffix
6
+ (`.input > .label`). The label that floats over a field is
7
+ FloatingLabel — a different component, not a setting of this one
8
+ (ADR 0009). */
9
+ export const PREFIX = 'label';
10
+
11
+ export const AXES = {} as const;
12
+
13
+ export const FLAGS = {} as const;
14
+ export const PARTS = [] as const;
15
+ </script>
16
+
17
+ <script lang="ts">
18
+ import type { Snippet } from 'svelte';
19
+ import type { HTMLLabelAttributes } from 'svelte/elements';
20
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
21
+
22
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLLabelAttributes {
23
+ class?: string;
24
+ children?: Snippet;
25
+ }
26
+
27
+ let { class: klass = '', children, ...axes }: Props = $props();
28
+
29
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
30
+ </script>
31
+
32
+ <label {...applied.rest} class={cx(PREFIX, applied.classes, klass)}>{@render children?.()}</label>
@@ -0,0 +1,21 @@
1
+ /** What .label is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015).
3
+
4
+ Inline text, on its own or inside a field as a prefix/suffix
5
+ (`.input > .label`). The label that floats over a field is
6
+ FloatingLabel — a different component, not a setting of this one
7
+ (ADR 0009). */
8
+ export declare const PREFIX = "label";
9
+ export declare const AXES: {};
10
+ export declare const FLAGS: {};
11
+ export declare const PARTS: readonly [];
12
+ import type { Snippet } from 'svelte';
13
+ import type { HTMLLabelAttributes } from 'svelte/elements';
14
+ import { type AxisProps } from '../variants.js';
15
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLLabelAttributes {
16
+ class?: string;
17
+ children?: Snippet;
18
+ }
19
+ declare const Label: import("svelte").Component<Props, {}, "">;
20
+ type Label = ReturnType<typeof Label>;
21
+ export default Label;
@@ -0,0 +1,44 @@
1
+ <script module lang="ts">
2
+ /** What .laptop-frame is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015). */
4
+ export const PREFIX = 'laptop-frame';
5
+
6
+ export const AXES = {} as const;
7
+
8
+ export const FLAGS = {} as const;
9
+ export const PARTS = ['lid', 'screen', 'base'] as const;
10
+ </script>
11
+
12
+ <script lang="ts">
13
+ /**
14
+ * A laptop drawn around content: a lid holding a 16:10 screen that scrolls,
15
+ * on a wider base. Its width is `--laptop-frame-width`.
16
+ */
17
+ import type { Snippet } from 'svelte';
18
+ import type { HTMLAttributes } from 'svelte/elements';
19
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
20
+
21
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLDivElement> {
22
+ class?: string;
23
+ /** What the screen shows. */
24
+ children?: Snippet;
25
+ }
26
+
27
+ // The axes are deliberately NOT destructured: they travel in `axes` and are
28
+ // resolved by name, so an axis a family drops changes nothing down here.
29
+ let {
30
+ class: klass = '',
31
+ children,
32
+ ...axes
33
+ }: Props = $props();
34
+
35
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
36
+ let classes = $derived(cx(PREFIX, applied.classes, klass));
37
+ </script>
38
+
39
+ <div {...applied.rest} class={classes}>
40
+ <div class="laptop-frame-lid">
41
+ <div class="laptop-frame-screen">{@render children?.()}</div>
42
+ </div>
43
+ <div class="laptop-frame-base" aria-hidden="true"></div>
44
+ </div>
@@ -0,0 +1,21 @@
1
+ /** What .laptop-frame is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015). */
3
+ export declare const PREFIX = "laptop-frame";
4
+ export declare const AXES: {};
5
+ export declare const FLAGS: {};
6
+ export declare const PARTS: readonly ["lid", "screen", "base"];
7
+ /**
8
+ * A laptop drawn around content: a lid holding a 16:10 screen that scrolls,
9
+ * on a wider base. Its width is `--laptop-frame-width`.
10
+ */
11
+ import type { Snippet } from 'svelte';
12
+ import type { HTMLAttributes } from 'svelte/elements';
13
+ import { type AxisProps } from '../variants.js';
14
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLDivElement> {
15
+ class?: string;
16
+ /** What the screen shows. */
17
+ children?: Snippet;
18
+ }
19
+ declare const LaptopFrame: import("svelte").Component<Props, {}, "">;
20
+ type LaptopFrame = ReturnType<typeof LaptopFrame>;
21
+ export default LaptopFrame;
@@ -0,0 +1,95 @@
1
+ <script module lang="ts">
2
+ /** What .list is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015).
4
+
5
+ The list draws its own rows: `.list-row` is a PART, not something a
6
+ caller opts into. What goes INSIDE a row is the caller's, three ways —
7
+ a string, a `row` snippet for every row at once, or a snippet in place
8
+ of one entry. The wrapper and its class stay ours either way. */
9
+ export const PREFIX = 'list';
10
+
11
+ export const AXES = {
12
+ size: ['xs', 'sm', 'md', 'lg', 'xl'],
13
+ /* A floating list of things to pick from, rather than a block of rows. */
14
+ variant: ['suggestions']
15
+ } as const;
16
+
17
+ export const FLAGS = {
18
+ loading: 'Fade the rows while new ones are on their way.'
19
+ } as const;
20
+ export const PARTS = ['row', 'row-selected', 'row-dirty', 'col-grow', 'col-wrap', 'empty'] as const;
21
+ </script>
22
+
23
+ <script lang="ts" generics="Row">
24
+ import type { Snippet } from 'svelte';
25
+ import type { HTMLAttributes } from 'svelte/elements';
26
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
27
+
28
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLUListElement> {
29
+ /**
30
+ * The rows. An entry is your data — rendered by `row`, or as text when
31
+ * there is no `row` — or a snippet standing in for that one row.
32
+ */
33
+ rows?: (Row | Snippet)[];
34
+ /**
35
+ * How to draw every row that is data. Written once for the whole list;
36
+ * an entry that is itself a snippet skips it.
37
+ */
38
+ row?: Snippet<[Row]>;
39
+ /** A row's identity, for `selected`, `dirty` and keyed rendering. Defaults to its index. */
40
+ key?: (row: Row, index: number) => string;
41
+ /** Drawn in place of the rows when there are none. */
42
+ empty?: Snippet;
43
+ /** Keys of the rows to draw as selected. */
44
+ selected?: Iterable<string>;
45
+ /** Keys of the rows to draw as changed and not yet saved. */
46
+ dirty?: Iterable<string>;
47
+ class?: string;
48
+ }
49
+
50
+ let {
51
+ rows = [],
52
+ row,
53
+ key = (_row: Row, i: number) => String(i),
54
+ empty,
55
+ selected,
56
+ dirty,
57
+ class: klass = '',
58
+ ...axes
59
+ }: Props = $props();
60
+
61
+ let selectedSet = $derived(new Set(selected ?? []));
62
+ let dirtySet = $derived(new Set(dirty ?? []));
63
+
64
+ /* A snippet has no runtime marker — compiled, it is a plain function — so
65
+ `typeof` is the only test. Fine as long as a row is never a function.
66
+ A guard rather than an inline `typeof`, because `Row` is generic and
67
+ TypeScript cannot rule out a callable `Row` on its own. */
68
+ const isSnippet = (entry: Row | Snippet): entry is Snippet => typeof entry === 'function';
69
+
70
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
71
+ let classes = $derived(cx(PREFIX, applied.classes, klass));
72
+ </script>
73
+
74
+ <ul {...applied.rest} class={classes}>
75
+ {#each rows as entry, i (isSnippet(entry) ? `snippet-${i}` : key(entry, i))}
76
+ {@const k = isSnippet(entry) ? String(i) : key(entry, i)}
77
+ <li
78
+ class={cx(
79
+ `${PREFIX}-row`,
80
+ selectedSet.has(k) && `${PREFIX}-row-selected`,
81
+ dirtySet.has(k) && `${PREFIX}-row-dirty`
82
+ )}
83
+ >
84
+ {#if isSnippet(entry)}
85
+ {@render entry()}
86
+ {:else if row}
87
+ {@render row(entry)}
88
+ {:else}
89
+ {entry}
90
+ {/if}
91
+ </li>
92
+ {:else}
93
+ {#if empty}<li class={`${PREFIX}-empty`}>{@render empty()}</li>{/if}
94
+ {/each}
95
+ </ul>
@@ -0,0 +1,69 @@
1
+ /** What .list is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015).
3
+
4
+ The list draws its own rows: `.list-row` is a PART, not something a
5
+ caller opts into. What goes INSIDE a row is the caller's, three ways —
6
+ a string, a `row` snippet for every row at once, or a snippet in place
7
+ of one entry. The wrapper and its class stay ours either way. */
8
+ export declare const PREFIX = "list";
9
+ export declare const AXES: {
10
+ readonly size: readonly ["xs", "sm", "md", "lg", "xl"];
11
+ readonly variant: readonly ["suggestions"];
12
+ };
13
+ export declare const FLAGS: {
14
+ readonly loading: "Fade the rows while new ones are on their way.";
15
+ };
16
+ export declare const PARTS: readonly ["row", "row-selected", "row-dirty", "col-grow", "col-wrap", "empty"];
17
+ import type { Snippet } from 'svelte';
18
+ import type { HTMLAttributes } from 'svelte/elements';
19
+ declare function $$render<Row>(): {
20
+ props: {
21
+ readonly size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
22
+ readonly variant?: "suggestions" | undefined;
23
+ } & {
24
+ loading?: boolean | undefined;
25
+ } & {
26
+ background?: string;
27
+ } & HTMLAttributes<HTMLUListElement> & {
28
+ /**
29
+ * The rows. An entry is your data — rendered by `row`, or as text when
30
+ * there is no `row` — or a snippet standing in for that one row.
31
+ */
32
+ rows?: (Row | Snippet)[];
33
+ /**
34
+ * How to draw every row that is data. Written once for the whole list;
35
+ * an entry that is itself a snippet skips it.
36
+ */
37
+ row?: Snippet<[Row]>;
38
+ /** A row's identity, for `selected`, `dirty` and keyed rendering. Defaults to its index. */
39
+ key?: (row: Row, index: number) => string;
40
+ /** Drawn in place of the rows when there are none. */
41
+ empty?: Snippet;
42
+ /** Keys of the rows to draw as selected. */
43
+ selected?: Iterable<string>;
44
+ /** Keys of the rows to draw as changed and not yet saved. */
45
+ dirty?: Iterable<string>;
46
+ class?: string;
47
+ };
48
+ exports: {};
49
+ bindings: "";
50
+ slots: {};
51
+ events: {};
52
+ };
53
+ declare class __sveltets_Render<Row> {
54
+ props(): ReturnType<typeof $$render<Row>>['props'];
55
+ events(): ReturnType<typeof $$render<Row>>['events'];
56
+ slots(): ReturnType<typeof $$render<Row>>['slots'];
57
+ bindings(): "";
58
+ exports(): {};
59
+ }
60
+ interface $$IsomorphicComponent {
61
+ new <Row>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Row>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Row>['props']>, ReturnType<__sveltets_Render<Row>['events']>, ReturnType<__sveltets_Render<Row>['slots']>> & {
62
+ $$bindings?: ReturnType<__sveltets_Render<Row>['bindings']>;
63
+ } & ReturnType<__sveltets_Render<Row>['exports']>;
64
+ <Row>(internal: unknown, props: ReturnType<__sveltets_Render<Row>['props']> & {}): ReturnType<__sveltets_Render<Row>['exports']>;
65
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
66
+ }
67
+ declare const List: $$IsomorphicComponent;
68
+ type List<Row> = InstanceType<typeof List<Row>>;
69
+ export default List;
@@ -0,0 +1,37 @@
1
+ <script module lang="ts">
2
+ /** What .loading is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015). */
4
+ export const PREFIX = 'loading';
5
+
6
+ export const AXES = {
7
+ size: ['xs', 'sm', 'md', 'lg', 'xl'],
8
+ /* Which indicator is drawn. They share nothing but the name, so this is
9
+ one exclusive axis with no better word than `variant`. */
10
+ variant: ['spinner', 'dots', 'ring', 'ball', 'bars', 'infinity']
11
+ } as const;
12
+
13
+ export const FLAGS = {} as const;
14
+ export const PARTS = [] as const;
15
+ </script>
16
+
17
+ <script lang="ts">
18
+ import type { Snippet } from 'svelte';
19
+ import type { HTMLAttributes } from 'svelte/elements';
20
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
21
+
22
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLSpanElement> {
23
+ class?: string;
24
+ }
25
+
26
+ // The axes are deliberately NOT destructured: they travel in `axes` and are
27
+ // resolved by name, so an axis a family drops changes nothing down here.
28
+ let {
29
+ class: klass = '',
30
+ ...axes
31
+ }: Props = $props();
32
+
33
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
34
+ let classes = $derived(cx(PREFIX, applied.classes, klass));
35
+ </script>
36
+
37
+ <span {...applied.rest} class={classes}></span>
@@ -0,0 +1,17 @@
1
+ /** What .loading is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015). */
3
+ export declare const PREFIX = "loading";
4
+ export declare const AXES: {
5
+ readonly size: readonly ["xs", "sm", "md", "lg", "xl"];
6
+ readonly variant: readonly ["spinner", "dots", "ring", "ball", "bars", "infinity"];
7
+ };
8
+ export declare const FLAGS: {};
9
+ export declare const PARTS: readonly [];
10
+ import type { HTMLAttributes } from 'svelte/elements';
11
+ import { type AxisProps } from '../variants.js';
12
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLSpanElement> {
13
+ class?: string;
14
+ }
15
+ declare const Loading: import("svelte").Component<Props, {}, "">;
16
+ type Loading = ReturnType<typeof Loading>;
17
+ export default Loading;
@@ -0,0 +1,144 @@
1
+ <script module lang="ts">
2
+ /** What .menu is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015).
4
+
5
+ The menu draws its own rows, so every class below the root is a PART:
6
+ nobody opts into `.menu-item` or `.menu-active`, they follow from the
7
+ data. A divider is an item with `divider: true` — an empty <li>. */
8
+ export const PREFIX = 'menu';
9
+
10
+ export const AXES = {
11
+ size: ['xs', 'sm', 'md', 'lg', 'xl'],
12
+ /* A menu runs down the page unless it is told to run across it. */
13
+ direction: ['horizontal']
14
+ } as const;
15
+
16
+ export const FLAGS = {} as const;
17
+ export const PARTS = ['item', 'active', 'disabled', 'toggle', 'sub', 'sub-closed', 'title'] as const;
18
+
19
+ import type { Snippet } from 'svelte';
20
+
21
+ /** One row of a menu: a link, a section title, a divider, or a group. */
22
+ export interface MenuNode {
23
+ /** The row's text, or a snippet drawing whatever belongs in its place. */
24
+ label?: string | Snippet;
25
+ /** A section heading rather than a row — renders `.menu-title`. */
26
+ title?: string | Snippet;
27
+ /** A blank separator between two groups — an empty <li>. */
28
+ divider?: boolean;
29
+ /** Where the row goes. Without it the row is a <button>. */
30
+ href?: string;
31
+ /** Mark it as where the visitor currently is. */
32
+ active?: boolean;
33
+ /** Unreachable, and drawn as such. */
34
+ disabled?: boolean;
35
+ /** A nested group. Supplying it turns the row into its toggle. */
36
+ items?: MenuNode[];
37
+ /** Whether that group starts open. Open by default. */
38
+ open?: boolean;
39
+ }
40
+ </script>
41
+
42
+ <script lang="ts">
43
+ import type { HTMLAttributes } from 'svelte/elements';
44
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
45
+
46
+ interface Props
47
+ extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>,
48
+ HTMLAttributes<HTMLUListElement> {
49
+ /**
50
+ * The rows, nested as deep as needed. A node's `label` and `title` take
51
+ * a snippet as readily as a string, for the one row that differs.
52
+ */
53
+ items?: MenuNode[];
54
+ /**
55
+ * How to draw the inside of every row. Written once for the whole menu;
56
+ * a node whose own `label` is a snippet skips it.
57
+ */
58
+ row?: Snippet<[MenuNode]>;
59
+ /** Called when a row without an href is chosen. */
60
+ onSelect?: (node: MenuNode) => void;
61
+ class?: string;
62
+ }
63
+
64
+ let { items = [], row, onSelect, class: klass = '', ...axes }: Props = $props();
65
+
66
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
67
+ let classes = $derived(cx(PREFIX, applied.classes, klass));
68
+
69
+ // Open/closed lives here, keyed by the row's path, so the caller can hand
70
+ // over plain data and still get a working disclosure. `node.open` is the
71
+ // starting point; once a row is clicked, this map wins.
72
+ const uid = $props.id();
73
+ let toggled = $state<Record<string, boolean>>({});
74
+ const isOpen = (key: string, node: MenuNode) => toggled[key] ?? node.open ?? true;
75
+
76
+ function rowClass(node: MenuNode, group: boolean) {
77
+ return cx(
78
+ `${PREFIX}-item`,
79
+ group && `${PREFIX}-toggle`,
80
+ node.active && `${PREFIX}-active`,
81
+ node.disabled && `${PREFIX}-disabled`
82
+ );
83
+ }
84
+ </script>
85
+
86
+ {#snippet text(value: string | Snippet | undefined)}
87
+ {#if typeof value === 'function'}{@render value()}{:else}{value}{/if}
88
+ {/snippet}
89
+
90
+ {#snippet inside(node: MenuNode)}
91
+ {#if typeof node.label === 'function'}{@render node.label()}
92
+ {:else if row}{@render row(node)}
93
+ {:else}{node.label}{/if}
94
+ {/snippet}
95
+
96
+ {#snippet rows(nodes: MenuNode[], path: string)}
97
+ {#each nodes as node, i (path + i)}
98
+ {@const key = path + i}
99
+ {#if node.divider}
100
+ <li></li>
101
+ {:else if node.title !== undefined}
102
+ <li class={`${PREFIX}-title`}>{@render text(node.title)}</li>
103
+ {:else if node.items?.length}
104
+ <li>
105
+ <button
106
+ type="button"
107
+ class={rowClass(node, true)}
108
+ disabled={node.disabled}
109
+ aria-expanded={isOpen(key, node)}
110
+ aria-controls="{uid}-{key}"
111
+ onclick={() => (toggled[key] = !isOpen(key, node))}
112
+ >{@render inside(node)}</button>
113
+ <!-- As in Collapse: a closed sub-menu is inert, so Tab skips its rows. -->
114
+ <ul
115
+ id="{uid}-{key}"
116
+ class={cx(`${PREFIX}-sub`, !isOpen(key, node) && `${PREFIX}-sub-closed`)}
117
+ inert={!isOpen(key, node)}
118
+ >
119
+ {@render rows(node.items, key + '.')}
120
+ </ul>
121
+ </li>
122
+ {:else if node.href}
123
+ <li>
124
+ <a
125
+ class={rowClass(node, false)}
126
+ href={node.disabled ? undefined : node.href}
127
+ aria-disabled={node.disabled ? 'true' : undefined}
128
+ aria-current={node.active ? 'page' : undefined}
129
+ >{@render inside(node)}</a>
130
+ </li>
131
+ {:else}
132
+ <li>
133
+ <button
134
+ type="button"
135
+ class={rowClass(node, false)}
136
+ disabled={node.disabled}
137
+ onclick={() => onSelect?.(node)}
138
+ >{@render inside(node)}</button>
139
+ </li>
140
+ {/if}
141
+ {/each}
142
+ {/snippet}
143
+
144
+ <ul {...applied.rest} class={classes}>{@render rows(items, '')}</ul>
@@ -0,0 +1,53 @@
1
+ /** What .menu is made of, classified. The props follow the
2
+ families the project registers (variants.ts, ADR 0015).
3
+
4
+ The menu draws its own rows, so every class below the root is a PART:
5
+ nobody opts into `.menu-item` or `.menu-active`, they follow from the
6
+ data. A divider is an item with `divider: true` — an empty <li>. */
7
+ export declare const PREFIX = "menu";
8
+ export declare const AXES: {
9
+ readonly size: readonly ["xs", "sm", "md", "lg", "xl"];
10
+ readonly direction: readonly ["horizontal"];
11
+ };
12
+ export declare const FLAGS: {};
13
+ export declare const PARTS: readonly ["item", "active", "disabled", "toggle", "sub", "sub-closed", "title"];
14
+ import type { Snippet } from 'svelte';
15
+ /** One row of a menu: a link, a section title, a divider, or a group. */
16
+ export interface MenuNode {
17
+ /** The row's text, or a snippet drawing whatever belongs in its place. */
18
+ label?: string | Snippet;
19
+ /** A section heading rather than a row — renders `.menu-title`. */
20
+ title?: string | Snippet;
21
+ /** A blank separator between two groups — an empty <li>. */
22
+ divider?: boolean;
23
+ /** Where the row goes. Without it the row is a <button>. */
24
+ href?: string;
25
+ /** Mark it as where the visitor currently is. */
26
+ active?: boolean;
27
+ /** Unreachable, and drawn as such. */
28
+ disabled?: boolean;
29
+ /** A nested group. Supplying it turns the row into its toggle. */
30
+ items?: MenuNode[];
31
+ /** Whether that group starts open. Open by default. */
32
+ open?: boolean;
33
+ }
34
+ import type { HTMLAttributes } from 'svelte/elements';
35
+ import { type AxisProps } from '../variants.js';
36
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLUListElement> {
37
+ /**
38
+ * The rows, nested as deep as needed. A node's `label` and `title` take
39
+ * a snippet as readily as a string, for the one row that differs.
40
+ */
41
+ items?: MenuNode[];
42
+ /**
43
+ * How to draw the inside of every row. Written once for the whole menu;
44
+ * a node whose own `label` is a snippet skips it.
45
+ */
46
+ row?: Snippet<[MenuNode]>;
47
+ /** Called when a row without an href is chosen. */
48
+ onSelect?: (node: MenuNode) => void;
49
+ class?: string;
50
+ }
51
+ declare const Menu: import("svelte").Component<Props, {}, "">;
52
+ type Menu = ReturnType<typeof Menu>;
53
+ export default Menu;
@@ -0,0 +1,41 @@
1
+ <script module lang="ts">
2
+ /** What .mobile-frame is made of, classified. The props follow the
3
+ families the project registers (variants.ts, ADR 0015). */
4
+ export const PREFIX = 'mobile-frame';
5
+
6
+ export const AXES = {} as const;
7
+
8
+ export const FLAGS = {} as const;
9
+ export const PARTS = ['screen'] as const;
10
+ </script>
11
+
12
+ <script lang="ts">
13
+ /**
14
+ * A phone drawn around content — for showcases and screenshots, not an
15
+ * emulator. Its width is `--mobile-frame-width`; the height follows.
16
+ */
17
+ import type { Snippet } from 'svelte';
18
+ import type { HTMLAttributes } from 'svelte/elements';
19
+ import { applyAxes, cx, type AxisProps } from '../variants.js';
20
+
21
+ interface Props extends AxisProps<typeof AXES, typeof FLAGS, typeof PREFIX>, HTMLAttributes<HTMLDivElement> {
22
+ class?: string;
23
+ /** What the screen shows. It scrolls. */
24
+ children?: Snippet;
25
+ }
26
+
27
+ // The axes are deliberately NOT destructured: they travel in `axes` and are
28
+ // resolved by name, so an axis a family drops changes nothing down here.
29
+ let {
30
+ class: klass = '',
31
+ children,
32
+ ...axes
33
+ }: Props = $props();
34
+
35
+ let applied = $derived(applyAxes(PREFIX, AXES, FLAGS, axes));
36
+ let classes = $derived(cx(PREFIX, applied.classes, klass));
37
+ </script>
38
+
39
+ <div {...applied.rest} class={classes}>
40
+ <div class="mobile-frame-screen">{@render children?.()}</div>
41
+ </div>