@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
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
--sveltely-nested-inset: var(--popover-inset);
|
|
69
69
|
border: 1px solid var(--sveltely-border-color);
|
|
70
70
|
border-radius: var(--sveltely-border-radius);
|
|
71
|
-
background:
|
|
71
|
+
background: var(--sveltely-background-color);
|
|
72
72
|
padding: var(--popover-inset);
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -77,13 +77,16 @@
|
|
|
77
77
|
align-items: center;
|
|
78
78
|
border: 1px solid var(--sveltely-border-color);
|
|
79
79
|
border-radius: var(--sveltely-border-radius);
|
|
80
|
-
background:
|
|
81
|
-
color: var(--
|
|
80
|
+
background: var(--sveltely-background-color);
|
|
81
|
+
color: var(--sveltely-primary-color);
|
|
82
82
|
gap: var(--sveltely-gap);
|
|
83
83
|
padding: calc(var(--sveltely-padding-y) * 0.67) var(--sveltely-padding-x);
|
|
84
84
|
font-size: 0.875rem;
|
|
85
85
|
line-height: 1.25rem;
|
|
86
|
-
transition:
|
|
86
|
+
transition:
|
|
87
|
+
color 150ms,
|
|
88
|
+
border-color 150ms,
|
|
89
|
+
background-color 150ms;
|
|
87
90
|
}
|
|
88
91
|
|
|
89
92
|
:global(.popover-trigger[data-styled='true']:hover) {
|
|
@@ -1,27 +1,143 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { tick } from 'svelte';
|
|
2
3
|
import type { Snippet } from 'svelte';
|
|
3
|
-
import {
|
|
4
|
+
import { surfaceStyle, type StyleProps } from '../../../style/surface';
|
|
5
|
+
import type { ScrollAxis } from '../../../style/scroll';
|
|
6
|
+
|
|
7
|
+
export type ScrollGeometry = {
|
|
8
|
+
axis: ScrollAxis;
|
|
9
|
+
offset: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
viewport: {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
};
|
|
17
|
+
content: {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
remaining: {
|
|
22
|
+
top: number;
|
|
23
|
+
right: number;
|
|
24
|
+
bottom: number;
|
|
25
|
+
left: number;
|
|
26
|
+
};
|
|
27
|
+
progress: {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
4
32
|
|
|
5
33
|
type Props = {
|
|
6
34
|
children: Snippet;
|
|
7
35
|
viewport?: HTMLElement | null;
|
|
8
|
-
axis?:
|
|
36
|
+
axis?: ScrollAxis;
|
|
9
37
|
contentStyles?: StyleProps;
|
|
10
|
-
|
|
38
|
+
onScroll?: (geometry: ScrollGeometry) => void;
|
|
39
|
+
scrollGradient?: boolean;
|
|
40
|
+
scrollGradientSize?: number | string;
|
|
41
|
+
} & StyleProps;
|
|
11
42
|
|
|
12
43
|
let {
|
|
13
44
|
children,
|
|
14
45
|
viewport = $bindable<HTMLElement | null>(null),
|
|
15
46
|
axis = 'vertical',
|
|
16
47
|
contentStyles = {},
|
|
17
|
-
|
|
18
|
-
|
|
48
|
+
onScroll,
|
|
49
|
+
scrollGradient = true,
|
|
50
|
+
scrollGradientSize = '1rem',
|
|
51
|
+
fontSize,
|
|
52
|
+
paddingX,
|
|
53
|
+
paddingY,
|
|
54
|
+
gap,
|
|
55
|
+
borderRadius,
|
|
56
|
+
inset,
|
|
57
|
+
background,
|
|
58
|
+
borderColor,
|
|
59
|
+
color
|
|
60
|
+
}: Props = $props();
|
|
19
61
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
62
|
+
const styleProps = $derived({
|
|
63
|
+
fontSize,
|
|
64
|
+
paddingX,
|
|
65
|
+
paddingY,
|
|
66
|
+
gap,
|
|
67
|
+
borderRadius,
|
|
68
|
+
inset,
|
|
69
|
+
background,
|
|
70
|
+
borderColor,
|
|
71
|
+
color
|
|
72
|
+
});
|
|
23
73
|
const viewportStyle = $derived.by(() => surfaceStyle(styleProps, 'scroll-view'));
|
|
24
74
|
const contentStyle = $derived.by(() => surfaceStyle(contentStyles, 'scroll-view-content'));
|
|
75
|
+
let canScrollToTop = $state(false);
|
|
76
|
+
let canScrollToBottom = $state(false);
|
|
77
|
+
const scrollGradientEnabled = $derived(scrollGradient && axis !== 'horizontal');
|
|
78
|
+
const scrollGradientStyle = $derived(
|
|
79
|
+
`--scroll-view-gradient-size: ${typeof scrollGradientSize === 'number' ? `${scrollGradientSize}rem` : scrollGradientSize};`
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
function syncScrollGradient(geometry: ScrollGeometry) {
|
|
83
|
+
if (!scrollGradientEnabled) return;
|
|
84
|
+
canScrollToTop = geometry.remaining.top > 0;
|
|
85
|
+
canScrollToBottom = geometry.remaining.bottom > 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function getScrollGeometry(node: HTMLElement): ScrollGeometry {
|
|
89
|
+
const maxX = Math.max(0, node.scrollWidth - node.clientWidth);
|
|
90
|
+
const maxY = Math.max(0, node.scrollHeight - node.clientHeight);
|
|
91
|
+
const x = node.scrollLeft;
|
|
92
|
+
const y = node.scrollTop;
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
axis,
|
|
96
|
+
offset: { x, y },
|
|
97
|
+
viewport: {
|
|
98
|
+
width: node.clientWidth,
|
|
99
|
+
height: node.clientHeight
|
|
100
|
+
},
|
|
101
|
+
content: {
|
|
102
|
+
width: node.scrollWidth,
|
|
103
|
+
height: node.scrollHeight
|
|
104
|
+
},
|
|
105
|
+
remaining: {
|
|
106
|
+
top: y,
|
|
107
|
+
right: maxX - x,
|
|
108
|
+
bottom: maxY - y,
|
|
109
|
+
left: x
|
|
110
|
+
},
|
|
111
|
+
progress: {
|
|
112
|
+
x: maxX === 0 ? 1 : x / maxX,
|
|
113
|
+
y: maxY === 0 ? 1 : y / maxY
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function handleScroll(event: Event) {
|
|
119
|
+
const geometry = getScrollGeometry(event.currentTarget as HTMLElement);
|
|
120
|
+
syncScrollGradient(geometry);
|
|
121
|
+
onScroll?.(geometry);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function handleWheel(event: WheelEvent) {
|
|
125
|
+
const node = event.currentTarget as HTMLElement;
|
|
126
|
+
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
event.stopPropagation();
|
|
129
|
+
|
|
130
|
+
if (axis !== 'horizontal') node.scrollTop += event.deltaY;
|
|
131
|
+
if (axis !== 'vertical') node.scrollLeft += event.deltaX;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
$effect(() => {
|
|
135
|
+
if (!scrollGradientEnabled || !viewport) return;
|
|
136
|
+
void tick().then(() => {
|
|
137
|
+
if (!viewport) return;
|
|
138
|
+
syncScrollGradient(getScrollGeometry(viewport));
|
|
139
|
+
});
|
|
140
|
+
});
|
|
25
141
|
</script>
|
|
26
142
|
|
|
27
143
|
<div
|
|
@@ -30,12 +146,22 @@
|
|
|
30
146
|
class:scroll-view-vertical={axis === 'vertical'}
|
|
31
147
|
class:scroll-view-horizontal={axis === 'horizontal'}
|
|
32
148
|
class:scroll-view-both={axis === 'both'}
|
|
33
|
-
|
|
34
|
-
{
|
|
149
|
+
class:scroll-view-gradient={scrollGradientEnabled}
|
|
150
|
+
class:scroll-view-can-scroll-up={canScrollToTop}
|
|
151
|
+
class:scroll-view-can-scroll-down={canScrollToBottom}
|
|
152
|
+
style={[viewportStyle, scrollGradientStyle].filter(Boolean).join(' ')}
|
|
153
|
+
onscroll={handleScroll}
|
|
154
|
+
onwheel={handleWheel}
|
|
35
155
|
>
|
|
156
|
+
{#if scrollGradientEnabled}
|
|
157
|
+
<div class="scroll-view-gradient scroll-view-gradient-top"></div>
|
|
158
|
+
{/if}
|
|
36
159
|
<div class="scroll-view-content" style={contentStyle}>
|
|
37
160
|
{@render children()}
|
|
38
161
|
</div>
|
|
162
|
+
{#if scrollGradientEnabled}
|
|
163
|
+
<div class="scroll-view-gradient scroll-view-gradient-bottom"></div>
|
|
164
|
+
{/if}
|
|
39
165
|
</div>
|
|
40
166
|
|
|
41
167
|
<style>
|
|
@@ -49,6 +175,7 @@
|
|
|
49
175
|
color: var(--scroll-view-color, inherit);
|
|
50
176
|
scrollbar-gutter: stable;
|
|
51
177
|
overscroll-behavior: contain;
|
|
178
|
+
position: relative;
|
|
52
179
|
}
|
|
53
180
|
|
|
54
181
|
.scroll-view-vertical {
|
|
@@ -68,8 +195,7 @@
|
|
|
68
195
|
.scroll-view-content {
|
|
69
196
|
min-width: 100%;
|
|
70
197
|
min-height: 100%;
|
|
71
|
-
padding:
|
|
72
|
-
var(--scroll-view-content-padding-y, var(--sveltely-inset))
|
|
198
|
+
padding: var(--scroll-view-content-padding-y, var(--sveltely-inset))
|
|
73
199
|
var(--scroll-view-content-padding-x, var(--sveltely-inset));
|
|
74
200
|
}
|
|
75
201
|
|
|
@@ -86,4 +212,31 @@
|
|
|
86
212
|
width: max-content;
|
|
87
213
|
min-width: 100%;
|
|
88
214
|
}
|
|
215
|
+
|
|
216
|
+
.scroll-view-gradient {
|
|
217
|
+
position: sticky;
|
|
218
|
+
z-index: 2;
|
|
219
|
+
height: var(--scroll-view-gradient-size, 1rem);
|
|
220
|
+
flex: 0 0 var(--scroll-view-gradient-size, 1rem);
|
|
221
|
+
pointer-events: none;
|
|
222
|
+
opacity: 0;
|
|
223
|
+
transition: opacity 120ms ease;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.scroll-view-gradient-top {
|
|
227
|
+
top: 0;
|
|
228
|
+
margin-bottom: calc(var(--scroll-view-gradient-size, 1rem) * -1);
|
|
229
|
+
background: linear-gradient(to bottom, var(--scroll-view-background, white), transparent);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.scroll-view-gradient-bottom {
|
|
233
|
+
bottom: 0;
|
|
234
|
+
margin-top: calc(var(--scroll-view-gradient-size, 1rem) * -1);
|
|
235
|
+
background: linear-gradient(to top, var(--scroll-view-background, white), transparent);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.scroll-view-can-scroll-up .scroll-view-gradient-top,
|
|
239
|
+
.scroll-view-can-scroll-down .scroll-view-gradient-bottom {
|
|
240
|
+
opacity: 1;
|
|
241
|
+
}
|
|
89
242
|
</style>
|
|
@@ -1,12 +1,40 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import { type StyleProps } from '../../../style/surface';
|
|
3
|
+
import type { ScrollAxis } from '../../../style/scroll';
|
|
4
|
+
export type ScrollGeometry = {
|
|
5
|
+
axis: ScrollAxis;
|
|
6
|
+
offset: {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
viewport: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
content: {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
18
|
+
remaining: {
|
|
19
|
+
top: number;
|
|
20
|
+
right: number;
|
|
21
|
+
bottom: number;
|
|
22
|
+
left: number;
|
|
23
|
+
};
|
|
24
|
+
progress: {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
3
29
|
type Props = {
|
|
4
30
|
children: Snippet;
|
|
5
31
|
viewport?: HTMLElement | null;
|
|
6
|
-
axis?:
|
|
32
|
+
axis?: ScrollAxis;
|
|
7
33
|
contentStyles?: StyleProps;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
34
|
+
onScroll?: (geometry: ScrollGeometry) => void;
|
|
35
|
+
scrollGradient?: boolean;
|
|
36
|
+
scrollGradientSize?: number | string;
|
|
37
|
+
} & StyleProps;
|
|
38
|
+
declare const ScrollView: import("svelte").Component<Props, {}, "viewport">;
|
|
11
39
|
type ScrollView = ReturnType<typeof ScrollView>;
|
|
12
40
|
export default ScrollView;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
export const demo = {
|
|
3
|
-
name: '
|
|
3
|
+
name: 'SearchField',
|
|
4
4
|
description: 'Search field with icon, input, and optional confirmation hint.'
|
|
5
5
|
};
|
|
6
6
|
</script>
|
|
7
7
|
|
|
8
8
|
<script lang="ts">
|
|
9
|
-
import
|
|
9
|
+
import SearchField from './SearchField.svelte';
|
|
10
10
|
|
|
11
11
|
let value = $state('');
|
|
12
12
|
</script>
|
|
13
13
|
|
|
14
14
|
<div class="vstack w-full max-w-sm gap-2">
|
|
15
|
-
<
|
|
16
|
-
<p class="text-xs text-
|
|
15
|
+
<SearchField bind:value placeholder="Search components..." />
|
|
16
|
+
<p class="text-xs text-[var(--sveltely-secondary-color)]">Value: {value || 'empty'}</p>
|
|
17
17
|
</div>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const demo: {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
};
|
|
5
|
+
import SearchField from './SearchField.svelte';
|
|
6
|
+
declare const SearchField: import("svelte").Component<Record<string, never>, {}, "">;
|
|
7
|
+
type SearchField = ReturnType<typeof SearchField>;
|
|
8
|
+
export default SearchField;
|
package/dist/components/Library/{SearchInput/SearchInput.svelte → SearchField/SearchField.svelte}
RENAMED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
type Props = {
|
|
7
7
|
value?: string;
|
|
8
8
|
radiusSource?: boolean;
|
|
9
|
-
} & StyleProps &
|
|
9
|
+
} & StyleProps &
|
|
10
|
+
Omit<HTMLInputAttributes, 'children' | 'type' | 'value' | 'class' | 'style'>;
|
|
10
11
|
|
|
11
12
|
let {
|
|
12
13
|
value = $bindable(''),
|
|
@@ -19,70 +20,65 @@
|
|
|
19
20
|
const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
|
|
20
21
|
const styleProps = $derived(extractedStyleProps.styleProps);
|
|
21
22
|
const props = $derived(extractedStyleProps.restProps);
|
|
22
|
-
const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'search-
|
|
23
|
+
const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'search-field'));
|
|
23
24
|
</script>
|
|
24
25
|
|
|
25
26
|
<label
|
|
26
|
-
class="search-
|
|
27
|
+
class="search-field"
|
|
27
28
|
style={rootStyle}
|
|
28
29
|
data-disabled={disabled ? 'true' : 'false'}
|
|
29
30
|
data-popover-radius-source={radiusSource ? 'true' : undefined}
|
|
30
31
|
>
|
|
31
|
-
<span class="search-
|
|
32
|
+
<span class="search-field-icon" aria-hidden="true">
|
|
32
33
|
<SearchIcon class="size-4" />
|
|
33
34
|
</span>
|
|
34
|
-
<input
|
|
35
|
-
type="search"
|
|
36
|
-
bind:value
|
|
37
|
-
{disabled}
|
|
38
|
-
{placeholder}
|
|
39
|
-
class="search-input-field"
|
|
40
|
-
{...props}
|
|
41
|
-
/>
|
|
35
|
+
<input type="search" bind:value {disabled} {placeholder} class="search-field-input" {...props} />
|
|
42
36
|
</label>
|
|
43
37
|
|
|
44
38
|
<style>
|
|
45
|
-
.search-
|
|
39
|
+
.search-field {
|
|
46
40
|
display: inline-flex;
|
|
47
41
|
width: 100%;
|
|
48
42
|
align-items: center;
|
|
49
43
|
border: 1px solid var(--sveltely-border-color);
|
|
50
44
|
border-radius: var(--sveltely-border-radius);
|
|
51
|
-
background:
|
|
52
|
-
color: var(--
|
|
53
|
-
gap: var(--search-
|
|
54
|
-
padding:
|
|
55
|
-
var(--search-
|
|
56
|
-
var(--search-
|
|
57
|
-
var(--search-
|
|
58
|
-
|
|
59
|
-
font-size: var(--search-input-font-size, 0.875rem);
|
|
45
|
+
background: var(--sveltely-background-color);
|
|
46
|
+
color: var(--sveltely-primary-color);
|
|
47
|
+
gap: var(--search-field-gap, calc(var(--sveltely-padding-x) * 0.67));
|
|
48
|
+
padding: var(--search-field-padding-y, calc(var(--sveltely-padding-y) * 0.67))
|
|
49
|
+
var(--search-field-padding-x, var(--sveltely-padding-x))
|
|
50
|
+
var(--search-field-padding-y, calc(var(--sveltely-padding-y) * 0.67))
|
|
51
|
+
var(--search-field-padding-leading, calc(var(--sveltely-padding-y) * 0.67));
|
|
52
|
+
font-size: var(--search-field-font-size, 0.875rem);
|
|
60
53
|
line-height: 1.25rem;
|
|
61
|
-
transition:
|
|
54
|
+
transition:
|
|
55
|
+
color 150ms,
|
|
56
|
+
border-color 150ms,
|
|
57
|
+
background-color 150ms;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
|
-
.search-
|
|
65
|
-
border-color: color-mix(in oklab, var(--sveltely-
|
|
60
|
+
.search-field:focus-within {
|
|
61
|
+
border-color: color-mix(in oklab, var(--sveltely-active-color) 50%, white);
|
|
66
62
|
}
|
|
67
63
|
|
|
68
|
-
.search-
|
|
64
|
+
.search-field[data-disabled='true'] {
|
|
69
65
|
cursor: not-allowed;
|
|
70
66
|
opacity: 0.6;
|
|
71
67
|
}
|
|
72
68
|
|
|
73
|
-
.search-
|
|
69
|
+
.search-field-icon {
|
|
74
70
|
flex-shrink: 0;
|
|
75
|
-
color: var(--
|
|
71
|
+
color: var(--sveltely-secondary-color);
|
|
76
72
|
}
|
|
77
73
|
|
|
78
|
-
.search-input
|
|
74
|
+
.search-field-input {
|
|
79
75
|
min-width: 0;
|
|
80
76
|
flex: 1 1 auto;
|
|
81
77
|
background: transparent;
|
|
82
78
|
outline: none;
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
.search-input
|
|
81
|
+
.search-field-input::-webkit-search-cancel-button {
|
|
86
82
|
appearance: none;
|
|
87
83
|
}
|
|
88
84
|
</style>
|
|
@@ -4,6 +4,6 @@ type Props = {
|
|
|
4
4
|
value?: string;
|
|
5
5
|
radiusSource?: boolean;
|
|
6
6
|
} & StyleProps & Omit<HTMLInputAttributes, 'children' | 'type' | 'value' | 'class' | 'style'>;
|
|
7
|
-
declare const
|
|
8
|
-
type
|
|
9
|
-
export default
|
|
7
|
+
declare const SearchField: import("svelte").Component<Props, {}, "value">;
|
|
8
|
+
type SearchField = ReturnType<typeof SearchField>;
|
|
9
|
+
export default SearchField;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SearchField.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SearchField.svelte';
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
options: Option[];
|
|
17
17
|
value: string;
|
|
18
18
|
disabled?: boolean;
|
|
19
|
-
} & StyleProps &
|
|
19
|
+
} & StyleProps &
|
|
20
|
+
Record<string, unknown> = $props();
|
|
20
21
|
|
|
21
22
|
const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
|
|
22
23
|
const styleProps = $derived(extractedStyleProps.styleProps);
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
--segmented-picker-scale: calc(var(--segmented-picker-font-size) / 0.875rem);
|
|
66
67
|
--sveltely-nested-inset: var(--segmented-picker-inset);
|
|
67
68
|
border-radius: var(--sveltely-border-radius);
|
|
68
|
-
background: var(--
|
|
69
|
+
background: var(--sveltely-inactive-color);
|
|
69
70
|
gap: var(--segmented-picker-inset);
|
|
70
71
|
font-size: var(--segmented-picker-font-size);
|
|
71
72
|
padding: var(--segmented-picker-inset);
|
|
@@ -79,8 +80,7 @@
|
|
|
79
80
|
.segmented-picker-button {
|
|
80
81
|
border-radius: var(--sveltely-border-radius-nested);
|
|
81
82
|
transition: background-color 150ms;
|
|
82
|
-
padding:
|
|
83
|
-
calc(var(--sveltely-padding-y) * 0.33 * var(--segmented-picker-scale))
|
|
83
|
+
padding: calc(var(--sveltely-padding-y) * 0.33 * var(--segmented-picker-scale))
|
|
84
84
|
calc(var(--sveltely-padding-x) * 0.83 * var(--segmented-picker-scale));
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -89,18 +89,18 @@
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.segmented-picker-button-active {
|
|
92
|
-
background: var(--sveltely-
|
|
93
|
-
color:
|
|
92
|
+
background: var(--sveltely-active-color);
|
|
93
|
+
color: var(--sveltely-background-color);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
.segmented-picker-button-disabled {
|
|
97
97
|
cursor: not-allowed;
|
|
98
|
-
color: var(--
|
|
98
|
+
color: var(--sveltely-secondary-color);
|
|
99
99
|
pointer-events: none;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
.segmented-picker-button-disabled-selected {
|
|
103
|
-
background: color-mix(in oklab, var(--sveltely-
|
|
104
|
-
color: var(--
|
|
103
|
+
background: color-mix(in oklab, var(--sveltely-active-color) 35%, white);
|
|
104
|
+
color: var(--sveltely-secondary-color);
|
|
105
105
|
}
|
|
106
106
|
</style>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
{/snippet}
|
|
16
16
|
|
|
17
17
|
<div class="vstack gap-3">
|
|
18
|
-
<p class="text-sm text-
|
|
18
|
+
<p class="text-sm text-[var(--sveltely-primary-color)]">This is a simple sheet example.</p>
|
|
19
19
|
<div class="rounded border border-gray-200/70 p-3 text-sm text-gray-700">
|
|
20
20
|
<div>Panel one content.</div>
|
|
21
21
|
<div class="mt-2">Panel two content.</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import { portalContent } from '../../../actions/portal';
|
|
4
4
|
import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
|
|
5
|
-
interface Props {
|
|
5
|
+
interface Props {
|
|
6
6
|
trigger?: Snippet;
|
|
7
7
|
open?: boolean;
|
|
8
8
|
label?: string;
|
|
@@ -87,13 +87,16 @@ interface Props {
|
|
|
87
87
|
align-items: center;
|
|
88
88
|
border: 1px solid var(--sveltely-border-color);
|
|
89
89
|
border-radius: var(--sveltely-border-radius);
|
|
90
|
-
background:
|
|
91
|
-
color: var(--
|
|
90
|
+
background: var(--sveltely-background-color);
|
|
91
|
+
color: var(--sveltely-primary-color);
|
|
92
92
|
gap: var(--sveltely-gap);
|
|
93
93
|
padding: calc(var(--sveltely-padding-y) * 0.67) var(--sveltely-padding-x);
|
|
94
94
|
font-size: 0.875rem;
|
|
95
95
|
line-height: 1.25rem;
|
|
96
|
-
transition:
|
|
96
|
+
transition:
|
|
97
|
+
color 150ms,
|
|
98
|
+
border-color 150ms,
|
|
99
|
+
background-color 150ms;
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
.sheet-trigger:hover {
|
|
@@ -102,7 +105,7 @@ interface Props {
|
|
|
102
105
|
|
|
103
106
|
.sheet {
|
|
104
107
|
border-radius: var(--sveltely-border-radius);
|
|
105
|
-
background:
|
|
108
|
+
background: var(--sveltely-background-color);
|
|
106
109
|
padding: calc(var(--sveltely-padding-y) * 1.33) calc(var(--sveltely-padding-x) * 1.33);
|
|
107
110
|
}
|
|
108
111
|
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
max?: number;
|
|
15
15
|
step?: number | string;
|
|
16
16
|
disabled?: boolean;
|
|
17
|
-
} & StyleProps &
|
|
17
|
+
} & StyleProps &
|
|
18
|
+
Record<string, unknown> = $props();
|
|
18
19
|
|
|
19
20
|
const extractedStyleProps = $derived.by(() => extractStyleProps(props));
|
|
20
21
|
const styleProps = $derived(extractedStyleProps.styleProps);
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
.slider:focus-visible {
|
|
68
|
-
outline: 2px solid color-mix(in oklab, var(--sveltely-
|
|
69
|
+
outline: 2px solid color-mix(in oklab, var(--sveltely-active-color) 35%, white);
|
|
69
70
|
outline-offset: 4px;
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -79,10 +80,10 @@
|
|
|
79
80
|
border-radius: var(--sveltely-border-radius);
|
|
80
81
|
background: linear-gradient(
|
|
81
82
|
to right,
|
|
82
|
-
var(--sveltely-
|
|
83
|
-
var(--sveltely-
|
|
84
|
-
var(--
|
|
85
|
-
var(--
|
|
83
|
+
var(--sveltely-active-color) 0%,
|
|
84
|
+
var(--sveltely-active-color) var(--slider-pct),
|
|
85
|
+
var(--sveltely-border-color) var(--slider-pct),
|
|
86
|
+
var(--sveltely-border-color) 100%
|
|
86
87
|
);
|
|
87
88
|
}
|
|
88
89
|
|
|
@@ -93,7 +94,7 @@
|
|
|
93
94
|
height: var(--slider-thumb-size);
|
|
94
95
|
border-radius: var(--sveltely-border-radius);
|
|
95
96
|
border: var(--slider-thumb-ring-width) solid var(--color-white);
|
|
96
|
-
background: var(--sveltely-
|
|
97
|
+
background: var(--sveltely-active-color);
|
|
97
98
|
margin-top: calc((var(--slider-track-height) - var(--slider-thumb-size)) / 2);
|
|
98
99
|
}
|
|
99
100
|
|
|
@@ -101,14 +102,14 @@
|
|
|
101
102
|
height: var(--slider-track-height);
|
|
102
103
|
border: none;
|
|
103
104
|
border-radius: var(--sveltely-border-radius);
|
|
104
|
-
background: var(--
|
|
105
|
+
background: var(--sveltely-border-color);
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
.slider::-moz-range-progress {
|
|
108
109
|
height: var(--slider-track-height);
|
|
109
110
|
border: none;
|
|
110
111
|
border-radius: var(--sveltely-border-radius);
|
|
111
|
-
background: var(--sveltely-
|
|
112
|
+
background: var(--sveltely-active-color);
|
|
112
113
|
}
|
|
113
114
|
|
|
114
115
|
.slider::-moz-range-thumb {
|
|
@@ -117,6 +118,6 @@
|
|
|
117
118
|
height: var(--slider-thumb-size);
|
|
118
119
|
border-radius: var(--sveltely-border-radius);
|
|
119
120
|
border: var(--slider-thumb-ring-width) solid var(--color-white);
|
|
120
|
-
background: var(--sveltely-
|
|
121
|
+
background: var(--sveltely-active-color);
|
|
121
122
|
}
|
|
122
123
|
</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default Spacer;
|
|
2
|
+
type Spacer = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Spacer: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
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> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|