@functionalcms/svelte-components 3.0.6 → 3.0.7

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 (53) hide show
  1. package/dist/components/Banner.svelte +5 -3
  2. package/dist/components/Link.svelte +54 -44
  3. package/dist/components/Logo.svelte +15 -3
  4. package/dist/components/Spacer.svelte +10 -7
  5. package/dist/components/Well.svelte +15 -12
  6. package/dist/components/agnostic/Alert/Alert.svelte +64 -57
  7. package/dist/components/agnostic/Avatar/Avatar.svelte +19 -15
  8. package/dist/components/agnostic/Breadcrumb/Breadcrumb.svelte +19 -10
  9. package/dist/components/agnostic/Button/Button.svelte +60 -35
  10. package/dist/components/agnostic/Button/ButtonGroup.svelte +4 -3
  11. package/dist/components/agnostic/Card/Card.svelte +22 -18
  12. package/dist/components/agnostic/ChoiceInput/ChoiceInput.svelte +87 -59
  13. package/dist/components/agnostic/Close/Close.svelte +11 -7
  14. package/dist/components/agnostic/Dialog/Dialog.svelte +64 -42
  15. package/dist/components/agnostic/Dialog/SvelteA11yDialog.svelte +76 -51
  16. package/dist/components/agnostic/Disclose/Disclose.svelte +15 -9
  17. package/dist/components/agnostic/Divider/Divider.svelte +21 -11
  18. package/dist/components/agnostic/Drawer/Drawer.svelte +20 -16
  19. package/dist/components/agnostic/EmptyState/EmptyState.svelte +10 -7
  20. package/dist/components/agnostic/Header/Header.svelte +22 -15
  21. package/dist/components/agnostic/Header/HeaderNav.svelte +4 -3
  22. package/dist/components/agnostic/Header/HeaderNavItem.svelte +3 -2
  23. package/dist/components/agnostic/Icon/Icon.svelte +28 -20
  24. package/dist/components/agnostic/Loader/Loader.svelte +6 -3
  25. package/dist/components/agnostic/Progress/Progress.svelte +5 -4
  26. package/dist/components/agnostic/Spinner/Spinner.svelte +6 -3
  27. package/dist/components/agnostic/Table/Table.svelte +191 -134
  28. package/dist/components/agnostic/Tabs/TabButtonCustom.svelte +24 -12
  29. package/dist/components/agnostic/Tabs/Tabs.svelte +173 -104
  30. package/dist/components/agnostic/Tag/Tag.svelte +14 -10
  31. package/dist/components/agnostic/Tag/TagSlots.svelte +2 -1
  32. package/dist/components/agnostic/Toasts/Toasts.svelte +29 -19
  33. package/dist/components/agnostic/Tooltip/Tooltip.svelte +85 -68
  34. package/dist/components/agnostic/Tooltip/TooltipSlots.svelte +2 -1
  35. package/dist/components/blog/BlogDescription.svelte +6 -4
  36. package/dist/components/blog/BlogTitle.svelte +8 -6
  37. package/dist/components/form/Input.svelte +81 -52
  38. package/dist/components/form/Input.svelte.d.ts +2 -2
  39. package/dist/components/form/Select.svelte +40 -24
  40. package/dist/components/layouts/DefaultLayout.svelte +8 -5
  41. package/dist/components/layouts/Meta.svelte +7 -6
  42. package/dist/components/layouts/SimpleFooter.svelte +13 -3
  43. package/dist/components/layouts/Tracker.svelte +2 -1
  44. package/dist/components/layouts/TwoColumnsLayout.svelte +3 -2
  45. package/dist/components/menu/CollapsibleMenu.svelte +18 -13
  46. package/dist/components/menu/DynamicMenu.svelte +16 -10
  47. package/dist/components/menu/HamburgerMenu.svelte +24 -18
  48. package/dist/components/menu/Menu.svelte +279 -219
  49. package/dist/components/menu/MenuItem.svelte +14 -10
  50. package/dist/components/menu/NavigationItems.svelte +18 -12
  51. package/dist/components/presentation/Carusel.svelte +77 -72
  52. package/dist/components/presentation/Gallery.svelte +14 -8
  53. package/package.json +9 -10
@@ -247,65 +247,93 @@ itself. */
247
247
 
248
248
  </style>
249
249
 
250
- <script>export let id;
251
- export let isSkinned = true;
252
- export let isFieldset = true;
253
- export let isInline = false;
254
- export let isDisabled = void 0;
255
- export let isInvalid = false;
256
- export let options = [];
257
- export let disabledOptions = [];
258
- export let checkedOptions = [];
259
- export let type = "checkbox";
260
- export let legendLabel = type || "choice input";
261
- export let size = "";
262
- export let checked = [];
263
- $: labelClasses = [
264
- type ? `${type}-label-wrap` : "",
265
- isInline ? `${type}-label-wrap-inline` : "",
266
- isDisabled ? "disabled" : ""
267
- ].filter((c) => c.length).join(" ");
268
- $: labelSpanClasses = [
269
- type ? `${type}-label` : "",
270
- isInvalid ? "choice-input-error" : "",
271
- size ? `${type}-label-${size}` : ""
272
- ].filter((c) => c.length).join(" ");
273
- $: skin = isSkinned ? `${type}-legend` : "";
274
- $: labelCopyClasses = [
275
- // Will also need to work in the small
276
- // and large sizes here for the text copy
277
- type ? `${type}-label-copy` : "",
278
- size ? `${type}-label-copy-${size}` : "",
279
- isInvalid ? "choice-input-error" : ""
280
- ].filter((c) => c.length).join(" ");
281
- $: legendClasses = [
282
- skin,
283
- // .screenreader-only is expected to be globally available via common.min.css
284
- isFieldset === false ? "screenreader-only" : ""
285
- ].filter((c) => c).join(" ");
286
- $: fieldsetClasses = () => {
287
- const skin2 = isSkinned ? `${type}-group` : "";
288
- const sizeSkin = isSkinned && size === "large" ? `${type}-group-${size}` : "";
289
- let klasses = [
290
- skin2,
291
- sizeSkin,
292
- isFieldset === false ? `${type}-group-hidden` : ""
293
- ];
294
- klasses = klasses.filter((klass) => klass.length);
295
- return klasses.join(" ");
296
- };
297
- $: inputClasses = () => {
298
- let inputKlasses = [
299
- type ? `${type}` : "",
300
- size ? `${type}-${size}` : ""
301
- // isDisabled ? "disabled" : "",
302
- ];
303
- inputKlasses = inputKlasses.filter((klass) => klass.length);
304
- return inputKlasses.join(" ");
305
- };
306
- $: onChange = (e) => {
307
- checked = Array.from(document.getElementsByName(e.target.name)).filter((el) => el.checked).map((el) => el.value);
308
- };
250
+ <script lang="ts">
251
+ import type { ChoiceInputOption, ChoiceInputSize, ChoiceInputType } from './api';
252
+ export let id;
253
+ export let isSkinned = true;
254
+ export let isFieldset = true;
255
+ export let isInline = false;
256
+ export let isDisabled = undefined;
257
+ export let isInvalid = false;
258
+ export let options: ChoiceInputOption[] = [];
259
+ export let disabledOptions = [];
260
+ export let checkedOptions = [];
261
+ // If isFieldset falsy this will be screenreader only. If legendLabel is not passed
262
+ // in, it will fallback to the type prop or string choice input. Some content must be
263
+ // within the <legenc>CONTENT</legend> element to meet accessibility requirements
264
+ export let type: ChoiceInputType = "checkbox";
265
+ export let legendLabel = type || "choice input";
266
+ export let size: ChoiceInputSize = "";
267
+
268
+ // Provides bind:checked capabilities that consumer can use
269
+ export let checked = [];
270
+
271
+ $: labelClasses = [
272
+ type ? `${type}-label-wrap` : "",
273
+ isInline ? `${type}-label-wrap-inline` : "",
274
+ isDisabled ? "disabled" : "",
275
+ ].filter((c) => c.length).join(" ");
276
+
277
+ $: labelSpanClasses = [
278
+ type ? `${type}-label` : "",
279
+ isInvalid ? 'choice-input-error' : "",
280
+ size ? `${type}-label-${size}` : "",
281
+ ].filter((c) => c.length).join(" ");
282
+
283
+ // If consumer sets is skinned to false we don't style the legend
284
+ $: skin = isSkinned ? `${type}-legend` : "";
285
+
286
+ $: labelCopyClasses = [
287
+ // Will also need to work in the small
288
+ // and large sizes here for the text copy
289
+ type ? `${type}-label-copy` : "",
290
+ size ? `${type}-label-copy-${size}` : "",
291
+ isInvalid ? 'choice-input-error' : "",
292
+ ].filter((c) => c.length).join(" ");
293
+
294
+ $: legendClasses = [
295
+ skin,
296
+ // .screenreader-only is expected to be globally available via common.min.css
297
+ isFieldset === false ? "screenreader-only" : ""
298
+ ].filter(c => c).join(" ");
299
+
300
+ $: fieldsetClasses = (): string => {
301
+ // If consumer sets is skinned to false we don't style the fieldset
302
+ const skin = isSkinned ? `${type}-group` : "";
303
+
304
+ // we only add the fieldset class for large (not small) e.g. radio|checkbox-group-large
305
+ const sizeSkin =
306
+ isSkinned && size === "large" ? `${type}-group-${size}` : "";
307
+
308
+ let klasses = [
309
+ skin,
310
+ sizeSkin,
311
+ isFieldset === false ? `${type}-group-hidden` : "",
312
+ ];
313
+ klasses = klasses.filter((klass) => klass.length);
314
+ return klasses.join(" ");
315
+ };
316
+
317
+ $: inputClasses = (): string => {
318
+ let inputKlasses = [
319
+ type ? `${type}` : "",
320
+ size ? `${type}-${size}` : "",
321
+ // isDisabled ? "disabled" : "",
322
+ ];
323
+ inputKlasses = inputKlasses.filter((klass) => klass.length);
324
+ return inputKlasses.join(" ");
325
+ };
326
+
327
+ $: onChange = (e) => {
328
+ // This allows the consumer to use bind:checked={checkedValues} idiom.
329
+ // We cannot use the bind:group idiom as we're using dynamic type above,
330
+ // So, essentially, we're manually implementing two-way binding here ;-)
331
+ checked =
332
+ Array.from(document.getElementsByName(e.target.name))
333
+ .filter(el => (el as HTMLInputElement).checked)
334
+ .map(el => (el as HTMLInputElement).value);
335
+
336
+ }
309
337
  </script>
310
338
 
311
339
  <fieldset class={fieldsetClasses()}>
@@ -85,13 +85,17 @@
85
85
 
86
86
  </style>
87
87
 
88
- <script>export let size = "";
89
- export let isFaux = false;
90
- export let color = "inherit";
91
- const closeButtonClasses = [
92
- "close-button",
93
- size ? `close-button-${size}` : ""
94
- ].filter((c) => c).join(" ");
88
+ <script lang="ts">
89
+ import type { CloseSizes } from './api';
90
+ export let size: CloseSizes = "";
91
+ export let isFaux = false;
92
+ export let color = "inherit";
93
+ const closeButtonClasses = [
94
+ "close-button",
95
+ size ? `close-button-${size}` : "",
96
+ ]
97
+ .filter((c) => c)
98
+ .join(" ");
95
99
  </script>
96
100
 
97
101
  {#if isFaux}
@@ -1,45 +1,67 @@
1
- <script>import Close from "../Close/Close.svelte";
2
- import SvelteA11yDialog from "./SvelteA11yDialog.svelte";
3
- import { createEventDispatcher } from "svelte";
4
- const dispatch = createEventDispatcher();
5
- export let id;
6
- export let title;
7
- export let dialogRoot;
8
- export let role = "dialog";
9
- export let titleId = "";
10
- export let closeButtonLabel = "Close button";
11
- export let closeButtonPosition = "first";
12
- export let drawerPlacement = "";
13
- export let isAnimationFadeIn = false;
14
- export let isAnimationSlideUp = false;
15
- let dialogInstance;
16
- const assignDialogInstance = (ev) => {
17
- dialogInstance = ev.detail.instance;
18
- dispatch("instance", {
19
- instance: dialogInstance
20
- });
21
- };
22
- export let classNames = {};
23
- const documentClasses = [
24
- "dialog-content",
25
- isAnimationFadeIn && isAnimationSlideUp ? "dialog-slide-up-fade-in" : "",
26
- !isAnimationFadeIn && isAnimationSlideUp ? "dialog-slide-up" : "",
27
- isAnimationFadeIn && !isAnimationSlideUp ? "dialog-fade-in" : "",
28
- drawerPlacement.length ? "drawer-content" : ""
29
- ].filter((c) => c).join(" ");
30
- const containerClasses = ["dialog", drawerPlacement ? `drawer-${drawerPlacement}` : ""].filter((c) => c).join(" ");
31
- const defaultClassNames = {
32
- container: containerClasses,
33
- document: documentClasses,
34
- overlay: "dialog-overlay",
35
- title: "h4 mbe16",
36
- // Borrows .close-button (from close.css) as it gives us the transparent
37
- // style plus the a11y focus ring we want applied to dialog's close button
38
- closeButton: "dialog-close dialog-close-button"
39
- };
40
- $: getClassNames = () => {
41
- return { ...defaultClassNames, ...classNames };
42
- };
1
+ <script lang="ts">
2
+ import Close from '../Close/Close.svelte';
3
+ import SvelteA11yDialog from './SvelteA11yDialog.svelte';
4
+ import { createEventDispatcher } from 'svelte';
5
+ const dispatch = createEventDispatcher();
6
+
7
+ export let id;
8
+ export let title;
9
+ export let dialogRoot;
10
+ export let role: 'dialog' | 'alertdialog' = 'dialog';
11
+ export let titleId = '';
12
+ export let closeButtonLabel = 'Close button';
13
+ export let closeButtonPosition: 'first' | 'last' | 'none' = 'first';
14
+ export let drawerPlacement = '';
15
+
16
+ /**
17
+ * Animates the dialog content by fading in. Set to false to disable.
18
+ */
19
+ export let isAnimationFadeIn = false;
20
+
21
+ /**
22
+ * Animates the dialog content by sliding up. Set to false to disable.
23
+ */
24
+ export let isAnimationSlideUp = false;
25
+
26
+ /**
27
+ * Handles a11y-dialog instantiation and assigning of dialog instance
28
+ */
29
+ let dialogInstance;
30
+ const assignDialogInstance = (ev) => {
31
+ dialogInstance = ev.detail.instance;
32
+ dispatch('instance', {
33
+ instance: dialogInstance
34
+ });
35
+ };
36
+
37
+ export let classNames = {};
38
+ const documentClasses = [
39
+ 'dialog-content',
40
+ isAnimationFadeIn && isAnimationSlideUp ? 'dialog-slide-up-fade-in' : '',
41
+ !isAnimationFadeIn && isAnimationSlideUp ? 'dialog-slide-up' : '',
42
+ isAnimationFadeIn && !isAnimationSlideUp ? 'dialog-fade-in' : '',
43
+ drawerPlacement.length ? 'drawer-content' : ''
44
+ ]
45
+ .filter((c) => c)
46
+ .join(' ');
47
+
48
+ const containerClasses = ['dialog', drawerPlacement ? `drawer-${drawerPlacement}` : '']
49
+ .filter((c) => c)
50
+ .join(' ');
51
+
52
+ const defaultClassNames = {
53
+ container: containerClasses,
54
+ document: documentClasses,
55
+ overlay: 'dialog-overlay',
56
+ title: 'h4 mbe16',
57
+ // Borrows .close-button (from close.css) as it gives us the transparent
58
+ // style plus the a11y focus ring we want applied to dialog's close button
59
+ closeButton: 'dialog-close dialog-close-button'
60
+ };
61
+
62
+ $: getClassNames = () => {
63
+ return { ...defaultClassNames, ...classNames };
64
+ };
43
65
  </script>
44
66
 
45
67
  <SvelteA11yDialog
@@ -1,54 +1,79 @@
1
- <script>import { createEventDispatcher, onMount, onDestroy, tick } from "svelte";
2
- import A11yDialog from "./a11y-dialog.js";
3
- const dispatch = createEventDispatcher();
4
- export let id;
5
- export let titleId = "";
6
- export let role = "dialog";
7
- export let dialogRoot;
8
- export let title;
9
- export let closeButtonLabel = "Close this dialog window";
10
- export let closeButtonPosition = "first";
11
- export let classNames = {};
12
- const defaultClassNames = {
13
- container: "dialog-container",
14
- document: "dialog-content",
15
- overlay: "dialog-overlay",
16
- element: "dialog-element",
17
- title: "dialog-title h4",
18
- closeButton: "dialog-close"
19
- };
20
- const classes = { ...defaultClassNames, ...classNames };
21
- let dialog;
22
- let rootElement;
23
- const portalTarget = dialogRoot || "document.body";
24
- const fullTitleId = titleId || `${id}-title`;
25
- const roleAttribute = ["dialog", "alertdialog"].includes(role) ? role : "dialog";
26
- let mounted = false;
27
- onMount(() => mounted = true);
28
- onDestroy(() => {
29
- if (dialog) {
30
- dialog.destroy();
31
- }
32
- });
33
- const instantiateDialog = async () => {
34
- await tick();
35
- dialog = new A11yDialog(rootElement, portalTarget);
36
- dispatch("instance", {
37
- "instance": dialog
38
- });
39
- };
40
- const teleportNode = async (node) => {
41
- const destination = document.querySelector(portalTarget);
42
- destination.appendChild(node);
43
- instantiateDialog();
44
- };
45
- const teleport = (node) => {
46
- teleportNode(node);
47
- };
48
- const close = () => {
49
- dialog.hide();
50
- };
51
- </script>
1
+ <script lang="ts">
2
+ import { createEventDispatcher, onMount, onDestroy, tick } from "svelte";
3
+ import A11yDialog from './a11y-dialog.js';
4
+
5
+ const dispatch = createEventDispatcher();
6
+
7
+ export let id: string;
8
+ export let titleId = '';
9
+ export let role: 'dialog' | 'alertdialog' = 'dialog';
10
+ export let dialogRoot: string;
11
+ export let title: string;
12
+ export let closeButtonLabel = 'Close this dialog window';
13
+ export let closeButtonPosition: 'first' | 'last' | 'none' = 'first';
14
+ export let classNames = {}
15
+ const defaultClassNames = {
16
+ container: 'dialog-container',
17
+ document: 'dialog-content',
18
+ overlay: 'dialog-overlay',
19
+ element: 'dialog-element',
20
+ title: 'dialog-title h4',
21
+ closeButton: 'dialog-close',
22
+ };
23
+ const classes = {...defaultClassNames, ...classNames};
24
+
25
+ // The dialog instance
26
+ let dialog;
27
+
28
+ // Dialog element's binding
29
+ let rootElement;
30
+
31
+ const portalTarget: string = dialogRoot || "document.body";
32
+
33
+ const fullTitleId = titleId || `${id}-title`;
34
+
35
+ const roleAttribute = ['dialog', 'alertdialog'].includes(role)
36
+ ? role
37
+ : 'dialog';
38
+
39
+ // In case of SSR we don't render element until hydration is complete
40
+ let mounted = false;
41
+ onMount(() => mounted = true);
42
+
43
+ onDestroy(() => {
44
+ if (dialog) {
45
+ dialog.destroy();
46
+ }
47
+ });
48
+
49
+ const instantiateDialog = async () => {
50
+ await tick();
51
+ dialog = new A11yDialog(rootElement, portalTarget);
52
+ dispatch("instance", {
53
+ "instance": dialog
54
+ });
55
+ };
56
+
57
+ const teleportNode = async (node) => {
58
+ const destination = document.querySelector(portalTarget);
59
+ destination.appendChild(node);
60
+ // We don't render the template until mounted. So we need
61
+ // wait one more "tick" before instantiating the dialog
62
+ instantiateDialog();
63
+ }
64
+
65
+ /**
66
+ * Svelte actions don't want to be async so this is a hack
67
+ * to get around that by delegating to teleportNode
68
+ */
69
+ const teleport = (node) => {
70
+ teleportNode(node);
71
+ }
72
+
73
+ const close = () => {
74
+ dialog.hide();
75
+ }
76
+ </script>
52
77
 
53
78
  {#if mounted}
54
79
  <div
@@ -83,15 +83,21 @@
83
83
 
84
84
  </style>
85
85
 
86
- <script>export let title = "";
87
- export let isOpen = false;
88
- export let isBackground = false;
89
- export let isBordered = false;
90
- const discloseClasses = [
91
- "disclose",
92
- isBackground ? "disclose-bg" : "",
93
- isBordered ? "disclose-bordered" : ""
94
- ].filter((c) => c).join(" ");
86
+ <script lang="ts">
87
+ export let title = "";
88
+ // The <details> open attribute indicates whether the details content will be
89
+ // displayed on page load or not.
90
+ export let isOpen = false;
91
+ export let isBackground = false;
92
+ export let isBordered = false;
93
+
94
+ const discloseClasses = [
95
+ "disclose",
96
+ isBackground ? "disclose-bg" : "",
97
+ isBordered ? "disclose-bordered" : ""
98
+ ]
99
+ .filter((c) => c)
100
+ .join(" ");
95
101
  </script>
96
102
 
97
103
  <details class={discloseClasses} bind:open={isOpen}>
@@ -1,14 +1,24 @@
1
- <script>export let isVertical = false;
2
- export let justify = "";
3
- export let type = "";
4
- export let size = "";
5
- const dividerClasses = [
6
- "divider",
7
- isVertical ? "divider-vertical" : "",
8
- justify ? `divider-justify-${justify}` : "",
9
- size ? `divider-${size}` : "",
10
- type ? `divider-${type}` : ""
11
- ].filter((cl) => cl.length).join(" ");
1
+ <script lang="ts">
2
+ import type { DividerJustify, DividerTypes, DividerSizes } from './api';
3
+
4
+ export let isVertical = false;
5
+
6
+ // start, end (centered by default)
7
+ export let justify: DividerJustify = '';
8
+ // info, success, error, warning
9
+ export let type: DividerTypes = '';
10
+ // small (default is medium) large xlarge
11
+ export let size: DividerSizes = '';
12
+
13
+ const dividerClasses: string = [
14
+ 'divider',
15
+ isVertical ? 'divider-vertical' : '',
16
+ justify ? `divider-justify-${justify}` : '',
17
+ size ? `divider-${size}` : '',
18
+ type ? `divider-${type}` : ''
19
+ ]
20
+ .filter((cl) => cl.length)
21
+ .join(' ');
12
22
  </script>
13
23
 
14
24
  <div class={dividerClasses}></div>
@@ -1,19 +1,23 @@
1
- <script>import Dialog from "../Dialog/Dialog.svelte";
2
- import { createEventDispatcher } from "svelte";
3
- const dispatch = createEventDispatcher();
4
- let drawerInstance;
5
- const assignDrawerRef = (ev) => {
6
- drawerInstance = ev.detail.instance;
7
- dispatch("instance", {
8
- instance: drawerInstance
9
- });
10
- };
11
- export let id;
12
- export let drawerRoot;
13
- export let placement;
14
- export let title;
15
- export let role = "dialog";
16
- export let isAnimationFadeIn = true;
1
+ <script lang="ts">
2
+ import type { DrawerRoles } from './api';
3
+ import Dialog from "../Dialog/Dialog.svelte";
4
+ import { createEventDispatcher } from "svelte";
5
+ const dispatch = createEventDispatcher();
6
+
7
+ let drawerInstance;
8
+ const assignDrawerRef = (ev) => {
9
+ drawerInstance = ev.detail.instance;
10
+ dispatch("instance", {
11
+ instance: drawerInstance,
12
+ });
13
+ };
14
+
15
+ export let id;
16
+ export let drawerRoot;
17
+ export let placement;
18
+ export let title;
19
+ export let role: DrawerRoles = "dialog";
20
+ export let isAnimationFadeIn = true;
17
21
  </script>
18
22
  <Dialog
19
23
  id={id}
@@ -28,13 +28,16 @@
28
28
 
29
29
  </style>
30
30
 
31
- <script>export let isRounded = false;
32
- export let isBordered = false;
33
- const emptyClasses = [
34
- "empty",
35
- isRounded ? "empty-rounded" : "",
36
- isBordered ? "empty-bordered" : ""
37
- ].filter((cl) => cl.length).join(" ");
31
+ <script lang="ts">
32
+ export let isRounded = false;
33
+ export let isBordered = false;
34
+ const emptyClasses: string = [
35
+ "empty",
36
+ isRounded ? "empty-rounded" : "",
37
+ isBordered ? "empty-bordered" : "",
38
+ ]
39
+ .filter((cl) => cl.length)
40
+ .join(" ");
38
41
  </script>
39
42
 
40
43
  <div class={emptyClasses}>
@@ -78,21 +78,28 @@
78
78
 
79
79
  </style>
80
80
 
81
- <script>export let isSticky = false;
82
- export let isSkinned = true;
83
- export let isHeaderContentStart = false;
84
- export let isHeaderContentEnd = false;
85
- export let css = "";
86
- const klasses = [
87
- isSkinned ? "header" : "header-base",
88
- isSticky ? "header-sticky" : "",
89
- css ? `${css}` : ""
90
- ].filter((cl) => cl.length).join(" ");
91
- const headerContentClasses = [
92
- "header-content",
93
- isHeaderContentStart ? "header-content-start" : "",
94
- isHeaderContentEnd ? "header-content-end" : ""
95
- ].filter((cl) => cl.length).join(" ");
81
+ <script lang="ts">
82
+ export let isSticky = false;
83
+ export let isSkinned = true;
84
+ export let isHeaderContentStart = false;
85
+ export let isHeaderContentEnd = false;
86
+ export let css = "";
87
+
88
+ const klasses: string = [
89
+ isSkinned ? "header" : "header-base",
90
+ isSticky ? "header-sticky" : "",
91
+ css ? `${css}` : "",
92
+ ]
93
+ .filter((cl) => cl.length)
94
+ .join(" ");
95
+
96
+ const headerContentClasses: string = [
97
+ "header-content",
98
+ isHeaderContentStart ? "header-content-start" : "",
99
+ isHeaderContentEnd ? "header-content-end" : "",
100
+ ]
101
+ .filter((cl) => cl.length)
102
+ .join(" ");
96
103
  </script>
97
104
 
98
105
  <nav class={klasses}>
@@ -16,9 +16,10 @@
16
16
 
17
17
  </style>
18
18
 
19
- <script>export let css = "";
20
- const containerClasses = [css ? `${css}` : ""].filter((c) => c.length);
21
- </script>
19
+ <script lang="ts">
20
+ export let css = "";
21
+ const containerClasses = [css ? `${css}` : ""].filter((c) => c.length);
22
+ </script>
22
23
 
23
24
  <nav class={containerClasses}>
24
25
  <ul class="header-nav">
@@ -21,8 +21,9 @@
21
21
 
22
22
  </style>
23
23
 
24
- <script>export let css = "";
25
- let klasses = ["header-nav-item", css ? `${css}` : ""].filter((cl) => cl && cl.length).join(" ");
24
+ <script lang="ts">
25
+ export let css = "";
26
+ let klasses: string = ["header-nav-item", css ? `${css}` : ""].filter(cl => cl && cl.length).join(' ');
26
27
  </script>
27
28
 
28
29
  <li class={klasses}>