sveltekit-ui 1.1.17 → 1.1.18

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 (199) hide show
  1. package/dist/Components/Alert/index.svelte +88 -0
  2. package/dist/Components/Alert/index.svelte.js +101 -0
  3. package/dist/Components/ArrowToggle/index.svelte +62 -0
  4. package/dist/Components/Attachment/index.svelte +77 -0
  5. package/dist/Components/Attachment/index.svelte.js +119 -0
  6. package/dist/Components/Audio/index.svelte +193 -0
  7. package/dist/Components/Audio/index.svelte.js +463 -0
  8. package/dist/Components/AudioEditor/index.svelte +252 -0
  9. package/dist/Components/AudioEditor/index.svelte.js +977 -0
  10. package/dist/Components/AudioEditor/samples/alloy-voice-sample.mp3 +0 -0
  11. package/dist/Components/AudioEditor/samples/echo-voice-sample.mp3 +0 -0
  12. package/dist/Components/AudioEditor/samples/fable-voice-sample.mp3 +0 -0
  13. package/dist/Components/AudioEditor/samples/nova-voice-sample.mp3 +0 -0
  14. package/dist/Components/AudioEditor/samples/onyx-voice-sample.mp3 +0 -0
  15. package/dist/Components/AudioEditor/samples/shimmer-voice-sample.mp3 +0 -0
  16. package/dist/Components/AuthCodeInput/index.svelte +85 -0
  17. package/dist/Components/AuthCodeInput/index.svelte.js +95 -0
  18. package/dist/Components/Breadcrumbs/index.svelte +27 -0
  19. package/dist/Components/Breadcrumbs/index.svelte.js +88 -0
  20. package/dist/Components/Button/index.svelte +721 -0
  21. package/dist/Components/Button/index.svelte.js +375 -0
  22. package/dist/Components/Chart/Klines/index.svelte +87 -0
  23. package/dist/Components/Chart/index.svelte +226 -0
  24. package/dist/Components/Chart/index.svelte.js +1090 -0
  25. package/dist/Components/ChartInput/DisplayNav/Klines/index.svelte +150 -0
  26. package/dist/Components/ChartInput/DisplayNav/Lines/index.svelte +45 -0
  27. package/dist/Components/ChartInput/DisplayNav/index.svelte +297 -0
  28. package/dist/Components/ChartInput/EditPanel/index.svelte +155 -0
  29. package/dist/Components/ChartInput/index.svelte +21 -0
  30. package/dist/Components/ChartInput/index.svelte.js +671 -0
  31. package/dist/Components/Checkbox/index.svelte +411 -0
  32. package/dist/Components/Checkbox/index.svelte.js +178 -0
  33. package/dist/Components/Code/index.svelte +23 -0
  34. package/dist/Components/Code/index.svelte.js +33 -0
  35. package/dist/Components/Color/index.svelte +51 -0
  36. package/dist/Components/Color/index.svelte.js +31 -0
  37. package/dist/Components/ColorInput/ChromaPicker/index.svelte +50 -0
  38. package/dist/Components/ColorInput/ColorPalette/index.svelte +62 -0
  39. package/dist/Components/ColorInput/OpacityPicker/index.svelte +68 -0
  40. package/dist/Components/ColorInput/ShowcasePicker/index.svelte +136 -0
  41. package/dist/Components/ColorInput/index.svelte +70 -0
  42. package/dist/Components/ColorInput/index.svelte.js +386 -0
  43. package/dist/Components/ConditionsInput/index.svelte +46 -0
  44. package/dist/Components/ConditionsInput/index.svelte.js +201 -0
  45. package/dist/Components/Confetti/index.svelte +98 -0
  46. package/dist/Components/Confetti/index.svelte.js +94 -0
  47. package/dist/Components/Content/index.svelte +500 -0
  48. package/dist/Components/Content/index.svelte.js +910 -0
  49. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte +31 -0
  50. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte.js +258 -0
  51. package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte +31 -0
  52. package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte.js +258 -0
  53. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte +58 -0
  54. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte.js +206 -0
  55. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte +28 -0
  56. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte.js +224 -0
  57. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte +44 -0
  58. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte.js +272 -0
  59. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte +41 -0
  60. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte.js +202 -0
  61. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte +19 -0
  62. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte.js +117 -0
  63. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte +60 -0
  64. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte.js +542 -0
  65. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte +47 -0
  66. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte.js +185 -0
  67. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte +35 -0
  68. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte.js +222 -0
  69. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte +20 -0
  70. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte.js +84 -0
  71. package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte +25 -0
  72. package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte.js +91 -0
  73. package/dist/Components/ContentInput/AttributesInput/index.svelte +352 -0
  74. package/dist/Components/ContentInput/AttributesInput/index.svelte.js +1436 -0
  75. package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte +64 -0
  76. package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte.js +97 -0
  77. package/dist/Components/ContentInput/ContentPanelBuilder/ElementList/index.svelte +184 -0
  78. package/dist/Components/ContentInput/ContentPanelBuilder/index.svelte +41 -0
  79. package/dist/Components/ContentInput/index.svelte +78 -0
  80. package/dist/Components/ContentInput/index.svelte.js +1197 -0
  81. package/dist/Components/CronInput/index.svelte +78 -0
  82. package/dist/Components/CronInput/index.svelte.js +198 -0
  83. package/dist/Components/DataTypeInput/index.svelte +174 -0
  84. package/dist/Components/DataTypeInput/index.svelte.js +565 -0
  85. package/dist/Components/Dropdown/index.svelte +116 -0
  86. package/dist/Components/Dropdown/index.svelte.js +403 -0
  87. package/dist/Components/EmailAddress/index.svelte +22 -0
  88. package/dist/Components/EmailAddress/index.svelte.js +45 -0
  89. package/dist/Components/ErrorX/index.svelte +58 -0
  90. package/dist/Components/Eye/index.svelte +57 -0
  91. package/dist/Components/FileInput/index.svelte +146 -0
  92. package/dist/Components/FileInput/index.svelte.js +225 -0
  93. package/dist/Components/Hamburger/index.svelte +99 -0
  94. package/dist/Components/HorizScrollBox/index.svelte +145 -0
  95. package/dist/Components/Icon/index.svelte +412 -0
  96. package/dist/Components/Icon/index.svelte.js +116 -0
  97. package/dist/Components/IconInput/index.svelte +77 -0
  98. package/dist/Components/IconInput/index.svelte.js +259 -0
  99. package/dist/Components/Image/index.svelte +126 -0
  100. package/dist/Components/Image/index.svelte.js +116 -0
  101. package/dist/Components/ImageEditor/Image/CropBox/index.svelte +165 -0
  102. package/dist/Components/ImageEditor/Image/index.svelte +104 -0
  103. package/dist/Components/ImageEditor/Panels/AI/index.svelte +44 -0
  104. package/dist/Components/ImageEditor/Panels/Crop/index.svelte +96 -0
  105. package/dist/Components/ImageEditor/Panels/File/QualityPicker/index.svelte +124 -0
  106. package/dist/Components/ImageEditor/Panels/File/index.svelte +74 -0
  107. package/dist/Components/ImageEditor/Panels/Filters/index.svelte +46 -0
  108. package/dist/Components/ImageEditor/Panels/Resize/index.svelte +58 -0
  109. package/dist/Components/ImageEditor/index.svelte +93 -0
  110. package/dist/Components/ImageEditor/index.svelte.js +1961 -0
  111. package/dist/Components/ImageSlider/index.svelte +124 -0
  112. package/dist/Components/ImageSlider/index.svelte.js +99 -0
  113. package/dist/Components/InfoBox/index.svelte +89 -0
  114. package/dist/Components/Json/Nested/index.svelte +157 -0
  115. package/dist/Components/Json/index.svelte +60 -0
  116. package/dist/Components/Json/index.svelte.js +594 -0
  117. package/dist/Components/LabeledItem/index.svelte +102 -0
  118. package/dist/Components/Layout/NavBar/FullNav/index.svelte +52 -0
  119. package/dist/Components/Layout/NavBar/NavGuts/index.svelte +87 -0
  120. package/dist/Components/Layout/NavBar/index.svelte +72 -0
  121. package/dist/Components/Layout/index.svelte +149 -0
  122. package/dist/Components/Layout/index.svelte.js +360 -0
  123. package/dist/Components/Link/index.svelte +47 -0
  124. package/dist/Components/Link/index.svelte.js +136 -0
  125. package/dist/Components/LoadingSuccessDiv/index.svelte +51 -0
  126. package/dist/Components/LoadingWheel/index.svelte +38 -0
  127. package/dist/Components/Location/index.svelte +79 -0
  128. package/dist/Components/Location/index.svelte.js +288 -0
  129. package/dist/Components/LocationInput/index.svelte +197 -0
  130. package/dist/Components/LocationInput/index.svelte.js +965 -0
  131. package/dist/Components/Number/index.svelte +47 -0
  132. package/dist/Components/Number/index.svelte.js +151 -0
  133. package/dist/Components/PhoneCountryCode/index.svelte +7 -0
  134. package/dist/Components/PhoneCountryCode/index.svelte.js +260 -0
  135. package/dist/Components/PhoneNumber/index.svelte +22 -0
  136. package/dist/Components/PhoneNumber/index.svelte.js +41 -0
  137. package/dist/Components/Popover/index.svelte +396 -0
  138. package/dist/Components/Popover/index.svelte.js +319 -0
  139. package/dist/Components/Qr/index.svelte +85 -0
  140. package/dist/Components/Qr/index.svelte.js +301 -0
  141. package/dist/Components/QrInput/index.svelte +47 -0
  142. package/dist/Components/QrInput/index.svelte.js +218 -0
  143. package/dist/Components/Slider/index.svelte +239 -0
  144. package/dist/Components/Slider/index.svelte.js +469 -0
  145. package/dist/Components/Spacer/index.svelte +41 -0
  146. package/dist/Components/StoragePicker/DisplayFile/index.svelte +15 -0
  147. package/dist/Components/StoragePicker/index.svelte +187 -0
  148. package/dist/Components/StoragePicker/index.svelte.js +592 -0
  149. package/dist/Components/SuccessCheck/index.svelte +56 -0
  150. package/dist/Components/TableAdvanced/ColumnInput/index.svelte +117 -0
  151. package/dist/Components/TableAdvanced/ColumnInput/index.svelte.js +456 -0
  152. package/dist/Components/TableAdvanced/FilterInput/index.svelte +54 -0
  153. package/dist/Components/TableAdvanced/FilterInput/index.svelte.js +247 -0
  154. package/dist/Components/TableAdvanced/Pagination/index.svelte +43 -0
  155. package/dist/Components/TableAdvanced/Pagination/index.svelte.js +97 -0
  156. package/dist/Components/TableAdvanced/SortByInput/index.svelte +72 -0
  157. package/dist/Components/TableAdvanced/SortByInput/index.svelte.js +176 -0
  158. package/dist/Components/TableAdvanced/index.svelte +275 -0
  159. package/dist/Components/TableAdvanced/index.svelte.js +1565 -0
  160. package/dist/Components/Tag/index.svelte +45 -0
  161. package/dist/Components/Tag/index.svelte.js +76 -0
  162. package/dist/Components/TextArrayInput/index.svelte +108 -0
  163. package/dist/Components/TextArrayInput/index.svelte.js +239 -0
  164. package/dist/Components/TextInput/PasswordTooltip/index.svelte +89 -0
  165. package/dist/Components/TextInput/index.svelte +223 -0
  166. package/dist/Components/TextInput/index.svelte.js +447 -0
  167. package/dist/Components/Time/index.svelte +7 -0
  168. package/dist/Components/Time/index.svelte.js +38 -0
  169. package/dist/Components/TimeInput/NumberToggler/index.svelte +34 -0
  170. package/dist/Components/TimeInput/NumberToggler/index.svelte.js +79 -0
  171. package/dist/Components/TimeInput/index.js +702 -0
  172. package/dist/Components/TimeInput/index.svelte +211 -0
  173. package/dist/Components/TimeInput/index.svelte.js +638 -0
  174. package/dist/Components/Tooltip/index.svelte +143 -0
  175. package/dist/Components/TransparentBackground/index.svelte +153 -0
  176. package/dist/Components/TypingDots/index.svelte +84 -0
  177. package/dist/Components/VariablePathInput/index.svelte +63 -0
  178. package/dist/Components/VariablePathInput/index.svelte.js +273 -0
  179. package/dist/Components/VideoTBD/index.svelte +100 -0
  180. package/dist/Components/XFollow/index.svelte +42 -0
  181. package/dist/Components/XPost/index.svelte +52 -0
  182. package/dist/Components/XPost/index.svelte.js +64 -0
  183. package/dist/Components/YoutubeChannelButton/index.svelte +82 -0
  184. package/dist/Components/YoutubeVideo/index.svelte +73 -0
  185. package/dist/Components/YoutubeVideo/index.svelte.js +54 -0
  186. package/dist/actions/draggable.js +49 -0
  187. package/dist/actions/index.js +24 -0
  188. package/dist/actions/no_spaces.js +33 -0
  189. package/dist/actions/numbers_only.js +26 -0
  190. package/dist/actions/scroll_y.js +28 -0
  191. package/dist/actions/stop_scroll_propagation_y.js +42 -0
  192. package/dist/actions/swipe_handler.js +295 -0
  193. package/dist/client/astc_formatting/index.js +1128 -0
  194. package/dist/client/docs/index.js +7622 -0
  195. package/dist/client/index.js +735 -0
  196. package/dist/client/types/index.js +2812 -0
  197. package/dist/index.js +180 -0
  198. package/dist/style.css +682 -0
  199. package/package.json +1 -1
@@ -0,0 +1,45 @@
1
+ <script>
2
+ import Icon from "../Icon/index.svelte"
3
+
4
+ let { manager } = $props()
5
+ </script>
6
+
7
+ {#if manager?.tag_val}
8
+ <div style="display: flex;">
9
+ <div
10
+ class="tag"
11
+ style="
12
+ --bg_color: oklch(var(--l6-t) var(--c{manager?.tag_val?.color?.c ?? 16}) var(--h{manager?.tag_val?.color
13
+ ?.h}) / var(--o4));
14
+ --border_color: oklch(var(--l6-t) var(--c{manager?.tag_val?.color?.c ?? 16}) var(--h{manager?.tag_val?.color
15
+ ?.h}) / var(--o8));"
16
+ >
17
+ {#if manager?.tag_val?.display_text}
18
+ <p
19
+ style="color: oklch(var(--l5-t) var(--c{manager?.tag_val?.color?.c ?? 4}) var(--h{manager?.tag_val?.color
20
+ ?.h}));"
21
+ >
22
+ {manager?.tag_val?.display_text ?? ""}
23
+ </p>
24
+ {/if}
25
+ {#if manager?.tag_val?.icon}
26
+ <Icon manager={manager?.icon_manager} />
27
+ {/if}
28
+ </div>
29
+ </div>
30
+ {/if}
31
+
32
+ <style>
33
+ .tag {
34
+ display: flex;
35
+ flex: 0;
36
+ gap: 1rem;
37
+ align-items: center;
38
+ border-radius: 1rem;
39
+ border: 1px solid var(--border_color);
40
+ background-color: var(--bg_color);
41
+ font-size: 1.4rem;
42
+ min-height: 3rem;
43
+ padding: 0.1rem 0.8rem;
44
+ }
45
+ </style>
@@ -0,0 +1,76 @@
1
+ import { create_icon_manager } from "../Icon/index.svelte.js"
2
+
3
+ export function create_tag_manager(config) {
4
+ let val = $state(null)
5
+ let is_dynamic = $state(false)
6
+ let tag_options = $state(null)
7
+ let data_type = $state(null)
8
+ let icon_manager = $state(null)
9
+
10
+ let tag_val = $derived(get_tag_val())
11
+
12
+ function set_tag_options(input) {
13
+ let tag_options_loc = []
14
+ if (Array.isArray(input)) {
15
+ for (let tag_option_input of input) {
16
+ tag_options_loc.push({
17
+ ...tag_option_input, // can fix to clean later
18
+ })
19
+ }
20
+ }
21
+ tag_options = tag_options_loc
22
+ }
23
+
24
+ function set_val(input) {
25
+ val = input
26
+ }
27
+
28
+ function get_tag_val() {
29
+ if (!is_dynamic) {
30
+ return val
31
+ }
32
+ if (Array.isArray(tag_options)) {
33
+ for (let tag_option of tag_options) {
34
+ if (is_match(tag_option?.match_for, val)) {
35
+ return tag_option
36
+ }
37
+ }
38
+ }
39
+ return null
40
+ }
41
+
42
+ function init(config) {
43
+ val = config?.val
44
+ data_type = config?.data_type
45
+ is_dynamic = !!config?.is_dynamic
46
+ icon_manager = create_icon_manager({
47
+ icon_id: () => tag_val?.icon,
48
+ color: "oklch(var(--l10-t) var(--c{manager?.tag_val?.color?.c ?? 11}) var(--h{manager?.tag_val?.color?.h}))",
49
+ size: 1.6,
50
+ sw: 50,
51
+ })
52
+ set_tag_options(config?.tag_options)
53
+ }
54
+ init(config)
55
+
56
+ return {
57
+ get val() {
58
+ return val
59
+ },
60
+ get tag_val() {
61
+ return tag_val
62
+ },
63
+ get tag_options() {
64
+ return tag_options
65
+ },
66
+ get data_type() {
67
+ return data_type
68
+ },
69
+ get icon_manager() {
70
+ return icon_manager
71
+ },
72
+ init,
73
+ set_tag_options,
74
+ set_val,
75
+ }
76
+ }
@@ -0,0 +1,108 @@
1
+ <script>
2
+ import Button from "../Button/index.svelte"
3
+ import Popover from "../Popover/index.svelte"
4
+ import TextInput from "../TextInput/index.svelte"
5
+
6
+ let { manager } = $props()
7
+ </script>
8
+
9
+ {#snippet text_array_input()}
10
+ {#if manager?.label || manager?.error_message}
11
+ <div>
12
+ {#if manager?.label}
13
+ <p class="label">{manager?.label}:</p>
14
+ {/if}
15
+ {#if manager?.error_message}
16
+ <p class="error_text">{manager?.error_message}</p>
17
+ {/if}
18
+ </div>
19
+ {/if}
20
+ <div
21
+ style="margin-left: {manager?.ml}rem; margin-right: {manager?.mr}rem; margin-top: {manager?.mt}rem; margin-bottom: {manager?.mb}rem; --br: {manager?.border_radius}rem;"
22
+ >
23
+ <div class="input_container">
24
+ <TextInput manager={manager?.input_text_manager} />
25
+ <div class="plus">
26
+ <Button manager={manager?.add_button_manager} />
27
+ </div>
28
+ </div>
29
+ {#if Array.isArray(manager?.val) && manager?.val.length > 0}
30
+ <div class="list_items_container">
31
+ {#each manager?.val as item, i}
32
+ <div class="list_item">
33
+ <div class="display_item" class:is_disabled={manager?.is_disabled}>
34
+ <p>{item}</p>
35
+ </div>
36
+ <div style="display: flex; flex-wrap: 1; margin-left: .5rem; margin-right: .3rem; gap: .5rem;">
37
+ {#if i > 0}
38
+ <Button manager={manager?.val_prepped?.[i]?.left_button_manager} />
39
+ {/if}
40
+ {#if i < manager?.val?.length - 1}
41
+ <Button manager={manager?.val_prepped?.[i]?.right_button_manager} />
42
+ {/if}
43
+ <Button manager={manager?.val_prepped?.[i]?.delete_button_manager} />
44
+ </div>
45
+ </div>
46
+ {/each}
47
+ </div>
48
+ {/if}
49
+ </div>
50
+ {/snippet}
51
+
52
+ {#if !manager?.is_popover}
53
+ {@render text_array_input()}
54
+ {:else}
55
+ <Popover manager={manager.popover_manager}>
56
+ {#snippet content()}
57
+ {@render text_array_input()}
58
+ {/snippet}
59
+ {#snippet footer()}
60
+ <Button manager={manager?.finish_button_manager} />
61
+ {/snippet}
62
+ </Popover>
63
+ {/if}
64
+
65
+ <style>
66
+ .input_container {
67
+ position: relative;
68
+ display: flex;
69
+ flex-direction: column;
70
+ }
71
+ .is_disabled {
72
+ color: var(--g12-t);
73
+ }
74
+ .plus {
75
+ position: absolute;
76
+ top: 50%;
77
+ right: 1rem;
78
+ transform: translateY(-50%);
79
+ user-select: none;
80
+ height: 1.5rem;
81
+ width: 1.5rem;
82
+ z-index: 2;
83
+ display: flex;
84
+ justify-content: center;
85
+ align-items: center;
86
+ }
87
+ .list_items_container {
88
+ display: flex;
89
+ flex-wrap: wrap;
90
+ gap: 0.5rem;
91
+ margin-top: .6rem;
92
+ }
93
+ .list_item {
94
+ display: flex;
95
+ align-items: center;
96
+ border: 2px solid var(--shadow2-t);
97
+ border-radius: var(--br);
98
+ background-color: var(--shadow2-t);
99
+ justify-content: space-between;
100
+ padding: 0.2rem 0 0.2rem 1rem;
101
+ }
102
+ .display_item {
103
+ max-width: 100%;
104
+ overflow: scroll;
105
+ word-wrap: break-word;
106
+ text-align: start;
107
+ }
108
+ </style>
@@ -0,0 +1,239 @@
1
+ import { create_unique_id, set_closurable } from "../../client/index.js"
2
+ import { create_text_input_manager } from "../TextInput/index.svelte.js"
3
+ import { create_button_manager } from "../Button/index.svelte.js"
4
+ import { create_popover_manager } from "../Popover/index.svelte.js"
5
+
6
+ export function create_text_array_input_manager(config) {
7
+ let id = create_unique_id(null, 20)
8
+ let val = $state(null)
9
+ let input_text_manager = $state(null)
10
+ let add_button_manager = $state(null)
11
+ let val_prepped = $state(null)
12
+
13
+ let ml = $derived(set_closurable(config?.ml, 0))
14
+ let mr = $derived(set_closurable(config?.mr, 0))
15
+ let mt = $derived(set_closurable(config?.mt, 0))
16
+ let mb = $derived(set_closurable(config?.mb, 0))
17
+ let name = $derived(set_closurable(config?.name, "textarray"))
18
+ let border_radius = $derived(set_closurable(config?.border_radius, 1))
19
+ let is_no_spaces = $derived(set_closurable(config?.is_no_spaces, false))
20
+ let max_length = $derived(set_closurable(config?.max_length, 255))
21
+ let is_disabled = $derived(set_closurable(config?.is_disabled, null))
22
+ let label = $derived(set_closurable(config?.label, null))
23
+ let placeholder = $derived(set_closurable(config?.placeholder, null))
24
+ let header = $derived(set_closurable(config?.header, "Text Array Input"))
25
+ let is_popover = $derived(set_closurable(config?.is_popover, false))
26
+ let popover_manager = $state(null)
27
+ let finish_button_manager = $state(null)
28
+
29
+ function set_val_prepped() {
30
+ let val_prepped_loc = []
31
+ if (Array.isArray(val)) {
32
+ for (let i = 0; i < val.length; i++) {
33
+ let left_button_manager = create_button_manager({
34
+ type: "outlined",
35
+ is_uniform: true,
36
+ support_icon: "arrow",
37
+ icon_deg: 270,
38
+ l: 6,
39
+ c: 1,
40
+ min_height: 2.6,
41
+ border_radius: 0.8,
42
+ is_disabled: () => is_disabled,
43
+ on_click: () => shift_item(i, -1),
44
+ })
45
+ let right_button_manager = create_button_manager({
46
+ type: "outlined",
47
+ is_uniform: true,
48
+ support_icon: "arrow",
49
+ icon_deg: 90,
50
+ l: 6,
51
+ c: 1,
52
+ min_height: 2.6,
53
+ border_radius: 0.8,
54
+ is_disabled: () => is_disabled,
55
+ on_click: () => shift_item(i, 1),
56
+ })
57
+ let delete_button_manager = create_button_manager({
58
+ type: "outlined",
59
+ is_uniform: true,
60
+ support_icon: "x",
61
+ l: 6,
62
+ c: 1,
63
+ min_height: 2.6,
64
+ border_radius: 0.8,
65
+ is_disabled: () => is_disabled,
66
+ on_click: () => delete_item(i),
67
+ })
68
+ val_prepped_loc.push({
69
+ left_button_manager: left_button_manager,
70
+ right_button_manager: right_button_manager,
71
+ delete_button_manager: delete_button_manager,
72
+ })
73
+ }
74
+ }
75
+ val_prepped = val_prepped_loc
76
+ }
77
+
78
+ function add_item() {
79
+ if (!is_disabled) {
80
+ if (input_text_manager?.val) {
81
+ if (!Array.isArray(val)) {
82
+ val = [input_text_manager?.val]
83
+ } else {
84
+ val.push(input_text_manager?.val)
85
+ }
86
+ set_val_prepped()
87
+ input_text_manager.set_val("")
88
+ input_text_manager.set_focus()
89
+ }
90
+ if (config?.on_change) {
91
+ config?.on_change(val)
92
+ }
93
+ }
94
+ }
95
+
96
+ function delete_item(index) {
97
+ if (!is_disabled) {
98
+ if (!Array.isArray(val)) {
99
+ val = null
100
+ } else {
101
+ val.splice(index, 1)
102
+ }
103
+ set_val_prepped()
104
+ if (config?.on_change) {
105
+ config?.on_change(val)
106
+ }
107
+ }
108
+ }
109
+ function shift_item(index, shift_by) {
110
+ if (!is_disabled && Array.isArray(val) && index < val.length && !isNaN(shift_by)) {
111
+ let new_index = index + shift_by
112
+ if (shift_by < 0) {
113
+ if (new_index < 0) {
114
+ new_index = 0
115
+ }
116
+ } else {
117
+ if (new_index >= val.length) {
118
+ new_index = val.length - 1
119
+ }
120
+ }
121
+ const item = val.splice(index, 1)[0]
122
+ val.splice(new_index, 0, item)
123
+ set_val_prepped()
124
+ if (config?.on_change) {
125
+ config.on_change(val)
126
+ }
127
+ }
128
+ }
129
+
130
+ function set_val(input) {
131
+ val = input
132
+ set_val_prepped()
133
+ }
134
+
135
+ function finish() {
136
+ popover_manager.close()
137
+ if (typeof config?.on_finish == "function") {
138
+ config?.on_finish(val)
139
+ }
140
+ }
141
+
142
+ function init(config) {
143
+ val = config?.val ?? null
144
+ input_text_manager = create_text_input_manager({
145
+ placeholder: () => placeholder,
146
+ is_no_spaces: () => is_no_spaces,
147
+ })
148
+ add_button_manager = create_button_manager({
149
+ type: "outlined",
150
+ is_uniform: true,
151
+ support_icon: "plus",
152
+ l: 6,
153
+ c: 1,
154
+ min_height: 2.6,
155
+ mr: 0,
156
+ border_radius: 0.8,
157
+ is_disabled: () => is_disabled || !input_text_manager?.val || input_text_manager?.val.length < 1,
158
+ on_click: () => add_item(),
159
+ })
160
+ popover_manager = create_popover_manager({
161
+ header: () => header,
162
+ min_width: 280,
163
+ target_width: 600,
164
+ min_height: 250,
165
+ target_height: 600,
166
+ type: "center",
167
+ })
168
+ finish_button_manager = create_button_manager({
169
+ text: "Finish",
170
+ mt: 1,
171
+ on_click: () => finish(),
172
+ })
173
+ set_val_prepped()
174
+ }
175
+
176
+ init(config)
177
+
178
+ return {
179
+ id,
180
+ get val() {
181
+ return val
182
+ },
183
+ get name() {
184
+ return name
185
+ },
186
+ get label() {
187
+ return label
188
+ },
189
+ get placeholder() {
190
+ return placeholder
191
+ },
192
+ get is_no_spaces() {
193
+ return is_no_spaces
194
+ },
195
+ get max_length() {
196
+ return max_length
197
+ },
198
+ get is_disabled() {
199
+ return is_disabled
200
+ },
201
+ get border_radius() {
202
+ return border_radius
203
+ },
204
+ get ml() {
205
+ return ml
206
+ },
207
+ get mr() {
208
+ return mr
209
+ },
210
+ get mt() {
211
+ return mt
212
+ },
213
+ get mb() {
214
+ return mb
215
+ },
216
+ get input_text_manager() {
217
+ return input_text_manager
218
+ },
219
+ get add_button_manager() {
220
+ return add_button_manager
221
+ },
222
+ get val_prepped() {
223
+ return val_prepped
224
+ },
225
+ get is_popover() {
226
+ return is_popover
227
+ },
228
+ get popover_manager() {
229
+ return popover_manager
230
+ },
231
+ get finish_button_manager() {
232
+ return finish_button_manager
233
+ },
234
+ add_item,
235
+ delete_item,
236
+ shift_item,
237
+ set_val,
238
+ }
239
+ }
@@ -0,0 +1,89 @@
1
+ <script>
2
+ let {
3
+ password_min_length = null,
4
+ is_password_requires_lowercase = false,
5
+ is_password_requires_uppercase = false,
6
+ is_password_requires_number = false,
7
+ is_password_requires_special_char = false,
8
+ val = null,
9
+ } = $props()
10
+
11
+ let contains_lowercase_letter = $derived(val ? val.toUpperCase() != val : false)
12
+ let contains_uppercase_letter = $derived(val ? val.toLowerCase() != val : false)
13
+ let contains_number = $derived(val ? /[0-9]/.test(val) : false)
14
+ let contains_special_char = $derived(val ? /[!-\/:-@[-`{-~]/.test(val) : false)
15
+ let is_password_long_enough = $derived(val ? val.length > password_min_length : false)
16
+
17
+ let is_password_standard_met = $derived(
18
+ (!is_password_requires_lowercase || (is_password_requires_lowercase && contains_lowercase_letter)) &&
19
+ (!is_password_requires_uppercase || (is_password_requires_uppercase && contains_uppercase_letter)) &&
20
+ (!is_password_requires_special_char || (is_password_requires_special_char && contains_special_char)) &&
21
+ (!is_password_requires_number || (is_password_requires_number && contains_number)) &&
22
+ is_password_long_enough
23
+ )
24
+
25
+ let is_show_password_tip = $derived(val ? val.length > 0 && !is_password_standard_met : false)
26
+ </script>
27
+
28
+ {#snippet check_x(is_check)}
29
+ <div class="icon_frame" style="--color1: var(--primary-t); --color2: var(--g6-t);">
30
+ {#if is_check}
31
+ <svg id="check" class="svg_cover" data-name="check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
32
+ <path fill="none" stroke="var(--color1)" stroke-width="75" d="M432.4 116.9L177.5 371.7l-104-104" />
33
+ </svg>
34
+ {:else}
35
+ <svg id="x" class="svg_cover" data-name="x" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
36
+ <path fill="none" stroke="var(--color2)" stroke-width="75" d="M75 437L437 75M75 75l362 362" />
37
+ </svg>
38
+ {/if}
39
+ </div>
40
+ {/snippet}
41
+
42
+ {#if is_show_password_tip}
43
+ <div class="password_guide">
44
+ <div class="check_container">
45
+ {@render check_x(contains_lowercase_letter)}
46
+ <p class="label">Lowercase Letter</p>
47
+ </div>
48
+ <div class="check_container">
49
+ {@render check_x(contains_uppercase_letter)}
50
+ <p class="label">Uppercase Letter</p>
51
+ </div>
52
+ <div class="check_container">
53
+ {@render check_x(contains_number)}
54
+ <p class="label">Number</p>
55
+ </div>
56
+ <div class="check_container">
57
+ {@render check_x(contains_special_char)}
58
+ <p class="label">Special Character</p>
59
+ </div>
60
+ <div class="check_container">
61
+ {@render check_x(is_password_long_enough)}
62
+ <p class="label">8 characters or more</p>
63
+ </div>
64
+ </div>
65
+ {/if}
66
+
67
+ <style>
68
+ .password_guide {
69
+ margin-left: 0.5rem;
70
+ }
71
+ .check_container {
72
+ display: flex;
73
+ align-items: center;
74
+ }
75
+ .label {
76
+ margin-left: 0.3rem;
77
+ font-size: 1.4rem;
78
+ line-height: 1.6rem;
79
+ }
80
+ .icon_frame {
81
+ width: 1.1rem;
82
+ height: 1.1rem;
83
+ display: flex;
84
+ align-items: center;
85
+ }
86
+ .svg_cover {
87
+ width: 100%;
88
+ }
89
+ </style>