lutra 0.0.18 → 0.0.20

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 (102) hide show
  1. package/dist/data/Stat.svelte.d.ts +12 -6
  2. package/dist/display/Avatar.svelte.d.ts +5 -0
  3. package/dist/display/Badge.svelte.d.ts +10 -6
  4. package/dist/display/Callout.svelte +8 -4
  5. package/dist/display/Callout.svelte.d.ts +11 -9
  6. package/dist/display/Close.svelte +58 -0
  7. package/dist/display/Close.svelte.d.ts +21 -0
  8. package/dist/display/Code.svelte.d.ts +10 -8
  9. package/dist/display/ContextTip.svelte +1 -2
  10. package/dist/display/ContextTip.svelte.d.ts +5 -0
  11. package/dist/display/Details.svelte.d.ts +11 -5
  12. package/dist/display/Hero.svelte.d.ts +9 -4
  13. package/dist/display/Icon.svelte +4 -6
  14. package/dist/display/Icon.svelte.d.ts +6 -0
  15. package/dist/display/IconButton.svelte +2 -3
  16. package/dist/display/IconButton.svelte.d.ts +8 -4
  17. package/dist/display/Image.svelte +63 -13
  18. package/dist/display/Image.svelte.d.ts +15 -2
  19. package/dist/display/Indicator.svelte.d.ts +5 -3
  20. package/dist/display/Inset.svelte.d.ts +5 -0
  21. package/dist/display/Notification.svelte +104 -0
  22. package/dist/display/Notification.svelte.d.ts +42 -0
  23. package/dist/display/Popup.svelte.d.ts +10 -4
  24. package/dist/display/Table.svelte +3 -0
  25. package/dist/display/Table.svelte.d.ts +11 -0
  26. package/dist/display/Tag.svelte.d.ts +11 -7
  27. package/dist/display/Tooltip.svelte +1 -1
  28. package/dist/display/Tooltip.svelte.d.ts +9 -3
  29. package/dist/display/notifications.svelte.d.ts +21 -0
  30. package/dist/display/notifications.svelte.js +31 -0
  31. package/dist/form/Button.svelte.d.ts +12 -0
  32. package/dist/form/FieldActions.svelte +1 -1
  33. package/dist/form/FieldActions.svelte.d.ts +6 -0
  34. package/dist/form/FieldContainer.svelte +5 -0
  35. package/dist/form/FieldContainer.svelte.d.ts +6 -0
  36. package/dist/form/FieldContent.svelte +3 -0
  37. package/dist/form/FieldContent.svelte.d.ts +23 -0
  38. package/dist/form/FieldError.svelte.d.ts +4 -0
  39. package/dist/form/FieldSection.svelte +13 -1
  40. package/dist/form/FieldSection.svelte.d.ts +11 -0
  41. package/dist/form/Fieldset.svelte.d.ts +15 -7
  42. package/dist/form/Form.svelte +15 -12
  43. package/dist/form/Form.svelte.d.ts +10 -0
  44. package/dist/form/Input.svelte +4 -2
  45. package/dist/form/Input.svelte.d.ts +66 -55
  46. package/dist/form/InputLength.svelte.d.ts +4 -2
  47. package/dist/form/Label.svelte.d.ts +9 -3
  48. package/dist/form/Select.svelte +0 -1
  49. package/dist/form/Select.svelte.d.ts +44 -27
  50. package/dist/form/form.js +1 -1
  51. package/dist/grid/Column.svelte.d.ts +5 -0
  52. package/dist/grid/Grid.svelte.d.ts +6 -0
  53. package/dist/grid/Row.svelte.d.ts +6 -1
  54. package/dist/layout/Layout.svelte +2 -0
  55. package/dist/layout/Layout.svelte.d.ts +6 -2
  56. package/dist/layout/LayoutFooter.svelte.d.ts +3 -1
  57. package/dist/layout/LayoutGrid.svelte.d.ts +13 -5
  58. package/dist/layout/LayoutHeader.svelte.d.ts +13 -12
  59. package/dist/layout/LayoutSideMenu.svelte +54 -0
  60. package/dist/layout/LayoutSideMenu.svelte.d.ts +25 -0
  61. package/dist/layout/Overlay.svelte +20 -0
  62. package/dist/layout/Overlay.svelte.d.ts +35 -0
  63. package/dist/layout/OverlayContainer.svelte +28 -0
  64. package/dist/layout/OverlayContainer.svelte.d.ts +16 -0
  65. package/dist/layout/OverlayLayer.svelte +145 -0
  66. package/dist/layout/OverlayLayer.svelte.d.ts +22 -0
  67. package/dist/layout/PageContent.svelte +9 -1
  68. package/dist/layout/PageContent.svelte.d.ts +8 -3
  69. package/dist/layout/Theme.svelte +8 -0
  70. package/dist/layout/Theme.svelte.d.ts +6 -0
  71. package/dist/layout/UIContent.svelte.d.ts +5 -0
  72. package/dist/layout/overlays.svelte.d.ts +34 -0
  73. package/dist/layout/overlays.svelte.js +44 -0
  74. package/dist/nav/Breadcrumb.svelte.d.ts +9 -5
  75. package/dist/nav/Menu.svelte +43 -62
  76. package/dist/nav/Menu.svelte.d.ts +11 -4
  77. package/dist/nav/MenuItem.svelte +25 -7
  78. package/dist/nav/MenuItem.svelte.d.ts +9 -0
  79. package/dist/nav/NavMenu.svelte.d.ts +3 -1
  80. package/dist/nav/TabbedContent.svelte.d.ts +5 -3
  81. package/dist/nav/Tabs.svelte.d.ts +6 -4
  82. package/dist/style.css +74 -36
  83. package/dist/typo/Clamp.svelte.d.ts +8 -3
  84. package/dist/typo/H.svelte.d.ts +10 -5
  85. package/dist/typo/H1.svelte.d.ts +9 -4
  86. package/dist/typo/H2.svelte.d.ts +9 -4
  87. package/dist/typo/H3.svelte.d.ts +9 -4
  88. package/dist/typo/H4.svelte.d.ts +9 -4
  89. package/dist/typo/H5.svelte.d.ts +9 -4
  90. package/dist/typo/H6.svelte.d.ts +9 -4
  91. package/dist/typo/P.svelte.d.ts +9 -4
  92. package/dist/utils/StringOrComponentOrSnippet.svelte +3 -2
  93. package/dist/utils/StringOrComponentOrSnippet.svelte.d.ts +7 -0
  94. package/dist/utils/attr.d.ts +2 -2
  95. package/dist/utils/attr.js +2 -2
  96. package/dist/utils/dom.d.ts +15 -0
  97. package/dist/utils/dom.js +74 -0
  98. package/dist/utils/keyboard.svelte.d.ts +19 -0
  99. package/dist/utils/keyboard.svelte.js +22 -3
  100. package/dist/utils/transitions.d.ts +1 -0
  101. package/dist/utils/transitions.js +9 -2
  102. package/package.json +11 -9
@@ -2,13 +2,9 @@ import { SvelteComponent } from "svelte";
2
2
  import { type Snippet } from "svelte";
3
3
  declare const __propDef: {
4
4
  props: {
5
- /** Center the text. */
6
5
  center?: boolean | undefined;
7
- /** Language of the element */
8
6
  lang?: string | undefined;
9
- /** Add a horizontal rule below the text. */
10
7
  hr?: boolean | undefined;
11
- /** Make the text subtle. */
12
8
  subtle?: boolean | undefined;
13
9
  children: Snippet;
14
10
  };
@@ -21,5 +17,14 @@ export type H6Props = typeof __propDef.props;
21
17
  export type H6Events = typeof __propDef.events;
22
18
  export type H6Slots = typeof __propDef.slots;
23
19
  export default class H6 extends SvelteComponent<H6Props, H6Events, H6Slots> {
20
+ constructor(options?: import("svelte").ComponentConstructorOptions<{
21
+ center?: boolean | undefined;
22
+ lang?: string | undefined;
23
+ hr?: boolean | undefined;
24
+ subtle?: boolean | undefined;
25
+ children: (this: void) => typeof import("svelte").SnippetReturn & {
26
+ _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
27
+ };
28
+ }>);
24
29
  }
25
30
  export {};
@@ -2,13 +2,9 @@ import { SvelteComponent } from "svelte";
2
2
  import { type Snippet } from "svelte";
3
3
  declare const __propDef: {
4
4
  props: {
5
- /** Center the text. */
6
5
  center?: boolean | undefined;
7
- /** Language of the element */
8
6
  lang?: string | undefined;
9
- /** Make the text subtle. */
10
7
  subtle?: boolean | undefined;
11
- /** Make the text strong. */
12
8
  strong?: boolean | undefined;
13
9
  children: Snippet;
14
10
  };
@@ -21,5 +17,14 @@ export type PProps = typeof __propDef.props;
21
17
  export type PEvents = typeof __propDef.events;
22
18
  export type PSlots = typeof __propDef.slots;
23
19
  export default class P extends SvelteComponent<PProps, PEvents, PSlots> {
20
+ constructor(options?: import("svelte").ComponentConstructorOptions<{
21
+ center?: boolean | undefined;
22
+ lang?: string | undefined;
23
+ subtle?: boolean | undefined;
24
+ strong?: boolean | undefined;
25
+ children: (this: void) => typeof import("svelte").SnippetReturn & {
26
+ _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
27
+ };
28
+ }>);
24
29
  }
25
30
  export {};
@@ -1,13 +1,14 @@
1
1
  <script lang="ts">import { isComponent, isSnippet } from "./isSnippet.js";
2
2
  let {
3
- content
3
+ content,
4
+ props
4
5
  } = $props();
5
6
  </script>
6
7
 
7
8
  {#if typeof content === 'string'}
8
9
  {content}
9
10
  {:else if isComponent(content)}
10
- <svelte:component this={content} />
11
+ <svelte:component this={content} {...props} />
11
12
  {:else if isSnippet(content)}
12
13
  {@render content()}
13
14
  {/if}
@@ -3,6 +3,7 @@ import type { ComponentType, Snippet } from "svelte";
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  content: string | ComponentType | Snippet;
6
+ props?: Record<string, any> | undefined;
6
7
  };
7
8
  events: {
8
9
  [evt: string]: CustomEvent<any>;
@@ -13,5 +14,11 @@ export type StringOrComponentOrSnippetProps = typeof __propDef.props;
13
14
  export type StringOrComponentOrSnippetEvents = typeof __propDef.events;
14
15
  export type StringOrComponentOrSnippetSlots = typeof __propDef.slots;
15
16
  export default class StringOrComponentOrSnippet extends SvelteComponent<StringOrComponentOrSnippetProps, StringOrComponentOrSnippetEvents, StringOrComponentOrSnippetSlots> {
17
+ constructor(options?: import("svelte").ComponentConstructorOptions<{
18
+ content: string | ((this: void) => typeof import("svelte").SnippetReturn & {
19
+ _: "functions passed to {@render ...} tags must use the `Snippet` type imported from \"svelte\"";
20
+ }) | ComponentType;
21
+ props?: Record<string, any> | undefined;
22
+ }>);
16
23
  }
17
24
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Node attribute helper. This is used to create a function that will set e.g. aria attributes on an element.
3
- * @returns {Function} - The function to set the aria attributes. Pass this as `attr(opts)` to a child which can use it with `use:attr`.
2
+ * Node attribute helper. This is used to create a function that will set e.g. onclick, aria, etc. attributes on an element.
3
+ * @returns {Function} - The function to set the attributes. Pass this as `attr(opts)` to a child which can use it with `use:attr`.
4
4
  */
5
5
  export declare function attr(opts: Record<string, any>): (node: Element) => void;
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Node attribute helper. This is used to create a function that will set e.g. aria attributes on an element.
3
- * @returns {Function} - The function to set the aria attributes. Pass this as `attr(opts)` to a child which can use it with `use:attr`.
2
+ * Node attribute helper. This is used to create a function that will set e.g. onclick, aria, etc. attributes on an element.
3
+ * @returns {Function} - The function to set the attributes. Pass this as `attr(opts)` to a child which can use it with `use:attr`.
4
4
  */
5
5
  export function attr(opts) {
6
6
  return function (node) {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Find the containing block of a given element. The containing block is the nearest ancestor element that is a containing block for positioned elements.
3
+ * @param {HTMLElement | null} element - The element to find the containing block for.
4
+ * @returns {HTMLElement | null} - The containing block element, or null if none is found.
5
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block
6
+ */
7
+ export declare function findContainingBlock(element: HTMLElement | null, id?: string): HTMLElement | null;
8
+ export declare function findAllContainingBlocks(element: HTMLElement | null): HTMLElement[];
9
+ /**
10
+ * Get the total offset of an element, including all its containing blocks.
11
+ */
12
+ export declare function getPossiblyContainedPosition(element: HTMLElement | null): {
13
+ left: number;
14
+ top: number;
15
+ };
@@ -0,0 +1,74 @@
1
+ import { createId } from "./id.js";
2
+ let initialElements = {};
3
+ let initialStyles = {};
4
+ /**
5
+ * Find the containing block of a given element. The containing block is the nearest ancestor element that is a containing block for positioned elements.
6
+ * @param {HTMLElement | null} element - The element to find the containing block for.
7
+ * @returns {HTMLElement | null} - The containing block element, or null if none is found.
8
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block
9
+ */
10
+ export function findContainingBlock(element, id = createId()) {
11
+ const elementToLookAt = element?.parentElement;
12
+ // Base case for recursion: if the element is the body or null, return null as no containing block was found
13
+ if (!elementToLookAt || !element || element.tagName === "BODY" || elementToLookAt.tagName === "BODY") {
14
+ return null;
15
+ }
16
+ if (!initialElements[id]) {
17
+ initialElements[id] = element;
18
+ initialStyles[id] = getComputedStyle(element);
19
+ }
20
+ // Get computed styles of the current element
21
+ const style = getComputedStyle(elementToLookAt);
22
+ // Check for properties that make this element a containing block for positioned elements
23
+ if ((style.position !== 'static' && (initialStyles[id].position === 'fixed' ||
24
+ initialStyles[id].position === 'absolute' ||
25
+ initialStyles[id].position === 'sticky')) ||
26
+ (style.transform !== 'none' && style.transform !== undefined) ||
27
+ style.perspective !== 'none' && style.perspective !== undefined ||
28
+ style.filter !== 'none' && style.filter !== undefined ||
29
+ style.willChange === 'transform' || style.willChange === 'perspective' ||
30
+ style.willChange === 'filter' || // Firefox specific for filters
31
+ (style.contain.includes('layout') || style.contain.includes('paint') || style.contain.includes('strict') || style.contain.includes('content')) ||
32
+ style.containerType !== 'normal' ||
33
+ (style.backdropFilter !== 'none' && style.backdropFilter !== undefined)) {
34
+ delete initialElements[id];
35
+ delete initialStyles[id];
36
+ return element;
37
+ }
38
+ // Recurse up the DOM tree if no containing block found
39
+ return findContainingBlock(elementToLookAt, id);
40
+ }
41
+ export function findAllContainingBlocks(element) {
42
+ let currentElement = findContainingBlock(element);
43
+ if (!currentElement)
44
+ return [];
45
+ const blocks = [currentElement];
46
+ let i = 0;
47
+ while (currentElement !== null && currentElement.tagName !== 'BODY' && i < 50) {
48
+ const block = findContainingBlock(currentElement.parentElement);
49
+ if (block) {
50
+ blocks.push(block.parentElement);
51
+ }
52
+ currentElement = block;
53
+ i++;
54
+ }
55
+ return blocks;
56
+ }
57
+ /**
58
+ * Get the total offset of an element, including all its containing blocks.
59
+ */
60
+ export function getPossiblyContainedPosition(element) {
61
+ const blocks = findAllContainingBlocks(element);
62
+ let left = 0;
63
+ let top = 0;
64
+ for (const block of blocks) {
65
+ const rect = block.getBoundingClientRect();
66
+ console.log('block', block, rect);
67
+ left += rect.left;
68
+ top += rect.top;
69
+ }
70
+ return {
71
+ left: left,
72
+ top: top
73
+ };
74
+ }
@@ -1,3 +1,22 @@
1
+ /**
2
+ * Get the next focusable element in the specified direction
3
+ * @param {HTMLElement | null} startingElement - The element to start the search from.
4
+ * @param {HTMLElement | null} triggerElement - The element that triggered the search.
5
+ * @param {string} direction - The direction to search in, either 'next' or 'previous'.
6
+ * @returns {HTMLElement | null} - The next focusable element, or null if none are found.
7
+ */
1
8
  export declare function getNextFocusableElement(startingElement: HTMLElement | null, triggerElement: HTMLElement | null, direction: "next" | "previous"): HTMLElement | null;
9
+ /**
10
+ * Navigate through a list of elements using the arrow keys
11
+ * @param {HTMLElement | null} el - The element containing the list of elements to navigate.
12
+ * @param {string} direction - The direction to navigate in, either 'up' or 'down'.
13
+ * @returns {void}
14
+ */
2
15
  export declare function arrowNavigation(el: HTMLElement | null, direction: "up" | "down"): void;
16
+ /**
17
+ * Match the key pressed to the first letter of an element in the list
18
+ * @param {HTMLElement | null} el - The element containing the list of elements to search through.
19
+ * @param {KeyboardEvent} e - The keyboard event to match the key from.
20
+ * @returns {void}
21
+ */
3
22
  export declare function matchOnType(el: HTMLElement | null, e: KeyboardEvent): void;
@@ -1,3 +1,13 @@
1
+ const ignoreKeys = ['backspace', 'tab', 'shift', 'control', 'alt', 'meta', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright', 'home', 'end', 'pageup', 'pagedown', 'escape', 'capslock', 'numlock', 'scrolllock', 'pause', 'contextmenu', 'printscreen', 'help', 'clear', 'os', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f12', 'insert', 'delete', 'enter', 'space', 'escape'];
2
+ let keyMemory = $state("");
3
+ let timeout;
4
+ /**
5
+ * Get the next focusable element in the specified direction
6
+ * @param {HTMLElement | null} startingElement - The element to start the search from.
7
+ * @param {HTMLElement | null} triggerElement - The element that triggered the search.
8
+ * @param {string} direction - The direction to search in, either 'next' or 'previous'.
9
+ * @returns {HTMLElement | null} - The next focusable element, or null if none are found.
10
+ */
1
11
  export function getNextFocusableElement(startingElement, triggerElement, direction) {
2
12
  if (!startingElement)
3
13
  return null;
@@ -55,6 +65,12 @@ export function getNextFocusableElement(startingElement, triggerElement, directi
55
65
  // Return the next focusable element, or null if none are found
56
66
  return focusableElements[nextIndex] || null;
57
67
  }
68
+ /**
69
+ * Navigate through a list of elements using the arrow keys
70
+ * @param {HTMLElement | null} el - The element containing the list of elements to navigate.
71
+ * @param {string} direction - The direction to navigate in, either 'up' or 'down'.
72
+ * @returns {void}
73
+ */
58
74
  export function arrowNavigation(el, direction) {
59
75
  const items = el?.querySelectorAll("a, button, input, textarea, select");
60
76
  if (!items)
@@ -70,9 +86,12 @@ export function arrowNavigation(el, direction) {
70
86
  items[index - 1].focus();
71
87
  }
72
88
  }
73
- const ignoreKeys = ['backspace', 'tab', 'shift', 'control', 'alt', 'meta', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright', 'home', 'end', 'pageup', 'pagedown', 'escape', 'capslock', 'numlock', 'scrolllock', 'pause', 'contextmenu', 'printscreen', 'help', 'clear', 'os', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f12', 'insert', 'delete', 'enter', 'space', 'escape'];
74
- let keyMemory = $state("");
75
- let timeout;
89
+ /**
90
+ * Match the key pressed to the first letter of an element in the list
91
+ * @param {HTMLElement | null} el - The element containing the list of elements to search through.
92
+ * @param {KeyboardEvent} e - The keyboard event to match the key from.
93
+ * @returns {void}
94
+ */
76
95
  export function matchOnType(el, e) {
77
96
  const items = el?.querySelectorAll("a, button, label");
78
97
  if (!items)
@@ -4,6 +4,7 @@
4
4
  export declare const popBezier: (t: number) => number;
5
5
  export declare const popBezierInverse: (t: number) => number;
6
6
  export declare function slidefade(node: Element, params?: {
7
+ noMargin?: boolean;
7
8
  origin?: string;
8
9
  x?: number;
9
10
  y?: number;
@@ -9,7 +9,8 @@ export function slidefade(node, params = {}) {
9
9
  const existingTranslateX = transform.match(/translateX\(([^)]+)\)/);
10
10
  const existingTranslateY = transform.match(/translateY\(([^)]+)\)/);
11
11
  const _x = params.x || 0;
12
- const _y = params.y || 0;
12
+ const _y = params.y || 5;
13
+ const elHeight = node.clientHeight;
13
14
  // If the origin is top left, we want to move the element to the right and down, so we need to invert the x and y values.
14
15
  // If the origin is top right, we want to move the element to the left and down, so we need to invert the y value.
15
16
  // etc.
@@ -21,7 +22,13 @@ export function slidefade(node, params = {}) {
21
22
  delay: params.delay || 0,
22
23
  duration: params.duration || 400,
23
24
  easing: params.easing || popBezier,
24
- css: (t, u) => `transform-origin: ${origin}; transform: ${transform} translateX(calc(${translateX} * ${u})) translateY(calc(${translateY} * ${u})); scale: ${t / 10 + 0.9}; opacity: ${t};`,
25
+ css: (t, u) => {
26
+ let ret = `transform-origin: ${origin}; transform: ${transform} translateX(calc(${translateX} * ${u})) translateY(calc(${translateY} * ${u})); scale: ${t / 10 + 0.9}; opacity: ${t};`;
27
+ if (params.noMargin) {
28
+ ret += ` margin-bottom: calc(-1 * ${elHeight || 0}px * ${u});`;
29
+ }
30
+ return ret;
31
+ }
25
32
  };
26
33
  }
27
34
  export function solve_spring(from, velocity, to, _params) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lutra",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "scripts": {
5
5
  "dev": "vite dev --host 0.0.0.0",
6
6
  "props": "node read_props.js",
@@ -62,8 +62,8 @@
62
62
  "svelte": "^4.0.0"
63
63
  },
64
64
  "devDependencies": {
65
- "@playwright/test": "^1.43.0",
66
- "@rollup/browser": "^4.14.1",
65
+ "@playwright/test": "^1.43.1",
66
+ "@rollup/browser": "^4.17.2",
67
67
  "@sveltejs/adapter-auto": "^3.2.0",
68
68
  "@sveltejs/package": "^2.3.1",
69
69
  "@sveltejs/vite-plugin-svelte": "^3.1.0",
@@ -71,16 +71,16 @@
71
71
  "glob": "^10.3.12",
72
72
  "highlight.js": "^11.9.0",
73
73
  "mdsvex": "^0.11.0",
74
- "monaco-editor": "^0.47.0",
74
+ "monaco-editor": "^0.48.0",
75
75
  "prettier": "^3.2.5",
76
- "prettier-plugin-svelte": "^3.2.2",
76
+ "prettier-plugin-svelte": "^3.2.3",
77
77
  "publint": "^0.2.7",
78
78
  "svelte": "next",
79
- "svelte-check": "^3.6.9",
79
+ "svelte-check": "^3.7.0",
80
80
  "tslib": "^2.6.2",
81
81
  "typescript": "^5.4.5",
82
- "vite": "5.2.8",
83
- "vitest": "1.4.0"
82
+ "vite": "5.2.10",
83
+ "vitest": "1.5.3"
84
84
  },
85
85
  "svelte": "./dist/index.js",
86
86
  "types": "./dist/index.d.ts",
@@ -88,6 +88,8 @@
88
88
  "dependencies": {
89
89
  "@auth70/bodyguard": "^1.6.2",
90
90
  "@auth70/zodex-esm": "^0.7.3",
91
- "zod": "^3.22.4"
91
+ "blurhash": "^2.0.5",
92
+ "esm-env": "^1.0.0",
93
+ "zod": "^3.23.5"
92
94
  }
93
95
  }