@functionalcms/svelte-components 4.36.10 → 5.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/functional.css +48 -1
- package/dist/auth/getMachineAccessToken.d.ts +1 -1
- package/dist/auth/getMachineAccessToken.js +1 -2
- package/dist/auth/machineAuthenticationProvider.d.ts +1 -1
- package/dist/auth/machineAuthenticationProvider.js +1 -2
- package/dist/auth/tokenRefresh.d.ts +1 -1
- package/dist/auth/tokenRefresh.js +4 -5
- package/dist/auth/types.js +4 -8
- package/dist/auth/userAuthenticationProvider.d.ts +1 -1
- package/dist/auth/userAuthenticationProvider.js +1 -2
- package/dist/components/Icon.svelte +16 -0
- package/dist/components/Icon.svelte.d.ts +9 -0
- package/dist/components/content/Markdown.svelte +2 -2
- package/dist/components/content/Markdown.svelte.d.ts +17 -4
- package/dist/components/form/Dropzone.svelte +2 -5
- package/dist/components/form/SmartForm.svelte +206 -60
- package/dist/components/form/SmartForm.svelte.d.ts +2 -2
- package/dist/components/form/form.d.ts +87 -17
- package/dist/components/form/form.js +86 -6
- package/dist/components/icons.d.ts +763 -0
- package/dist/components/icons.js +765 -0
- package/dist/components/integrations/EasyTools.svelte +1 -1
- package/dist/components/layouts/DefaultLayout.svelte +92 -41
- package/dist/components/layouts/DefaultLayout.svelte.d.ts +17 -8
- package/dist/components/layouts/FlexBox.svelte +73 -0
- package/dist/components/layouts/FlexBox.svelte.d.ts +17 -0
- package/dist/components/layouts/MenuLayout.svelte +39 -201
- package/dist/components/layouts/MenuLayout.svelte.d.ts +2 -10
- package/dist/components/layouts/StyleBox.svelte +17 -0
- package/dist/components/layouts/StyleBox.svelte.d.ts +7 -0
- package/dist/components/layouts/Well.svelte +8 -34
- package/dist/components/layouts/Well.svelte.d.ts +4 -8
- package/dist/components/layouts/menuItems.d.ts +29 -0
- package/dist/components/layouts/menuItems.js +28 -0
- package/dist/index-server.d.ts +2 -1
- package/dist/index-server.js +2 -1
- package/dist/index.d.ts +9 -47
- package/dist/index.js +8 -59
- package/dist/server-side/getServices.d.ts +8 -8
- package/dist/server-side/getServices.js +16 -27
- package/dist/server-side/handlers/paraglideHandler.d.ts +2 -0
- package/dist/server-side/handlers/paraglideHandler.js +13 -0
- package/dist/server-side/handlers/redirectPipelineHandler.d.ts +5 -0
- package/dist/server-side/{getRedirectPipeline.js → handlers/redirectPipelineHandler.js} +1 -2
- package/dist/utils/stringHash.d.ts +1 -0
- package/dist/utils/stringHash.js +7 -0
- package/package.json +28 -39
- package/css/functional.css.map +0 -1
- package/dist/components/MaterialIconSet.d.ts +0 -3819
- package/dist/components/MaterialIconSet.js +0 -3823
- package/dist/components/Styling.d.ts +0 -59
- package/dist/components/Styling.js +0 -66
- package/dist/components/blog/blog.d.ts +0 -20
- package/dist/components/blog/blog.js +0 -29
- package/dist/components/dynamic/CopyToClipboard.svelte +0 -16
- package/dist/components/dynamic/CopyToClipboard.svelte.d.ts +0 -36
- package/dist/components/dynamic/DynamicButton.d.ts +0 -1
- package/dist/components/dynamic/DynamicButton.js +0 -10
- package/dist/components/dynamic/DynamicButton.svelte +0 -33
- package/dist/components/dynamic/DynamicButton.svelte.d.ts +0 -9
- package/dist/components/form/Button.svelte +0 -389
- package/dist/components/form/Button.svelte.d.ts +0 -30
- package/dist/components/form/ChoiceInput.svelte +0 -375
- package/dist/components/form/ChoiceInput.svelte.d.ts +0 -3
- package/dist/components/form/Input.svelte +0 -461
- package/dist/components/form/Input.svelte.d.ts +0 -30
- package/dist/components/form/Select.svelte +0 -163
- package/dist/components/form/Select.svelte.d.ts +0 -21
- package/dist/components/form/Switch.svelte +0 -293
- package/dist/components/form/Switch.svelte.d.ts +0 -14
- package/dist/components/indicators/Loader.svelte +0 -114
- package/dist/components/indicators/Loader.svelte.d.ts +0 -30
- package/dist/components/indicators/Spinner.svelte +0 -109
- package/dist/components/indicators/Spinner.svelte.d.ts +0 -28
- package/dist/components/layouts/Banner.svelte +0 -26
- package/dist/components/layouts/Banner.svelte.d.ts +0 -8
- package/dist/components/layouts/FoldablePanel.svelte +0 -16
- package/dist/components/layouts/FoldablePanel.svelte.d.ts +0 -7
- package/dist/components/layouts/SimpleFooter.svelte +0 -23
- package/dist/components/layouts/SimpleFooter.svelte.d.ts +0 -8
- package/dist/components/layouts/Tabs.svelte +0 -362
- package/dist/components/layouts/Tabs.svelte.d.ts +0 -11
- package/dist/components/layouts/TwoColumnsLayout.svelte +0 -44
- package/dist/components/layouts/TwoColumnsLayout.svelte.d.ts +0 -13
- package/dist/components/layouts/menuLayout.d.ts +0 -12
- package/dist/components/layouts/menuLayout.js +0 -1
- package/dist/components/layouts/tabs.d.ts +0 -21
- package/dist/components/layouts/tabs.js +0 -13
- package/dist/components/menu/CollapsibleMenu.svelte +0 -66
- package/dist/components/menu/CollapsibleMenu.svelte.d.ts +0 -18
- package/dist/components/menu/DynamicMenu.svelte +0 -55
- package/dist/components/menu/DynamicMenu.svelte.d.ts +0 -13
- package/dist/components/menu/HamburgerMenu.svelte +0 -62
- package/dist/components/menu/HamburgerMenu.svelte.d.ts +0 -14
- package/dist/components/menu/ListMenu.svelte +0 -61
- package/dist/components/menu/ListMenu.svelte.d.ts +0 -17
- package/dist/components/menu/NavigationDrawer.svelte +0 -53
- package/dist/components/menu/NavigationDrawer.svelte.d.ts +0 -18
- package/dist/components/menu/types.d.ts +0 -23
- package/dist/components/menu/types.js +0 -35
- package/dist/components/presentation/Accordion.svelte +0 -82
- package/dist/components/presentation/Accordion.svelte.d.ts +0 -11
- package/dist/components/presentation/Card.svelte +0 -147
- package/dist/components/presentation/Card.svelte.d.ts +0 -15
- package/dist/components/presentation/Carousel.d.ts +0 -5
- package/dist/components/presentation/Carousel.js +0 -1
- package/dist/components/presentation/Carousel.svelte +0 -119
- package/dist/components/presentation/Carousel.svelte.d.ts +0 -17
- package/dist/components/presentation/Dialog.svelte +0 -75
- package/dist/components/presentation/Dialog.svelte.d.ts +0 -22
- package/dist/components/presentation/Disclose.svelte +0 -116
- package/dist/components/presentation/Disclose.svelte.d.ts +0 -11
- package/dist/components/presentation/Drawer.svelte +0 -118
- package/dist/components/presentation/Drawer.svelte.d.ts +0 -13
- package/dist/components/presentation/EmptyState.svelte +0 -67
- package/dist/components/presentation/EmptyState.svelte.d.ts +0 -10
- package/dist/components/presentation/Gallery.svelte +0 -35
- package/dist/components/presentation/Gallery.svelte.d.ts +0 -14
- package/dist/components/presentation/Link.svelte +0 -362
- package/dist/components/presentation/Link.svelte.d.ts +0 -27
- package/dist/components/utils.d.ts +0 -3
- package/dist/components/utils.js +0 -1
- package/dist/index.server.d.ts +0 -11
- package/dist/index.server.js +0 -10
- package/dist/server-side/getRedirectPipeline.d.ts +0 -6
- package/dist/utils.d.ts +0 -1
- package/dist/utils.js +0 -3
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { cn } from '../../utils.js';
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
id: string;
|
|
6
|
-
name: string;
|
|
7
|
-
label: string;
|
|
8
|
-
css: string;
|
|
9
|
-
labelPosition: string;
|
|
10
|
-
size: string;
|
|
11
|
-
isChecked: boolean;
|
|
12
|
-
isBordered: boolean;
|
|
13
|
-
isAction: boolean;
|
|
14
|
-
isDisabled: boolean;
|
|
15
|
-
}
|
|
16
|
-
let {
|
|
17
|
-
id = '',
|
|
18
|
-
name= '',
|
|
19
|
-
label = '',
|
|
20
|
-
css = '',
|
|
21
|
-
labelPosition = 'left',
|
|
22
|
-
size = '',
|
|
23
|
-
isChecked = false,
|
|
24
|
-
isBordered = false,
|
|
25
|
-
isAction = false,
|
|
26
|
-
isDisabled = false
|
|
27
|
-
}: Partial<Props> = $props();
|
|
28
|
-
|
|
29
|
-
let switchContainer = $derived(
|
|
30
|
-
cn(
|
|
31
|
-
'switch-container',
|
|
32
|
-
labelPosition === 'right' ? 'switch-right' : '',
|
|
33
|
-
css ? css : '',
|
|
34
|
-
isDisabled ? 'disabled' : ''
|
|
35
|
-
)
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
const switchSpan = () => {
|
|
39
|
-
let klasses = [
|
|
40
|
-
'switch',
|
|
41
|
-
isBordered ? 'switch-border' : '',
|
|
42
|
-
isAction ? 'switch-action' : '',
|
|
43
|
-
size ? `switch-${size}` : ''
|
|
44
|
-
];
|
|
45
|
-
klasses = klasses.filter((klass) => klass.length);
|
|
46
|
-
return klasses.join(' ');
|
|
47
|
-
};
|
|
48
|
-
const handleClick = (evt: any) => {
|
|
49
|
-
const el = evt.target;
|
|
50
|
-
if (el.getAttribute('aria-checked') == 'true') {
|
|
51
|
-
el.setAttribute('aria-checked', 'false');
|
|
52
|
-
} else {
|
|
53
|
-
el.setAttribute('aria-checked', 'true');
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const handleKeypress = (evt: any) => {
|
|
57
|
-
const keyCode = evt.keyCode || evt.which;
|
|
58
|
-
switch (keyCode) {
|
|
59
|
-
case 13:
|
|
60
|
-
evt.preventDefault();
|
|
61
|
-
evt.target.click();
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<label class={switchContainer} for={id}>
|
|
68
|
-
{#if labelPosition === 'left'}<span class="switch-label">{label}</span>{/if}
|
|
69
|
-
<input
|
|
70
|
-
type="checkbox"
|
|
71
|
-
class="switch-input"
|
|
72
|
-
{id}
|
|
73
|
-
{name}
|
|
74
|
-
bind:checked={isChecked}
|
|
75
|
-
disabled={isDisabled}
|
|
76
|
-
onclick={handleClick}
|
|
77
|
-
onkeypress={handleKeypress}
|
|
78
|
-
role="switch"
|
|
79
|
-
/>
|
|
80
|
-
<span class={switchSpan()} aria-hidden="true"></span>
|
|
81
|
-
{#if labelPosition === 'right'}<span class="switch-label">{label}</span>{/if}
|
|
82
|
-
</label>
|
|
83
|
-
|
|
84
|
-
<style>
|
|
85
|
-
/**
|
|
86
|
-
* Switch
|
|
87
|
-
*
|
|
88
|
-
* This switch is inspired by Scott Ohara's checkbox switch:
|
|
89
|
-
* https://scottaohara.github.io/a11y_styled_form_controls/src/checkbox--switch/
|
|
90
|
-
*/
|
|
91
|
-
.switch-container {
|
|
92
|
-
display: block;
|
|
93
|
-
|
|
94
|
-
/* TODO: Hopefully this doesn't become a problem but since we use absolute
|
|
95
|
-
positioning extensively, we need some way to have adjacent spaced lines */
|
|
96
|
-
min-height: 2.25rem;
|
|
97
|
-
width: 100%;
|
|
98
|
-
padding: 0.5rem;
|
|
99
|
-
position: relative;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.switch-container:hover {
|
|
103
|
-
cursor: pointer;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/* using the before/after pseudo elements of the span to create the "switch" */
|
|
107
|
-
.switch::before,
|
|
108
|
-
.switch::after {
|
|
109
|
-
border: 1px solid var(--gray-mid-dark);
|
|
110
|
-
content: '';
|
|
111
|
-
position: absolute;
|
|
112
|
-
top: 50%;
|
|
113
|
-
transform: translateY(-50%);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/* styling specific to the knob of the switch */
|
|
117
|
-
.switch::after {
|
|
118
|
-
background: #fff;
|
|
119
|
-
border-radius: 100%;
|
|
120
|
-
width: 1.4rem;
|
|
121
|
-
height: 1.4rem;
|
|
122
|
-
right: 1.4rem;
|
|
123
|
-
transition: right var(--timing-fast) ease-in-out;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/* styling specific to the knob "container" */
|
|
127
|
-
.switch::before {
|
|
128
|
-
background: #eee;
|
|
129
|
-
border-radius: 1.75rem;
|
|
130
|
-
width: 2.75rem;
|
|
131
|
-
height: 1.75rem;
|
|
132
|
-
right: 0.25rem;
|
|
133
|
-
transition: background var(--timing-medium) ease-in-out;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/* Sizes */
|
|
137
|
-
.switch-small::after {
|
|
138
|
-
width: 1.25rem;
|
|
139
|
-
height: 1.25rem;
|
|
140
|
-
right: 1.125rem;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.switch-small::before {
|
|
144
|
-
width: 2.25rem;
|
|
145
|
-
height: 1.5rem;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
.switch-large::after {
|
|
149
|
-
width: 1.65rem;
|
|
150
|
-
height: 1.65rem;
|
|
151
|
-
right: 1.65rem;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.switch-large::before {
|
|
155
|
-
width: 3.25rem;
|
|
156
|
-
height: 2rem;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.switch-border::before {
|
|
160
|
-
border: 1px solid var(--primary);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.switch-action.switch-border::before {
|
|
164
|
-
border: 1px solid var(--action);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/* Switch label on right */
|
|
168
|
-
|
|
169
|
-
/* We have to flip the positioning when the label is on the right of switch */
|
|
170
|
-
.switch-right .switch::before {
|
|
171
|
-
right: initial;
|
|
172
|
-
left: 0.25rem;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.switch-right .switch::after {
|
|
176
|
-
right: initial;
|
|
177
|
-
left: 1.4rem;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/* Switch sizes w/label on right -- I expect SMACSS so .switch .switch-small
|
|
181
|
-
classes should both exist so the right: initial was taken care of above :) */
|
|
182
|
-
.switch-right .switch-small::after {
|
|
183
|
-
left: 1.125rem;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.switch-right .switch-large::after {
|
|
187
|
-
left: 1.65rem;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/* ---- CHECKED STATE ----- */
|
|
191
|
-
|
|
192
|
-
/* change the position of the knob to indicate it has been checked */
|
|
193
|
-
|
|
194
|
-
.switch-input:checked + .switch-small::after {
|
|
195
|
-
right: 0.425rem;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.switch-input:checked + .switch::after {
|
|
199
|
-
right: 0.5em;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.switch-right .switch-label {
|
|
203
|
-
position: absolute;
|
|
204
|
-
right: 0;
|
|
205
|
-
|
|
206
|
-
/* Flips transition target to left to preserve our smooth transitions */
|
|
207
|
-
transition: left var(--timing-fast) ease-in-out;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.switch-right .switch-input:checked + .switch::after {
|
|
211
|
-
right: initial;
|
|
212
|
-
left: 0.5em;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.switch-right .switch-input:checked + .switch-small::after {
|
|
216
|
-
right: initial;
|
|
217
|
-
left: 0.425rem;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/* From: https://scottaohara.github.io/a11y_styled_form_controls/src/checkbox--switch/
|
|
221
|
-
hide the actual checkbox from view, but not from keyboards or ATs.
|
|
222
|
-
Instead of standard visually hidden styling, instead set opacity to
|
|
223
|
-
almost 0 (not zero for ChomeVox legacy bug), pointer-events none, and
|
|
224
|
-
then set to full height/width of container element so that VO focus
|
|
225
|
-
ring outlines the component, instead of a tiny box within the component
|
|
226
|
-
*/
|
|
227
|
-
.switch-input {
|
|
228
|
-
margin: 0;
|
|
229
|
-
opacity: 0.01%;
|
|
230
|
-
position: absolute;
|
|
231
|
-
left: 0;
|
|
232
|
-
top: 0;
|
|
233
|
-
width: 100%;
|
|
234
|
-
height: 100%;
|
|
235
|
-
pointer-events: none;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
.switch-input:focus + .switch::before {
|
|
239
|
-
box-shadow: 0 0 0 var(--focus-ring-outline-width) var(--focus-ring-color);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/* update the color of the "container" to further visually indicate state */
|
|
243
|
-
.switch-input:checked + .switch:not(.switch-border)::before {
|
|
244
|
-
background: var(--primary);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.switch-input:checked + .switch-action:not(.switch-border)::before {
|
|
248
|
-
background: var(--action);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/* Border switch on checked the thumb gets primary or action bg respectively */
|
|
252
|
-
.switch-input:checked + .switch-border::after {
|
|
253
|
-
background: var(--primary);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
.switch-input:checked + .switch-action.switch-border::after {
|
|
257
|
-
background: var(--action);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/* Disabled aka :disabled is not actually supported for <label>
|
|
261
|
-
element so we use attribute selector for that:
|
|
262
|
-
https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled#:~:text=The%20disabled%20attribute%20is%20supported,control%20or%20its%20descendant%20controls.
|
|
263
|
-
*/
|
|
264
|
-
.switch-input[disabled] + .switch,
|
|
265
|
-
.switch-input[disabled] + .switch-label,
|
|
266
|
-
.switch-container.disabled {
|
|
267
|
-
color: var(--input-disabled-color, var(--disabled-color)) !important;
|
|
268
|
-
appearance: none !important;
|
|
269
|
-
box-shadow: none !important;
|
|
270
|
-
cursor: not-allowed !important;
|
|
271
|
-
opacity: 80% !important;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
@media screen and (-ms-high-contrast: active) {
|
|
275
|
-
.switch::after {
|
|
276
|
-
background-color: windowText;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/* High contrast mode outline hacks */
|
|
280
|
-
.switch-input[disabled] + .switch-label,
|
|
281
|
-
.switch-container.disabled {
|
|
282
|
-
outline: 2px solid transparent;
|
|
283
|
-
outline-offset: -2px;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
@media (prefers-reduced-motion), (update: slow) {
|
|
288
|
-
.switch::after,
|
|
289
|
-
.switch::before {
|
|
290
|
-
transition-duration: 0.001ms !important;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
</style>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
declare const Switch: import("svelte").Component<Partial<{
|
|
2
|
-
id: string;
|
|
3
|
-
name: string;
|
|
4
|
-
label: string;
|
|
5
|
-
css: string;
|
|
6
|
-
labelPosition: string;
|
|
7
|
-
size: string;
|
|
8
|
-
isChecked: boolean;
|
|
9
|
-
isBordered: boolean;
|
|
10
|
-
isAction: boolean;
|
|
11
|
-
isDisabled: boolean;
|
|
12
|
-
}>, {}, "">;
|
|
13
|
-
type Switch = ReturnType<typeof Switch>;
|
|
14
|
-
export default Switch;
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export let ariaLabel = 'Loading…';
|
|
3
|
-
export let size = '';
|
|
4
|
-
export let loaderClasses = ['loader', size ? `loader-${size}` : ''].filter((c) => c).join(' ');
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<div class={loaderClasses} role="status" aria-live="polite" aria-busy="true">
|
|
8
|
-
<span class="screenreader-only">{ariaLabel}</span>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<style>
|
|
12
|
-
.loader {
|
|
13
|
-
--loading-color: var(--agnostic-loading-color, var(--agnostic-dark));
|
|
14
|
-
--loading-size: var(--fluid-16);
|
|
15
|
-
--loading-size-small: var(--fluid-12);
|
|
16
|
-
--loading-size-large: var(--fluid-18);
|
|
17
|
-
|
|
18
|
-
position: relative;
|
|
19
|
-
box-sizing: border-box;
|
|
20
|
-
animation: blink 1s infinite;
|
|
21
|
-
animation-delay: 250ms;
|
|
22
|
-
|
|
23
|
-
/* Make up for negative positioning */
|
|
24
|
-
margin-left: var(--loading-size);
|
|
25
|
-
|
|
26
|
-
/* Initially set zero until aria-busy becomes true */
|
|
27
|
-
opacity: 0%;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.loader,
|
|
31
|
-
.loader::before,
|
|
32
|
-
.loader::after {
|
|
33
|
-
width: calc(var(--loading-size) / 2);
|
|
34
|
-
height: calc(var(--loading-size) / 2);
|
|
35
|
-
border-radius: var(--fluid-6);
|
|
36
|
-
background-color: var(--loading-color);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/* SMALL */
|
|
40
|
-
.loader-small,
|
|
41
|
-
.loader-small::before,
|
|
42
|
-
.loader-small::after {
|
|
43
|
-
width: calc(var(--loading-size-small) / 2);
|
|
44
|
-
height: calc(var(--loading-size-small) / 2);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* LARGE */
|
|
48
|
-
.loader-large,
|
|
49
|
-
.loader-large::before,
|
|
50
|
-
.loader-large::after {
|
|
51
|
-
width: calc(var(--loading-size-large) / 2);
|
|
52
|
-
height: calc(var(--loading-size-large) / 2);
|
|
53
|
-
border-radius: var(--fluid-8);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.loader::before,
|
|
57
|
-
.loader::after {
|
|
58
|
-
content: '';
|
|
59
|
-
display: inline-block;
|
|
60
|
-
position: absolute;
|
|
61
|
-
top: 0;
|
|
62
|
-
animation: blink 1s infinite;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.loader::before {
|
|
66
|
-
left: calc(-1 * var(--loading-size));
|
|
67
|
-
animation-delay: 0s;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.loader::after {
|
|
71
|
-
left: var(--loading-size);
|
|
72
|
-
animation-delay: 500ms;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/* SMALL */
|
|
76
|
-
.loader-small::before {
|
|
77
|
-
left: calc(-1 * var(--loading-size-small));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.loader-small::after {
|
|
81
|
-
left: var(--loading-size-small);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/* LARGE */
|
|
85
|
-
.loader-large::before {
|
|
86
|
-
left: calc(-1 * var(--loading-size-large));
|
|
87
|
-
animation-delay: 0s;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.loader-large::after {
|
|
91
|
-
left: var(--loading-size-large);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Setting aria-busy to true results in corresponding opacity change to visually show spinner.
|
|
96
|
-
*/
|
|
97
|
-
.loader[aria-busy='true'] {
|
|
98
|
-
opacity: 100%;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
@keyframes blink {
|
|
102
|
-
50% {
|
|
103
|
-
background-color: transparent;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
@media (prefers-reduced-motion), (update: slow) {
|
|
108
|
-
.loader,
|
|
109
|
-
.loader::before,
|
|
110
|
-
.loader::after {
|
|
111
|
-
transition-duration: 0.001ms !important;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
</style>
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export default Loader;
|
|
2
|
-
type Loader = SvelteComponent<{
|
|
3
|
-
size?: string | undefined;
|
|
4
|
-
ariaLabel?: string | undefined;
|
|
5
|
-
loaderClasses?: string | undefined;
|
|
6
|
-
}, {
|
|
7
|
-
[evt: string]: CustomEvent<any>;
|
|
8
|
-
}, {}> & {
|
|
9
|
-
$$bindings?: string | undefined;
|
|
10
|
-
};
|
|
11
|
-
declare const Loader: $$__sveltets_2_IsomorphicComponent<{
|
|
12
|
-
size?: string | undefined;
|
|
13
|
-
ariaLabel?: string | undefined;
|
|
14
|
-
loaderClasses?: string | undefined;
|
|
15
|
-
}, {
|
|
16
|
-
[evt: string]: CustomEvent<any>;
|
|
17
|
-
}, {}, {}, string>;
|
|
18
|
-
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> {
|
|
19
|
-
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
20
|
-
$$bindings?: Bindings;
|
|
21
|
-
} & Exports;
|
|
22
|
-
(internal: unknown, props: Props & {
|
|
23
|
-
$$events?: Events;
|
|
24
|
-
$$slots?: Slots;
|
|
25
|
-
}): Exports & {
|
|
26
|
-
$set?: any;
|
|
27
|
-
$on?: any;
|
|
28
|
-
};
|
|
29
|
-
z_$$bindings?: Bindings;
|
|
30
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<style>
|
|
3
|
-
.spinner {
|
|
4
|
-
--spinner-color: var(--agnostic-spinner-color, var(--agnostic-dark));
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Inspiration to utilize grid for this from
|
|
8
|
-
* https://dockyard.com/blog/2020/03/02/accessible-loading-indicatorswith-no-extra-elements
|
|
9
|
-
*/
|
|
10
|
-
display: grid;
|
|
11
|
-
grid-template: "content" 100% / auto;
|
|
12
|
-
place-items: center;
|
|
13
|
-
box-sizing: border-box;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.spinner::before,
|
|
17
|
-
.spinner::after {
|
|
18
|
-
grid-area: content;
|
|
19
|
-
width: var(--fluid-32);
|
|
20
|
-
height: var(--fluid-32);
|
|
21
|
-
content: "";
|
|
22
|
-
display: block;
|
|
23
|
-
border-radius: 50%;
|
|
24
|
-
border-width: 3px;
|
|
25
|
-
border-style: solid;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.spinner-small::before,
|
|
29
|
-
.spinner-small::after {
|
|
30
|
-
width: var(--fluid-24);
|
|
31
|
-
height: var(--fluid-24);
|
|
32
|
-
border-width: var(--fluid-2);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.spinner-large::before,
|
|
36
|
-
.spinner-large::after {
|
|
37
|
-
width: var(--fluid-40);
|
|
38
|
-
height: var(--fluid-40);
|
|
39
|
-
border-width: var(--fluid-4);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.spinner-xlarge::before,
|
|
43
|
-
.spinner-xlarge::after {
|
|
44
|
-
width: var(--fluid-56);
|
|
45
|
-
height: var(--fluid-56);
|
|
46
|
-
border-width: var(--fluid-6);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Before is the muted background
|
|
51
|
-
*/
|
|
52
|
-
.spinner::before {
|
|
53
|
-
opacity: 0%;
|
|
54
|
-
border-color: var(--spinner-color);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* After is the inner "snake"
|
|
59
|
-
*/
|
|
60
|
-
.spinner::after {
|
|
61
|
-
opacity: 0%;
|
|
62
|
-
border-color: transparent var(--spinner-color) transparent transparent;
|
|
63
|
-
transition: opacity 0.1s;
|
|
64
|
-
pointer-events: none;
|
|
65
|
-
animation: loading-circle 1s ease-in-out infinite;
|
|
66
|
-
|
|
67
|
-
/* TODO Research the whole null transform hack. It is quite confusing to figure out if it
|
|
68
|
-
is beneficial or detrimental: See
|
|
69
|
-
https://newbedev.com/css-keyframe-animation-cpu-usage-is-high-should-it-be-this-way
|
|
70
|
-
transform: translateZ(0);
|
|
71
|
-
will-change: transform; */
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Setting aria-busy to true results in corresponding opacity change to visually show spinner.
|
|
76
|
-
*/
|
|
77
|
-
.spinner[aria-busy="true"]::before {
|
|
78
|
-
opacity: 12%;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.spinner[aria-busy="true"]::after {
|
|
82
|
-
opacity: 100%;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@keyframes loading-circle {
|
|
86
|
-
to {
|
|
87
|
-
transform: rotate(360deg);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
@media (prefers-reduced-motion), (update: slow) {
|
|
92
|
-
.spinner::after {
|
|
93
|
-
transition-duration: 0.001ms !important;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
</style>
|
|
98
|
-
|
|
99
|
-
<script>
|
|
100
|
-
export let ariaLabel = "Loading…";
|
|
101
|
-
export let size = "";
|
|
102
|
-
$: spinnerClasses = ["spinner", size ? `spinner-${size}` : ""]
|
|
103
|
-
.filter((c) => c)
|
|
104
|
-
.join(" ");
|
|
105
|
-
</script>
|
|
106
|
-
|
|
107
|
-
<div class={spinnerClasses} role="status" aria-live="polite" aria-busy="true">
|
|
108
|
-
<span class="screenreader-only">{ariaLabel}</span>
|
|
109
|
-
</div>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export default Spinner;
|
|
2
|
-
type Spinner = SvelteComponent<{
|
|
3
|
-
size?: string | undefined;
|
|
4
|
-
ariaLabel?: string | undefined;
|
|
5
|
-
}, {
|
|
6
|
-
[evt: string]: CustomEvent<any>;
|
|
7
|
-
}, {}> & {
|
|
8
|
-
$$bindings?: string | undefined;
|
|
9
|
-
};
|
|
10
|
-
declare const Spinner: $$__sveltets_2_IsomorphicComponent<{
|
|
11
|
-
size?: string | undefined;
|
|
12
|
-
ariaLabel?: string | undefined;
|
|
13
|
-
}, {
|
|
14
|
-
[evt: string]: CustomEvent<any>;
|
|
15
|
-
}, {}, {}, string>;
|
|
16
|
-
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> {
|
|
17
|
-
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
18
|
-
$$bindings?: Bindings;
|
|
19
|
-
} & Exports;
|
|
20
|
-
(internal: unknown, props: Props & {
|
|
21
|
-
$$events?: Events;
|
|
22
|
-
$$slots?: Slots;
|
|
23
|
-
}): Exports & {
|
|
24
|
-
$set?: any;
|
|
25
|
-
$on?: any;
|
|
26
|
-
};
|
|
27
|
-
z_$$bindings?: Bindings;
|
|
28
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
import { cn } from '../../utils.js';
|
|
4
|
-
|
|
5
|
-
interface Props {
|
|
6
|
-
children: Snippet;
|
|
7
|
-
background?: string;
|
|
8
|
-
css?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
let { children, background = '', css = '' }: Partial<Props> = $props();
|
|
12
|
-
|
|
13
|
-
const bannerKlasses = cn('banner', css);
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<div class={bannerKlasses} style="--banner-background: {background};">
|
|
17
|
-
{@render children?.()}
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
<style>
|
|
21
|
-
div.banner {
|
|
22
|
-
background: var(--banner-background);
|
|
23
|
-
height: 100%;
|
|
24
|
-
width: 100%;
|
|
25
|
-
}
|
|
26
|
-
</style>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
interface Props {
|
|
3
|
-
companyName: string;
|
|
4
|
-
motto?: string;
|
|
5
|
-
logoUrl?: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
let { companyName = '', motto = '', logoUrl = '' }: Props = $props();
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<aside class="grid-flow-col items-center">
|
|
12
|
-
<img src={logoUrl} alt={companyName} />
|
|
13
|
-
<p>{motto}</p>
|
|
14
|
-
<p>Copyright © 2025 - All right reserved by {companyName}</p>
|
|
15
|
-
<p>Powerd by <a href="https://functional-cms.com">Functional CMS</a></p>
|
|
16
|
-
</aside>
|
|
17
|
-
|
|
18
|
-
<style>
|
|
19
|
-
aside {
|
|
20
|
-
text-align: center;
|
|
21
|
-
font-size: smaller;
|
|
22
|
-
}
|
|
23
|
-
</style>
|