sveltekit-ui 1.1.17 → 1.1.19

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 (200) 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 +1099 -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 +2 -2
  200. package/src/lib/Components/Chart/index.svelte.js +11 -2
@@ -0,0 +1,403 @@
1
+ import { create_unique_id, set_closurable, set_closurable_color } from "../../client/index.js"
2
+ import { create_button_manager } from "../Button/index.svelte.js"
3
+ import { create_popover_manager } from "../Popover/index.svelte.js"
4
+ import { create_text_input_manager } from "../TextInput/index.svelte.js"
5
+ import { create_icon_manager } from "../Icon/index.svelte.js"
6
+
7
+ export function create_dropdown_manager(config) {
8
+ const id = create_unique_id(null, 20)
9
+ let val = $state(null)
10
+ let options = $state(null)
11
+
12
+ let label = $derived(set_closurable(config?.label, null))
13
+ let type = $derived(set_closurable(config?.type, "dropdown")) // dropdown, horiz_selector
14
+ let is_collapsed = $derived(set_closurable(config?.is_collapsed, false))
15
+ let val_key = $derived(set_closurable(config?.val_key, "key"))
16
+ let row_display_keys = $derived(set_closurable(config?.row_display_keys, ["name"]))
17
+ let button_display_keys = $derived(set_closurable(config?.button_display_keys, ["name"]))
18
+ let is_multiselect = $derived(set_closurable(config?.is_multiselect, false))
19
+ let is_set_null_button = $derived(set_closurable(config?.is_set_null_button, false))
20
+ let is_disabled = $derived(set_closurable(config?.is_disabled, false))
21
+ let header = $derived(set_closurable(config?.header, null))
22
+ let header_icon = $derived(set_closurable(config?.header_icon, null))
23
+ let header_icon_deg = $derived(set_closurable(config?.header_icon_deg, 0))
24
+ let min_header_width = $derived(set_closurable(config?.min_header_width, 2))
25
+ let spacer_color = $derived(set_closurable_color(config?.spacer_color, "var(--shadow2-t)"))
26
+ let error_message = $derived(set_closurable(config?.error_message, null))
27
+ let placeholder = $derived(set_closurable(config?.placeholder, "Select"))
28
+ let target_width = $derived(set_closurable(config?.target_width, 250))
29
+ let target_height = $derived(set_closurable(config?.target_height, 200))
30
+ let font_weight = $derived(set_closurable(config?.font_weight, 500))
31
+ let font_size = $derived(set_closurable(config?.font_size, 1.2))
32
+ let is_show_x = $derived(set_closurable(config?.is_show_x, false))
33
+ let text_align = $derived(set_closurable(config?.text_align, "left"))
34
+ let justify_content = $derived(set_closurable(config?.justify_content, "space-between"))
35
+ let is_show_arrow = $derived(set_closurable(config?.is_show_arrow, true))
36
+ let button_type = $derived(set_closurable(config?.button_type, "outlined"))
37
+ let selected_font_size = $derived(set_closurable(config?.selected_font_size, null))
38
+ let is_button_compressed = $derived(set_closurable(config?.is_button_compressed, false))
39
+ let is_searchable = $derived(set_closurable(config?.is_searchable, false))
40
+ let is_hide_button = $derived(set_closurable(config?.is_hide_button, false))
41
+ let anchor_id = $derived(set_closurable(config?.anchor_id, null))
42
+ let ml = $derived(set_closurable(config?.ml, 0))
43
+ let mr = $derived(set_closurable(config?.mr, 0))
44
+ let mt = $derived(set_closurable(config?.mt, 0))
45
+ let mb = $derived(set_closurable(config?.mb, 0))
46
+ let item_mb = $derived(set_closurable(config?.item_mb, 0))
47
+
48
+ let filtered_button_managers = $state(null)
49
+ let search_text_input_manager = $state(null)
50
+ let popover_manager = $state(null)
51
+ let toggle_button_manager = $state(null)
52
+ let clear_button_manager = $state(null)
53
+ let toggle_button_text = $derived(get_button_text())
54
+ let header_icon_manager = $state(null)
55
+ let search_requests_is_loading = $state([])
56
+
57
+ function set_filtered_button_managers(search_val = null) {
58
+ let filtered_button_managers_loc = []
59
+ if (Array.isArray(options) && options.length > 0) {
60
+ for (let option of options) {
61
+ if (
62
+ [null, ""].includes(search_val) ||
63
+ (option?.[val_key] && option?.[val_key].length > 0 && search_val && option?.[val_key].includes(search_val)) ||
64
+ row_display_keys.some((h) => option?.[h].includes(search_val))
65
+ ) {
66
+ filtered_button_managers_loc.push(
67
+ create_button_manager({
68
+ type: "soft",
69
+ selected_type: () =>
70
+ val != null &&
71
+ (option?.[val_key] == val || (Array.isArray(val) && val.some((h) => h === option?.[val_key])))
72
+ ? "half_selected"
73
+ : null,
74
+ text: Array.isArray(row_display_keys) ? row_display_keys.map((h) => option?.[h]).join(" ") : option?.name,
75
+ text_align: text_align,
76
+ font_size: font_size,
77
+ font_weight: font_weight,
78
+ is_compressed: type == "horiz_selector",
79
+ is_no_wrap: type == "horiz_selector",
80
+ mb: item_mb,
81
+ l: 2,
82
+ c: 1,
83
+ on_click: () => item_clicked(option),
84
+ })
85
+ )
86
+ }
87
+ }
88
+ }
89
+ filtered_button_managers = filtered_button_managers_loc
90
+ }
91
+
92
+ function set_val(input) {
93
+ val = set_closurable(input)
94
+ }
95
+
96
+ function get_button_text() {
97
+ let button_text_loc = placeholder ?? "Select"
98
+ if (!is_multiselect && val !== "" && val !== null && val !== undefined && options && options.length > 0) {
99
+ const i = options.findIndex((h) => h?.[val_key] == val)
100
+ button_text_loc =
101
+ i > -1 && options && options[i]
102
+ ? Array.isArray(button_display_keys)
103
+ ? button_display_keys.map((h) => options[i][h] ?? "").join(" ")
104
+ : val
105
+ : val
106
+ } else if (is_multiselect && val && Array.isArray(val) && val.length > 0) {
107
+ const i = options.findIndex((h) => h?.[val_key] == val?.[0])
108
+ button_text_loc =
109
+ i > -1 && options && options[i]
110
+ ? Array.isArray(button_display_keys)
111
+ ? button_display_keys.map((h) => options[i][h] ?? "").join(" ")
112
+ : val
113
+ : val
114
+ if (val.length > 1) {
115
+ button_text_loc = `${button_text_loc} and ${val.length - 1} more`
116
+ }
117
+ } else if (Array.isArray(val)) {
118
+ button_text_loc = `${val.length} items`
119
+ } else if (val) {
120
+ button_text_loc = val
121
+ }
122
+ return button_text_loc
123
+ }
124
+
125
+ function item_clicked(item) {
126
+ if (item == null || item?.[val_key] == null) {
127
+ val = null
128
+ } else if (is_multiselect) {
129
+ if (Array.isArray(val)) {
130
+ if (val.some((h) => h == item?.[val_key])) {
131
+ val = [...val].filter((h) => h != item?.[val_key])
132
+ } else {
133
+ val = [...val, item?.[val_key]]
134
+ }
135
+ } else {
136
+ val = [item?.[val_key]]
137
+ }
138
+ } else {
139
+ if (val == item?.[val_key]) {
140
+ val = null
141
+ } else {
142
+ val = item?.[val_key]
143
+ popover_manager.close()
144
+ }
145
+ }
146
+ if (config?.on_item_click) {
147
+ config?.on_item_click(
148
+ item
149
+ ? {
150
+ ...item,
151
+ }
152
+ : null
153
+ )
154
+ }
155
+ if (config?.on_change) {
156
+ config?.on_change(val)
157
+ }
158
+ }
159
+
160
+ function handle_dropdown_opened() {
161
+ if (config?.on_dropdown_opened) {
162
+ config?.on_dropdown_opened()
163
+ }
164
+ }
165
+
166
+ function handle_dropdown_closed() {
167
+ if (config?.on_dropdown_closed) {
168
+ config?.on_dropdown_closed()
169
+ }
170
+ }
171
+
172
+ function set_options(input) {
173
+ let clean_options = []
174
+ if (Array.isArray(input)) {
175
+ for (let option of input) {
176
+ if (typeof option == "object") {
177
+ const name = Array.isArray(button_display_keys)
178
+ ? button_display_keys.map((h) => option?.[h] ?? "").join(" ")
179
+ : option?.name ?? option?.[val_key]
180
+ clean_options.push({ key: option?.[val_key], name: name })
181
+ } else {
182
+ clean_options.push({ key: option, name: String(option) })
183
+ }
184
+ }
185
+ }
186
+ options = clean_options
187
+ set_filtered_button_managers()
188
+ }
189
+
190
+ async function get_db_search_results(input) {
191
+ if (typeof config?.on_search == "function") {
192
+ const id = create_unique_id(null, 20)
193
+ search_requests_is_loading.push(id)
194
+ const res = await config?.on_search({ input: input ?? null, id })
195
+ if (search_requests_is_loading.includes(id)) {
196
+ const id_index = search_requests_is_loading.indexOf(id)
197
+ search_requests_is_loading = search_requests_is_loading.slice(id_index + 1)
198
+ set_options(res?.options || [])
199
+ }
200
+ }
201
+ }
202
+
203
+ function init(config) {
204
+ val = set_closurable(config?.val ?? null)
205
+ search_text_input_manager = create_text_input_manager({
206
+ type: "search",
207
+ on_change: (input) => {
208
+ if (typeof config?.on_search == "function") {
209
+ get_db_search_results(input)
210
+ } else {
211
+ set_filtered_button_managers(input)
212
+ }
213
+ },
214
+ })
215
+ popover_manager = create_popover_manager({
216
+ type: "dropdown",
217
+ header: () => header,
218
+ target_width: () => target_width,
219
+ target_height: () => target_height,
220
+ is_show_x: () => is_show_x,
221
+ is_disabled: () => is_disabled,
222
+ on_open: handle_dropdown_opened,
223
+ on_close: handle_dropdown_closed,
224
+ anchor_id: () => anchor_id ?? `button_${toggle_button_manager?.id}`,
225
+ })
226
+ toggle_button_manager = create_button_manager({
227
+ type: button_type,
228
+ mt: mt,
229
+ mr: mr,
230
+ mb: mb,
231
+ ml: ml,
232
+ is_compressed: () => is_button_compressed,
233
+ is_disabled: () => is_disabled,
234
+ is_collapsed: () => is_collapsed,
235
+ popover_target: () => `popover_${popover_manager?.id}`,
236
+ })
237
+ clear_button_manager = create_button_manager({
238
+ type: "soft",
239
+ text: "Set to null",
240
+ text_align: text_align,
241
+ font_size: font_size,
242
+ font_weight: font_weight,
243
+ mb: item_mb,
244
+ is_disabled: () => val == null || (Array.isArray(val) && val.length < 1),
245
+ is_compressed: type == "horiz_selector",
246
+ is_no_wrap: type == "horiz_selector",
247
+ on_click: () => item_clicked(null),
248
+ })
249
+ header_icon_manager = create_icon_manager({
250
+ icon_id: () => header_icon,
251
+ deg: () => header_icon_deg,
252
+ sw: 30,
253
+ size: 2,
254
+ mr: 0.5,
255
+ })
256
+ set_options(config?.options)
257
+ if (typeof config?.on_search == "function") {
258
+ get_db_search_results(null)
259
+ }
260
+ }
261
+
262
+ init(config)
263
+
264
+ return {
265
+ id,
266
+ get type() {
267
+ return type
268
+ },
269
+ get is_collapsed() {
270
+ return is_collapsed
271
+ },
272
+ get val() {
273
+ return val
274
+ },
275
+ get val_key() {
276
+ return val_key
277
+ },
278
+ get row_display_keys() {
279
+ return row_display_keys
280
+ },
281
+ get button_display_keys() {
282
+ return button_display_keys
283
+ },
284
+ get options() {
285
+ return options
286
+ },
287
+ get is_multiselect() {
288
+ return is_multiselect
289
+ },
290
+ get is_set_null_button() {
291
+ return is_set_null_button
292
+ },
293
+ get is_disabled() {
294
+ return is_disabled
295
+ },
296
+ get header() {
297
+ return header
298
+ },
299
+ get header_icon() {
300
+ return header_icon
301
+ },
302
+ get header_icon_deg() {
303
+ return header_icon_deg
304
+ },
305
+ get min_header_width() {
306
+ return min_header_width
307
+ },
308
+ get spacer_color() {
309
+ return spacer_color
310
+ },
311
+ get label() {
312
+ return label
313
+ },
314
+ get error_message() {
315
+ return error_message
316
+ },
317
+ get placeholder() {
318
+ return placeholder
319
+ },
320
+ get target_width() {
321
+ return target_width
322
+ },
323
+ get target_height() {
324
+ return target_height
325
+ },
326
+ get font_weight() {
327
+ return font_weight
328
+ },
329
+ get font_size() {
330
+ return font_size
331
+ },
332
+ get is_show_x() {
333
+ return is_show_x
334
+ },
335
+ get text_align() {
336
+ return text_align
337
+ },
338
+ get justify_content() {
339
+ return justify_content
340
+ },
341
+ get is_show_arrow() {
342
+ return is_show_arrow
343
+ },
344
+ get button_type() {
345
+ return button_type
346
+ },
347
+ get selected_font_size() {
348
+ return selected_font_size
349
+ },
350
+ get is_button_compressed() {
351
+ return is_button_compressed
352
+ },
353
+ get is_searchable() {
354
+ return is_searchable
355
+ },
356
+ get is_hide_button() {
357
+ return is_hide_button
358
+ },
359
+ get item_mb() {
360
+ return item_mb
361
+ },
362
+ get ml() {
363
+ return ml
364
+ },
365
+ get mr() {
366
+ return mr
367
+ },
368
+ get mb() {
369
+ return mb
370
+ },
371
+ get mt() {
372
+ return mt
373
+ },
374
+ get search_text_input_manager() {
375
+ return search_text_input_manager
376
+ },
377
+ get filtered_button_managers() {
378
+ return filtered_button_managers
379
+ },
380
+ get popover_manager() {
381
+ return popover_manager
382
+ },
383
+ get toggle_button_manager() {
384
+ return toggle_button_manager
385
+ },
386
+ get toggle_button_text() {
387
+ return toggle_button_text
388
+ },
389
+ get clear_button_manager() {
390
+ return clear_button_manager
391
+ },
392
+ get header_icon_manager() {
393
+ return header_icon_manager
394
+ },
395
+ get search_requests_is_loading() {
396
+ return search_requests_is_loading
397
+ },
398
+ init,
399
+ item_clicked,
400
+ set_val,
401
+ set_options,
402
+ }
403
+ }
@@ -0,0 +1,22 @@
1
+ <script>
2
+ import Button from "../Button/index.svelte"
3
+
4
+ let { manager } = $props()
5
+ </script>
6
+
7
+ <div class="container">
8
+ <p class="email_field">{manager?.val}</p>
9
+ <Button manager={manager?.copy_button_manager} />
10
+ <Button manager={manager?.mail_to_button_manager} />
11
+ </div>
12
+
13
+ <style>
14
+ .container {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 0.5rem;
18
+ }
19
+ .email_field {
20
+ text-transform: lowercase;
21
+ }
22
+ </style>
@@ -0,0 +1,45 @@
1
+ import { create_button_manager } from "../Button/index.svelte.js"
2
+ import { copy_to_clipboard, set_closurable } from "../../client/index.js"
3
+
4
+ export function create_email_address_manager(config) {
5
+ let val = $derived(set_closurable(config?.val, null))
6
+
7
+ let copy_button_manager = create_button_manager({
8
+ type: "soft",
9
+ is_uniform: true,
10
+ support_icon: "copy",
11
+ icon_size: 1.5,
12
+ on_click: () => copy_to_clipboard(val),
13
+ })
14
+
15
+ let mail_to_button_manager = create_button_manager({
16
+ type: "soft",
17
+ is_uniform: true,
18
+ support_icon: "link",
19
+ icon_size: 1.5,
20
+ on_click: () => mailto(val),
21
+ })
22
+
23
+ let is_valid = $derived(
24
+ val
25
+ ? /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
26
+ val.toLowerCase()
27
+ )
28
+ : false
29
+ )
30
+
31
+ function mailto() {
32
+ window.open("mailto:" + val, "_self")
33
+ }
34
+
35
+ return {
36
+ get val() {
37
+ return val
38
+ },
39
+ get is_valid() {
40
+ return is_valid
41
+ },
42
+ copy_button_manager,
43
+ mail_to_button_manager,
44
+ }
45
+ }
@@ -0,0 +1,58 @@
1
+ <script>
2
+ let { is_show = true, color = "var(--error-t)", sw = 30 } = $props()
3
+ </script>
4
+
5
+ {#if is_show}
6
+ <svg
7
+ class="error_x"
8
+ style="--color: {color}; --sw: {sw}"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ viewBox="0 0 512 512"
11
+ fill="none"
12
+ stroke-linecap="round"
13
+ stroke-linejoin="round"
14
+ >
15
+ <circle class="error_x_circle" cx="256" cy="256" r="196.16" />
16
+ <line class="error_x" x1="328.5" y1="183.5" x2="183.5" y2="328.5" />
17
+ <line class="error_x" x2="328.5" y2="328.5" x1="183.5" y1="183.5" />
18
+ </svg>
19
+ {/if}
20
+
21
+ <style>
22
+ .error_x {
23
+ width: 100%;
24
+ height: 100%;
25
+ border-radius: 50%;
26
+ stroke-width: var(--sw);
27
+ stroke: var(--color);
28
+ stroke-miterlimit: 10;
29
+ animation:
30
+ ease-in-out 0.1s forwards,
31
+ scale 0.1s ease-in-out 0.1s both;
32
+ }
33
+ .error_x_circle {
34
+ stroke-dasharray: 1250;
35
+ stroke-dashoffset: 1250;
36
+ animation: stroke 0.1s cubic-bezier(0.65, 0, 0.45, 1) forwards;
37
+ }
38
+ .error_x {
39
+ stroke-dasharray: 250;
40
+ stroke-dashoffset: 250;
41
+ animation: stroke 0.1s cubic-bezier(0.65, 0, 0.45, 1) 0.1s forwards;
42
+ }
43
+
44
+ @keyframes stroke {
45
+ 100% {
46
+ stroke-dashoffset: 0;
47
+ }
48
+ }
49
+ @keyframes scale {
50
+ 0%,
51
+ 100% {
52
+ transform: none;
53
+ }
54
+ 50% {
55
+ transform: scale3d(1.1, 1.1, 1);
56
+ }
57
+ }
58
+ </style>
@@ -0,0 +1,57 @@
1
+ <script>
2
+ let { is_eye_shown = false, is_bind_val = false, eye_color = "var(--g6-t)", sw = 30, on_change } = $props()
3
+
4
+ function handle_click(change_to) {
5
+ if (is_bind_val) {
6
+ is_eye_shown = change_to
7
+ }
8
+ on_change(change_to)
9
+ }
10
+ </script>
11
+
12
+ <div
13
+ class="icon_frame"
14
+ role="button"
15
+ tabindex="0"
16
+ onclick={() => handle_click(!is_eye_shown)}
17
+ onkeydown={(event) => {
18
+ if (event.key === "Enter" || event.key === " ") {
19
+ handle_click(!is_eye_shown)
20
+ }
21
+ }}
22
+ >
23
+ {#if is_eye_shown}
24
+ <svg id="eye" class="svg_cover" data-name="eye" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 350">
25
+ <g fill="none" stroke={eye_color} stroke-width={sw}>
26
+ <path
27
+ d="M120.2-2.8h58.2a248 248 0 01248 248v58.3a34.6 34.6 0 01-34.6 34.6h-58.2A248 248 0 0185.6 90V31.9a34.6 34.6 0 0134.6-34.7z"
28
+ transform="rotate(-45 256 167.7)"
29
+ />
30
+ <circle cx="256" cy="167.7" r="78.8" />
31
+ </g>
32
+ </svg>
33
+ {:else}
34
+ <svg id="eyenot" class="svg_cover" data-name="eyenot" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 350">
35
+ <g fill="none" stroke={eye_color} stroke-width={sw}>
36
+ <path
37
+ d="M336.3 292.6a248 248 0 01-255.7-59.3l-41.2-41.1a34.7 34.7 0 010-49L80.6 102a249.1 249.1 0 0135.6-29.6M182.6 139a78.8 78.8 0 00102.2 102M329.4 196.4A78.8 78.8 0 00227.3 94.3"
38
+ />
39
+ <path
40
+ d="M175.7 42.7A248 248 0 01431.4 102l41.2 41.1a34.7 34.7 0 010 49l-41.2 41.2a249 249 0 01-35.6 29.6M115.6 27.3l280.8 280.8"
41
+ />
42
+ </g>
43
+ </svg>
44
+ {/if}
45
+ </div>
46
+
47
+ <style>
48
+ .icon_frame {
49
+ width: 2rem;
50
+ height: 2rem;
51
+ display: flex;
52
+ align-items: center;
53
+ }
54
+ .svg_cover {
55
+ width: 100%;
56
+ }
57
+ </style>