lutra 0.0.33 → 0.1.0

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 (242) hide show
  1. package/README.md +4 -24
  2. package/dist/components/AspectRatio.svelte +26 -0
  3. package/dist/components/AspectRatio.svelte.d.ts +8 -0
  4. package/dist/components/Dialog.svelte +78 -0
  5. package/dist/components/Dialog.svelte.d.ts +14 -0
  6. package/dist/components/Layout.svelte +32 -0
  7. package/dist/components/Layout.svelte.d.ts +11 -0
  8. package/dist/components/PageContent.svelte +108 -0
  9. package/dist/components/PageContent.svelte.d.ts +38 -0
  10. package/dist/components/Theme.svelte +87 -0
  11. package/dist/components/Theme.svelte.d.ts +17 -0
  12. package/dist/{display → components}/Tooltip.svelte +33 -8
  13. package/dist/components/Tooltip.svelte.d.ts +12 -0
  14. package/dist/config.d.ts +30 -0
  15. package/dist/config.js +18 -0
  16. package/dist/css/0-layers.css +1 -0
  17. package/dist/css/1-props.css +775 -0
  18. package/dist/css/2-base.css +209 -0
  19. package/dist/css/3-typo.css +65 -0
  20. package/dist/css/4-layout.css +5 -0
  21. package/dist/css/5-media.css +21 -0
  22. package/dist/css/lutra.css +6 -0
  23. package/dist/index.d.ts +5 -1
  24. package/dist/index.js +5 -2
  25. package/dist/types.d.ts +39 -0
  26. package/dist/types.js +25 -0
  27. package/package.json +29 -82
  28. package/dist/color.css +0 -0
  29. package/dist/display/Avatar.svelte +0 -61
  30. package/dist/display/Avatar.svelte.d.ts +0 -19
  31. package/dist/display/Badge.svelte +0 -91
  32. package/dist/display/Badge.svelte.d.ts +0 -30
  33. package/dist/display/Callout.svelte +0 -109
  34. package/dist/display/Callout.svelte.d.ts +0 -28
  35. package/dist/display/Close.svelte +0 -58
  36. package/dist/display/Close.svelte.d.ts +0 -18
  37. package/dist/display/Code.svelte +0 -190
  38. package/dist/display/Code.svelte.d.ts +0 -32
  39. package/dist/display/ContextTip.svelte +0 -23
  40. package/dist/display/ContextTip.svelte.d.ts +0 -18
  41. package/dist/display/DataList.svelte +0 -16
  42. package/dist/display/DataList.svelte.d.ts +0 -21
  43. package/dist/display/Details.svelte +0 -49
  44. package/dist/display/Details.svelte.d.ts +0 -27
  45. package/dist/display/Hero.svelte +0 -50
  46. package/dist/display/Hero.svelte.d.ts +0 -26
  47. package/dist/display/Icon.svelte +0 -39
  48. package/dist/display/Icon.svelte.d.ts +0 -19
  49. package/dist/display/IconButton.svelte +0 -91
  50. package/dist/display/IconButton.svelte.d.ts +0 -27
  51. package/dist/display/Image.svelte +0 -91
  52. package/dist/display/Image.svelte.d.ts +0 -26
  53. package/dist/display/Indicator.svelte +0 -352
  54. package/dist/display/Indicator.svelte.d.ts +0 -23
  55. package/dist/display/Inset.svelte +0 -18
  56. package/dist/display/Inset.svelte.d.ts +0 -18
  57. package/dist/display/LineChart.svelte +0 -385
  58. package/dist/display/LineChart.svelte.d.ts +0 -24
  59. package/dist/display/LoadingIndicator.svelte +0 -33
  60. package/dist/display/LoadingIndicator.svelte.d.ts +0 -15
  61. package/dist/display/Modal.svelte +0 -116
  62. package/dist/display/Modal.svelte.d.ts +0 -27
  63. package/dist/display/Notification.svelte +0 -104
  64. package/dist/display/Notification.svelte.d.ts +0 -23
  65. package/dist/display/Panel.svelte +0 -23
  66. package/dist/display/Panel.svelte.d.ts +0 -19
  67. package/dist/display/Popup.svelte +0 -111
  68. package/dist/display/Popup.svelte.d.ts +0 -25
  69. package/dist/display/Stat.svelte +0 -81
  70. package/dist/display/Stat.svelte.d.ts +0 -30
  71. package/dist/display/Table.svelte +0 -28
  72. package/dist/display/Table.svelte.d.ts +0 -24
  73. package/dist/display/TablePaginator.svelte +0 -51
  74. package/dist/display/TablePaginator.svelte.d.ts +0 -21
  75. package/dist/display/Tag.svelte +0 -90
  76. package/dist/display/Tag.svelte.d.ts +0 -32
  77. package/dist/display/Tooltip.svelte.d.ts +0 -23
  78. package/dist/display/chart.d.ts +0 -78
  79. package/dist/display/chart.js +0 -212
  80. package/dist/display/index.d.ts +0 -24
  81. package/dist/display/index.js +0 -24
  82. package/dist/display/notifications.svelte.d.ts +0 -21
  83. package/dist/display/notifications.svelte.js +0 -31
  84. package/dist/form/Button.svelte +0 -39
  85. package/dist/form/Button.svelte.d.ts +0 -26
  86. package/dist/form/FieldActions.svelte +0 -68
  87. package/dist/form/FieldActions.svelte.d.ts +0 -20
  88. package/dist/form/FieldContainer.svelte +0 -37
  89. package/dist/form/FieldContainer.svelte.d.ts +0 -19
  90. package/dist/form/FieldContent.svelte +0 -153
  91. package/dist/form/FieldContent.svelte.d.ts +0 -31
  92. package/dist/form/FieldError.svelte +0 -14
  93. package/dist/form/FieldError.svelte.d.ts +0 -18
  94. package/dist/form/FieldSection.svelte +0 -86
  95. package/dist/form/FieldSection.svelte.d.ts +0 -20
  96. package/dist/form/Fieldset.svelte +0 -68
  97. package/dist/form/Fieldset.svelte.d.ts +0 -31
  98. package/dist/form/Form.svelte +0 -136
  99. package/dist/form/Form.svelte.d.ts +0 -38
  100. package/dist/form/ImageUpload.svelte +0 -259
  101. package/dist/form/ImageUpload.svelte.d.ts +0 -31
  102. package/dist/form/Input.svelte +0 -326
  103. package/dist/form/Input.svelte.d.ts +0 -117
  104. package/dist/form/InputLength.svelte +0 -32
  105. package/dist/form/InputLength.svelte.d.ts +0 -20
  106. package/dist/form/Label.svelte +0 -44
  107. package/dist/form/Label.svelte.d.ts +0 -25
  108. package/dist/form/LogoUpload.svelte +0 -100
  109. package/dist/form/LogoUpload.svelte.d.ts +0 -29
  110. package/dist/form/Select.svelte +0 -136
  111. package/dist/form/Select.svelte.d.ts +0 -70
  112. package/dist/form/Textarea.svelte +0 -163
  113. package/dist/form/Textarea.svelte.d.ts +0 -108
  114. package/dist/form/Toggle.svelte +0 -2
  115. package/dist/form/Toggle.svelte.d.ts +0 -15
  116. package/dist/form/client.svelte.d.ts +0 -44
  117. package/dist/form/client.svelte.js +0 -98
  118. package/dist/form/form.d.ts +0 -54
  119. package/dist/form/form.js +0 -340
  120. package/dist/form/index.d.ts +0 -18
  121. package/dist/form/index.js +0 -18
  122. package/dist/form/types.d.ts +0 -62
  123. package/dist/form/types.js +0 -1
  124. package/dist/icons/IconAlert.svelte +0 -3
  125. package/dist/icons/IconAlert.svelte.d.ts +0 -23
  126. package/dist/icons/IconCopy.svelte +0 -3
  127. package/dist/icons/IconCopy.svelte.d.ts +0 -23
  128. package/dist/icons/IconDone.svelte +0 -3
  129. package/dist/icons/IconDone.svelte.d.ts +0 -23
  130. package/dist/icons/IconError.svelte +0 -3
  131. package/dist/icons/IconError.svelte.d.ts +0 -23
  132. package/dist/icons/IconHelp.svelte +0 -3
  133. package/dist/icons/IconHelp.svelte.d.ts +0 -23
  134. package/dist/icons/IconHide.svelte +0 -3
  135. package/dist/icons/IconHide.svelte.d.ts +0 -23
  136. package/dist/icons/IconInfo.svelte +0 -3
  137. package/dist/icons/IconInfo.svelte.d.ts +0 -23
  138. package/dist/icons/IconLink.svelte +0 -3
  139. package/dist/icons/IconLink.svelte.d.ts +0 -23
  140. package/dist/icons/IconMenuBurger.svelte +0 -3
  141. package/dist/icons/IconMenuBurger.svelte.d.ts +0 -23
  142. package/dist/icons/IconMenuDots.svelte +0 -3
  143. package/dist/icons/IconMenuDots.svelte.d.ts +0 -23
  144. package/dist/icons/IconSearch.svelte +0 -3
  145. package/dist/icons/IconSearch.svelte.d.ts +0 -23
  146. package/dist/icons/IconShow.svelte +0 -3
  147. package/dist/icons/IconShow.svelte.d.ts +0 -23
  148. package/dist/icons/IconSuccess.svelte +0 -3
  149. package/dist/icons/IconSuccess.svelte.d.ts +0 -23
  150. package/dist/icons/IconWarning.svelte +0 -3
  151. package/dist/icons/IconWarning.svelte.d.ts +0 -23
  152. package/dist/icons/index.d.ts +0 -14
  153. package/dist/icons/index.js +0 -14
  154. package/dist/layout/Layout.svelte +0 -47
  155. package/dist/layout/Layout.svelte.d.ts +0 -22
  156. package/dist/layout/LayoutFooter.svelte +0 -21
  157. package/dist/layout/LayoutFooter.svelte.d.ts +0 -18
  158. package/dist/layout/LayoutGrid.svelte +0 -51
  159. package/dist/layout/LayoutGrid.svelte.d.ts +0 -27
  160. package/dist/layout/LayoutHeader.svelte +0 -97
  161. package/dist/layout/LayoutHeader.svelte.d.ts +0 -34
  162. package/dist/layout/LayoutSideMenu.svelte +0 -55
  163. package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -21
  164. package/dist/layout/LayoutTypes.d.ts +0 -15
  165. package/dist/layout/LayoutTypes.js +0 -9
  166. package/dist/layout/Overlay.svelte +0 -20
  167. package/dist/layout/Overlay.svelte.d.ts +0 -25
  168. package/dist/layout/OverlayContainer.svelte +0 -28
  169. package/dist/layout/OverlayContainer.svelte.d.ts +0 -15
  170. package/dist/layout/OverlayLayer.svelte +0 -140
  171. package/dist/layout/OverlayLayer.svelte.d.ts +0 -19
  172. package/dist/layout/PageContent.svelte +0 -82
  173. package/dist/layout/PageContent.svelte.d.ts +0 -25
  174. package/dist/layout/Theme.svelte +0 -243
  175. package/dist/layout/Theme.svelte.d.ts +0 -19
  176. package/dist/layout/UIContent.svelte +0 -15
  177. package/dist/layout/UIContent.svelte.d.ts +0 -18
  178. package/dist/layout/index.d.ts +0 -11
  179. package/dist/layout/index.js +0 -11
  180. package/dist/layout/overlays.svelte.d.ts +0 -34
  181. package/dist/layout/overlays.svelte.js +0 -44
  182. package/dist/nav/Breadcrumb.svelte +0 -82
  183. package/dist/nav/Breadcrumb.svelte.d.ts +0 -28
  184. package/dist/nav/Menu.svelte +0 -170
  185. package/dist/nav/Menu.svelte.d.ts +0 -27
  186. package/dist/nav/MenuItem.svelte +0 -147
  187. package/dist/nav/MenuItem.svelte.d.ts +0 -22
  188. package/dist/nav/MenuTypes.d.ts +0 -58
  189. package/dist/nav/MenuTypes.js +0 -1
  190. package/dist/nav/NavMenu.svelte +0 -181
  191. package/dist/nav/NavMenu.svelte.d.ts +0 -19
  192. package/dist/nav/TabbedContent.svelte +0 -43
  193. package/dist/nav/TabbedContent.svelte.d.ts +0 -23
  194. package/dist/nav/Tabs.svelte +0 -158
  195. package/dist/nav/Tabs.svelte.d.ts +0 -25
  196. package/dist/nav/index.d.ts +0 -7
  197. package/dist/nav/index.js +0 -6
  198. package/dist/style.css +0 -950
  199. package/dist/typo/Clamp.svelte +0 -25
  200. package/dist/typo/Clamp.svelte.d.ts +0 -24
  201. package/dist/typo/H.svelte +0 -52
  202. package/dist/typo/H.svelte.d.ts +0 -28
  203. package/dist/typo/H1.svelte +0 -14
  204. package/dist/typo/H1.svelte.d.ts +0 -26
  205. package/dist/typo/H2.svelte +0 -14
  206. package/dist/typo/H2.svelte.d.ts +0 -26
  207. package/dist/typo/H3.svelte +0 -14
  208. package/dist/typo/H3.svelte.d.ts +0 -26
  209. package/dist/typo/H4.svelte +0 -14
  210. package/dist/typo/H4.svelte.d.ts +0 -26
  211. package/dist/typo/H5.svelte +0 -14
  212. package/dist/typo/H5.svelte.d.ts +0 -26
  213. package/dist/typo/H6.svelte +0 -14
  214. package/dist/typo/H6.svelte.d.ts +0 -26
  215. package/dist/typo/P.svelte +0 -34
  216. package/dist/typo/P.svelte.d.ts +0 -26
  217. package/dist/typo/index.d.ts +0 -9
  218. package/dist/typo/index.js +0 -9
  219. package/dist/utils/StringOrComponent.svelte +0 -14
  220. package/dist/utils/StringOrComponent.svelte.d.ts +0 -19
  221. package/dist/utils/StringOrSnippet.svelte +0 -11
  222. package/dist/utils/StringOrSnippet.svelte.d.ts +0 -19
  223. package/dist/utils/attr.d.ts +0 -5
  224. package/dist/utils/attr.js +0 -21
  225. package/dist/utils/color.d.ts +0 -51
  226. package/dist/utils/color.js +0 -97
  227. package/dist/utils/defaults.d.ts +0 -4
  228. package/dist/utils/defaults.js +0 -1
  229. package/dist/utils/dom.d.ts +0 -15
  230. package/dist/utils/dom.js +0 -74
  231. package/dist/utils/hooks.server.d.ts +0 -2
  232. package/dist/utils/hooks.server.js +0 -16
  233. package/dist/utils/id.d.ts +0 -1
  234. package/dist/utils/id.js +0 -3
  235. package/dist/utils/index.d.ts +0 -9
  236. package/dist/utils/index.js +0 -6
  237. package/dist/utils/isSnippet.d.ts +0 -3
  238. package/dist/utils/isSnippet.js +0 -11
  239. package/dist/utils/keyboard.svelte.d.ts +0 -22
  240. package/dist/utils/keyboard.svelte.js +0 -161
  241. /package/dist/{utils → util}/transitions.d.ts +0 -0
  242. /package/dist/{utils → util}/transitions.js +0 -0
@@ -1,181 +0,0 @@
1
- <script lang="ts">import { page } from "$app/stores";
2
- import UiContent from "../layout/UIContent.svelte";
3
- let {
4
- items
5
- } = $props();
6
- function parseHref(href) {
7
- if (!href) return {
8
- href: void 0,
9
- exact: false
10
- };
11
- if (href.endsWith("*")) {
12
- return {
13
- href: href.slice(0, -1),
14
- exact: false
15
- };
16
- }
17
- return {
18
- href,
19
- exact: true
20
- };
21
- }
22
- function parseLinks(items2) {
23
- return items2.map((item) => {
24
- if (item.href) {
25
- return {
26
- ...item,
27
- ...parseHref(item.href)
28
- };
29
- }
30
- if (!item.children) return item;
31
- return {
32
- ...item,
33
- children: parseLinks(item.children)
34
- };
35
- });
36
- }
37
- const parsedItems = parseLinks(items);
38
- </script>
39
-
40
- <UiContent>
41
- <nav>
42
- <ul>
43
- {#snippet link(i)}
44
- <li aria-current={i.exact ? ($page?.url?.pathname === i.href ? 'page' : undefined) : ($page?.url?.pathname?.startsWith(i.href) ? 'page' : undefined)}>
45
- {#if i.href}
46
- <a href={i.href}>
47
- {#if i.icon}
48
- <i.icon />
49
- {/if}
50
- {i.label}
51
- </a>
52
- {:else}
53
- <span>
54
- {#if i.icon}
55
- <i.icon />
56
- {/if}
57
- {i.label}
58
- </span>
59
- {/if}
60
- {#if i.children}
61
- <ul>
62
- {#each i.children as child}
63
- {@render link(child)}
64
- {/each}
65
- </ul>
66
- {/if}
67
- </li>
68
- {/snippet}
69
- {#each parsedItems as item, index}
70
- {@render link(item)}
71
- {/each}
72
- </ul>
73
- </nav>
74
- </UiContent>
75
-
76
- <style>
77
- nav {
78
- }
79
- ul {
80
- display: flex;
81
- list-style: none;
82
- padding: 0;
83
- margin: 0;
84
- }
85
- a, span {
86
- display: flex;
87
- align-items: center;
88
- padding: 0.5rem 0.75rem;
89
- text-decoration: none;
90
- font-weight: 500;
91
- color: var(--menu-text);
92
- }
93
- a:hover, span:hover {
94
- background: var(--menu-bg-hover);
95
- color: var(--menu-text-hover);
96
- }
97
- /** loop */
98
- ul > li > ul {
99
- display: none;
100
- position: absolute;
101
- flex-direction: column;
102
- top: 100%;
103
- left: 0;
104
- background: var(--menu-bg);
105
- border: var(--menu-border);
106
- }
107
- ul > li:hover > ul,
108
- ul > li:focus-within > ul {
109
- display: flex;
110
- }
111
- ul > li:hover,
112
- ul > li:focus-within {
113
- background: var(--menu-bg-hover);
114
- }
115
- ul > li:hover > a,
116
- ul > li:focus-within > a,
117
- ul > li:hover > span,
118
- ul > li:focus-within > span {
119
- color: var(--menu-text-hover);
120
- }
121
-
122
- ul > li {
123
- border-block-end: var(--menu-border);
124
- position: relative;
125
- white-space: nowrap;
126
- }
127
- ul > li:last-child {
128
- border-block-end: none;
129
- }
130
- ul > li > ul {
131
- left: 100%;
132
- top: -1px;
133
- }
134
- ul > li:has(ul) > a {
135
- padding-inline-end: 2rem;
136
- }
137
- ul > li:has(ul) > a::after {
138
- content: "▶";
139
- padding-inline-start: 0.5rem;
140
- font-size: 9px;
141
- position: absolute;
142
- right: 0.75rem;
143
- color: var(--menu-text);
144
- }
145
- /** top level */
146
- nav > ul {
147
- flex-direction: row;
148
- gap: 1px;
149
- position: relative;
150
- }
151
- nav > ul > li {
152
- border-block-end: none;
153
- }
154
- nav > ul > li > a {
155
- border-radius: var(--border-radius);
156
- }
157
- nav > ul > li > a:hover {
158
- border-radius: var(--border-radius);
159
- }
160
- nav > ul > li > ul {
161
- top: 100%;
162
- left: 0;
163
- background: var(--menu-bg);
164
- border: var(--menu-border);
165
- filter: drop-shadow(0 0.25rem 0.5rem var(--shadow));
166
- }
167
- nav > ul > li:has(ul) > a {
168
- padding: 0.75rem 1rem;
169
- }
170
- nav > ul > li:has(ul) > a::after {
171
- content: "";
172
- padding: 0;
173
- }
174
- ul > li[aria-current="page"] a {
175
- background: var(--menu-bg-active);
176
- color: var(--menu-text-active);
177
- }
178
- ul > li[aria-current="page"] a:hover {
179
- color: var(--menu-text-active-hover);
180
- }
181
- </style>
@@ -1,19 +0,0 @@
1
- import type { MenuItem } from "./MenuTypes.js";
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
- declare const NavMenu: $$__sveltets_2_IsomorphicComponent<{
13
- /** Menu items to display */
14
- items: MenuItem[];
15
- }, {
16
- [evt: string]: CustomEvent<any>;
17
- }, {}, {}, "">;
18
- type NavMenu = InstanceType<typeof NavMenu>;
19
- export default NavMenu;
@@ -1,43 +0,0 @@
1
- <script lang="ts">import { page } from "$app/stores";
2
- import Tabs from "./Tabs.svelte";
3
- let {
4
- items,
5
- contained,
6
- rounded
7
- } = $props();
8
- function formatHash(hash) {
9
- hash = hash.toLowerCase().replace(/\s/g, "-");
10
- if (!hash.startsWith("#")) {
11
- hash = `#${hash}`;
12
- }
13
- return hash;
14
- }
15
- ;
16
- let itemsWithHref = $derived(items.map((item, index) => {
17
- const href = item.hash ? formatHash(item.hash) : `#${item.label.toLowerCase().replace(/\s/g, "-")}`;
18
- return {
19
- content: item.content,
20
- label: item.label,
21
- href,
22
- active: $page.url?.hash === href
23
- };
24
- }));
25
- let activeItem = $derived(itemsWithHref.find((item) => item.active) || itemsWithHref[0]);
26
- let activeContent = $derived(activeItem?.content);
27
- </script>
28
-
29
- <div>
30
- <Tabs items={itemsWithHref} {contained} {rounded} />
31
-
32
- {#if activeContent}
33
- {@render activeContent()}
34
- {/if}
35
- </div>
36
-
37
- <style>
38
- div {
39
- display: flex;
40
- flex-direction: column;
41
- gap: var(--gap, 1.5rem);
42
- }
43
- </style>
@@ -1,23 +0,0 @@
1
- import type { TabbedContentItem } from "./MenuTypes.js";
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
- declare const TabbedContent: $$__sveltets_2_IsomorphicComponent<{
13
- /** Tab items to display. */
14
- items: TabbedContentItem[];
15
- /** Contain the element in a box. */
16
- contained?: boolean;
17
- /** Round the corners of the element if contained. */
18
- rounded?: boolean;
19
- }, {
20
- [evt: string]: CustomEvent<any>;
21
- }, {}, {}, "">;
22
- type TabbedContent = InstanceType<typeof TabbedContent>;
23
- export default TabbedContent;
@@ -1,158 +0,0 @@
1
- <script lang="ts">import { browser } from "$app/environment";
2
- import { page } from "$app/stores";
3
- import { onMount } from "svelte";
4
- let {
5
- items,
6
- underline,
7
- contained,
8
- rounded
9
- } = $props();
10
- const id = $state(`Tabs-${Math.random().toString(36).slice(2)}`);
11
- function onClickButton(event, item, index) {
12
- }
13
- let activeIndex = $derived.by(() => {
14
- return items.findIndex((item, index) => {
15
- if (!item.href) return false;
16
- if (item.href.endsWith("*")) {
17
- return $page.url.pathname.startsWith(item.href.slice(0, -1));
18
- } else {
19
- return $page.url.pathname.endsWith(item.href);
20
- }
21
- });
22
- });
23
- let loaded = $state(false);
24
- onMount(async () => {
25
- await new Promise((resolve) => setTimeout(resolve, 50));
26
- loaded = true;
27
- });
28
- let underlineStyle = $derived.by(() => {
29
- if (browser && underline && loaded) {
30
- let active = items[activeIndex];
31
- let activeElement = document.querySelector(`#${id} li[data-index="${activeIndex}"]`);
32
- if (activeElement) {
33
- return `
34
- opacity: 1;
35
- width: ${activeElement.clientWidth}px;
36
- transform: translateX(${activeElement.offsetLeft}px)
37
- `;
38
- }
39
- }
40
- return "height: 0;";
41
- });
42
- function removePossibleStar(href) {
43
- return href.endsWith("*") ? href.slice(0, -1) : href;
44
- }
45
- </script>
46
-
47
- <svelte:window onresize={() => { loaded = false; loaded = true; }} />
48
-
49
- <nav class="Tabs" {id} class:contained class:rounded>
50
- <menu>
51
- {#each items as item, index}
52
- <li data-index={index} aria-current={item.active || activeIndex === index ? 'page' : undefined}>
53
- {#if item.href}
54
- <a draggable="false" href={removePossibleStar(item.href)}>
55
- {item.label}
56
- </a>
57
- {:else if item.onclick}
58
- <button type="button" draggable="false" onclick={(event) => onClickButton(event, item, index)}>
59
- {item.label}
60
- </button>
61
- {/if}
62
- </li>
63
- {/each}
64
- <div class="Underline" style={underlineStyle}></div>
65
- </menu>
66
- </nav>
67
-
68
- <style>
69
- .Tabs {
70
- display: flex;
71
- z-index: 2;
72
- background: var(--menu-bg);
73
- overflow: clip;
74
- }
75
- .Tabs.contained {
76
- border: var(--menu-border);
77
- }
78
- .Tabs.rounded {
79
- border-radius: var(--border-radius);
80
- }
81
- menu, li {
82
- list-style: none;
83
- margin: 0;
84
- }
85
- menu {
86
- position: relative;
87
- display: flex;
88
- flex-direction: row;
89
- flex-wrap: nowrap;
90
- align-items: center;
91
- justify-content: flex-start;
92
- padding: 0;
93
- gap: var(--gap, 1rem);
94
- inline-size: 100%;
95
- border-block-end: var(--menu-border);
96
- }
97
- .Tabs.contained menu {
98
- gap: 0;
99
- flex-grow: 1;
100
- justify-content: stretch;
101
- border-block-end: 0;
102
- }
103
- a,
104
- button {
105
- display: block;
106
- padding: var(--padding, 0.75rem 0.5rem);
107
- color: var(--menu-text);
108
- transition: all var(--menu-trans);
109
- font-weight: 500;
110
- font-size: var(--font-size, 0.9em);
111
- letter-spacing: -0.05ch;
112
- background: transparent;
113
- border: none;
114
- border-block-end: 2px solid transparent;
115
- cursor: pointer;
116
- text-decoration: none;
117
- }
118
- menu li:first-child > * {
119
- padding-inline-start: 0;
120
- }
121
- .Tabs.contained li {
122
- flex-grow: 1;
123
- border-inline-end: var(--menu-border);
124
- flex-basis: auto;
125
- }
126
- .Tabs.contained menu li:last-of-type {
127
- border-inline-end: 0;
128
- }
129
- .Tabs.contained a,
130
- .Tabs.contained button {
131
- flex-grow: 1;
132
- inline-size: 100%;
133
- text-align: center;
134
- padding-block-start: calc(0.75rem + 3px);
135
- color: var(--menu-text);
136
- font-weight: 600;
137
- }
138
- a:hover,
139
- button:hover {
140
- color: color-mix(in hsl shorter hue, var(--menu-text) var(--mix-amount), var(--mix-target));
141
- background-color: color-mix(in hsl shorter hue, var(--menu-bg) var(--mix-amount), var(--mix-target));
142
- }
143
- li[aria-current="page"] a,
144
- li[aria-current="page"] button {
145
- background: var(--menu-bg-active);
146
- color: var(--menu-text-active);
147
- opacity: 1;
148
- }
149
- .Underline {
150
- height: 2px;
151
- background-color: var(--menu-text-active);
152
- position: absolute;
153
- bottom: 0;
154
- left: 0;
155
- transition: all 0.2s ease-out;
156
- opacity: 0;
157
- }
158
- </style>
@@ -1,25 +0,0 @@
1
- import type { TabItem } from "../nav/index.js";
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports;
10
- z_$$bindings?: Bindings;
11
- }
12
- declare const Tabs: $$__sveltets_2_IsomorphicComponent<{
13
- /** Tab items to display. */
14
- items: TabItem[];
15
- /** Underline the active tab. The underline will slide to the selected tab unless reduced motion is enabled. */
16
- underline?: boolean;
17
- /** Contain the element in a box. */
18
- contained?: boolean;
19
- /** Round the corners of the element if contained. */
20
- rounded?: boolean;
21
- }, {
22
- [evt: string]: CustomEvent<any>;
23
- }, {}, {}, "">;
24
- type Tabs = InstanceType<typeof Tabs>;
25
- export default Tabs;
@@ -1,7 +0,0 @@
1
- export { default as Breadcrumb } from './Breadcrumb.svelte';
2
- export { default as Menu } from './Menu.svelte';
3
- export { default as MenuItem } from './MenuItem.svelte';
4
- export { default as NavMenu } from './NavMenu.svelte';
5
- export { default as TabbedContent } from './TabbedContent.svelte';
6
- export { default as Tabs } from './Tabs.svelte';
7
- export type { BreadcrumbItem, MenuItem as MenuItemType, TabItem, TabbedContentItem } from './MenuTypes.js';
package/dist/nav/index.js DELETED
@@ -1,6 +0,0 @@
1
- export { default as Breadcrumb } from './Breadcrumb.svelte';
2
- export { default as Menu } from './Menu.svelte';
3
- export { default as MenuItem } from './MenuItem.svelte';
4
- export { default as NavMenu } from './NavMenu.svelte';
5
- export { default as TabbedContent } from './TabbedContent.svelte';
6
- export { default as Tabs } from './Tabs.svelte';