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,638 @@
1
+ import { create_popover_manager } from "../Popover/index.svelte.js"
2
+ import { create_button_manager } from "../Button/index.svelte.js"
3
+ import { create_dropdown_manager } from "../Dropdown/index.svelte.js"
4
+ import { create_text_input_manager } from "../TextInput/index.svelte.js"
5
+ import { create_number_toggler } from "./NumberToggler/index.svelte.js"
6
+ import { create_unique_id, set_closurable } from "../../client/index.js"
7
+ import {
8
+ time_formats,
9
+ granularities,
10
+ month_names,
11
+ days_of_week_names,
12
+ common_timezones,
13
+ get_val_from_time_object,
14
+ get_time_object_from_val,
15
+ get_time_full_from_object,
16
+ } from "./index.js"
17
+
18
+ export function create_time_input_manager(config) {
19
+ let id = create_unique_id(null, 20)
20
+ let picker_year = $state(new Date().getFullYear())
21
+ let picker_month = $state(new Date().getMonth() + 1)
22
+ let is_pick_month_year = $state(false)
23
+ let is_null = $state(false)
24
+ let year = $state(null)
25
+ let day_of_month = $state(null)
26
+ let day_of_week = $state(null)
27
+ let day_of_year = $state(null)
28
+ let week_of_year = $state(null)
29
+ let datetime = $state(null)
30
+
31
+ let day_of_month_button_managers = $state(null)
32
+ let is_show_calendar = $state(true)
33
+ let is_show_granularity_dropdown = $state(false)
34
+
35
+ let popover_manager = $state(null)
36
+ let main_toggle_button_manager = $state(null)
37
+ let left_month_button_manager = $state(null)
38
+ let right_month_button_manager = $state(null)
39
+ let prempt_month_year_button_manager = $state(null)
40
+ let epoch_text_input_manager = $state(null)
41
+ let year_minus_one_button_manager = $state(null)
42
+ let year_plus_one_button_manager = $state(null)
43
+ let year_minus_hundred_button_manager = $state(null)
44
+ let year_plus_hundred_button_manager = $state(null)
45
+ let back_to_calendar_button_manager = $state(null)
46
+ let hour_number_toggler_manager = $state(null)
47
+ let minute_number_toggler_manager = $state(null)
48
+ let second_number_toggler_manager = $state(null)
49
+ let period_days_number_toggler_manager = $state(null)
50
+ let period_hours_number_toggler_manager = $state(null)
51
+ let period_minutes_number_toggler_manager = $state(null)
52
+ let period_seconds_number_toggler_manager = $state(null)
53
+ let set_null_button_manager = $state(null)
54
+ let set_to_now_button_manager = $state(null)
55
+ let reset_timezone_button_manager = $state(null)
56
+ let finish_button_manager = $state(null)
57
+ let timezone_dropdown_manager = $state(null)
58
+ let granularity_dropdown_manager = $state(null)
59
+ let month_dropdown_manager = $state(null)
60
+
61
+ let label = $derived(set_closurable(config?.label, null))
62
+ let is_popover = $derived(set_closurable(config?.is_popover, true))
63
+ let format = $derived(set_closurable(config?.format, "time_full"))
64
+ let is_disabled = $derived(set_closurable(config?.is_disabled, false))
65
+ let granularity_options = $derived(
66
+ set_closurable(config?.granularity_options, ["year", "month", "week", "day", "hour", "minute", "second"])
67
+ )
68
+
69
+ let picker_month_day_of_week = $derived(new Date(picker_year, picker_month - 1, 1).getDay())
70
+ let picker_days_in_month = $derived(new Date(picker_year, picker_month, 0).getDate())
71
+ let boxes_in_picker = $derived(picker_days_in_month + picker_month_day_of_week)
72
+
73
+ let val = $derived(
74
+ is_null
75
+ ? null
76
+ : get_val_from_time_object({
77
+ is_null: is_null,
78
+ epoch: epoch_text_input_manager?.val,
79
+ granularity: granularity_dropdown_manager?.val,
80
+ year: year,
81
+ month: month_dropdown_manager?.val,
82
+ day_of_month,
83
+ day_of_week,
84
+ day_of_year,
85
+ week_of_year,
86
+ hour: hour_number_toggler_manager?.val,
87
+ minute: minute_number_toggler_manager?.val,
88
+ second: second_number_toggler_manager?.val,
89
+ days: period_days_number_toggler_manager?.val,
90
+ hours: period_hours_number_toggler_manager?.val,
91
+ minutes: period_minutes_number_toggler_manager?.val,
92
+ seconds: period_seconds_number_toggler_manager?.val,
93
+ timezone: timezone_dropdown_manager?.val,
94
+ format: format,
95
+ })
96
+ )
97
+
98
+ function set_val(input) {
99
+ epoch_text_input_manager.set_val(input?.epoch ?? null)
100
+ granularity_dropdown_manager.set_val(input?.granularity ?? granularity_dropdown_manager?.val ?? "day")
101
+ year = input?.year ?? null
102
+ month_dropdown_manager.set_val(input?.month ?? null)
103
+ day_of_month = input?.day_of_month ?? null
104
+ day_of_week = input?.day_of_week ?? null
105
+ day_of_year = input?.day_of_year ?? null
106
+ week_of_year = input?.week_of_year ?? null
107
+ hour_number_toggler_manager.set_val(input?.hour ?? null)
108
+ minute_number_toggler_manager.set_val(input?.minute ?? null)
109
+ second_number_toggler_manager.set_val(input?.second ?? null)
110
+ timezone_dropdown_manager.set_val(input?.timezone ?? timezone_dropdown_manager?.val ?? null)
111
+ datetime = input?.datetime ?? null
112
+ period_days_number_toggler_manager.set_val(input?.days ?? null)
113
+ period_hours_number_toggler_manager.set_val(input?.hours ?? null)
114
+ period_minutes_number_toggler_manager.set_val(input?.minutes ?? null)
115
+ period_seconds_number_toggler_manager.set_val(input?.seconds ?? null)
116
+ is_null = input == null
117
+ }
118
+
119
+ function get_iso_week(year, month, day) {
120
+ const date = new Date(Date.UTC(year, month - 1, day))
121
+ const day_number = (date.getUTCDay() + 6) % 7
122
+ date.setUTCDate(date.getUTCDate() - day_number + 3)
123
+ const first_thursday = new Date(Date.UTC(date.getUTCFullYear(), 0, 4))
124
+ const diff = date - first_thursday
125
+ const week_of_year = Math.ceil(diff / (86400000 * 7) + 1)
126
+ return week_of_year
127
+ }
128
+
129
+ function set_day_of_month_button_managers() {
130
+ let day_of_month_button_managers_loc = []
131
+ if (picker_days_in_month > 0) {
132
+ for (let i = 1; i <= picker_days_in_month; i++) {
133
+ let button_manager = create_button_manager({
134
+ type: "soft",
135
+ pt: 0.5,
136
+ pb: 0.5,
137
+ pl: 0,
138
+ pr: 0,
139
+ min_height: 0,
140
+ selected_type: () => {
141
+ if (format == "year_week") {
142
+ return year &&
143
+ picker_year == year &&
144
+ picker_month == month_dropdown_manager?.val &&
145
+ get_iso_week(picker_year, picker_month, i) ==
146
+ get_iso_week(year, month_dropdown_manager?.val, day_of_month)
147
+ ? "selected"
148
+ : null
149
+ }
150
+ return year && picker_year == year && picker_month == month_dropdown_manager?.val && i == day_of_month
151
+ ? "selected"
152
+ : null
153
+ },
154
+ text: i,
155
+ is_disabled: () => is_disabled,
156
+ on_click: () => set_day_of_month(picker_year, picker_month, i),
157
+ })
158
+ day_of_month_button_managers_loc.push(button_manager)
159
+ }
160
+ }
161
+ day_of_month_button_managers = day_of_month_button_managers_loc
162
+ }
163
+
164
+ function set_granularity(input) {
165
+ granularity_dropdown_manager.set_val(input)
166
+ is_null = false
167
+ }
168
+ function set_timezone(input) {
169
+ timezone_dropdown_manager.set_val(input)
170
+ is_null = false
171
+ }
172
+
173
+ function set_to_now() {
174
+ const epoch = Math.floor(Date.now() / 1000)
175
+ const time_full = get_time_full_from_object({
176
+ format: format,
177
+ granularity: granularity_dropdown_manager?.val,
178
+ epoch,
179
+ })
180
+ set_val(time_full)
181
+ picker_year = new Date().getFullYear()
182
+ picker_month = new Date().getMonth() + 1
183
+ }
184
+
185
+ function set_year(_year) {
186
+ console.log("set_year", _year)
187
+ year = parseInt(_year)
188
+ picker_year = parseInt(_year)
189
+ epoch_text_input_manager.set_val(null)
190
+ is_null = false
191
+ }
192
+
193
+ function set_month(_month) {
194
+ picker_month = _month
195
+ month_dropdown_manager.set_val(_month)
196
+ }
197
+
198
+ function set_day_of_month(_year, _month, _day_of_month) {
199
+ year = _year
200
+ month_dropdown_manager.set_val(_month)
201
+ day_of_month = _day_of_month
202
+ epoch_text_input_manager.set_val(null)
203
+ is_null = false
204
+ }
205
+
206
+ function set_hour(_hour) {
207
+ hour_number_toggler_manager.set_val(_hour > 23 ? 0 : _hour < 0 ? 23 : _hour)
208
+ epoch_text_input_manager.set_val(null)
209
+ is_null = false
210
+ }
211
+
212
+ function set_minute(_minute) {
213
+ minute_number_toggler_manager.set_val(_minute > 59 ? 0 : _minute < 0 ? 59 : _minute)
214
+ if (Number.isInteger(_minute) && !Number.isInteger(hour_number_toggler_manager?.val)) {
215
+ hour_number_toggler_manager.set_val(0)
216
+ }
217
+ epoch_text_input_manager.set_val(null)
218
+ is_null = false
219
+ }
220
+
221
+ function set_second(_second) {
222
+ second_number_toggler_manager.set_val(_second > 59 ? 0 : _second < 0 ? 59 : _second)
223
+ if (Number.isInteger(_second) && !Number.isInteger(minute_number_toggler_manager?.val)) {
224
+ minute_number_toggler_manager.set_val(0)
225
+ }
226
+ if (Number.isInteger(_second) && !Number.isInteger(hour_number_toggler_manager?.val)) {
227
+ hour_number_toggler_manager.set_val(0)
228
+ }
229
+ epoch_text_input_manager.set_val(null)
230
+ is_null = false
231
+ }
232
+
233
+ function set_picker_data(_picker_year, _picker_month) {
234
+ if (!Number.isInteger(_picker_month)) {
235
+ _picker_month = new Date().getMonth() + 1
236
+ } else {
237
+ if (_picker_month < 1) {
238
+ _picker_month = 12
239
+ _picker_year -= 1
240
+ } else if (_picker_month > 12) {
241
+ _picker_month = 1
242
+ _picker_year += 1
243
+ }
244
+ }
245
+ if (!Number.isInteger(_picker_year)) {
246
+ _picker_year = new Date().getFullYear()
247
+ }
248
+ _picker_year = Math.max(-10000, Math.min(3000, _picker_year))
249
+ picker_year = _picker_year
250
+ picker_month = _picker_month
251
+ }
252
+
253
+ function handle_left_month() {
254
+ if (["year", "month"].includes(granularity_dropdown_manager?.val)) {
255
+ if (picker_month < 2) {
256
+ picker_month = 12
257
+ picker_year -= 1
258
+ } else {
259
+ picker_month -= 1
260
+ }
261
+ epoch_text_input_manager.set_val(null)
262
+ } else {
263
+ set_picker_data(picker_year, picker_month - 1)
264
+ }
265
+ is_null = false
266
+ }
267
+
268
+ function handle_right_month() {
269
+ if (["year", "month"].includes(granularity_dropdown_manager?.val)) {
270
+ if (picker_month > 11) {
271
+ picker_month = 1
272
+ picker_year += 1
273
+ } else {
274
+ picker_month += 1
275
+ }
276
+ epoch_text_input_manager.set_val(null)
277
+ } else {
278
+ set_picker_data(picker_year, picker_month + 1)
279
+ }
280
+ is_null = false
281
+ }
282
+
283
+ function finish() {
284
+ set_picker_data(val?.year, val?.month)
285
+ popover_manager.close()
286
+ if (typeof config?.on_finish == "function") {
287
+ config?.on_finish(val)
288
+ }
289
+ }
290
+
291
+ function init(config) {
292
+ const time_full = get_time_object_from_val(config?.val, config?.format, config?.granularity, config?.timezone)
293
+ is_show_granularity_dropdown = config?.is_show_granularity_dropdown ?? false
294
+ picker_year = config?.picker_year ?? new Date().getFullYear()
295
+ picker_month = config?.picker_month ?? new Date().getMonth() + 1
296
+ is_pick_month_year = config?.val?.is_pick_month_year ?? false
297
+ epoch_text_input_manager = create_text_input_manager({
298
+ label: "epoch",
299
+ placeholder: "epoch",
300
+ val: time_full?.epoch,
301
+ })
302
+ popover_manager = create_popover_manager({
303
+ type: "dropdown",
304
+ min_width: 320,
305
+ target_width: 340,
306
+ target_height: 350, // tbd can dynamically set later or fix popover dynamic relocatation
307
+ max_height: 400,
308
+ anchor_id: () => `button_${main_toggle_button_manager?.id}`,
309
+ })
310
+ main_toggle_button_manager = create_button_manager({
311
+ type: "outlined",
312
+ is_disabled: () => is_disabled,
313
+ is_compressed: true,
314
+ text: () =>
315
+ !is_null && val?.content
316
+ ? val?.content
317
+ : typeof val != "object" && val
318
+ ? val
319
+ : `Select ${time_formats?.[format]?.name}`,
320
+ popover_target: () => `popover_${popover_manager?.id}`,
321
+ })
322
+ left_month_button_manager = create_button_manager({
323
+ type: "soft",
324
+ is_uniform: true,
325
+ support_icon: "arrow",
326
+ icon_deg: 270,
327
+ is_disabled: () => is_disabled,
328
+ on_click: () => handle_left_month(),
329
+ })
330
+ right_month_button_manager = create_button_manager({
331
+ type: "soft",
332
+ is_uniform: true,
333
+ support_icon: "arrow",
334
+ icon_deg: 90,
335
+ is_disabled: () => is_disabled,
336
+ on_click: () => handle_right_month(),
337
+ })
338
+ prempt_month_year_button_manager = create_button_manager({
339
+ type: "soft",
340
+ text: () =>
341
+ "year" != granularity_dropdown_manager?.val
342
+ ? `${month_names[picker_month - 1]} ${picker_year}`
343
+ : year ?? "Select Year",
344
+ is_disabled: () => is_disabled,
345
+ on_click: () => (is_pick_month_year = !is_pick_month_year),
346
+ })
347
+ year_minus_one_button_manager = create_button_manager({
348
+ type: "outlined",
349
+ text: "-1",
350
+ min_height: 2,
351
+ is_disabled: () => is_disabled,
352
+ on_click: () => set_year((Number.isInteger(year) ? year : picker_year ? picker_year : 0) - 1),
353
+ })
354
+ year_plus_one_button_manager = create_button_manager({
355
+ type: "outlined",
356
+ text: "+1",
357
+ min_height: 2,
358
+ is_disabled: () => is_disabled,
359
+ on_click: () => set_year((Number.isInteger(year) ? year : picker_year ? picker_year : 0) + 1),
360
+ })
361
+ year_minus_hundred_button_manager = create_button_manager({
362
+ type: "outlined",
363
+ text: "-100",
364
+ min_height: 2,
365
+ is_disabled: () => is_disabled,
366
+ on_click: () => set_year((Number.isInteger(year) ? year : picker_year ? picker_year : 0) - 100),
367
+ })
368
+ year_plus_hundred_button_manager = create_button_manager({
369
+ type: "outlined",
370
+ text: "+100",
371
+ min_height: 2,
372
+ is_disabled: () => is_disabled,
373
+ on_click: () => set_year((Number.isInteger(year) ? year : picker_year ? picker_year : 0) + 100),
374
+ })
375
+ back_to_calendar_button_manager = create_button_manager({
376
+ type: "soft",
377
+ text: "Back to Calendar",
378
+ support_icon: "arrow_tailed",
379
+ icon_pos: "left",
380
+ icon_deg: 180,
381
+ is_disabled: () => is_disabled,
382
+ on_click: () => (is_pick_month_year = false),
383
+ })
384
+ hour_number_toggler_manager = create_number_toggler({
385
+ val: config?.hour,
386
+ label: "Hour",
387
+ on_change: (input) => set_hour(input),
388
+ })
389
+ minute_number_toggler_manager = create_number_toggler({
390
+ val: config?.minute,
391
+ label: "Minute",
392
+ on_change: (input) => set_minute(input),
393
+ })
394
+ second_number_toggler_manager = create_number_toggler({
395
+ val: config?.second,
396
+ label: "Second",
397
+ on_change: (input) => set_second(input),
398
+ })
399
+ period_days_number_toggler_manager = create_number_toggler({
400
+ val: config?.days,
401
+ label: "Days",
402
+ })
403
+ period_hours_number_toggler_manager = create_number_toggler({
404
+ val: config?.hours,
405
+ label: "Hours",
406
+ })
407
+ period_minutes_number_toggler_manager = create_number_toggler({
408
+ val: config?.minutes,
409
+ label: "Minutes",
410
+ })
411
+ period_seconds_number_toggler_manager = create_number_toggler({
412
+ val: config?.seconds,
413
+ label: "Seconds",
414
+ })
415
+ set_null_button_manager = create_button_manager({
416
+ type: "outlined",
417
+ text: "Clear",
418
+ is_disabled: () => is_disabled,
419
+ on_click: () => set_val(null),
420
+ })
421
+ set_to_now_button_manager = create_button_manager({
422
+ type: "outlined",
423
+ text: "Set to Now",
424
+ is_disabled: () => is_disabled,
425
+ on_click: () => set_to_now(),
426
+ })
427
+ reset_timezone_button_manager = create_button_manager({
428
+ type: "outlined",
429
+ support_icon: "refresh",
430
+ is_uniform: true,
431
+ is_disabled: () => is_disabled,
432
+ on_click: () => set_timezone(Intl.DateTimeFormat().resolvedOptions().timeZone),
433
+ })
434
+ finish_button_manager = create_button_manager({
435
+ text: "Finish",
436
+ on_click: () => finish(),
437
+ })
438
+ timezone_dropdown_manager = create_dropdown_manager({
439
+ placeholder: "Timezone",
440
+ button_type: "outlined",
441
+ target_width: 180,
442
+ val: time_full?.timezone ?? null,
443
+ selected_font_size: 1.4,
444
+ options: common_timezones.map((h) => ({ key: h?.text, name: `${h?.text} (${h?.offset})` })),
445
+ on_item_click: (input) => set_timezone(input?.key),
446
+ })
447
+ month_dropdown_manager = create_dropdown_manager({
448
+ placeholder: "Month",
449
+ button_type: "outlined",
450
+ target_width: 180,
451
+ selected_font_size: 1.4,
452
+ val: time_full?.month ?? null,
453
+ options: Array.isArray(month_names) ? month_names.map((h, i) => ({ key: i + 1, name: `${i + 1} - ${h}` })) : null,
454
+ on_item_click: (input) => set_month(input?.key),
455
+ })
456
+ granularity_dropdown_manager = create_dropdown_manager({
457
+ placeholder: "Granularity",
458
+ button_type: "outlined",
459
+ target_width: 180,
460
+ selected_font_size: 1.4,
461
+ val: time_full?.granularity ?? "day",
462
+ mt: 1,
463
+ options: Array.isArray(granularity_options)
464
+ ? granularity_options.filter((h) => granularities.some((j) => j == h)).map((h) => ({ key: h, name: h }))
465
+ : null,
466
+ on_item_click: (input) => set_granularity(input?.key),
467
+ })
468
+ set_day_of_month_button_managers()
469
+ set_val(config?.val?.is_null ?? config?.val == null ? null : time_full)
470
+ }
471
+
472
+ init(config)
473
+
474
+ return {
475
+ id,
476
+ get val() {
477
+ return val
478
+ },
479
+ get label() {
480
+ return label
481
+ },
482
+ get is_wide_view() {
483
+ return is_wide_view
484
+ },
485
+ get format() {
486
+ return format
487
+ },
488
+ get picker_year() {
489
+ return picker_year
490
+ },
491
+ get picker_month() {
492
+ return picker_month
493
+ },
494
+ get is_pick_month_year() {
495
+ return is_pick_month_year
496
+ },
497
+ get granularity_options() {
498
+ return granularity_options
499
+ },
500
+ get is_disabled() {
501
+ return is_disabled
502
+ },
503
+ get is_popover() {
504
+ return is_popover
505
+ },
506
+ get is_null() {
507
+ return is_null
508
+ },
509
+ get year() {
510
+ return year
511
+ },
512
+ get day_of_month() {
513
+ return day_of_month
514
+ },
515
+ get day_of_week() {
516
+ return day_of_week
517
+ },
518
+ get day_of_year() {
519
+ return day_of_year
520
+ },
521
+ get week_of_year() {
522
+ return week_of_year
523
+ },
524
+ get datetime() {
525
+ return datetime
526
+ },
527
+ get is_show_granularity_dropdown() {
528
+ return is_show_granularity_dropdown
529
+ },
530
+ get epoch_text_input_manager() {
531
+ return epoch_text_input_manager
532
+ },
533
+ get picker_month_day_of_week() {
534
+ return picker_month_day_of_week
535
+ },
536
+ get picker_days_in_month() {
537
+ return picker_days_in_month
538
+ },
539
+ get boxes_in_picker() {
540
+ return boxes_in_picker
541
+ },
542
+ get popover_manager() {
543
+ return popover_manager
544
+ },
545
+ get left_month_button_manager() {
546
+ return left_month_button_manager
547
+ },
548
+ get right_month_button_manager() {
549
+ return right_month_button_manager
550
+ },
551
+ get prempt_month_year_button_manager() {
552
+ return prempt_month_year_button_manager
553
+ },
554
+ get year_minus_one_button_manager() {
555
+ return year_minus_one_button_manager
556
+ },
557
+ get year_plus_one_button_manager() {
558
+ return year_plus_one_button_manager
559
+ },
560
+ get year_minus_hundred_button_manager() {
561
+ return year_minus_hundred_button_manager
562
+ },
563
+ get year_plus_hundred_button_manager() {
564
+ return year_plus_hundred_button_manager
565
+ },
566
+ get back_to_calendar_button_manager() {
567
+ return back_to_calendar_button_manager
568
+ },
569
+ get hour_number_toggler_manager() {
570
+ return hour_number_toggler_manager
571
+ },
572
+ get minute_number_toggler_manager() {
573
+ return minute_number_toggler_manager
574
+ },
575
+ get second_number_toggler_manager() {
576
+ return second_number_toggler_manager
577
+ },
578
+ get period_days_number_toggler_manager() {
579
+ return period_days_number_toggler_manager
580
+ },
581
+ get period_hours_number_toggler_manager() {
582
+ return period_hours_number_toggler_manager
583
+ },
584
+ get period_minutes_number_toggler_manager() {
585
+ return period_minutes_number_toggler_manager
586
+ },
587
+ get period_seconds_number_toggler_manager() {
588
+ return period_seconds_number_toggler_manager
589
+ },
590
+ get set_null_button_manager() {
591
+ return set_null_button_manager
592
+ },
593
+ get set_to_now_button_manager() {
594
+ return set_to_now_button_manager
595
+ },
596
+ get reset_timezone_button_manager() {
597
+ return reset_timezone_button_manager
598
+ },
599
+ get main_toggle_button_manager() {
600
+ return main_toggle_button_manager
601
+ },
602
+ get finish_button_manager() {
603
+ return finish_button_manager
604
+ },
605
+ get timezone_dropdown_manager() {
606
+ return timezone_dropdown_manager
607
+ },
608
+ get granularity_dropdown_manager() {
609
+ return granularity_dropdown_manager
610
+ },
611
+ get month_dropdown_manager() {
612
+ return month_dropdown_manager
613
+ },
614
+ get day_of_month_button_managers() {
615
+ return day_of_month_button_managers
616
+ },
617
+ get is_show_calendar() {
618
+ return is_show_calendar
619
+ },
620
+ month_names,
621
+ days_of_week_names,
622
+ granularities,
623
+ set_val,
624
+ set_granularity,
625
+ set_timezone,
626
+ set_to_now,
627
+ set_year,
628
+ set_month,
629
+ set_day_of_month,
630
+ set_hour,
631
+ set_minute,
632
+ set_second,
633
+ set_picker_data,
634
+ handle_left_month,
635
+ handle_right_month,
636
+ finish,
637
+ }
638
+ }