lutra 0.0.13 → 0.0.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 (112) hide show
  1. package/dist/data/Stat.svelte +1 -1
  2. package/dist/display/Avatar.svelte +1 -1
  3. package/dist/display/Badge.svelte +1 -1
  4. package/dist/display/Callout.svelte +3 -3
  5. package/dist/display/Code.svelte +1 -1
  6. package/dist/display/ContextTip.svelte +1 -1
  7. package/dist/display/Details.svelte +1 -1
  8. package/dist/display/Hero.svelte +1 -1
  9. package/dist/display/Icon.svelte +9 -3
  10. package/dist/display/IconButton.svelte +9 -9
  11. package/dist/display/IconButton.svelte.d.ts +0 -2
  12. package/dist/display/Image.svelte +41 -0
  13. package/dist/display/Image.svelte.d.ts +24 -0
  14. package/dist/display/Indicator.svelte +1 -1
  15. package/dist/display/Inset.svelte +18 -0
  16. package/dist/display/Inset.svelte.d.ts +17 -0
  17. package/dist/display/Popup.svelte +1 -1
  18. package/dist/display/Popup.svelte.d.ts +1 -3
  19. package/dist/display/Table.svelte +21 -0
  20. package/dist/display/Table.svelte.d.ts +23 -0
  21. package/dist/display/Tag.svelte +2 -2
  22. package/dist/display/Tooltip.svelte +1 -1
  23. package/dist/display/index.d.ts +1 -0
  24. package/dist/display/index.js +1 -0
  25. package/dist/form/Button.svelte +1 -1
  26. package/dist/form/FieldActions.svelte +26 -6
  27. package/dist/form/FieldActions.svelte.d.ts +1 -0
  28. package/dist/form/FieldContainer.svelte +4 -3
  29. package/dist/form/FieldContent.svelte +54 -16
  30. package/dist/form/FieldError.svelte +1 -1
  31. package/dist/form/FieldSection.svelte +20 -47
  32. package/dist/form/Fieldset.svelte +10 -5
  33. package/dist/form/Fieldset.svelte.d.ts +2 -0
  34. package/dist/form/Form.svelte +1 -1
  35. package/dist/form/Input.svelte +19 -40
  36. package/dist/form/Input.svelte.d.ts +2 -0
  37. package/dist/form/InputLength.svelte +1 -1
  38. package/dist/form/Label.svelte +2 -1
  39. package/dist/form/Select.svelte +1 -1
  40. package/dist/grid/Column.svelte +1 -1
  41. package/dist/grid/Grid.svelte +1 -1
  42. package/dist/grid/Row.svelte +1 -1
  43. package/dist/icons/Alert.svelte +2 -2
  44. package/dist/icons/Copy.svelte +2 -2
  45. package/dist/icons/Done.svelte +2 -2
  46. package/dist/icons/Error.svelte +2 -2
  47. package/dist/icons/Help.svelte +2 -2
  48. package/dist/icons/Hide.svelte +2 -2
  49. package/dist/icons/Info.svelte +2 -2
  50. package/dist/icons/Link.svelte +2 -2
  51. package/dist/icons/MenuBurger.svelte +3 -0
  52. package/dist/icons/MenuBurger.svelte.d.ts +23 -0
  53. package/dist/icons/MenuDots.svelte +3 -0
  54. package/dist/icons/MenuDots.svelte.d.ts +23 -0
  55. package/dist/icons/Show.svelte +2 -2
  56. package/dist/icons/Success.svelte +2 -2
  57. package/dist/icons/Warning.svelte +2 -2
  58. package/dist/layout/Layout.svelte +1 -1
  59. package/dist/layout/LayoutFooter.svelte +1 -1
  60. package/dist/layout/LayoutGrid.svelte +1 -1
  61. package/dist/layout/LayoutHeader.svelte +1 -1
  62. package/dist/layout/PageContent.svelte +1 -1
  63. package/dist/layout/Theme.svelte +7 -7
  64. package/dist/layout/UIContent.svelte +1 -1
  65. package/dist/nav/Breadcrumb.svelte +1 -1
  66. package/dist/nav/Menu.svelte +177 -161
  67. package/dist/nav/Menu.svelte.d.ts +11 -3
  68. package/dist/nav/MenuItem.svelte +122 -0
  69. package/dist/nav/MenuItem.svelte.d.ts +17 -0
  70. package/dist/nav/MenuTypes.d.ts +24 -3
  71. package/dist/nav/NavMenu.svelte +183 -0
  72. package/dist/nav/NavMenu.svelte.d.ts +18 -0
  73. package/dist/nav/TabbedContent.svelte +1 -1
  74. package/dist/nav/Tabs.svelte +8 -8
  75. package/dist/nav/index.d.ts +2 -0
  76. package/dist/nav/index.js +1 -0
  77. package/dist/style.css +36 -24
  78. package/dist/typo/Clamp.svelte +1 -1
  79. package/dist/typo/H.svelte +3 -2
  80. package/dist/typo/H.svelte.d.ts +2 -0
  81. package/dist/typo/H1.svelte +3 -3
  82. package/dist/typo/H1.svelte.d.ts +2 -0
  83. package/dist/typo/H2.svelte +3 -2
  84. package/dist/typo/H2.svelte.d.ts +2 -0
  85. package/dist/typo/H3.svelte +3 -2
  86. package/dist/typo/H3.svelte.d.ts +2 -0
  87. package/dist/typo/H4.svelte +3 -2
  88. package/dist/typo/H4.svelte.d.ts +2 -0
  89. package/dist/typo/H5.svelte +3 -2
  90. package/dist/typo/H5.svelte.d.ts +2 -0
  91. package/dist/typo/H6.svelte +3 -2
  92. package/dist/typo/H6.svelte.d.ts +2 -0
  93. package/dist/typo/P.svelte +3 -1
  94. package/dist/typo/P.svelte.d.ts +2 -0
  95. package/dist/utils/StringOrComponentOrSnippet.svelte +13 -0
  96. package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +17 -0
  97. package/dist/utils/index.d.ts +8 -0
  98. package/dist/utils/index.js +5 -0
  99. package/dist/utils/keyboard.svelte.d.ts +3 -0
  100. package/dist/utils/keyboard.svelte.js +142 -0
  101. package/dist/utils/transitions.js +14 -7
  102. package/package.json +9 -13
  103. package/dist/datatable/DataTable.svelte +0 -31
  104. package/dist/datatable/DataTable.svelte.d.ts +0 -20
  105. package/dist/datatable/DataTableColumn.svelte +0 -20
  106. package/dist/datatable/DataTableColumn.svelte.d.ts +0 -18
  107. package/dist/datatable/DataTableRow.svelte +0 -59
  108. package/dist/datatable/DataTableRow.svelte.d.ts +0 -21
  109. package/dist/datatable/index.d.ts +0 -3
  110. package/dist/datatable/index.js +0 -3
  111. package/dist/form/server.d.ts +0 -21
  112. package/dist/form/server.js +0 -48
@@ -0,0 +1,183 @@
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)
8
+ return {
9
+ href: void 0,
10
+ exact: false
11
+ };
12
+ if (href.endsWith("*")) {
13
+ return {
14
+ href: href.slice(0, -1),
15
+ exact: false
16
+ };
17
+ }
18
+ return {
19
+ href,
20
+ exact: true
21
+ };
22
+ }
23
+ function parseLinks(items2) {
24
+ return items2.map((item) => {
25
+ if (item.href) {
26
+ return {
27
+ ...item,
28
+ ...parseHref(item.href)
29
+ };
30
+ }
31
+ if (!item.children)
32
+ return item;
33
+ return {
34
+ ...item,
35
+ children: parseLinks(item.children)
36
+ };
37
+ });
38
+ }
39
+ const parsedItems = parseLinks(items);
40
+ </script>
41
+
42
+ <UiContent>
43
+ <nav>
44
+ <ul>
45
+ {#snippet link(i)}
46
+ <li aria-current={i.exact ? ($page?.url?.pathname === i.href ? 'page' : undefined) : ($page?.url?.pathname?.startsWith(i.href) ? 'page' : undefined)}>
47
+ {#if i.href}
48
+ <a href={i.href}>
49
+ {#if i.icon}
50
+ <svelte:component this={i.icon} />
51
+ {/if}
52
+ {i.label}
53
+ </a>
54
+ {:else}
55
+ <span>
56
+ {#if i.icon}
57
+ <svelte:component this={i.icon} />
58
+ {/if}
59
+ {i.label}
60
+ </span>
61
+ {/if}
62
+ {#if i.children}
63
+ <ul>
64
+ {#each i.children as child}
65
+ {@render link(child)}
66
+ {/each}
67
+ </ul>
68
+ {/if}
69
+ </li>
70
+ {/snippet}
71
+ {#each parsedItems as item, index}
72
+ {@render link(item)}
73
+ {/each}
74
+ </ul>
75
+ </nav>
76
+ </UiContent>
77
+
78
+ <style>
79
+ nav {
80
+ }
81
+ ul {
82
+ display: flex;
83
+ list-style: none;
84
+ padding: 0;
85
+ margin: 0;
86
+ }
87
+ a, span {
88
+ display: flex;
89
+ align-items: center;
90
+ padding: 0.5rem 0.75rem;
91
+ text-decoration: none;
92
+ font-weight: 500;
93
+ color: var(--menu-text);
94
+ }
95
+ a:hover, span:hover {
96
+ background: var(--menu-bg-hover);
97
+ color: var(--menu-text-hover);
98
+ }
99
+ /** loop */
100
+ ul > li > ul {
101
+ display: none;
102
+ position: absolute;
103
+ flex-direction: column;
104
+ top: 100%;
105
+ left: 0;
106
+ background: var(--menu-bg);
107
+ border: var(--menu-border);
108
+ }
109
+ ul > li:hover > ul,
110
+ ul > li:focus-within > ul {
111
+ display: flex;
112
+ }
113
+ ul > li:hover,
114
+ ul > li:focus-within {
115
+ background: var(--menu-bg-hover);
116
+ }
117
+ ul > li:hover > a,
118
+ ul > li:focus-within > a,
119
+ ul > li:hover > span,
120
+ ul > li:focus-within > span {
121
+ color: var(--menu-text-hover);
122
+ }
123
+
124
+ ul > li {
125
+ border-block-end: var(--menu-border);
126
+ position: relative;
127
+ white-space: nowrap;
128
+ }
129
+ ul > li:last-child {
130
+ border-block-end: none;
131
+ }
132
+ ul > li > ul {
133
+ left: 100%;
134
+ top: -1px;
135
+ }
136
+ ul > li:has(ul) > a {
137
+ padding-inline-end: 2rem;
138
+ }
139
+ ul > li:has(ul) > a::after {
140
+ content: "▶";
141
+ padding-inline-start: 0.5rem;
142
+ font-size: 9px;
143
+ position: absolute;
144
+ right: 0.75rem;
145
+ color: var(--menu-text);
146
+ }
147
+ /** top level */
148
+ nav > ul {
149
+ flex-direction: row;
150
+ gap: 1px;
151
+ position: relative;
152
+ }
153
+ nav > ul > li {
154
+ border-block-end: none;
155
+ }
156
+ nav > ul > li > a {
157
+ border-radius: var(--border-radius);
158
+ }
159
+ nav > ul > li > a:hover {
160
+ border-radius: var(--border-radius);
161
+ }
162
+ nav > ul > li > ul {
163
+ top: 100%;
164
+ left: 0;
165
+ background: var(--menu-bg);
166
+ border: var(--menu-border);
167
+ filter: drop-shadow(0 0.25rem 0.5rem var(--shadow));
168
+ }
169
+ nav > ul > li:has(ul) > a {
170
+ padding: 0.75rem 1rem;
171
+ }
172
+ nav > ul > li:has(ul) > a::after {
173
+ content: "";
174
+ padding: 0;
175
+ }
176
+ ul > li[aria-current="page"] a {
177
+ background: var(--menu-bg-active);
178
+ color: var(--menu-text-active);
179
+ }
180
+ ul > li[aria-current="page"] a:hover {
181
+ color: var(--menu-text-active-hover);
182
+ }
183
+ </style>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { MenuItem } from "./MenuTypes.js";
3
+ declare const __propDef: {
4
+ props: {
5
+ /** Menu items to display */
6
+ items: MenuItem[];
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export type NavMenuProps = typeof __propDef.props;
14
+ export type NavMenuEvents = typeof __propDef.events;
15
+ export type NavMenuSlots = typeof __propDef.slots;
16
+ export default class NavMenu extends SvelteComponent<NavMenuProps, NavMenuEvents, NavMenuSlots> {
17
+ }
18
+ export {};
@@ -1,4 +1,4 @@
1
- <script>import { page } from "$app/stores";
1
+ <script lang="ts">import { page } from "$app/stores";
2
2
  import Tabs from "./Tabs.svelte";
3
3
  const {
4
4
  items,
@@ -1,4 +1,4 @@
1
- <script>const {
1
+ <script lang="ts">const {
2
2
  items,
3
3
  underline,
4
4
  contained,
@@ -17,7 +17,7 @@ function onClickButton(event, item, index) {
17
17
  {item.label}
18
18
  </a>
19
19
  {:else if item.onclick}
20
- <button draggable="false" onclick={(event) => onClickButton(event, item, index)}>
20
+ <button type="button" draggable="false" onclick={(event) => onClickButton(event, item, index)}>
21
21
  {item.label}
22
22
  </button>
23
23
  {/if}
@@ -66,7 +66,7 @@ function onClickButton(event, item, index) {
66
66
  button {
67
67
  display: block;
68
68
  padding: 0.75rem 0.5rem;
69
- color: var(--menu-link);
69
+ color: var(--menu-text);
70
70
  transition: all var(--menu-trans);
71
71
  font-weight: 500;
72
72
  letter-spacing: -0.05ch;
@@ -90,25 +90,25 @@ function onClickButton(event, item, index) {
90
90
  inline-size: 100%;
91
91
  text-align: center;
92
92
  padding-block-start: calc(0.75rem + 3px);
93
- color: var(--menu-link);
93
+ color: var(--menu-text);
94
94
  font-weight: 600;
95
95
  }
96
96
  a:hover,
97
97
  button:hover {
98
98
  background: var(--menu-bg-hover);
99
- color: var(--menu-link-hover);
99
+ color: var(--menu-text-hover);
100
100
  }
101
101
  li[aria-current="page"] a,
102
102
  li[aria-current="page"] button {
103
103
  background: var(--menu-bg-active);
104
- color: var(--menu-link-active);
104
+ color: var(--menu-text-active);
105
105
  opacity: 1;
106
- border-block-end: 2px solid var(--menu-link-active);
106
+ border-block-end: 2px solid var(--menu-text-active);
107
107
  }
108
108
  .Underline {
109
109
  inline-size: 0px;
110
110
  block-size: 2px;
111
- background-color: var(--menu-link-active);
111
+ background-color: var(--menu-text-active);
112
112
  position: absolute;
113
113
  bottom: 0;
114
114
  left: 0;
@@ -2,3 +2,5 @@ export { default as Breadcrumb } from './Breadcrumb.svelte';
2
2
  export { default as Menu } from './Menu.svelte';
3
3
  export { default as TabbedContent } from './TabbedContent.svelte';
4
4
  export { default as Tabs } from './Tabs.svelte';
5
+ export { default as MenuItem } from './MenuItem.svelte';
6
+ export type { BreadcrumbItem, MenuItem as MenuItemType, TabItem, TabbedContentItem } from './MenuTypes.js';
package/dist/nav/index.js CHANGED
@@ -2,3 +2,4 @@ export { default as Breadcrumb } from './Breadcrumb.svelte';
2
2
  export { default as Menu } from './Menu.svelte';
3
3
  export { default as TabbedContent } from './TabbedContent.svelte';
4
4
  export { default as Tabs } from './Tabs.svelte';
5
+ export { default as MenuItem } from './MenuItem.svelte';
package/dist/style.css CHANGED
@@ -54,7 +54,7 @@
54
54
  --l-focus-outline: var(--focus-size) solid var(--l-focus-color);
55
55
  /* text */
56
56
  --l-text: hsl(240, 2%, 20%);
57
- --l-text-subtle: hsl(240, 2%, 44%);
57
+ --l-text-subtle: hsl(240, 2%, 50%);
58
58
  --l-text-highlight: hsl(206, 99%, 47%);
59
59
  --l-text-heading: hsl(240, 3%, 12%);
60
60
  --l-text-link: hsl(215, 70%, 55%);
@@ -118,10 +118,9 @@
118
118
  --l-menu-bg-active: hsl(215, 25%, 90%);
119
119
  --l-menu-bg-hover: hsl(215, 20%, 95%);
120
120
  --l-menu-border: var(--l-border-subtle);
121
- --l-menu-link: #666;
122
- --l-menu-link-hover: #333;
123
- --l-menu-link-active: #333;
124
- --l-menu-link-active-hover: #333;
121
+ --l-menu-text: var(--text);
122
+ --l-menu-text-subtle: var(--text-subtle);
123
+ --l-menu-text-active: hsl(240, 2%, 15%);
125
124
  /* status colors */
126
125
  --l-status-default: hsl(215, 20%, 85%);
127
126
  --l-status-ok: #28a745;
@@ -216,10 +215,8 @@
216
215
  --d-menu-bg-active: #444;
217
216
  --d-menu-bg-hover: #444;
218
217
  --d-menu-border: var(--d-border-subtle);
219
- --d-menu-link: #ccc;
220
- --d-menu-link-hover: #fff;
221
- --d-menu-link-active: #fff;
222
- --d-menu-link-active-hover: #fff;
218
+ --d-menu-text: #ccc;
219
+ --d-menu-text-active: #fff;
223
220
  /* status colors */
224
221
  --d-status-default: hsl(215, 10%, 25%);
225
222
  --d-status-ok: #4caf50;
@@ -255,8 +252,8 @@ body {
255
252
  -moz-osx-font-smoothing: grayscale;
256
253
  scrollbar-width: thin;
257
254
  font-kerning: auto;
258
- scrollbar-gutter: stable both-edges;
259
255
  min-width: 280px;
256
+ scrollbar-gutter: stable both-edges;
260
257
  }
261
258
 
262
259
  body * {
@@ -378,6 +375,12 @@ code, pre {
378
375
  font-weight: 400;
379
376
  }
380
377
 
378
+ hr {
379
+ border: 0;
380
+ border-top: var(--border);
381
+ box-sizing: content-box;
382
+ }
383
+
381
384
  /**
382
385
  * Links
383
386
  */
@@ -438,10 +441,10 @@ input:user-invalid:focus-visible {
438
441
  }
439
442
 
440
443
  select {
441
- padding-right: 2em;
444
+ padding-right: 2.25em;
442
445
  appearance: none;
443
- background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEyIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM6c2VyaWY9Imh0dHA6Ly93d3cuc2VyaWYuY29tLyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyI+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1LDAsMCwxLDAsMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwwTDAsMEw4LDhMMTYsMFoiLz4KICAgIDwvZz4KPC9zdmc+Cg==') calc(100% - 0.65em) 50% no-repeat;
444
- background-size: 10px;
446
+ background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEyIDgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM6c2VyaWY9Imh0dHA6Ly93d3cuc2VyaWYuY29tLyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyI+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1LDAsMCwxLDAsMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwwTDAsMEw4LDhMMTYsMFoiLz4KICAgIDwvZz4KPC9zdmc+Cg==') calc(100% - 0.75em) 50% no-repeat;
447
+ background-size: 12px;
445
448
  }
446
449
 
447
450
  input[type="submit"],
@@ -719,8 +722,9 @@ button:active,
719
722
  table {
720
723
  margin-block: 1.5em;
721
724
  border-collapse: collapse;
725
+ font-size: var(--font-size, 1em);
722
726
  }
723
- table.full {
727
+ table.fullWidth {
724
728
  width: 100%;
725
729
  }
726
730
  table.contained {
@@ -737,18 +741,21 @@ button:active,
737
741
  table.rounded {
738
742
  border-radius: var(--border-radius);
739
743
  overflow: clip;
740
- border-collapse: separate;
741
744
  border-spacing: 0;
742
745
  }
743
- th {
746
+ tr {
747
+ border-block-end: var(--border-subtle);
744
748
  }
745
749
  th,
746
750
  td {
747
- padding: var(--padding, 0.5rem 0.75rem);
751
+ font-size: 1em;
752
+ line-height: 1.5;
753
+ padding: var(--padding, 0.5em 0.75em);
748
754
  text-align: start;
749
- border-inline-end: var(--border-subtle);
750
- border-block-end: var(--border-subtle);
751
- font-size: var(--font-size, 1em);
755
+ }
756
+ td.actions {
757
+ min-width: 0px;
758
+ width: 0px;
752
759
  }
753
760
  table.hang th:first-of-type,
754
761
  table.hang td:first-of-type {
@@ -764,15 +771,20 @@ button:active,
764
771
  }
765
772
  th {
766
773
  font-weight: 700;
767
- border-block-end: var(--border);
768
- border-inline-end: var(--border);
769
774
  }
770
- table.color tr:nth-child(2n) {
775
+ table.colored tbody tr:nth-child(2n) {
771
776
  background-color: var(--bg-subtle);
772
777
  }
773
- table tr:last-child td {
778
+ table.contained th,
779
+ table.contained td {
780
+ border-inline-end: var(--border-subtle);
781
+ }
782
+ table tbody tr:last-of-type {
774
783
  border-block-end: none;
775
784
  }
785
+ table thead tr {
786
+ background-color: var(--bg-subtle);
787
+ }
776
788
 
777
789
  /** Forms */
778
790
  fieldset label,
@@ -1,4 +1,4 @@
1
- <script>import { setContext } from "svelte";
1
+ <script lang="ts">import { setContext } from "svelte";
2
2
  let {
3
3
  children,
4
4
  inline,
@@ -1,6 +1,7 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  let {
3
3
  children,
4
+ lang,
4
5
  level = 1,
5
6
  center = false,
6
7
  subtle = false,
@@ -9,7 +10,7 @@ let {
9
10
  const Tag = `h${level}`;
10
11
  </script>
11
12
 
12
- <svelte:element this={Tag} class:subtle class:hr class:center class="H Level-{level}">
13
+ <svelte:element this={Tag} class:subtle class:hr class:center class="H Level-{level}" {lang}>
13
14
  {@render children()}
14
15
  </svelte:element>
15
16
 
@@ -3,6 +3,8 @@ import { type Snippet } from "svelte";
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  children: Snippet;
6
+ /** Language of the element */
7
+ lang?: string | undefined;
6
8
  /** The level of the heading. */
7
9
  level?: 5 | 3 | 2 | 1 | 4 | 6 | undefined;
8
10
  /** Center the text. */
@@ -1,14 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
-
12
- <H level={1} center={center} hr={hr} subtle={subtle}>
12
+ <H level={1} center={center} hr={hr} subtle={subtle} {lang}>
13
13
  {@render children()}
14
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,13 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
- <H level={2} center={center} hr={hr} subtle={subtle}>
12
+ <H level={2} center={center} hr={hr} subtle={subtle} {lang}>
12
13
  {@render children()}
13
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,13 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
- <H level={3} center={center} hr={hr} subtle={subtle}>
12
+ <H level={3} center={center} hr={hr} subtle={subtle} {lang}>
12
13
  {@render children()}
13
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,13 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
- <H level={4} center={center} hr={hr} subtle={subtle}>
12
+ <H level={4} center={center} hr={hr} subtle={subtle} {lang}>
12
13
  {@render children()}
13
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,13 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
- <H level={5} center={center} hr={hr} subtle={subtle}>
12
+ <H level={5} center={center} hr={hr} subtle={subtle} {lang}>
12
13
  {@render children()}
13
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,13 +1,14 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  import H from "./H.svelte";
3
3
  let {
4
4
  center = false,
5
+ lang,
5
6
  hr = false,
6
7
  subtle = false,
7
8
  children
8
9
  } = $props();
9
10
  </script>
10
11
 
11
- <H level={6} center={center} hr={hr} subtle={subtle}>
12
+ <H level={6} center={center} hr={hr} subtle={subtle} {lang}>
12
13
  {@render children()}
13
14
  </H>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Add a horizontal rule below the text. */
8
10
  hr?: boolean | undefined;
9
11
  /** Make the text subtle. */
@@ -1,6 +1,7 @@
1
- <script>import {} from "svelte";
1
+ <script lang="ts">import {} from "svelte";
2
2
  let {
3
3
  center = false,
4
+ lang,
4
5
  subtle = false,
5
6
  strong = false,
6
7
  children
@@ -12,6 +13,7 @@ let {
12
13
  class:subtle
13
14
  class:center
14
15
  class:strong
16
+ {lang}
15
17
  >
16
18
  {@render children()}
17
19
  </p>
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  props: {
5
5
  /** Center the text. */
6
6
  center?: boolean | undefined;
7
+ /** Language of the element */
8
+ lang?: string | undefined;
7
9
  /** Make the text subtle. */
8
10
  subtle?: boolean | undefined;
9
11
  /** Make the text strong. */
@@ -0,0 +1,13 @@
1
+ <script lang="ts">import { isComponent, isSnippet } from "./isSnippet.js";
2
+ let {
3
+ content
4
+ } = $props();
5
+ </script>
6
+
7
+ {#if typeof content === 'string'}
8
+ {content}
9
+ {:else if isComponent(content)}
10
+ <svelte:component this={content} />
11
+ {:else if isSnippet(content)}
12
+ {@render content()}
13
+ {/if}
@@ -0,0 +1,17 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { ComponentType, Snippet } from "svelte";
3
+ declare const __propDef: {
4
+ props: {
5
+ content: string | ComponentType | Snippet;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type StringOrComponentOrSnippetProps = typeof __propDef.props;
13
+ export type StringOrComponentOrSnippetEvents = typeof __propDef.events;
14
+ export type StringOrComponentOrSnippetSlots = typeof __propDef.slots;
15
+ export default class StringOrComponentOrSnippet extends SvelteComponent<StringOrComponentOrSnippetProps, StringOrComponentOrSnippetEvents, StringOrComponentOrSnippetSlots> {
16
+ }
17
+ export {};