@cloudparker/moldex.js 4.1.7 → 4.1.9

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 (222) hide show
  1. package/dist/actions/badge.d.ts +12 -0
  2. package/dist/actions/badge.js +22 -0
  3. package/dist/actions/index.d.ts +3 -0
  4. package/dist/actions/index.js +3 -0
  5. package/dist/actions/no-context-menu.d.ts +3 -0
  6. package/dist/actions/no-context-menu.js +11 -0
  7. package/dist/actions/ripple.css +29 -0
  8. package/dist/actions/ripple.d.ts +7 -0
  9. package/dist/actions/ripple.js +74 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.js +4 -0
  12. package/dist/services/date/date-service.d.ts +52 -0
  13. package/dist/services/date/date-service.js +206 -0
  14. package/dist/services/dialog/dialog-service.d.ts +96 -0
  15. package/dist/services/dialog/dialog-service.js +350 -0
  16. package/dist/services/index.d.ts +12 -0
  17. package/dist/services/index.js +12 -0
  18. package/dist/services/navigation/navigation-service.d.ts +39 -0
  19. package/dist/services/navigation/navigation-service.js +100 -0
  20. package/dist/services/screen/screen-service.d.ts +17 -0
  21. package/dist/services/screen/screen-service.js +40 -0
  22. package/dist/services/toast/toast-service.d.ts +5 -0
  23. package/dist/services/toast/toast-service.js +26 -0
  24. package/dist/services/utils/color-service.d.ts +46 -0
  25. package/dist/services/utils/color-service.js +73 -0
  26. package/dist/services/utils/currency-service.d.ts +91 -0
  27. package/dist/services/utils/currency-service.js +140 -0
  28. package/dist/services/utils/download-service.d.ts +91 -0
  29. package/dist/services/utils/download-service.js +159 -0
  30. package/dist/services/utils/file-service.d.ts +140 -0
  31. package/dist/services/utils/file-service.js +301 -0
  32. package/dist/services/utils/http-service.d.ts +77 -0
  33. package/dist/services/utils/http-service.js +158 -0
  34. package/dist/services/utils/image-service.d.ts +107 -0
  35. package/dist/services/utils/image-service.js +260 -0
  36. package/dist/services/utils/melody-service.d.ts +5 -0
  37. package/dist/services/utils/melody-service.js +41 -0
  38. package/dist/services/utils/utils-service.d.ts +260 -0
  39. package/dist/services/utils/utils-service.js +413 -0
  40. package/dist/stores/referrer-store/referrer-store.svelte.d.ts +3 -0
  41. package/dist/stores/referrer-store/referrer-store.svelte.js +11 -0
  42. package/dist/stores/screen-size/screen-size-store.svelte.d.ts +11 -0
  43. package/dist/stores/screen-size/screen-size-store.svelte.js +33 -0
  44. package/dist/types.d.ts +14 -0
  45. package/dist/types.js +16 -0
  46. package/dist/views/core/button/components/button/button.svelte +161 -0
  47. package/dist/views/core/button/components/button/button.svelte.d.ts +4 -0
  48. package/dist/views/core/button/components/button-back/button-back.svelte +46 -0
  49. package/dist/views/core/button/components/button-back/button-back.svelte.d.ts +11 -0
  50. package/dist/views/core/button/components/button-close/button-close.svelte +8 -0
  51. package/dist/views/core/button/components/button-close/button-close.svelte.d.ts +4 -0
  52. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte +47 -0
  53. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte.d.ts +11 -0
  54. package/dist/views/core/button/components/button-dropdown/button-dropdown.svelte +149 -0
  55. package/dist/views/core/button/components/button-dropdown/button-dropdown.svelte.d.ts +24 -0
  56. package/dist/views/core/button/components/button-list-item/button-list-item.svelte +136 -0
  57. package/dist/views/core/button/components/button-list-item/button-list-item.svelte.d.ts +4 -0
  58. package/dist/views/core/button/components/button-menu/button-menu.svelte +105 -0
  59. package/dist/views/core/button/components/button-menu/button-menu.svelte.d.ts +21 -0
  60. package/dist/views/core/button/components/button-ok/button-ok.svelte +9 -0
  61. package/dist/views/core/button/components/button-ok/button-ok.svelte.d.ts +4 -0
  62. package/dist/views/core/button/components/button-search/button-search.svelte +72 -0
  63. package/dist/views/core/button/components/button-search/button-search.svelte.d.ts +21 -0
  64. package/dist/views/core/button/components/switch/switch.svelte +62 -0
  65. package/dist/views/core/button/components/switch/switch.svelte.d.ts +4 -0
  66. package/dist/views/core/button/index.d.ts +12 -0
  67. package/dist/views/core/button/index.js +12 -0
  68. package/dist/views/core/button/types.d.ts +100 -0
  69. package/dist/views/core/button/types.js +1 -0
  70. package/dist/views/core/common/components/content-area/content-area.svelte +47 -0
  71. package/dist/views/core/common/components/content-area/content-area.svelte.d.ts +12 -0
  72. package/dist/views/core/common/components/loading/loading.svelte +14 -0
  73. package/dist/views/core/common/components/loading/loading.svelte.d.ts +7 -0
  74. package/dist/views/core/common/components/virtual-scrolling/virtual-scrolling-list.svelte +60 -0
  75. package/dist/views/core/common/components/virtual-scrolling/virtual-scrolling-list.svelte.d.ts +11 -0
  76. package/dist/views/core/common/index.d.ts +4 -0
  77. package/dist/views/core/common/index.js +4 -0
  78. package/dist/views/core/dialog/components/cropper-dialog/cropper-dialog.svelte +51 -0
  79. package/dist/views/core/dialog/components/cropper-dialog/cropper-dialog.svelte.d.ts +5 -0
  80. package/dist/views/core/dialog/components/dialog/dialog.svelte +370 -0
  81. package/dist/views/core/dialog/components/dialog/dialog.svelte.d.ts +19 -0
  82. package/dist/views/core/dialog/components/loading-dialog/loading-dialog.svelte +42 -0
  83. package/dist/views/core/dialog/components/loading-dialog/loading-dialog.svelte.d.ts +12 -0
  84. package/dist/views/core/dialog/components/msg-dialog/msg-dialog.svelte +22 -0
  85. package/dist/views/core/dialog/components/msg-dialog/msg-dialog.svelte.d.ts +9 -0
  86. package/dist/views/core/dialog/components/number-field-dialog/number-field-dialog.svelte +57 -0
  87. package/dist/views/core/dialog/components/number-field-dialog/number-field-dialog.svelte.d.ts +14 -0
  88. package/dist/views/core/dialog/components/picker-dialog/picker-dialog.svelte +181 -0
  89. package/dist/views/core/dialog/components/picker-dialog/picker-dialog.svelte.d.ts +5 -0
  90. package/dist/views/core/dialog/components/text-field-dialog/text-field-dialog.svelte +56 -0
  91. package/dist/views/core/dialog/components/text-field-dialog/text-field-dialog.svelte.d.ts +15 -0
  92. package/dist/views/core/dialog/components/textarea-field-dialog/textarea-field-dialog.svelte +56 -0
  93. package/dist/views/core/dialog/components/textarea-field-dialog/textarea-field-dialog.svelte.d.ts +15 -0
  94. package/dist/views/core/dialog/index.d.ts +9 -0
  95. package/dist/views/core/dialog/index.js +9 -0
  96. package/dist/views/core/dialog/types.d.ts +105 -0
  97. package/dist/views/core/dialog/types.js +1 -0
  98. package/dist/views/core/drawer/components/drawer/drawer.svelte +110 -0
  99. package/dist/views/core/drawer/components/drawer/drawer.svelte.d.ts +19 -0
  100. package/dist/views/core/drawer/index.d.ts +2 -0
  101. package/dist/views/core/drawer/index.js +2 -0
  102. package/dist/views/core/icon/components/icon/icon.svelte +27 -0
  103. package/dist/views/core/icon/components/icon/icon.svelte.d.ts +12 -0
  104. package/dist/views/core/icon/components/icon-circle/icon-circle.svelte +17 -0
  105. package/dist/views/core/icon/components/icon-circle/icon-circle.svelte.d.ts +8 -0
  106. package/dist/views/core/icon/index.d.ts +4 -0
  107. package/dist/views/core/icon/index.js +4 -0
  108. package/dist/views/core/icon/services/icon-path-service.d.ts +23 -0
  109. package/dist/views/core/icon/services/icon-path-service.js +24 -0
  110. package/dist/views/core/index.d.ts +16 -0
  111. package/dist/views/core/index.js +16 -0
  112. package/dist/views/core/input/components/checkbox-field/checkbox-field.svelte +83 -0
  113. package/dist/views/core/input/components/checkbox-field/checkbox-field.svelte.d.ts +19 -0
  114. package/dist/views/core/input/components/color-field/color-field.svelte +135 -0
  115. package/dist/views/core/input/components/color-field/color-field.svelte.d.ts +11 -0
  116. package/dist/views/core/input/components/combobox-field/combobox-field.svelte +492 -0
  117. package/dist/views/core/input/components/combobox-field/combobox-field.svelte.d.ts +7 -0
  118. package/dist/views/core/input/components/date-field/date-field.svelte +40 -0
  119. package/dist/views/core/input/components/date-field/date-field.svelte.d.ts +11 -0
  120. package/dist/views/core/input/components/datetime-field/datetime-field.svelte +22 -0
  121. package/dist/views/core/input/components/datetime-field/datetime-field.svelte.d.ts +8 -0
  122. package/dist/views/core/input/components/email-field/email-field.svelte +27 -0
  123. package/dist/views/core/input/components/email-field/email-field.svelte.d.ts +8 -0
  124. package/dist/views/core/input/components/file-field/file-field.svelte +106 -0
  125. package/dist/views/core/input/components/file-field/file-field.svelte.d.ts +13 -0
  126. package/dist/views/core/input/components/input-field/input-field.svelte +336 -0
  127. package/dist/views/core/input/components/input-field/input-field.svelte.d.ts +9 -0
  128. package/dist/views/core/input/components/label/label.svelte +48 -0
  129. package/dist/views/core/input/components/label/label.svelte.d.ts +14 -0
  130. package/dist/views/core/input/components/number-field/number-field.svelte +22 -0
  131. package/dist/views/core/input/components/number-field/number-field.svelte.d.ts +8 -0
  132. package/dist/views/core/input/components/password-field/password-field.svelte +100 -0
  133. package/dist/views/core/input/components/password-field/password-field.svelte.d.ts +12 -0
  134. package/dist/views/core/input/components/phone-field/phone-field.svelte +187 -0
  135. package/dist/views/core/input/components/phone-field/phone-field.svelte.d.ts +12 -0
  136. package/dist/views/core/input/components/radio-field/radio-field.svelte +127 -0
  137. package/dist/views/core/input/components/radio-field/radio-field.svelte.d.ts +4 -0
  138. package/dist/views/core/input/components/range-field/range-field.svelte +120 -0
  139. package/dist/views/core/input/components/range-field/range-field.svelte.d.ts +23 -0
  140. package/dist/views/core/input/components/search-field/search-field.svelte +80 -0
  141. package/dist/views/core/input/components/search-field/search-field.svelte.d.ts +12 -0
  142. package/dist/views/core/input/components/text-field/text-field.svelte +31 -0
  143. package/dist/views/core/input/components/text-field/text-field.svelte.d.ts +11 -0
  144. package/dist/views/core/input/components/textarea-field/textarea-field.svelte +27 -0
  145. package/dist/views/core/input/components/textarea-field/textarea-field.svelte.d.ts +8 -0
  146. package/dist/views/core/input/components/time-field/time-field.svelte +21 -0
  147. package/dist/views/core/input/components/time-field/time-field.svelte.d.ts +8 -0
  148. package/dist/views/core/input/index.d.ts +20 -0
  149. package/dist/views/core/input/index.js +20 -0
  150. package/dist/views/core/input/types.d.ts +159 -0
  151. package/dist/views/core/input/types.js +1 -0
  152. package/dist/views/core/navbar/components/navbar/navbar.svelte +133 -0
  153. package/dist/views/core/navbar/components/navbar/navbar.svelte.d.ts +4 -0
  154. package/dist/views/core/navbar/index.d.ts +3 -0
  155. package/dist/views/core/navbar/index.js +3 -0
  156. package/dist/views/core/navbar/types.d.ts +35 -0
  157. package/dist/views/core/navbar/types.js +1 -0
  158. package/dist/views/core/no-data/components/no-data/no-data.svelte +47 -0
  159. package/dist/views/core/no-data/components/no-data/no-data.svelte.d.ts +13 -0
  160. package/dist/views/core/no-data/index.d.ts +2 -0
  161. package/dist/views/core/no-data/index.js +2 -0
  162. package/dist/views/core/pagination/components/pagination/pagination.svelte +151 -0
  163. package/dist/views/core/pagination/components/pagination/pagination.svelte.d.ts +16 -0
  164. package/dist/views/core/pagination/index.d.ts +2 -0
  165. package/dist/views/core/pagination/index.js +2 -0
  166. package/dist/views/core/progressbar/components/progressbar/progressbar.svelte +55 -0
  167. package/dist/views/core/progressbar/components/progressbar/progressbar.svelte.d.ts +11 -0
  168. package/dist/views/core/progressbar/index.d.ts +2 -0
  169. package/dist/views/core/progressbar/index.js +2 -0
  170. package/dist/views/core/ruler/components/vertical-ruler/verticcal-ruler.svelte +8 -0
  171. package/dist/views/core/ruler/components/vertical-ruler/verticcal-ruler.svelte.d.ts +6 -0
  172. package/dist/views/core/ruler/index.d.ts +2 -0
  173. package/dist/views/core/ruler/index.js +2 -0
  174. package/dist/views/core/screen-detector/components/screen-detector.svelte +17 -0
  175. package/dist/views/core/screen-detector/components/screen-detector.svelte.d.ts +3 -0
  176. package/dist/views/core/screen-detector/index.d.ts +2 -0
  177. package/dist/views/core/screen-detector/index.js +2 -0
  178. package/dist/views/core/sidebar/components/sidebar.svelte +49 -0
  179. package/dist/views/core/sidebar/components/sidebar.svelte.d.ts +12 -0
  180. package/dist/views/core/sidebar/index.d.ts +2 -0
  181. package/dist/views/core/sidebar/index.js +2 -0
  182. package/dist/views/core/spinner/components/spinner/spinner.svelte +21 -0
  183. package/dist/views/core/spinner/components/spinner/spinner.svelte.d.ts +6 -0
  184. package/dist/views/core/spinner/index.d.ts +2 -0
  185. package/dist/views/core/spinner/index.js +2 -0
  186. package/dist/views/core/text/components/text-await/text-await.svelte +23 -0
  187. package/dist/views/core/text/components/text-await/text-await.svelte.d.ts +10 -0
  188. package/dist/views/core/text/components/text-copy/text-copy.svelte +40 -0
  189. package/dist/views/core/text/components/text-copy/text-copy.svelte.d.ts +10 -0
  190. package/dist/views/core/text/components/text-currency/text-currency.svelte +24 -0
  191. package/dist/views/core/text/components/text-currency/text-currency.svelte.d.ts +11 -0
  192. package/dist/views/core/text/components/text-date/text-date.svelte +40 -0
  193. package/dist/views/core/text/components/text-date/text-date.svelte.d.ts +10 -0
  194. package/dist/views/core/text/components/text-email/text-email.svelte +22 -0
  195. package/dist/views/core/text/components/text-email/text-email.svelte.d.ts +9 -0
  196. package/dist/views/core/text/components/text-html/text-html.svelte +7 -0
  197. package/dist/views/core/text/components/text-html/text-html.svelte.d.ts +6 -0
  198. package/dist/views/core/text/components/text-phone/text-phone.svelte +25 -0
  199. package/dist/views/core/text/components/text-phone/text-phone.svelte.d.ts +9 -0
  200. package/dist/views/core/text/index.d.ts +8 -0
  201. package/dist/views/core/text/index.js +8 -0
  202. package/dist/views/core/toast/components/toast/toast.svelte +46 -0
  203. package/dist/views/core/toast/components/toast/toast.svelte.d.ts +7 -0
  204. package/dist/views/core/toast/index.d.ts +3 -0
  205. package/dist/views/core/toast/index.js +3 -0
  206. package/dist/views/core/toast/types.d.ts +8 -0
  207. package/dist/views/core/toast/types.js +1 -0
  208. package/dist/views/extra/fields/country-combobox-field.svelte +42 -0
  209. package/dist/views/extra/fields/country-combobox-field.svelte.d.ts +8 -0
  210. package/dist/views/extra/index.d.ts +6 -0
  211. package/dist/views/extra/index.js +6 -0
  212. package/dist/views/extra/loaders/country-loader.svelte +38 -0
  213. package/dist/views/extra/loaders/country-loader.svelte.d.ts +12 -0
  214. package/dist/views/extra/texts/text-country-state.svelte +48 -0
  215. package/dist/views/extra/texts/text-country-state.svelte.d.ts +6 -0
  216. package/dist/views/extra/texts/text-country.svelte +22 -0
  217. package/dist/views/extra/texts/text-country.svelte.d.ts +6 -0
  218. package/dist/views/extra/types.d.ts +5 -0
  219. package/dist/views/extra/types.js +1 -0
  220. package/dist/views/index.d.ts +2 -0
  221. package/dist/views/index.js +2 -0
  222. package/package.json +2 -1
@@ -0,0 +1,350 @@
1
+ import { mount } from 'svelte';
2
+ import { cropImageFile, FilePickerAccepts, ImageCaptureEnum, OutputImageFormatEnum, processImageFile } from '../utils/image-service';
3
+ import { CropperDialog, Dialog, LoadingDialog, MsgDialog, NumberFieldDialog, PickerDialog, TextareaFieldDialog, TextFieldDialog } from '../../views/index.js';
4
+ import { getDialogSize, isMobileScreen } from '../screen/screen-service';
5
+ export var DialogSizeEnum;
6
+ (function (DialogSizeEnum) {
7
+ DialogSizeEnum["XS"] = "xs";
8
+ DialogSizeEnum["SM"] = "sm";
9
+ DialogSizeEnum["MD"] = "md";
10
+ DialogSizeEnum["LG"] = "lg";
11
+ DialogSizeEnum["XL"] = "xl";
12
+ DialogSizeEnum["FULL"] = "full";
13
+ })(DialogSizeEnum || (DialogSizeEnum = {}));
14
+ function addDialog(props) {
15
+ const dialog = mount(Dialog, { target: document.getElementsByTagName('body')[0], props });
16
+ return dialog;
17
+ }
18
+ export async function openDialog(props = {}) {
19
+ return new Promise((resolve) => {
20
+ let dialog = addDialog({ ...props, onClose, onResult, });
21
+ dialog.openDialog();
22
+ function onClose() {
23
+ if (dialog) {
24
+ if (props.onClose) {
25
+ props.onClose();
26
+ }
27
+ }
28
+ }
29
+ function onResult(value) {
30
+ resolve(value);
31
+ if (props.onResult) {
32
+ props.onResult(value);
33
+ }
34
+ }
35
+ });
36
+ }
37
+ export async function openConfirmDialog(params = {}) {
38
+ let msg = params.msg || 'Are you sure?';
39
+ params.title = params.title || 'Confirm';
40
+ params.footerOkButtonLabel = params.footerOkButtonLabel || 'Confirm';
41
+ return await openDialog({
42
+ bodyComponent: MsgDialog,
43
+ props: { msg },
44
+ ...params,
45
+ hasTitle: true,
46
+ hasHeader: true,
47
+ hasFooter: true,
48
+ hasFooterCloseButton: true,
49
+ hasFooterOkButton: true,
50
+ });
51
+ }
52
+ export async function openAlertDialog(params = {}) {
53
+ let msg = params.msg || 'Alert Information?';
54
+ params.title = params.title || 'Alert';
55
+ params.footerOkButtonLabel = params.footerOkButtonLabel || 'Confirm';
56
+ return await openDialog({
57
+ bodyComponent: MsgDialog,
58
+ props: { msg },
59
+ ...params,
60
+ hasTitle: true,
61
+ hasHeader: true,
62
+ hasFooter: true,
63
+ hasFooterCloseButton: true,
64
+ hasFooterOkButton: false,
65
+ footerCloseButtonLabel: 'OK'
66
+ });
67
+ }
68
+ export async function openDeleteConfirmDialog({ msg = 'Are you sure to delete?', title = 'Delete', footerOkButtonLabel = 'Delete', footerOkButtonClassName = 'bg-red-500 hover:bg-red-700 focus:bg-red-700', ...params } = {}) {
69
+ return await openConfirmDialog({
70
+ msg,
71
+ title,
72
+ footerOkButtonLabel,
73
+ footerOkButtonClassName,
74
+ ...params,
75
+ size: DialogSizeEnum.SM,
76
+ });
77
+ }
78
+ export async function openPickerDialog({ items, value, multiple, hasCheckbox = true, hasArrow, maxlength, maxlengthMsg, identityFieldName, titleFieldName, searchFieldName, subtitleFieldName, hasIcon, iconPath, iconClassName, isCircularIcon, circularIconClassName, itemTileSnippet, ...params }) {
79
+ if (hasArrow) {
80
+ multiple = false;
81
+ hasCheckbox = false;
82
+ }
83
+ return await openDialog({
84
+ bodyComponent: PickerDialog,
85
+ props: {
86
+ items,
87
+ value,
88
+ multiple,
89
+ hasCheckbox,
90
+ hasArrow,
91
+ maxlength,
92
+ maxlengthMsg,
93
+ identityFieldName,
94
+ titleFieldName,
95
+ searchFieldName,
96
+ subtitleFieldName,
97
+ hasIcon,
98
+ iconPath,
99
+ iconClassName,
100
+ isCircularIcon,
101
+ circularIconClassName,
102
+ itemTileSnippet,
103
+ },
104
+ hasHeader: true,
105
+ hasTitle: true,
106
+ hasHeaderBack: isMobileScreen(),
107
+ hasHeaderClose: !isMobileScreen(),
108
+ footerOkButtonLabel: 'Select',
109
+ footerClassName: 'border-t',
110
+ title: 'Pick',
111
+ ...params,
112
+ hasFooter: multiple,
113
+ hasFooterOkButton: multiple,
114
+ hasFooterCloseButton: multiple,
115
+ });
116
+ }
117
+ export async function openNumberFieldDialog({ title, value, label, name, maxlength, fieldClassName, autofocus, required, appearance, size, floatingLabel, ...params } = {}) {
118
+ return await openDialog({
119
+ bodyComponent: NumberFieldDialog,
120
+ props: { value, label, name, maxlength, className: fieldClassName, autofocus, required, appearance, size, floatingLabel, },
121
+ ...params,
122
+ hasHeader: true,
123
+ hasHeaderBack: isMobileScreen(),
124
+ hasHeaderClose: !isMobileScreen(),
125
+ size: getDialogSize(),
126
+ hasTitle: true,
127
+ title: title || 'Prompt',
128
+ hasFooter: true,
129
+ hasFooterCloseButton: true,
130
+ hasFooterOkButton: true,
131
+ footerOkButtonType: 'submit',
132
+ targetFormId: 'number-field-dialog-form'
133
+ });
134
+ }
135
+ export async function openTextFieldDialog({ title, value, label, name, maxlength, fieldClassName, autofocus, required, appearance, size, floatingLabel, ...params } = {}) {
136
+ return await openDialog({
137
+ bodyComponent: TextFieldDialog,
138
+ props: { value, label, name, maxlength, className: fieldClassName, autofocus, required, appearance, size, floatingLabel, },
139
+ ...params,
140
+ hasHeader: true,
141
+ hasHeaderBack: isMobileScreen(),
142
+ hasHeaderClose: !isMobileScreen(),
143
+ size: getDialogSize(),
144
+ hasTitle: true,
145
+ title: title || 'Prompt',
146
+ hasFooter: true,
147
+ hasFooterCloseButton: true,
148
+ hasFooterOkButton: true,
149
+ footerOkButtonType: 'submit',
150
+ targetFormId: 'text-field-dialog-form'
151
+ });
152
+ }
153
+ export async function openTextareaFieldDialog({ title, value, label, name, maxlength, fieldClassName, autofocus, required, appearance, size, floatingLabel, rows, ...params } = {}) {
154
+ return await openDialog({
155
+ bodyComponent: TextareaFieldDialog,
156
+ props: { value, label, name, maxlength, className: fieldClassName, autofocus, required, appearance, size, floatingLabel, rows },
157
+ ...params,
158
+ hasHeader: true,
159
+ hasHeaderBack: isMobileScreen(),
160
+ hasHeaderClose: !isMobileScreen(),
161
+ size: isMobileScreen() ? DialogSizeEnum.FULL : DialogSizeEnum.SM,
162
+ hasTitle: true,
163
+ title: title || 'Prompt',
164
+ hasFooter: true,
165
+ hasFooterCloseButton: true,
166
+ hasFooterOkButton: true,
167
+ footerOkButtonType: 'submit',
168
+ targetFormId: 'textarea-field-dialog-form'
169
+ });
170
+ }
171
+ export async function openLoadingDialog({ msg = "Please wait...", loadingDialogContainerClassName, loadingDialogClassName, loadingDialogSpinnerClassName, loadingDialogMsgClassName, ...params } = {}) {
172
+ let props = {
173
+ bodyComponent: LoadingDialog,
174
+ props: { msg, className: loadingDialogClassName, containerClassName: loadingDialogContainerClassName, spinnerClassName: loadingDialogSpinnerClassName, msgClassName: loadingDialogMsgClassName },
175
+ ...params,
176
+ hasHeader: false,
177
+ hasFooter: false,
178
+ size: DialogSizeEnum.SM,
179
+ };
180
+ let dialog = addDialog(props);
181
+ dialog.openDialog();
182
+ return dialog;
183
+ }
184
+ /**
185
+ * Return Cropped Image DataUrl
186
+ * @param props
187
+ * @returns
188
+ */
189
+ export async function openCropperDialog({ outputWidth, outputFormat = OutputImageFormatEnum.WEBP, outputQuality = 0.8, outputType = 'file', inputImageFile, className, outputAspectRatio, ...params }) {
190
+ return await openDialog({
191
+ bodyComponent: CropperDialog,
192
+ props: {
193
+ outputWidth,
194
+ outputFormat,
195
+ outputQuality,
196
+ outputType,
197
+ inputImageFile,
198
+ className,
199
+ outputAspectRatio,
200
+ },
201
+ ...params,
202
+ hasHeader: true,
203
+ hasFooter: true,
204
+ hasFooterOkButton: true,
205
+ hasFooterCloseButton: true,
206
+ footerOkButtonLabel: params.footerOkButtonLabel || 'CROP',
207
+ hasTitle: true,
208
+ title: params.title || 'Crop Image',
209
+ hasHeaderBack: isMobileScreen(),
210
+ hasHeaderClose: !isMobileScreen(),
211
+ size: getDialogSize(),
212
+ });
213
+ }
214
+ /**
215
+ * Opens a file picker dialog and returns the selected file or files.
216
+ * This function uses native browser APIs to ensure compatibility across different browsers.
217
+ * @param accepts - A string or array of accepted file types (e.g., 'image/*', '.pdf').
218
+ * @param multiple - A boolean indicating if multiple files can be selected.
219
+ * @returns A promise that resolves to a File or an array of File objects, or null if no files were selected.
220
+ */
221
+ export async function openFilePickerDialog(accepts = '*/*', options = { multiple: false }) {
222
+ // Check if the browser supports the required File API and input element
223
+ if (typeof window === 'undefined' || typeof document === 'undefined' || !window.File || !window.FileList || !window.FileReader) {
224
+ console.error('File APIs are not fully supported in this browser.');
225
+ return null;
226
+ }
227
+ return new Promise((resolve, reject) => {
228
+ try {
229
+ // Create an input element of type 'file'
230
+ const inputElement = document.createElement('input');
231
+ inputElement.type = 'file';
232
+ inputElement.style.display = 'none'; // Hide the input element
233
+ // Set accepted file types if provided
234
+ if (Array.isArray(accepts)) {
235
+ inputElement.accept = accepts.join(',');
236
+ }
237
+ else {
238
+ inputElement.accept = accepts;
239
+ }
240
+ // Set multiple attribute based on the parameter
241
+ inputElement.multiple = options.multiple;
242
+ // Listen for changes (i.e., when files are selected)
243
+ inputElement.addEventListener('change', () => {
244
+ // Check if files were selected
245
+ if (inputElement.files) {
246
+ // If multiple is true, return an array of File objects
247
+ if (options.multiple) {
248
+ resolve(Array.from(inputElement.files));
249
+ }
250
+ else {
251
+ // Otherwise, return the first selected File
252
+ resolve(inputElement.files[0]);
253
+ }
254
+ }
255
+ else {
256
+ resolve(null); // No files selected
257
+ }
258
+ });
259
+ // Append the input element to the body and simulate a click to open the dialog
260
+ document.body.appendChild(inputElement);
261
+ inputElement.click();
262
+ // Remove the input element from the DOM after use to prevent memory leaks
263
+ document.body.removeChild(inputElement);
264
+ }
265
+ catch (error) {
266
+ console.error('An error occurred while opening the file picker dialog:', error);
267
+ reject(error); // Handle any unexpected errors
268
+ }
269
+ });
270
+ }
271
+ /**
272
+ * Opens an image picker dialog that supports mobile devices, camera capture, gallery selection, and file explorer.
273
+ * Allows the user to specify output format and quality for the selected images.
274
+ * @param accepts - A string or array of accepted file types (e.g., 'image/*').
275
+ * @param options - Additional options for capturing images (e.g., required resolution, file size, output format).
276
+ * @returns A promise that resolves to a processed File object or an array of File objects, or null if no file was selected.
277
+ */
278
+ export async function openImagePickerDialog(accepts = 'image/*', options = {}) {
279
+ return new Promise((resolve, reject) => {
280
+ try {
281
+ options = options || {};
282
+ if (!options.maxWidth) {
283
+ options.maxWidth = 1920;
284
+ }
285
+ if (!options.maxHeight) {
286
+ options.maxHeight = options.maxWidth;
287
+ }
288
+ if (!options.quality || options.quality < 0) {
289
+ options.quality = 0.8;
290
+ }
291
+ if (options.quality > 1) {
292
+ options.quality = options.quality / 100;
293
+ }
294
+ if (options.outputFormat) {
295
+ options.outputFormat = OutputImageFormatEnum.WEBP;
296
+ }
297
+ // Create an input element of type 'file'
298
+ const inputElement = document.createElement('input');
299
+ inputElement.type = 'file';
300
+ inputElement.accept = Array.isArray(accepts) ? accepts.join(',') : accepts;
301
+ inputElement.multiple = options?.multiple || false;
302
+ inputElement.style.display = 'none';
303
+ // Set capture attribute if specified
304
+ if (options?.capture) {
305
+ inputElement.setAttribute('capture', options.capture);
306
+ }
307
+ // Listen for file selection
308
+ inputElement.addEventListener('change', async () => {
309
+ if (!inputElement.files) {
310
+ resolve(null); // No files selected
311
+ return;
312
+ }
313
+ const files = Array.from(inputElement.files);
314
+ try {
315
+ // Process each selected file and resize/compress/convert if required
316
+ const processedFiles = await Promise.all(files.map((file) => processImageFile(file, options)));
317
+ // Return a single file or an array of files based on the multiple option
318
+ if (options?.multiple) {
319
+ resolve(processedFiles);
320
+ }
321
+ else {
322
+ resolve((processedFiles[0] || null));
323
+ }
324
+ }
325
+ catch (error) {
326
+ reject(error);
327
+ }
328
+ });
329
+ // Append and trigger the file picker
330
+ document.body.appendChild(inputElement);
331
+ inputElement.click();
332
+ document.body.removeChild(inputElement);
333
+ }
334
+ catch (error) {
335
+ reject(error);
336
+ }
337
+ });
338
+ }
339
+ export async function openImagePickerDialogWithCropper({ outputFormat = OutputImageFormatEnum.WEBP, outputWidth = 800, outputQuality = 0.6, outputAspectRatio = 1, dialogSize = DialogSizeEnum.MD, capture, maxHeight, maxSizeInBytes, maxWidth, quality } = {}) {
340
+ const file = (await openImagePickerDialog(FilePickerAccepts.image, {
341
+ capture,
342
+ maxHeight,
343
+ maxSizeInBytes,
344
+ maxWidth,
345
+ quality
346
+ }));
347
+ let croppedFile = await cropImageFile({ inputImageFile: file, outputFormat, outputWidth, outputQuality, outputAspectRatio, dialogSize });
348
+ return croppedFile;
349
+ }
350
+ ;
@@ -0,0 +1,12 @@
1
+ export * from './date/date-service.js';
2
+ export * from './dialog/dialog-service.js';
3
+ export * from './navigation/navigation-service.js';
4
+ export * from './screen/screen-service.js';
5
+ export * from './toast/toast-service.js';
6
+ export * from './utils/utils-service.js';
7
+ export * from './utils/color-service.js';
8
+ export * from './utils/download-service.js';
9
+ export * from './utils/file-service.js';
10
+ export * from './utils/http-service.js';
11
+ export * from './utils/image-service.js';
12
+ export * from './utils/currency-service.js';
@@ -0,0 +1,12 @@
1
+ export * from './date/date-service.js';
2
+ export * from './dialog/dialog-service.js';
3
+ export * from './navigation/navigation-service.js';
4
+ export * from './screen/screen-service.js';
5
+ export * from './toast/toast-service.js';
6
+ export * from './utils/utils-service.js';
7
+ export * from './utils/color-service.js';
8
+ export * from './utils/download-service.js';
9
+ export * from './utils/file-service.js';
10
+ export * from './utils/http-service.js';
11
+ export * from './utils/image-service.js';
12
+ export * from './utils/currency-service.js';
@@ -0,0 +1,39 @@
1
+ export interface NavigationOptions {
2
+ replaceState?: boolean;
3
+ noscroll?: boolean;
4
+ keepfocus?: boolean;
5
+ state?: {
6
+ tabName?: string;
7
+ };
8
+ event?: MouseEvent;
9
+ vibration?: number | number[];
10
+ sound?: [string, number][];
11
+ }
12
+ export type BackStateType = {
13
+ _id: string;
14
+ isModal?: boolean;
15
+ isOffcanvas?: boolean;
16
+ listener: (state: BackStateType) => void;
17
+ data?: any;
18
+ };
19
+ export declare const referrer: {
20
+ referer: string;
21
+ };
22
+ export declare const pushBackState: (obj: BackStateType) => void;
23
+ export declare const popBackState: () => BackStateType | undefined;
24
+ export declare const registerBackPress: (state: BackStateType) => void;
25
+ export declare const addBackKeyListener: (callback: (event?: PopStateEvent) => boolean) => (event: PopStateEvent) => void;
26
+ export declare const removeBackKeyListener: (listener: () => boolean) => void;
27
+ export declare function goBack(): void;
28
+ /**
29
+ * Jump back to the first history entry in this tab (i.e. “home”).
30
+ * Falls back to a hard redirect if history is too shallow or cross‑origin.
31
+ */
32
+ export declare function goHome(): void;
33
+ export declare function createRedirectUrl(): string | null;
34
+ /**
35
+ * Navigate to a URL with support for opening in a new tab, vibration, and sound effects.
36
+ * @param url - The destination URL.
37
+ * @param options - Extended options including vibration and sound.
38
+ */
39
+ export declare function navigate(url: string, options?: NavigationOptions): Promise<void>;
@@ -0,0 +1,100 @@
1
+ // import { goto, pushState } from '$app/navigation';
2
+ import { BROWSER } from 'esm-env';
3
+ import { goto } from '$app/navigation';
4
+ import { createRefererStore } from '../../stores/referrer-store/referrer-store.svelte.js';
5
+ import { vibrate } from '../utils/utils-service.js';
6
+ import { playMelody } from '../utils/melody-service.js';
7
+ export const referrer = createRefererStore();
8
+ let backStateArray = [];
9
+ export const pushBackState = (obj) => {
10
+ backStateArray.push(obj);
11
+ };
12
+ export const popBackState = () => {
13
+ return backStateArray.pop();
14
+ };
15
+ export const registerBackPress = (state) => {
16
+ if (BROWSER) {
17
+ pushBackState(state);
18
+ window.history.pushState({}, '');
19
+ }
20
+ };
21
+ export const addBackKeyListener = (callback) => {
22
+ if (BROWSER) {
23
+ let listener = (event) => {
24
+ if (callback) {
25
+ let result = callback(event);
26
+ if (result) {
27
+ window.history.pushState({}, '');
28
+ }
29
+ }
30
+ };
31
+ window.history.pushState({}, '');
32
+ window.addEventListener('popstate', listener);
33
+ return listener;
34
+ }
35
+ };
36
+ export const removeBackKeyListener = (listener) => {
37
+ if (BROWSER) {
38
+ window.removeEventListener('popstate', listener);
39
+ }
40
+ };
41
+ export function goBack() {
42
+ history.back();
43
+ }
44
+ /**
45
+ * Jump back to the first history entry in this tab (i.e. “home”).
46
+ * Falls back to a hard redirect if history is too shallow or cross‑origin.
47
+ */
48
+ export function goHome() {
49
+ // number of steps back to the first entry
50
+ const stepsBack = -(window.history.length - 1);
51
+ // if we have at least one previous entry, navigate there
52
+ if (stepsBack < 0) {
53
+ window.history.go(stepsBack);
54
+ }
55
+ else {
56
+ // no history to go back to — just load your root
57
+ window.location.replace('/');
58
+ }
59
+ }
60
+ export function createRedirectUrl() {
61
+ let pathname = window.location.pathname;
62
+ let redirectUrl = pathname + window.location.search || '';
63
+ let redirectInSearchParams = new URLSearchParams(window.location.search).get('redirect');
64
+ return redirectInSearchParams || redirectUrl || '';
65
+ }
66
+ /**
67
+ * Navigate to a URL with support for opening in a new tab, vibration, and sound effects.
68
+ * @param url - The destination URL.
69
+ * @param options - Extended options including vibration and sound.
70
+ */
71
+ export async function navigate(url, options = {}) {
72
+ const { event, vibration, sound, ...gotoOptions } = options;
73
+ // Ensure window.open is safe and avoids potential abuse
74
+ const openInNewTab = (targetUrl, tabName) => {
75
+ const sanitizedUrl = new URL(targetUrl, window.location.origin).href;
76
+ const safeTabName = tabName?.replace(/[^a-zA-Z0-9-_]/g, '') || '_blank';
77
+ window.open(sanitizedUrl, safeTabName, 'noopener,noreferrer');
78
+ };
79
+ ;
80
+ try {
81
+ // Handle vibration if supported
82
+ if (vibration) {
83
+ vibrate(vibration);
84
+ }
85
+ // Handle sound playback
86
+ if (sound) {
87
+ playMelody(sound);
88
+ }
89
+ // Handle Ctrl key for opening in a new tab
90
+ if (event && event instanceof MouseEvent && event.ctrlKey) {
91
+ openInNewTab(url, gotoOptions.state?.tabName);
92
+ return;
93
+ }
94
+ // Perform navigation using goto
95
+ goto(url, gotoOptions);
96
+ }
97
+ catch (error) {
98
+ console.error('Error navigating with enhancements:', error);
99
+ }
100
+ }
@@ -0,0 +1,17 @@
1
+ import { DialogSizeEnum } from "../dialog/dialog-service.js";
2
+ import { ScreenSize } from "../../types.js";
3
+ export declare const screenSizeStore: {
4
+ size: ScreenSize;
5
+ readonly isXXL: boolean;
6
+ readonly isXL: boolean;
7
+ readonly isLg: boolean;
8
+ readonly isMd: boolean;
9
+ readonly isSm: boolean;
10
+ readonly isXs: boolean;
11
+ readonly isMobileScreen: any;
12
+ };
13
+ export declare const handleScreenSizeUpdate: (size: number) => void;
14
+ export declare function isSmallScreen(): boolean;
15
+ export declare function isMobileScreen(): boolean;
16
+ export declare function getDialogSize(): DialogSizeEnum.SM | DialogSizeEnum.FULL;
17
+ export declare function isTouchDevice(): boolean;
@@ -0,0 +1,40 @@
1
+ import { createScreenSizeStore, } from "../../stores/screen-size/screen-size-store.svelte.js";
2
+ import { BROWSER } from "esm-env";
3
+ import { DialogSizeEnum } from "../dialog/dialog-service.js";
4
+ import { ScreenSize } from "../../types.js";
5
+ export const screenSizeStore = createScreenSizeStore();
6
+ export const handleScreenSizeUpdate = (size) => {
7
+ // console.log('screenSizeChanged', size)
8
+ if (BROWSER && size) {
9
+ if (size >= 1400) {
10
+ screenSizeStore.size = ScreenSize.XXL;
11
+ }
12
+ else if (size >= 1200) {
13
+ screenSizeStore.size = ScreenSize.XL;
14
+ }
15
+ else if (size >= 992) {
16
+ screenSizeStore.size = ScreenSize.LG;
17
+ }
18
+ else if (size >= 768) {
19
+ screenSizeStore.size = ScreenSize.MD;
20
+ }
21
+ else if (size >= 576) {
22
+ screenSizeStore.size = ScreenSize.SM;
23
+ }
24
+ else if (size < 576) {
25
+ screenSizeStore.size = ScreenSize.SM;
26
+ }
27
+ }
28
+ };
29
+ export function isSmallScreen() {
30
+ return screenSizeStore.isSm || screenSizeStore.isXs;
31
+ }
32
+ export function isMobileScreen() {
33
+ return isSmallScreen();
34
+ }
35
+ export function getDialogSize() {
36
+ return isMobileScreen() ? DialogSizeEnum.FULL : DialogSizeEnum.SM;
37
+ }
38
+ export function isTouchDevice() {
39
+ return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 || window.matchMedia("(pointer: coarse)").matches;
40
+ }
@@ -0,0 +1,5 @@
1
+ import { type ToastPropsType } from "../../views";
2
+ export declare function showToast(props: ToastPropsType | string): void;
3
+ export declare function showSuccessToast(): void;
4
+ export declare function showFailedToast(): void;
5
+ export declare function showErrorToast(): void;
@@ -0,0 +1,26 @@
1
+ import { Toast } from "../../views";
2
+ import { mount } from "svelte";
3
+ function addToast(props) {
4
+ const toast = mount(Toast, { target: document.getElementsByTagName('body')[0], props });
5
+ toast.openToast();
6
+ return toast;
7
+ }
8
+ export function showToast(props) {
9
+ let newProps = { msg: 'Ok' };
10
+ if (typeof props === 'string') {
11
+ newProps.msg = props;
12
+ }
13
+ else {
14
+ newProps = props;
15
+ }
16
+ addToast(newProps);
17
+ }
18
+ export function showSuccessToast() {
19
+ showToast('Success');
20
+ }
21
+ export function showFailedToast() {
22
+ showToast('Failed');
23
+ }
24
+ export function showErrorToast() {
25
+ showToast('Error');
26
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Validates whether a given string is a valid hexadecimal color code.
3
+ *
4
+ * This function checks if a given string matches the pattern for a valid hex color code,
5
+ * which can be either 3 or 6 characters long, prefixed with '#'.
6
+ *
7
+ * @param hex - The string to validate as a hex color code.
8
+ * @returns A boolean indicating whether the string is a valid hex color code.
9
+ *
10
+ * @example
11
+ * console.log(isValidHexColor('#FFF')); // Output: true
12
+ * console.log(isValidHexColor('#123ABC')); // Output: true
13
+ * console.log(isValidHexColor('#1234')); // Output: false
14
+ */
15
+ export declare function isValidHexColor(hex: string): boolean;
16
+ /**
17
+ * Converts a named or RGB color string to its hexadecimal representation.
18
+ *
19
+ * This function creates a temporary DOM element, sets its color property to the provided color string,
20
+ * and retrieves the computed color value. It then converts the RGB color to a hexadecimal format.
21
+ *
22
+ * @param color - A color string, such as a named color ('red'), RGB color ('rgb(255, 0, 0)'), or hex color ('#FF0000').
23
+ * @returns The hexadecimal representation of the color.
24
+ *
25
+ * @throws An error if the color cannot be parsed.
26
+ *
27
+ * @example
28
+ * console.log(colorToHex('red')); // Output: #FF0000
29
+ * console.log(colorToHex('rgb(0, 255, 0)')); // Output: #00FF00
30
+ */
31
+ export declare function colorToHex(color: string): string;
32
+ /**
33
+ * Converts RGB values to a hexadecimal color code.
34
+ *
35
+ * This function takes the red, green, and blue components and converts them to a hexadecimal string.
36
+ * The resulting hex code is formatted as '#RRGGBB'.
37
+ *
38
+ * @param r - The red component (0-255).
39
+ * @param g - The green component (0-255).
40
+ * @param b - The blue component (0-255).
41
+ * @returns The hexadecimal color code in the format '#RRGGBB'.
42
+ *
43
+ * @example
44
+ * console.log(rgbToHex(255, 0, 0)); // Output: #FF0000
45
+ */
46
+ export declare function rgbToHex(r: number, g: number, b: number): string;