lutra 0.0.20 → 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 (223) hide show
  1. package/README.md +4 -24
  2. package/dist/components/AspectRatio.svelte +26 -0
  3. package/dist/components/AspectRatio.svelte.d.ts +8 -0
  4. package/dist/components/Dialog.svelte +78 -0
  5. package/dist/components/Dialog.svelte.d.ts +14 -0
  6. package/dist/components/Layout.svelte +32 -0
  7. package/dist/components/Layout.svelte.d.ts +11 -0
  8. package/dist/components/PageContent.svelte +108 -0
  9. package/dist/components/PageContent.svelte.d.ts +38 -0
  10. package/dist/components/Theme.svelte +87 -0
  11. package/dist/components/Theme.svelte.d.ts +17 -0
  12. package/dist/{display → components}/Tooltip.svelte +37 -11
  13. package/dist/components/Tooltip.svelte.d.ts +12 -0
  14. package/dist/config.d.ts +30 -0
  15. package/dist/config.js +18 -0
  16. package/dist/css/0-layers.css +1 -0
  17. package/dist/css/1-props.css +775 -0
  18. package/dist/css/2-base.css +209 -0
  19. package/dist/css/3-typo.css +65 -0
  20. package/dist/css/4-layout.css +5 -0
  21. package/dist/css/5-media.css +21 -0
  22. package/dist/css/lutra.css +6 -0
  23. package/dist/index.d.ts +5 -1
  24. package/dist/index.js +5 -2
  25. package/dist/types.d.ts +39 -0
  26. package/dist/types.js +25 -0
  27. package/package.json +29 -75
  28. package/dist/data/Stat.svelte +0 -89
  29. package/dist/data/Stat.svelte.d.ts +0 -39
  30. package/dist/data/index.d.ts +0 -1
  31. package/dist/data/index.js +0 -1
  32. package/dist/display/Avatar.svelte +0 -61
  33. package/dist/display/Avatar.svelte.d.ts +0 -23
  34. package/dist/display/Badge.svelte +0 -93
  35. package/dist/display/Badge.svelte.d.ts +0 -34
  36. package/dist/display/Callout.svelte +0 -109
  37. package/dist/display/Callout.svelte.d.ts +0 -36
  38. package/dist/display/Close.svelte +0 -58
  39. package/dist/display/Close.svelte.d.ts +0 -21
  40. package/dist/display/Code.svelte +0 -195
  41. package/dist/display/Code.svelte.d.ts +0 -31
  42. package/dist/display/ContextTip.svelte +0 -26
  43. package/dist/display/ContextTip.svelte.d.ts +0 -22
  44. package/dist/display/Details.svelte +0 -49
  45. package/dist/display/Details.svelte.d.ts +0 -32
  46. package/dist/display/Hero.svelte +0 -50
  47. package/dist/display/Hero.svelte.d.ts +0 -30
  48. package/dist/display/Icon.svelte +0 -40
  49. package/dist/display/Icon.svelte.d.ts +0 -24
  50. package/dist/display/IconButton.svelte +0 -84
  51. package/dist/display/IconButton.svelte.d.ts +0 -30
  52. package/dist/display/Image.svelte +0 -91
  53. package/dist/display/Image.svelte.d.ts +0 -37
  54. package/dist/display/Indicator.svelte +0 -352
  55. package/dist/display/Indicator.svelte.d.ts +0 -24
  56. package/dist/display/Inset.svelte +0 -18
  57. package/dist/display/Inset.svelte.d.ts +0 -22
  58. package/dist/display/Notification.svelte +0 -104
  59. package/dist/display/Notification.svelte.d.ts +0 -42
  60. package/dist/display/Popup.svelte +0 -111
  61. package/dist/display/Popup.svelte.d.ts +0 -30
  62. package/dist/display/Table.svelte +0 -24
  63. package/dist/display/Table.svelte.d.ts +0 -34
  64. package/dist/display/Tag.svelte +0 -90
  65. package/dist/display/Tag.svelte.d.ts +0 -35
  66. package/dist/display/Tooltip.svelte.d.ts +0 -28
  67. package/dist/display/index.d.ts +0 -14
  68. package/dist/display/index.js +0 -14
  69. package/dist/display/notifications.svelte.d.ts +0 -21
  70. package/dist/display/notifications.svelte.js +0 -31
  71. package/dist/form/Button.svelte +0 -34
  72. package/dist/form/Button.svelte.d.ts +0 -36
  73. package/dist/form/FieldActions.svelte +0 -46
  74. package/dist/form/FieldActions.svelte.d.ts +0 -24
  75. package/dist/form/FieldContainer.svelte +0 -37
  76. package/dist/form/FieldContainer.svelte.d.ts +0 -24
  77. package/dist/form/FieldContent.svelte +0 -134
  78. package/dist/form/FieldContent.svelte.d.ts +0 -59
  79. package/dist/form/FieldError.svelte +0 -14
  80. package/dist/form/FieldError.svelte.d.ts +0 -21
  81. package/dist/form/FieldSection.svelte +0 -86
  82. package/dist/form/FieldSection.svelte.d.ts +0 -34
  83. package/dist/form/Fieldset.svelte +0 -68
  84. package/dist/form/Fieldset.svelte.d.ts +0 -42
  85. package/dist/form/Form.svelte +0 -98
  86. package/dist/form/Form.svelte.d.ts +0 -33
  87. package/dist/form/Input.svelte +0 -287
  88. package/dist/form/Input.svelte.d.ts +0 -142
  89. package/dist/form/InputLength.svelte +0 -32
  90. package/dist/form/InputLength.svelte.d.ts +0 -21
  91. package/dist/form/Label.svelte +0 -27
  92. package/dist/form/Label.svelte.d.ts +0 -31
  93. package/dist/form/Select.svelte +0 -88
  94. package/dist/form/Select.svelte.d.ts +0 -97
  95. package/dist/form/client.svelte.d.ts +0 -45
  96. package/dist/form/client.svelte.js +0 -90
  97. package/dist/form/form.d.ts +0 -52
  98. package/dist/form/form.js +0 -326
  99. package/dist/form/index.d.ts +0 -15
  100. package/dist/form/index.js +0 -15
  101. package/dist/form/types.d.ts +0 -52
  102. package/dist/form/types.js +0 -1
  103. package/dist/grid/Column.svelte +0 -11
  104. package/dist/grid/Column.svelte.d.ts +0 -22
  105. package/dist/grid/Grid.svelte +0 -19
  106. package/dist/grid/Grid.svelte.d.ts +0 -24
  107. package/dist/grid/Row.svelte +0 -44
  108. package/dist/grid/Row.svelte.d.ts +0 -24
  109. package/dist/icons/Alert.svelte +0 -3
  110. package/dist/icons/Alert.svelte.d.ts +0 -23
  111. package/dist/icons/Copy.svelte +0 -3
  112. package/dist/icons/Copy.svelte.d.ts +0 -23
  113. package/dist/icons/Done.svelte +0 -3
  114. package/dist/icons/Done.svelte.d.ts +0 -23
  115. package/dist/icons/Error.svelte +0 -3
  116. package/dist/icons/Error.svelte.d.ts +0 -23
  117. package/dist/icons/Help.svelte +0 -3
  118. package/dist/icons/Help.svelte.d.ts +0 -23
  119. package/dist/icons/Hide.svelte +0 -3
  120. package/dist/icons/Hide.svelte.d.ts +0 -23
  121. package/dist/icons/Info.svelte +0 -3
  122. package/dist/icons/Info.svelte.d.ts +0 -23
  123. package/dist/icons/Link.svelte +0 -3
  124. package/dist/icons/Link.svelte.d.ts +0 -23
  125. package/dist/icons/MenuBurger.svelte +0 -3
  126. package/dist/icons/MenuBurger.svelte.d.ts +0 -23
  127. package/dist/icons/MenuDots.svelte +0 -3
  128. package/dist/icons/MenuDots.svelte.d.ts +0 -23
  129. package/dist/icons/Show.svelte +0 -3
  130. package/dist/icons/Show.svelte.d.ts +0 -23
  131. package/dist/icons/Success.svelte +0 -3
  132. package/dist/icons/Success.svelte.d.ts +0 -23
  133. package/dist/icons/Warning.svelte +0 -3
  134. package/dist/icons/Warning.svelte.d.ts +0 -23
  135. package/dist/icons/index.d.ts +0 -11
  136. package/dist/icons/index.js +0 -11
  137. package/dist/layout/Layout.svelte +0 -45
  138. package/dist/layout/Layout.svelte.d.ts +0 -25
  139. package/dist/layout/LayoutFooter.svelte +0 -21
  140. package/dist/layout/LayoutFooter.svelte.d.ts +0 -19
  141. package/dist/layout/LayoutGrid.svelte +0 -51
  142. package/dist/layout/LayoutGrid.svelte.d.ts +0 -38
  143. package/dist/layout/LayoutHeader.svelte +0 -94
  144. package/dist/layout/LayoutHeader.svelte.d.ts +0 -39
  145. package/dist/layout/LayoutSideMenu.svelte +0 -54
  146. package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -25
  147. package/dist/layout/LayoutTypes.d.ts +0 -15
  148. package/dist/layout/LayoutTypes.js +0 -9
  149. package/dist/layout/Overlay.svelte +0 -20
  150. package/dist/layout/Overlay.svelte.d.ts +0 -35
  151. package/dist/layout/OverlayContainer.svelte +0 -28
  152. package/dist/layout/OverlayContainer.svelte.d.ts +0 -16
  153. package/dist/layout/OverlayLayer.svelte +0 -145
  154. package/dist/layout/OverlayLayer.svelte.d.ts +0 -22
  155. package/dist/layout/PageContent.svelte +0 -97
  156. package/dist/layout/PageContent.svelte.d.ts +0 -28
  157. package/dist/layout/Theme.svelte +0 -228
  158. package/dist/layout/Theme.svelte.d.ts +0 -24
  159. package/dist/layout/UIContent.svelte +0 -15
  160. package/dist/layout/UIContent.svelte.d.ts +0 -22
  161. package/dist/layout/index.d.ts +0 -7
  162. package/dist/layout/index.js +0 -7
  163. package/dist/layout/overlays.svelte.d.ts +0 -34
  164. package/dist/layout/overlays.svelte.js +0 -44
  165. package/dist/nav/Breadcrumb.svelte +0 -82
  166. package/dist/nav/Breadcrumb.svelte.d.ts +0 -33
  167. package/dist/nav/Menu.svelte +0 -177
  168. package/dist/nav/Menu.svelte.d.ts +0 -33
  169. package/dist/nav/MenuItem.svelte +0 -140
  170. package/dist/nav/MenuItem.svelte.d.ts +0 -26
  171. package/dist/nav/MenuTypes.d.ts +0 -58
  172. package/dist/nav/MenuTypes.js +0 -1
  173. package/dist/nav/NavMenu.svelte +0 -183
  174. package/dist/nav/NavMenu.svelte.d.ts +0 -20
  175. package/dist/nav/TabbedContent.svelte +0 -43
  176. package/dist/nav/TabbedContent.svelte.d.ts +0 -24
  177. package/dist/nav/Tabs.svelte +0 -118
  178. package/dist/nav/Tabs.svelte.d.ts +0 -26
  179. package/dist/nav/index.d.ts +0 -6
  180. package/dist/nav/index.js +0 -5
  181. package/dist/style.css +0 -853
  182. package/dist/typo/Clamp.svelte +0 -25
  183. package/dist/typo/Clamp.svelte.d.ts +0 -28
  184. package/dist/typo/H.svelte +0 -52
  185. package/dist/typo/H.svelte.d.ts +0 -32
  186. package/dist/typo/H1.svelte +0 -14
  187. package/dist/typo/H1.svelte.d.ts +0 -30
  188. package/dist/typo/H2.svelte +0 -14
  189. package/dist/typo/H2.svelte.d.ts +0 -30
  190. package/dist/typo/H3.svelte +0 -14
  191. package/dist/typo/H3.svelte.d.ts +0 -30
  192. package/dist/typo/H4.svelte +0 -14
  193. package/dist/typo/H4.svelte.d.ts +0 -30
  194. package/dist/typo/H5.svelte +0 -14
  195. package/dist/typo/H5.svelte.d.ts +0 -30
  196. package/dist/typo/H6.svelte +0 -14
  197. package/dist/typo/H6.svelte.d.ts +0 -30
  198. package/dist/typo/P.svelte +0 -34
  199. package/dist/typo/P.svelte.d.ts +0 -30
  200. package/dist/typo/index.d.ts +0 -9
  201. package/dist/typo/index.js +0 -9
  202. package/dist/utils/StringOrComponentOrSnippet.svelte +0 -14
  203. package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +0 -24
  204. package/dist/utils/attr.d.ts +0 -5
  205. package/dist/utils/attr.js +0 -21
  206. package/dist/utils/color.d.ts +0 -51
  207. package/dist/utils/color.js +0 -97
  208. package/dist/utils/defaults.d.ts +0 -4
  209. package/dist/utils/defaults.js +0 -1
  210. package/dist/utils/dom.d.ts +0 -15
  211. package/dist/utils/dom.js +0 -74
  212. package/dist/utils/hooks.server.d.ts +0 -2
  213. package/dist/utils/hooks.server.js +0 -16
  214. package/dist/utils/id.d.ts +0 -1
  215. package/dist/utils/id.js +0 -3
  216. package/dist/utils/index.d.ts +0 -8
  217. package/dist/utils/index.js +0 -5
  218. package/dist/utils/isSnippet.d.ts +0 -5
  219. package/dist/utils/isSnippet.js +0 -6
  220. package/dist/utils/keyboard.svelte.d.ts +0 -22
  221. package/dist/utils/keyboard.svelte.js +0 -161
  222. /package/dist/{utils → util}/transitions.d.ts +0 -0
  223. /package/dist/{utils → util}/transitions.js +0 -0
@@ -1,352 +0,0 @@
1
- <script lang="ts">import { isStatusColor, StatusColors } from "../utils/color.js";
2
- let {
3
- color = "default",
4
- motion,
5
- label
6
- } = $props();
7
- let isSet = $derived(isStatusColor(color));
8
- let _label = $derived(isSet ? StatusColors[color] : label ? label : "status");
9
- </script>
10
-
11
- <span role="status" aria-label="{_label}" class="Indicator {color} {motion}" style="--bgColor: {isSet ? 'var(--status-'+color+')' : color};" />
12
-
13
- <style>
14
- .Indicator {
15
- --isize: var(--size, 0.75em);
16
- --icount: var(--animation-iteration-count, infinite);
17
- --bwidth: min(3px, calc(var(--isize) * 0.15));
18
- display: inline-block;
19
- position: relative;
20
- vertical-align: middle;
21
- margin-inline: var(--margin-inline, 0 calc(var(--isize) * 0.75));
22
- background: var(--bgColor);
23
- block-size: var(--isize);
24
- inline-size: var(--isize);
25
- border-radius: 50%;
26
- mask-size: 0% 0%;
27
- --dur: clamp(0.5s, var(--animation-duration, 1.2s), 3s);
28
- transition: all calc(var(--dur) / 2), width 0s, height 0s, margin 0s;
29
- margin-block-start: -2px;
30
- animation-name: none;
31
- animation-duration: var(--dur);
32
- animation-iteration-count: var(--icount);
33
- border-width: var(--bwidth);
34
- border-style: solid;
35
- border-color: transparent;
36
- box-sizing: border-box;
37
- }
38
- .Indicator::after,
39
- .Indicator::before {
40
- box-sizing: border-box;
41
- content: "";
42
- position: absolute;
43
- top: 0%;
44
- left: 0;
45
- width: 100%;
46
- height: 100%;
47
- border-radius: 50%;
48
- border-width: var(--bwidth);
49
- border-style: solid;
50
- border-color: transparent;
51
- animation-name: none;
52
- animation-duration: var(--dur);
53
- animation-iteration-count: var(--icount);
54
- }
55
-
56
- /**
57
- * Tunnel
58
- */
59
-
60
- .Indicator.tunnel {
61
- background: transparent;
62
- border-color: var(--bgColor);
63
- }
64
- .Indicator.tunnel::after,
65
- .Indicator.tunnel::before {
66
- animation-name: tunnel;
67
- animation-timing-function: ease-in;
68
- border-width: calc(var(--bwidth) * 2);
69
- animation-duration: calc(var(--dur) * 2);
70
- }
71
- .Indicator.tunnel::before {
72
- animation-delay: calc(-1 * var(--dur) * 0.95);
73
- }
74
- @keyframes tunnel {
75
- 0% {
76
- border-color: var(--bgColor);
77
- transform: scale(0.1);
78
- opacity: 0;
79
- }
80
- 10% {
81
- opacity: 1;
82
- }
83
- 75% {
84
- opacity: 1;
85
- }
86
- 100% {
87
- transform: scale(1.5);
88
- opacity: 0;
89
- }
90
- }
91
-
92
- /**
93
- * Blink
94
- */
95
-
96
- .Indicator.blink {
97
- animation-name: blink;
98
- animation-timing-function: ease-in-out;
99
- }
100
- @keyframes blink {
101
- 0% {
102
- opacity: 1;
103
- transform: scale(1);
104
- filter: drop-shadow(0 0 calc(var(--isize) * 0.15) var(--bgColor));
105
- }
106
- 25% {
107
- opacity: 0.5;
108
- transform: scale(0.95);
109
- filter: drop-shadow(0 0 calc(var(--isize) * 0.1) transparent);
110
- }
111
- 50% {
112
- opacity: 0.5;
113
- transform: scale(0.95);
114
- filter: drop-shadow(0 0 calc(var(--isize) * 0.1) transparent);
115
- }
116
- 75% {
117
- opacity: 1;
118
- transform: scale(1);
119
- filter: drop-shadow(0 0 calc(var(--isize) * 0.15) var(--bgColor));
120
- }
121
- 100% {
122
- opacity: 1;
123
- transform: scale(1);
124
- filter: drop-shadow(0 0 calc(var(--isize) * 0.15) var(--bgColor));
125
- }
126
- }
127
-
128
- /**
129
- * Bulge
130
- */
131
-
132
- .Indicator.bulge {
133
- animation-name: bulge;
134
- animation-timing-function: ease-in-out;
135
- }
136
- @keyframes bulge {
137
- 0% {
138
- transform: scale(0.85);
139
- filter: drop-shadow(0 0 calc(var(--isize) * 0.05) var(--bgColor)) brightness(1) saturate(1);
140
- }
141
- 50% {
142
- transform: scale(1);
143
- filter: drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor)) brightness(1.15) saturate(1.15);
144
- }
145
- 100% {
146
- transform: scale(0.85);
147
- filter: drop-shadow(0 0 calc(var(--isize) * 0.05) var(--bgColor)) brightness(1) saturate(1);
148
- }
149
- }
150
-
151
- /**
152
- * Highlight
153
- */
154
-
155
- .Indicator.highlight {
156
- animation-name: hilite2;
157
- animation-timing-function:cubic-bezier(0.445, 0.05, 0.55, 0.95);
158
- border-width: 0;
159
- }
160
-
161
- @keyframes hilite2 {
162
- 0% {
163
- filter: brightness(1) saturate(1) drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor));
164
- }
165
- 35% {
166
- filter: brightness(1) saturate(1) drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor));
167
- }
168
- 50% {
169
- filter: brightness(1.05) saturate(1.05) drop-shadow(0 0 calc(var(--isize) * 0.05) var(--bgColor));
170
- }
171
- 65% {
172
- filter: brightness(1) saturate(1) drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor));
173
- }
174
- 100% {
175
- filter: brightness(1) saturate(1) drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor));
176
- }
177
- }
178
-
179
- .Indicator.highlight::before {
180
- border-width: 0;
181
- }
182
-
183
- .Indicator.highlight::after {
184
- background: linear-gradient(45deg, transparent, transparent, rgba(255,255,255,0.75), transparent, transparent);
185
- animation-name: hilite;
186
- animation-timing-function: linear;
187
- mix-blend-mode: luminosity;
188
- border-width: 0;
189
- filter: blur(calc(var(--isize) * 0.12));
190
- background-size: 500% 120%;
191
- }
192
- @keyframes hilite {
193
- 0% {
194
- background-position: 100% center;
195
- }
196
- 100% {
197
- background-position: 0 center;
198
- }
199
- }
200
-
201
- /**
202
- * Spin
203
- */
204
-
205
- .Indicator.spin {
206
- background: transparent;
207
- --mask: radial-gradient(circle, rgba(0, 0, 0, 0) 20%, rgba(0, 0, 0, 0) 45%, black 50%, black 100%);
208
- -webkit-mask-image: var(--mask);
209
- mask-image: var(--mask);
210
- filter: drop-shadow(0 0 calc(var(--isize) * 0.05) var(--bgColor));
211
- }
212
- .Indicator.spin::after,
213
- .Indicator.spin::before {
214
- animation-name: spin;
215
- background: none;
216
- animation-timing-function: linear;
217
- mask-mode: luminance;
218
- background-origin: border-box;
219
- background-clip: border-box;
220
- }
221
- .Indicator.spin::before {
222
- animation-timing-function:cubic-bezier(0.445, 0.05, 0.55, 0.95);
223
- animation-delay: calc(-1 * var(--dur) * 0.85);
224
- animation-name: spin2;
225
- }
226
- @keyframes spin {
227
- 0% {
228
- background-image: conic-gradient(from 0deg, transparent, transparent 73%, var(--bgColor) 73%, var(--bgColor) 100%);
229
- transform: rotate(0deg) scale(1.2);
230
- }
231
- 100% {
232
- background-image: conic-gradient(from 0deg, transparent, transparent 73%, var(--bgColor) 73%, var(--bgColor) 100%);
233
- transform: rotate(360deg) scale(1.2);
234
- }
235
- }
236
- @keyframes spin2 {
237
- 0% {
238
- background-image: conic-gradient(from 0deg, transparent, transparent 50%, var(--bgColor) 75%, var(--bgColor) 100%);
239
- transform: rotate(0deg) scale(1.2);
240
- }
241
- 100% {
242
- background-image: conic-gradient(from 0deg, transparent, transparent 50%, var(--bgColor) 75%, var(--bgColor) 100%);
243
- transform: rotate(360deg) scale(1.2);
244
- }
245
- }
246
-
247
- /**
248
- * Pulse
249
- */
250
-
251
- .Indicator.pulse {
252
- animation-name: pulse;
253
- animation-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95);
254
- }
255
- @keyframes pulse {
256
- 0% {
257
- filter: drop-shadow(0 0 calc(var(--isize) * 0.03) var(--bgColor));
258
- transform: scale(0.85);
259
- }
260
- 25% {
261
- filter: drop-shadow(0 0 calc(var(--isize) * 0.01) var(--bgColor)) brightness(1) saturate(1);
262
- transform: scale(1);
263
- }
264
- 50% {
265
- filter: drop-shadow(0 0 calc(var(--isize) * 0.03) var(--bgColor)) brightness(1.25) saturate(1.25);
266
- transform: scale(1);
267
- }
268
- 75% {
269
- filter: drop-shadow(0 0 calc(var(--isize) * 0.1) var(--bgColor)) brightness(1.25) saturate(1.25);
270
- }
271
- 100% {
272
- filter: drop-shadow(0 0 calc(var(--isize) * 0.03) var(--bgColor)) brightness(1) saturate(1);
273
- transform: scale(0.85);
274
- }
275
- }
276
- .Indicator.pulse::after {
277
- border-color: var(--bgColor);
278
- border-width: calc(var(--bwidth) * 0.75);
279
- animation-name: task;
280
- animation-timing-function: ease-out;
281
- filter: drop-shadow(0 0 calc(var(--isize) * 0.025) var(--bgColor));
282
- }
283
- @keyframes task {
284
- 0% {
285
- transform: scale(.5);
286
- opacity: 1;
287
- filter: blur(calc(var(--isize) * 0.05)) saturate(1);
288
- }
289
- 75% {
290
- opacity: 0.25;
291
- filter: blur(calc(var(--isize) * 0.01)) saturate(1);
292
- }
293
- 100% {
294
- transform: scale(2.75);
295
- opacity: 0;
296
- filter: blur(0) saturate(0.5);
297
- }
298
- }
299
-
300
- /**
301
- * Typing
302
- */
303
-
304
- .Indicator.typing {
305
- --mask-image: radial-gradient(ellipse, black, black 65%, transparent 70%, transparent 100%);
306
- mask-image: var(--mask-image);
307
- -webkit-mask-image: var(--mask-image);
308
- mask-size: 100% 100%;
309
- width: calc(var(--isize) * 1.5);
310
- background: transparent;
311
- border-radius: 0;
312
- position: relative;
313
- }
314
- .Indicator.typing::before,
315
- .Indicator.typing::after {
316
- animation-name: typing;
317
- background: var(--bgColor);
318
- width: calc(var(--isize) * 0.5);
319
- height: calc(var(--isize) * 0.5);
320
- top: 50%;
321
- left: calc(50% - var(--isize) * 0.25);
322
- animation-timing-function: ease-in;
323
- animation-direction: reverse;
324
- }
325
- .Indicator.typing::before,
326
- .Indicator.recording::before {
327
- animation-delay: calc(-1 * var(--dur) * 0.5);
328
- }
329
- @keyframes typing {
330
- 0% {
331
- transform: translateX(-100%) translateY(-50%) scale(0.25);
332
- opacity: 0;
333
- }
334
- 25% {
335
- transform: translateX(-50%) translateY(-50%) scale(1);
336
- opacity: 1;
337
- }
338
- 50% {
339
- transform: translateX(0) translateY(-50%) scale(1);
340
- filter: drop-shadow(0 0 calc(var(--isize) * 0.01) var(--bgColor));
341
- }
342
- 75% {
343
- transform: translateX(50%) translateY(-50%) scale(1);
344
- opacity: 1;
345
- }
346
- 100% {
347
- transform: translateX(100%) translateY(-50%) scale(0.25);
348
- opacity: 0;
349
- }
350
- }
351
-
352
- </style>
@@ -1,24 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import { type StatusColorOrString } from "../utils/color.js";
3
- declare const __propDef: {
4
- props: {
5
- color?: StatusColorOrString | undefined;
6
- motion?: "highlight" | "pulse" | "spin" | "blink" | "bulge" | "tunnel" | "typing" | undefined;
7
- label?: string | undefined;
8
- };
9
- events: {
10
- [evt: string]: CustomEvent<any>;
11
- };
12
- slots: {};
13
- };
14
- export type IndicatorProps = typeof __propDef.props;
15
- export type IndicatorEvents = typeof __propDef.events;
16
- export type IndicatorSlots = typeof __propDef.slots;
17
- export default class Indicator extends SvelteComponent<IndicatorProps, IndicatorEvents, IndicatorSlots> {
18
- constructor(options?: import("svelte").ComponentConstructorOptions<{
19
- color?: StatusColorOrString | undefined;
20
- motion?: "highlight" | "pulse" | "spin" | "blink" | "bulge" | "tunnel" | "typing" | undefined;
21
- label?: string | undefined;
22
- }>);
23
- }
24
- export {};
@@ -1,18 +0,0 @@
1
- <script lang="ts">let {
2
- children
3
- } = $props();
4
- </script>
5
-
6
- <div class="Inset">
7
- {@render children()}
8
- </div>
9
-
10
- <style>
11
- .Inset {
12
- margin-block: calc(var(--inset-block, 0) * -1);
13
- margin-inline: calc(var(--inset-inline, 0) * -1);
14
- }
15
- .Inset > * {
16
- display: block;
17
- }
18
- </style>
@@ -1,22 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { Snippet } from "svelte";
3
- declare const __propDef: {
4
- props: {
5
- children: Snippet;
6
- };
7
- events: {
8
- [evt: string]: CustomEvent<any>;
9
- };
10
- slots: {};
11
- };
12
- export type InsetProps = typeof __propDef.props;
13
- export type InsetEvents = typeof __propDef.events;
14
- export type InsetSlots = typeof __propDef.slots;
15
- export default class Inset extends SvelteComponent<InsetProps, InsetEvents, InsetSlots> {
16
- constructor(options?: import("svelte").ComponentConstructorOptions<{
17
- children: (this: void) => typeof import("svelte").SnippetReturn & {
18
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
19
- };
20
- }>);
21
- }
22
- export {};
@@ -1,104 +0,0 @@
1
- <script lang="ts">import Overlay from "../layout/Overlay.svelte";
2
- import PageContent from "../layout/PageContent.svelte";
3
- import { removeOverlay } from "../layout/overlays.svelte.js";
4
- import Close from "./Close.svelte";
5
- import { createId } from "../utils/id.js";
6
- import Icon from "./Icon.svelte";
7
- let {
8
- id = createId(),
9
- children,
10
- title,
11
- content,
12
- icon,
13
- actions
14
- } = $props();
15
- function onclick(e) {
16
- e.preventDefault();
17
- removeOverlay(id);
18
- }
19
- </script>
20
-
21
- {#snippet notification()}
22
- <div class="Notification">
23
- {#if !actions}
24
- <Close position="top right" {onclick} />
25
- {/if}
26
- {#if icon}
27
- <div class="Icon">
28
- <Icon {icon} --vertical-align="text-top" --icon-width="2rem" --icon-height="2rem" />
29
- </div>
30
- {/if}
31
- <div class="Content">
32
- <PageContent --margin-scale="0.35">
33
- {#if children}
34
- {@render children()}
35
- {:else}
36
- {#if title}
37
- <h5>{title}</h5>
38
- {/if}
39
- <p>{content}</p>
40
- {/if}
41
- </PageContent>
42
- </div>
43
- {#if actions}
44
- <div class="Actions">
45
- {@render actions()}
46
- </div>
47
- {/if}
48
- </div>
49
- {/snippet}
50
-
51
- {#if children}
52
- <Overlay z={100} layer="notifications" position="bottom right" {id}>
53
- {@render notification()}
54
- </Overlay>
55
- {:else}
56
- {@render notification()}
57
- {/if}
58
-
59
- <style>
60
- .Notification {
61
- display: block;
62
- pointer-events: none;
63
- background: var(--bg-app);
64
- border-radius: var(--border-radius);
65
- border: var(--border);
66
- padding: 0.75rem 1rem;
67
- width: 30rem;
68
- font-size: 0.85em;
69
- display: grid;
70
- grid-template-areas: "content";
71
- grid-template-columns: 1fr;
72
- gap: 1rem;
73
- box-shadow: 0 0.5rem 1rem var(--shadow);
74
- }
75
- .Notification:has(.Icon):has(.Actions) {
76
- grid-template-areas: "icon content actions";
77
- grid-template-columns: auto 1fr auto;
78
- }
79
- .Notification:not(:has(.Icon)):has(.Actions) {
80
- grid-template-areas: "content actions";
81
- grid-template-columns: 1fr auto;
82
- }
83
- .Notification:has(.Icon):not(:has(.Actions)) {
84
- grid-template-areas: "icon content";
85
- grid-template-columns: auto 1fr;
86
- }
87
- .Icon {
88
- grid-area: icon;
89
- display: flex;
90
- gap: 0.5rem;
91
- align-items: center;
92
- pointer-events: auto;
93
- }
94
- .Content {
95
- grid-area: content;
96
- }
97
- .Actions {
98
- grid-area: actions;
99
- display: flex;
100
- gap: 0.5rem;
101
- align-items: center;
102
- pointer-events: auto;
103
- }
104
- </style>
@@ -1,42 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { ComponentType } from "svelte";
3
- declare const __propDef: {
4
- props: {
5
- id?: string | undefined;
6
- children?: ((this: void) => typeof import("svelte").SnippetReturn & {
7
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
8
- }) | undefined;
9
- title?: string | undefined;
10
- content?: string | undefined;
11
- icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
12
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
13
- }) | ComponentType | undefined;
14
- actions?: ((this: void) => typeof import("svelte").SnippetReturn & {
15
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
16
- }) | undefined;
17
- };
18
- events: {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- };
23
- export type NotificationProps = typeof __propDef.props;
24
- export type NotificationEvents = typeof __propDef.events;
25
- export type NotificationSlots = typeof __propDef.slots;
26
- export default class Notification extends SvelteComponent<NotificationProps, NotificationEvents, NotificationSlots> {
27
- constructor(options?: import("svelte").ComponentConstructorOptions<{
28
- id?: string | undefined;
29
- children?: ((this: void) => typeof import("svelte").SnippetReturn & {
30
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
31
- }) | undefined;
32
- title?: string | undefined;
33
- content?: string | undefined;
34
- icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
35
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
36
- }) | ComponentType | undefined;
37
- actions?: ((this: void) => typeof import("svelte").SnippetReturn & {
38
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
39
- }) | undefined;
40
- }>);
41
- }
42
- export {};
@@ -1,111 +0,0 @@
1
- <script lang="ts">import UiContent from "../layout/UIContent.svelte";
2
- import { slidefade } from "../utils/transitions.js";
3
- import { attr } from "../utils/attr.js";
4
- let {
5
- content,
6
- trigger,
7
- hover = false,
8
- shape = "rounded"
9
- } = $props();
10
- const id = `po-${Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)}`;
11
- let isOpen = $state(false);
12
- function closePopup() {
13
- isOpen = false;
14
- }
15
- function togglePopup() {
16
- isOpen = !isOpen;
17
- }
18
- function clickElsewhere(e) {
19
- if (isOpen && e.target instanceof HTMLElement && !e.target.closest(".Popup")) {
20
- closePopup();
21
- }
22
- }
23
- let timeoutAmount = 250;
24
- let timeout;
25
- function mouseenterTrigger() {
26
- if (timeout) {
27
- clearTimeout(timeout);
28
- }
29
- if (!isOpen) {
30
- isOpen = true;
31
- }
32
- }
33
- function mouseleave(e) {
34
- timeout = setTimeout(closePopup, timeoutAmount);
35
- }
36
- function mouseoverContent() {
37
- if (timeout) {
38
- clearTimeout(timeout);
39
- }
40
- }
41
- let attrs = $derived.by(() => {
42
- return attr({
43
- "aria-haspopup": "dialog",
44
- "aria-expanded": isOpen,
45
- "aria-controls": id,
46
- onclick: !hover ? togglePopup : void 0,
47
- onmouseenter: hover ? mouseenterTrigger : void 0,
48
- onmouseleave: hover ? mouseleave : void 0,
49
- onfocusin: hover ? mouseenterTrigger : void 0,
50
- onblur: hover ? mouseleave : void 0
51
- });
52
- });
53
- </script>
54
-
55
- <svelte:window on:click={clickElsewhere} />
56
-
57
- <div class="Popup" class:hover>
58
- <div class="Trigger">
59
- {@render trigger(attrs)}
60
- </div>
61
- {#if isOpen}
62
- <UiContent>
63
- <div
64
- {id}
65
- class="PopupContainer"
66
- transition:slidefade={{duration: 100}}
67
- role="dialog"
68
- onmouseover={hover ? mouseoverContent : undefined}
69
- onfocus={hover ? mouseoverContent : undefined}
70
- onfocusin={hover ? mouseoverContent : undefined}
71
- onmouseout={hover ? mouseleave : undefined}
72
- onblur={hover ? mouseleave : undefined}
73
- onfocusout={hover ? mouseleave : undefined}
74
- >
75
- <div class="PopupContent {shape}">
76
- {@render content(closePopup)}
77
- </div>
78
- </div>
79
- </UiContent>
80
- {/if}
81
- </div>
82
-
83
- <style>
84
- .Popup, .Trigger {
85
- position: relative;
86
- display: inline-block;
87
- }
88
- .PopupContainer {
89
- position: absolute;
90
- padding-top: 0.5rem;
91
- }
92
- .Popup.hover .PopupContainer {
93
- padding: var(--safe-zone, 1rem);
94
- left: calc(-1 * var(--safe-zone, 1rem));
95
- top: calc(100% + -0.5 * var(--safe-zone, 1rem));
96
- }
97
- .PopupContent {
98
- background: var(--bg, var(--bg-app));
99
- border: var(--border);
100
- box-shadow: var(--shadow);
101
- z-index: 10000;
102
- padding: var(--content-padding, 1rem);
103
- opacity: 1;
104
- border-radius: var(--border-radius);
105
- box-shadow: 0 0.25rem 2rem 0 var(--shadow);
106
- left: 0;
107
- }
108
- .PopupContent.rounded {
109
- border-radius: var(--border-radius);
110
- }
111
- </style>