lutra 0.0.33 → 0.1.4

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 (274) 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/Avatar.svelte +105 -0
  5. package/dist/components/Avatar.svelte.d.ts +14 -0
  6. package/dist/{display → components}/Close.svelte +25 -7
  7. package/dist/components/Close.svelte.d.ts +7 -0
  8. package/dist/components/ContextTip.svelte +41 -0
  9. package/dist/components/ContextTip.svelte.d.ts +7 -0
  10. package/dist/components/Dialog.svelte +78 -0
  11. package/dist/components/Dialog.svelte.d.ts +14 -0
  12. package/dist/components/Icon.svelte +62 -0
  13. package/dist/components/Icon.svelte.d.ts +8 -0
  14. package/dist/{display → components}/IconButton.svelte +43 -14
  15. package/dist/components/IconButton.svelte.d.ts +16 -0
  16. package/dist/components/Image.svelte +172 -0
  17. package/dist/components/Image.svelte.d.ts +56 -0
  18. package/dist/{display → components}/Indicator.svelte +44 -9
  19. package/dist/components/Indicator.svelte.d.ts +12 -0
  20. package/dist/{display → components}/Inset.svelte +8 -3
  21. package/dist/components/Inset.svelte.d.ts +7 -0
  22. package/dist/components/Layout.svelte +33 -0
  23. package/dist/components/Layout.svelte.d.ts +11 -0
  24. package/dist/components/MenuDropdown.svelte +195 -0
  25. package/dist/components/MenuDropdown.svelte.d.ts +16 -0
  26. package/dist/{nav → components}/MenuItem.svelte +46 -38
  27. package/dist/components/MenuItem.svelte.d.ts +11 -0
  28. package/dist/components/MenuItemContent.svelte +25 -0
  29. package/dist/components/MenuItemContent.svelte.d.ts +10 -0
  30. package/dist/{nav → components}/MenuTypes.d.ts +19 -5
  31. package/dist/components/Modal.svelte +149 -0
  32. package/dist/components/Modal.svelte.d.ts +16 -0
  33. package/dist/{display → components}/Notification.svelte +33 -22
  34. package/dist/components/Notification.svelte.d.ts +12 -0
  35. package/dist/components/Overlay.svelte +31 -0
  36. package/dist/components/Overlay.svelte.d.ts +14 -0
  37. package/dist/{layout → components}/OverlayContainer.svelte +6 -3
  38. package/dist/{layout → components}/OverlayContainer.svelte.d.ts +4 -1
  39. package/dist/components/OverlayLayer.svelte +168 -0
  40. package/dist/components/OverlayLayer.svelte.d.ts +8 -0
  41. package/dist/components/PageContent.svelte +108 -0
  42. package/dist/components/PageContent.svelte.d.ts +38 -0
  43. package/dist/components/TabbedContent.svelte +74 -0
  44. package/dist/components/TabbedContent.svelte.d.ts +11 -0
  45. package/dist/components/TabbedContentItem.svelte +33 -0
  46. package/dist/components/TabbedContentItem.svelte.d.ts +10 -0
  47. package/dist/components/Table.svelte +41 -0
  48. package/dist/components/Table.svelte.d.ts +13 -0
  49. package/dist/{nav → components}/Tabs.svelte +99 -41
  50. package/dist/components/Tabs.svelte.d.ts +20 -0
  51. package/dist/components/Tag.svelte +120 -0
  52. package/dist/components/Tag.svelte.d.ts +21 -0
  53. package/dist/components/Theme.svelte +105 -0
  54. package/dist/components/Theme.svelte.d.ts +17 -0
  55. package/dist/{display → components}/Tooltip.svelte +41 -16
  56. package/dist/components/Tooltip.svelte.d.ts +12 -0
  57. package/dist/components/UIContent.svelte +19 -0
  58. package/dist/components/UIContent.svelte.d.ts +7 -0
  59. package/dist/components/index.d.ts +28 -0
  60. package/dist/components/index.js +29 -0
  61. package/dist/{display → components}/notifications.svelte.d.ts +1 -1
  62. package/dist/{display → components}/notifications.svelte.js +3 -4
  63. package/dist/{layout → components}/overlays.svelte.d.ts +4 -2
  64. package/dist/config.d.ts +30 -0
  65. package/dist/config.js +18 -0
  66. package/dist/css/1-props.css +440 -0
  67. package/dist/css/2-base.css +343 -0
  68. package/dist/css/3-typo.css +106 -0
  69. package/dist/css/4-layout.css +368 -0
  70. package/dist/css/5-media.css +116 -0
  71. package/dist/css/lutra.css +7 -0
  72. package/dist/css/themes/DefaultTheme.css +209 -0
  73. package/dist/form/Button.svelte +35 -16
  74. package/dist/form/Button.svelte.d.ts +8 -19
  75. package/dist/form/Datepicker.svelte +311 -0
  76. package/dist/form/Datepicker.svelte.d.ts +9 -0
  77. package/dist/form/FieldContent.svelte +69 -44
  78. package/dist/form/FieldContent.svelte.d.ts +7 -17
  79. package/dist/form/FieldError.svelte +16 -6
  80. package/dist/form/FieldError.svelte.d.ts +4 -15
  81. package/dist/form/Fieldset.svelte +48 -13
  82. package/dist/form/Fieldset.svelte.d.ts +5 -16
  83. package/dist/form/Form.svelte +158 -74
  84. package/dist/form/Form.svelte.d.ts +17 -17
  85. package/dist/form/{FieldActions.svelte → FormActions.svelte} +29 -17
  86. package/dist/form/FormActions.svelte.d.ts +9 -0
  87. package/dist/form/FormSection.svelte +96 -0
  88. package/dist/form/FormSection.svelte.d.ts +9 -0
  89. package/dist/form/ImageUpload.svelte +134 -94
  90. package/dist/form/ImageUpload.svelte.d.ts +5 -16
  91. package/dist/form/Input.svelte +254 -136
  92. package/dist/form/Input.svelte.d.ts +12 -21
  93. package/dist/form/InputLength.svelte +15 -5
  94. package/dist/form/InputLength.svelte.d.ts +4 -15
  95. package/dist/form/Label.svelte +55 -11
  96. package/dist/form/Label.svelte.d.ts +6 -15
  97. package/dist/form/LogoUpload.svelte +36 -21
  98. package/dist/form/LogoUpload.svelte.d.ts +4 -15
  99. package/dist/form/Select.svelte +100 -50
  100. package/dist/form/Select.svelte.d.ts +5 -16
  101. package/dist/form/Textarea.svelte +200 -98
  102. package/dist/form/Textarea.svelte.d.ts +11 -24
  103. package/dist/form/Toggle.svelte +3 -1
  104. package/dist/form/Toggle.svelte.d.ts +4 -1
  105. package/dist/form/client.svelte.d.ts +1 -0
  106. package/dist/form/client.svelte.js +6 -2
  107. package/dist/form/form.d.ts +10 -9
  108. package/dist/form/form.js +37 -32
  109. package/dist/form/index.d.ts +3 -4
  110. package/dist/form/index.js +3 -4
  111. package/dist/form/types.d.ts +9 -16
  112. package/dist/icons/IconAlert.svelte.d.ts +4 -1
  113. package/dist/icons/IconCopy.svelte.d.ts +4 -1
  114. package/dist/icons/IconDone.svelte.d.ts +4 -1
  115. package/dist/icons/IconError.svelte.d.ts +4 -1
  116. package/dist/icons/IconHelp.svelte.d.ts +4 -1
  117. package/dist/icons/IconHide.svelte.d.ts +4 -1
  118. package/dist/icons/IconInfo.svelte.d.ts +4 -1
  119. package/dist/icons/IconLink.svelte.d.ts +4 -1
  120. package/dist/icons/IconMenuBurger.svelte.d.ts +4 -1
  121. package/dist/icons/IconMenuDots.svelte.d.ts +4 -1
  122. package/dist/icons/IconSearch.svelte.d.ts +4 -1
  123. package/dist/icons/IconShow.svelte.d.ts +4 -1
  124. package/dist/icons/IconSuccess.svelte.d.ts +4 -1
  125. package/dist/icons/IconWarning.svelte.d.ts +4 -1
  126. package/dist/index.d.ts +3 -1
  127. package/dist/index.js +3 -2
  128. package/dist/types.d.ts +39 -0
  129. package/dist/types.js +25 -0
  130. package/dist/util/StringOrComponent.svelte +20 -0
  131. package/dist/util/StringOrComponent.svelte.d.ts +8 -0
  132. package/dist/util/StringOrSnippet.svelte +16 -0
  133. package/dist/util/StringOrSnippet.svelte.d.ts +8 -0
  134. package/dist/{utils → util}/dom.js +1 -2
  135. package/dist/util/locale.d.ts +1 -0
  136. package/dist/util/locale.js +47 -0
  137. package/dist/util/settings.d.ts +4 -0
  138. package/package.json +35 -79
  139. package/dist/color.css +0 -0
  140. package/dist/display/Avatar.svelte +0 -61
  141. package/dist/display/Avatar.svelte.d.ts +0 -19
  142. package/dist/display/Badge.svelte +0 -91
  143. package/dist/display/Badge.svelte.d.ts +0 -30
  144. package/dist/display/Callout.svelte +0 -109
  145. package/dist/display/Callout.svelte.d.ts +0 -28
  146. package/dist/display/Close.svelte.d.ts +0 -18
  147. package/dist/display/Code.svelte +0 -190
  148. package/dist/display/Code.svelte.d.ts +0 -32
  149. package/dist/display/ContextTip.svelte +0 -23
  150. package/dist/display/ContextTip.svelte.d.ts +0 -18
  151. package/dist/display/DataList.svelte +0 -16
  152. package/dist/display/DataList.svelte.d.ts +0 -21
  153. package/dist/display/Details.svelte +0 -49
  154. package/dist/display/Details.svelte.d.ts +0 -27
  155. package/dist/display/Hero.svelte +0 -50
  156. package/dist/display/Hero.svelte.d.ts +0 -26
  157. package/dist/display/Icon.svelte +0 -39
  158. package/dist/display/Icon.svelte.d.ts +0 -19
  159. package/dist/display/IconButton.svelte.d.ts +0 -27
  160. package/dist/display/Image.svelte +0 -91
  161. package/dist/display/Image.svelte.d.ts +0 -26
  162. package/dist/display/Indicator.svelte.d.ts +0 -23
  163. package/dist/display/Inset.svelte.d.ts +0 -18
  164. package/dist/display/LineChart.svelte +0 -385
  165. package/dist/display/LineChart.svelte.d.ts +0 -24
  166. package/dist/display/LoadingIndicator.svelte +0 -33
  167. package/dist/display/LoadingIndicator.svelte.d.ts +0 -15
  168. package/dist/display/Modal.svelte +0 -116
  169. package/dist/display/Modal.svelte.d.ts +0 -27
  170. package/dist/display/Notification.svelte.d.ts +0 -23
  171. package/dist/display/Panel.svelte +0 -23
  172. package/dist/display/Panel.svelte.d.ts +0 -19
  173. package/dist/display/Popup.svelte +0 -111
  174. package/dist/display/Popup.svelte.d.ts +0 -25
  175. package/dist/display/Stat.svelte +0 -81
  176. package/dist/display/Stat.svelte.d.ts +0 -30
  177. package/dist/display/Table.svelte +0 -28
  178. package/dist/display/Table.svelte.d.ts +0 -24
  179. package/dist/display/TablePaginator.svelte +0 -51
  180. package/dist/display/TablePaginator.svelte.d.ts +0 -21
  181. package/dist/display/Tag.svelte +0 -90
  182. package/dist/display/Tag.svelte.d.ts +0 -32
  183. package/dist/display/Tooltip.svelte.d.ts +0 -23
  184. package/dist/display/chart.d.ts +0 -78
  185. package/dist/display/chart.js +0 -212
  186. package/dist/display/index.d.ts +0 -24
  187. package/dist/display/index.js +0 -24
  188. package/dist/form/FieldActions.svelte.d.ts +0 -20
  189. package/dist/form/FieldContainer.svelte +0 -37
  190. package/dist/form/FieldContainer.svelte.d.ts +0 -19
  191. package/dist/form/FieldSection.svelte +0 -86
  192. package/dist/form/FieldSection.svelte.d.ts +0 -20
  193. package/dist/layout/Layout.svelte +0 -47
  194. package/dist/layout/Layout.svelte.d.ts +0 -22
  195. package/dist/layout/LayoutFooter.svelte +0 -21
  196. package/dist/layout/LayoutFooter.svelte.d.ts +0 -18
  197. package/dist/layout/LayoutGrid.svelte +0 -51
  198. package/dist/layout/LayoutGrid.svelte.d.ts +0 -27
  199. package/dist/layout/LayoutHeader.svelte +0 -97
  200. package/dist/layout/LayoutHeader.svelte.d.ts +0 -34
  201. package/dist/layout/LayoutSideMenu.svelte +0 -55
  202. package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -21
  203. package/dist/layout/LayoutTypes.d.ts +0 -15
  204. package/dist/layout/LayoutTypes.js +0 -9
  205. package/dist/layout/Overlay.svelte +0 -20
  206. package/dist/layout/Overlay.svelte.d.ts +0 -25
  207. package/dist/layout/OverlayLayer.svelte +0 -140
  208. package/dist/layout/OverlayLayer.svelte.d.ts +0 -19
  209. package/dist/layout/PageContent.svelte +0 -82
  210. package/dist/layout/PageContent.svelte.d.ts +0 -25
  211. package/dist/layout/Theme.svelte +0 -243
  212. package/dist/layout/Theme.svelte.d.ts +0 -19
  213. package/dist/layout/UIContent.svelte +0 -15
  214. package/dist/layout/UIContent.svelte.d.ts +0 -18
  215. package/dist/layout/index.d.ts +0 -11
  216. package/dist/layout/index.js +0 -11
  217. package/dist/nav/Breadcrumb.svelte +0 -82
  218. package/dist/nav/Breadcrumb.svelte.d.ts +0 -28
  219. package/dist/nav/Menu.svelte +0 -170
  220. package/dist/nav/Menu.svelte.d.ts +0 -27
  221. package/dist/nav/MenuItem.svelte.d.ts +0 -22
  222. package/dist/nav/NavMenu.svelte +0 -181
  223. package/dist/nav/NavMenu.svelte.d.ts +0 -19
  224. package/dist/nav/TabbedContent.svelte +0 -43
  225. package/dist/nav/TabbedContent.svelte.d.ts +0 -23
  226. package/dist/nav/Tabs.svelte.d.ts +0 -25
  227. package/dist/nav/index.d.ts +0 -7
  228. package/dist/nav/index.js +0 -6
  229. package/dist/style.css +0 -950
  230. package/dist/typo/Clamp.svelte +0 -25
  231. package/dist/typo/Clamp.svelte.d.ts +0 -24
  232. package/dist/typo/H.svelte +0 -52
  233. package/dist/typo/H.svelte.d.ts +0 -28
  234. package/dist/typo/H1.svelte +0 -14
  235. package/dist/typo/H1.svelte.d.ts +0 -26
  236. package/dist/typo/H2.svelte +0 -14
  237. package/dist/typo/H2.svelte.d.ts +0 -26
  238. package/dist/typo/H3.svelte +0 -14
  239. package/dist/typo/H3.svelte.d.ts +0 -26
  240. package/dist/typo/H4.svelte +0 -14
  241. package/dist/typo/H4.svelte.d.ts +0 -26
  242. package/dist/typo/H5.svelte +0 -14
  243. package/dist/typo/H5.svelte.d.ts +0 -26
  244. package/dist/typo/H6.svelte +0 -14
  245. package/dist/typo/H6.svelte.d.ts +0 -26
  246. package/dist/typo/P.svelte +0 -34
  247. package/dist/typo/P.svelte.d.ts +0 -26
  248. package/dist/typo/index.d.ts +0 -9
  249. package/dist/typo/index.js +0 -9
  250. package/dist/utils/StringOrComponent.svelte +0 -14
  251. package/dist/utils/StringOrComponent.svelte.d.ts +0 -19
  252. package/dist/utils/StringOrSnippet.svelte +0 -11
  253. package/dist/utils/StringOrSnippet.svelte.d.ts +0 -19
  254. package/dist/utils/defaults.d.ts +0 -4
  255. package/dist/utils/hooks.server.d.ts +0 -2
  256. package/dist/utils/hooks.server.js +0 -16
  257. package/dist/utils/id.d.ts +0 -1
  258. package/dist/utils/id.js +0 -3
  259. package/dist/utils/index.d.ts +0 -9
  260. package/dist/utils/index.js +0 -6
  261. package/dist/utils/isSnippet.d.ts +0 -3
  262. package/dist/utils/isSnippet.js +0 -11
  263. /package/dist/{nav → components}/MenuTypes.js +0 -0
  264. /package/dist/{layout → components}/overlays.svelte.js +0 -0
  265. /package/dist/{utils → util}/attr.d.ts +0 -0
  266. /package/dist/{utils → util}/attr.js +0 -0
  267. /package/dist/{utils → util}/color.d.ts +0 -0
  268. /package/dist/{utils → util}/color.js +0 -0
  269. /package/dist/{utils → util}/dom.d.ts +0 -0
  270. /package/dist/{utils → util}/keyboard.svelte.d.ts +0 -0
  271. /package/dist/{utils → util}/keyboard.svelte.js +0 -0
  272. /package/dist/{utils/defaults.js → util/settings.js} +0 -0
  273. /package/dist/{utils → util}/transitions.d.ts +0 -0
  274. /package/dist/{utils → util}/transitions.js +0 -0
@@ -1,26 +0,0 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports;
9
- z_$$bindings?: Bindings;
10
- }
11
- declare const Image: $$__sveltets_2_IsomorphicComponent<{
12
- hash?: string;
13
- aspectRatio?: string;
14
- fit?: "cover" | "contain" | "scale-down";
15
- src?: string;
16
- srcset?: string;
17
- alt?: string;
18
- width?: string | number;
19
- height?: string | number;
20
- style?: string;
21
- class?: string;
22
- }, {
23
- [evt: string]: CustomEvent<any>;
24
- }, {}, {}, "">;
25
- type Image = InstanceType<typeof Image>;
26
- export default Image;
@@ -1,23 +0,0 @@
1
- import { type StatusColorOrString } from "../utils/color.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 Indicator: $$__sveltets_2_IsomorphicComponent<{
13
- /** The color of the tag. Select from default status colors or provide a CSS Color value. */
14
- color?: StatusColorOrString;
15
- /** Possible motion to apply to the indicator. */
16
- motion?: "pulse" | "spin" | "blink" | "highlight" | "bulge" | "tunnel" | "typing";
17
- /** ARIA label to use when a custom color is applied */
18
- label?: string;
19
- }, {
20
- [evt: string]: CustomEvent<any>;
21
- }, {}, {}, "">;
22
- type Indicator = InstanceType<typeof Indicator>;
23
- export default Indicator;
@@ -1,18 +0,0 @@
1
- import type { Snippet } from "svelte";
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 Inset: $$__sveltets_2_IsomorphicComponent<{
13
- children: Snippet;
14
- }, {
15
- [evt: string]: CustomEvent<any>;
16
- }, {}, {}, "">;
17
- type Inset = InstanceType<typeof Inset>;
18
- export default Inset;
@@ -1,385 +0,0 @@
1
- <script lang="ts">import { onMount } from "svelte";
2
- import { makeScale, getShortKValue, catmullRomToSVG, catmullRomBase, catmullRomGetY, getSVGSize } from "./chart.js";
3
- let {
4
- contained,
5
- rounded,
6
- tension = 0.1,
7
- data = {
8
- labels: [],
9
- values: []
10
- },
11
- options = {
12
- yValues: 8
13
- }
14
- } = $props();
15
- if (!options?.yValues) {
16
- options.yValues = 5;
17
- }
18
- let svg;
19
- let mouseX = $state(0);
20
- let withinBounds = $state(false);
21
- const colors = ["#881177", "#aa3355", "#cc6666", "#ee9944", "#eedd00", "#99dd55", "#44aa88", "#22ccbb", "#00bbcc", "#0099cc", "#3366bb"];
22
- const colorSets = [
23
- ["#881177", "#aa3355"],
24
- ["#cc6666", "#ee9944"],
25
- ["#eedd00", "#99dd55"],
26
- ["#44aa88", "#22ccbb"],
27
- ["#00bbcc", "#0099cc"],
28
- ["#3366bb", "#3366bb"]
29
- ];
30
- const scaledValues = makeScale(data.values, options.yValues);
31
- const maxScaledValue = Math.max(...scaledValues);
32
- const coords = data.values?.map((value, index) => ({
33
- x: index * (100 / (data.labels.length - 1)),
34
- y: 100 - value * 100 / maxScaledValue
35
- }));
36
- const pointsData = catmullRomBase(coords || [], tension);
37
- function generatePath() {
38
- const d = catmullRomToSVG(pointsData, tension, coords[0]);
39
- let path2 = `M` + d;
40
- return path2;
41
- }
42
- const path = generatePath();
43
- function handleMouseMove(event) {
44
- const rect = svg.getBoundingClientRect();
45
- const styles = window.getComputedStyle(svg);
46
- const leftPadding = parseFloat(styles.paddingLeft);
47
- const rightPadding = parseFloat(styles.paddingRight);
48
- const padding = leftPadding + rightPadding;
49
- const width = rect.width - padding;
50
- if (event.clientX > rect.left && event.clientX < rect.right) {
51
- withinBounds = true;
52
- } else {
53
- withinBounds = false;
54
- }
55
- mouseX = event.clientX - svg.getBoundingClientRect().left;
56
- }
57
- let dotY = $derived.by(() => {
58
- if (mouseX) {
59
- return getYAtIndex(findClosestValueIndex(mouseX));
60
- }
61
- return 0;
62
- });
63
- function handleMouseOut(event) {
64
- if (event.composedPath().includes(svg)) {
65
- withinBounds = true;
66
- } else {
67
- withinBounds = false;
68
- }
69
- }
70
- function getYAtIndex(index) {
71
- const { innerWidth, innerHeight, padding, height } = getSVGSize(svg);
72
- const heightPaddingRatio = innerHeight / height;
73
- const ret = catmullRomGetY(pointsData, tension, (getXatIndex(index) - padding.left) / innerWidth * 100, heightPaddingRatio);
74
- return ret;
75
- }
76
- function getXatIndex(index) {
77
- const { innerWidth, innerHeight, padding } = getSVGSize(svg);
78
- return index / (data.labels.length - 1) * innerWidth + padding.left;
79
- }
80
- function findClosestValueIndex(x) {
81
- const { innerWidth, innerHeight, padding } = getSVGSize(svg);
82
- let index = Math.round((x - padding.left) / innerWidth * (data.labels.length - 1));
83
- if (index < 0) {
84
- index = 0;
85
- }
86
- if (index > data.labels.length - 1) {
87
- index = data.labels.length - 1;
88
- }
89
- return index;
90
- }
91
- </script>
92
-
93
- <div class="ChartContainer" class:contained class:rounded>
94
- <!-- svelte-ignore a11y_no_static_element_interactions -->
95
- <!-- svelte-ignore a11y_mouse_events_have_key_events -->
96
- <div class="Chart" style="--items: {data.labels.length};" onmousemove={handleMouseMove} onmouseout={handleMouseOut}>
97
- <svg bind:this={svg} viewBox={`0 0 100 100`} preserveAspectRatio="none">
98
- <defs>
99
- <linearGradient id="myGradient" x1="0%" x2="0%" y1="0%" y2="100%" gradientTransform="matrix(1, 0, 0, 1.5, 0, 0)">
100
- <stop offset="0%" stop-color="#0099cc"/>
101
- <stop offset="100%" stop-color="#0099cc" stop-opacity="0"/>
102
- </linearGradient>
103
- </defs>
104
- <g class="Curve">
105
- <path
106
- stroke="#0099cc"
107
- stroke-width="2"
108
- fill="none"
109
- d={path}
110
- />
111
- </g>
112
- <g class="Curve2">
113
- <path
114
- fill="url(#myGradient)"
115
- fill-rule="nonzero"
116
- d={path+`L 100 100 L 0 100 Z`}
117
- />
118
- </g>
119
- </svg>
120
- <div class="X Axis">
121
- <div class="Labels">
122
- {#each data.labels as label, i}
123
- <span style="left: calc(
124
- ({i * (100 / (data.labels.length - 1))}%)
125
- )">
126
- {label}
127
- </span>
128
- {/each}
129
- </div>
130
- </div>
131
- <div class="Y Axis">
132
- <div class="Labels">
133
- {#each scaledValues as maxValue, index}
134
- <span style="bottom: calc(
135
- ({index * (100 / scaledValues.length + ((options.yValues || 5) - scaledValues.length + 1))}%)
136
- )">
137
- {getShortKValue(maxValue)}
138
- </span>
139
- {/each}
140
- </div>
141
- </div>
142
- <div class="Lines">
143
- <div class="Y">
144
- {#each scaledValues as maxValue, index}
145
- <span style="bottom: calc(
146
- ({index * (100 / scaledValues.length + ((options.yValues || 5) - scaledValues.length + 1))}%)
147
- )">
148
- </span>
149
- {/each}
150
- </div>
151
- <div class="X">
152
- {#each data.labels as label, index}
153
- <span style="left: calc((
154
- ({index * (100 / (data.labels.length - 1))}%)
155
- )"
156
- class:hover={withinBounds && findClosestValueIndex(mouseX) == index}
157
- >
158
- </span>
159
- {/each}
160
- </div>
161
- </div>
162
- {#if withinBounds}
163
- <div class="InteractiveDot">
164
- <div class="Dot" class:last={findClosestValueIndex(mouseX) >= data.labels.length / 2} style="left: calc({getXatIndex(findClosestValueIndex(mouseX))}px - var(--interactive-dot-size) / 2); top: calc({dotY}% - var(--interactive-dot-size) / 2);">
165
- <div class="DotValue">
166
- <span>{data.labels[findClosestValueIndex(mouseX)] ? data.labels[findClosestValueIndex(mouseX)] : ''}</span>
167
- {data.values[findClosestValueIndex(mouseX)] || 0}
168
- </div>
169
- </div>
170
- </div>
171
- {/if}
172
- </div>
173
- </div>
174
-
175
- <style>
176
- .ChartContainer {
177
- position: relative;
178
- width: 100%;
179
- height: 100%;
180
- }
181
- .ChartContainer.contained {
182
- padding: 1rem 1rem 2rem 3rem;
183
- border: var(--border);
184
- }
185
- .ChartContainer.rounded {
186
- border-radius: var(--border-radius);
187
- }
188
- .Chart {
189
- --chart-padding: 1rem;
190
- --dot-size: 0.5rem;
191
- --interactive-dot-size: 1rem;
192
- --dot-hitbox: calc(100% / var(--items)) / 2;
193
- --border-alpha: color-mix(in srgb, var(--border-color) 70%, transparent);
194
- position: relative;
195
- width: 100%;
196
- height: 100%;
197
- user-select: none;
198
- }
199
- svg {
200
- background: var(--bg);
201
- padding-left: calc(var(--chart-padding));
202
- padding-right: calc(var(--chart-padding));
203
- padding-top: calc(var(--chart-padding));
204
- padding-bottom: calc(var(--chart-padding));
205
- overflow: visible;
206
- position: relative;
207
- width: 100%;
208
- height: 100%;
209
- }
210
- .Curve2 {
211
- opacity: 0.65;
212
- }
213
- svg * {
214
- vector-effect: non-scaling-stroke;
215
- }
216
-
217
- /* dots */
218
- .InteractiveDot {
219
- padding: var(--chart-padding) 0 var(--chart-padding) 0;
220
- position: absolute;
221
- top: 0;
222
- left: 0;
223
- width: 100%;
224
- height: 100%;
225
- display: flex;
226
- justify-content: stretch;
227
- }
228
- .Dot {
229
- position: relative;
230
- left: calc((-1 * var(--dot-hitbox) + var(--dot-size) / 2) - 2px);
231
- width: var(--dot-size);
232
- height: var(--dot-size);
233
- background: orange;
234
- border-radius: 50%;
235
- border: var(--border-subtle);
236
- outline: 0px;
237
- opacity: 0;
238
- }
239
- .InteractiveDot .Dot {
240
- opacity: 1;
241
- width: var(--interactive-dot-size);
242
- height: var(--interactive-dot-size);
243
- transition: left 0.15s ease-out, top 0.15s ease-out;
244
- }
245
- .InteractiveDot {
246
- pointer-events: none;
247
- }
248
- .DotValue {
249
- position: absolute;
250
- top: calc(-1 * var(--dot-size) / 2 + 0.25rem + 2px);
251
- left: calc(var(--dot-size) + 1rem);
252
- background: var(--bg-app);
253
- transform: translateY(-50%);
254
- color: var(--text);
255
- padding: 0.75rem 1rem;
256
- border: var(--border);
257
- border-radius: var(--border-radius);
258
- box-shadow: 0px 0.5rem 1rem var(--shadow);
259
- white-space: nowrap;
260
- transition: all 0.2s;
261
- font-size: 1.5rem;
262
- line-height: 2rem;
263
- font-weight: 500;
264
- }
265
- .DotValue span {
266
- font-size: 0.9rem;
267
- line-height: 1.4rem;
268
- font-weight: 400;
269
- display: block;
270
- }
271
-
272
- /* Axis */
273
- .Axis {
274
- position: absolute;
275
- top: 0;
276
- pointer-events: none;
277
- transition: opacity 0.4s;
278
- }
279
- .X.Axis {
280
- bottom: 0;
281
- top: auto;
282
- width: 100%;
283
- height: auto;
284
- }
285
-
286
- .Y.Axis {
287
- height: 100%;
288
- }
289
-
290
- .Lines {
291
- position: absolute;
292
- top: 0;
293
- left: 0;
294
- width: 100%;
295
- height: 100%;
296
- pointer-events: none;
297
- }
298
- .InteractiveDot {
299
- visibility: hidden;
300
- }
301
-
302
- .Chart:hover .InteractiveDot {
303
- visibility: visible;
304
- }
305
-
306
- .Lines .X, .Lines .Y {
307
- position: absolute;
308
- top: 0;
309
- left: 0;
310
- width: 100%;
311
- height: 100%;
312
- }
313
-
314
- .Lines .Y {
315
- top: var(--chart-padding);
316
- height: calc(100% - 2 * var(--chart-padding));
317
- }
318
- .Lines .X {
319
- left: var(--chart-padding);
320
- width: calc(100% - 2 * var(--chart-padding));
321
- }
322
-
323
- .Lines .X span {
324
- display: block;
325
- position: absolute;
326
- left: var(--chart-padding);
327
- height: 100%;
328
- border-left: 1px dotted var(--border-alpha);
329
- transform: translateX(-50%);
330
- }
331
-
332
- .Lines .Y span {
333
- display: block;
334
- position: absolute;
335
- width: 100%;
336
- border-top: 1px dotted var(--border-alpha);
337
- }
338
-
339
- .Chart:hover .Lines .X span.hover {
340
- border-left-style: solid;
341
- border-left-color: orange;
342
- border-left-width: 3px;
343
- outline: 1px solid var(--bg);
344
- }
345
-
346
- .Axis .Labels {
347
- position: absolute;
348
- top: 0;
349
- width: 100%;
350
- height: 100%;
351
- }
352
-
353
- .X.Axis .Labels {
354
- left: var(--chart-padding);
355
- width: calc(100% - 2 * var(--chart-padding));
356
- pointer-events: none;
357
- }
358
-
359
- .Y.Axis .Labels {
360
- top: calc((var(--chart-padding) * 2) - 0.075rem);
361
- height: calc(100% - 2 * var(--chart-padding));
362
- pointer-events: none;
363
- }
364
-
365
- .Axis span {
366
- font-size: 0.65rem;
367
- line-height: 1rem;
368
- color: var(--text-lighter);
369
- position: absolute;
370
- line-height: 1;
371
- }
372
-
373
- .Y.Axis .Labels span {
374
- left: -0.5rem;
375
- transform: translate(-100%,-100%);
376
- }
377
-
378
- .X.Axis .Labels span {
379
- top: 0.5rem;
380
- transform: translate(-50%,0);
381
- white-space: nowrap;
382
- text-align: center;
383
- }
384
-
385
- </style>
@@ -1,24 +0,0 @@
1
- import { type ChartData } from './chart.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 LineChart: $$__sveltets_2_IsomorphicComponent<{
13
- contained?: boolean;
14
- rounded?: boolean;
15
- tension?: number;
16
- data: ChartData;
17
- options?: {
18
- yValues?: number;
19
- };
20
- }, {
21
- [evt: string]: CustomEvent<any>;
22
- }, {}, {}, "">;
23
- type LineChart = InstanceType<typeof LineChart>;
24
- export default LineChart;
@@ -1,33 +0,0 @@
1
- <script lang="ts">import { navigating } from "$app/stores";
2
- </script>
3
-
4
- <div class="LoadingIndicator" class:visible={$navigating}>
5
- </div>
6
-
7
- <style>
8
- .LoadingIndicator {
9
- position: fixed;
10
- height: 8px;
11
- width: 100%;
12
- bottom: 0;
13
- left: 0;
14
- z-index: 10000000;
15
- background-image: linear-gradient(to right,#817,#a35,#c66,#e94,#ed0,#9d5,#4d8,#2cb,#0bc,#09c,#36b,#639,#817);
16
- background-size: 200% 100%;
17
- opacity: 0;
18
- transition: opacity 0.2s ease-in;
19
- pointer-events: none;
20
- }
21
- .LoadingIndicator.visible {
22
- opacity: 1;
23
- animation: stripe 2s linear infinite;
24
- }
25
- @keyframes stripe {
26
- 0% {
27
- background-position: 0 0;
28
- }
29
- 100% {
30
- background-position: 200% 0;
31
- }
32
- }
33
- </style>
@@ -1,15 +0,0 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports;
9
- z_$$bindings?: Bindings;
10
- }
11
- declare const LoadingIndicator: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
12
- [evt: string]: CustomEvent<any>;
13
- }, {}, {}, string>;
14
- type LoadingIndicator = InstanceType<typeof LoadingIndicator>;
15
- export default LoadingIndicator;
@@ -1,116 +0,0 @@
1
- <script lang="ts">import UiContent from "../layout/UIContent.svelte";
2
- import { slidefade } from "../utils/transitions.js";
3
- import { attr } from "../utils/attr.js";
4
- let {
5
- contained,
6
- content,
7
- buttons,
8
- trigger,
9
- shape = "rounded"
10
- } = $props();
11
- const id = `po-${Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)}`;
12
- let isOpen = $state(false);
13
- function closeModal() {
14
- document.getElementById(id).hidePopover();
15
- isOpen = false;
16
- }
17
- function toggleModal() {
18
- isOpen = !isOpen;
19
- }
20
- function clickElsewhere(e) {
21
- if (e.target instanceof HTMLElement && !e.target.closest(".ModalContent")) {
22
- closeModal();
23
- }
24
- }
25
- $effect(() => {
26
- if (isOpen) {
27
- document.getElementsByTagName("html")[0].style.overflow = "hidden";
28
- } else {
29
- document.getElementsByTagName("html")[0].style.overflow = "auto";
30
- }
31
- });
32
- let attrs = $derived.by(() => {
33
- return attr({
34
- id: `trigger-${id}`,
35
- popovertarget: id,
36
- onclick: toggleModal
37
- });
38
- });
39
- </script>
40
-
41
- <div class="Modal">
42
- <div class="Trigger">
43
- {@render trigger(attrs)}
44
- </div>
45
- {#if isOpen}
46
- <UiContent>
47
- <!-- svelte-ignore a11y_click_events_have_key_events -->
48
- <!-- svelte-ignore a11y_no_static_element_interactions -->
49
- <div {id} onclick={clickElsewhere} popover="auto" class="ModalContainer">
50
- <div class="ModalContent {shape}" class:contained>
51
- <div class="ModalContentInside">
52
- {@render content(closeModal)}
53
- {#if buttons}
54
- <div class="ModalActions">
55
- {@render buttons(closeModal)}
56
- </div>
57
- {/if}
58
- </div>
59
- </div>
60
- </div>
61
- </UiContent>
62
- {/if}
63
- </div>
64
-
65
- <style>
66
- .Modal, .Trigger {
67
- position: relative;
68
- display: inline-block;
69
- }
70
- .ModalContainer {
71
- border: 0;
72
- width: 100vw;
73
- height: 100vh;
74
- background-color: var(--bg-overlay);
75
- backdrop-filter: var(--overlay-filter);
76
- overflow-y: auto;
77
- }
78
- .ModalContent {
79
- background: var(--bg, var(--bg-app));
80
- box-shadow: var(--shadow);
81
- opacity: 1;
82
- position: absolute;
83
- left: 50%;
84
- top: 50%;
85
- transform: translate(-50%, -50%);
86
- box-shadow: 0 0.25rem 1rem 0 var(--shadow);
87
- }
88
- .ModalContentInsize {
89
- container-type: inline-size;
90
- }
91
- .ModalContent.rounded {
92
- border-radius: var(--border-radius);
93
- }
94
- .ModalContent.contained {
95
- border: var(--border);
96
- }
97
- .ModalActions {
98
- display: flex;
99
- gap: 1rem;
100
- border-top: var(--border);
101
- justify-content: flex-end;
102
- padding: 1rem;
103
- background: var(--bg-subtle) linear-gradient(0deg, transparent, 95%, color-mix(in hsl, transparent 95%, var(--mix-target)));
104
- }
105
- [popover] {
106
- animation: fadeIn 0.2s;
107
- }
108
- @keyframes fadeIn {
109
- from {
110
- opacity: 0;
111
- }
112
- to {
113
- opacity: 1;
114
- }
115
- }
116
- </style>
@@ -1,27 +0,0 @@
1
- import type { Snippet } from "svelte";
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 Modal: $$__sveltets_2_IsomorphicComponent<{
13
- /** Whether the modal should be contained with a border */
14
- contained?: boolean;
15
- /** The content of the modal */
16
- content: Snippet<[close: () => void]>;
17
- /** Snippet containing the trigger element */
18
- trigger: Snippet<[attrs: (node: Element) => void]>;
19
- /** Buttons to be displayed in the modal */
20
- buttons?: Snippet<[close: () => void]>;
21
- /** The shape of the modal */
22
- shape?: "rounded" | "sharp";
23
- }, {
24
- [evt: string]: CustomEvent<any>;
25
- }, {}, {}, "">;
26
- type Modal = InstanceType<typeof Modal>;
27
- export default Modal;
@@ -1,23 +0,0 @@
1
- import type { Snippet, Component } from "svelte";
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 Notification: $$__sveltets_2_IsomorphicComponent<{
13
- id?: string;
14
- children?: Snippet;
15
- title?: string;
16
- content?: string;
17
- icon?: string | Snippet | Component;
18
- actions?: Snippet;
19
- }, {
20
- [evt: string]: CustomEvent<any>;
21
- }, {}, {}, "">;
22
- type Notification = InstanceType<typeof Notification>;
23
- export default Notification;