@x33025/sveltely 0.0.57 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/actions/tooltip.d.ts +10 -0
  2. package/dist/actions/tooltip.js +255 -0
  3. package/dist/components/{AnimatedNumber.demo.svelte → Library/AnimatedNumber/AnimatedNumber.demo.svelte} +6 -10
  4. package/dist/components/{AnimatedNumber.demo.svelte.d.ts → Library/AnimatedNumber/AnimatedNumber.demo.svelte.d.ts} +0 -1
  5. package/dist/components/Library/AnimatedNumber/AnimatedNumber.svelte +29 -0
  6. package/dist/components/Library/AnimatedNumber/AnimatedNumber.svelte.d.ts +9 -0
  7. package/dist/components/Library/AnimatedNumber/index.d.ts +1 -0
  8. package/dist/components/Library/AnimatedNumber/index.js +1 -0
  9. package/dist/components/{AsyncButton.demo.svelte → Library/AsyncButton/AsyncButton.demo.svelte} +0 -1
  10. package/dist/components/Library/AsyncButton/AsyncButton.svelte +178 -0
  11. package/dist/components/{AsyncButton.svelte.d.ts → Library/AsyncButton/AsyncButton.svelte.d.ts} +7 -2
  12. package/dist/components/Library/AsyncButton/index.d.ts +1 -0
  13. package/dist/components/Library/AsyncButton/index.js +1 -0
  14. package/dist/components/Library/Button/Button.demo.svelte +17 -0
  15. package/dist/components/Library/Button/Button.demo.svelte.d.ts +23 -0
  16. package/dist/components/Library/Button/Button.svelte +134 -0
  17. package/dist/components/Library/Button/Button.svelte.d.ts +17 -0
  18. package/dist/components/Library/Button/index.d.ts +1 -0
  19. package/dist/components/Library/Button/index.js +1 -0
  20. package/dist/components/Library/Calendar/Calendar.demo.svelte +30 -0
  21. package/dist/components/Library/Calendar/Calendar.demo.svelte.d.ts +10 -0
  22. package/dist/components/Library/Calendar/Calendar.svelte +310 -0
  23. package/dist/components/Library/Calendar/Calendar.svelte.d.ts +10 -0
  24. package/dist/components/Library/Calendar/index.d.ts +1 -0
  25. package/dist/components/Library/Calendar/index.js +1 -0
  26. package/dist/components/Library/Checkbox/Checkbox.demo.svelte +20 -0
  27. package/dist/components/Library/Checkbox/Checkbox.demo.svelte.d.ts +8 -0
  28. package/dist/components/Library/Checkbox/Checkbox.svelte +134 -0
  29. package/dist/components/Library/Checkbox/Checkbox.svelte.d.ts +11 -0
  30. package/dist/components/Library/Checkbox/index.d.ts +1 -0
  31. package/dist/components/Library/Checkbox/index.js +1 -0
  32. package/dist/components/{ChipInput.demo.svelte → Library/ChipInput/ChipInput.demo.svelte} +1 -2
  33. package/dist/components/{ChipInput.demo.svelte.d.ts → Library/ChipInput/ChipInput.demo.svelte.d.ts} +0 -1
  34. package/dist/components/{ChipInput.svelte → Library/ChipInput/ChipInput.svelte} +77 -3
  35. package/dist/components/{ChipInput.svelte.d.ts → Library/ChipInput/ChipInput.svelte.d.ts} +2 -1
  36. package/dist/components/Library/ChipInput/index.d.ts +1 -0
  37. package/dist/components/Library/ChipInput/index.js +1 -0
  38. package/dist/components/Library/Dropdown/Dropdown.demo.svelte +54 -0
  39. package/dist/components/Library/Dropdown/Dropdown.demo.svelte.d.ts +8 -0
  40. package/dist/components/Library/Dropdown/Dropdown.svelte +346 -0
  41. package/dist/components/Library/Dropdown/Dropdown.svelte.d.ts +40 -0
  42. package/dist/components/Library/Dropdown/index.d.ts +2 -0
  43. package/dist/components/Library/Dropdown/index.js +1 -0
  44. package/dist/components/Library/Dropdown/types.d.ts +27 -0
  45. package/dist/components/Library/Dropdown/types.js +1 -0
  46. package/dist/components/{Popover/Popover.svelte → Library/Floating/Floating.svelte} +155 -101
  47. package/dist/components/Library/Floating/Floating.svelte.d.ts +30 -0
  48. package/dist/components/Library/Floating/registry.svelte.d.ts +6 -0
  49. package/dist/components/{Popover → Library/Floating}/registry.svelte.js +2 -23
  50. package/dist/components/{GlowEffect.svelte → Library/GlowEffect/GlowEffect.svelte} +15 -6
  51. package/dist/components/{GlowEffect.svelte.d.ts → Library/GlowEffect/GlowEffect.svelte.d.ts} +3 -2
  52. package/dist/components/Library/GlowEffect/index.d.ts +1 -0
  53. package/dist/components/Library/GlowEffect/index.js +1 -0
  54. package/dist/components/Library/NavigationStack/NavigationStack.svelte +242 -0
  55. package/dist/components/Library/NavigationStack/NavigationStack.svelte.d.ts +15 -0
  56. package/dist/components/Library/NavigationStack/SidebarToggle.svelte +52 -0
  57. package/dist/components/Library/NavigationStack/SidebarToggle.svelte.d.ts +10 -0
  58. package/dist/components/Library/NavigationStack/Toolbar.svelte +59 -0
  59. package/dist/components/Library/NavigationStack/Toolbar.svelte.d.ts +11 -0
  60. package/dist/components/{Pagination.demo.svelte → Library/Pagination/Pagination.demo.svelte} +0 -1
  61. package/dist/components/{Pagination.demo.svelte.d.ts → Library/Pagination/Pagination.demo.svelte.d.ts} +0 -1
  62. package/dist/components/Library/Pagination/Pagination.svelte +227 -0
  63. package/dist/components/{Pagination.svelte.d.ts → Library/Pagination/Pagination.svelte.d.ts} +3 -3
  64. package/dist/components/Library/Pagination/index.d.ts +1 -0
  65. package/dist/components/Library/Pagination/index.js +1 -0
  66. package/dist/components/Library/Popover/Popover.demo.svelte +21 -0
  67. package/dist/components/Library/Popover/Popover.svelte +92 -0
  68. package/dist/components/Library/Popover/Popover.svelte.d.ts +14 -0
  69. package/dist/components/{Popover → Library/Popover}/PopoverDebugOverlay.svelte +1 -1
  70. package/dist/components/Library/Popover/index.d.ts +1 -0
  71. package/dist/components/Library/Popover/index.js +1 -0
  72. package/dist/components/Library/ScrollView/ScrollView.svelte +89 -0
  73. package/dist/components/Library/ScrollView/ScrollView.svelte.d.ts +12 -0
  74. package/dist/components/Library/ScrollView/index.d.ts +1 -0
  75. package/dist/components/Library/ScrollView/index.js +1 -0
  76. package/dist/components/{SearchInput.demo.svelte → Library/SearchInput/SearchInput.demo.svelte} +2 -3
  77. package/dist/components/{SearchInput.demo.svelte.d.ts → Library/SearchInput/SearchInput.demo.svelte.d.ts} +0 -1
  78. package/dist/components/Library/SearchInput/SearchInput.svelte +88 -0
  79. package/dist/components/{SearchInput.svelte.d.ts → Library/SearchInput/SearchInput.svelte.d.ts} +3 -3
  80. package/dist/components/Library/SearchInput/index.d.ts +1 -0
  81. package/dist/components/Library/SearchInput/index.js +1 -0
  82. package/dist/components/{SegmentedPicker.demo.svelte → Library/SegmentedPicker/SegmentedPicker.demo.svelte} +2 -3
  83. package/dist/components/{SegmentedPicker.demo.svelte.d.ts → Library/SegmentedPicker/SegmentedPicker.demo.svelte.d.ts} +0 -1
  84. package/dist/components/Library/SegmentedPicker/SegmentedPicker.svelte +106 -0
  85. package/dist/components/{SegmentedPicker.svelte.d.ts → Library/SegmentedPicker/SegmentedPicker.svelte.d.ts} +2 -2
  86. package/dist/components/Library/SegmentedPicker/index.d.ts +1 -0
  87. package/dist/components/Library/SegmentedPicker/index.js +1 -0
  88. package/dist/components/{Sheet → Library/Sheet}/Sheet.demo.svelte +4 -17
  89. package/dist/components/Library/Sheet/Sheet.demo.svelte.d.ts +23 -0
  90. package/dist/components/Library/Sheet/Sheet.svelte +113 -0
  91. package/dist/components/{Sheet → Library/Sheet}/Sheet.svelte.d.ts +4 -2
  92. package/dist/components/{Slider.demo.svelte → Library/Slider/Slider.demo.svelte} +2 -3
  93. package/dist/components/{Slider.demo.svelte.d.ts → Library/Slider/Slider.demo.svelte.d.ts} +0 -1
  94. package/dist/components/Library/Slider/Slider.svelte +122 -0
  95. package/dist/components/{Slider.svelte.d.ts → Library/Slider/Slider.svelte.d.ts} +2 -3
  96. package/dist/components/Library/Slider/index.d.ts +1 -0
  97. package/dist/components/Library/Slider/index.js +1 -0
  98. package/dist/components/{Spinner.demo.svelte → Library/Spinner/Spinner.demo.svelte} +3 -1
  99. package/dist/components/Library/Spinner/Spinner.svelte +32 -0
  100. package/dist/components/{Spinner.svelte.d.ts → Library/Spinner/Spinner.svelte.d.ts} +3 -2
  101. package/dist/components/Library/Spinner/index.d.ts +1 -0
  102. package/dist/components/Library/Spinner/index.js +1 -0
  103. package/dist/components/Library/Switch/Switch.demo.svelte +20 -0
  104. package/dist/components/Library/Switch/Switch.demo.svelte.d.ts +8 -0
  105. package/dist/components/Library/Switch/Switch.svelte +168 -0
  106. package/dist/components/Library/Switch/Switch.svelte.d.ts +11 -0
  107. package/dist/components/Library/Switch/index.d.ts +1 -0
  108. package/dist/components/Library/Switch/index.js +1 -0
  109. package/dist/components/Library/TextShimmer/TextShimmer.demo.svelte +14 -0
  110. package/dist/components/Library/TextShimmer/TextShimmer.demo.svelte.d.ts +23 -0
  111. package/dist/components/Library/TextShimmer/TextShimmer.svelte +88 -0
  112. package/dist/components/Library/TextShimmer/TextShimmer.svelte.d.ts +11 -0
  113. package/dist/components/Library/TextShimmer/index.d.ts +1 -0
  114. package/dist/components/Library/TextShimmer/index.js +1 -0
  115. package/dist/components/Library/TimePicker/TimePicker.demo.svelte +18 -0
  116. package/dist/components/Library/TimePicker/TimePicker.demo.svelte.d.ts +10 -0
  117. package/dist/components/Library/TimePicker/TimePicker.svelte +143 -0
  118. package/dist/components/Library/TimePicker/TimePicker.svelte.d.ts +13 -0
  119. package/dist/components/Library/TimePicker/index.d.ts +2 -0
  120. package/dist/components/Library/TimePicker/index.js +1 -0
  121. package/dist/components/Library/TokenSearchInput/TokenSearchInput.demo.svelte +19 -0
  122. package/dist/components/Library/TokenSearchInput/TokenSearchInput.demo.svelte.d.ts +9 -0
  123. package/dist/components/Library/TokenSearchInput/TokenSearchInput.svelte +230 -0
  124. package/dist/components/Library/TokenSearchInput/TokenSearchInput.svelte.d.ts +14 -0
  125. package/dist/components/Library/TokenSearchInput/index.d.ts +1 -0
  126. package/dist/components/Library/TokenSearchInput/index.js +1 -0
  127. package/dist/components/Library/Tooltip/Tooltip.demo.svelte +14 -0
  128. package/dist/components/{Tooltip.demo.svelte.d.ts → Library/Tooltip/Tooltip.demo.svelte.d.ts} +0 -1
  129. package/dist/components/Library/Tooltip/index.d.ts +2 -0
  130. package/dist/components/Library/Tooltip/index.js +1 -0
  131. package/dist/components/Library/WheelPicker/WheelColumn.svelte +302 -0
  132. package/dist/components/Library/WheelPicker/WheelColumn.svelte.d.ts +29 -0
  133. package/dist/components/Library/WheelPicker/WheelPicker.svelte +114 -0
  134. package/dist/components/Library/WheelPicker/WheelPicker.svelte.d.ts +9 -0
  135. package/dist/components/Library/WheelPicker/index.d.ts +2 -0
  136. package/dist/components/Library/WheelPicker/index.js +1 -0
  137. package/dist/components/Library/WheelPicker/types.d.ts +10 -0
  138. package/dist/components/Library/WheelPicker/types.js +1 -0
  139. package/dist/components/Local/ComponentGrid.svelte +7 -6
  140. package/dist/components/Local/ComponentGrid.svelte.d.ts +1 -1
  141. package/dist/components/Local/HeroCard.svelte +18 -8
  142. package/dist/components/Local/HeroCard.svelte.d.ts +1 -1
  143. package/dist/components/Local/StyleControls.svelte +119 -0
  144. package/dist/components/Local/StyleControls.svelte.d.ts +15 -0
  145. package/dist/index.d.ts +24 -14
  146. package/dist/index.js +23 -14
  147. package/dist/style/index.css +61 -280
  148. package/dist/style/surface.d.ts +17 -0
  149. package/dist/style/surface.js +54 -0
  150. package/dist/style.css +102 -523
  151. package/dist/utils/positioning.d.ts +3 -2
  152. package/dist/utils/positioning.js +9 -5
  153. package/package.json +2 -1
  154. package/dist/components/AnimatedNumber.svelte +0 -18
  155. package/dist/components/AnimatedNumber.svelte.d.ts +0 -8
  156. package/dist/components/AsyncButton.svelte +0 -93
  157. package/dist/components/NavigationStack/NavigationStack.svelte +0 -76
  158. package/dist/components/NavigationStack/NavigationStack.svelte.d.ts +0 -10
  159. package/dist/components/NavigationStack/SidebarToggle.svelte +0 -36
  160. package/dist/components/NavigationStack/SidebarToggle.svelte.d.ts +0 -9
  161. package/dist/components/NavigationStack/Toolbar.svelte +0 -25
  162. package/dist/components/NavigationStack/Toolbar.svelte.d.ts +0 -9
  163. package/dist/components/Pagination.svelte +0 -144
  164. package/dist/components/Popover/Popover.demo.svelte +0 -35
  165. package/dist/components/Popover/Popover.svelte.d.ts +0 -13
  166. package/dist/components/Popover/index.d.ts +0 -2
  167. package/dist/components/Popover/index.js +0 -2
  168. package/dist/components/Popover/registry.svelte.d.ts +0 -18
  169. package/dist/components/SearchInput.svelte +0 -39
  170. package/dist/components/SegmentedPicker.svelte +0 -51
  171. package/dist/components/Sheet/Sheet.demo.svelte.d.ts +0 -8
  172. package/dist/components/Sheet/Sheet.svelte +0 -60
  173. package/dist/components/Slider.svelte +0 -47
  174. package/dist/components/Spinner.svelte +0 -7
  175. package/dist/components/TextShimmer.svelte +0 -60
  176. package/dist/components/TextShimmer.svelte.d.ts +0 -10
  177. package/dist/components/Tooltip.demo.svelte +0 -16
  178. package/dist/components/Tooltip.svelte +0 -79
  179. package/dist/components/Tooltip.svelte.d.ts +0 -12
  180. /package/dist/components/{AsyncButton.demo.svelte.d.ts → Library/AsyncButton/AsyncButton.demo.svelte.d.ts} +0 -0
  181. /package/dist/components/{NavigationStack → Library/NavigationStack}/index.d.ts +0 -0
  182. /package/dist/components/{NavigationStack → Library/NavigationStack}/index.js +0 -0
  183. /package/dist/components/{Popover → Library/Popover}/Popover.demo.svelte.d.ts +0 -0
  184. /package/dist/components/{Popover → Library/Popover}/PopoverDebugOverlay.svelte.d.ts +0 -0
  185. /package/dist/components/{Sheet → Library/Sheet}/index.d.ts +0 -0
  186. /package/dist/components/{Sheet → Library/Sheet}/index.js +0 -0
  187. /package/dist/components/{Spinner.demo.svelte.d.ts → Library/Spinner/Spinner.demo.svelte.d.ts} +0 -0
@@ -0,0 +1,242 @@
1
+ <script lang="ts">
2
+ import { setContext, getContext } from 'svelte';
3
+ import type { Snippet } from 'svelte';
4
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
5
+
6
+ interface Props {
7
+ leftHeader?: Snippet;
8
+ header?: Snippet;
9
+ rightHeader?: Snippet;
10
+ left?: Snippet;
11
+ right?: Snippet;
12
+ children?: Snippet;
13
+ chrome?: boolean;
14
+ }
15
+
16
+ let {
17
+ leftHeader,
18
+ header,
19
+ rightHeader,
20
+ left,
21
+ right,
22
+ children,
23
+ chrome = true,
24
+ ...restProps
25
+ }: Props & StyleProps & Record<string, unknown> = $props();
26
+
27
+ const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
28
+ const styleProps = $derived(extractedStyleProps.styleProps);
29
+ const props = $derived(extractedStyleProps.restProps);
30
+
31
+ const existingContext = getContext<{
32
+ leftOpen?: boolean;
33
+ rightOpen?: boolean;
34
+ }>('navigationStack');
35
+
36
+ let leftOpen = $state(existingContext?.leftOpen ?? true);
37
+ let rightOpen = $state(existingContext?.rightOpen ?? true);
38
+
39
+ function toggleLeft() {
40
+ leftOpen = !leftOpen;
41
+ }
42
+
43
+ function toggleRight() {
44
+ rightOpen = !rightOpen;
45
+ }
46
+
47
+ setContext('navigationStack', {
48
+ get leftOpen() {
49
+ return leftOpen;
50
+ },
51
+ get rightOpen() {
52
+ return rightOpen;
53
+ },
54
+ toggleLeft,
55
+ toggleRight
56
+ });
57
+
58
+ const shellStyle = $derived.by(() => {
59
+ const declarations = [
60
+ `--navigation-stack-left-width: ${left && leftOpen ? 'var(--navigation-stack-sidebar-width)' : '0px'};`,
61
+ `--navigation-stack-right-width: ${right && rightOpen ? 'var(--navigation-stack-sidebar-width)' : '0px'};`
62
+ ];
63
+ const stylePropDeclarations = surfaceStyle(styleProps, 'navigation-stack');
64
+ if (stylePropDeclarations) declarations.push(stylePropDeclarations);
65
+ return declarations.join(' ');
66
+ });
67
+ </script>
68
+
69
+ <div
70
+ class="navigation-stack size-full"
71
+ data-chrome={chrome ? 'true' : 'false'}
72
+ data-left-open={leftOpen ? 'true' : 'false'}
73
+ data-right-open={rightOpen ? 'true' : 'false'}
74
+ style={shellStyle}
75
+ {...props}
76
+ >
77
+ {#if left || leftHeader}
78
+ <div class="navigation-stack-pane navigation-stack-pane-left navigation-stack-pane-header">
79
+ {#if leftHeader}
80
+ <div
81
+ class="navigation-stack-toolbar flex items-center gap-2"
82
+ style="padding: calc(var(--sveltely-padding-y) * 0.67) calc(var(--sveltely-padding-x) * 0.67);"
83
+ >
84
+ {@render leftHeader()}
85
+ </div>
86
+ {/if}
87
+ </div>
88
+ {/if}
89
+
90
+ <div class="navigation-stack-pane navigation-stack-pane-center navigation-stack-pane-header">
91
+ {#if header}
92
+ <div
93
+ class="navigation-stack-toolbar flex items-center gap-2"
94
+ style="padding: calc(var(--sveltely-padding-y) * 0.67) calc(var(--sveltely-padding-x) * 0.67);"
95
+ >
96
+ {@render header()}
97
+ </div>
98
+ {/if}
99
+ </div>
100
+
101
+ {#if right || rightHeader}
102
+ <div class="navigation-stack-pane navigation-stack-pane-right navigation-stack-pane-header">
103
+ {#if rightHeader}
104
+ <div
105
+ class="navigation-stack-toolbar flex items-center gap-2"
106
+ style="padding: calc(var(--sveltely-padding-y) * 0.67) calc(var(--sveltely-padding-x) * 0.67);"
107
+ >
108
+ {@render rightHeader()}
109
+ </div>
110
+ {/if}
111
+ </div>
112
+ {/if}
113
+
114
+ {#if left}
115
+ <div class="navigation-stack-pane navigation-stack-pane-left navigation-stack-pane-body">
116
+ <div
117
+ class="navigation-stack-sidebar-inner vstack h-full overflow-auto"
118
+ style="padding: calc(var(--sveltely-padding-y) * 1.33) calc(var(--sveltely-padding-x) * 1.33);"
119
+ >
120
+ {@render left()}
121
+ </div>
122
+ </div>
123
+ {/if}
124
+
125
+ <div class="navigation-stack-pane navigation-stack-pane-center navigation-stack-pane-body navigation-stack-content vstack">
126
+ {#if children}
127
+ {@render children()}
128
+ {/if}
129
+ </div>
130
+
131
+ {#if right}
132
+ <div class="navigation-stack-pane navigation-stack-pane-right navigation-stack-pane-body">
133
+ <div
134
+ class="navigation-stack-sidebar-inner vstack h-full overflow-auto"
135
+ style="padding: calc(var(--sveltely-padding-y) * 1.33) calc(var(--sveltely-padding-x) * 1.33);"
136
+ >
137
+ {@render right()}
138
+ </div>
139
+ </div>
140
+ {/if}
141
+ </div>
142
+
143
+ <style>
144
+ .navigation-stack {
145
+ --navigation-stack-sidebar-width: 16rem;
146
+ display: grid;
147
+ grid-template-columns:
148
+ var(--navigation-stack-left-width)
149
+ minmax(0, 1fr)
150
+ var(--navigation-stack-right-width);
151
+ grid-template-rows: auto minmax(0, 1fr);
152
+ overflow: hidden;
153
+ transition: grid-template-columns 300ms ease-in-out;
154
+ }
155
+
156
+ .navigation-stack-pane {
157
+ min-width: 0;
158
+ min-height: 0;
159
+ overflow: hidden;
160
+ transition:
161
+ border-color 300ms ease-in-out,
162
+ background-color 300ms ease-in-out;
163
+ }
164
+
165
+ .navigation-stack-pane-left.navigation-stack-pane-header,
166
+ .navigation-stack-pane-left.navigation-stack-pane-body {
167
+ grid-column: 1;
168
+ }
169
+
170
+ .navigation-stack-pane-center.navigation-stack-pane-header,
171
+ .navigation-stack-pane-center.navigation-stack-pane-body {
172
+ grid-column: 2;
173
+ }
174
+
175
+ .navigation-stack-pane-right.navigation-stack-pane-header,
176
+ .navigation-stack-pane-right.navigation-stack-pane-body {
177
+ grid-column: 3;
178
+ }
179
+
180
+ .navigation-stack-pane-header {
181
+ grid-row: 1;
182
+ border-bottom: 1px solid var(--sveltely-border-color);
183
+ background: white;
184
+ }
185
+
186
+ .navigation-stack-pane-body {
187
+ grid-row: 2;
188
+ }
189
+
190
+ .navigation-stack-pane-left {
191
+ border-right: 1px solid var(--sveltely-border-color);
192
+ }
193
+
194
+ .navigation-stack-pane-right {
195
+ border-left: 1px solid var(--sveltely-border-color);
196
+ }
197
+
198
+ .navigation-stack-toolbar {
199
+ height: 100%;
200
+ }
201
+
202
+ .navigation-stack-content {
203
+ overflow: auto;
204
+ }
205
+
206
+ .navigation-stack-sidebar-inner {
207
+ background: var(--color-zinc-50);
208
+ transition:
209
+ visibility 0ms linear 300ms,
210
+ background-color 300ms ease-in-out;
211
+ }
212
+
213
+ .navigation-stack[data-left-open='true'] .navigation-stack-pane-left.navigation-stack-pane-body .navigation-stack-sidebar-inner,
214
+ .navigation-stack[data-right-open='true'] .navigation-stack-pane-right.navigation-stack-pane-body .navigation-stack-sidebar-inner {
215
+ visibility: visible;
216
+ transition-delay: 0ms;
217
+ }
218
+
219
+ .navigation-stack[data-left-open='false'] .navigation-stack-pane-left.navigation-stack-pane-body .navigation-stack-sidebar-inner,
220
+ .navigation-stack[data-right-open='false'] .navigation-stack-pane-right.navigation-stack-pane-body .navigation-stack-sidebar-inner {
221
+ visibility: hidden;
222
+ pointer-events: none;
223
+ }
224
+
225
+ .navigation-stack[data-chrome='false'] .navigation-stack-pane-header {
226
+ border-color: transparent;
227
+ background: transparent;
228
+ }
229
+
230
+ .navigation-stack[data-chrome='false'] .navigation-stack-pane-left,
231
+ .navigation-stack[data-chrome='false'] .navigation-stack-pane-right {
232
+ border-color: transparent;
233
+ }
234
+
235
+ .navigation-stack[data-chrome='false'] .navigation-stack-sidebar-inner {
236
+ background: transparent;
237
+ }
238
+
239
+ .navigation-stack[data-chrome='false'] :global(.sidebar-toggle) {
240
+ background: transparent;
241
+ }
242
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type StyleProps } from '../../../style/surface';
3
+ interface Props {
4
+ leftHeader?: Snippet;
5
+ header?: Snippet;
6
+ rightHeader?: Snippet;
7
+ left?: Snippet;
8
+ right?: Snippet;
9
+ children?: Snippet;
10
+ chrome?: boolean;
11
+ }
12
+ type $$ComponentProps = Props & StyleProps & Record<string, unknown>;
13
+ declare const NavigationStack: import("svelte").Component<$$ComponentProps, {}, "">;
14
+ type NavigationStack = ReturnType<typeof NavigationStack>;
15
+ export default NavigationStack;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">
2
+ import { getContext } from 'svelte';
3
+ import type { Snippet } from 'svelte';
4
+ import { PanelLeft, PanelRight } from '@lucide/svelte';
5
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
6
+
7
+ interface Props {
8
+ side: 'left' | 'right';
9
+ children?: Snippet;
10
+ }
11
+
12
+ let { side, children, ...restProps }: Props & StyleProps & Record<string, unknown> = $props();
13
+
14
+ const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
15
+ const styleProps = $derived(extractedStyleProps.styleProps);
16
+ const props = $derived(extractedStyleProps.restProps);
17
+ const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'sidebar-toggle'));
18
+
19
+ const ctx = getContext<{
20
+ toggleLeft: () => void;
21
+ toggleRight: () => void;
22
+ }>('navigationStack');
23
+
24
+ function handleClick() {
25
+ if (side === 'left') {
26
+ ctx?.toggleLeft();
27
+ } else {
28
+ ctx?.toggleRight();
29
+ }
30
+ }
31
+ </script>
32
+
33
+ <button onclick={handleClick} class="sidebar-toggle" style={rootStyle} title="Toggle {side} sidebar" {...props}>
34
+ {#if children}
35
+ {@render children()}
36
+ {:else if side === 'left'}
37
+ <PanelLeft class="h-5 w-5" />
38
+ {:else}
39
+ <PanelRight class="h-5 w-5" />
40
+ {/if}
41
+ </button>
42
+
43
+ <style>
44
+ .sidebar-toggle {
45
+ border-radius: var(--sveltely-border-radius);
46
+ padding: calc(var(--sveltely-padding-y) * 0.5) calc(var(--sveltely-padding-x) * 0.5);
47
+ }
48
+
49
+ .sidebar-toggle:hover {
50
+ background: var(--sveltely-hover-color);
51
+ }
52
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type StyleProps } from '../../../style/surface';
3
+ interface Props {
4
+ side: 'left' | 'right';
5
+ children?: Snippet;
6
+ }
7
+ type $$ComponentProps = Props & StyleProps & Record<string, unknown>;
8
+ declare const SidebarToggle: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type SidebarToggle = ReturnType<typeof SidebarToggle>;
10
+ export default SidebarToggle;
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
4
+
5
+ interface Props {
6
+ header?: Snippet;
7
+ children?: Snippet;
8
+ chrome?: boolean;
9
+ }
10
+
11
+ let {
12
+ header,
13
+ children,
14
+ chrome = true,
15
+ ...restProps
16
+ }: Props & StyleProps & Record<string, unknown> = $props();
17
+
18
+ const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
19
+ const styleProps = $derived(extractedStyleProps.styleProps);
20
+ const props = $derived(extractedStyleProps.restProps);
21
+ const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'navigation-stack-toolbar'));
22
+ </script>
23
+
24
+ <div class="navigation-stack-toolbar-shell vstack h-full" style={rootStyle} data-chrome={chrome ? 'true' : 'false'} {...props}>
25
+ {#if header}
26
+ <div
27
+ class="navigation-stack-toolbar flex items-center gap-2"
28
+ style="padding: calc(var(--sveltely-padding-y) * 0.67) calc(var(--sveltely-padding-x) * 0.67);"
29
+ >
30
+ {@render header()}
31
+ </div>
32
+ {/if}
33
+
34
+ <div class="navigation-stack-toolbar-content vstack h-full">
35
+ {#if children}
36
+ {@render children()}
37
+ {/if}
38
+ </div>
39
+ </div>
40
+
41
+ <style>
42
+ .navigation-stack-toolbar {
43
+ border-bottom: 1px solid var(--sveltely-border-color);
44
+ background: white;
45
+ }
46
+
47
+ .navigation-stack-toolbar-shell[data-chrome='false'] .navigation-stack-toolbar {
48
+ border-color: transparent;
49
+ background: transparent;
50
+ }
51
+
52
+ .navigation-stack-toolbar-shell[data-chrome='false'] .navigation-stack-toolbar-content {
53
+ background: transparent;
54
+ }
55
+
56
+ .navigation-stack-toolbar-shell[data-chrome='false'] :global(.sidebar-toggle) {
57
+ background: transparent;
58
+ }
59
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type StyleProps } from '../../../style/surface';
3
+ interface Props {
4
+ header?: Snippet;
5
+ children?: Snippet;
6
+ chrome?: boolean;
7
+ }
8
+ type $$ComponentProps = Props & StyleProps & Record<string, unknown>;
9
+ declare const Toolbar: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type Toolbar = ReturnType<typeof Toolbar>;
11
+ export default Toolbar;
@@ -2,7 +2,6 @@
2
2
  export const demo = {
3
3
  name: 'Pagination',
4
4
  description: 'Pagination control with local demo state.',
5
- isProminent: false,
6
5
  columnSpan: 2
7
6
  };
8
7
  </script>
@@ -1,7 +1,6 @@
1
1
  export declare const demo: {
2
2
  name: string;
3
3
  description: string;
4
- isProminent: boolean;
5
4
  columnSpan: number;
6
5
  };
7
6
  import Pagination from './Pagination.svelte';
@@ -0,0 +1,227 @@
1
+ <script lang="ts">
2
+ import { goto } from '$app/navigation';
3
+ import {
4
+ ChevronLeftIcon,
5
+ ChevronRightIcon,
6
+ ChevronsLeftIcon,
7
+ ChevronsRightIcon
8
+ } from '@lucide/svelte';
9
+ import { extractStyleProps, surfaceStyle, type StyleProps } from '../../../style/surface';
10
+
11
+ type PaginationData = {
12
+ view: string;
13
+ page: number;
14
+ totalPages: number;
15
+ hasNext?: boolean;
16
+ };
17
+
18
+ let {
19
+ data,
20
+ onPageChange,
21
+ showFirstLast = false,
22
+ variant = 'label',
23
+ ...restProps
24
+ }: {
25
+ data: PaginationData;
26
+ onPageChange?: (page: number, href: string) => void | Promise<void>;
27
+ showFirstLast?: boolean;
28
+ variant?: 'icon' | 'label';
29
+ } & StyleProps & Record<string, unknown> = $props();
30
+
31
+ const extractedStyleProps = $derived.by(() => extractStyleProps(restProps));
32
+ const styleProps = $derived(extractedStyleProps.styleProps);
33
+ const props = $derived(extractedStyleProps.restProps);
34
+ const rootStyle = $derived.by(() => surfaceStyle(styleProps, 'pagination'));
35
+
36
+ const clampedPage = (targetPage: number) => Math.min(Math.max(targetPage, 1), maxPage());
37
+
38
+ const toQuery = (targetPage: number) => {
39
+ const params = new URLSearchParams({
40
+ view: data.view,
41
+ page: String(clampedPage(targetPage))
42
+ });
43
+ return `?${params.toString()}`;
44
+ };
45
+
46
+ const maxPage = () => Math.max(1, data.totalPages);
47
+ const safePage = () => Math.min(Math.max(data.page, 1), maxPage());
48
+ const hasNext = () => (typeof data.hasNext === 'boolean' ? data.hasNext : safePage() < maxPage());
49
+ const hasPrevious = () => safePage() > 1;
50
+ const buttonClass = () =>
51
+ `pagination-button action disabled:bg-zinc-200 disabled:text-zinc-500 inline-flex items-center justify-center leading-none ${
52
+ variant === 'icon' ? 'pagination-button-icon' : ''
53
+ }`;
54
+
55
+ const goToPage = (targetPage: number) => {
56
+ const clamped = clampedPage(targetPage);
57
+ const href = toQuery(clamped);
58
+ if (onPageChange) {
59
+ void onPageChange(clamped, href);
60
+ return;
61
+ }
62
+ void goto(href);
63
+ };
64
+
65
+ const handleSubmit = (event: SubmitEvent) => {
66
+ event.preventDefault();
67
+ const form = event.currentTarget as HTMLFormElement;
68
+ const input = form.elements.namedItem('page') as HTMLInputElement | null;
69
+ if (!input) return;
70
+
71
+ const parsed = Number.parseInt(input.value, 10);
72
+ const fallback = safePage();
73
+ const next = Number.isFinite(parsed) ? parsed : fallback;
74
+ const clamped = Math.min(Math.max(next, 1), maxPage());
75
+ input.value = String(clamped);
76
+ goToPage(clamped);
77
+ };
78
+ </script>
79
+
80
+ <div class="pagination hstack items-center" style={rootStyle} {...props}>
81
+ <div class="pagination-group pagination-group-backward">
82
+ {#if showFirstLast}
83
+ <button
84
+ type="button"
85
+ class={buttonClass()}
86
+ onclick={() => goToPage(1)}
87
+ aria-label="First page"
88
+ disabled={!hasPrevious()}
89
+ >
90
+ {#if variant === 'icon'}
91
+ <ChevronsLeftIcon class="pagination-icon pagination-icon-backward" />
92
+ {:else}
93
+ First
94
+ {/if}
95
+ </button>
96
+ {/if}
97
+
98
+ <button
99
+ type="button"
100
+ class={buttonClass()}
101
+ onclick={() => goToPage(safePage() - 1)}
102
+ aria-label="Previous page"
103
+ disabled={!hasPrevious()}
104
+ >
105
+ {#if variant === 'icon'}
106
+ <ChevronLeftIcon class="pagination-icon pagination-icon-backward" />
107
+ {:else}
108
+ Previous
109
+ {/if}
110
+ </button>
111
+ </div>
112
+
113
+ <span>Page</span>
114
+
115
+ <form method="GET" style="display: inline;" novalidate onsubmit={handleSubmit}>
116
+ <input type="hidden" name="view" value={data.view} />
117
+ <input
118
+ id="page"
119
+ name="page"
120
+ type="number"
121
+ class="pagination-input"
122
+ value={safePage()}
123
+ />
124
+ </form>
125
+
126
+ <span>of {maxPage()}</span>
127
+
128
+ <div class="pagination-group pagination-group-forward">
129
+ <button
130
+ type="button"
131
+ class={buttonClass()}
132
+ onclick={() => goToPage(safePage() + 1)}
133
+ aria-label="Next page"
134
+ disabled={!hasNext()}
135
+ >
136
+ {#if variant === 'icon'}
137
+ <ChevronRightIcon class="pagination-icon pagination-icon-forward" />
138
+ {:else}
139
+ Next
140
+ {/if}
141
+ </button>
142
+
143
+ {#if showFirstLast}
144
+ <button
145
+ type="button"
146
+ class={buttonClass()}
147
+ onclick={() => goToPage(maxPage())}
148
+ aria-label="Last page"
149
+ disabled={!hasNext()}
150
+ >
151
+ {#if variant === 'icon'}
152
+ <ChevronsRightIcon class="pagination-icon pagination-icon-forward" />
153
+ {:else}
154
+ Last
155
+ {/if}
156
+ </button>
157
+ {/if}
158
+ </div>
159
+ </div>
160
+
161
+ <style>
162
+ .pagination {
163
+ --pagination-font-size: calc(var(--sveltely-font-size) * 0.875);
164
+ --pagination-scale: calc(var(--pagination-font-size) / 0.875rem);
165
+ --pagination-icon-size: calc(var(--pagination-font-size) * 1.143);
166
+ --pagination-gap: calc(var(--sveltely-gap) * 2);
167
+ --pagination-icon-shift: calc(var(--sveltely-gap) / 2);
168
+ display: inline-flex;
169
+ width: fit-content;
170
+ gap: var(--pagination-gap);
171
+ font-size: var(--pagination-font-size);
172
+ }
173
+
174
+ .pagination-group {
175
+ display: inline-flex;
176
+ align-items: center;
177
+ gap: calc(var(--pagination-gap) * 0.33);
178
+ }
179
+
180
+ .pagination-icon {
181
+ width: var(--pagination-icon-size);
182
+ height: var(--pagination-icon-size);
183
+ }
184
+
185
+ .pagination-icon-backward {
186
+ transform: translateX(calc(var(--pagination-icon-shift) * -1));
187
+ }
188
+
189
+ .pagination-icon-forward {
190
+ transform: translateX(var(--pagination-icon-shift));
191
+ }
192
+
193
+ .pagination-button {
194
+ border-radius: var(--sveltely-border-radius);
195
+ background: var(--color-zinc-100);
196
+ padding:
197
+ calc(var(--sveltely-padding-y) * 0.67 * var(--pagination-scale))
198
+ calc(var(--sveltely-padding-x) * 0.67 * var(--pagination-scale));
199
+ }
200
+
201
+ .pagination-button-icon {
202
+ padding:
203
+ calc(var(--sveltely-padding-y) * 0.67 * var(--pagination-scale))
204
+ calc(var(--sveltely-padding-x) * 0.67 * var(--pagination-scale));
205
+ min-width: calc((var(--sveltely-padding-x) * 1.34 * var(--pagination-scale)) + var(--pagination-icon-size));
206
+ min-height: calc((var(--sveltely-padding-y) * 1.34 * var(--pagination-scale)) + var(--pagination-icon-size));
207
+ }
208
+
209
+ .pagination-button:disabled {
210
+ cursor: not-allowed;
211
+ opacity: 0.5;
212
+ }
213
+
214
+ .pagination-input {
215
+ width: 10ch;
216
+ border-radius: var(--sveltely-border-radius);
217
+ background: var(--color-zinc-100);
218
+ font-size: inherit;
219
+ line-height: 1.25;
220
+ outline: none;
221
+ padding:
222
+ calc(var(--sveltely-padding-y) * 0.33 * var(--pagination-scale))
223
+ calc(var(--sveltely-padding-y) * 0.33 * var(--pagination-scale))
224
+ calc(var(--sveltely-padding-y) * 0.33 * var(--pagination-scale))
225
+ calc(var(--sveltely-padding-x) * var(--pagination-scale));
226
+ }
227
+ </style>
@@ -1,3 +1,4 @@
1
+ import { type StyleProps } from '../../../style/surface';
1
2
  type PaginationData = {
2
3
  view: string;
3
4
  page: number;
@@ -8,9 +9,8 @@ type $$ComponentProps = {
8
9
  data: PaginationData;
9
10
  onPageChange?: (page: number, href: string) => void | Promise<void>;
10
11
  showFirstLast?: boolean;
11
- style?: 'icon' | 'label';
12
- class?: string;
13
- };
12
+ variant?: 'icon' | 'label';
13
+ } & StyleProps & Record<string, unknown>;
14
14
  declare const Pagination: import("svelte").Component<$$ComponentProps, {}, "">;
15
15
  type Pagination = ReturnType<typeof Pagination>;
16
16
  export default Pagination;
@@ -0,0 +1 @@
1
+ export { default } from './Pagination.svelte';
@@ -0,0 +1 @@
1
+ export { default } from './Pagination.svelte';
@@ -0,0 +1,21 @@
1
+ <script module lang="ts">
2
+ export const demo = {
3
+ name: 'Popover',
4
+ description: 'Composable popover with trigger and content snippets.'
5
+ };
6
+ </script>
7
+
8
+ <script lang="ts">
9
+ import Popover from './Popover.svelte';
10
+ import SearchInput from '../SearchInput/SearchInput.svelte';
11
+
12
+ let search = $state('');
13
+ </script>
14
+
15
+ <Popover>
16
+ {#snippet trigger()}
17
+ <span>Open popover</span>
18
+ {/snippet}
19
+
20
+ <SearchInput id="popover-demo-search" bind:value={search} placeholder="Type to search..." />
21
+ </Popover>