@lavalogic/scoria 0.40.14 → 0.40.15

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 (138) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +35 -46
  3. package/dist/Components/AccordionGroupButton.svelte +68 -76
  4. package/dist/Components/Action.svelte +103 -135
  5. package/dist/Components/AlertModal.svelte +171 -190
  6. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +614 -697
  7. package/dist/Components/Base/BaseModal.svelte +90 -116
  8. package/dist/Components/Base/ContextWrapper.svelte +67 -72
  9. package/dist/Components/Base/Pagination.svelte +173 -196
  10. package/dist/Components/Base/Snippets.svelte +34 -36
  11. package/dist/Components/BigRadioSet.svelte +36 -38
  12. package/dist/Components/Bubble.svelte +78 -101
  13. package/dist/Components/Button.svelte +175 -208
  14. package/dist/Components/Checkbox.svelte +75 -86
  15. package/dist/Components/CollapsibleCard.svelte +72 -86
  16. package/dist/Components/CollapsibleMenuGroup.svelte +52 -56
  17. package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +39 -64
  18. package/dist/Components/Contexts/ContextMenu.svelte +141 -156
  19. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  20. package/dist/Components/Contexts/ContextMenuOption.svelte +53 -60
  21. package/dist/Components/Contexts/Toast.svelte +81 -86
  22. package/dist/Components/Contexts/ToastContainer.svelte +58 -62
  23. package/dist/Components/Contexts/Tooltip.svelte +36 -37
  24. package/dist/Components/DataMatrixIcon.svelte +95 -108
  25. package/dist/Components/DateInput.svelte +118 -146
  26. package/dist/Components/DatePicker.svelte +255 -294
  27. package/dist/Components/DesktopModal.svelte +70 -90
  28. package/dist/Components/Dial.svelte +167 -197
  29. package/dist/Components/DimensionInput.svelte +124 -169
  30. package/dist/Components/DragMenu/DragMenuHolder.svelte +98 -114
  31. package/dist/Components/DragMenu/DraggableCard.svelte +64 -76
  32. package/dist/Components/FileCard.svelte +21 -24
  33. package/dist/Components/FileUpload.svelte +190 -225
  34. package/dist/Components/GridInput.svelte +159 -196
  35. package/dist/Components/GridInputSet.svelte +24 -29
  36. package/dist/Components/HorizontalTabGroup.svelte +73 -89
  37. package/dist/Components/HorizontalTabGroupButton.svelte +40 -44
  38. package/dist/Components/Icon.svelte +99 -128
  39. package/dist/Components/Icons.js +357 -357
  40. package/dist/Components/InfoAlert.svelte +35 -38
  41. package/dist/Components/LoadingAnimation.svelte +691 -755
  42. package/dist/Components/LoadingModal.svelte +36 -44
  43. package/dist/Components/LoadingOverlay.svelte +22 -26
  44. package/dist/Components/Modal.svelte +204 -254
  45. package/dist/Components/MultiSelect.svelte +186 -216
  46. package/dist/Components/Nav/Nav.svelte +94 -110
  47. package/dist/Components/Nav/NavServiceMenuList.svelte +57 -61
  48. package/dist/Components/Nav/NavTab.svelte +58 -62
  49. package/dist/Components/Nav/ServiceMenuItem.svelte +103 -111
  50. package/dist/Components/Nav/ServicesNav.svelte +72 -79
  51. package/dist/Components/NumberInput.svelte +121 -155
  52. package/dist/Components/OptionCards.svelte +62 -73
  53. package/dist/Components/PageHeading.svelte +23 -25
  54. package/dist/Components/PasswordInput.svelte +69 -88
  55. package/dist/Components/PopoverButton.svelte +69 -82
  56. package/dist/Components/Portal.svelte +29 -35
  57. package/dist/Components/ProgressBubble.svelte +91 -106
  58. package/dist/Components/QuerySelect.svelte +260 -346
  59. package/dist/Components/SidebarPanel.svelte +34 -36
  60. package/dist/Components/SingleSelect.svelte +196 -244
  61. package/dist/Components/StepButton.svelte +65 -70
  62. package/dist/Components/StepForm.svelte +115 -135
  63. package/dist/Components/Switch.svelte +57 -69
  64. package/dist/Components/Table/ARCHITECTURE.md +298 -298
  65. package/dist/Components/Table/Body/QuickSearchCell.svelte +578 -655
  66. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +42 -51
  67. package/dist/Components/Table/Body/Rows/ColumnList.svelte +42 -58
  68. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +403 -442
  69. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +51 -78
  70. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +165 -184
  71. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +110 -123
  72. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +134 -160
  73. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +190 -231
  74. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +82 -104
  75. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +52 -87
  76. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +122 -150
  77. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +132 -159
  78. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +190 -236
  79. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +173 -211
  80. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +204 -244
  81. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +140 -177
  82. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +188 -217
  83. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +173 -193
  84. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +166 -187
  85. package/dist/Components/Table/Body/Rows/TableRow.svelte +245 -288
  86. package/dist/Components/Table/Body/TableBody.svelte +141 -154
  87. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +35 -41
  88. package/dist/Components/Table/Headers/SelectAllHeader.svelte +24 -30
  89. package/dist/Components/Table/Headers/TableHead.svelte +348 -402
  90. package/dist/Components/Table/Misc/ColumnPanel.svelte +37 -39
  91. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +35 -39
  92. package/dist/Components/Table/Misc/FilterInput.svelte +556 -619
  93. package/dist/Components/Table/Misc/FilterPanel.svelte +170 -183
  94. package/dist/Components/Table/Misc/FilterPanelModal.svelte +25 -31
  95. package/dist/Components/Table/Misc/ShareViewModal.svelte +252 -281
  96. package/dist/Components/Table/Misc/SidePanel.svelte +32 -35
  97. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +574 -629
  98. package/dist/Components/Table/Misc/TableFooter.svelte +326 -332
  99. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +134 -140
  100. package/dist/Components/Table/Misc/TableSidebar.svelte +183 -198
  101. package/dist/Components/Table/Misc/TableViewDropdown.svelte +83 -103
  102. package/dist/Components/Table/Misc/ToolboxPanel.svelte +83 -100
  103. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +88 -107
  104. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +163 -190
  105. package/dist/Components/Table/NestedTable.svelte +102 -128
  106. package/dist/Components/Table/Table.svelte +531 -663
  107. package/dist/Components/Test/TestContextConsumer.svelte +11 -13
  108. package/dist/Components/TextArea.svelte +95 -130
  109. package/dist/Components/TextInput.svelte +125 -176
  110. package/dist/Components/ThreeStateRadio.svelte +111 -130
  111. package/dist/Components/Touch/BoolCard.svelte +33 -45
  112. package/dist/Components/Touch/DateModal.svelte +164 -204
  113. package/dist/Components/Touch/EditCard.svelte +48 -59
  114. package/dist/Components/Touch/InfoCard.svelte +28 -31
  115. package/dist/Components/Touch/InfoTextCard.svelte +26 -28
  116. package/dist/Components/Touch/ModalExplanation.svelte +15 -17
  117. package/dist/Components/Touch/NumberKeyboard.svelte +181 -218
  118. package/dist/Components/Touch/NumberModal.svelte +59 -79
  119. package/dist/Components/Touch/PlusMinusCard.svelte +43 -46
  120. package/dist/Components/Touch/SelectModal.svelte +111 -126
  121. package/dist/Components/Touch/SummaryCard.svelte +80 -93
  122. package/dist/Components/Touch/TextAreaModal.svelte +72 -94
  123. package/dist/Components/Touch/TextModal.svelte +77 -105
  124. package/dist/Components/Touch/TouchCard.svelte +31 -33
  125. package/dist/Components/Touch/TouchModal.svelte +214 -270
  126. package/dist/Components/Touch/UtilityButton.svelte +88 -109
  127. package/dist/Components/VerticalTabGroup.svelte +60 -78
  128. package/dist/Components/VerticalTabGroupButton.svelte +54 -58
  129. package/dist/Helpers/Datamatrix.d.ts +19 -19
  130. package/dist/Helpers/Datamatrix.js +291 -291
  131. package/dist/Types/Examples/ExampleModal.svelte +31 -35
  132. package/dist/scss/_basics.scss +12 -12
  133. package/dist/scss/_colours.scss +134 -134
  134. package/dist/scss/_mixins.scss +3392 -3392
  135. package/dist/scss/_motion.scss +57 -57
  136. package/dist/scss/_sizing.scss +85 -85
  137. package/dist/scss/_transitions.scss +8 -8
  138. package/package.json +1 -1
@@ -1,111 +1,90 @@
1
- <svelte:options runes />
2
-
3
- <script lang="ts">
4
- import { passthrough } from '../../Helpers/Helpers.svelte.js';
5
- import { ColourSet } from '../../scss/colours.js';
6
- import { Side } from '../../Types/Internal/Side.js';
7
- import { Size } from '../../Types/Internal/Size.js';
8
- import { onMount } from 'svelte';
9
- import DataMatrixIcon from '../DataMatrixIcon.svelte';
10
- import Icon from '../Icon.svelte';
11
- import type { DataMatrixSvg } from '../DataMatrixIconProps.js';
12
- import type { UtilityButtonProps } from './UtilityButtonProps.js';
13
- let {
14
- type = 'button',
15
- colourSet = ColourSet.Secondary,
16
- icon,
17
- side = Side.Top,
18
- size: explicitSize,
19
- notifications,
20
- ref = $bindable(),
21
- disabled = false,
22
- label,
23
- onEditBarcode,
24
- onclick,
25
- onfocus,
26
- onblur,
27
- children,
28
- }: UtilityButtonProps = $props();
29
-
30
- let isMounted = $state(false);
31
-
32
- onMount(() => {
33
- isMounted = true;
34
- });
35
-
36
- const size: Size = $derived.by(() => {
37
- if (!isMounted) {
38
- return Size.DoubleXLarge;
39
- }
40
- if (explicitSize !== undefined) {
41
- return explicitSize;
42
- }
43
- if (icon instanceof SVGSVGElement) {
44
- return Size.DoubleXLarge;
45
- }
46
- return icon?.size ?? Size.DoubleXLarge;
47
- });
48
- let slotSpan: HTMLSpanElement | undefined = $state();
49
- </script>
50
-
51
- <button
52
- {type}
53
- class:call-to-action={colourSet === ColourSet.Primary || colourSet === ColourSet.CallToAction}
54
- {disabled}
55
- class:left={side == Side.Left}
56
- class:right={side == Side.Right}
57
- class:top={side == Side.Top}
58
- class:bottom={side == Side.Bottom}
59
- bind:this={ref}
60
- aria-label={label}
61
- {onclick}
62
- {onfocus}
63
- {onblur}
64
- oncontextmenu={(e) => {
65
- if (onEditBarcode) {
66
- e.preventDefault();
67
- onEditBarcode();
68
- }
69
- }}
70
- onkeydown={passthrough}
71
- >
72
- {#if isMounted && icon}
73
- <div
74
- class="expand"
75
- class:left={side == Side.Left}
76
- class:right={side == Side.Right}
77
- class:top={side == Side.Top}
78
- class:bottom={side == Side.Bottom}
79
- >
80
- {#if icon instanceof SVGSVGElement}
81
- <!-- SECURITY: UtilityButton accepts a generic SVGSVGElement here for backwards
82
- compatibility. The cast to DataMatrixSvg trusts the caller; DataMatrixIcon
83
- additionally sanitises the cloned subtree before mounting. -->
84
- <DataMatrixIcon
85
- title={slotSpan?.textContent ?? '{unknown}'}
86
- icon={{ kind: 'svg', svg: icon as DataMatrixSvg }}
87
- />
88
- {:else}
89
- {#if notifications}
90
- <span class="notification">{notifications}</span>
91
- {/if}
92
-
93
- <Icon
94
- {...icon}
95
- {size}
96
- />
97
- {/if}
98
- </div>
99
- {/if}
100
- <span class="utility-label">
101
- {#if notifications && icon instanceof SVGSVGElement}
102
- <span class="notification-on-text">{notifications}</span>
103
- {/if}<span bind:this={slotSpan}
104
- >{#if children}{@render children()}{/if}</span
105
- >
106
- </span>
107
- </button>
108
-
1
+ <svelte:options runes />
2
+
3
+ <script lang="ts">import { passthrough } from "../../Helpers/Helpers.svelte.js";
4
+ import { ColourSet } from "../../scss/colours.js";
5
+ import { Side } from "../../Types/Internal/Side.js";
6
+ import { Size } from "../../Types/Internal/Size.js";
7
+ import { onMount } from "svelte";
8
+ import DataMatrixIcon from "../DataMatrixIcon.svelte";
9
+ import Icon from "../Icon.svelte";
10
+ let { type = "button", colourSet = ColourSet.Secondary, icon, side = Side.Top, size: explicitSize, notifications, ref = $bindable(), disabled = false, label, onEditBarcode, onclick, onfocus, onblur, children } = $props();
11
+ let isMounted = $state(false);
12
+ onMount(() => {
13
+ isMounted = true;
14
+ });
15
+ const size = $derived.by(() => {
16
+ if (!isMounted) {
17
+ return Size.DoubleXLarge;
18
+ }
19
+ if (explicitSize !== undefined) {
20
+ return explicitSize;
21
+ }
22
+ if (icon instanceof SVGSVGElement) {
23
+ return Size.DoubleXLarge;
24
+ }
25
+ return icon?.size ?? Size.DoubleXLarge;
26
+ });
27
+ let slotSpan = $state();
28
+ </script>
29
+
30
+ <button
31
+ {type}
32
+ class:call-to-action={colourSet === ColourSet.Primary || colourSet === ColourSet.CallToAction}
33
+ {disabled}
34
+ class:left={side == Side.Left}
35
+ class:right={side == Side.Right}
36
+ class:top={side == Side.Top}
37
+ class:bottom={side == Side.Bottom}
38
+ bind:this={ref}
39
+ aria-label={label}
40
+ {onclick}
41
+ {onfocus}
42
+ {onblur}
43
+ oncontextmenu={(e) => {
44
+ if (onEditBarcode) {
45
+ e.preventDefault();
46
+ onEditBarcode();
47
+ }
48
+ }}
49
+ onkeydown={passthrough}
50
+ >
51
+ {#if isMounted && icon}
52
+ <div
53
+ class="expand"
54
+ class:left={side == Side.Left}
55
+ class:right={side == Side.Right}
56
+ class:top={side == Side.Top}
57
+ class:bottom={side == Side.Bottom}
58
+ >
59
+ {#if icon instanceof SVGSVGElement}
60
+ <!-- SECURITY: UtilityButton accepts a generic SVGSVGElement here for backwards
61
+ compatibility. The cast to DataMatrixSvg trusts the caller; DataMatrixIcon
62
+ additionally sanitises the cloned subtree before mounting. -->
63
+ <DataMatrixIcon
64
+ title={slotSpan?.textContent ?? '{unknown}'}
65
+ icon={{ kind: 'svg', svg: icon as DataMatrixSvg }}
66
+ />
67
+ {:else}
68
+ {#if notifications}
69
+ <span class="notification">{notifications}</span>
70
+ {/if}
71
+
72
+ <Icon
73
+ {...icon}
74
+ {size}
75
+ />
76
+ {/if}
77
+ </div>
78
+ {/if}
79
+ <span class="utility-label">
80
+ {#if notifications && icon instanceof SVGSVGElement}
81
+ <span class="notification-on-text">{notifications}</span>
82
+ {/if}<span bind:this={slotSpan}
83
+ >{#if children}{@render children()}{/if}</span
84
+ >
85
+ </span>
86
+ </button>
87
+
109
88
  <style>button {
110
89
  background-color: #f4f7f9;
111
90
  box-sizing: border-box;
@@ -194,4 +173,4 @@ button:not([disabled]).call-to-action:not([disabled]):focus, button:not([disable
194
173
  }
195
174
  button:not([disabled]).call-to-action:not([disabled]):focus {
196
175
  outline-offset: -2px;
197
- }</style>
176
+ }</style>
@@ -1,81 +1,63 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="CommonDenominator"
6
- >
7
- import { readJSON } from '../Helpers/Storage.js';
8
- import { onMount, untrack } from 'svelte';
9
- import VerticalTabGroupButton from './VerticalTabGroupButton.svelte';
10
- import type { VerticalTabGroupProps } from './VerticalTabGroupProps.js';
11
- const {
12
- name,
13
- tabs,
14
- selected,
15
- style,
16
- noscroll,
17
- noTabMessage,
18
- nohistory = false,
19
- dense = false,
20
- }: VerticalTabGroupProps<CommonDenominator> = $props();
21
-
22
- const isNonEmptyString = (raw: unknown): raw is string =>
23
- typeof raw === 'string' && raw.length > 0;
24
-
25
- const storageKey = (key: string): string => `scoria-vertical-tab-group:${key}:active-tab`;
26
-
27
- onMount(() => {
28
- if (name && !nohistory) {
29
- const tabName = readJSON(sessionStorage, storageKey(name), isNonEmptyString, '');
30
- if (tabName) {
31
- tabs.find((it) => it.label === tabName)?.onclick();
32
- }
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="CommonDenominator"
6
+ >import { readJSON } from "../Helpers/Storage.js";
7
+ import { onMount, untrack } from "svelte";
8
+ import VerticalTabGroupButton from "./VerticalTabGroupButton.svelte";
9
+ const { name, tabs, selected, style, noscroll, noTabMessage, nohistory = false, dense = false } = $props();
10
+ const isNonEmptyString = (raw) => typeof raw === "string" && raw.length > 0;
11
+ const storageKey = (key) => `scoria-vertical-tab-group:${key}:active-tab`;
12
+ onMount(() => {
13
+ if (name && !nohistory) {
14
+ const tabName = readJSON(sessionStorage, storageKey(name), isNonEmptyString, "");
15
+ if (tabName) {
16
+ tabs.find((it) => it.label === tabName)?.onclick();
33
17
  }
34
- });
35
-
36
- $effect(() => {
37
- if (name && selected) {
38
- untrack(() => {
39
- try {
40
- sessionStorage.setItem(storageKey(name), JSON.stringify(selected.label));
41
- } catch {
42
- // storage unavailable (private browsing, quota); persistence is best-effort
43
- }
44
- });
45
- }
46
- });
47
- </script>
48
-
49
- <div
50
- class="wrapper"
51
- class:noscroll
52
- class:dense
53
- {style}
54
- >
55
- <div class="tabs">
56
- {#each tabs as option (option.label)}
57
- <VerticalTabGroupButton
58
- {option}
59
- selected={selected?.label === option.label}
60
- />
61
- {/each}
62
- </div>
63
-
64
- <div
65
- class="content"
66
- class:noscroll
67
- class:dense
68
- >
69
- {#if selected}
70
- {@render selected.content(selected.args)}
71
- {:else}
72
- <div class="wrapper bg">
73
- <span class="red">{noTabMessage ?? 'No Tab Selected'}</span>
74
- </div>
75
- {/if}
76
- </div>
77
- </div>
78
-
18
+ }
19
+ });
20
+ $effect(() => {
21
+ if (name && selected) {
22
+ untrack(() => {
23
+ try {
24
+ sessionStorage.setItem(storageKey(name), JSON.stringify(selected.label));
25
+ } catch {}
26
+ });
27
+ }
28
+ });
29
+ </script>
30
+
31
+ <div
32
+ class="wrapper"
33
+ class:noscroll
34
+ class:dense
35
+ {style}
36
+ >
37
+ <div class="tabs">
38
+ {#each tabs as option (option.label)}
39
+ <VerticalTabGroupButton
40
+ {option}
41
+ selected={selected?.label === option.label}
42
+ />
43
+ {/each}
44
+ </div>
45
+
46
+ <div
47
+ class="content"
48
+ class:noscroll
49
+ class:dense
50
+ >
51
+ {#if selected}
52
+ {@render selected.content(selected.args)}
53
+ {:else}
54
+ <div class="wrapper bg">
55
+ <span class="red">{noTabMessage ?? 'No Tab Selected'}</span>
56
+ </div>
57
+ {/if}
58
+ </div>
59
+ </div>
60
+
79
61
  <style>.bg {
80
62
  padding: 1.5rem;
81
63
  background-color: #f9e9e9;
@@ -124,4 +106,4 @@
124
106
  .wrapper .content.dense {
125
107
  flex-grow: 0;
126
108
  overflow: visible;
127
- }</style>
109
+ }</style>
@@ -1,60 +1,56 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="Args"
6
- >
7
- import { useAsyncFlag } from '../Helpers/AsyncFlag.svelte.js';
8
- import { Colour } from '../scss/colours.js';
9
- import { Size } from '../Types/Internal/Size.js';
10
- import Icon from './Icon.svelte';
11
- import type { TabGroupButtonProps } from './TabGroupButtonProps.js';
12
-
13
- const { option, selected }: TabGroupButtonProps<Args> = $props();
14
-
15
- const isValid = useAsyncFlag(() => option.isValid, true);
16
- const disabled = useAsyncFlag(() => option.disabled, false);
17
- const visible = useAsyncFlag(() => option.visible, true);
18
- </script>
19
-
20
- <button
21
- class:selected
22
- disabled={disabled.value}
23
- onclick={() => {
24
- option.onclick();
25
- }}
26
- type="button"
27
- class="tab"
28
- class:invalid={!isValid.value}
29
- class:hidden={!visible.value}
30
- >
31
- <div
32
- class="bordered"
33
- class:invalid={!isValid.value}
34
- >
35
- {#if option.iconLeft}
36
- <Icon
37
- {...option.iconLeft}
38
- colour={Colour['$brand-primary']}
39
- />
40
- {/if}
41
- {option.label}
42
- {#if !isValid.value}
43
- <Icon
44
- name="error"
45
- colour={Colour['$error-border']}
46
- size={Size.Small}
47
- />
48
- {:else if option.iconRight}
49
- <Icon
50
- colour={Colour['$brand-primary']}
51
- size={Size.Small}
52
- {...option.iconRight}
53
- />
54
- {/if}
55
- </div>
56
- </button>
57
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="Args"
6
+ >import { useAsyncFlag } from "../Helpers/AsyncFlag.svelte.js";
7
+ import { Colour } from "../scss/colours.js";
8
+ import { Size } from "../Types/Internal/Size.js";
9
+ import Icon from "./Icon.svelte";
10
+ const { option, selected } = $props();
11
+ const isValid = useAsyncFlag(() => option.isValid, true);
12
+ const disabled = useAsyncFlag(() => option.disabled, false);
13
+ const visible = useAsyncFlag(() => option.visible, true);
14
+ </script>
15
+
16
+ <button
17
+ class:selected
18
+ disabled={disabled.value}
19
+ onclick={() => {
20
+ option.onclick();
21
+ }}
22
+ type="button"
23
+ class="tab"
24
+ class:invalid={!isValid.value}
25
+ class:hidden={!visible.value}
26
+ >
27
+ <div
28
+ class="bordered"
29
+ class:invalid={!isValid.value}
30
+ >
31
+ {#if option.iconLeft}
32
+ <Icon
33
+ {...option.iconLeft}
34
+ colour={Colour['$brand-primary']}
35
+ />
36
+ {/if}
37
+ {option.label}
38
+ {#if !isValid.value}
39
+ <Icon
40
+ name="error"
41
+ colour={Colour['$error-border']}
42
+ size={Size.Small}
43
+ />
44
+ {:else if option.iconRight}
45
+ <Icon
46
+ colour={Colour['$brand-primary']}
47
+ size={Size.Small}
48
+ {...option.iconRight}
49
+ />
50
+ {/if}
51
+ </div>
52
+ </button>
53
+
58
54
  <style>button.tab.hidden {
59
55
  display: none !important;
60
56
  }
@@ -101,4 +97,4 @@
101
97
  }
102
98
  .tab.selected.invalid {
103
99
  border-bottom-color: #aa1414;
104
- }</style>
100
+ }</style>
@@ -1,19 +1,19 @@
1
- import type { DataMatrixSvg } from '../Components/DataMatrixIconProps.js';
2
-
3
- export interface IDatamatrixOptions {
4
- msg: string;
5
- dim?: number;
6
- rct?: number;
7
- pad?: number;
8
- pal?: [string, string];
9
- vrb?: number;
10
- }
11
-
12
- /**
13
- * Build a DATAMatrix barcode SVG. The returned element is branded as
14
- * {@link DataMatrixSvg} so it can be passed directly to
15
- * `DataMatrixIcon` without further casting. The underlying JS
16
- * implementation produces a vanilla `SVGSVGElement`; the brand is a
17
- * compile-time discipline only.
18
- */
19
- export declare function DATAMatrix(value: IDatamatrixOptions | string): DataMatrixSvg;
1
+ import type { DataMatrixSvg } from '../Components/DataMatrixIconProps.js';
2
+
3
+ export interface IDatamatrixOptions {
4
+ msg: string;
5
+ dim?: number;
6
+ rct?: number;
7
+ pad?: number;
8
+ pal?: [string, string];
9
+ vrb?: number;
10
+ }
11
+
12
+ /**
13
+ * Build a DATAMatrix barcode SVG. The returned element is branded as
14
+ * {@link DataMatrixSvg} so it can be passed directly to
15
+ * `DataMatrixIcon` without further casting. The underlying JS
16
+ * implementation produces a vanilla `SVGSVGElement`; the brand is a
17
+ * compile-time discipline only.
18
+ */
19
+ export declare function DATAMatrix(value: IDatamatrixOptions | string): DataMatrixSvg;