@functionalcms/svelte-components 3.5.20 → 4.0.0-pre

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 (129) hide show
  1. package/css/functional.css +1 -1
  2. package/css/functional.css.map +1 -1
  3. package/dist/auth/authenticationHandle.js +0 -4
  4. package/dist/auth/redisSessionProvider.js +1 -2
  5. package/dist/auth/sessionIdGenerator.d.ts +1 -1
  6. package/dist/components/form/Button.svelte +379 -0
  7. package/dist/components/form/Button.svelte.d.ts +27 -0
  8. package/dist/components/form/Input.d.ts +21 -0
  9. package/dist/components/form/Input.js +23 -0
  10. package/dist/components/form/Input.svelte +142 -177
  11. package/dist/components/form/Input.svelte.d.ts +24 -46
  12. package/dist/components/{Banner.svelte → layouts/Banner.svelte} +5 -5
  13. package/dist/components/layouts/DefaultLayout.svelte +5 -5
  14. package/dist/components/layouts/DefaultLayout.svelte.d.ts +4 -4
  15. package/dist/components/layouts/SimpleFooter.svelte +4 -4
  16. package/dist/components/layouts/SimpleFooter.svelte.d.ts +3 -3
  17. package/dist/components/layouts/Well.svelte +46 -0
  18. package/dist/components/layouts/Well.svelte.d.ts +12 -0
  19. package/dist/components/menu/CollapsibleMenu.svelte +2 -2
  20. package/dist/components/menu/CollapsibleMenu.svelte.d.ts +3 -16
  21. package/dist/components/menu/DynamicMenu.svelte +25 -13
  22. package/dist/components/menu/DynamicMenu.svelte.d.ts +10 -28
  23. package/dist/components/menu/HamburgerMenu.svelte +29 -21
  24. package/dist/components/menu/HamburgerMenu.svelte.d.ts +11 -24
  25. package/dist/components/menu/ListMenu.svelte +53 -0
  26. package/dist/components/menu/ListMenu.svelte.d.ts +17 -0
  27. package/dist/components/menu/{Menu.d.ts → types.d.ts} +2 -0
  28. package/dist/components/menu/{Menu.js → types.js} +5 -0
  29. package/dist/components/presentation/Card.svelte +77 -92
  30. package/dist/components/presentation/Card.svelte.d.ts +10 -13
  31. package/dist/components/presentation/{Carusele.d.ts → Carousel.d.ts} +1 -1
  32. package/dist/components/presentation/Carousel.svelte +98 -1
  33. package/dist/components/presentation/Carousel.svelte.d.ts +14 -15
  34. package/dist/components/presentation/Drawer.svelte +131 -0
  35. package/dist/components/presentation/Drawer.svelte.d.ts +13 -0
  36. package/dist/components/presentation/Gallery.svelte +7 -7
  37. package/dist/components/presentation/Gallery.svelte.d.ts +3 -3
  38. package/dist/components/presentation/ImageCompare.svelte +39 -46
  39. package/dist/components/presentation/ImageCompare.svelte.d.ts +8 -26
  40. package/dist/components/presentation/Link.svelte +362 -0
  41. package/dist/components/presentation/Link.svelte.d.ts +27 -0
  42. package/dist/components/presentation/Logo.svelte +36 -0
  43. package/dist/components/presentation/Logo.svelte.d.ts +8 -0
  44. package/dist/components/presentation/ShowItem.d.ts +7 -7
  45. package/dist/components/presentation/ShowItem.js +1 -8
  46. package/dist/index-server.d.ts +0 -1
  47. package/dist/index-server.js +0 -3
  48. package/dist/index.d.ts +16 -22
  49. package/dist/index.js +39 -57
  50. package/dist/server-side/getServices.d.ts +1 -1
  51. package/dist/server-side/types.d.ts +1 -2
  52. package/dist/utils.d.ts +1 -0
  53. package/dist/utils.js +54 -0
  54. package/package.json +27 -24
  55. package/dist/components/CssHelper.d.ts +0 -1
  56. package/dist/components/CssHelper.js +0 -3
  57. package/dist/components/Link.svelte +0 -349
  58. package/dist/components/Link.svelte.d.ts +0 -48
  59. package/dist/components/Logo.svelte +0 -38
  60. package/dist/components/Logo.svelte.d.ts +0 -28
  61. package/dist/components/Spacer.svelte +0 -22
  62. package/dist/components/Spacer.svelte.d.ts +0 -6
  63. package/dist/components/Well.svelte +0 -40
  64. package/dist/components/Well.svelte.d.ts +0 -12
  65. package/dist/components/agnostic/Button/Button.svelte +0 -371
  66. package/dist/components/agnostic/Button/Button.svelte.d.ts +0 -52
  67. package/dist/components/agnostic/Button/ButtonGroup.svelte +0 -21
  68. package/dist/components/agnostic/Button/ButtonGroup.svelte.d.ts +0 -32
  69. package/dist/components/agnostic/Button/button-base.css +0 -12
  70. package/dist/components/agnostic/Button/button-core.css +0 -237
  71. package/dist/components/agnostic/Button/button-empty.css +0 -31
  72. package/dist/components/agnostic/Button/button-group.css +0 -8
  73. package/dist/components/agnostic/Close/Close.svelte +0 -124
  74. package/dist/components/agnostic/Close/Close.svelte.d.ts +0 -25
  75. package/dist/components/agnostic/Close/api.d.ts +0 -1
  76. package/dist/components/agnostic/Disclose/Disclose.svelte +0 -116
  77. package/dist/components/agnostic/Disclose/Disclose.svelte.d.ts +0 -11
  78. package/dist/components/agnostic/Divider/Divider.svelte +0 -141
  79. package/dist/components/agnostic/Divider/Divider.svelte.d.ts +0 -24
  80. package/dist/components/agnostic/Divider/api.d.ts +0 -3
  81. package/dist/components/agnostic/Divider/api.js +0 -1
  82. package/dist/components/agnostic/Loader/Loader.svelte +0 -116
  83. package/dist/components/agnostic/Loader/Loader.svelte.d.ts +0 -22
  84. package/dist/components/agnostic/animation.css +0 -37
  85. package/dist/components/blog/BlogDescription.svelte +0 -9
  86. package/dist/components/blog/BlogDescription.svelte.d.ts +0 -23
  87. package/dist/components/blog/BlogPost.d.ts +0 -13
  88. package/dist/components/blog/BlogPost.js +0 -1
  89. package/dist/components/blog/BlogTitle.svelte +0 -19
  90. package/dist/components/blog/BlogTitle.svelte.d.ts +0 -23
  91. package/dist/components/blog/blog.d.ts +0 -8
  92. package/dist/components/blog/blog.js +0 -29
  93. package/dist/components/converters/ShowItemToNavigationItems.d.ts +0 -3
  94. package/dist/components/converters/ShowItemToNavigationItems.js +0 -10
  95. package/dist/components/form/DateTimePicker.svelte +0 -59
  96. package/dist/components/form/DateTimePicker.svelte.d.ts +0 -18
  97. package/dist/components/form/InputAddonItem.svelte +0 -42
  98. package/dist/components/form/InputAddonItem.svelte.d.ts +0 -31
  99. package/dist/components/form/InputTypes.d.ts +0 -9
  100. package/dist/components/form/InputTypes.js +0 -10
  101. package/dist/components/form/Select.svelte +0 -157
  102. package/dist/components/form/Select.svelte.d.ts +0 -34
  103. package/dist/components/form/Switch.svelte +0 -275
  104. package/dist/components/form/Switch.svelte.d.ts +0 -30
  105. package/dist/components/menu/Menu.svelte +0 -526
  106. package/dist/components/menu/Menu.svelte.d.ts +0 -33
  107. package/dist/components/menu/MenuItem.svelte +0 -121
  108. package/dist/components/menu/MenuItem.svelte.d.ts +0 -39
  109. package/dist/components/menu/NavigationItems.svelte +0 -44
  110. package/dist/components/menu/NavigationItems.svelte.d.ts +0 -32
  111. package/dist/components/menu/authentication.d.ts +0 -1
  112. package/dist/components/menu/authentication.js +0 -6
  113. package/dist/components/presentation/Carousel/carousel-content.svelte +0 -35
  114. package/dist/components/presentation/Carousel/carousel-content.svelte.d.ts +0 -28
  115. package/dist/components/presentation/Carousel/carousel-item.svelte +0 -25
  116. package/dist/components/presentation/Carousel/carousel-item.svelte.d.ts +0 -28
  117. package/dist/components/presentation/Carousel/carousel-next.svelte +0 -39
  118. package/dist/components/presentation/Carousel/carousel-next.svelte.d.ts +0 -18
  119. package/dist/components/presentation/Carousel/carousel-previous.svelte +0 -40
  120. package/dist/components/presentation/Carousel/carousel-previous.svelte.d.ts +0 -18
  121. package/dist/components/presentation/Carousel/carousel.svelte +0 -99
  122. package/dist/components/presentation/Carousel/carousel.svelte.d.ts +0 -31
  123. package/dist/components/presentation/Carousel/context.d.ts +0 -32
  124. package/dist/components/presentation/Carousel/context.js +0 -12
  125. package/dist/components/presentation/Carusele.js +0 -5
  126. /package/dist/components/{Markdown.svelte → content/Markdown.svelte} +0 -0
  127. /package/dist/components/{Markdown.svelte.d.ts → content/Markdown.svelte.d.ts} +0 -0
  128. /package/dist/components/{Banner.svelte.d.ts → layouts/Banner.svelte.d.ts} +0 -0
  129. /package/dist/components/{agnostic/Close/api.js → presentation/Carousel.js} +0 -0
@@ -1,526 +0,0 @@
1
- <script lang="ts">
2
- import { onDestroy, onMount } from 'svelte';
3
-
4
- export let id;
5
- export let type: 'simple' | 'kebab' | 'hamburger' | 'meatball' = 'simple';
6
- export let size: 'small' | 'large' | '' = '';
7
- export let menuTitle;
8
- export let menuItems = [];
9
- export let isDisabled = false;
10
- export let isRounded = false;
11
- export let isBordered = false;
12
- export let isItemsRight = false;
13
- export let icon = '▾';
14
- export let onOpen;
15
- export let onClose;
16
- export let closeOnClickOutside = true;
17
- export let closeOnSelect = true;
18
-
19
- // References aka bindings
20
- let rootRef;
21
- let triggerRef;
22
-
23
- let menuItemRefs = []; //https://svelte.dev/tutorial/component-this
24
- $: menuItemRefs = [];
25
-
26
- // State management
27
- let expanded = false;
28
- const setExpanded = (b) => expanded = b;
29
- let selectedItem = -1;
30
- const setSelectedItem = (n) => selectedItem = n;
31
-
32
- const setOpened = (open) => {
33
- if (open && onOpen) {
34
- onOpen(selectedItem);
35
- } else if (onClose) {
36
- onClose();
37
- }
38
- setExpanded(open);
39
- };
40
-
41
- // Focus management
42
- const focusItem = (index: number, direction?: 'asc' | 'desc') => {
43
- let i = index;
44
- if (direction === 'asc') {
45
- i += 1;
46
- } else if (direction === 'desc') {
47
- i -= 1;
48
- }
49
-
50
- // Circular navigation
51
- //
52
- // If we've went beyond "start" circle around to last
53
- if (i < 0) {
54
- i = menuItems.length - 1;
55
- } else if (i >= menuItems.length) {
56
- // We've went beyond "last" so circle around to first
57
- i = 0;
58
- }
59
-
60
- const nextMenuItem = menuItemRefs[i];
61
-
62
- if (nextMenuItem) {
63
- // Edge case: We hit a tab button that's been disabled. If so, we recurse, but
64
- // only if we've been supplied a `direction`. Otherwise, nothing left to do.
65
- if (nextMenuItem.isDisabled() && direction) {
66
- // Retry with new `i` index going in same direction
67
- focusItem(i, direction);
68
- } else {
69
- // Note that .focus is available here as a result of agnostic-svelte/src/lib/components/Menu/MenuItem.svelte
70
- // maintaining its own reference to the native <button> element and then exposing itw own export function focus
71
- nextMenuItem.focus();
72
- }
73
- }
74
- };
75
-
76
- const focusTriggerButton = () => triggerRef && triggerRef.focus();
77
-
78
- const isInside = (el) => {
79
- if (rootRef) {
80
- const children = rootRef.querySelectorAll('*');
81
- for (let i = 0; i < children.length; i += 1) {
82
- const child = children[i];
83
- if (el === child) {
84
- return true;
85
- }
86
- }
87
- }
88
- return false;
89
- };
90
-
91
- const clickedOutside = (ev) => {
92
- if (expanded && closeOnClickOutside) {
93
- if (!isInside(ev.target)) {
94
- setExpanded(false);
95
- focusTriggerButton();
96
- }
97
- }
98
- };
99
-
100
- onMount(() => {
101
- if (typeof window !== 'undefined') {
102
- document.addEventListener('click', clickedOutside);
103
- }
104
- });
105
-
106
- onDestroy(() => {
107
- if (typeof window !== 'undefined') {
108
- document.removeEventListener('click', clickedOutside);
109
- }
110
- });
111
-
112
- // CSS Classes
113
- let triggerSizeClasses;
114
- let itemSizeClasses;
115
- switch (size) {
116
- case 'small':
117
- triggerSizeClasses = "menu-trigger-small";
118
- itemSizeClasses = "menu-item-small";
119
- break;
120
- case 'large':
121
- triggerSizeClasses = "menu-trigger-large";
122
- itemSizeClasses = "menu-item-large";
123
- break;
124
- default:
125
- triggerSizeClasses = '';
126
- itemSizeClasses = '';
127
- }
128
-
129
- const dotBarClasses = [
130
- type === 'hamburger' ? 'bar' : 'dot'
131
- ]
132
- .filter((cls) => cls)
133
- .join(' ');
134
-
135
- const triggerClasses = [
136
- type === 'simple' ? "menu-trigger" : '',
137
- triggerSizeClasses,
138
- isBordered ? "menu-trigger-bordered" : '',
139
- isRounded ? "menu-trigger-rounded" : '',
140
- type !== 'simple' ? "btn-base" : '',
141
- type !== 'simple' ? "btn-blank" : '',
142
- type === 'kebab' ? "btn-kebab" : '',
143
- type === 'meatball' ? "btn-meatball" : '',
144
- type === 'hamburger' ? "btn-hamburger" : '',
145
- ]
146
- .filter((cls) => cls)
147
- .join(' ');
148
-
149
- const itemClasses = [itemSizeClasses, isRounded ? "menu-item-rounded" : '']
150
- .filter((cls) => cls)
151
- .join(' ');
152
-
153
- const afterOpened = () => {
154
- requestAnimationFrame(() => {
155
- // If selectedItem < 1 probably hasn't been opened before (or happens to be on
156
- // first item). Otherwise, might be "reopening" and has previously selected item
157
- if (selectedItem < 1) {
158
- setSelectedItem(0);
159
- onMenuItemKeyDown('Home', 0);
160
- } else {
161
- focusItem(selectedItem);
162
- setSelectedItem(selectedItem);
163
- }
164
- });
165
- };
166
-
167
- /**
168
- * @param evOrString arg of either keyboard event or a string w/direction key like Up Down etc.
169
- * @param index
170
- * @returns
171
- */
172
- const onMenuItemKeyDown = (evOrString, index) => {
173
- const key = typeof evOrString === 'string' ? evOrString : evOrString.key;
174
- switch (key) {
175
- case 'Up': // These first cases are IEEdge :(
176
- case 'ArrowUp':
177
- focusItem(index, 'desc');
178
- break;
179
- case 'Down':
180
- case 'ArrowDown':
181
- focusItem(index, 'asc');
182
- break;
183
- case 'Home':
184
- case 'ArrowHome':
185
- focusItem(0);
186
- break;
187
- case 'End':
188
- case 'ArrowEnd':
189
- focusItem(menuItems.length - 1);
190
- break;
191
- case 'Enter':
192
- case 'Space':
193
- // Focus and select the item
194
- focusItem(index);
195
- setSelectedItem(index);
196
- // If we're to close the menu on selection (default) then do so
197
- if (closeOnSelect) {
198
- setOpened(false);
199
- focusTriggerButton();
200
- }
201
- break;
202
- case 'Escape':
203
- setOpened(false);
204
- focusTriggerButton();
205
- break;
206
- case 'Tab':
207
- // Trap tabs while capturing these menu events
208
- if (typeof evOrString !== 'string') {
209
- evOrString.preventDefault();
210
- }
211
- break;
212
- default:
213
- return;
214
- }
215
- if (typeof evOrString !== 'string') {
216
- evOrString.preventDefault();
217
- }
218
- };
219
-
220
- const onTriggerButtonKeyDown = (e) => {
221
- switch (e.key) {
222
- case 'Down':
223
- case 'ArrowDown':
224
- // If not expanded and we haven't previously selected an item other then first item
225
- // puts focus on first item in menu list. Otherwise,
226
- if (!expanded) {
227
- setOpened(true);
228
- afterOpened();
229
- e.preventDefault();
230
- }
231
- break;
232
- case 'Escape':
233
- if (expanded) {
234
- setOpened(false);
235
- focusTriggerButton();
236
- }
237
- break;
238
- default:
239
- // Noop
240
- }
241
- };
242
-
243
- const onTriggerButtonClicked = () => {
244
- // toggled is local reference to !expanded since setExpanded is async (avoids race condition)
245
- const toggled = !expanded;
246
- setOpened(toggled);
247
- setTimeout(() => {
248
- if (toggled) {
249
- afterOpened();
250
- } else if (closeOnSelect) {
251
- // If we're to close the menu on selection (default) then do so
252
- setOpened(false);
253
- focusTriggerButton();
254
- }
255
- }, 10);
256
- };
257
-
258
- $: menuItemClasses = (isSelected) => {
259
- return [
260
- `menu-item`,
261
- itemClasses,
262
- isSelected ? "menu-item-selected" : "",
263
- ].filter((klass) => klass.length).join(" ");
264
- };
265
-
266
- $: menuItemsClasses = () => {
267
- return [
268
- isItemsRight ? "menu-items-right" : "",
269
- !isItemsRight ? "menu-items" : ""
270
- ].filter(c => c && c.length).join(' ');
271
- };
272
-
273
- $: onMenuItemClicked = (index) => {
274
- setSelectedItem(index);
275
- if (closeOnSelect) {
276
- setOpened(false);
277
- focusTriggerButton();
278
- }
279
- };
280
- </script>
281
- <div bind:this={rootRef} class="menu">
282
- <button
283
- bind:this={triggerRef}
284
- class={triggerClasses}
285
- aria-haspopup="true"
286
- aria-expanded={expanded}
287
- disabled={isDisabled}
288
- on:keydown={onTriggerButtonKeyDown}
289
- on:click={onTriggerButtonClicked}
290
- >
291
- {#if type === 'simple'}
292
- {menuTitle}
293
- <span class="menu-icon" aria-hidden="true">
294
- {icon}
295
- </span>
296
- {:else}
297
- <span class="screenreader-only">{menuTitle}</span>
298
- <span class={dotBarClasses}></span>
299
- <span class={dotBarClasses}></span>
300
- <span class={dotBarClasses}></span>
301
- {/if}
302
- </button>
303
- <div class={menuItemsClasses()} id={id} role="menu" hidden={!expanded}>
304
- {#each menuItems as item, i}
305
- <svelte:component
306
- this={item.menuItemComponent}
307
- bind:this={menuItemRefs[i]}
308
- classes={menuItemClasses(selectedItem === i)}
309
- isSelected={selectedItem === i}
310
- disabled={item.isDisabled}
311
- on:click={() => onMenuItemClicked(i)}
312
- on:keydown={(ev) => onMenuItemKeyDown(ev, i)}
313
- >
314
- {item.label}
315
- </svelte:component>
316
- {/each}
317
- </div>
318
- </div>
319
- <style>
320
- .menu {
321
- display: inline-flex;
322
- position: relative;
323
- background-color: inherit;
324
- }
325
-
326
- :is(.menu-items, .menu-items-right) {
327
- position: absolute;
328
- background-color: var(--functional-light);
329
- margin-block-start: var(--fluid-6);
330
- z-index: 10;
331
- }
332
-
333
- .menu-items {
334
- right: initial;
335
- left: 0;
336
- }
337
-
338
- .menu-items-right {
339
- left: initial;
340
- right: 0;
341
- }
342
-
343
- .btn-base {
344
- display: inline-flex;
345
- align-items: center;
346
- justify-content: center;
347
- white-space: nowrap;
348
- user-select: none;
349
- appearance: none;
350
- cursor: pointer;
351
- box-sizing: border-box;
352
- transition-property: all;
353
- transition-duration: var(--functional-timing-medium);
354
- }
355
-
356
- /**
357
- * Invisible buttons. Generally used for a Cancel or icon button that behaves like a button,
358
- * semantically and for a11y, but, does so without all the typical "button chrome" behind it.
359
- */
360
- :is(.btn-link, .btn-blank) {
361
- font-family: var(--functional-btn-font-family, var(--functional-font-family-body));
362
- font-size: var(--functional-btn-font-size, 1rem);
363
- background-color: transparent;
364
- border: 0;
365
- border-radius: 0;
366
- box-shadow: none;
367
- transition: none;
368
- }
369
-
370
- /* Since blank buttons can be used for things like input addons we don't want to go crazy
371
- on the side padding. As such, these have a good bit less then regular buttons. */
372
- .btn-blank {
373
- --functional-btn-blank-side-padding: var(--btn-blank-side-padding, 0.25rem);
374
-
375
- padding-inline-start: var(--functional-btn-blank-side-padding);
376
- padding-inline-end: var(--functional-btn-blank-side-padding);
377
- }
378
-
379
- /* A button blank with link color text */
380
- .btn-link {
381
- color: var(--functional-btn-primary, var(--functional-primary));
382
- }
383
-
384
- .btn-link:hover {
385
- cursor: pointer;
386
- }
387
-
388
- .menu-trigger {
389
- display: flex;
390
- align-items: center;
391
- justify-content: space-between;
392
- max-width: 100%;
393
- background-color: var(--functional-btn-bgcolor, var(--functional-gray-light));
394
- cursor: pointer;
395
- text-align: left;
396
-
397
- /* TODO -- can we compose some of this from the button styles? */
398
- border-color: var(--functional-btn-bgcolor, var(--functional-gray-light));
399
- border-style: solid;
400
- border-width: var(--functional-btn-border-size, 1px);
401
- font-size: inherit;
402
-
403
- /* this can be overriden, but it might mess with the balance of the button heights across variants */
404
- line-height: var(--functional-line-height, var(--fluid-20, 1.25rem));
405
- padding-block-start: var(--functional-vertical-pad, 0.5rem);
406
- padding-block-end: var(--functional-vertical-pad, 0.5rem);
407
- padding-inline-start: var(--functional-side-padding, 0.75rem);
408
- padding-inline-end: var(--functional-side-padding, 0.75rem);
409
- }
410
-
411
- .menu-trigger[disabled] {
412
- background: var(--functional-input-disabled-bg, var(--functional-disabled-bg)) !important;
413
- color: var(--functional-input-disabled-color, var(--functional-disabled-color)) !important;
414
- cursor: not-allowed !important;
415
- opacity: 80% !important;
416
- }
417
-
418
- .menu-trigger:focus {
419
- box-shadow: 0 0 0 var(--functional-focus-ring-outline-width) var(--functional-focus-ring-color);
420
-
421
- /* Needed for High Contrast mode */
422
- outline:
423
- var(--functional-focus-ring-outline-width) var(--functional-focus-ring-outline-style)
424
- var(--functional-focus-ring-outline-color);
425
- transition: box-shadow var(--functional-timing-fast) ease-out;
426
-
427
- /* In order for the focused element's box-shadow to appear above its siblings we need to
428
- establish a new stacking context: https://stackoverflow.com/a/28042700 */
429
- isolation: isolate;
430
- }
431
-
432
- /* Sizes */
433
- .menu-trigger-large {
434
- font-size: calc(var(--functional-btn-font-size, 1rem) + 0.25rem);
435
- height: 3rem;
436
- line-height: 2rem;
437
- }
438
-
439
- .menu-trigger-small {
440
- font-size: calc(var(--functional-btn-font-size, 1rem) - 0.25rem);
441
- height: 2rem;
442
- line-height: 1rem;
443
- }
444
-
445
- .menu-trigger-bordered {
446
- --menu-item-background-color: var(--functional-menu-item-background-color, inherit);
447
-
448
- background-color: var(--menu-item-background-color);
449
- }
450
-
451
- .menu-trigger-rounded {
452
- border-radius: var(--functional-radius);
453
- }
454
-
455
- /* TODO make this more flexible eventually */
456
- .menu-icon {
457
- font-family: sans-serif;
458
- font-size: var(--fluid-18);
459
- margin-inline-start: var(--fluid-8);
460
- line-height: 1;
461
- }
462
-
463
- :is(.btn-kebab, .btn-meatball) {
464
- justify-content: space-around;
465
- height: var(--fluid-24);
466
- width: var(--fluid-24);
467
-
468
- /* Rest here is supplied by btn-base and btn-blank */
469
- }
470
-
471
- /* We use btn-blank which doesn't include this :( */
472
- :is(.btn-hamburger:focus, .btn-kebab:focus, .btn-meatball:focus) {
473
- box-shadow: 0 0 0 var(--functional-focus-ring-outline-width) var(--functional-focus-ring-color);
474
- outline:
475
- var(--functional-focus-ring-outline-width)
476
- var(--functional-focus-ring-outline-style)
477
- var(--functional-focus-ring-outline-color);
478
- transition: box-shadow var(--functional-timing-fast) ease-out;
479
- }
480
-
481
- .btn-hamburger,
482
- .btn-kebab {
483
- flex-direction: column;
484
- }
485
-
486
- .btn-meatball {
487
- flex-direction: row;
488
- }
489
-
490
- /* stylelint-disable-next-line no-duplicate-selectors */
491
- .btn-meatball {
492
- --block-padding: var(--functional-side-padding);
493
-
494
- padding-block-start: var(--block-padding);
495
- padding-block-end: var(--block-padding);
496
- padding-inline-start: 0;
497
- padding-inline-end: 0;
498
- }
499
-
500
- .btn-hamburger {
501
- --vertical-padding: 3px;
502
-
503
- padding-block-start: var(--vertical-padding);
504
- padding-block-end: var(--vertical-padding);
505
- padding-inline-end: var(--fluid-2);
506
- padding-inline-start: var(--fluid-2);
507
- }
508
-
509
- .dot,
510
- .bar {
511
- background-color: var(--functional-dark);
512
- }
513
-
514
- .dot {
515
- width: 5px;
516
- height: 5px;
517
- border-radius: 50px;
518
- }
519
-
520
- .bar {
521
- width: var(--fluid-20);
522
- height: var(--fluid-2);
523
- margin: var(--fluid-2) 0;
524
- }
525
-
526
- </style>
@@ -1,33 +0,0 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const Menu: $$__sveltets_2_IsomorphicComponent<{
15
- id: any;
16
- type?: "simple" | "kebab" | "hamburger" | "meatball";
17
- size?: "small" | "large" | "";
18
- menuTitle: any;
19
- menuItems?: any[];
20
- isDisabled?: boolean;
21
- isRounded?: boolean;
22
- isBordered?: boolean;
23
- isItemsRight?: boolean;
24
- icon?: string;
25
- onOpen: any;
26
- onClose: any;
27
- closeOnClickOutside?: boolean;
28
- closeOnSelect?: boolean;
29
- }, {
30
- [evt: string]: CustomEvent<any>;
31
- }, {}, {}, string>;
32
- type Menu = InstanceType<typeof Menu>;
33
- export default Menu;
@@ -1,121 +0,0 @@
1
- <script lang="ts">
2
- export let disabled = false;
3
- export let isSelected = false;
4
- export let classes;
5
-
6
- // This is a component reference which we need to control the keyboard navigation
7
- // in our tabs implementation. See: https://svelte.dev/tutorial/component-this
8
- let btn;
9
- export function focus() {
10
- return btn.focus();
11
- }
12
- export function isDisabled() {
13
- return btn.disabled;
14
- }
15
- </script>
16
- <button
17
- on:click
18
- on:keydown
19
- bind:this={btn}
20
- role="menuitem"
21
- tabindex={isSelected ? 0 : -1}
22
- disabled={disabled}
23
- class={classes}
24
- >
25
- <slot />
26
- </button>
27
-
28
- <style>
29
- .menu-item {
30
- --menu-item-background-color: var(--functional-menu-item-background-color, inherit);
31
-
32
- text-align: left;
33
-
34
- /* TODO -- can we compose some of this from the button styles? */
35
- border-color: var(--functional-btn-bgcolor, var(--functional-gray-light));
36
- border-style: solid;
37
- border-width: var(--functional-btn-border-size, 1px);
38
- font-size: inherit;
39
-
40
- /* this can be overriden, but it might mess with the balance of the button heights across variants */
41
- line-height: var(--functional-line-height, var(--fluid-20, 1.25rem));
42
- padding-block-start: var(--functional-vertical-pad, 0.5rem);
43
- padding-block-end: var(--functional-vertical-pad, 0.5rem);
44
- padding-inline-start: var(--functional-side-padding, 0.75rem);
45
- padding-inline-end: var(--functional-side-padding, 0.75rem);
46
- background-color: var(--menu-item-background-color);
47
- display: block;
48
- min-width: 100%;
49
- white-space: nowrap;
50
- cursor: default;
51
- }
52
-
53
- .menu-item[disabled] {
54
- background: var(--functional-input-disabled-bg, var(--functional-disabled-bg)) !important;
55
- color: var(--functional-input-disabled-color, var(--functional-disabled-color)) !important;
56
- cursor: not-allowed !important;
57
- opacity: 80% !important;
58
- }
59
-
60
- .menu-item:focus {
61
- box-shadow: 0 0 0 var(--functional-focus-ring-outline-width) var(--functional-focus-ring-color);
62
-
63
- /* Needed for High Contrast mode */
64
- outline:
65
- var(--functional-focus-ring-outline-width) var(--functional-focus-ring-outline-style)
66
- var(--functional-focus-ring-outline-color);
67
- transition: box-shadow var(--functional-timing-fast) ease-out;
68
-
69
- /* In order for the focused element's box-shadow to appear above its siblings we need to
70
- establish a new stacking context: https://stackoverflow.com/a/28042700 */
71
- isolation: isolate;
72
- }
73
-
74
- .menu-item:not(:first-of-type) {
75
- border-top: 0;
76
- }
77
-
78
- .menu-item-selected {
79
- color: var(--functional-light);
80
- background-color: var(--functional-primary);
81
- border-color: var(--functional-primary);
82
- }
83
-
84
- .menu-item:active:not(.menu-item-selected) {
85
- color: var(--functional-primary);
86
- }
87
-
88
- .menu-item [aria-checked="true"]::before {
89
- /* TODO make this more flexible eventually */
90
- content: "\2713\0020";
91
- }
92
-
93
- /* Sizes */
94
- .menu-item-large {
95
- font-size: calc(var(--functional-btn-font-size, 1rem) + 0.25rem);
96
- height: 3rem;
97
- line-height: 2rem;
98
- }
99
-
100
- .menu-item-small {
101
- font-size: calc(var(--functional-btn-font-size, 1rem) - 0.25rem);
102
- height: 2rem;
103
- line-height: 1rem;
104
- }
105
-
106
- .menu-item-rounded:first-of-type {
107
- border-top-left-radius: var(--functional-radius);
108
- border-top-right-radius: var(--functional-radius);
109
- }
110
-
111
- .menu-item-rounded:last-of-type {
112
- border-bottom-left-radius: var(--functional-radius);
113
- border-bottom-right-radius: var(--functional-radius);
114
- }
115
-
116
- .menu-item:hover:not([disabled]):not(.menu-item-selected) {
117
- background-color: var(--functional-gray-extra-light);
118
- cursor: pointer;
119
- }
120
-
121
- </style>
@@ -1,39 +0,0 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
- default: any;
16
- } ? Props extends Record<string, never> ? any : {
17
- children?: any;
18
- } : {});
19
- declare const MenuItem: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
- disabled?: boolean;
21
- isSelected?: boolean;
22
- classes: any;
23
- focus?: () => any;
24
- isDisabled?: () => any;
25
- }, {
26
- default: {};
27
- }>, {
28
- click: MouseEvent;
29
- keydown: KeyboardEvent;
30
- } & {
31
- [evt: string]: CustomEvent<any>;
32
- }, {
33
- default: {};
34
- }, {
35
- focus: () => any;
36
- isDisabled: () => any;
37
- }, string>;
38
- type MenuItem = InstanceType<typeof MenuItem>;
39
- export default MenuItem;