@functionalcms/svelte-components 3.0.5 → 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 (55) 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 +137 -135
  18. package/dist/components/agnostic/Divider/Divider.svelte.d.ts +5 -8
  19. package/dist/components/agnostic/Drawer/Drawer.svelte +20 -16
  20. package/dist/components/agnostic/EmptyState/EmptyState.svelte +10 -7
  21. package/dist/components/agnostic/Header/Header.svelte +22 -15
  22. package/dist/components/agnostic/Header/HeaderNav.svelte +4 -3
  23. package/dist/components/agnostic/Header/HeaderNavItem.svelte +3 -2
  24. package/dist/components/agnostic/Icon/Icon.svelte +28 -20
  25. package/dist/components/agnostic/Loader/Loader.svelte +6 -3
  26. package/dist/components/agnostic/Progress/Progress.svelte +5 -4
  27. package/dist/components/agnostic/Spinner/Spinner.svelte +6 -3
  28. package/dist/components/agnostic/Table/Table.svelte +191 -134
  29. package/dist/components/agnostic/Tabs/TabButtonCustom.svelte +24 -12
  30. package/dist/components/agnostic/Tabs/Tabs.svelte +173 -104
  31. package/dist/components/agnostic/Tag/Tag.svelte +14 -10
  32. package/dist/components/agnostic/Tag/TagSlots.svelte +2 -1
  33. package/dist/components/agnostic/Toasts/Toasts.svelte +29 -19
  34. package/dist/components/agnostic/Tooltip/Tooltip.svelte +85 -68
  35. package/dist/components/agnostic/Tooltip/TooltipSlots.svelte +2 -1
  36. package/dist/components/blog/BlogDescription.svelte +6 -4
  37. package/dist/components/blog/BlogTitle.svelte +8 -6
  38. package/dist/components/form/Input.svelte +81 -52
  39. package/dist/components/form/Input.svelte.d.ts +2 -2
  40. package/dist/components/form/Select.svelte +40 -24
  41. package/dist/components/layouts/DefaultLayout.svelte +8 -5
  42. package/dist/components/layouts/Meta.svelte +7 -6
  43. package/dist/components/layouts/SimpleFooter.svelte +13 -3
  44. package/dist/components/layouts/Tracker.svelte +2 -1
  45. package/dist/components/layouts/TwoColumnsLayout.svelte +3 -2
  46. package/dist/components/menu/CollapsibleMenu.svelte +18 -13
  47. package/dist/components/menu/DynamicMenu.svelte +16 -10
  48. package/dist/components/menu/DynamicMenu.svelte.d.ts +1 -1
  49. package/dist/components/menu/HamburgerMenu.svelte +24 -18
  50. package/dist/components/menu/Menu.svelte +279 -219
  51. package/dist/components/menu/MenuItem.svelte +14 -10
  52. package/dist/components/menu/NavigationItems.svelte +18 -12
  53. package/dist/components/presentation/Carusel.svelte +77 -72
  54. package/dist/components/presentation/Gallery.svelte +14 -8
  55. package/package.json +9 -10
@@ -309,58 +309,87 @@ borders that visually conflict. */
309
309
  }
310
310
 
311
311
  </style>
312
- <script>export let label = "";
313
- export let id = "";
314
- export let labelCss = "";
315
- export let isLabelHidden = false;
316
- export let helpText = "";
317
- export let invalidText = "";
318
- export let hasLeftAddon = false;
319
- export let hasRightAddon = false;
320
- export let isInvalid = false;
321
- export let isInline = false;
322
- export let isRounded = false;
323
- export let isDisabled = void 0;
324
- export let css = "";
325
- export let isSkinned = true;
326
- export let isUnderlinedWithBackground = false;
327
- export let isUnderlined = false;
328
- export let size = "";
329
- export let type = "text";
330
- export let value = "";
331
- $: if (!value) value = "";
332
- $: inputType = type;
333
- $: labelClasses = [
334
- "label",
335
- isInvalid ? "label-error" : "",
336
- isInline ? "label-inline" : "",
337
- size ? `label-${size}` : "",
338
- isLabelHidden ? "screenreader-only" : "",
339
- labelCss ? labelCss : ""
340
- ].filter((c) => c).join(" ");
341
- $: inputClasses = [
342
- isSkinned ? "input" : "input-base",
343
- isRounded ? "input-rounded" : "",
344
- isUnderlined ? "input-underlined" : "",
345
- hasLeftAddon ? "input-has-left-addon" : "",
346
- hasRightAddon ? "input-has-right-addon" : "",
347
- isDisabled ? "disabled" : "",
348
- isInvalid ? "input-error" : "",
349
- isInline ? "input-inline" : "",
350
- isUnderlinedWithBackground ? "input-underlined-bg" : "",
351
- css ? css : "",
352
- size ? `input-${size}` : ""
353
- ].filter((c) => c).join(" ");
354
- $: invalidClasses = () => {
355
- return size ? `field-error-${size}` : "field-error";
356
- };
357
- $: helpClasses = () => {
358
- return size ? `field-help-${size}` : "field-help";
359
- };
360
- $: addonContainerClasses = () => "input-addon-container";
361
- const handleInput = (e) => {
362
- value = e.target.value;
363
- };
312
+ <script lang="ts">
313
+ // Looks like the way to propogate boilerplate events is to
314
+ // just declare in template like on:blur on:focus and so on
315
+ // https://github.com/sveltejs/svelte/issues/585
316
+ // Looks like this is what smelte is doing:
317
+ // https://github.com/matyunya/smelte/blob/master/src/components/TextField/TextField.svelte
318
+ export let label = "";
319
+ export let id = "";
320
+ export let labelCss = "";
321
+ export let isLabelHidden = false;
322
+ export let helpText = "";
323
+ export let invalidText = "";
324
+ export let hasLeftAddon = false;
325
+ export let hasRightAddon = false;
326
+ export let isInvalid = false;
327
+ export let isInline = false;
328
+ export let isRounded = false;
329
+ export let isDisabled = undefined;
330
+ export let css = "";
331
+ export let isSkinned = true;
332
+ export let isUnderlinedWithBackground = false;
333
+ export let isUnderlined = false;
334
+ export let size: "small" | "large" | "" = "";
335
+ export let type:
336
+ | "text"
337
+ | "textarea"
338
+ | "email"
339
+ | "search"
340
+ | "password"
341
+ | "tel"
342
+ | "number"
343
+ | "url"
344
+ | "month"
345
+ | "time"
346
+ | "week"
347
+ | "date"
348
+ | "datetime-local"
349
+ | "color" = "text";
350
+
351
+ export let value = "";
352
+
353
+ $: if (!value) value = "";
354
+ $: inputType = type;
355
+
356
+ $: labelClasses = [
357
+ "label",
358
+ isInvalid ? "label-error" : "",
359
+ isInline ? "label-inline" : "",
360
+ size ? `label-${size}` : "",
361
+ isLabelHidden ? "screenreader-only" : "",
362
+ labelCss ? labelCss : "",
363
+ ].filter(c => c).join(" ");
364
+
365
+ $: inputClasses = [
366
+ isSkinned ? "input" : "input-base",
367
+ isRounded ? "input-rounded" : "",
368
+ isUnderlined ? "input-underlined" : "",
369
+ hasLeftAddon ? "input-has-left-addon" : "",
370
+ hasRightAddon ? "input-has-right-addon" : "",
371
+ isDisabled ? "disabled" : "",
372
+ isInvalid ? "input-error" : "",
373
+ isInline ? "input-inline" : "",
374
+ isUnderlinedWithBackground ? "input-underlined-bg" : "",
375
+ css ? css : "",
376
+ size ? `input-${size}` : "",
377
+ ].filter(c => c).join(" ");
378
+
379
+ $: invalidClasses = () => {
380
+ return size ? `field-error-${size}` : "field-error";
381
+ };
382
+
383
+ $: helpClasses = () => {
384
+ return size ? `field-help-${size}` : "field-help";
385
+ };
386
+
387
+ $: addonContainerClasses = () => "input-addon-container";
388
+
389
+ const handleInput = (e: Event) => {
390
+ value = (e.target as HTMLInputElement).value;
391
+ }
392
+
364
393
  </script>
365
394
  <div class="w-100">
366
395
  <label class={labelClasses} for={id}>{label}</label>
@@ -18,8 +18,8 @@ declare const __propDef: {
18
18
  isSkinned?: boolean | undefined;
19
19
  isUnderlinedWithBackground?: boolean | undefined;
20
20
  isUnderlined?: boolean | undefined;
21
- size?: ("small" | "large" | "") | undefined;
22
- type?: ("text" | "textarea" | "email" | "search" | "password" | "tel" | "number" | "url" | "month" | "time" | "week" | "date" | "datetime-local" | "color") | undefined;
21
+ size?: "small" | "large" | "" | undefined;
22
+ type?: "text" | "textarea" | "email" | "search" | "password" | "tel" | "number" | "url" | "month" | "time" | "week" | "date" | "datetime-local" | "color" | undefined;
23
23
  value?: string | undefined;
24
24
  };
25
25
  events: {
@@ -80,30 +80,46 @@
80
80
 
81
81
  </style>
82
82
 
83
- <script>import { createEventDispatcher } from "svelte";
84
- export let uniqueId = "";
85
- export let name = "";
86
- export let labelCopy = "";
87
- export let options = [];
88
- export let size = "";
89
- export let multipleSize = 1;
90
- export let isMultiple = false;
91
- export let defaultOptionLabel = "Please select an option";
92
- export let isDisabled = false;
93
- export let isSkinned = true;
94
- export let css = "";
95
- export let singleSelected = "";
96
- export let multiSelected = [];
97
- const dispatch = createEventDispatcher();
98
- const changeHandler = () => {
99
- dispatch("selected", isMultiple ? multiSelected : singleSelected);
100
- };
101
- $: disable = isDisabled;
102
- $: classes = [
103
- isSkinned ? "select" : "select-base",
104
- size ? `select-${size}` : "",
105
- css ? `${css}` : ""
106
- ].filter((cl) => cl).join(" ");
83
+ <script lang="ts">
84
+ import { createEventDispatcher } from "svelte";
85
+
86
+ export let uniqueId = "";
87
+ export let name = "";
88
+ export let labelCopy = "";
89
+ export let options = [];
90
+ export let size: "small" | "large" | "" = "";
91
+ export let multipleSize = 1;
92
+ export let isMultiple = false;
93
+ export let defaultOptionLabel = "Please select an option";
94
+ export let isDisabled = false;
95
+ export let isSkinned = true;
96
+ export let css = "";
97
+
98
+ // singleSelected can be used for two-way bindings
99
+ export let singleSelected = "";
100
+
101
+ // If we don't make it seems Svelte gets confused:
102
+ // https://github.com/sveltejs/svelte/issues/5644
103
+ // And so we cannot share singleSelected above :(
104
+ export let multiSelected = [];
105
+
106
+ const dispatch = createEventDispatcher();
107
+ // This will emit an event object that has a event.detail prop
108
+ // This will contain the value of the selected option value. See
109
+ // https://svelte.dev/docs#createEventDispatcher
110
+ const changeHandler = () => {
111
+ dispatch("selected", isMultiple ? multiSelected : singleSelected);
112
+ };
113
+
114
+ $: disable = isDisabled;
115
+ $: classes = [
116
+ isSkinned ? "select" : "select-base",
117
+ size ? `select-${size}` : "",
118
+ css ? `${css}` : "",
119
+ ]
120
+ .filter((cl) => cl)
121
+ .join(" ");
122
+
107
123
  </script>
108
124
 
109
125
  <label class="screenreader-only" for={uniqueId}> {labelCopy} </label>
@@ -1,8 +1,11 @@
1
- <script>import { page } from "$app/stores";
2
- export let headerIsSticky = false;
3
- export let tracker = "";
4
- export let canonicalUrl = "";
5
- $: headerCss = headerIsSticky ? "sticky" : "";
1
+ <script lang="ts">
2
+ import { page } from '$app/stores';
3
+
4
+ export let headerIsSticky: boolean = false;
5
+ export let tracker: string = '';
6
+ export let canonicalUrl: string = '';
7
+
8
+ $: headerCss = headerIsSticky ? 'sticky' : '';
6
9
  </script>
7
10
 
8
11
  <svelte:head>
@@ -1,9 +1,10 @@
1
- <script>export let title = "";
2
- export let description = "";
3
- export let keywords = "";
4
- export let robots = "index, follow";
5
- export let charset = "UTF-8";
6
- export let viewport = "width=device-width, initial-scale=1.0";
1
+ <script lang="ts">
2
+ export let title = "";
3
+ export let description = "";
4
+ export let keywords = "";
5
+ export let robots = "index, follow";
6
+ export let charset = "UTF-8";
7
+ export let viewport = "width=device-width, initial-scale=1.0";
7
8
  </script>
8
9
 
9
10
  <svelte:head>
@@ -5,9 +5,19 @@
5
5
  }
6
6
  </style>
7
7
 
8
- <script>export let companyName = "";
9
- export let motto = "";
10
- export let logoUrl;
8
+ <script lang='ts'>
9
+ /**
10
+ * @type {string}
11
+ */
12
+ export let companyName = ""
13
+ /**
14
+ * @type {string}
15
+ */
16
+ export let motto = ""
17
+ /**
18
+ * @type {string}
19
+ */
20
+ export let logoUrl: string
11
21
  </script>
12
22
 
13
23
  <aside class="items-center grid-flow-col">
@@ -1,4 +1,5 @@
1
- <script>export let domain;
1
+ <script lang="ts">
2
+ export let domain;
2
3
  </script>
3
4
 
4
5
  <svelte:head>
@@ -1,7 +1,8 @@
1
1
  <style></style>
2
2
 
3
- <script>export let leftCss = "w50p";
4
- export let rightCss = "w50p";
3
+ <script lang="ts">
4
+ export let leftCss: string = 'w50p'
5
+ export let rightCss: string = 'w50p'
5
6
  </script>
6
7
 
7
8
  <section class="flex flex-row-dynamic fw">
@@ -1,16 +1,21 @@
1
- <script>import { Orientation, Placement } from "../Styling.js";
2
- import ColumnMenu from "./NavigationItems.svelte";
3
- import { HeaderNavigationItem, defaultCss } from "./Menu.js";
4
- import { mergedClasses } from "../CssHelper.js";
5
- import Button from "../agnostic/Button/Button.svelte";
6
- export let css = defaultCss;
7
- export let contentPosition = Placement.End;
8
- export let orientation = Orientation.Column;
9
- export let localPages = [];
10
- const cssClasses = { ...defaultCss, ...css };
11
- $: expanded = false;
12
- $: showContentBeforeButton = contentPosition == Placement.Start;
13
- $: buttonCss = mergedClasses(cssClasses.buttonCss);
1
+ <script lang="ts">
2
+ import { Orientation, Placement } from '../Styling.js';
3
+ import ColumnMenu from './NavigationItems.svelte';
4
+ import { HeaderNavigationItem, defaultCss } from './Menu.js';
5
+ import { mergedClasses } from '../CssHelper.js';
6
+ import Button from '../agnostic/Button/Button.svelte';
7
+
8
+ export let css: { buttonCss: string[]; container: string[]; link: string[] } = defaultCss;
9
+ export let contentPosition: Placement = Placement.End;
10
+ export let orientation: Orientation = Orientation.Column;
11
+
12
+ export let localPages: Array<HeaderNavigationItem> = [];
13
+
14
+ const cssClasses = { ...defaultCss, ...css };
15
+
16
+ $: expanded = false;
17
+ $: showContentBeforeButton = contentPosition == Placement.Start;
18
+ $: buttonCss = mergedClasses(cssClasses.buttonCss);
14
19
  </script>
15
20
 
16
21
  {#if expanded && showContentBeforeButton}
@@ -1,13 +1,19 @@
1
- <script>import { HeaderNavigationItem, selectVisible, defaultCss } from "./Menu.js";
2
- import { isAuthenticated } from "./authentication.js";
3
- import { page } from "$app/stores";
4
- import { mergedClasses } from "../CssHelper.js";
5
- export let css;
6
- const cssClasses = { ...defaultCss, ...css };
7
- export let localPages = [];
8
- $: pagesVisiblity = isAuthenticated($page);
9
- $: visibleNavItems = selectVisible(localPages, pagesVisiblity);
10
- const klasses = mergedClasses("flex", "flex-dynamic-row", cssClasses.container);
1
+ <script lang="ts">
2
+ import { HeaderNavigationItem, selectVisible, defaultCss } from './Menu.js';
3
+ import { isAuthenticated } from './authentication.js';
4
+ import { page } from '$app/stores';
5
+ import { mergedClasses } from '../CssHelper.js';
6
+
7
+ export let css: { container: string[] } = { container: [] };
8
+
9
+ const cssClasses = {...defaultCss, ...css}
10
+
11
+ export let localPages: Array<HeaderNavigationItem> = [];
12
+
13
+ $: pagesVisiblity = isAuthenticated($page);
14
+ $: visibleNavItems = selectVisible(localPages, pagesVisiblity);
15
+
16
+ const klasses = mergedClasses('flex', 'flex-dynamic-row', cssClasses.container);
11
17
  </script>
12
18
 
13
19
  <nav class={klasses}>
@@ -2,7 +2,7 @@ import { SvelteComponentTyped } from "svelte";
2
2
  import { HeaderNavigationItem } from './Menu.js';
3
3
  declare const __propDef: {
4
4
  props: {
5
- css: {
5
+ css?: {
6
6
  container: string[];
7
7
  };
8
8
  localPages?: Array<HeaderNavigationItem>;
@@ -1,21 +1,27 @@
1
- <script>import { HeaderNavigationItem, defaultCss } from "./Menu.js";
2
- import { afterNavigate } from "$app/navigation";
3
- import { Orientation, Placement } from "../Styling.js";
4
- import ColumnMenu from "./NavigationItems.svelte";
5
- import { mergedClasses } from "../CssHelper.js";
6
- import Drawer from "../agnostic/Drawer/Drawer.svelte";
7
- import Button from "../agnostic/Button/Button.svelte";
8
- export let css = defaultCss;
9
- export let noBorder = false;
10
- export let placement = Placement.Start;
11
- export let localPages = [];
12
- const cssClasses = { ...defaultCss, ...css };
13
- let drawer = null;
14
- const assignDrawerRef = (ev) => {
15
- drawer = ev.detail.instance;
16
- };
17
- afterNavigate(() => drawer?.hide());
18
- const buttonCss = mergedClasses("hamburger-handle", noBorder, cssClasses.buttonCss);
1
+ <script lang="ts">
2
+ import { HeaderNavigationItem, defaultCss } from './Menu.js';
3
+ import { afterNavigate } from '$app/navigation';
4
+ import { Orientation, Placement } from '../Styling.js';
5
+ import ColumnMenu from './NavigationItems.svelte';
6
+ import { mergedClasses } from '../CssHelper.js';
7
+ import Drawer from '../agnostic/Drawer/Drawer.svelte';
8
+ import Button from '../agnostic/Button/Button.svelte';
9
+
10
+ export let css: { buttonCss: string[]; container: string[]; link: string[] } = defaultCss;
11
+
12
+ export let noBorder: boolean = false;
13
+ export let placement: Placement = Placement.Start;
14
+ export let localPages: Array<HeaderNavigationItem> = [];
15
+
16
+ const cssClasses = { ...defaultCss, ...css };
17
+
18
+ let drawer: any = null;
19
+ const assignDrawerRef = (ev: any) => {
20
+ drawer = ev.detail.instance;
21
+ };
22
+ afterNavigate(() => drawer?.hide());
23
+
24
+ const buttonCss = mergedClasses('hamburger-handle', noBorder, cssClasses.buttonCss);
19
25
  </script>
20
26
 
21
27
  <Button