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,259 @@
1
+ import { create_text_input_manager } from "../TextInput/index.svelte.js"
2
+ import { create_color_input_manager } from "../ColorInput/index.svelte.js"
3
+ import { create_popover_manager } from "../Popover/index.svelte.js"
4
+ import { create_button_manager } from "../Button/index.svelte.js"
5
+ import { create_icon_manager } from "../Icon/index.svelte.js"
6
+ import { deep_copy } from "../../client/index.js"
7
+
8
+ export function create_icon_input_manager(config) {
9
+ let val = $state(null)
10
+ let is_icon_only = $state(false)
11
+ let popover_manager = $state(null)
12
+ let popover_toggle_button_manager = $state(null)
13
+ let clear_button_manager = $state(null)
14
+ let finish_button_manager = $state(null)
15
+ let color_input_manager = $state(null)
16
+ let search_icons_text_input_manager = $state(null)
17
+ let icon_options = $state([])
18
+ let selected_icon_manager = $state(null)
19
+
20
+ const icon_options_default = [
21
+ // i cut some out. tbd which to include / add
22
+ { key: "calendar", name: "Calendar" },
23
+ { key: "chart", name: "Chart" },
24
+ { key: "check", name: "Check" },
25
+ { key: "copy", name: "Copy" },
26
+ { key: "edit", name: "Edit" },
27
+ { key: "link", name: "Link" },
28
+ { key: "list", name: "List" },
29
+ { key: "minus", name: "Minus" },
30
+ { key: "plus", name: "Plus" },
31
+ { key: "table", name: "Table" },
32
+ { key: "trashcan", name: "Trashcan" },
33
+ { key: "x", name: "X" },
34
+ { key: "three_dots", name: "three_dots" },
35
+ { key: "clock", name: "Clock" },
36
+ { key: "sun", name: "Sun" },
37
+ { key: "moon", name: "Moon" },
38
+ { key: "magnifying_glass", name: "Magnifying Glass" },
39
+ { key: "smile_face", name: "Smile Face" },
40
+ { key: "nuetral_face", name: "Nuetral Face" },
41
+ { key: "frown_face", name: "Frown Face" },
42
+ { key: "pointer_hand", name: "Pointer Hand" },
43
+ { key: "touch_circle", name: "Touch Circle" },
44
+ { key: "profile", name: "Profile" },
45
+ { key: "share", name: "Share" },
46
+ { key: "invite", name: "Invite" },
47
+ { key: "feedback", name: "Feedback" },
48
+ { key: "idea", name: "Idea" },
49
+ { key: "resize", name: "Resize" },
50
+ { key: "crop", name: "Crop" },
51
+ { key: "folder", name: "Folder" },
52
+ { key: "file", name: "File" },
53
+ { key: "file_drop", name: "File Drop" },
54
+ { key: "linked", name: "Linked" },
55
+ { key: "unlinked", name: "Unlinked" },
56
+ { key: "sliders", name: "Sliders" },
57
+ { key: "brain", name: "Brain" },
58
+ { key: "brush", name: "Brush" },
59
+ { key: "arrow", name: "Arrow" },
60
+ { key: "arrow_tailed", name: "Arrow Tailed" },
61
+ { key: "curved_arrow", name: "Curved Arrow" },
62
+ { key: "redo_arrow", name: "Redo Arrow" },
63
+ { key: "undo_arrow", name: "Undo Arrow" },
64
+ { key: "rotate", name: "Rotate" },
65
+ { key: "refresh", name: "Refresh" },
66
+ { key: "opposing_arrows", name: "Opposing Arrows" },
67
+ ]
68
+
69
+ let icons_prepped = $state(null)
70
+ let icon_options_filtered = $derived(
71
+ Array.isArray(icons_prepped)
72
+ ? icons_prepped.filter(
73
+ (h) =>
74
+ search_icons_text_input_manager?.val === null ||
75
+ search_icons_text_input_manager?.val === "" ||
76
+ h?.key?.includes(search_icons_text_input_manager?.val) ||
77
+ h?.name?.includes(search_icons_text_input_manager?.val)
78
+ )
79
+ : null
80
+ )
81
+ let icon_color = $derived(
82
+ !is_icon_only && !!val?.color
83
+ ? `oklch(var(--l${val?.color?.l}${val?.color?.is_dark_theme_invert ? "-t" : ""}) var(--c${
84
+ val?.color?.c
85
+ }) var(--h${val?.color?.h}) / var(--o${val?.color?.o}))`
86
+ : "var(--g6-t)"
87
+ )
88
+
89
+ function set_icons_prepped() {
90
+ let icons_prepped_loc = []
91
+ for (let icon_option of icon_options) {
92
+ let icon_manager = create_icon_manager({
93
+ icon_id: icon_option?.key,
94
+ sw: 50,
95
+ size: 1.8,
96
+ color: icon_color,
97
+ })
98
+ icons_prepped_loc.push({
99
+ ...icon_option,
100
+ icon_manager,
101
+ button_manager: create_button_manager({
102
+ type: "outlined",
103
+ min_height: 8,
104
+ mt: 0.5,
105
+ mb: 0.5,
106
+ ml: 0.5,
107
+ mr: 0.5,
108
+ color: icon_color,
109
+ selected_type: () => (val?.icon == icon_option?.key ? "half_selected" : null),
110
+ on_click: () => set_icon(icon_option?.key),
111
+ }),
112
+ })
113
+ }
114
+ icons_prepped = icons_prepped_loc
115
+ }
116
+
117
+ function finish() {
118
+ popover_manager.close()
119
+ if (typeof config?.on_finish == "function") {
120
+ config?.on_finish(val)
121
+ }
122
+ }
123
+
124
+ function set_icon(input) {
125
+ if (is_icon_only) {
126
+ val = input
127
+ } else {
128
+ val = {
129
+ ...val,
130
+ icon: input,
131
+ }
132
+ }
133
+ }
134
+
135
+ function set_color(input) {
136
+ val = {
137
+ ...val,
138
+ color: input,
139
+ }
140
+ set_icons_prepped()
141
+ }
142
+
143
+ function set_null() {
144
+ val = null
145
+ }
146
+
147
+ function set_is_icon_only(input) {
148
+ is_icon_only = input
149
+ val = is_icon_only
150
+ ? typeof val == "object" && val && val.hasOwnProperty("icon")
151
+ ? val?.icon
152
+ : val
153
+ : typeof val == "object" && val && val.hasOwnProperty("icon")
154
+ ? val
155
+ : { icon: val, color: null }
156
+ }
157
+
158
+ function init(config) {
159
+ icon_options = Array.isArray(config?.icon_options) ? config?.icon_options : icon_options_default
160
+ is_icon_only = !!config?.is_icon_only
161
+ val = is_icon_only
162
+ ? config?.val
163
+ : config?.val
164
+ ? {
165
+ color: val?.color,
166
+ icon: val?.icon,
167
+ }
168
+ : null
169
+ popover_manager = create_popover_manager({
170
+ type: "dropdown",
171
+ min_width: 320,
172
+ target_width: 400,
173
+ min_height: 320,
174
+ target_height: 400,
175
+ header: "Icon Picker",
176
+ anchor_id: () => `button_${popover_toggle_button_manager?.id}`,
177
+ })
178
+ popover_toggle_button_manager = create_button_manager({
179
+ type: "outlined",
180
+ text: "Icon Input",
181
+ is_compressed: () => config?.is_button_compressed ?? true,
182
+ popover_target: () => `popover_${popover_manager?.id}`,
183
+ })
184
+ clear_button_manager = create_button_manager({
185
+ type: "outlined",
186
+ is_compressed: true,
187
+ text: "Set Null",
188
+ on_click: () => set_null(),
189
+ })
190
+ color_input_manager = create_color_input_manager({
191
+ is_show_opacity: false,
192
+ l_options: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
193
+ val: val?.color,
194
+ on_finish: (input) => set_color(input),
195
+ })
196
+ search_icons_text_input_manager = create_text_input_manager({
197
+ type: "search",
198
+ autocomplete: "off",
199
+ placeholder: "search",
200
+ ml: 0.5,
201
+ mr: 0.5,
202
+ mb: 0.5,
203
+ })
204
+ selected_icon_manager = create_icon_manager({
205
+ icon_id: () => (is_icon_only ? val : val?.icon),
206
+ sw: 50,
207
+ size: 1.8,
208
+ color: () => icon_color,
209
+ })
210
+ finish_button_manager = create_button_manager({
211
+ text: "Finish",
212
+ on_click: () => finish(),
213
+ })
214
+ set_icons_prepped()
215
+ }
216
+ init(config)
217
+
218
+ return {
219
+ get icon_color() {
220
+ return icon_color
221
+ },
222
+ get val() {
223
+ return val
224
+ },
225
+ get is_icon_only() {
226
+ return is_icon_only
227
+ },
228
+ get popover_manager() {
229
+ return popover_manager
230
+ },
231
+ get popover_toggle_button_manager() {
232
+ return popover_toggle_button_manager
233
+ },
234
+ get finish_button_manager() {
235
+ return finish_button_manager
236
+ },
237
+ get icon_options_filtered() {
238
+ return icon_options_filtered
239
+ },
240
+ get search_icons_text_input_manager() {
241
+ return search_icons_text_input_manager
242
+ },
243
+ get color_input_manager() {
244
+ return color_input_manager
245
+ },
246
+ get clear_button_manager() {
247
+ return clear_button_manager
248
+ },
249
+ get icon_options() {
250
+ return icon_options
251
+ },
252
+ get selected_icon_manager() {
253
+ return selected_icon_manager
254
+ },
255
+ init,
256
+ set_icon,
257
+ set_is_icon_only,
258
+ }
259
+ }
@@ -0,0 +1,126 @@
1
+ <script>
2
+ import { onMount } from "svelte"
3
+ import LoadingWheel from "../LoadingWheel/index.svelte"
4
+
5
+ let { manager } = $props()
6
+
7
+ onMount(() => {
8
+ // doesnt seam to run until all items on page finish loading
9
+ if (typeof manager?.handle_mount == "function") {
10
+ manager.handle_mount()
11
+ }
12
+ })
13
+ </script>
14
+
15
+ {#if manager?.src}
16
+ <figure
17
+ id={manager?.id}
18
+ class="container"
19
+ style="
20
+ --border_radius: {manager?.border_radius}rem;
21
+ aspect-ratio: {manager?.image_aspect_ratio};
22
+ max-width: {manager?.display_max_width}px;
23
+ max-height: {manager?.display_max_height}px;
24
+ height: auto;"
25
+ >
26
+ <div
27
+ class="img_background_blur"
28
+ style="background: {manager?.bg_img_style}; filter: blur({manager?.bg_img_blur}px) opacity({manager?.bg_img_opacity}); border-radius: {manager?.border_radius}rem"
29
+ ></div>
30
+ <div class="main_border_container">
31
+ {#if manager?.src_quick}
32
+ <div class="main_border_child">
33
+ <img
34
+ id={`quick_img_${manager?.id}`}
35
+ class="placeholder_image"
36
+ src={manager?.src_quick}
37
+ alt={manager?.alt}
38
+ width={manager?.image_width}
39
+ height={manager?.image_height}
40
+ style="grid-area: stack; height: auto; max-height: {manager?.display_max_height}px; aspect-ratio: {manager?.image_aspect_ratio}; border-radius: {manager?.border_radius}rem;"
41
+ />
42
+ <div class="placeholder_image_bg"></div>
43
+ </div>
44
+ {/if}
45
+ <picture class="main_border_child" style="z-index: 1;">
46
+ <img
47
+ id={`img_${manager?.id}`}
48
+ src={manager?.src}
49
+ alt={manager?.alt}
50
+ width={manager?.image_width}
51
+ height={manager?.image_height}
52
+ style="height: auto; max-height: {manager?.display_max_height}px; aspect-ratio: {manager?.image_aspect_ratio}; border-radius: {manager?.border_radius}rem;"
53
+ />
54
+ </picture>
55
+ {#if manager?.is_loading_main_image}
56
+ <div class="main_border_child" style="display: grid; place-items: center; z-index: 2;">
57
+ <div class="loading_spinner">
58
+ <LoadingWheel />
59
+ </div>
60
+ </div>
61
+ {/if}
62
+ </div>
63
+ </figure>
64
+ {:else}
65
+ <p style="font-style: italic;">{manager?.alt ?? "No Image Src"}</p>
66
+ {/if}
67
+
68
+ <style>
69
+ .container {
70
+ margin: 0;
71
+ padding: 0;
72
+ position: relative;
73
+ transition: filter 0.3s ease;
74
+ box-shadow: 0 0 0 1px oklch(var(--l10-t) var(--c3) var(--primary-h) / var(--o5));
75
+ border-radius: var(--border_radius);
76
+ width: fit-content;
77
+ min-width: 100%;
78
+ max-width: 100%;
79
+ }
80
+ .img_background_blur {
81
+ position: absolute;
82
+ top: 50%;
83
+ left: 50%;
84
+ transform: translate(-50%, -50%);
85
+ width: clamp(1rem, 130%, 100vw);
86
+ height: clamp(1rem, 130%, 100vh);
87
+ overflow: hidden;
88
+ z-index: -1;
89
+ }
90
+ .main_border_container {
91
+ display: grid;
92
+ grid-template-areas: "stack";
93
+ height: 100%;
94
+ }
95
+ .main_border_child {
96
+ grid-area: stack;
97
+ display: grid;
98
+ grid-template-areas: "stack";
99
+ }
100
+ .placeholder_image_bg {
101
+ border-radius: var(--border_radius);
102
+ border: 4px solid var(--g17-t);
103
+ grid-area: stack;
104
+ }
105
+ .placeholder_image {
106
+ filter: blur(4px);
107
+ width: 100%;
108
+ height: auto;
109
+ }
110
+ img {
111
+ width: fit-content;
112
+ max-width: 100%;
113
+ height: auto;
114
+ vertical-align: middle;
115
+ font-style: italic;
116
+ background-repeat: no-repeat;
117
+ background-size: cover;
118
+ shape-margin: 1rem;
119
+ object-fit: contain;
120
+ transition: opacity 0.5s ease-out;
121
+ }
122
+ .loading_spinner {
123
+ width: clamp(1rem, 60%, 80rem);
124
+ height: clamp(1rem, 60%, 80rem);
125
+ }
126
+ </style>
@@ -0,0 +1,116 @@
1
+ import { create_unique_id, set_closurable } from "../../client/index.js"
2
+
3
+ export function create_image_manager(config) {
4
+ const id = create_unique_id(null, 20)
5
+ let storage_path = $derived(set_closurable(config?.storage_path, null))
6
+ let selector_id = $derived(set_closurable(config?.selector_id, null))
7
+ let bg_img_blur = $derived(set_closurable(config?.bg_img_blur, 0))
8
+ let bg_img_opacity = $derived(set_closurable(config?.bg_img_opacity ?? (bg_img_blur ? 0.3 : 0)))
9
+ let alt = $derived(set_closurable(config?.alt, null))
10
+ let storage_id = $derived(set_closurable(config?.storage_id, null))
11
+ let src = $derived(set_closurable(get_src(config?.src, storage_id), null))
12
+ let storage_id_quick = $derived(set_closurable(config?.storage_id_quick, null))
13
+ let src_quick = $derived(set_closurable(get_src(config?.src_quick, storage_id_quick), null))
14
+ let image_width = $state(config?.image_width ?? null)
15
+ let image_height = $state(config?.image_height ?? null)
16
+ let image_aspect_ratio = $state(
17
+ config?.image_aspect_ratio ?? (image_width > 0 && image_height > 0) ? image_width / image_height : null
18
+ )
19
+
20
+ let is_loading_main_image = $state(false)
21
+ let display_max_height = $derived(set_closurable(config?.display_max_height, 600))
22
+ let display_max_width = $derived(set_closurable(config?.display_max_width, 800))
23
+ let border_radius = $derived(set_closurable(config?.border_radius, 1))
24
+ let bg_img_style = $derived(src_quick || src ? `url(${src_quick ?? src}) no-repeat center/cover` : "none")
25
+
26
+ function get_src(src, storage_id) {
27
+ if (src) {
28
+ return src
29
+ } else if (storage_id && storage_path) {
30
+ return storage_path.replace("{storage_id}", storage_id)
31
+ } else {
32
+ return null
33
+ }
34
+ }
35
+
36
+ function handle_mount() {
37
+ is_loading_main_image = true
38
+ let quick_image_el = document?.querySelector(`#quick_img_${id}`)
39
+ if (quick_image_el) {
40
+ if (quick_image_el?.complete) {
41
+ set_image_dimensions(quick_image_el)
42
+ } else {
43
+ quick_image_el.onload = () => {
44
+ set_image_dimensions(quick_image_el)
45
+ }
46
+ }
47
+ }
48
+ setTimeout(() => {
49
+ let image_el = document?.querySelector(`#img_${id}`)
50
+ if (image_el) {
51
+ if (image_el?.complete) {
52
+ set_image_dimensions(image_el)
53
+ is_loading_main_image = false
54
+ } else {
55
+ image_el.onload = () => {
56
+ set_image_dimensions(image_el)
57
+ is_loading_main_image = false
58
+ }
59
+ }
60
+ }
61
+ })
62
+ }
63
+
64
+ function set_image_dimensions(el) {
65
+ image_width = el.naturalWidth
66
+ image_height = el.naturalHeight
67
+ image_aspect_ratio = el.naturalWidth / el.naturalHeight
68
+ }
69
+
70
+ return {
71
+ id,
72
+ get is_loading_main_image() {
73
+ return is_loading_main_image
74
+ },
75
+ get selector_id() {
76
+ return selector_id
77
+ },
78
+ get src() {
79
+ return src
80
+ },
81
+ get src_quick() {
82
+ return src_quick
83
+ },
84
+ get alt() {
85
+ return alt
86
+ },
87
+ get display_max_width() {
88
+ return display_max_width
89
+ },
90
+ get display_max_height() {
91
+ return display_max_height
92
+ },
93
+ get image_width() {
94
+ return image_width
95
+ },
96
+ get image_height() {
97
+ return image_height
98
+ },
99
+ get image_aspect_ratio() {
100
+ return image_aspect_ratio
101
+ },
102
+ get bg_img_blur() {
103
+ return bg_img_blur
104
+ },
105
+ get bg_img_opacity() {
106
+ return bg_img_opacity
107
+ },
108
+ get bg_img_style() {
109
+ return bg_img_style
110
+ },
111
+ get border_radius() {
112
+ return border_radius
113
+ },
114
+ handle_mount,
115
+ }
116
+ }
@@ -0,0 +1,165 @@
1
+ <script>
2
+ let { manager } = $props()
3
+ </script>
4
+
5
+ <svelte:window
6
+ onmouseup={(e) => manager?.crop_on_up(e)}
7
+ onlostpointercapture={(e) => manager?.crop_on_up(e)}
8
+ ontouchend={(e) => manager?.crop_on_up(e)}
9
+ onmousemove={(e) => manager?.crop_on_move(e)}
10
+ ontouchmove={(e) => manager?.crop_on_move(e)}
11
+ />
12
+
13
+ <div
14
+ class="crop_square"
15
+ style="left: {manager?.crop_left}px; top: {manager?.crop_top}px; width: {manager?.crop_width}px; height: {manager?.crop_height}px"
16
+ >
17
+ <div class="vert_lines" style="z-index: 0;"></div>
18
+ <div class="horiz_lines" style="z-index: 0;"></div>
19
+ <div
20
+ class="crop_area"
21
+ style="cursor: move;"
22
+ role="button"
23
+ tabindex="0"
24
+ onmousedown={(e) => manager?.crop_on_down(e, "main")}
25
+ ontouchstart={(e) => manager?.crop_on_down(e, "main")}
26
+ ></div>
27
+ <div
28
+ class="drag_dot"
29
+ style="left: 0; top: 0; cursor: nwse-resize;"
30
+ role="button"
31
+ tabindex="0"
32
+ onmousedown={(e) => manager?.crop_on_down(e, "tl")}
33
+ ontouchstart={(e) => manager?.crop_on_down(e, "tl")}
34
+ ></div>
35
+ <div
36
+ class="drag_dot"
37
+ style="left: 50%; top: 0; cursor: ns-resize;"
38
+ role="button"
39
+ tabindex="0"
40
+ onmousedown={(e) => manager?.crop_on_down(e, "t")}
41
+ ontouchstart={(e) => manager?.crop_on_down(e, "t")}
42
+ ></div>
43
+ <div
44
+ class="drag_dot"
45
+ style="left: 100%; top: 0; cursor: nesw-resize;"
46
+ role="button"
47
+ tabindex="0"
48
+ onmousedown={(e) => manager?.crop_on_down(e, "tr")}
49
+ ontouchstart={(e) => manager?.crop_on_down(e, "tr")}
50
+ ></div>
51
+ <div
52
+ class="drag_dot"
53
+ style="left: 0; top: 100%; cursor: nesw-resize;"
54
+ role="button"
55
+ tabindex="0"
56
+ onmousedown={(e) => manager?.crop_on_down(e, "bl")}
57
+ ontouchstart={(e) => manager?.crop_on_down(e, "bl")}
58
+ ></div>
59
+ <div
60
+ class="drag_dot"
61
+ style="left: 50%; top: 100%; cursor: ns-resize;"
62
+ role="button"
63
+ tabindex="0"
64
+ onmousedown={(e) => manager?.crop_on_down(e, "b")}
65
+ ontouchstart={(e) => manager?.crop_on_down(e, "b")}
66
+ ></div>
67
+ <div
68
+ class="drag_dot"
69
+ style="left: 100%; top: 100%; cursor: nwse-resize;"
70
+ role="button"
71
+ tabindex="0"
72
+ onmousedown={(e) => manager?.crop_on_down(e, "br")}
73
+ ontouchstart={(e) => manager?.crop_on_down(e, "br")}
74
+ ></div>
75
+ <div
76
+ class="drag_dot"
77
+ style="left: 0; top: 50%; cursor: ew-resize;"
78
+ role="button"
79
+ tabindex="0"
80
+ onmousedown={(e) => manager?.crop_on_down(e, "l")}
81
+ ontouchstart={(e) => manager?.crop_on_down(e, "l")}
82
+ ></div>
83
+ <div
84
+ class="drag_dot"
85
+ style="left: 100%; top: 50%; cursor: ew-resize;"
86
+ role="button"
87
+ tabindex="0"
88
+ onmousedown={(e) => manager?.crop_on_down(e, "r")}
89
+ ontouchstart={(e) => manager?.crop_on_down(e, "r")}
90
+ ></div>
91
+ </div>
92
+
93
+ <style>
94
+ .crop_square {
95
+ position: absolute;
96
+ cursor: pointer;
97
+ }
98
+ .crop_area {
99
+ position: absolute;
100
+ top: -2px;
101
+ bottom: -2px;
102
+ left: -2px;
103
+ right: -2px;
104
+ background: linear-gradient(90deg, #eef 50%, #445 50%), linear-gradient(90deg, #eef 50%, #445 50%),
105
+ linear-gradient(0deg, #eef 50%, #445 50%), linear-gradient(0deg, #eef 50%, #445 50%);
106
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
107
+ background-size:
108
+ 10px 2px,
109
+ 10px 2px,
110
+ 2px 10px,
111
+ 2px 10px;
112
+ animation: border-dance 20s infinite linear;
113
+ }
114
+ @keyframes border-dance {
115
+ 0% {
116
+ background-position:
117
+ 0 0,
118
+ 100% 100%,
119
+ 0 100%,
120
+ 100% 0;
121
+ }
122
+ 100% {
123
+ background-position:
124
+ 100% 0,
125
+ 0 100%,
126
+ 0 0,
127
+ 100% 100%;
128
+ }
129
+ }
130
+ .vert_lines {
131
+ position: absolute;
132
+ left: 33%;
133
+ right: 33%;
134
+ top: 0;
135
+ bottom: 0;
136
+ border-left: 2px dotted #eef;
137
+ border-right: 2px dotted #eef;
138
+ }
139
+ .horiz_lines {
140
+ position: absolute;
141
+ top: 33%;
142
+ bottom: 33%;
143
+ left: 0;
144
+ right: 0;
145
+ border-top: 2px dotted #eef;
146
+ border-bottom: 2px dotted #eef;
147
+ }
148
+ .drag_dot {
149
+ position: absolute;
150
+ z-index: 3;
151
+ height: 20px;
152
+ width: 20px;
153
+ border-radius: 50%;
154
+ background: linear-gradient(-45deg, var(--g24), var(--g20));
155
+ box-shadow:
156
+ 0.1rem 0.1rem 0.2rem var(--shadow3),
157
+ -0.1rem -0.1rem 0.2rem var(--shadow2),
158
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2),
159
+ inset -0.2rem -0.2rem 0.4rem var(--shadow2);
160
+ transform: translate(-50%, -50%);
161
+ }
162
+ .drag_dot:hover {
163
+ background-color: #556;
164
+ }
165
+ </style>