lutra 0.0.20 → 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 (223) 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 +37 -11
  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 -75
  28. package/dist/data/Stat.svelte +0 -89
  29. package/dist/data/Stat.svelte.d.ts +0 -39
  30. package/dist/data/index.d.ts +0 -1
  31. package/dist/data/index.js +0 -1
  32. package/dist/display/Avatar.svelte +0 -61
  33. package/dist/display/Avatar.svelte.d.ts +0 -23
  34. package/dist/display/Badge.svelte +0 -93
  35. package/dist/display/Badge.svelte.d.ts +0 -34
  36. package/dist/display/Callout.svelte +0 -109
  37. package/dist/display/Callout.svelte.d.ts +0 -36
  38. package/dist/display/Close.svelte +0 -58
  39. package/dist/display/Close.svelte.d.ts +0 -21
  40. package/dist/display/Code.svelte +0 -195
  41. package/dist/display/Code.svelte.d.ts +0 -31
  42. package/dist/display/ContextTip.svelte +0 -26
  43. package/dist/display/ContextTip.svelte.d.ts +0 -22
  44. package/dist/display/Details.svelte +0 -49
  45. package/dist/display/Details.svelte.d.ts +0 -32
  46. package/dist/display/Hero.svelte +0 -50
  47. package/dist/display/Hero.svelte.d.ts +0 -30
  48. package/dist/display/Icon.svelte +0 -40
  49. package/dist/display/Icon.svelte.d.ts +0 -24
  50. package/dist/display/IconButton.svelte +0 -84
  51. package/dist/display/IconButton.svelte.d.ts +0 -30
  52. package/dist/display/Image.svelte +0 -91
  53. package/dist/display/Image.svelte.d.ts +0 -37
  54. package/dist/display/Indicator.svelte +0 -352
  55. package/dist/display/Indicator.svelte.d.ts +0 -24
  56. package/dist/display/Inset.svelte +0 -18
  57. package/dist/display/Inset.svelte.d.ts +0 -22
  58. package/dist/display/Notification.svelte +0 -104
  59. package/dist/display/Notification.svelte.d.ts +0 -42
  60. package/dist/display/Popup.svelte +0 -111
  61. package/dist/display/Popup.svelte.d.ts +0 -30
  62. package/dist/display/Table.svelte +0 -24
  63. package/dist/display/Table.svelte.d.ts +0 -34
  64. package/dist/display/Tag.svelte +0 -90
  65. package/dist/display/Tag.svelte.d.ts +0 -35
  66. package/dist/display/Tooltip.svelte.d.ts +0 -28
  67. package/dist/display/index.d.ts +0 -14
  68. package/dist/display/index.js +0 -14
  69. package/dist/display/notifications.svelte.d.ts +0 -21
  70. package/dist/display/notifications.svelte.js +0 -31
  71. package/dist/form/Button.svelte +0 -34
  72. package/dist/form/Button.svelte.d.ts +0 -36
  73. package/dist/form/FieldActions.svelte +0 -46
  74. package/dist/form/FieldActions.svelte.d.ts +0 -24
  75. package/dist/form/FieldContainer.svelte +0 -37
  76. package/dist/form/FieldContainer.svelte.d.ts +0 -24
  77. package/dist/form/FieldContent.svelte +0 -134
  78. package/dist/form/FieldContent.svelte.d.ts +0 -59
  79. package/dist/form/FieldError.svelte +0 -14
  80. package/dist/form/FieldError.svelte.d.ts +0 -21
  81. package/dist/form/FieldSection.svelte +0 -86
  82. package/dist/form/FieldSection.svelte.d.ts +0 -34
  83. package/dist/form/Fieldset.svelte +0 -68
  84. package/dist/form/Fieldset.svelte.d.ts +0 -42
  85. package/dist/form/Form.svelte +0 -98
  86. package/dist/form/Form.svelte.d.ts +0 -33
  87. package/dist/form/Input.svelte +0 -287
  88. package/dist/form/Input.svelte.d.ts +0 -142
  89. package/dist/form/InputLength.svelte +0 -32
  90. package/dist/form/InputLength.svelte.d.ts +0 -21
  91. package/dist/form/Label.svelte +0 -27
  92. package/dist/form/Label.svelte.d.ts +0 -31
  93. package/dist/form/Select.svelte +0 -88
  94. package/dist/form/Select.svelte.d.ts +0 -97
  95. package/dist/form/client.svelte.d.ts +0 -45
  96. package/dist/form/client.svelte.js +0 -90
  97. package/dist/form/form.d.ts +0 -52
  98. package/dist/form/form.js +0 -326
  99. package/dist/form/index.d.ts +0 -15
  100. package/dist/form/index.js +0 -15
  101. package/dist/form/types.d.ts +0 -52
  102. package/dist/form/types.js +0 -1
  103. package/dist/grid/Column.svelte +0 -11
  104. package/dist/grid/Column.svelte.d.ts +0 -22
  105. package/dist/grid/Grid.svelte +0 -19
  106. package/dist/grid/Grid.svelte.d.ts +0 -24
  107. package/dist/grid/Row.svelte +0 -44
  108. package/dist/grid/Row.svelte.d.ts +0 -24
  109. package/dist/icons/Alert.svelte +0 -3
  110. package/dist/icons/Alert.svelte.d.ts +0 -23
  111. package/dist/icons/Copy.svelte +0 -3
  112. package/dist/icons/Copy.svelte.d.ts +0 -23
  113. package/dist/icons/Done.svelte +0 -3
  114. package/dist/icons/Done.svelte.d.ts +0 -23
  115. package/dist/icons/Error.svelte +0 -3
  116. package/dist/icons/Error.svelte.d.ts +0 -23
  117. package/dist/icons/Help.svelte +0 -3
  118. package/dist/icons/Help.svelte.d.ts +0 -23
  119. package/dist/icons/Hide.svelte +0 -3
  120. package/dist/icons/Hide.svelte.d.ts +0 -23
  121. package/dist/icons/Info.svelte +0 -3
  122. package/dist/icons/Info.svelte.d.ts +0 -23
  123. package/dist/icons/Link.svelte +0 -3
  124. package/dist/icons/Link.svelte.d.ts +0 -23
  125. package/dist/icons/MenuBurger.svelte +0 -3
  126. package/dist/icons/MenuBurger.svelte.d.ts +0 -23
  127. package/dist/icons/MenuDots.svelte +0 -3
  128. package/dist/icons/MenuDots.svelte.d.ts +0 -23
  129. package/dist/icons/Show.svelte +0 -3
  130. package/dist/icons/Show.svelte.d.ts +0 -23
  131. package/dist/icons/Success.svelte +0 -3
  132. package/dist/icons/Success.svelte.d.ts +0 -23
  133. package/dist/icons/Warning.svelte +0 -3
  134. package/dist/icons/Warning.svelte.d.ts +0 -23
  135. package/dist/icons/index.d.ts +0 -11
  136. package/dist/icons/index.js +0 -11
  137. package/dist/layout/Layout.svelte +0 -45
  138. package/dist/layout/Layout.svelte.d.ts +0 -25
  139. package/dist/layout/LayoutFooter.svelte +0 -21
  140. package/dist/layout/LayoutFooter.svelte.d.ts +0 -19
  141. package/dist/layout/LayoutGrid.svelte +0 -51
  142. package/dist/layout/LayoutGrid.svelte.d.ts +0 -38
  143. package/dist/layout/LayoutHeader.svelte +0 -94
  144. package/dist/layout/LayoutHeader.svelte.d.ts +0 -39
  145. package/dist/layout/LayoutSideMenu.svelte +0 -54
  146. package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -25
  147. package/dist/layout/LayoutTypes.d.ts +0 -15
  148. package/dist/layout/LayoutTypes.js +0 -9
  149. package/dist/layout/Overlay.svelte +0 -20
  150. package/dist/layout/Overlay.svelte.d.ts +0 -35
  151. package/dist/layout/OverlayContainer.svelte +0 -28
  152. package/dist/layout/OverlayContainer.svelte.d.ts +0 -16
  153. package/dist/layout/OverlayLayer.svelte +0 -145
  154. package/dist/layout/OverlayLayer.svelte.d.ts +0 -22
  155. package/dist/layout/PageContent.svelte +0 -97
  156. package/dist/layout/PageContent.svelte.d.ts +0 -28
  157. package/dist/layout/Theme.svelte +0 -228
  158. package/dist/layout/Theme.svelte.d.ts +0 -24
  159. package/dist/layout/UIContent.svelte +0 -15
  160. package/dist/layout/UIContent.svelte.d.ts +0 -22
  161. package/dist/layout/index.d.ts +0 -7
  162. package/dist/layout/index.js +0 -7
  163. package/dist/layout/overlays.svelte.d.ts +0 -34
  164. package/dist/layout/overlays.svelte.js +0 -44
  165. package/dist/nav/Breadcrumb.svelte +0 -82
  166. package/dist/nav/Breadcrumb.svelte.d.ts +0 -33
  167. package/dist/nav/Menu.svelte +0 -177
  168. package/dist/nav/Menu.svelte.d.ts +0 -33
  169. package/dist/nav/MenuItem.svelte +0 -140
  170. package/dist/nav/MenuItem.svelte.d.ts +0 -26
  171. package/dist/nav/MenuTypes.d.ts +0 -58
  172. package/dist/nav/MenuTypes.js +0 -1
  173. package/dist/nav/NavMenu.svelte +0 -183
  174. package/dist/nav/NavMenu.svelte.d.ts +0 -20
  175. package/dist/nav/TabbedContent.svelte +0 -43
  176. package/dist/nav/TabbedContent.svelte.d.ts +0 -24
  177. package/dist/nav/Tabs.svelte +0 -118
  178. package/dist/nav/Tabs.svelte.d.ts +0 -26
  179. package/dist/nav/index.d.ts +0 -6
  180. package/dist/nav/index.js +0 -5
  181. package/dist/style.css +0 -853
  182. package/dist/typo/Clamp.svelte +0 -25
  183. package/dist/typo/Clamp.svelte.d.ts +0 -28
  184. package/dist/typo/H.svelte +0 -52
  185. package/dist/typo/H.svelte.d.ts +0 -32
  186. package/dist/typo/H1.svelte +0 -14
  187. package/dist/typo/H1.svelte.d.ts +0 -30
  188. package/dist/typo/H2.svelte +0 -14
  189. package/dist/typo/H2.svelte.d.ts +0 -30
  190. package/dist/typo/H3.svelte +0 -14
  191. package/dist/typo/H3.svelte.d.ts +0 -30
  192. package/dist/typo/H4.svelte +0 -14
  193. package/dist/typo/H4.svelte.d.ts +0 -30
  194. package/dist/typo/H5.svelte +0 -14
  195. package/dist/typo/H5.svelte.d.ts +0 -30
  196. package/dist/typo/H6.svelte +0 -14
  197. package/dist/typo/H6.svelte.d.ts +0 -30
  198. package/dist/typo/P.svelte +0 -34
  199. package/dist/typo/P.svelte.d.ts +0 -30
  200. package/dist/typo/index.d.ts +0 -9
  201. package/dist/typo/index.js +0 -9
  202. package/dist/utils/StringOrComponentOrSnippet.svelte +0 -14
  203. package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +0 -24
  204. package/dist/utils/attr.d.ts +0 -5
  205. package/dist/utils/attr.js +0 -21
  206. package/dist/utils/color.d.ts +0 -51
  207. package/dist/utils/color.js +0 -97
  208. package/dist/utils/defaults.d.ts +0 -4
  209. package/dist/utils/defaults.js +0 -1
  210. package/dist/utils/dom.d.ts +0 -15
  211. package/dist/utils/dom.js +0 -74
  212. package/dist/utils/hooks.server.d.ts +0 -2
  213. package/dist/utils/hooks.server.js +0 -16
  214. package/dist/utils/id.d.ts +0 -1
  215. package/dist/utils/id.js +0 -3
  216. package/dist/utils/index.d.ts +0 -8
  217. package/dist/utils/index.js +0 -5
  218. package/dist/utils/isSnippet.d.ts +0 -5
  219. package/dist/utils/isSnippet.js +0 -6
  220. package/dist/utils/keyboard.svelte.d.ts +0 -22
  221. package/dist/utils/keyboard.svelte.js +0 -161
  222. /package/dist/{utils → util}/transitions.d.ts +0 -0
  223. /package/dist/{utils → util}/transitions.js +0 -0
@@ -1,61 +0,0 @@
1
- <script lang="ts">import { hexRelativeLuminance, stringToColor } from "../utils/color.js";
2
- const {
3
- src,
4
- name = "N/A",
5
- shape = "circle"
6
- } = $props();
7
- const color = stringToColor(name);
8
- const luminance = hexRelativeLuminance(color);
9
- const textColor = luminance < 0.5 ? "rgba(255,255,255,0.85)" : "rgba(0,0,0,0.85)";
10
- </script>
11
-
12
- <figure class="Avatar {shape}" style="--user-color: {color}; --text-color: {textColor};">
13
- {#if src}
14
- <img src={src} alt={name} />
15
- {:else}
16
- <div class="Placeholder">
17
- <span>{name[0]}</span>
18
- </div>
19
- {/if}
20
- </figure>
21
-
22
- <style>
23
- .Avatar {
24
- display: flex;
25
- align-items: center;
26
- justify-content: center;
27
- margin: 0;
28
- block-size: var(--size, 3rem);
29
- inline-size: var(--size, 3rem);
30
- overflow: hidden;
31
- background-color: var(--user-color);
32
- mask-image: var(--mask-image, none);
33
- mask-size: 100% 100%;
34
- mask-repeat: no-repeat;
35
- -webkit-mask-image: var(--mask-image, none);
36
- -webkit-mask-size: 100% 100%;
37
- -webkit-mask-repeat: no-repeat;
38
- }
39
- .Avatar.circle { border-radius: 50%; }
40
- .Avatar.square { border-radius: 0; }
41
- .Avatar.rounded { border-radius: var(--border-radius); }
42
- .Avatar img {
43
- block-size: 100%;
44
- inline-size: 100%;
45
- object-fit: cover;
46
- }
47
- .Avatar .Placeholder {
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- block-size: 100%;
52
- inline-size: 100%;
53
- background-color: var(--user-color);
54
- }
55
- .Avatar .Placeholder span {
56
- font-size: 1rem;
57
- font-weight: 600;
58
- color: var(--text-color);
59
- user-select: none;
60
- }
61
- </style>
@@ -1,23 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- src?: string | undefined;
5
- name?: string | undefined;
6
- shape?: "circle" | "square" | "rounded" | undefined;
7
- };
8
- events: {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {};
12
- };
13
- export type AvatarProps = typeof __propDef.props;
14
- export type AvatarEvents = typeof __propDef.events;
15
- export type AvatarSlots = typeof __propDef.slots;
16
- export default class Avatar extends SvelteComponent<AvatarProps, AvatarEvents, AvatarSlots> {
17
- constructor(options?: import("svelte").ComponentConstructorOptions<{
18
- src?: string | undefined;
19
- name?: string | undefined;
20
- shape?: "circle" | "square" | "rounded" | undefined;
21
- }>);
22
- }
23
- export {};
@@ -1,93 +0,0 @@
1
- <script lang="ts">import { isStatusColor } from "../utils/color.js";
2
- let {
3
- count,
4
- max = 99,
5
- color = "alert",
6
- glow = true,
7
- outline = true,
8
- children
9
- } = $props();
10
- let el = $state(null);
11
- let isSet = $derived(isStatusColor(color));
12
- let charCount = $derived.by(() => {
13
- if (count === void 0)
14
- return 0;
15
- if (max && count > max)
16
- return max.toString().length + 1;
17
- return count.toString().length;
18
- });
19
- </script>
20
-
21
- <div class="BadgeContainer">
22
- <div class="BadgeContent">
23
- {#if children}
24
- {@render children()}
25
- {/if}
26
- </div>
27
- <span class="Badge" class:outline class:glow class:empty={count === undefined} bind:this={el} style="--charCount: {charCount}ch; --bgColor: {!isSet ? color : 'var(--status-'+color+')'};">
28
- {#if count && max}
29
- <em>
30
- {count > max ? `${max}+` : count}
31
- </em>
32
- {/if}
33
- </span>
34
- </div>
35
-
36
-
37
- <style>
38
- .BadgeContainer {
39
- position: relative;
40
- display: inline-grid;
41
- grid-template-columns: fit-content;
42
- grid-template-areas: "content";
43
- text-rendering: geometricPrecision;
44
- }
45
- .BadgeContent {
46
- grid-area: content;
47
- }
48
- .Badge {
49
- --internalSize: max(calc(var(--size, 0.75rem)), 14px);
50
- display: grid;
51
- place-items: center;
52
- align-items: center;
53
- justify-content: center;
54
- position: absolute;
55
- top: calc(1px + var(--top, 0%));
56
- right: var(--right, 0%);
57
- transform: translate(0.55rem, -50%);
58
- background-color: var(--bgColor);
59
- padding: 3px 5px 2px 5px;
60
- border-radius: 9999px;
61
- --h: max(calc(var(--internalSize) * 0.9), 9px);
62
- font-size: var(--h);
63
- line-height: var(--h);
64
- z-index: 100;
65
- font-weight: 600;
66
- grid-area: content;
67
- }
68
- .Badge.outline {
69
- outline: min(calc(var(--size, 0.75rem) * 0.25), 2px) solid var(--outline-color, var(--bg-app));
70
- }
71
- .Badge.empty {
72
- width: max(0.5rem, 8px);
73
- height: max(0.5rem, 8px);
74
- min-width: auto;
75
- aspect-ratio: 1/1;
76
- transform: translate(50%, -50%);
77
- padding: 0;
78
- }
79
- .Badge.glow {
80
- filter: drop-shadow(0 0 0.25rem color-mix(in srgb, var(--bgColor) 30%, transparent 70%));
81
- }
82
- em {
83
- opacity: 0.99;
84
- font-style: normal;
85
- color: var(--bgColor);
86
- filter: invert(1) grayscale(1) brightness(1.3) contrast(9000%);
87
- mix-blend-mode: luminosity;
88
- left: 50%;
89
- position: relative;
90
- display: block;
91
- transform: translateX(-50%);
92
- }
93
- </style>
@@ -1,34 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { StatusColorOrString } from "../utils/color.js";
3
- declare const __propDef: {
4
- props: {
5
- count?: number | undefined;
6
- max?: number | undefined;
7
- color?: StatusColorOrString | undefined;
8
- glow?: boolean | undefined;
9
- outline?: boolean | undefined;
10
- children?: ((this: void) => typeof import("svelte").SnippetReturn & {
11
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
12
- }) | undefined;
13
- };
14
- events: {
15
- [evt: string]: CustomEvent<any>;
16
- };
17
- slots: {};
18
- };
19
- export type BadgeProps = typeof __propDef.props;
20
- export type BadgeEvents = typeof __propDef.events;
21
- export type BadgeSlots = typeof __propDef.slots;
22
- export default class Badge extends SvelteComponent<BadgeProps, BadgeEvents, BadgeSlots> {
23
- constructor(options?: import("svelte").ComponentConstructorOptions<{
24
- count?: number | undefined;
25
- max?: number | undefined;
26
- color?: StatusColorOrString | undefined;
27
- glow?: boolean | undefined;
28
- outline?: boolean | undefined;
29
- children?: ((this: void) => typeof import("svelte").SnippetReturn & {
30
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
31
- }) | undefined;
32
- }>);
33
- }
34
- export {};
@@ -1,109 +0,0 @@
1
- <script lang="ts">import Icon from "./Icon.svelte";
2
- import Alert from "../icons/Alert.svelte";
3
- import Info from "../icons/Info.svelte";
4
- import Success from "../icons/Success.svelte";
5
- import Warning from "../icons/Warning.svelte";
6
- import Error from "../icons/Error.svelte";
7
- import PageContent from "../layout/PageContent.svelte";
8
- import Tooltip from "./Tooltip.svelte";
9
- let {
10
- icon,
11
- type,
12
- contained,
13
- rounded,
14
- dismissable
15
- } = $props();
16
- if (!icon) {
17
- switch (type) {
18
- case "alert":
19
- icon = Alert;
20
- break;
21
- case "info":
22
- icon = Info;
23
- break;
24
- case "ok":
25
- icon = Success;
26
- break;
27
- case "warn":
28
- icon = Warning;
29
- break;
30
- case "task":
31
- icon = Error;
32
- break;
33
- default:
34
- icon = void 0;
35
- break;
36
- }
37
- }
38
- </script>
39
-
40
- <div class="Callout {type}" class:hasIcon={!!icon} class:contained class:rounded class:dismissable style="--margin-scale: 0.5;">
41
- {#if icon}
42
- <Icon {icon} --icon-width="1.5rem" --icon-height="1.5rem" />
43
- {/if}
44
- <div class="CalloutText">
45
- <slot />
46
- </div>
47
- {#if dismissable}
48
- <div class="Dismiss">
49
- <Tooltip tip="Dismiss">
50
- <button type="button" class="CalloutDismiss" aria-label="Dismiss callout">
51
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
52
- <path d="M1 1L15 15" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
53
- <path d="M1 15L15 1" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
54
- </svg>
55
- </button>
56
- </Tooltip>
57
- </div>
58
- {/if}
59
- </div>
60
-
61
- <style>
62
- .Callout {
63
- background: var(--bg, var(--bg-subtle));
64
- padding: var(--padding, 1rem);
65
- display: grid;
66
- gap: var(--gap, 1rem);
67
- align-items: var(--align-items, start);
68
- --text-heading: hsla(240, 10%, 98%);
69
- --text: hsla(240, 10%, 95%);
70
- --text-subtle: hsla(240, 10%, 90%);
71
- color: var(--text-heading);
72
- }
73
- .Callout.contained {
74
- border: var(--border);
75
- }
76
- .Callout.rounded {
77
- border-radius: var(--border-radius);
78
- }
79
- .Callout.hasIcon {
80
- grid-template-columns: auto 1fr;
81
- }
82
- .Callout.dismissable {
83
- grid-template-columns: 1fr auto;
84
- }
85
- .Callout.dismissable.hasIcon {
86
- grid-template-columns: auto 1fr auto;
87
- }
88
- .CalloutText {
89
- font-size: var(--font-size, 1em);
90
- line-height: 1.5;
91
- }
92
- .Callout.info {
93
- --bg: var(--status-info);
94
- }
95
- .Callout.ok {
96
- --bg: var(--status-ok);
97
- }
98
- .Dismiss {
99
- margin: -0.75rem;
100
- }
101
- .CalloutDismiss {
102
- background: transparent;
103
- border: none;
104
- padding: 0.75rem;
105
- cursor: pointer;
106
- }
107
- .CalloutText {
108
- }
109
- </style>
@@ -1,36 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { ComponentType } from "svelte";
3
- declare const __propDef: {
4
- props: {
5
- icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
6
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
7
- }) | ComponentType | undefined;
8
- type?: "ok" | "alert" | "warn" | "info" | "task" | undefined;
9
- contained?: boolean | undefined;
10
- rounded?: boolean | undefined;
11
- dismissable?: boolean | undefined;
12
- };
13
- events: {
14
- [evt: string]: CustomEvent<any>;
15
- };
16
- slots: {
17
- default: {};
18
- };
19
- };
20
- export type CalloutProps = typeof __propDef.props;
21
- export type CalloutEvents = typeof __propDef.events;
22
- export type CalloutSlots = typeof __propDef.slots;
23
- export default class Callout extends SvelteComponent<CalloutProps, CalloutEvents, CalloutSlots> {
24
- constructor(options?: import("svelte").ComponentConstructorOptions<__sveltets_2_PropsWithChildren<{
25
- icon?: string | ((this: void) => typeof import("svelte").SnippetReturn & {
26
- _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
27
- }) | ComponentType | undefined;
28
- type?: "ok" | "alert" | "warn" | "info" | "task" | undefined;
29
- contained?: boolean | undefined;
30
- rounded?: boolean | undefined;
31
- dismissable?: boolean | undefined;
32
- }, {
33
- default: {};
34
- }>>);
35
- }
36
- export {};
@@ -1,58 +0,0 @@
1
- <script lang="ts">let {
2
- onclick,
3
- position
4
- } = $props();
5
- </script>
6
-
7
- <button class="Close {position}" {onclick}>
8
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
9
- <line x1="18" y1="6" x2="6" y2="18"></line>
10
- <line x1="6" y1="6" x2="18" y2="18"></line>
11
- </svg>
12
- </button>
13
-
14
- <style>
15
- .Close {
16
- cursor: pointer;
17
- padding: var(--close-padding, 0.5rem);
18
- border-radius: 50%;
19
- color: var(--text);
20
- cursor: pointer;
21
- pointer-events: auto;
22
- }
23
-
24
- svg {
25
- width: max(1.5rem, 16px);
26
- height: max(1.5rem, 16px);
27
- }
28
-
29
- .Close:hover {
30
- color: var(--text-subtle);
31
- }
32
-
33
- .Close.top {
34
- position: absolute;
35
- top: 0;
36
- right: 0;
37
- z-index: 100;
38
- }
39
-
40
- .Close.bottom {
41
- position: absolute;
42
- bottom: 0;
43
- right: 0;
44
- }
45
-
46
- .Close.left {
47
- position: absolute;
48
- top: 0;
49
- left: 0;
50
- right: auto;
51
- }
52
-
53
- .Close.right {
54
- position: absolute;
55
- top: 0;
56
- right: 0;
57
- }
58
- </style>
@@ -1,21 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- onclick?: ((e: MouseEvent) => void) | undefined;
5
- position?: "top left" | "top right" | "bottom left" | "bottom right" | undefined;
6
- };
7
- events: {
8
- [evt: string]: CustomEvent<any>;
9
- };
10
- slots: {};
11
- };
12
- export type CloseProps = typeof __propDef.props;
13
- export type CloseEvents = typeof __propDef.events;
14
- export type CloseSlots = typeof __propDef.slots;
15
- export default class Close extends SvelteComponent<CloseProps, CloseEvents, CloseSlots> {
16
- constructor(options?: import("svelte").ComponentConstructorOptions<{
17
- onclick?: ((e: MouseEvent) => void) | undefined;
18
- position?: "top left" | "top right" | "bottom left" | "bottom right" | undefined;
19
- }>);
20
- }
21
- export {};
@@ -1,195 +0,0 @@
1
- <script lang="ts">import Copy from "../icons/Copy.svelte";
2
- import Done from "../icons/Done.svelte";
3
- import IconButton from "./IconButton.svelte";
4
- import Tooltip from "./Tooltip.svelte";
5
- let {
6
- code = $bindable(""),
7
- highlight,
8
- copyable,
9
- contained,
10
- rounded,
11
- lineNumbers,
12
- readonly
13
- } = $props();
14
- const numberOfLines = $derived(code.split("\n").length);
15
- let title = $state("Copy");
16
- let open = $state(false);
17
- let btnIcon = $state(Copy);
18
- let el = $state(null);
19
- let scrollTop = $state(0);
20
- let scrollLeft = $state(0);
21
- function copy() {
22
- if (!el)
23
- return;
24
- if (navigator.clipboard) {
25
- navigator.clipboard.writeText(code);
26
- } else {
27
- el.focus();
28
- el.select();
29
- document.execCommand("copy");
30
- }
31
- btnIcon = Done;
32
- title = "Copied!";
33
- open = true;
34
- setTimeout(() => {
35
- btnIcon = Copy;
36
- title = "Copy";
37
- open = false;
38
- }, 1500);
39
- }
40
- function onscroll(e) {
41
- scrollTop = e.target.scrollTop;
42
- scrollLeft = e.target.scrollLeft;
43
- }
44
- let codeLines = $derived.by(() => {
45
- return (highlight ? highlight(code) : code).split("\n") || [];
46
- });
47
- </script>
48
-
49
- <div class="Code" class:lineNumbers class:singleLine={numberOfLines === 1} class:rounded class:copyable class:contained class:hasOverlay={highlight}>
50
- {#if numberOfLines === 1}
51
- <input class="CodeInput" spellcheck="false" autocorrect="off" autocapitalize="off" autocomplete="off" {readonly} bind:this={el} bind:value={code} title={copyable ? code : undefined} {onscroll} />
52
- {:else}
53
- <textarea class="CodeInput" spellcheck="false" autocorrect="off" autocapitalize="off" autocomplete="off" {readonly} bind:this={el} bind:value={code} {onscroll}></textarea>
54
- {/if}
55
- <div class="Overlay" tabindex="-1" aria-hidden="true" style="top: {-scrollTop}px; left: {-scrollLeft}px;">
56
- {#each codeLines as line, index}
57
- <div class="Line">
58
- {#if lineNumbers}
59
- <div class="Number">
60
- <span>{index + 1}</span>
61
- </div>
62
- {/if}
63
- <div class="Content">
64
- {@html line}
65
- </div>
66
- </div>
67
- {/each}
68
- </div>
69
- {#if copyable}
70
- <Tooltip tip={title} {open}>
71
- <IconButton icon={btnIcon} onclick={copy} disabled={open} />
72
- </Tooltip>
73
- {/if}
74
- </div>
75
-
76
- <style>
77
- .Code {
78
- display: grid;
79
- align-items: start;
80
- grid-template-areas: "content";
81
- }
82
- .Code.lineNumbers {
83
- grid-template-columns: auto 1fr;
84
- grid-template-areas: "lines content";
85
- margin-inline-start: -2rem;
86
- width: calc(100% + 2rem);
87
- }
88
- .CodeInput,
89
- .Overlay {
90
- font-family: var(--font-family-mono);
91
- font-size: var(--font-size, 1em);
92
- line-height: 1.5;
93
- margin: 0;
94
- border: 0;
95
- grid-area: content;
96
- background: var(--field-bg);
97
- }
98
- textarea {
99
- width: 100%;
100
- height: 100%;
101
- white-space: pre-wrap;
102
- word-break: normal;
103
- overflow-wrap: anywhere;
104
- direction: ltr;
105
- writing-mode: lr;
106
- resize: none;
107
- z-index: -1;
108
- }
109
- .Code.lineNumbers textarea {
110
- padding-inline-start: 2rem;
111
- width: calc(100% - 2rem);
112
- }
113
- .Code.hasOverlay .CodeInput {
114
- color: transparent;
115
- caret-color: var(--text);
116
- }
117
- .Code.rounded,
118
- .Code.rounded .CodeInput {
119
- border-radius: var(--border-radius);
120
- }
121
- .Code.singleLine.copyable .CodeInput {
122
- border-top-right-radius: 0;
123
- border-bottom-right-radius: 0;
124
- }
125
-
126
- /**
127
- * Contained
128
- */
129
-
130
- .Code.contained {
131
- border: var(--border);
132
- }
133
- .Code.contained .CodeInput,
134
- .Code.contained .Overlay {
135
- height: auto;
136
- min-height: auto;
137
- padding: var(--padding, 0.5rem 1rem);
138
- }
139
- .Code.contained:focus-within {
140
- outline: var(--focus-outline);
141
- }
142
- .Code.contained:focus-within .CodeInput {
143
- outline: none;
144
- }
145
- .Code.contained:focus-within:has(:focus:not(.CodeInput)) {
146
- outline: none;
147
- }
148
-
149
- /**
150
- * Single line
151
- */
152
-
153
- .Code.singleLine {
154
- align-items: center;
155
- overflow-inline: clip;
156
- }
157
- .Code.singleLine.copyable {
158
- grid-template-columns: 1fr auto;
159
- grid-template-areas: "content button";
160
- }
161
- .Code.singleLine.copyable .CodeInput,
162
- .Code.singleLine.copyable .Overlay {
163
- text-overflow: ellipsis;
164
- white-space: nowrap;
165
- padding: var(--padding, 0.35rem 0.75rem);
166
- }
167
- .Code.singleLine .CodeInput,
168
- .Code.singleLine .Overlay {
169
- resize: none;
170
- line-height: 1;
171
- }
172
-
173
- .LineNumbers {
174
- grid-area: lines;
175
- display: grid;
176
- padding-right: 0.5rem;
177
- width: 2rem;
178
- font-size: var(--font-size, 1em);
179
- line-height: 1.5;
180
- text-align: end;
181
- justify-content: end;
182
- font-family: var(--font-family-mono);
183
- font-size: var(--font-size, 1em);
184
- color: var(--text-subtle);
185
- opacity: 0.75;
186
- }
187
- .Line {
188
- display: grid;
189
- grid-template-columns: 2rem 1fr;
190
- }
191
- .Line .Number {
192
- text-align: end;
193
- padding-inline-end: 0.5rem;
194
- }
195
- </style>
@@ -1,31 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- code: import("svelte").Bindable<string>;
5
- highlight?: ((code: string) => string) | undefined;
6
- copyable?: boolean | undefined;
7
- contained?: boolean | undefined;
8
- rounded?: boolean | undefined;
9
- lineNumbers?: boolean | undefined;
10
- readonly?: boolean | undefined;
11
- };
12
- events: {
13
- [evt: string]: CustomEvent<any>;
14
- };
15
- slots: {};
16
- };
17
- export type CodeProps = typeof __propDef.props;
18
- export type CodeEvents = typeof __propDef.events;
19
- export type CodeSlots = typeof __propDef.slots;
20
- export default class Code extends SvelteComponent<CodeProps, CodeEvents, CodeSlots> {
21
- constructor(options?: import("svelte").ComponentConstructorOptions<{
22
- code: import("svelte").Bindable<string>;
23
- highlight?: ((code: string) => string) | undefined;
24
- copyable?: boolean | undefined;
25
- contained?: boolean | undefined;
26
- rounded?: boolean | undefined;
27
- lineNumbers?: boolean | undefined;
28
- readonly?: boolean | undefined;
29
- }>);
30
- }
31
- export {};
@@ -1,26 +0,0 @@
1
- <script lang="ts">import Tooltip from "./Tooltip.svelte";
2
- import Help from "../icons/Help.svelte";
3
- import Icon from "./Icon.svelte";
4
- let {
5
- tip
6
- } = $props();
7
- </script>
8
-
9
- <Tooltip {tip}>
10
- <a href="#foo" onclick={(e) => { e.preventDefault(); e.stopPropagation(); }}>
11
- <Icon icon={Help} --icon-width="16px" --icon-height="16px" --cursor="help" --vertical-align="baseline" />
12
- </a>
13
- </Tooltip>
14
-
15
- <style>
16
- a {
17
- border-radius: 50%;
18
- color: var(--text);
19
- height: 16px;
20
- width: 16px;
21
- display: inline-block;
22
- }
23
- a:focus,
24
- a:active {
25
- }
26
- </style>