@flightlesslabs/dodo-ui 0.6.6 → 0.7.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 (118) hide show
  1. package/dist/index.d.ts +28 -7
  2. package/dist/index.js +12 -2
  3. package/dist/stories/Home.mdx +1 -1
  4. package/dist/stories/components/Form/Button/Button.svelte +2 -2
  5. package/dist/stories/components/Form/Button/Button.svelte.d.ts +8 -5
  6. package/dist/stories/components/Form/FormControl/FormControl.svelte +3 -0
  7. package/dist/stories/components/Form/FormControl/FormControl.svelte.d.ts +1 -1
  8. package/dist/stories/components/Form/Label/Label.svelte +5 -2
  9. package/dist/stories/components/Form/Label/Label.svelte.d.ts +1 -1
  10. package/dist/stories/components/Form/Message/Message.svelte +5 -2
  11. package/dist/stories/components/Form/Message/Message.svelte.d.ts +1 -1
  12. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte +25 -32
  13. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte.d.ts +5 -5
  14. package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte +120 -0
  15. package/dist/stories/components/Form/Select/Customize/Customize.stories.svelte.d.ts +18 -0
  16. package/dist/stories/components/Form/Select/Events/Events.stories.svelte +138 -0
  17. package/dist/stories/components/Form/Select/Options/OptionFormat.mdx +40 -0
  18. package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte +28 -0
  19. package/dist/stories/components/Form/Select/Roundness/Roundness.stories.svelte.d.ts +18 -0
  20. package/dist/stories/components/Form/Select/Select.stories.svelte +114 -0
  21. package/dist/stories/components/Form/Select/Select.stories.svelte.d.ts +22 -0
  22. package/dist/stories/components/Form/Select/Select.svelte +285 -0
  23. package/dist/stories/components/Form/Select/Select.svelte.d.ts +87 -0
  24. package/dist/stories/components/Form/Select/Size/Size.stories.svelte +24 -0
  25. package/dist/stories/components/Form/Select/Size/Size.stories.svelte.d.ts +18 -0
  26. package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte +39 -0
  27. package/dist/stories/components/Form/Select/WithIcon/WithIcon.stories.svelte.d.ts +18 -0
  28. package/dist/stories/components/Form/TextInput/TextInput.svelte +9 -28
  29. package/dist/stories/components/Form/TextInput/TextInput.svelte.d.ts +8 -5
  30. package/dist/stories/components/Layout/Menu/Menu.stories.svelte +65 -0
  31. package/dist/stories/components/Layout/Menu/Menu.stories.svelte.d.ts +21 -0
  32. package/dist/stories/components/Layout/Menu/Menu.svelte +30 -0
  33. package/dist/stories/components/Layout/Menu/Menu.svelte.d.ts +23 -0
  34. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte +30 -0
  35. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.stories.svelte.d.ts +21 -0
  36. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +164 -0
  37. package/dist/stories/components/Layout/Menu/MenuItem/MenuItem.svelte.d.ts +49 -0
  38. package/dist/stories/components/Layout/Menu/MenuItem/Size/Size.stories.svelte +16 -0
  39. package/dist/stories/components/Layout/Menu/MenuItem/Type/Type.stories.svelte +21 -0
  40. package/dist/stories/components/{Form/SimpleSelect/WithIcon/WithIcon.stories.svelte.d.ts → Layout/Menu/MenuItem/Type/Type.stories.svelte.d.ts} +3 -3
  41. package/dist/stories/components/Layout/Menu/Size/Size.stories.svelte +37 -0
  42. package/dist/stories/components/{Form/SimpleSelect/Roundness/Roundness.stories.svelte.d.ts → Layout/Menu/Size/Size.stories.svelte.d.ts} +3 -3
  43. package/dist/stories/components/Layout/Paper/Color/Color.stories.svelte +1 -1
  44. package/dist/stories/components/Layout/Paper/Paper.stories.svelte +1 -1
  45. package/dist/stories/components/Layout/Paper/Paper.svelte.d.ts +5 -5
  46. package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte +19 -0
  47. package/dist/stories/components/Layout/Separator/Color/Color.stories.svelte.d.ts +26 -0
  48. package/dist/stories/components/Layout/Separator/Separator.stories.svelte +26 -0
  49. package/dist/stories/components/Layout/Separator/Separator.stories.svelte.d.ts +21 -0
  50. package/dist/stories/components/Layout/Separator/Separator.svelte +66 -0
  51. package/dist/stories/components/Layout/Separator/Separator.svelte.d.ts +22 -0
  52. package/dist/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
  53. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.stories.svelte +49 -0
  54. package/dist/stories/{components/Form/SimpleSelect/SimpleSelect.stories.svelte.d.ts → developer tools/components/DynamicInput/DynamicInput.stories.svelte.d.ts } +5 -7
  55. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte +92 -0
  56. package/dist/stories/developer tools/components/DynamicInput/DynamicInput.svelte.d.ts +60 -0
  57. package/dist/stories/{components/Form/SimpleSelect/Size/Size.stories.svelte → developer tools/components/DynamicInput/Size/Size.stories.svelte } +5 -8
  58. package/dist/stories/developer tools/components/DynamicInput/Size/Size.stories.svelte.d.ts +26 -0
  59. package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +6 -2
  60. package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte.d.ts +1 -1
  61. package/dist/stories/developer tools/components/Popper/Popper.stories.svelte +119 -0
  62. package/dist/stories/developer tools/components/Popper/Popper.stories.svelte.d.ts +21 -0
  63. package/dist/stories/developer tools/components/Popper/Popper.svelte +77 -0
  64. package/dist/stories/developer tools/components/Popper/Popper.svelte.d.ts +50 -0
  65. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte +60 -0
  66. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.stories.svelte.d.ts +21 -0
  67. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +66 -0
  68. package/dist/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte.d.ts +34 -0
  69. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.d.ts +21 -0
  70. package/dist/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.js +62 -0
  71. package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte +89 -0
  72. package/dist/stories/developer tools/components/Popper/Positions/AutoPosition/AutoPosition.stories.svelte.d.ts +18 -0
  73. package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte +111 -0
  74. package/dist/stories/developer tools/components/Popper/Positions/Positions.stories.svelte.d.ts +18 -0
  75. package/dist/stories/developer tools/components/UtilityButton/Size/Size.stories.svelte +3 -5
  76. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.stories.svelte +0 -4
  77. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte +5 -2
  78. package/dist/stories/developer tools/components/UtilityButton/UtilityButton.svelte.d.ts +1 -1
  79. package/dist/stories/developer tools/directives/clickOutside/clickOutside.d.ts +3 -0
  80. package/dist/stories/developer tools/directives/clickOutside/clickOutside.js +14 -0
  81. package/dist/stories/developer tools/directives/clickOutside/index.mdx +25 -0
  82. package/dist/styles/_z-index.css +9 -0
  83. package/dist/styles/global.css +1 -0
  84. package/dist/types/position.d.ts +4 -0
  85. package/dist/types/position.js +2 -0
  86. package/package.json +1 -1
  87. package/src/lib/index.ts +50 -9
  88. package/src/lib/stories/components/Form/Button/Button.svelte +14 -10
  89. package/src/lib/stories/components/Form/FormControl/FormControl.svelte +7 -4
  90. package/src/lib/stories/components/Form/Label/Label.svelte +4 -2
  91. package/src/lib/stories/components/Form/Message/Message.svelte +4 -2
  92. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.svelte +48 -49
  93. package/src/lib/stories/components/Form/Select/Select.svelte +501 -0
  94. package/src/lib/stories/components/Form/TextInput/TextInput.svelte +32 -59
  95. package/src/lib/stories/components/Layout/Menu/Menu.svelte +65 -0
  96. package/src/lib/stories/components/Layout/Menu/MenuItem/MenuItem.svelte +268 -0
  97. package/src/lib/stories/components/Layout/Paper/Paper.svelte +8 -9
  98. package/src/lib/stories/components/Layout/Separator/Separator.svelte +96 -0
  99. package/src/lib/stories/components/Layout/Separator/utils/scss/mixins.scss +24 -0
  100. package/src/lib/stories/developer tools/components/DynamicInput/DynamicInput.svelte +195 -0
  101. package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +5 -2
  102. package/src/lib/stories/developer tools/components/Popper/Popper.svelte +159 -0
  103. package/src/lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte +120 -0
  104. package/src/lib/stories/developer tools/components/Popper/PopperPopup/utils/getPopupPosition.ts +87 -0
  105. package/src/lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte +4 -2
  106. package/src/lib/stories/developer tools/directives/clickOutside/clickOutside.ts +17 -0
  107. package/src/lib/styles/_z-index.css +9 -0
  108. package/src/lib/styles/global.css +1 -0
  109. package/src/lib/types/position.ts +5 -0
  110. package/dist/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +0 -47
  111. package/dist/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +0 -24
  112. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +0 -57
  113. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -69
  114. package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte.d.ts +0 -51
  115. package/dist/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +0 -36
  116. package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte +0 -160
  117. /package/dist/stories/components/Form/{SimpleSelect → Select}/Events/Events.stories.svelte.d.ts +0 -0
  118. /package/dist/stories/components/{Form/SimpleSelect → Layout/Menu/MenuItem}/Size/Size.stories.svelte.d.ts +0 -0
@@ -1,5 +1,8 @@
1
- <script lang="ts">let { children, size = 'normal', name, id, title, class: className = '', disabled = false, onclick, ref = $bindable(), } = $props();
2
- export {};
1
+ <script lang="ts" module>export {};
2
+ </script>
3
+
4
+ <script lang="ts">"use strict";
5
+ let { children, size = 'normal', name, id, title, class: className = '', disabled = false, onclick, ref = $bindable(), } = $props();
3
6
  </script>
4
7
 
5
8
  <button
@@ -1,7 +1,7 @@
1
1
  import type { ComponentSize } from '../../../../types/size.js';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { MouseEventHandler } from 'svelte/elements';
4
- interface UtilityButtonProps {
4
+ export interface UtilityButtonProps {
5
5
  /** Button contents goes here*/
6
6
  children?: Snippet;
7
7
  /** Button ref */
@@ -0,0 +1,3 @@
1
+ export declare function clickOutside(node: Element, callback: () => void): {
2
+ destroy(): void;
3
+ };
@@ -0,0 +1,14 @@
1
+ export function clickOutside(node, callback) {
2
+ const handleClick = (event) => {
3
+ const target = event.target;
4
+ if (node && !node.contains(target) && !event.defaultPrevented) {
5
+ callback();
6
+ }
7
+ };
8
+ document.addEventListener('click', handleClick, true);
9
+ return {
10
+ destroy() {
11
+ document.removeEventListener('click', handleClick, true);
12
+ },
13
+ };
14
+ }
@@ -0,0 +1,25 @@
1
+ import { Source } from '@storybook/blocks';
2
+
3
+ # Click Outside
4
+
5
+ Event that fires after clicking outside the target component
6
+
7
+ <Source
8
+ dark
9
+ language="js"
10
+ code={`
11
+ import { clickOutside } '@flightlesslabs/dodo-ui';
12
+ `}
13
+ />
14
+
15
+ Attach it to a component
16
+
17
+ <Source
18
+ dark
19
+ language="js"
20
+ code={`
21
+ <div
22
+ use:clickOutside={onClickOutside}
23
+ ...
24
+ `}
25
+ />
@@ -0,0 +1,9 @@
1
+ :root {
2
+ /* zIndex */
3
+ --dodo-ui-z-index-0: 0;
4
+ --dodo-ui-z-index-1: 1;
5
+ --dodo-ui-z-index-2: 100;
6
+ --dodo-ui-z-index-3: 1000;
7
+ --dodo-ui-z-index-4: 5000;
8
+ --dodo-ui-z-index-5: 5001;
9
+ }
@@ -2,6 +2,7 @@
2
2
  @import '_colors-base.css';
3
3
  @import '_colors.css';
4
4
  @import '_space.css';
5
+ @import '_z-index.css';
5
6
  @import '_breakpoint.css';
6
7
  @import '_shadow.css';
7
8
  @import '_components.css';
@@ -0,0 +1,4 @@
1
+ export type PositionY = 'top' | 'middle' | 'bottom';
2
+ export type PositionX = 'left' | 'center' | 'right';
3
+ export declare const positionYArray: PositionY[];
4
+ export declare const positionXArray: PositionX[];
@@ -0,0 +1,2 @@
1
+ export const positionYArray = ['top', 'bottom'];
2
+ export const positionXArray = ['left', 'center', 'right'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flightlesslabs/dodo-ui",
3
- "version": "0.6.6",
3
+ "version": "0.7.0",
4
4
  "scripts": {
5
5
  "build": "vite build && pnpm run prepack",
6
6
  "preview": "vite preview",
package/src/lib/index.ts CHANGED
@@ -12,11 +12,33 @@ export type { ComponentSize } from './types/size.js';
12
12
 
13
13
  export type { ComponentWeight } from './types/weight.js';
14
14
 
15
+ export type { PositionY, PositionX } from './types/position.js';
16
+
17
+ /** developer tools: directives: clickOutside */
18
+ export { clickOutside } from '$lib/stories/developer tools/directives/clickOutside/clickOutside.js';
19
+
15
20
  /** developer tools: components: UtilityButton */
16
21
  export { default as UtilityButton } from '$lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte';
22
+ export type { UtilityButtonProps } from '$lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte';
17
23
 
18
24
  /** developer tools: components: InputEnclosure */
19
25
  export { default as InputEnclosure } from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
26
+ export type { InputEnclosureProps } from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
27
+
28
+ /** developer tools: components: DynamicInput */
29
+ export { default as DynamicInput } from '$lib/stories/developer tools/components/DynamicInput/DynamicInput.svelte';
30
+ export type {
31
+ DynamicInputVariant,
32
+ DynamicInputProps,
33
+ DynamicInputClickEvent,
34
+ DynamicInputFocusEvent,
35
+ } from '$lib/stories/developer tools/components/DynamicInput/DynamicInput.svelte';
36
+
37
+ /** developer tools: components: Popper */
38
+ export { default as Popper } from '$lib/stories/developer tools/components/Popper/Popper.svelte';
39
+ export type { PopperProps } from '$lib/stories/developer tools/components/Popper/Popper.svelte';
40
+ export { default as PopperPopup } from '$lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte';
41
+ export type { PopperPopupProps } from '$lib/stories/developer tools/components/Popper/PopperPopup/PopperPopup.svelte';
20
42
 
21
43
  /** Form: Button */
22
44
  export { default as Button } from '$lib/stories/components/Form/Button/Button.svelte';
@@ -24,6 +46,8 @@ export type {
24
46
  ButtonLinkTarget,
25
47
  ButtonLinkReferrerpolicy,
26
48
  ButtonType,
49
+ ButtonProps,
50
+ ButtonClickEvent,
27
51
  } from '$lib/stories/components/Form/Button/Button.svelte';
28
52
 
29
53
  /** Form: TextInput */
@@ -32,28 +56,45 @@ export type {
32
56
  TextInputType,
33
57
  TextInputFocusEvent,
34
58
  TextInputClipboardEvent,
59
+ TextInputInputEvent,
60
+ TextInputProps,
35
61
  } from '$lib/stories/components/Form/TextInput/TextInput.svelte';
36
62
 
37
63
  /** Form: PasswordInput */
38
64
  export { default as PasswordInput } from '$lib/stories/components/Form/PasswordInput/PasswordInput.svelte';
39
- export type { PasswordInputToggleEvent } from '$lib/stories/components/Form/PasswordInput/PasswordInput.svelte';
65
+ export type {
66
+ PasswordInputToggleEvent,
67
+ PasswordInputProps,
68
+ } from '$lib/stories/components/Form/PasswordInput/PasswordInput.svelte';
40
69
 
41
70
  /** Form: Label */
42
71
  export { default as Label } from '$lib/stories/components/Form/Label/Label.svelte';
72
+ export type { LabelProps } from '$lib/stories/components/Form/Label/Label.svelte';
43
73
 
44
74
  /** Form: FormControl */
45
75
  export { default as FormControl } from '$lib/stories/components/Form/FormControl/FormControl.svelte';
76
+ export type { FormControlProps } from '$lib/stories/components/Form/FormControl/FormControl.svelte';
46
77
 
47
78
  /** Form: Message */
48
79
  export { default as Message } from '$lib/stories/components/Form/Message/Message.svelte';
49
-
50
- /** Form: SimpleSelect */
51
- export { default as SimpleSelect } from '$lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte';
52
- export type {
53
- SimpleSelectFocusEvent,
54
- SimpleSelectOption,
55
- } from '$lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte';
80
+ export type { MessageProps } from '$lib/stories/components/Form/Message/Message.svelte';
56
81
 
57
82
  /** Layout: Paper */
58
83
  export { default as Paper } from '$lib/stories/components/Layout/Paper/Paper.svelte';
59
- export type { PaperColor } from '$lib/stories/components/Layout/Paper/Paper.svelte';
84
+ export type { PaperColor, PaperProps } from '$lib/stories/components/Layout/Paper/Paper.svelte';
85
+
86
+ /** Layout: Separator */
87
+ export { default as Separator } from '$lib/stories/components/Layout/Separator/Separator.svelte';
88
+ export type {
89
+ SeparatorProps,
90
+ SeparatorOrientation,
91
+ } from '$lib/stories/components/Layout/Separator/Separator.svelte';
92
+
93
+ /** Layout: Menu */
94
+ export { default as Menu } from '$lib/stories/components/Layout/Menu/Menu.svelte';
95
+ export type { MenuProps } from '$lib/stories/components/Layout/Menu/Menu.svelte';
96
+ export { default as MenuItem } from '$lib/stories/components/Layout/Menu/MenuItem/MenuItem.svelte';
97
+ export type {
98
+ MenuItemType,
99
+ MenuItemProps,
100
+ } from '$lib/stories/components/Layout/Menu/MenuItem/MenuItem.svelte';
@@ -1,4 +1,12 @@
1
1
  <script lang="ts" module>
2
+ import type { ComponentColor } from '$lib/types/colors.js';
3
+ import type { ComponentRoundness } from '$lib/types/roundness.js';
4
+ import type { ComponentSize } from '$lib/types/size.js';
5
+ import type { ComponentWeight } from '$lib/types/weight.js';
6
+
7
+ import type { Snippet } from 'svelte';
8
+ import type { MouseEventHandler } from 'svelte/elements';
9
+
2
10
  export type ButtonLinkTarget =
3
11
  | '_self'
4
12
  | '_blank'
@@ -10,18 +18,12 @@
10
18
  export type ButtonLinkReferrerpolicy = ReferrerPolicy | undefined | null;
11
19
  export type ButtonType = 'button' | 'submit';
12
20
  export const buttonTypeArray: ButtonType[] = ['button', 'submit'];
13
- </script>
14
21
 
15
- <script lang="ts">
16
- import type { ComponentColor } from '$lib/types/colors.js';
17
- import type { ComponentRoundness } from '$lib/types/roundness.js';
18
- import type { ComponentSize } from '$lib/types/size.js';
19
- import type { ComponentWeight } from '$lib/types/weight.js';
22
+ export type ButtonClickEvent = MouseEvent & {
23
+ currentTarget: EventTarget & HTMLButtonElement;
24
+ };
20
25
 
21
- import type { Snippet } from 'svelte';
22
- import type { MouseEventHandler } from 'svelte/elements';
23
-
24
- interface ButtonProps {
26
+ export interface ButtonProps {
25
27
  /** Button contents goes here */
26
28
  children?: Snippet;
27
29
  /** Button ref */
@@ -78,7 +80,9 @@
78
80
  /** Link button: referrerpolicy */
79
81
  referrerpolicy?: ButtonLinkReferrerpolicy;
80
82
  }
83
+ </script>
81
84
 
85
+ <script lang="ts">
82
86
  let {
83
87
  children,
84
88
  type = 'button',
@@ -1,9 +1,7 @@
1
- <script lang="ts">
1
+ <script lang="ts" module>
2
2
  import type { Snippet } from 'svelte';
3
- import Label from '../Label/Label.svelte';
4
- import Message from '../Message/Message.svelte';
5
3
 
6
- interface FormControlProps {
4
+ export interface FormControlProps {
7
5
  /** FormControl contents goes here */
8
6
  children?: Snippet;
9
7
  /** Label for FormControl */
@@ -19,6 +17,11 @@
19
17
  /** Custom css class*/
20
18
  class?: string;
21
19
  }
20
+ </script>
21
+
22
+ <script lang="ts">
23
+ import Label from '../Label/Label.svelte';
24
+ import Message from '../Message/Message.svelte';
22
25
 
23
26
  let {
24
27
  children,
@@ -1,7 +1,7 @@
1
- <script lang="ts">
1
+ <script lang="ts" module>
2
2
  import type { Snippet } from 'svelte';
3
3
 
4
- interface LabelProps {
4
+ export interface LabelProps {
5
5
  /** Label contents goes here */
6
6
  children?: Snippet;
7
7
  /** Label ref */
@@ -13,7 +13,9 @@
13
13
  /** Custom css class*/
14
14
  class?: string;
15
15
  }
16
+ </script>
16
17
 
18
+ <script lang="ts">
17
19
  let {
18
20
  children,
19
21
  class: className = '',
@@ -1,11 +1,11 @@
1
- <script lang="ts">
1
+ <script lang="ts" module>
2
2
  import type { ComponentColor } from '$lib/types/colors.js';
3
3
 
4
4
  import type { ComponentSize } from '$lib/types/size.js';
5
5
 
6
6
  import type { Snippet } from 'svelte';
7
7
 
8
- interface MessageProps {
8
+ export interface MessageProps {
9
9
  /** Message contents goes here */
10
10
  children?: Snippet;
11
11
  /** Message ref */
@@ -17,7 +17,9 @@
17
17
  /** Custom css class*/
18
18
  class?: string;
19
19
  }
20
+ </script>
20
21
 
22
+ <script lang="ts">
21
23
  let {
22
24
  children,
23
25
  class: className = '',
@@ -1,11 +1,6 @@
1
1
  <script lang="ts" module>
2
- export type PasswordInputToggleEvent = {
3
- event: Event;
4
- toggle: boolean;
5
- };
6
- </script>
7
-
8
- <script lang="ts">
2
+ import type { ComponentSize } from '$lib/types/size.js';
3
+ import type { ComponentRoundness } from '$lib/types/roundness.js';
9
4
  import type { Snippet } from 'svelte';
10
5
  import type {
11
6
  ChangeEventHandler,
@@ -13,14 +8,13 @@
13
8
  FocusEventHandler,
14
9
  FormEventHandler,
15
10
  } from 'svelte/elements';
16
- import type { TextInputFocusEvent } from '../TextInput/TextInput.svelte';
17
- import Icon from '@iconify/svelte';
18
- import UtilityButton from '$lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte';
19
- import InputEnclosure from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
20
- import type { ComponentSize } from '$lib/types/size.js';
21
- import type { ComponentRoundness } from '$lib/types/roundness.js';
22
11
 
23
- interface PasswordInputProps {
12
+ export type PasswordInputToggleEvent = {
13
+ event: Event;
14
+ toggle: boolean;
15
+ };
16
+
17
+ export interface PasswordInputProps {
24
18
  /** How large should the button be? */
25
19
  size?: ComponentSize;
26
20
  /** Input ref */
@@ -72,6 +66,14 @@
72
66
  /** ontoggle event handler */
73
67
  ontoggle?: (e: PasswordInputToggleEvent) => void;
74
68
  }
69
+ </script>
70
+
71
+ <script lang="ts">
72
+ import Icon from '@iconify/svelte';
73
+ import UtilityButton from '$lib/stories/developer tools/components/UtilityButton/UtilityButton.svelte';
74
+ import InputEnclosure from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
75
+ import type { TextInputFocusEvent } from '../TextInput/TextInput.svelte';
76
+ import { DynamicInput, type DynamicInputFocusEvent } from '$lib/index.js';
75
77
 
76
78
  let {
77
79
  size = 'normal',
@@ -107,19 +109,21 @@
107
109
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
110
  let customPasswordToggleIconTyped = customPasswordToggleIcon as any;
109
111
 
110
- function onfocusMod(e: TextInputFocusEvent) {
112
+ function onfocusMod(e: DynamicInputFocusEvent) {
113
+ const eTyped = e as TextInputFocusEvent;
111
114
  focused = true;
112
115
 
113
116
  if (onfocus) {
114
- onfocus(e);
117
+ onfocus(eTyped);
115
118
  }
116
119
  }
117
120
 
118
- function onblurMod(e: TextInputFocusEvent) {
121
+ function onblurMod(e: DynamicInputFocusEvent) {
122
+ const eTyped = e as TextInputFocusEvent;
119
123
  focused = false;
120
124
 
121
125
  if (onblur) {
122
- onblur(e);
126
+ onblur(eTyped);
123
127
  }
124
128
  }
125
129
 
@@ -146,11 +150,12 @@
146
150
  class={['dodo-ui-PasswordInput', `size--${size}`, `roundness--${roundness}`, className].join(' ')}
147
151
  >
148
152
  <InputEnclosure {outline} {disabled} {error} {focused} {size} {roundness} {before} {after}>
149
- <input
153
+ <DynamicInput
150
154
  type={passwordToggle && toggle ? 'text' : 'password'}
151
155
  {name}
152
156
  {id}
153
157
  {disabled}
158
+ bind:ref
154
159
  {oninput}
155
160
  {onchange}
156
161
  onfocus={onfocusMod}
@@ -160,56 +165,50 @@
160
165
  {oncut}
161
166
  {placeholder}
162
167
  bind:value
163
- bind:this={ref}
164
168
  {readonly}
169
+ variant="input"
165
170
  />
166
171
 
167
172
  {#if passwordToggle && !disabled}
168
- <UtilityButton {size} title="Toggle password" class="passwordToggle" onclick={ontoggleMod}>
169
- {#if customPasswordToggleIcon}
170
- {@render customPasswordToggleIconTyped(toggle)}
171
- {:else if toggle}
172
- <Icon icon="mdi:eye-off" width="24" height="24" />
173
- {:else}
174
- <Icon icon="mdi:eye" width="24" height="24" />
175
- {/if}
176
- </UtilityButton>
173
+ <div class:after class="passwordToggle">
174
+ <UtilityButton {size} title="Toggle password" onclick={ontoggleMod}>
175
+ {#if customPasswordToggleIcon}
176
+ {@render customPasswordToggleIconTyped(toggle)}
177
+ {:else if toggle}
178
+ <Icon icon="mdi:eye-off" width="24" height="24" />
179
+ {:else}
180
+ <Icon icon="mdi:eye" width="24" height="24" />
181
+ {/if}
182
+ </UtilityButton>
183
+ </div>
177
184
  {/if}
178
185
  </InputEnclosure>
179
186
  </div>
180
187
 
181
188
  <style lang="scss">
182
189
  .dodo-ui-PasswordInput {
183
- input {
184
- flex: 1;
185
- border: 0;
186
- outline: 0;
187
- height: 100%;
188
- background-color: transparent;
189
- font-family: inherit;
190
- color: inherit;
191
- letter-spacing: 0.3px;
192
- }
193
-
194
190
  &.size {
195
191
  &--normal {
196
- input {
197
- font-size: 1rem;
198
- padding: 0 calc(var(--dodo-ui-space-small) * 2);
192
+ .passwordToggle {
193
+ &.after {
194
+ margin-right: calc(var(--dodo-ui-space-small) * 2);
195
+ }
199
196
  }
200
197
  }
201
198
 
202
199
  &--small {
203
- input {
204
- padding: 0 var(--dodo-ui-space);
205
- font-size: 0.9rem;
200
+ .passwordToggle {
201
+ &.after {
202
+ margin-right: var(--dodo-ui-space);
203
+ }
206
204
  }
207
205
  }
208
206
 
209
207
  &--large {
210
- input {
211
- font-size: 1.1rem;
212
- padding: 0 calc(var(--dodo-ui-space) * 2);
208
+ .passwordToggle {
209
+ &.after {
210
+ margin-right: calc(var(--dodo-ui-space) * 2);
211
+ }
213
212
  }
214
213
  }
215
214
  }