@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.
- package/dist/components/Library/AnimatedNumber/AnimatedNumber.demo.svelte +1 -1
- package/dist/components/Library/AsyncButton/AsyncButton.svelte +42 -16
- package/dist/components/Library/Button/Button.demo.svelte +5 -3
- package/dist/components/Library/Button/Button.demo.svelte.d.ts +1 -0
- package/dist/components/Library/Button/Button.svelte +21 -13
- package/dist/components/Library/Calendar/Calendar.demo.svelte +2 -14
- package/dist/components/Library/Calendar/Calendar.svelte +69 -65
- package/dist/components/Library/Checkbox/Checkbox.svelte +13 -14
- package/dist/components/Library/ChipInput/ChipInput.demo.svelte +1 -1
- package/dist/components/Library/ChipInput/ChipInput.svelte +7 -4
- package/dist/components/Library/Divider/Divider.svelte +10 -0
- package/dist/components/Library/Divider/Divider.svelte.d.ts +26 -0
- package/dist/components/Library/Divider/index.d.ts +1 -0
- package/dist/components/Library/Divider/index.js +1 -0
- package/dist/components/Library/Dropdown/Action.svelte +60 -0
- package/dist/components/Library/Dropdown/Action.svelte.d.ts +11 -0
- package/dist/components/Library/Dropdown/Divider.svelte +5 -0
- package/dist/components/Library/Dropdown/Divider.svelte.d.ts +19 -0
- package/dist/components/Library/Dropdown/Dropdown.demo.svelte +182 -65
- package/dist/components/Library/Dropdown/Dropdown.demo.svelte.d.ts +2 -1
- package/dist/components/Library/Dropdown/Dropdown.svelte +95 -250
- package/dist/components/Library/Dropdown/Dropdown.svelte.d.ts +17 -16
- package/dist/components/Library/Dropdown/Item.svelte +68 -0
- package/dist/components/Library/Dropdown/Item.svelte.d.ts +31 -0
- package/dist/components/Library/Dropdown/Section.svelte +34 -0
- package/dist/components/Library/Dropdown/Section.svelte.d.ts +8 -0
- package/dist/components/Library/Dropdown/context.d.ts +34 -0
- package/dist/components/Library/Dropdown/context.js +6 -0
- package/dist/components/Library/Dropdown/index.d.ts +13 -2
- package/dist/components/Library/Dropdown/index.js +11 -1
- package/dist/components/Library/Floating/Floating.svelte +44 -7
- package/dist/components/Library/ForEach/ForEach.svelte +14 -0
- package/dist/components/Library/ForEach/ForEach.svelte.d.ts +28 -0
- package/dist/components/Library/ForEach/index.d.ts +1 -0
- package/dist/components/Library/ForEach/index.js +1 -0
- package/dist/components/Library/Grid/Grid.svelte +74 -0
- package/dist/components/Library/Grid/Grid.svelte.d.ts +13 -0
- package/dist/components/Library/Grid/index.d.ts +1 -0
- package/dist/components/Library/Grid/index.js +1 -0
- package/dist/components/Library/GridItem/GridItem.svelte +65 -0
- package/dist/components/Library/GridItem/GridItem.svelte.d.ts +14 -0
- package/dist/components/Library/GridItem/index.d.ts +1 -0
- package/dist/components/Library/GridItem/index.js +1 -0
- package/dist/components/Library/HStack/HStack.svelte +45 -0
- package/dist/components/Library/HStack/HStack.svelte.d.ts +9 -0
- package/dist/components/Library/HStack/index.d.ts +1 -0
- package/dist/components/Library/HStack/index.js +1 -0
- package/dist/components/Library/Image/Image.demo.svelte +18 -0
- package/dist/components/Library/Image/Image.demo.svelte.d.ts +23 -0
- package/dist/components/Library/Image/Image.svelte +57 -0
- package/dist/components/Library/Image/Image.svelte.d.ts +17 -0
- package/dist/components/Library/Image/ImagePlaceholder.svelte +202 -0
- package/dist/components/Library/Image/ImagePlaceholder.svelte.d.ts +7 -0
- package/dist/components/Library/Image/index.d.ts +1 -0
- package/dist/components/Library/Image/index.js +1 -0
- package/dist/components/Library/ImageMask/BrushPreview.svelte +119 -0
- package/dist/components/Library/ImageMask/BrushPreview.svelte.d.ts +11 -0
- package/dist/components/Library/ImageMask/ImageMask.demo.svelte +117 -0
- package/dist/components/Library/ImageMask/ImageMask.demo.svelte.d.ts +10 -0
- package/dist/components/Library/ImageMask/ImageMask.svelte +46 -0
- package/dist/components/Library/ImageMask/ImageMask.svelte.d.ts +20 -0
- package/dist/components/Library/ImageMask/MaskLayer.svelte +341 -0
- package/dist/components/Library/ImageMask/MaskLayer.svelte.d.ts +12 -0
- package/dist/components/Library/ImageMask/contour.d.ts +11 -0
- package/dist/components/Library/ImageMask/contour.js +152 -0
- package/dist/components/Library/ImageMask/index.d.ts +2 -0
- package/dist/components/Library/ImageMask/index.js +1 -0
- package/dist/components/Library/ImageMask/marchingAnts.d.ts +8 -0
- package/dist/components/Library/ImageMask/marchingAnts.js +29 -0
- package/dist/components/Library/ImageMask/maskSurface.d.ts +5 -0
- package/dist/components/Library/ImageMask/maskSurface.js +94 -0
- package/dist/components/Library/ImageMask/types.d.ts +23 -0
- package/dist/components/Library/Label/Label.demo.svelte +28 -0
- package/dist/components/Library/Label/Label.demo.svelte.d.ts +9 -0
- package/dist/components/Library/Label/Label.svelte +175 -0
- package/dist/components/Library/Label/Label.svelte.d.ts +18 -0
- package/dist/components/Library/Label/index.d.ts +1 -0
- package/dist/components/Library/Label/index.js +1 -0
- package/dist/components/Library/NavigationStack/NavigationStack.svelte +17 -7
- package/dist/components/Library/NavigationStack/Toolbar.svelte +7 -2
- package/dist/components/Library/NumberField/NumberField.demo.svelte +21 -0
- package/dist/components/Library/NumberField/NumberField.demo.svelte.d.ts +8 -0
- package/dist/components/Library/NumberField/NumberField.svelte +199 -0
- package/dist/components/Library/NumberField/NumberField.svelte.d.ts +21 -0
- package/dist/components/Library/NumberField/index.d.ts +1 -0
- package/dist/components/Library/NumberField/index.js +1 -0
- package/dist/components/Library/Pagination/Pagination.svelte +16 -20
- package/dist/components/Library/Popover/Popover.demo.svelte +2 -2
- package/dist/components/Library/Popover/Popover.svelte +7 -4
- package/dist/components/Library/ScrollView/ScrollView.svelte +165 -12
- package/dist/components/Library/ScrollView/ScrollView.svelte.d.ts +32 -4
- package/dist/components/Library/ScrollView/index.d.ts +1 -0
- package/dist/components/Library/{SearchInput/SearchInput.demo.svelte → SearchField/SearchField.demo.svelte} +4 -4
- package/dist/components/Library/SearchField/SearchField.demo.svelte.d.ts +8 -0
- package/dist/components/Library/{SearchInput/SearchInput.svelte → SearchField/SearchField.svelte} +26 -30
- package/dist/components/Library/{SearchInput/SearchInput.svelte.d.ts → SearchField/SearchField.svelte.d.ts} +3 -3
- package/dist/components/Library/SearchField/index.d.ts +1 -0
- package/dist/components/Library/SearchField/index.js +1 -0
- package/dist/components/Library/SegmentedPicker/SegmentedPicker.demo.svelte +1 -1
- package/dist/components/Library/SegmentedPicker/SegmentedPicker.svelte +9 -9
- package/dist/components/Library/Sheet/Sheet.demo.svelte +1 -1
- package/dist/components/Library/Sheet/Sheet.svelte +8 -5
- package/dist/components/Library/Slider/Slider.demo.svelte +1 -1
- package/dist/components/Library/Slider/Slider.svelte +11 -10
- package/dist/components/Library/Spacer/Spacer.svelte +7 -0
- package/dist/components/Library/Spacer/Spacer.svelte.d.ts +26 -0
- package/dist/components/Library/Spacer/index.d.ts +1 -0
- package/dist/components/Library/Spacer/index.js +1 -0
- package/dist/components/Library/Spinner/Spinner.demo.svelte +1 -1
- package/dist/components/Library/Switch/Switch.svelte +6 -11
- package/dist/components/Library/TextField/TextField.demo.svelte +14 -0
- package/dist/components/Library/TextField/TextField.demo.svelte.d.ts +8 -0
- package/dist/components/Library/TextField/TextField.svelte +154 -0
- package/dist/components/Library/TextField/TextField.svelte.d.ts +19 -0
- package/dist/components/Library/TextField/index.d.ts +1 -0
- package/dist/components/Library/TextField/index.js +1 -0
- package/dist/components/Library/{TokenSearchInput/TokenSearchInput.demo.svelte → TokenSearchField/TokenSearchField.demo.svelte} +4 -4
- package/dist/components/Library/TokenSearchField/TokenSearchField.demo.svelte.d.ts +9 -0
- package/dist/components/Library/{TokenSearchInput/TokenSearchInput.svelte → TokenSearchField/TokenSearchField.svelte} +70 -66
- package/dist/components/Library/{TokenSearchInput/TokenSearchInput.svelte.d.ts → TokenSearchField/TokenSearchField.svelte.d.ts} +3 -3
- package/dist/components/Library/TokenSearchField/index.d.ts +1 -0
- package/dist/components/Library/TokenSearchField/index.js +1 -0
- package/dist/components/Library/VStack/VStack.svelte +45 -0
- package/dist/components/Library/VStack/VStack.svelte.d.ts +9 -0
- package/dist/components/Library/VStack/index.d.ts +1 -0
- package/dist/components/Library/VStack/index.js +1 -0
- package/dist/components/Library/WheelPicker/WheelColumn.svelte +4 -10
- package/dist/components/Library/WheelPicker/WheelPicker.svelte +5 -9
- package/dist/components/Local/ComponentGrid.svelte +15 -31
- package/dist/components/Local/HeroCard.svelte +30 -38
- package/dist/components/Local/HeroCard.svelte.d.ts +0 -2
- package/dist/components/Local/StyleControls.svelte +58 -27
- package/dist/components/Local/StyleControls.svelte.d.ts +3 -1
- package/dist/index.d.ts +26 -2
- package/dist/index.js +19 -2
- package/dist/style/index.css +35 -20
- package/dist/style/label.d.ts +6 -0
- package/dist/style/label.js +4 -0
- package/dist/style/layout.d.ts +57 -0
- package/dist/style/layout.js +128 -0
- package/dist/style/media.d.ts +12 -0
- package/dist/style/media.js +8 -0
- package/dist/style/scroll.d.ts +7 -0
- package/dist/style/scroll.js +5 -0
- package/dist/style/text-editor.d.ts +34 -0
- package/dist/style/text-editor.js +29 -0
- package/dist/style.css +112 -58
- package/package.json +1 -1
- package/dist/components/Library/Dropdown/types.d.ts +0 -27
- package/dist/components/Library/SearchInput/SearchInput.demo.svelte.d.ts +0 -8
- package/dist/components/Library/SearchInput/index.d.ts +0 -1
- package/dist/components/Library/SearchInput/index.js +0 -1
- package/dist/components/Library/TokenSearchInput/TokenSearchInput.demo.svelte.d.ts +0 -9
- package/dist/components/Library/TokenSearchInput/index.d.ts +0 -1
- package/dist/components/Library/TokenSearchInput/index.js +0 -1
- /package/dist/components/Library/{Dropdown → ImageMask}/types.js +0 -0
|
@@ -1 +1,11 @@
|
|
|
1
|
-
|
|
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 =
|
|
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 = () =>
|
|
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;
|