@x33025/sveltely 0.1.1 → 0.1.3

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 (156) hide show
  1. package/dist/components/Library/AnimatedNumber/AnimatedNumber.demo.svelte +1 -1
  2. package/dist/components/Library/AsyncButton/AsyncButton.svelte +42 -16
  3. package/dist/components/Library/Button/Button.demo.svelte +5 -3
  4. package/dist/components/Library/Button/Button.demo.svelte.d.ts +1 -0
  5. package/dist/components/Library/Button/Button.svelte +21 -13
  6. package/dist/components/Library/Calendar/Calendar.demo.svelte +2 -14
  7. package/dist/components/Library/Calendar/Calendar.svelte +69 -65
  8. package/dist/components/Library/Checkbox/Checkbox.svelte +13 -14
  9. package/dist/components/Library/ChipInput/ChipInput.demo.svelte +1 -1
  10. package/dist/components/Library/ChipInput/ChipInput.svelte +7 -4
  11. package/dist/components/Library/Divider/Divider.svelte +10 -0
  12. package/dist/components/Library/Divider/Divider.svelte.d.ts +26 -0
  13. package/dist/components/Library/Divider/index.d.ts +1 -0
  14. package/dist/components/Library/Divider/index.js +1 -0
  15. package/dist/components/Library/Dropdown/Action.svelte +60 -0
  16. package/dist/components/Library/Dropdown/Action.svelte.d.ts +11 -0
  17. package/dist/components/Library/Dropdown/Divider.svelte +5 -0
  18. package/dist/components/Library/Dropdown/Divider.svelte.d.ts +19 -0
  19. package/dist/components/Library/Dropdown/Dropdown.demo.svelte +182 -65
  20. package/dist/components/Library/Dropdown/Dropdown.demo.svelte.d.ts +2 -1
  21. package/dist/components/Library/Dropdown/Dropdown.svelte +95 -250
  22. package/dist/components/Library/Dropdown/Dropdown.svelte.d.ts +17 -16
  23. package/dist/components/Library/Dropdown/Item.svelte +68 -0
  24. package/dist/components/Library/Dropdown/Item.svelte.d.ts +31 -0
  25. package/dist/components/Library/Dropdown/Section.svelte +34 -0
  26. package/dist/components/Library/Dropdown/Section.svelte.d.ts +8 -0
  27. package/dist/components/Library/Dropdown/context.d.ts +34 -0
  28. package/dist/components/Library/Dropdown/context.js +6 -0
  29. package/dist/components/Library/Dropdown/index.d.ts +13 -2
  30. package/dist/components/Library/Dropdown/index.js +11 -1
  31. package/dist/components/Library/Floating/Floating.svelte +44 -7
  32. package/dist/components/Library/ForEach/ForEach.svelte +14 -0
  33. package/dist/components/Library/ForEach/ForEach.svelte.d.ts +28 -0
  34. package/dist/components/Library/ForEach/index.d.ts +1 -0
  35. package/dist/components/Library/ForEach/index.js +1 -0
  36. package/dist/components/Library/Grid/Grid.svelte +74 -0
  37. package/dist/components/Library/Grid/Grid.svelte.d.ts +13 -0
  38. package/dist/components/Library/Grid/index.d.ts +1 -0
  39. package/dist/components/Library/Grid/index.js +1 -0
  40. package/dist/components/Library/GridItem/GridItem.svelte +65 -0
  41. package/dist/components/Library/GridItem/GridItem.svelte.d.ts +14 -0
  42. package/dist/components/Library/GridItem/index.d.ts +1 -0
  43. package/dist/components/Library/GridItem/index.js +1 -0
  44. package/dist/components/Library/HStack/HStack.svelte +45 -0
  45. package/dist/components/Library/HStack/HStack.svelte.d.ts +9 -0
  46. package/dist/components/Library/HStack/index.d.ts +1 -0
  47. package/dist/components/Library/HStack/index.js +1 -0
  48. package/dist/components/Library/Image/Image.demo.svelte +18 -0
  49. package/dist/components/Library/Image/Image.demo.svelte.d.ts +23 -0
  50. package/dist/components/Library/Image/Image.svelte +57 -0
  51. package/dist/components/Library/Image/Image.svelte.d.ts +17 -0
  52. package/dist/components/Library/Image/ImagePlaceholder.svelte +202 -0
  53. package/dist/components/Library/Image/ImagePlaceholder.svelte.d.ts +7 -0
  54. package/dist/components/Library/Image/index.d.ts +1 -0
  55. package/dist/components/Library/Image/index.js +1 -0
  56. package/dist/components/Library/ImageMask/BrushPreview.svelte +119 -0
  57. package/dist/components/Library/ImageMask/BrushPreview.svelte.d.ts +11 -0
  58. package/dist/components/Library/ImageMask/ImageMask.demo.svelte +117 -0
  59. package/dist/components/Library/ImageMask/ImageMask.demo.svelte.d.ts +10 -0
  60. package/dist/components/Library/ImageMask/ImageMask.svelte +46 -0
  61. package/dist/components/Library/ImageMask/ImageMask.svelte.d.ts +20 -0
  62. package/dist/components/Library/ImageMask/MaskLayer.svelte +341 -0
  63. package/dist/components/Library/ImageMask/MaskLayer.svelte.d.ts +12 -0
  64. package/dist/components/Library/ImageMask/contour.d.ts +11 -0
  65. package/dist/components/Library/ImageMask/contour.js +152 -0
  66. package/dist/components/Library/ImageMask/index.d.ts +2 -0
  67. package/dist/components/Library/ImageMask/index.js +1 -0
  68. package/dist/components/Library/ImageMask/marchingAnts.d.ts +8 -0
  69. package/dist/components/Library/ImageMask/marchingAnts.js +29 -0
  70. package/dist/components/Library/ImageMask/maskSurface.d.ts +5 -0
  71. package/dist/components/Library/ImageMask/maskSurface.js +94 -0
  72. package/dist/components/Library/ImageMask/types.d.ts +23 -0
  73. package/dist/components/Library/Label/Label.demo.svelte +28 -0
  74. package/dist/components/Library/Label/Label.demo.svelte.d.ts +9 -0
  75. package/dist/components/Library/Label/Label.svelte +175 -0
  76. package/dist/components/Library/Label/Label.svelte.d.ts +18 -0
  77. package/dist/components/Library/Label/index.d.ts +1 -0
  78. package/dist/components/Library/Label/index.js +1 -0
  79. package/dist/components/Library/NavigationStack/NavigationStack.svelte +17 -7
  80. package/dist/components/Library/NavigationStack/Toolbar.svelte +7 -2
  81. package/dist/components/Library/NumberField/NumberField.demo.svelte +21 -0
  82. package/dist/components/Library/NumberField/NumberField.demo.svelte.d.ts +8 -0
  83. package/dist/components/Library/NumberField/NumberField.svelte +199 -0
  84. package/dist/components/Library/NumberField/NumberField.svelte.d.ts +21 -0
  85. package/dist/components/Library/NumberField/index.d.ts +1 -0
  86. package/dist/components/Library/NumberField/index.js +1 -0
  87. package/dist/components/Library/Pagination/Pagination.svelte +16 -20
  88. package/dist/components/Library/Popover/Popover.demo.svelte +2 -2
  89. package/dist/components/Library/Popover/Popover.svelte +7 -4
  90. package/dist/components/Library/ScrollView/ScrollView.svelte +165 -12
  91. package/dist/components/Library/ScrollView/ScrollView.svelte.d.ts +32 -4
  92. package/dist/components/Library/ScrollView/index.d.ts +1 -0
  93. package/dist/components/Library/{SearchInput/SearchInput.demo.svelte → SearchField/SearchField.demo.svelte} +4 -4
  94. package/dist/components/Library/SearchField/SearchField.demo.svelte.d.ts +8 -0
  95. package/dist/components/Library/{SearchInput/SearchInput.svelte → SearchField/SearchField.svelte} +26 -30
  96. package/dist/components/Library/{SearchInput/SearchInput.svelte.d.ts → SearchField/SearchField.svelte.d.ts} +3 -3
  97. package/dist/components/Library/SearchField/index.d.ts +1 -0
  98. package/dist/components/Library/SearchField/index.js +1 -0
  99. package/dist/components/Library/SegmentedPicker/SegmentedPicker.demo.svelte +1 -1
  100. package/dist/components/Library/SegmentedPicker/SegmentedPicker.svelte +9 -9
  101. package/dist/components/Library/Sheet/Sheet.demo.svelte +1 -1
  102. package/dist/components/Library/Sheet/Sheet.svelte +8 -5
  103. package/dist/components/Library/Slider/Slider.demo.svelte +1 -1
  104. package/dist/components/Library/Slider/Slider.svelte +11 -10
  105. package/dist/components/Library/Spacer/Spacer.svelte +7 -0
  106. package/dist/components/Library/Spacer/Spacer.svelte.d.ts +26 -0
  107. package/dist/components/Library/Spacer/index.d.ts +1 -0
  108. package/dist/components/Library/Spacer/index.js +1 -0
  109. package/dist/components/Library/Spinner/Spinner.demo.svelte +1 -1
  110. package/dist/components/Library/Switch/Switch.svelte +6 -11
  111. package/dist/components/Library/TextField/TextField.demo.svelte +14 -0
  112. package/dist/components/Library/TextField/TextField.demo.svelte.d.ts +8 -0
  113. package/dist/components/Library/TextField/TextField.svelte +154 -0
  114. package/dist/components/Library/TextField/TextField.svelte.d.ts +19 -0
  115. package/dist/components/Library/TextField/index.d.ts +1 -0
  116. package/dist/components/Library/TextField/index.js +1 -0
  117. package/dist/components/Library/{TokenSearchInput/TokenSearchInput.demo.svelte → TokenSearchField/TokenSearchField.demo.svelte} +4 -4
  118. package/dist/components/Library/TokenSearchField/TokenSearchField.demo.svelte.d.ts +9 -0
  119. package/dist/components/Library/{TokenSearchInput/TokenSearchInput.svelte → TokenSearchField/TokenSearchField.svelte} +70 -66
  120. package/dist/components/Library/{TokenSearchInput/TokenSearchInput.svelte.d.ts → TokenSearchField/TokenSearchField.svelte.d.ts} +3 -3
  121. package/dist/components/Library/TokenSearchField/index.d.ts +1 -0
  122. package/dist/components/Library/TokenSearchField/index.js +1 -0
  123. package/dist/components/Library/VStack/VStack.svelte +45 -0
  124. package/dist/components/Library/VStack/VStack.svelte.d.ts +9 -0
  125. package/dist/components/Library/VStack/index.d.ts +1 -0
  126. package/dist/components/Library/VStack/index.js +1 -0
  127. package/dist/components/Library/WheelPicker/WheelColumn.svelte +4 -10
  128. package/dist/components/Library/WheelPicker/WheelPicker.svelte +5 -9
  129. package/dist/components/Local/ComponentGrid.svelte +15 -31
  130. package/dist/components/Local/HeroCard.svelte +30 -38
  131. package/dist/components/Local/HeroCard.svelte.d.ts +0 -2
  132. package/dist/components/Local/StyleControls.svelte +58 -27
  133. package/dist/components/Local/StyleControls.svelte.d.ts +3 -1
  134. package/dist/index.d.ts +26 -2
  135. package/dist/index.js +19 -2
  136. package/dist/style/index.css +35 -20
  137. package/dist/style/label.d.ts +6 -0
  138. package/dist/style/label.js +4 -0
  139. package/dist/style/layout.d.ts +57 -0
  140. package/dist/style/layout.js +128 -0
  141. package/dist/style/media.d.ts +12 -0
  142. package/dist/style/media.js +8 -0
  143. package/dist/style/scroll.d.ts +7 -0
  144. package/dist/style/scroll.js +5 -0
  145. package/dist/style/text-editor.d.ts +34 -0
  146. package/dist/style/text-editor.js +29 -0
  147. package/dist/style.css +112 -58
  148. package/package.json +1 -1
  149. package/dist/components/Library/Dropdown/types.d.ts +0 -27
  150. package/dist/components/Library/SearchInput/SearchInput.demo.svelte.d.ts +0 -8
  151. package/dist/components/Library/SearchInput/index.d.ts +0 -1
  152. package/dist/components/Library/SearchInput/index.js +0 -1
  153. package/dist/components/Library/TokenSearchInput/TokenSearchInput.demo.svelte.d.ts +0 -9
  154. package/dist/components/Library/TokenSearchInput/index.d.ts +0 -1
  155. package/dist/components/Library/TokenSearchInput/index.js +0 -1
  156. /package/dist/components/Library/{Dropdown → ImageMask}/types.js +0 -0
@@ -1 +1,11 @@
1
- export { default } from './Dropdown.svelte';
1
+ import DropdownComponent from './Dropdown.svelte';
2
+ import Action from './Action.svelte';
3
+ import Divider from './Divider.svelte';
4
+ import Item from './Item.svelte';
5
+ import Section from './Section.svelte';
6
+ const Dropdown = DropdownComponent;
7
+ Dropdown.Action = Action;
8
+ Dropdown.Divider = Divider;
9
+ Dropdown.Item = Item;
10
+ Dropdown.Section = Section;
11
+ export default Dropdown;
@@ -2,11 +2,7 @@
2
2
  import { tick, onDestroy } from 'svelte';
3
3
  import type { Snippet } from 'svelte';
4
4
  import { portalContent } from '../../../actions/portal';
5
- import {
6
- autoAlignForViewport,
7
- computePosition,
8
- type Anchor
9
- } from '../../../utils/positioning';
5
+ import { autoAlignForViewport, computePosition, type Anchor } from '../../../utils/positioning';
10
6
  import {
11
7
  hasOpenChild,
12
8
  isAncestor,
@@ -177,6 +173,39 @@
177
173
  return Number.isFinite(parsed) ? parsed : 0;
178
174
  };
179
175
 
176
+ const resolveCssLength = (element: HTMLElement, value: string) => {
177
+ const trimmedValue = value.trim();
178
+ if (!trimmedValue) return 0;
179
+ if (trimmedValue.endsWith('px')) return parsePx(trimmedValue);
180
+
181
+ const probe = document.createElement('div');
182
+ probe.style.position = 'absolute';
183
+ probe.style.visibility = 'hidden';
184
+ probe.style.pointerEvents = 'none';
185
+ probe.style.width = trimmedValue;
186
+ element.appendChild(probe);
187
+ const width = probe.getBoundingClientRect().width;
188
+ probe.remove();
189
+ return width;
190
+ };
191
+
192
+ const getFloatingInset = () => {
193
+ if (!panelEl) return 0;
194
+ const styles = getComputedStyle(panelEl);
195
+ return resolveCssLength(panelEl, styles.getPropertyValue('--sveltely-floating-inset'));
196
+ };
197
+
198
+ const offsetCoords = (
199
+ coords: { top: number; left: number },
200
+ currentAnchor: Anchor,
201
+ offset: number
202
+ ) => {
203
+ if (currentAnchor === 'bottom') return { ...coords, top: coords.top + offset };
204
+ if (currentAnchor === 'top') return { ...coords, top: coords.top - offset };
205
+ if (currentAnchor === 'right') return { ...coords, left: coords.left + offset };
206
+ return { ...coords, left: coords.left - offset };
207
+ };
208
+
180
209
  const updateRadiusFromSource = () => {
181
210
  if (!matchPanelRadiusToSource || !panelEl || !contentEl) {
182
211
  computedPanelRadius = null;
@@ -222,7 +251,11 @@
222
251
  placement,
223
252
  preferredAlign
224
253
  );
225
- panelCoords = { top: result.top, left: result.left };
254
+ panelCoords = offsetCoords(
255
+ { top: result.top, left: result.left },
256
+ result.anchor,
257
+ getFloatingInset()
258
+ );
226
259
  panelTransform = result.transform;
227
260
  resolvedAnchor = result.anchor;
228
261
  };
@@ -306,7 +339,10 @@
306
339
 
307
340
  $effect(() => {
308
341
  if (typeof window === 'undefined') return;
309
- const handleWindowChange = () => closePanel();
342
+ const handleWindowChange = (event: Event) => {
343
+ if (event.type === 'scroll' && isEventInFloatingTree(event)) return;
344
+ closePanel();
345
+ };
310
346
  window.addEventListener('scroll', handleWindowChange, true);
311
347
  window.addEventListener('resize', handleWindowChange);
312
348
  return () => {
@@ -317,6 +353,7 @@
317
353
 
318
354
  const resolvedPanelStyle = $derived.by(() => {
319
355
  const declarations = [
356
+ '--sveltely-floating-inset: var(--sveltely-inset);',
320
357
  `top: ${panelCoords.top}px;`,
321
358
  `left: ${panelCoords.left}px;`,
322
359
  `transform: ${panelTransform};`
@@ -0,0 +1,14 @@
1
+ <script lang="ts" generics="T">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ type Props = {
5
+ items: T[];
6
+ children: Snippet<[item: T, index: number]>;
7
+ };
8
+
9
+ let { items, children }: Props = $props();
10
+ </script>
11
+
12
+ {#each items as item, index}
13
+ {@render children(item, index)}
14
+ {/each}
@@ -0,0 +1,28 @@
1
+ import type { Snippet } from 'svelte';
2
+ declare function $$render<T>(): {
3
+ props: {
4
+ items: T[];
5
+ children: Snippet<[item: T, index: number]>;
6
+ };
7
+ exports: {};
8
+ bindings: "";
9
+ slots: {};
10
+ events: {};
11
+ };
12
+ declare class __sveltets_Render<T> {
13
+ props(): ReturnType<typeof $$render<T>>['props'];
14
+ events(): ReturnType<typeof $$render<T>>['events'];
15
+ slots(): ReturnType<typeof $$render<T>>['slots'];
16
+ bindings(): "";
17
+ exports(): {};
18
+ }
19
+ interface $$IsomorphicComponent {
20
+ new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
21
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
22
+ } & ReturnType<__sveltets_Render<T>['exports']>;
23
+ <T>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
24
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
+ }
26
+ declare const ForEach: $$IsomorphicComponent;
27
+ type ForEach<T> = InstanceType<typeof ForEach<T>>;
28
+ export default ForEach;
@@ -0,0 +1 @@
1
+ export { default } from './ForEach.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './ForEach.svelte';
@@ -0,0 +1,74 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { extractLayoutProps, layoutStyle, type LayoutProps } from '../../../style/layout';
4
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
5
+
6
+ type Props = {
7
+ children?: Snippet;
8
+ columns?: number | string;
9
+ rows?: number | string;
10
+ autoRows?: number | string;
11
+ dense?: boolean;
12
+ } & LayoutProps &
13
+ StyleProps;
14
+
15
+ let {
16
+ children,
17
+ columns = 1,
18
+ rows,
19
+ autoRows,
20
+ dense = false,
21
+ ...restProps
22
+ }: Props = $props();
23
+
24
+ const extractedLayoutProps = $derived.by(() => extractLayoutProps(restProps));
25
+ const layoutProps = $derived(extractedLayoutProps.layoutProps);
26
+ const afterLayoutProps = $derived(extractedLayoutProps.restProps);
27
+ const extractedStyleProps = $derived.by(() => extractStyleProps(afterLayoutProps));
28
+ const styleProps = $derived(extractedStyleProps.styleProps);
29
+ const templateColumns = $derived(
30
+ typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns
31
+ );
32
+ const templateRows = $derived(
33
+ rows === undefined ? undefined : typeof rows === 'number' ? `repeat(${rows}, minmax(0, 1fr))` : rows
34
+ );
35
+ const gridAutoRows = $derived(
36
+ autoRows === undefined ? undefined : typeof autoRows === 'number' ? `${autoRows}rem` : autoRows
37
+ );
38
+ const rootStyle = $derived.by(() =>
39
+ [
40
+ `grid-template-columns: ${templateColumns};`,
41
+ templateRows ? `grid-template-rows: ${templateRows};` : '',
42
+ gridAutoRows ? `grid-auto-rows: ${gridAutoRows};` : '',
43
+ layoutStyle(layoutProps),
44
+ surfaceStyle(styleProps, 'grid')
45
+ ]
46
+ .filter(Boolean)
47
+ .join(' ')
48
+ );
49
+ </script>
50
+
51
+ <div class="grid" class:grid-dense={dense} style={rootStyle}>
52
+ {#if children}
53
+ {@render children()}
54
+ {/if}
55
+ </div>
56
+
57
+ <style>
58
+ .grid {
59
+ display: grid;
60
+ min-width: 0;
61
+ min-height: 0;
62
+ align-items: stretch;
63
+ gap: var(--grid-gap, 0px);
64
+ border-radius: var(--grid-border-radius, 0px);
65
+ padding:
66
+ var(--grid-padding-y, 0px)
67
+ var(--grid-padding-x, 0px);
68
+ font-size: var(--grid-font-size, inherit);
69
+ }
70
+
71
+ .grid-dense {
72
+ grid-auto-flow: dense;
73
+ }
74
+ </style>
@@ -0,0 +1,13 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type LayoutProps } from '../../../style/layout';
3
+ import { type StyleProps } from '../../../style/surface';
4
+ type Props = {
5
+ children?: Snippet;
6
+ columns?: number | string;
7
+ rows?: number | string;
8
+ autoRows?: number | string;
9
+ dense?: boolean;
10
+ } & LayoutProps & StyleProps;
11
+ declare const Grid: import("svelte").Component<Props, {}, "">;
12
+ type Grid = ReturnType<typeof Grid>;
13
+ export default Grid;
@@ -0,0 +1 @@
1
+ export { default } from './Grid.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './Grid.svelte';
@@ -0,0 +1,65 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { extractLayoutProps, layoutStyle, type LayoutProps } from '../../../style/layout';
4
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
5
+
6
+ type Props = {
7
+ children?: Snippet;
8
+ column?: number | string;
9
+ row?: number | string;
10
+ columnSpan?: number;
11
+ rowSpan?: number;
12
+ area?: string;
13
+ } & LayoutProps &
14
+ StyleProps;
15
+
16
+ let {
17
+ children,
18
+ column,
19
+ row,
20
+ columnSpan,
21
+ rowSpan,
22
+ area,
23
+ ...restProps
24
+ }: Props = $props();
25
+
26
+ const extractedLayoutProps = $derived.by(() => extractLayoutProps(restProps));
27
+ const layoutProps = $derived(extractedLayoutProps.layoutProps);
28
+ const afterLayoutProps = $derived(extractedLayoutProps.restProps);
29
+ const extractedStyleProps = $derived.by(() => extractStyleProps(afterLayoutProps));
30
+ const styleProps = $derived(extractedStyleProps.styleProps);
31
+ const rootStyle = $derived.by(() =>
32
+ [
33
+ column !== undefined ? `grid-column: ${column};` : '',
34
+ row !== undefined ? `grid-row: ${row};` : '',
35
+ column === undefined && columnSpan !== undefined
36
+ ? `grid-column: span ${columnSpan} / span ${columnSpan};`
37
+ : '',
38
+ row === undefined && rowSpan !== undefined ? `grid-row: span ${rowSpan} / span ${rowSpan};` : '',
39
+ area !== undefined ? `grid-area: ${area};` : '',
40
+ layoutStyle(layoutProps),
41
+ surfaceStyle(styleProps, 'grid-item')
42
+ ]
43
+ .filter(Boolean)
44
+ .join(' ')
45
+ );
46
+ </script>
47
+
48
+ <div class="grid-item" style={rootStyle}>
49
+ {#if children}
50
+ {@render children()}
51
+ {/if}
52
+ </div>
53
+
54
+ <style>
55
+ .grid-item {
56
+ min-width: 0;
57
+ min-height: 0;
58
+ height: 100%;
59
+ border-radius: var(--grid-item-border-radius, 0px);
60
+ padding:
61
+ var(--grid-item-padding-y, 0px)
62
+ var(--grid-item-padding-x, 0px);
63
+ font-size: var(--grid-item-font-size, inherit);
64
+ }
65
+ </style>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type LayoutProps } from '../../../style/layout';
3
+ import { type StyleProps } from '../../../style/surface';
4
+ type Props = {
5
+ children?: Snippet;
6
+ column?: number | string;
7
+ row?: number | string;
8
+ columnSpan?: number;
9
+ rowSpan?: number;
10
+ area?: string;
11
+ } & LayoutProps & StyleProps;
12
+ declare const GridItem: import("svelte").Component<Props, {}, "">;
13
+ type GridItem = ReturnType<typeof GridItem>;
14
+ export default GridItem;
@@ -0,0 +1 @@
1
+ export { default } from './GridItem.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './GridItem.svelte';
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { extractLayoutProps, layoutStyle, type LayoutProps } from '../../../style/layout';
4
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
5
+
6
+ type Props = {
7
+ children?: Snippet;
8
+ } & LayoutProps &
9
+ StyleProps;
10
+
11
+ let { children, ...restProps }: Props = $props();
12
+
13
+ const extractedLayoutProps = $derived.by(() => extractLayoutProps(restProps));
14
+ const layoutProps = $derived(extractedLayoutProps.layoutProps);
15
+ const afterLayoutProps = $derived(extractedLayoutProps.restProps);
16
+ const extractedStyleProps = $derived.by(() => extractStyleProps(afterLayoutProps));
17
+ const styleProps = $derived(extractedStyleProps.styleProps);
18
+ const rootStyle = $derived.by(() =>
19
+ [layoutStyle(layoutProps), surfaceStyle(styleProps, 'stack')].filter(Boolean).join(' ')
20
+ );
21
+ </script>
22
+
23
+ <div class="hstack" style={rootStyle}>
24
+ {#if children}
25
+ {@render children()}
26
+ {/if}
27
+ </div>
28
+
29
+ <style>
30
+ .hstack {
31
+ display: flex;
32
+ min-width: min-content;
33
+ min-height: min-content;
34
+ flex-direction: row;
35
+ gap: var(--stack-gap, 0px);
36
+ border-radius: var(--stack-border-radius, 0px);
37
+ padding:
38
+ var(--stack-padding-y, 0px)
39
+ var(--stack-padding-x, 0px);
40
+ font-size: var(--stack-font-size, inherit);
41
+ --divider-width: 1px;
42
+ --divider-height: auto;
43
+ --divider-align-self: stretch;
44
+ }
45
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type LayoutProps } from '../../../style/layout';
3
+ import { type StyleProps } from '../../../style/surface';
4
+ type Props = {
5
+ children?: Snippet;
6
+ } & LayoutProps & StyleProps;
7
+ declare const HStack: import("svelte").Component<Props, {}, "">;
8
+ type HStack = ReturnType<typeof HStack>;
9
+ export default HStack;
@@ -0,0 +1 @@
1
+ export { default } from './HStack.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './HStack.svelte';
@@ -0,0 +1,18 @@
1
+ <script module lang="ts">
2
+ export const demo = {
3
+ name: 'Image',
4
+ description: 'Responsive image display with generated placeholder and busy states.'
5
+ };
6
+ </script>
7
+
8
+ <script lang="ts">
9
+ import Image from './Image.svelte';
10
+ </script>
11
+
12
+ <Image
13
+ src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=600&q=80"
14
+ alt="Red sneaker"
15
+ fit="cover"
16
+ class="aspect-square"
17
+ />
18
+ <Image busy placeholderKey="image-demo-loading" class="aspect-square" />
@@ -0,0 +1,23 @@
1
+ export declare const demo: {
2
+ name: string;
3
+ description: string;
4
+ };
5
+ import Image from './Image.svelte';
6
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
7
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
8
+ $$bindings?: Bindings;
9
+ } & Exports;
10
+ (internal: unknown, props: {
11
+ $$events?: Events;
12
+ $$slots?: Slots;
13
+ }): Exports & {
14
+ $set?: any;
15
+ $on?: any;
16
+ };
17
+ z_$$bindings?: Bindings;
18
+ }
19
+ declare const Image: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
20
+ [evt: string]: CustomEvent<any>;
21
+ }, {}, {}, string>;
22
+ type Image = InstanceType<typeof Image>;
23
+ export default Image;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLImgAttributes } from 'svelte/elements';
4
+ import type { ImageFit, ImageLoading } from '../../../style/media';
5
+ import ImagePlaceholder from './ImagePlaceholder.svelte';
6
+
7
+ type Props = {
8
+ src?: string | null;
9
+ alt?: string;
10
+ fit?: ImageFit;
11
+ busy?: boolean;
12
+ placeholderKey?: string;
13
+ loading?: ImageLoading;
14
+ decoding?: HTMLImgAttributes['decoding'];
15
+ children?: Snippet;
16
+ class?: string;
17
+ };
18
+
19
+ let {
20
+ src = null,
21
+ alt = '',
22
+ fit = 'contain',
23
+ busy = false,
24
+ placeholderKey = 'default',
25
+ loading = 'lazy',
26
+ decoding = 'async',
27
+ children,
28
+ class: className = ''
29
+ }: Props = $props();
30
+
31
+ const showImage = $derived(Boolean(src) && !busy);
32
+ </script>
33
+
34
+ <div class={`image relative overflow-hidden bg-zinc-100 ${className}`}>
35
+ {#if showImage}
36
+ <img
37
+ {src}
38
+ {alt}
39
+ {loading}
40
+ {decoding}
41
+ draggable="false"
42
+ class="absolute inset-0 size-full {fit === 'cover' ? 'object-cover' : 'object-contain'}"
43
+ />
44
+ {:else}
45
+ <ImagePlaceholder seed={placeholderKey} class="absolute inset-0" />
46
+ {/if}
47
+
48
+ {#if children}
49
+ {@render children()}
50
+ {/if}
51
+ </div>
52
+
53
+ <style>
54
+ .image {
55
+ border-radius: var(--image-border-radius, var(--sveltely-border-radius));
56
+ }
57
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLImgAttributes } from 'svelte/elements';
3
+ import type { ImageFit, ImageLoading } from '../../../style/media';
4
+ type Props = {
5
+ src?: string | null;
6
+ alt?: string;
7
+ fit?: ImageFit;
8
+ busy?: boolean;
9
+ placeholderKey?: string;
10
+ loading?: ImageLoading;
11
+ decoding?: HTMLImgAttributes['decoding'];
12
+ children?: Snippet;
13
+ class?: string;
14
+ };
15
+ declare const Image: import("svelte").Component<Props, {}, "">;
16
+ type Image = ReturnType<typeof Image>;
17
+ export default Image;