@lavalogic/scoria 0.40.32 → 0.40.33

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 (135) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +28 -28
  3. package/dist/Components/AccordionGroupButton.svelte +60 -60
  4. package/dist/Components/Action.svelte +48 -48
  5. package/dist/Components/AlertModal.svelte +102 -102
  6. package/dist/Components/Base/ContextWrapper.svelte +45 -45
  7. package/dist/Components/Base/Pagination.svelte +135 -135
  8. package/dist/Components/Base/Snippets.svelte +25 -25
  9. package/dist/Components/BigRadioSet.svelte +34 -34
  10. package/dist/Components/Bubble.svelte +38 -38
  11. package/dist/Components/Button.svelte +83 -83
  12. package/dist/Components/Checkbox.svelte +71 -71
  13. package/dist/Components/CollapsibleCard.svelte +59 -59
  14. package/dist/Components/CollapsibleMenuGroup.svelte +43 -43
  15. package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +101 -101
  16. package/dist/Components/Contexts/ContextMenu.svelte +76 -76
  17. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  18. package/dist/Components/Contexts/ContextMenuOption.svelte +38 -38
  19. package/dist/Components/Contexts/Toast.svelte +71 -71
  20. package/dist/Components/Contexts/ToastContainer.svelte +34 -34
  21. package/dist/Components/Contexts/Tooltip.svelte +32 -32
  22. package/dist/Components/DataMatrixIcon.svelte +37 -37
  23. package/dist/Components/DateInput.svelte +80 -80
  24. package/dist/Components/DatePicker.svelte +86 -86
  25. package/dist/Components/DesktopModal.svelte +65 -65
  26. package/dist/Components/Dial.svelte +35 -35
  27. package/dist/Components/DimensionInput.svelte +95 -95
  28. package/dist/Components/DragMenu/DragMenuHolder.svelte +53 -53
  29. package/dist/Components/DragMenu/DraggableCard.svelte +49 -49
  30. package/dist/Components/FileCard.svelte +18 -18
  31. package/dist/Components/FileUpload.svelte +115 -115
  32. package/dist/Components/GridInput.svelte +123 -123
  33. package/dist/Components/GridInputSet.svelte +21 -21
  34. package/dist/Components/HorizontalTabGroup.svelte +54 -54
  35. package/dist/Components/HorizontalTabGroupButton.svelte +32 -32
  36. package/dist/Components/Icon.svelte +68 -68
  37. package/dist/Components/InfoAlert.svelte +32 -32
  38. package/dist/Components/LoadingAnimation.svelte +228 -227
  39. package/dist/Components/LoadingModal.svelte +19 -19
  40. package/dist/Components/LoadingOverlay.svelte +20 -20
  41. package/dist/Components/Modal.svelte +127 -127
  42. package/dist/Components/MultiSelect.svelte +126 -126
  43. package/dist/Components/Nav/Nav.svelte +71 -71
  44. package/dist/Components/Nav/NavServiceMenuList.svelte +37 -37
  45. package/dist/Components/Nav/NavTab.svelte +46 -46
  46. package/dist/Components/Nav/ServiceMenuItem.svelte +62 -62
  47. package/dist/Components/Nav/ServicesNav.svelte +50 -50
  48. package/dist/Components/NumberInput.svelte +98 -98
  49. package/dist/Components/OptionCards.svelte +58 -58
  50. package/dist/Components/PageHeading.svelte +21 -21
  51. package/dist/Components/PasswordInput.svelte +61 -61
  52. package/dist/Components/PopoverButton.svelte +53 -53
  53. package/dist/Components/Portal.svelte +7 -7
  54. package/dist/Components/ProgressBubble.svelte +42 -42
  55. package/dist/Components/QuerySelect.svelte +102 -102
  56. package/dist/Components/ResourceCalendar/ResourceCalendar.svelte +241 -241
  57. package/dist/Components/SidebarPanel.svelte +32 -32
  58. package/dist/Components/SingleSelect.svelte +122 -122
  59. package/dist/Components/StepButton.svelte +48 -48
  60. package/dist/Components/StepForm.svelte +58 -58
  61. package/dist/Components/Switch.svelte +43 -43
  62. package/dist/Components/Table/ARCHITECTURE.md +298 -298
  63. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +30 -30
  64. package/dist/Components/Table/Body/Rows/ColumnList.svelte +24 -24
  65. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +165 -165
  66. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +13 -13
  67. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +120 -120
  68. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +81 -81
  69. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +92 -92
  70. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +110 -110
  71. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +54 -54
  72. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +35 -35
  73. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +64 -64
  74. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +82 -82
  75. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +88 -88
  76. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +90 -90
  77. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +96 -96
  78. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +71 -71
  79. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +124 -124
  80. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +91 -91
  81. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +88 -88
  82. package/dist/Components/Table/Body/Rows/TableRow.svelte +127 -127
  83. package/dist/Components/Table/Body/TableBody.svelte +92 -92
  84. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +25 -25
  85. package/dist/Components/Table/Headers/SelectAllHeader.svelte +20 -20
  86. package/dist/Components/Table/Headers/TableHead.svelte +175 -175
  87. package/dist/Components/Table/Misc/ColumnPanel.svelte +32 -32
  88. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +29 -29
  89. package/dist/Components/Table/Misc/FilterInput.svelte +326 -326
  90. package/dist/Components/Table/Misc/FilterPanel.svelte +79 -79
  91. package/dist/Components/Table/Misc/FilterPanelModal.svelte +21 -21
  92. package/dist/Components/Table/Misc/ShareViewModal.svelte +118 -118
  93. package/dist/Components/Table/Misc/SidePanel.svelte +24 -24
  94. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +318 -318
  95. package/dist/Components/Table/Misc/TableFooter.svelte +201 -201
  96. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +112 -112
  97. package/dist/Components/Table/Misc/TableSidebar.svelte +116 -116
  98. package/dist/Components/Table/Misc/TableViewDropdown.svelte +25 -25
  99. package/dist/Components/Table/Misc/ToolboxPanel.svelte +60 -60
  100. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +63 -63
  101. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +101 -101
  102. package/dist/Components/Table/NestedTable.svelte +29 -29
  103. package/dist/Components/Table/Table.svelte +140 -140
  104. package/dist/Components/Test/TestContextConsumer.svelte +8 -8
  105. package/dist/Components/TextArea.svelte +92 -90
  106. package/dist/Components/TextInput.svelte +128 -117
  107. package/dist/Components/ThreeStateRadio.svelte +101 -101
  108. package/dist/Components/Touch/BoolCard.svelte +27 -27
  109. package/dist/Components/Touch/DateModal.svelte +98 -98
  110. package/dist/Components/Touch/EditCard.svelte +44 -44
  111. package/dist/Components/Touch/InfoCard.svelte +25 -25
  112. package/dist/Components/Touch/InfoTextCard.svelte +22 -22
  113. package/dist/Components/Touch/ModalExplanation.svelte +13 -13
  114. package/dist/Components/Touch/NumberKeyboard.svelte +81 -81
  115. package/dist/Components/Touch/NumberModal.svelte +49 -49
  116. package/dist/Components/Touch/PlusMinusCard.svelte +40 -40
  117. package/dist/Components/Touch/SelectModal.svelte +86 -86
  118. package/dist/Components/Touch/SummaryCard.svelte +74 -74
  119. package/dist/Components/Touch/TextAreaModal.svelte +53 -53
  120. package/dist/Components/Touch/TextModal.svelte +56 -56
  121. package/dist/Components/Touch/TouchCard.svelte +28 -28
  122. package/dist/Components/Touch/TouchModal.svelte +141 -141
  123. package/dist/Components/Touch/UtilityButton.svelte +63 -63
  124. package/dist/Components/VerticalTabGroup.svelte +38 -38
  125. package/dist/Components/VerticalTabGroupButton.svelte +46 -46
  126. package/dist/Helpers/Datamatrix.d.ts +19 -19
  127. package/dist/Helpers/Datamatrix.js +291 -291
  128. package/dist/Types/Examples/ExampleModal.svelte +27 -27
  129. package/dist/paraglide/README.md +1 -1
  130. package/dist/scss/_basics.scss +12 -12
  131. package/dist/scss/_colours.scss +140 -140
  132. package/dist/scss/_motion.scss +57 -57
  133. package/dist/scss/_sizing.scss +85 -85
  134. package/dist/scss/_transitions.scss +8 -8
  135. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T"
6
6
  >import { m as i18n } from "../../paraglide/messages.js";
7
7
  import { afterNavigate } from "$app/navigation";
8
8
  import { Size } from "../../Types/Internal/Size.js";
@@ -27,71 +27,71 @@ afterNavigate(() => {
27
27
  showServicesDialog = false;
28
28
  showUserDialog = false;
29
29
  });
30
- </script>
31
-
32
- <nav class="main-navigation">
33
- {#if typeof brand === 'string'}
34
- <span class="nav-link brand">{brand}</span>
35
- {:else if brand}
36
- <span class="nav-link brand">{@render brand()}</span>
37
- {/if}
38
-
39
- <div class="nav-link">
40
- <button
41
- onclick={() => {
42
- showServicesDialog = !showServicesDialog;
43
- }}
44
- >
45
- <div class="delimited">
46
- <Icon
47
- name="block-menu"
48
- size={Size.Medium}
49
- />
50
- <span>{i18n['scoria.label.services']()}</span>
51
- </div>
52
- </button>
53
-
54
- {#if showServicesDialog}
55
- <ServicesNav
56
- onclose={() => {
57
- showServicesDialog = false;
58
- }}
59
- {serviceTabs}
60
- {selectedServiceTab}
61
- />
62
- {/if}
63
- </div>
64
-
65
- <div class="nav-search-container"></div>
66
- {#if extras}
67
- <div class="nav-link spaced selects">
68
- {@render extras()}
69
- </div>
70
- {/if}
71
-
72
- <div>
73
- <button
74
- onclick={() => {
75
- showUserDialog = !showUserDialog;
76
- }}
77
- >
78
- <span class="nav-link padded">
79
- <span
80
- class="user-icon"
81
- class:visible={hasLetters}
82
- class:single-letter={singleLetter}>{userIcon}</span
83
- >
84
- <span class="user-name">{userName}</span>
85
- </span>
86
- </button>
87
- {#if showUserDialog}
88
- {@render userDialog(() => {
89
- showUserDialog = false;
90
- })}
91
- {/if}
92
- </div>
93
- </nav>
94
-
30
+ </script>
31
+
32
+ <nav class="main-navigation">
33
+ {#if typeof brand === 'string'}
34
+ <span class="nav-link brand">{brand}</span>
35
+ {:else if brand}
36
+ <span class="nav-link brand">{@render brand()}</span>
37
+ {/if}
38
+
39
+ <div class="nav-link">
40
+ <button
41
+ onclick={() => {
42
+ showServicesDialog = !showServicesDialog;
43
+ }}
44
+ >
45
+ <div class="delimited">
46
+ <Icon
47
+ name="block-menu"
48
+ size={Size.Medium}
49
+ />
50
+ <span>{i18n['scoria.label.services']()}</span>
51
+ </div>
52
+ </button>
53
+
54
+ {#if showServicesDialog}
55
+ <ServicesNav
56
+ onclose={() => {
57
+ showServicesDialog = false;
58
+ }}
59
+ {serviceTabs}
60
+ {selectedServiceTab}
61
+ />
62
+ {/if}
63
+ </div>
64
+
65
+ <div class="nav-search-container"></div>
66
+ {#if extras}
67
+ <div class="nav-link spaced selects">
68
+ {@render extras()}
69
+ </div>
70
+ {/if}
71
+
72
+ <div>
73
+ <button
74
+ onclick={() => {
75
+ showUserDialog = !showUserDialog;
76
+ }}
77
+ >
78
+ <span class="nav-link padded">
79
+ <span
80
+ class="user-icon"
81
+ class:visible={hasLetters}
82
+ class:single-letter={singleLetter}>{userIcon}</span
83
+ >
84
+ <span class="user-name">{userName}</span>
85
+ </span>
86
+ </button>
87
+ {#if showUserDialog}
88
+ {@render userDialog(() => {
89
+ showUserDialog = false;
90
+ })}
91
+ {/if}
92
+ </div>
93
+ </nav>
94
+
95
95
  <style>div.overlay {
96
96
  position: fixed;
97
97
  top: calc(3.25rem + var(--env-border-height, 0));
@@ -214,4 +214,4 @@ div.delimited {
214
214
  align-items: center;
215
215
  justify-content: center;
216
216
  gap: 0.5rem;
217
- }</style>
217
+ }</style>
@@ -1,5 +1,5 @@
1
- <svelte:options runes />
2
-
1
+ <svelte:options runes />
2
+
3
3
  <script lang="ts">import { page } from "$app/state";
4
4
  import { Colour } from "../../scss/colours.js";
5
5
  import { Size } from "../../Types/Internal/Size.js";
@@ -21,40 +21,40 @@ const activePath = $derived.by(() => {
21
21
  }
22
22
  return best;
23
23
  });
24
- </script>
25
-
26
- <div
27
- class="wrapper"
28
- style="--icon-column-width: {Dimensions.smallPanelWidth}rem"
29
- role="group"
30
- aria-label={title}
31
- >
32
- <h3>
33
- <div class="icon">
34
- {#if icon}
35
- <Icon
36
- size={Size.Large}
37
- colour={Colour['$font-primary']}
38
- {...icon}
39
- />
40
- {/if}
41
- </div>
42
- {title}
43
- </h3>
44
-
45
- <div
46
- class="items"
47
- role="list"
48
- >
49
- {#each items as { item } (item.label)}
50
- <ServiceMenuItem
51
- {item}
52
- selected={item.path != null && item.path === activePath}
53
- />
54
- {/each}
55
- </div>
56
- </div>
57
-
24
+ </script>
25
+
26
+ <div
27
+ class="wrapper"
28
+ style="--icon-column-width: {Dimensions.smallPanelWidth}rem"
29
+ role="group"
30
+ aria-label={title}
31
+ >
32
+ <h3>
33
+ <div class="icon">
34
+ {#if icon}
35
+ <Icon
36
+ size={Size.Large}
37
+ colour={Colour['$font-primary']}
38
+ {...icon}
39
+ />
40
+ {/if}
41
+ </div>
42
+ {title}
43
+ </h3>
44
+
45
+ <div
46
+ class="items"
47
+ role="list"
48
+ >
49
+ {#each items as { item } (item.label)}
50
+ <ServiceMenuItem
51
+ {item}
52
+ selected={item.path != null && item.path === activePath}
53
+ />
54
+ {/each}
55
+ </div>
56
+ </div>
57
+
58
58
  <style>h3 {
59
59
  font-size: 1.5rem;
60
60
  display: flex;
@@ -78,4 +78,4 @@ h3 .icon {
78
78
  .wrapper .items {
79
79
  flex-shrink: 1;
80
80
  overflow: auto;
81
- }</style>
81
+ }</style>
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="Args"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="Args"
6
6
  >import { useAsyncFlag } from "../../Helpers/AsyncFlag.svelte.js";
7
7
  import { Colour } from "../../scss/colours.js";
8
8
  import { Size } from "../../Types/Internal/Size.js";
@@ -15,46 +15,46 @@ let { option, selected } = $props();
15
15
  const isValid = useAsyncFlag(() => option.isValid, true);
16
16
  const disabled = useAsyncFlag(() => option.disabled, false);
17
17
  const visible = useAsyncFlag(() => option.visible, true);
18
- </script>
19
-
20
- <button
21
- class:selected
22
- onclick={() => {
23
- option.onclick();
24
- }}
25
- type="button"
26
- class="tab"
27
- role="tab"
28
- aria-selected={selected}
29
- aria-label={option.label}
30
- disabled={disabled.value}
31
- class:invalid={!isValid.value}
32
- class:hidden={!visible.value}
33
- >
34
- <Icon
35
- name="nothing"
36
- colour={Colour['$brand-primary']}
37
- size={Size.MediumLarge}
38
- {...option.iconLeft}
39
- />
40
-
41
- {option.label}
42
- {#if option.isValid === false}
43
- <Icon
44
- name="error"
45
- colour={Colour['$error-border']}
46
- size={Size.MediumLarge}
47
- />
48
- {:else}
49
- <Icon
50
- name="nothing"
51
- colour={Colour['$brand-primary']}
52
- size={Size.MediumLarge}
53
- {...option.iconRight}
54
- />
55
- {/if}
56
- </button>
57
-
18
+ </script>
19
+
20
+ <button
21
+ class:selected
22
+ onclick={() => {
23
+ option.onclick();
24
+ }}
25
+ type="button"
26
+ class="tab"
27
+ role="tab"
28
+ aria-selected={selected}
29
+ aria-label={option.label}
30
+ disabled={disabled.value}
31
+ class:invalid={!isValid.value}
32
+ class:hidden={!visible.value}
33
+ >
34
+ <Icon
35
+ name="nothing"
36
+ colour={Colour['$brand-primary']}
37
+ size={Size.MediumLarge}
38
+ {...option.iconLeft}
39
+ />
40
+
41
+ {option.label}
42
+ {#if option.isValid === false}
43
+ <Icon
44
+ name="error"
45
+ colour={Colour['$error-border']}
46
+ size={Size.MediumLarge}
47
+ />
48
+ {:else}
49
+ <Icon
50
+ name="nothing"
51
+ colour={Colour['$brand-primary']}
52
+ size={Size.MediumLarge}
53
+ {...option.iconRight}
54
+ />
55
+ {/if}
56
+ </button>
57
+
58
58
  <style>button.tab.hidden {
59
59
  display: none !important;
60
60
  }
@@ -87,4 +87,4 @@ const visible = useAsyncFlag(() => option.visible, true);
87
87
  }
88
88
  .tab.invalid {
89
89
  color: #aa1414;
90
- }</style>
90
+ }</style>
@@ -1,5 +1,5 @@
1
- <svelte:options runes />
2
-
1
+ <svelte:options runes />
2
+
3
3
  <script lang="ts">import { dev } from "$app/environment";
4
4
  import { resolve } from "$app/paths";
5
5
  import { page } from "$app/state";
@@ -42,65 +42,65 @@ function safeHref(path) {
42
42
  }
43
43
  return resolve(path);
44
44
  }
45
- </script>
46
-
47
- {#if item.callback}
48
- <button
49
- onclick={() => {
50
- item.callback();
51
- }}
52
- style="--iconWidth: {Dimensions.smallPanelWidth}rem"
53
- class:selected
54
- class:hidden={!visible.value}
55
- >
56
- <!-- <div class="selected-marker"></div> -->
57
- <div class="icon-wrapper">
58
- {#if item.iconName}
59
- <Icon
60
- name={item.iconName}
61
- size={Size.Medium}
62
- label={item.label}
63
- />
64
- {/if}
65
- </div>
66
- <div class="spacer"></div>
67
- <div class="text">
68
- <div class="label">{item.label}</div>
69
- {#if item.subtitle}
70
- <div class="subtitle">{item.subtitle}</div>
71
- {/if}
72
- </div></button
73
- >
74
- {:else if item.path}
75
- <a
76
- href={safeHref(item.path)}
77
- style="--iconWidth: {Dimensions.smallPanelWidth}rem"
78
- aria-current={selected ? 'page' : undefined}
79
- class:selected
80
- class:hidden={!visible.value}
81
- >
82
- <!-- <div class="selected-marker"></div> -->
83
- <div class="icon-wrapper">
84
- {#if item.iconName}
85
- <Icon
86
- name={item.iconName}
87
- size={Size.Medium}
88
- label={item.label}
89
- />
90
- {/if}
91
- </div>
92
- <div class="spacer"></div>
93
- <div class="text">
94
- <div class="label">{item.label}</div>
95
- {#if item.subtitle}
96
- <div class="subtitle">{item.subtitle}</div>
97
- {/if}
98
- </div></a
99
- >
100
- {:else if dev}
101
- Error: Callback had neither callback nor path
102
- {/if}
103
-
45
+ </script>
46
+
47
+ {#if item.callback}
48
+ <button
49
+ onclick={() => {
50
+ item.callback();
51
+ }}
52
+ style="--iconWidth: {Dimensions.smallPanelWidth}rem"
53
+ class:selected
54
+ class:hidden={!visible.value}
55
+ >
56
+ <!-- <div class="selected-marker"></div> -->
57
+ <div class="icon-wrapper">
58
+ {#if item.iconName}
59
+ <Icon
60
+ name={item.iconName}
61
+ size={Size.Medium}
62
+ label={item.label}
63
+ />
64
+ {/if}
65
+ </div>
66
+ <div class="spacer"></div>
67
+ <div class="text">
68
+ <div class="label">{item.label}</div>
69
+ {#if item.subtitle}
70
+ <div class="subtitle">{item.subtitle}</div>
71
+ {/if}
72
+ </div></button
73
+ >
74
+ {:else if item.path}
75
+ <a
76
+ href={safeHref(item.path)}
77
+ style="--iconWidth: {Dimensions.smallPanelWidth}rem"
78
+ aria-current={selected ? 'page' : undefined}
79
+ class:selected
80
+ class:hidden={!visible.value}
81
+ >
82
+ <!-- <div class="selected-marker"></div> -->
83
+ <div class="icon-wrapper">
84
+ {#if item.iconName}
85
+ <Icon
86
+ name={item.iconName}
87
+ size={Size.Medium}
88
+ label={item.label}
89
+ />
90
+ {/if}
91
+ </div>
92
+ <div class="spacer"></div>
93
+ <div class="text">
94
+ <div class="label">{item.label}</div>
95
+ {#if item.subtitle}
96
+ <div class="subtitle">{item.subtitle}</div>
97
+ {/if}
98
+ </div></a
99
+ >
100
+ {:else if dev}
101
+ Error: Callback had neither callback nor path
102
+ {/if}
103
+
104
104
  <style>button.hidden,
105
105
  a.hidden {
106
106
  display: none !important;
@@ -168,4 +168,4 @@ button .spacer,
168
168
  a .spacer {
169
169
  width: 0.5rem;
170
170
  flex-shrink: 0;
171
- }</style>
171
+ }</style>
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="Args"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="Args"
6
6
  >import { m as i18n } from "../../paraglide/messages.js";
7
7
  import { devCatch } from "../../Helpers/Helpers.svelte.js";
8
8
  import HorizontalTabGroup from "../HorizontalTabGroup.svelte";
@@ -27,50 +27,50 @@ $effect(() => {
27
27
  dialog.showModal();
28
28
  }
29
29
  });
30
- </script>
31
-
32
- <dialog
33
- bind:this={dialogRef}
34
- aria-label={i18n['scoria.label.services']()}
35
- class="overlay"
36
- oncancel={(e) => {
37
- // Escape fires `cancel` first; prevent the native close so we
38
- // fully delegate to the parent (it owns the visibility flag).
39
- e.preventDefault();
40
- fireClose();
41
- }}
42
- onclick={(e) => {
43
- // Native <dialog> click target is the dialog element itself when
44
- // the user clicks the backdrop; clicks on inner content bubble
45
- // up with a different target.
46
- if (dialogRef === e.target) {
47
- fireClose();
48
- }
49
- }}
50
- >
51
- <div
52
- role="navigation"
53
- aria-label={i18n['scoria.label.services_tabs']()}
54
- class="services"
55
- >
56
- <HorizontalTabGroup
57
- name="nav-services"
58
- tabs={serviceTabs}
59
- selected={selectedServiceTab}
60
- tabComponent={navTab}
61
- noRadius
62
- grow
63
- />
64
- </div>
65
- </dialog>
66
-
67
- {#snippet navTab(option: TabOption<Args>, selected: boolean)}
68
- <NavTab
69
- {option}
70
- {selected}
71
- />
72
- {/snippet}
73
-
30
+ </script>
31
+
32
+ <dialog
33
+ bind:this={dialogRef}
34
+ aria-label={i18n['scoria.label.services']()}
35
+ class="overlay"
36
+ oncancel={(e) => {
37
+ // Escape fires `cancel` first; prevent the native close so we
38
+ // fully delegate to the parent (it owns the visibility flag).
39
+ e.preventDefault();
40
+ fireClose();
41
+ }}
42
+ onclick={(e) => {
43
+ // Native <dialog> click target is the dialog element itself when
44
+ // the user clicks the backdrop; clicks on inner content bubble
45
+ // up with a different target.
46
+ if (dialogRef === e.target) {
47
+ fireClose();
48
+ }
49
+ }}
50
+ >
51
+ <div
52
+ role="navigation"
53
+ aria-label={i18n['scoria.label.services_tabs']()}
54
+ class="services"
55
+ >
56
+ <HorizontalTabGroup
57
+ name="nav-services"
58
+ tabs={serviceTabs}
59
+ selected={selectedServiceTab}
60
+ tabComponent={navTab}
61
+ noRadius
62
+ grow
63
+ />
64
+ </div>
65
+ </dialog>
66
+
67
+ {#snippet navTab(option: TabOption<Args>, selected: boolean)}
68
+ <NavTab
69
+ {option}
70
+ {selected}
71
+ />
72
+ {/snippet}
73
+
74
74
  <style>dialog.overlay {
75
75
  position: fixed;
76
76
  top: calc(3.25rem + var(--env-border-height, 0));
@@ -108,4 +108,4 @@ div.services {
108
108
  justify-content: stretch;
109
109
  height: var(--services-nav-height, min(710px, 80%));
110
110
  width: var(--services-nav-width, 800px);
111
- }</style>
111
+ }</style>