@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
@@ -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: white;
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: white;
81
- color: var(--color-zinc-800);
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: color 150ms, border-color 150ms, background-color 150ms;
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 { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
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?: 'vertical' | 'horizontal' | 'both';
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
- ...restProps
18
- }: Props & StyleProps & Record<string, unknown> = $props();
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 extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
21
- const styleProps = $derived(extractedStyleProps.styleProps);
22
- const props = $derived(extractedStyleProps.restProps);
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
- style={viewportStyle}
34
- {...props}
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?: 'vertical' | 'horizontal' | 'both';
32
+ axis?: ScrollAxis;
7
33
  contentStyles?: StyleProps;
8
- };
9
- type $$ComponentProps = Props & StyleProps & Record<string, unknown>;
10
- declare const ScrollView: import("svelte").Component<$$ComponentProps, {}, "viewport">;
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 +1,2 @@
1
1
  export { default } from './ScrollView.svelte';
2
+ export type { ScrollGeometry } from './ScrollView.svelte';
@@ -1,17 +1,17 @@
1
1
  <script module lang="ts">
2
2
  export const demo = {
3
- name: 'SearchInput',
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 SearchInput from './SearchInput.svelte';
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
- <SearchInput bind:value placeholder="Search components..." />
16
- <p class="text-xs text-zinc-500">Value: {value || 'empty'}</p>
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;
@@ -6,7 +6,8 @@
6
6
  type Props = {
7
7
  value?: string;
8
8
  radiusSource?: boolean;
9
- } & StyleProps & Omit<HTMLInputAttributes, 'children' | 'type' | 'value' | 'class' | 'style'>;
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-input'));
23
+ const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'search-field'));
23
24
  </script>
24
25
 
25
26
  <label
26
- class="search-input"
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-input-icon" aria-hidden="true">
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-input {
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: white;
52
- color: var(--color-zinc-900);
53
- gap: var(--search-input-gap, calc(var(--sveltely-padding-x) * 0.67));
54
- padding:
55
- var(--search-input-padding-y, calc(var(--sveltely-padding-y) * 0.67))
56
- var(--search-input-padding-x, var(--sveltely-padding-x))
57
- var(--search-input-padding-y, calc(var(--sveltely-padding-y) * 0.67))
58
- var(--search-input-padding-leading, calc(var(--sveltely-padding-y) * 0.67));
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: color 150ms, border-color 150ms, background-color 150ms;
54
+ transition:
55
+ color 150ms,
56
+ border-color 150ms,
57
+ background-color 150ms;
62
58
  }
63
59
 
64
- .search-input:focus-within {
65
- border-color: color-mix(in oklab, var(--sveltely-primary-color) 50%, white);
60
+ .search-field:focus-within {
61
+ border-color: color-mix(in oklab, var(--sveltely-active-color) 50%, white);
66
62
  }
67
63
 
68
- .search-input[data-disabled='true'] {
64
+ .search-field[data-disabled='true'] {
69
65
  cursor: not-allowed;
70
66
  opacity: 0.6;
71
67
  }
72
68
 
73
- .search-input-icon {
69
+ .search-field-icon {
74
70
  flex-shrink: 0;
75
- color: var(--color-zinc-500);
71
+ color: var(--sveltely-secondary-color);
76
72
  }
77
73
 
78
- .search-input-field {
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-field::-webkit-search-cancel-button {
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 SearchInput: import("svelte").Component<Props, {}, "value">;
8
- type SearchInput = ReturnType<typeof SearchInput>;
9
- export default SearchInput;
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';
@@ -19,5 +19,5 @@
19
19
 
20
20
  <div class="vstack center gap-2">
21
21
  <SegmentedPicker {options} bind:value />
22
- <p class="text-xs text-zinc-500">Selected: {value}</p>
22
+ <p class="text-xs text-[var(--sveltely-secondary-color)]">Selected: {value}</p>
23
23
  </div>
@@ -16,7 +16,8 @@
16
16
  options: Option[];
17
17
  value: string;
18
18
  disabled?: boolean;
19
- } & StyleProps & Record<string, unknown> = $props();
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(--color-zinc-100);
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-primary-color);
93
- color: white;
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(--color-zinc-400);
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-primary-color) 35%, white);
104
- color: var(--color-zinc-400);
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-zinc-700">This is a simple sheet example.</p>
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: white;
91
- color: var(--color-zinc-800);
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: color 150ms, border-color 150ms, background-color 150ms;
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: white;
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
 
@@ -13,5 +13,5 @@
13
13
 
14
14
  <div class="vstack w-full max-w-sm gap-2">
15
15
  <Slider bind:value min={0} max={100} />
16
- <p class="text-xs text-zinc-500">Value: {value}</p>
16
+ <p class="text-xs text-[var(--sveltely-secondary-color)]">Value: {value}</p>
17
17
  </div>
@@ -14,7 +14,8 @@
14
14
  max?: number;
15
15
  step?: number | string;
16
16
  disabled?: boolean;
17
- } & StyleProps & Record<string, unknown> = $props();
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-primary-color) 35%, white);
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-primary-color) 0%,
83
- var(--sveltely-primary-color) var(--slider-pct),
84
- var(--color-zinc-300) var(--slider-pct),
85
- var(--color-zinc-300) 100%
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-primary-color);
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(--color-zinc-300);
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-primary-color);
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-primary-color);
121
+ background: var(--sveltely-active-color);
121
122
  }
122
123
  </style>
@@ -0,0 +1,7 @@
1
+ <div class="spacer"></div>
2
+
3
+ <style>
4
+ .spacer {
5
+ flex: 1 1 auto;
6
+ }
7
+ </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
+ }