@ctlyst.id/utils 3.0.0-beta.0 → 3.0.0-beta.2

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 (137) hide show
  1. package/dist/chunk-2DTW2MMP.js +2 -0
  2. package/dist/chunk-2DTW2MMP.js.map +1 -0
  3. package/dist/chunk-2XNWBZU3.js +2 -0
  4. package/dist/chunk-2XNWBZU3.js.map +1 -0
  5. package/dist/chunk-3EZJIWT4.js +2 -0
  6. package/dist/chunk-3EZJIWT4.js.map +1 -0
  7. package/dist/chunk-55ZXUIJW.js +2 -0
  8. package/dist/chunk-55ZXUIJW.js.map +1 -0
  9. package/dist/chunk-AKPPANNV.mjs +2 -0
  10. package/dist/chunk-AKPPANNV.mjs.map +1 -0
  11. package/dist/chunk-BUGYRVTO.js +2 -0
  12. package/dist/chunk-BUGYRVTO.js.map +1 -0
  13. package/dist/chunk-CKFIKCHU.mjs +2 -0
  14. package/dist/chunk-CKFIKCHU.mjs.map +1 -0
  15. package/dist/chunk-CWURCKL2.js +2 -0
  16. package/dist/chunk-CWURCKL2.js.map +1 -0
  17. package/dist/chunk-ELX5IXB4.js +2 -0
  18. package/dist/chunk-ELX5IXB4.js.map +1 -0
  19. package/dist/chunk-FMUZKH36.mjs +2 -0
  20. package/dist/chunk-FMUZKH36.mjs.map +1 -0
  21. package/dist/chunk-HXT73NCV.mjs +2 -0
  22. package/dist/chunk-HXT73NCV.mjs.map +1 -0
  23. package/dist/chunk-IX7NK5RI.js +2 -0
  24. package/dist/chunk-IX7NK5RI.js.map +1 -0
  25. package/dist/chunk-J2L4VY5C.mjs +2 -0
  26. package/dist/chunk-J2L4VY5C.mjs.map +1 -0
  27. package/dist/chunk-KOCPH2DG.js +2 -0
  28. package/dist/chunk-KOCPH2DG.js.map +1 -0
  29. package/dist/chunk-M2YCT7CB.mjs +2 -0
  30. package/dist/chunk-M2YCT7CB.mjs.map +1 -0
  31. package/dist/chunk-N7Z7DA36.js +2 -0
  32. package/dist/chunk-N7Z7DA36.js.map +1 -0
  33. package/dist/chunk-P7FXF4IE.mjs +2 -0
  34. package/dist/chunk-P7FXF4IE.mjs.map +1 -0
  35. package/dist/chunk-Q2LVN3QY.js +2 -0
  36. package/dist/chunk-Q2LVN3QY.js.map +1 -0
  37. package/dist/chunk-QAXXZNJX.mjs +2 -0
  38. package/dist/chunk-QAXXZNJX.mjs.map +1 -0
  39. package/dist/chunk-RATGBP35.js +2 -0
  40. package/dist/chunk-RATGBP35.js.map +1 -0
  41. package/dist/chunk-T3V567AP.mjs +2 -0
  42. package/dist/chunk-T3V567AP.mjs.map +1 -0
  43. package/dist/chunk-THVM4Z3S.mjs +2 -0
  44. package/dist/chunk-THVM4Z3S.mjs.map +1 -0
  45. package/dist/chunk-X4C76ZKK.mjs +2 -0
  46. package/dist/chunk-X4C76ZKK.mjs.map +1 -0
  47. package/dist/chunk-Y5HNEW7L.js +2 -0
  48. package/dist/chunk-Y5HNEW7L.js.map +1 -0
  49. package/dist/chunk-Z6WQXCNF.mjs +2 -0
  50. package/dist/chunk-Z6WQXCNF.mjs.map +1 -0
  51. package/dist/chunk-ZFGFCYYK.mjs +2 -0
  52. package/dist/chunk-ZFGFCYYK.mjs.map +1 -0
  53. package/dist/dom.d.mts +9 -0
  54. package/dist/dom.d.ts +9 -0
  55. package/dist/dom.js +2 -0
  56. package/dist/dom.js.map +1 -0
  57. package/dist/dom.mjs +2 -0
  58. package/dist/dom.mjs.map +1 -0
  59. package/dist/hooks/index.d.mts +13 -0
  60. package/dist/hooks/index.d.ts +13 -0
  61. package/dist/hooks/index.js +2 -0
  62. package/dist/hooks/index.js.map +1 -0
  63. package/dist/hooks/index.mjs +2 -0
  64. package/dist/hooks/index.mjs.map +1 -0
  65. package/dist/hooks/use-callback-ref.d.mts +5 -0
  66. package/dist/hooks/use-callback-ref.d.ts +5 -0
  67. package/dist/hooks/use-callback-ref.js +2 -0
  68. package/dist/hooks/use-callback-ref.js.map +1 -0
  69. package/dist/hooks/use-callback-ref.mjs +2 -0
  70. package/dist/hooks/use-callback-ref.mjs.map +1 -0
  71. package/dist/hooks/use-clipboard.d.mts +18 -0
  72. package/dist/hooks/use-clipboard.d.ts +18 -0
  73. package/dist/hooks/use-clipboard.js +2 -0
  74. package/dist/hooks/use-clipboard.js.map +1 -0
  75. package/dist/hooks/use-clipboard.mjs +2 -0
  76. package/dist/hooks/use-clipboard.mjs.map +1 -0
  77. package/dist/hooks/use-debounce.d.mts +7 -0
  78. package/dist/hooks/use-debounce.d.ts +7 -0
  79. package/dist/hooks/use-debounce.js +2 -0
  80. package/dist/hooks/use-debounce.js.map +1 -0
  81. package/dist/hooks/use-debounce.mjs +2 -0
  82. package/dist/hooks/use-debounce.mjs.map +1 -0
  83. package/dist/hooks/use-dimensions.d.mts +7 -0
  84. package/dist/hooks/use-dimensions.d.ts +7 -0
  85. package/dist/hooks/use-dimensions.js +2 -0
  86. package/dist/hooks/use-dimensions.js.map +1 -0
  87. package/dist/hooks/use-dimensions.mjs +2 -0
  88. package/dist/hooks/use-dimensions.mjs.map +1 -0
  89. package/dist/hooks/use-disclosure.d.mts +20 -0
  90. package/dist/hooks/use-disclosure.d.ts +20 -0
  91. package/dist/hooks/use-disclosure.js +2 -0
  92. package/dist/hooks/use-disclosure.js.map +1 -0
  93. package/dist/hooks/use-disclosure.mjs +2 -0
  94. package/dist/hooks/use-disclosure.mjs.map +1 -0
  95. package/dist/hooks/use-media-query.d.mts +7 -0
  96. package/dist/hooks/use-media-query.d.ts +7 -0
  97. package/dist/hooks/use-media-query.js +2 -0
  98. package/dist/hooks/use-media-query.js.map +1 -0
  99. package/dist/hooks/use-media-query.mjs +2 -0
  100. package/dist/hooks/use-media-query.mjs.map +1 -0
  101. package/dist/hooks/use-number-formatter.d.mts +10 -0
  102. package/dist/hooks/use-number-formatter.d.ts +10 -0
  103. package/dist/hooks/use-number-formatter.js +2 -0
  104. package/dist/hooks/use-number-formatter.js.map +1 -0
  105. package/dist/hooks/use-number-formatter.mjs +2 -0
  106. package/dist/hooks/use-number-formatter.mjs.map +1 -0
  107. package/dist/hooks/use-online-status.d.mts +6 -0
  108. package/dist/hooks/use-online-status.d.ts +6 -0
  109. package/dist/hooks/use-online-status.js +2 -0
  110. package/dist/hooks/use-online-status.js.map +1 -0
  111. package/dist/hooks/use-online-status.mjs +2 -0
  112. package/dist/hooks/use-online-status.mjs.map +1 -0
  113. package/dist/hooks/use-outside-click.d.mts +10 -0
  114. package/dist/hooks/use-outside-click.d.ts +10 -0
  115. package/dist/hooks/use-outside-click.js +2 -0
  116. package/dist/hooks/use-outside-click.js.map +1 -0
  117. package/dist/hooks/use-outside-click.mjs +2 -0
  118. package/dist/hooks/use-outside-click.mjs.map +1 -0
  119. package/dist/hooks/use-safe-layout-effect.d.mts +5 -0
  120. package/dist/hooks/use-safe-layout-effect.d.ts +5 -0
  121. package/dist/hooks/use-safe-layout-effect.js +2 -0
  122. package/dist/hooks/use-safe-layout-effect.js.map +1 -0
  123. package/dist/hooks/use-safe-layout-effect.mjs +2 -0
  124. package/dist/hooks/use-safe-layout-effect.mjs.map +1 -0
  125. package/dist/hooks/use-voucher-tnc.d.mts +60 -0
  126. package/dist/hooks/use-voucher-tnc.d.ts +60 -0
  127. package/dist/hooks/use-voucher-tnc.js +2 -0
  128. package/dist/hooks/use-voucher-tnc.js.map +1 -0
  129. package/dist/hooks/use-voucher-tnc.mjs +2 -0
  130. package/dist/hooks/use-voucher-tnc.mjs.map +1 -0
  131. package/dist/index.d.mts +14 -142
  132. package/dist/index.d.ts +14 -142
  133. package/dist/index.js +1 -685
  134. package/dist/index.js.map +1 -1
  135. package/dist/index.mjs +1 -631
  136. package/dist/index.mjs.map +1 -1
  137. package/package.json +156 -5
package/dist/index.js CHANGED
@@ -1,686 +1,2 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- DiscountType: () => DiscountType,
34
- VoucherType: () => VoucherType,
35
- canUseDOM: () => canUseDOM,
36
- getOwnerDocument: () => getOwnerDocument,
37
- isBrowser: () => isBrowser,
38
- isElement: () => isElement,
39
- isValidEvent: () => isValidEvent,
40
- useCallbackRef: () => use_callback_ref_default,
41
- useClipboard: () => use_clipboard_default,
42
- useDebounce: () => use_debounce_default,
43
- useDimensions: () => use_dimensions_default,
44
- useDisclosure: () => use_disclosure_default,
45
- useMediaQuery: () => use_media_query_default,
46
- useNumberFormatter: () => use_number_formatter_default,
47
- useOnlineStatus: () => use_online_status_default,
48
- useOutsideClick: () => use_outside_click_default,
49
- useSafeLayoutEffect: () => use_safe_layout_effect_default,
50
- useVoucherTnc: () => use_voucher_tnc_default
51
- });
52
- module.exports = __toCommonJS(index_exports);
53
-
54
- // src/dom.ts
55
- var isElement = (el) => {
56
- return el != null && typeof el === "object" && "nodeType" in el && el.nodeType === Node.ELEMENT_NODE;
57
- };
58
- var getOwnerDocument = (node) => {
59
- var _a;
60
- return isElement(node) ? (_a = node.ownerDocument) != null ? _a : document : document;
61
- };
62
- var isValidEvent = (event, ref) => {
63
- var _a;
64
- const target = event.target;
65
- if (event.button > 0) return false;
66
- if (target) {
67
- const doc = getOwnerDocument(target);
68
- if (!doc.contains(target)) return false;
69
- }
70
- return !((_a = ref.current) == null ? void 0 : _a.contains(target));
71
- };
72
- var canUseDOM = () => {
73
- return !!(typeof window !== "undefined" && window.document && window.document.createElement);
74
- };
75
- var isBrowser = canUseDOM();
76
-
77
- // src/hooks/use-callback-ref/use-callback-ref.ts
78
- var import_react = require("react");
79
- var useCallbackRef = (callback, deps = []) => {
80
- const callbackRef = (0, import_react.useRef)(callback);
81
- (0, import_react.useEffect)(() => {
82
- callbackRef.current = callback;
83
- });
84
- return (0, import_react.useCallback)((...args) => {
85
- var _a;
86
- return (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef, ...args);
87
- }, deps);
88
- };
89
- var use_callback_ref_default = useCallbackRef;
90
-
91
- // src/hooks/use-clipboard/use-clipboard.ts
92
- var import_copy_to_clipboard = __toESM(require("copy-to-clipboard"));
93
- var import_react2 = require("react");
94
- var useClipboard = ({ value = "", optionsOrTimeout = {} } = {}) => {
95
- const [hasCopied, setHasCopied] = (0, import_react2.useState)(false);
96
- const [valueState, setValueState] = (0, import_react2.useState)(value);
97
- (0, import_react2.useEffect)(() => setValueState(value), [value]);
98
- const { timeout = 1500, ...copyOptions } = typeof optionsOrTimeout === "number" ? { timeout: optionsOrTimeout } : optionsOrTimeout;
99
- const onCopy = (0, import_react2.useCallback)(() => {
100
- const didCopy = (0, import_copy_to_clipboard.default)(valueState, copyOptions);
101
- setHasCopied(didCopy);
102
- }, [valueState, copyOptions]);
103
- (0, import_react2.useEffect)(() => {
104
- let timeoutId = null;
105
- if (hasCopied) {
106
- timeoutId = window.setTimeout(() => {
107
- setHasCopied(false);
108
- }, timeout);
109
- }
110
- return () => {
111
- if (timeoutId) {
112
- window.clearTimeout(timeoutId);
113
- }
114
- };
115
- }, [timeout, hasCopied]);
116
- return {
117
- value: valueState,
118
- setValue: setValueState,
119
- onCopy,
120
- hasCopied
121
- };
122
- };
123
- var use_clipboard_default = useClipboard;
124
-
125
- // src/hooks/use-debounce/use-debounce.ts
126
- var import_react3 = require("react");
127
- var useDebounce = ({ value, delay = 500 }) => {
128
- const [debouncedValue, setDebouncedValue] = (0, import_react3.useState)(value);
129
- (0, import_react3.useEffect)(() => {
130
- const timer = setTimeout(() => setDebouncedValue(value), delay || 500);
131
- return () => {
132
- clearTimeout(timer);
133
- };
134
- }, [JSON.stringify(value), delay]);
135
- return debouncedValue;
136
- };
137
- var use_debounce_default = useDebounce;
138
-
139
- // src/hooks/use-dimensions/use-dimensions.ts
140
- var import_css_box_model = require("css-box-model");
141
- var import_react5 = require("react");
142
-
143
- // src/hooks/use-safe-layout-effect/use-safe-layout-effect.ts
144
- var import_react4 = require("react");
145
- var useSafeLayoutEffect = isBrowser ? import_react4.useLayoutEffect : import_react4.useEffect;
146
- var use_safe_layout_effect_default = useSafeLayoutEffect;
147
-
148
- // src/hooks/use-dimensions/use-dimensions.ts
149
- var useDimensions = (ref, observe) => {
150
- const [dimensions, setDimensions] = (0, import_react5.useState)(null);
151
- const rafId = (0, import_react5.useRef)();
152
- use_safe_layout_effect_default(() => {
153
- const measure = () => {
154
- const node = ref.current;
155
- if (!node) return;
156
- rafId.current = requestAnimationFrame(() => {
157
- const boxModel = (0, import_css_box_model.getBox)(node);
158
- setDimensions(boxModel);
159
- });
160
- };
161
- measure();
162
- if (observe) {
163
- window.addEventListener("resize", measure);
164
- window.addEventListener("scroll", measure);
165
- }
166
- return () => {
167
- if (observe) {
168
- window.removeEventListener("resize", measure);
169
- window.removeEventListener("scroll", measure);
170
- }
171
- if (rafId.current) {
172
- cancelAnimationFrame(rafId.current);
173
- }
174
- };
175
- }, [observe]);
176
- return dimensions;
177
- };
178
- var use_dimensions_default = useDimensions;
179
-
180
- // src/hooks/use-disclosure/use-disclosure.ts
181
- var import_react6 = require("react");
182
- var useDisclosure = ({
183
- onClose: onCloseProp,
184
- onOpen: onOpenProp,
185
- isOpen: isOpenProp,
186
- defaultIsOpen: defaultIsOpenProp,
187
- id: idProp
188
- } = {}) => {
189
- const [isOpenState, setIsOpenState] = (0, import_react6.useState)(defaultIsOpenProp || false);
190
- const isOpen = isOpenProp !== void 0 ? isOpenProp : isOpenState;
191
- const isControlled = isOpenProp !== void 0;
192
- const uid = (0, import_react6.useId)();
193
- const id2 = idProp != null ? idProp : `disclosure-${uid}`;
194
- const handleOpen = use_callback_ref_default(onOpenProp);
195
- const handleClose = use_callback_ref_default(onCloseProp);
196
- const onClose = (0, import_react6.useCallback)(() => {
197
- if (!isControlled) {
198
- setIsOpenState(false);
199
- }
200
- handleClose == null ? void 0 : handleClose();
201
- }, [isControlled, handleClose]);
202
- const onOpen = (0, import_react6.useCallback)(() => {
203
- if (!isControlled) {
204
- setIsOpenState(true);
205
- }
206
- handleOpen == null ? void 0 : handleOpen();
207
- }, [isControlled, handleOpen]);
208
- const onToggle = (0, import_react6.useCallback)(() => {
209
- if (isOpen) {
210
- onClose();
211
- } else {
212
- onOpen();
213
- }
214
- }, [isOpen, onOpen, onClose]);
215
- const getButtonProps = ({ onClick, ...rest } = {}) => {
216
- return {
217
- ...rest,
218
- "aria-expanded": isOpen,
219
- "aria-controls": id2,
220
- onClick(event) {
221
- onClick == null ? void 0 : onClick(event);
222
- onToggle();
223
- }
224
- };
225
- };
226
- const getDisclosureProps = ({ ...rest } = {}) => {
227
- return {
228
- ...rest,
229
- hidden: !isOpen,
230
- id: id2
231
- };
232
- };
233
- return {
234
- onClose,
235
- onOpen,
236
- onToggle,
237
- getButtonProps,
238
- getDisclosureProps,
239
- isOpen
240
- };
241
- };
242
- var use_disclosure_default = useDisclosure;
243
-
244
- // src/hooks/use-media-query/use-media-query.ts
245
- var import_react7 = require("react");
246
- var useMediaQuery = (query, options = {}) => {
247
- const { ssr = true, fallback } = options;
248
- const queries = Array.isArray(query) ? query : [query];
249
- let fallbackValues = Array.isArray(fallback) ? fallback : [fallback];
250
- fallbackValues = fallbackValues.filter((v) => v != null);
251
- const [value, setValue] = (0, import_react7.useState)(() => {
252
- return queries.map((data, index) => ({
253
- media: data,
254
- matches: ssr ? !!fallbackValues[index] : window.matchMedia(data).matches
255
- }));
256
- });
257
- (0, import_react7.useEffect)(() => {
258
- const win = window;
259
- setValue(
260
- queries.map((data) => ({
261
- media: data,
262
- matches: win.matchMedia(data).matches
263
- }))
264
- );
265
- const mql = queries.map((data) => win.matchMedia(data));
266
- const handler = (evt) => {
267
- setValue((prev) => {
268
- return prev.slice().map((item) => {
269
- if (item.media === evt.media) return { ...item, matches: evt.matches };
270
- return item;
271
- });
272
- });
273
- };
274
- mql.forEach((data) => {
275
- data.addEventListener("change", handler);
276
- });
277
- return () => {
278
- mql.forEach((data) => {
279
- data.removeEventListener("change", handler);
280
- });
281
- };
282
- }, [window]);
283
- return value.map((item) => item.matches);
284
- };
285
- var use_media_query_default = useMediaQuery;
286
-
287
- // src/hooks/use-number-formatter/use-number-formatter.ts
288
- var useNumberFormatter = ({
289
- value,
290
- thousandSeparator = ".",
291
- decimalLength,
292
- decimalSeparator = ",",
293
- prefix = ""
294
- }) => {
295
- const formatNumber = (number) => {
296
- const parts = number.toString().split(".");
297
- const integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);
298
- let decimalPart = "";
299
- if (decimalLength !== void 0) {
300
- if (parts.length > 1 && decimalLength > 0) {
301
- decimalPart = decimalSeparator + parts[1].padEnd(decimalLength, "0").slice(0, decimalLength);
302
- } else if (decimalLength > 0) {
303
- decimalPart = decimalSeparator + "0".repeat(decimalLength);
304
- }
305
- } else if (parts.length > 1) {
306
- decimalPart = decimalSeparator + parts[1];
307
- }
308
- return integerPart + decimalPart;
309
- };
310
- const formattedValue = formatNumber(value);
311
- if (formattedValue.charAt(0) === `-`) {
312
- return formattedValue.replace(/^-/g, `-${prefix}`);
313
- }
314
- return `${prefix}${formattedValue}`;
315
- };
316
- var use_number_formatter_default = useNumberFormatter;
317
-
318
- // src/hooks/use-online-status/use-online-status.ts
319
- var import_react8 = require("react");
320
- var useOnlineStatus = () => {
321
- const [isOnline, setIsOnline] = (0, import_react8.useState)(navigator.onLine);
322
- (0, import_react8.useEffect)(() => {
323
- const handleEvent = () => setIsOnline(navigator.onLine);
324
- window.addEventListener("online", handleEvent);
325
- window.addEventListener("offline", handleEvent);
326
- return () => {
327
- window.removeEventListener("online", handleEvent);
328
- window.removeEventListener("offline", handleEvent);
329
- };
330
- }, []);
331
- return { isOnline, isOffline: !isOnline };
332
- };
333
- var use_online_status_default = useOnlineStatus;
334
-
335
- // src/hooks/use-outside-click/use-outside-click.ts
336
- var import_react9 = require("react");
337
- var useOutsideClick = ({ enabled = true, ref, handler }) => {
338
- const savedHandler = use_callback_ref_default(handler);
339
- const stateRef = (0, import_react9.useRef)({
340
- isPointerDown: false,
341
- ignoreEmulatedMouseEvents: false
342
- });
343
- const state = stateRef.current;
344
- (0, import_react9.useEffect)(() => {
345
- if (!enabled) return void 0;
346
- const onPointerDown = (e) => {
347
- if (isValidEvent(e, ref)) {
348
- state.isPointerDown = true;
349
- }
350
- };
351
- const onMouseUp = (event) => {
352
- if (state.ignoreEmulatedMouseEvents) {
353
- state.ignoreEmulatedMouseEvents = false;
354
- return;
355
- }
356
- if (state.isPointerDown && handler && isValidEvent(event, ref)) {
357
- state.isPointerDown = false;
358
- savedHandler(event);
359
- }
360
- };
361
- const onTouchEnd = (event) => {
362
- state.ignoreEmulatedMouseEvents = true;
363
- if (handler && state.isPointerDown && isValidEvent(event, ref)) {
364
- state.isPointerDown = false;
365
- savedHandler(event);
366
- }
367
- };
368
- const doc = getOwnerDocument(ref.current);
369
- doc.addEventListener("mousedown", onPointerDown, true);
370
- doc.addEventListener("mouseup", onMouseUp, true);
371
- doc.addEventListener("touchstart", onPointerDown, true);
372
- doc.addEventListener("touchend", onTouchEnd, true);
373
- return () => {
374
- doc.removeEventListener("mousedown", onPointerDown, true);
375
- doc.removeEventListener("mouseup", onMouseUp, true);
376
- doc.removeEventListener("touchstart", onPointerDown, true);
377
- doc.removeEventListener("touchend", onTouchEnd, true);
378
- };
379
- }, [handler, ref, savedHandler, state, enabled]);
380
- };
381
- var use_outside_click_default = useOutsideClick;
382
-
383
- // src/hooks/use-voucher-tnc/use-voucher-tnc.types.ts
384
- var VoucherType = /* @__PURE__ */ ((VoucherType2) => {
385
- VoucherType2["product"] = "Product";
386
- VoucherType2["order"] = "Order";
387
- VoucherType2["gift"] = "Gift";
388
- VoucherType2["freeShipping"] = "Free Shipping";
389
- VoucherType2["freeInsurance"] = "Free Insurance";
390
- VoucherType2["bundling"] = "Bundling";
391
- VoucherType2["payment"] = "Payment";
392
- VoucherType2["affiliate"] = "Affiliate";
393
- return VoucherType2;
394
- })(VoucherType || {});
395
- var DiscountType = /* @__PURE__ */ ((DiscountType2) => {
396
- DiscountType2["percentage"] = "percentage";
397
- DiscountType2["amount"] = "amount";
398
- return DiscountType2;
399
- })(DiscountType || {});
400
-
401
- // src/hooks/use-voucher-tnc/get-applies-to.ts
402
- function getAppliesTo(args) {
403
- var _a, _b;
404
- let appliesTo = "";
405
- const { type, eligibilityType, payment } = args;
406
- const collections = (_a = args.collections) != null ? _a : [];
407
- const brands = (_b = args.brands) != null ? _b : [];
408
- if (type === "Product" /* product */) {
409
- if (collections.length > 0) {
410
- appliesTo = `Voucher hanya berlaku untuk produk tertentu dari collection ${collections.map((value) => value.name).join(", ")}.`;
411
- } else if (brands.length > 0) {
412
- appliesTo = `Voucher hanya berlaku untuk produk tertentu dari brand ${brands.map((value) => value.name).join(", ")}.`;
413
- } else if (eligibilityType === "selected_products") {
414
- appliesTo = `Hanya berlaku untuk produk tertentu.`;
415
- }
416
- } else if (type === "Payment" /* payment */) {
417
- const { bankName, paymentMethod, creditBinGroup, debitBinGroup } = payment || {};
418
- const isFullPayment = (paymentMethod || []).some((pay) => (pay || "").includes("(Full Payment)"));
419
- const isInstallment3 = (paymentMethod || []).some((pay) => (pay || "").includes("(Cicilan 3x)"));
420
- const isInstallment6 = (paymentMethod || []).some((pay) => (pay || "").includes("(Cicilan 6x)"));
421
- const isInstallment12 = (paymentMethod || []).some((pay) => (pay || "").includes("(Cicilan 12x)"));
422
- const isInstallment18 = (paymentMethod || []).some((pay) => (pay || "").includes("(Cicilan 18x)"));
423
- const isInstallment = isInstallment3 || isInstallment6 || isInstallment12 || isInstallment18;
424
- const isCredit = isFullPayment || isInstallment;
425
- const isDebit = (paymentMethod || []).some((pay) => (pay || "").includes("Debit Card"));
426
- const debitAndCredit = [
427
- ...isDebit && (debitBinGroup || []).length > 0 ? ["Kartu Debit"] : [],
428
- ...isCredit && (creditBinGroup || []).length > 0 ? ["Kartu Kredit"] : []
429
- ];
430
- let txtCreditSystem = "";
431
- if (isCredit) {
432
- const creditSystem = [
433
- ...isFullPayment ? ["sistem pembayaran penuh"] : [],
434
- ...isInstallment ? ["sistem cicilan"] : []
435
- ];
436
- const installments = [
437
- ...isInstallment3 ? ["3"] : [],
438
- ...isInstallment6 ? ["6"] : [],
439
- ...isInstallment12 ? ["12"] : [],
440
- ...isInstallment18 ? ["18"] : []
441
- ];
442
- let replacedStrInstallment = installments.join(" dan ");
443
- if (installments.length > 2) {
444
- const strInstallment = installments.join(", ");
445
- const lastCharIndex = strInstallment.lastIndexOf(",");
446
- const left = strInstallment.slice(0, lastCharIndex);
447
- const right = strInstallment.slice(lastCharIndex + 1, strInstallment.length);
448
- replacedStrInstallment = [left, right].join(", dan");
449
- }
450
- txtCreditSystem = [
451
- "dengan",
452
- creditSystem.join(" dan "),
453
- ...isInstallment ? [`(${replacedStrInstallment} bulan)`] : []
454
- ].join(" ");
455
- }
456
- if (debitAndCredit.length > 0) {
457
- appliesTo = `${[
458
- "Voucher berlaku untuk pembayaran menggunakan",
459
- debitAndCredit.join(" dan "),
460
- bankName,
461
- txtCreditSystem
462
- ].filter((txt) => (txt || "").length > 0).join(" ")}.`;
463
- }
464
- }
465
- return appliesTo;
466
- }
467
-
468
- // src/hooks/use-voucher-tnc/get-bank-bin.ts
469
- function getBankBin(args) {
470
- const { bankName, creditBinGroup, debitBinGroup } = args;
471
- const txtCreditBin = (creditBinGroup || []).join(", ");
472
- const txtDebitBin = (debitBinGroup || []).join(", ");
473
- return [
474
- ...bankName && txtCreditBin ? [`Voucher berlaku untuk Kartu Kredit ${bankName} dengan Bank Identification Number (BIN): ${txtCreditBin}.`] : [],
475
- ...bankName && txtDebitBin ? [`Voucher berlaku untuk Kartu Debit ${bankName} dengan Bank Identification Number (BIN): ${txtDebitBin}.`] : []
476
- ];
477
- }
478
-
479
- // src/hooks/use-voucher-tnc/get-period.ts
480
- var import_date_fns = require("date-fns");
481
- var import_locale = require("date-fns/locale");
482
- function getPeriodText(args) {
483
- let period = "";
484
- const { dateStart, dateEnd } = args;
485
- if (dateStart && dateEnd) {
486
- const dateStartFormatter = (0, import_date_fns.format)(new Date(dateStart), "yyyy-MM-dd HH:mm");
487
- const dateEndFormatter = (0, import_date_fns.format)(new Date(dateEnd), "yyyy-MM-dd HH:mm");
488
- const dateStartSplitTime = dateStartFormatter.split(" ");
489
- const dateStartSplit = dateStartSplitTime[0].split("-");
490
- const dateStartYear = dateStartSplit[0];
491
- const dateStartMonth = dateStartSplit[1];
492
- const dateEndSplitTime = dateEndFormatter.split(" ");
493
- const dateEndSplit = dateEndSplitTime[0].split("-");
494
- const dateEndYear = dateEndSplit[0];
495
- const dateEndMonth = dateEndSplit[1];
496
- if (dateStartSplitTime[0] === dateEndSplitTime[0]) {
497
- period = `Voucher hanya berlaku di tanggal ${(0, import_date_fns.format)(new Date(dateStart), "d MMM yyyy", { locale: import_locale.id })}.`;
498
- } else if (dateStartYear !== dateEndYear) {
499
- period = `Voucher berlaku dari ${(0, import_date_fns.format)(new Date(dateStart), "d MMM yyyy", { locale: import_locale.id })} - ${(0, import_date_fns.format)(
500
- new Date(dateEnd),
501
- "d MMM yyyy",
502
- { locale: import_locale.id }
503
- )}.`;
504
- } else if (dateStartYear === dateEndYear) {
505
- if (dateStartMonth === dateEndMonth) {
506
- period = `Voucher berlaku dari ${(0, import_date_fns.format)(new Date(dateStart), "d", { locale: import_locale.id })} - ${(0, import_date_fns.format)(
507
- new Date(dateEnd),
508
- "d MMM yyyy",
509
- {
510
- locale: import_locale.id
511
- }
512
- )}.`;
513
- } else {
514
- period = `Voucher berlaku dari ${(0, import_date_fns.format)(new Date(dateStart), "d MMM", { locale: import_locale.id })} - ${(0, import_date_fns.format)(
515
- new Date(dateEnd),
516
- "d MMM yyyy",
517
- { locale: import_locale.id }
518
- )}.`;
519
- }
520
- }
521
- } else if (dateStart) {
522
- period = `Voucher berlaku dari ${(0, import_date_fns.format)(new Date(dateStart), "d MMM yyyy", { locale: import_locale.id })}.`;
523
- }
524
- return period;
525
- }
526
-
527
- // src/hooks/use-voucher-tnc/get-usage-limit.ts
528
- function getVoucherUsageLimit(args) {
529
- const { isOneTimeUsage, isOneTimeUsagePerCard } = args;
530
- if (!isOneTimeUsage && !isOneTimeUsagePerCard) {
531
- return "";
532
- }
533
- let usageLimit = "";
534
- if (isOneTimeUsage) {
535
- usageLimit = "Voucher hanya dapat digunakan 1x per member selama masa berlaku.";
536
- }
537
- if (isOneTimeUsagePerCard) {
538
- usageLimit = "Voucher hanya dapat digunakan 1x per kartu selama masa berlaku.";
539
- }
540
- if (isOneTimeUsage && isOneTimeUsagePerCard) {
541
- usageLimit = "Voucher hanya dapat digunakan 1x transaksi untuk 1 kartu dan 1 member selama masa berlaku.";
542
- }
543
- return usageLimit;
544
- }
545
-
546
- // src/hooks/use-voucher-tnc/use-voucher-method-terms.ts
547
- function useVoucherMethodTerms(args) {
548
- let methodTerm = "";
549
- const {
550
- type,
551
- discountType,
552
- discountValue,
553
- isCheckedMaxFee,
554
- maxDiscountAmount,
555
- transactionTerms,
556
- termsMinTotalAmount,
557
- termsMinQty,
558
- limitFee
559
- } = args;
560
- const safeNumber = (val) => {
561
- if (typeof val === "number") return val;
562
- return !Number.isNaN(Number(val)) ? Number(val) : 0;
563
- };
564
- const formattedMaxDiscount = use_number_formatter_default({ value: safeNumber(maxDiscountAmount), prefix: "Rp" });
565
- const formattedDiscountVal = use_number_formatter_default({ value: safeNumber(discountValue), prefix: "Rp" });
566
- const formattedLimitFee = use_number_formatter_default({ value: safeNumber(limitFee), prefix: "Rp" });
567
- const formattedMinTotalAmount = use_number_formatter_default({ value: safeNumber(termsMinTotalAmount), prefix: "Rp" });
568
- const formattedMinTotalQty = use_number_formatter_default({ value: safeNumber(termsMinQty) });
569
- if (type === "Product" /* product */ || type === "Order" /* order */ || type === "Gift" /* gift */ || type === "Affiliate" /* affiliate */ || type === "Payment" /* payment */) {
570
- if (discountType === "percentage" /* percentage */ && type !== "Gift" /* gift */) {
571
- methodTerm = `Diskon ${discountValue || 0}%`;
572
- if (isCheckedMaxFee) {
573
- methodTerm += ` (hingga ${formattedMaxDiscount})`;
574
- }
575
- } else if (discountType === "amount" /* amount */ && type !== "Gift" /* gift */) {
576
- methodTerm = `Potongan ${formattedDiscountVal}`;
577
- } else {
578
- methodTerm = `Potongan ${formattedLimitFee}`;
579
- }
580
- } else if (type === "Free Shipping" /* freeShipping */) {
581
- methodTerm = "Shipping fee ditanggung oleh voil\xE0.id";
582
- if (isCheckedMaxFee) {
583
- methodTerm += ` (hingga ${formattedLimitFee})`;
584
- }
585
- } else if (type === "Free Insurance" /* freeInsurance */) {
586
- methodTerm = "Insurance fee ditanggung oleh voil\xE0.id";
587
- if (isCheckedMaxFee) {
588
- methodTerm += ` (hingga ${formattedLimitFee})`;
589
- }
590
- }
591
- switch (transactionTerms) {
592
- case 0:
593
- methodTerm += " tanpa minimum pembelian.";
594
- break;
595
- case 1:
596
- methodTerm += ` dengan min. pembelian ${formattedMinTotalAmount}.`;
597
- break;
598
- case 2:
599
- methodTerm += ` dengan min. pembelian ${termsMinQty ? formattedMinTotalQty : 0} item.`;
600
- break;
601
- default:
602
- methodTerm += "";
603
- }
604
- return methodTerm;
605
- }
606
-
607
- // src/hooks/use-voucher-tnc/use-voucher-tnc.ts
608
- var useVoucherTnc = (props) => {
609
- if (props) {
610
- const terms = [];
611
- const {
612
- dateEnd,
613
- dateStart,
614
- type,
615
- discountType,
616
- discountValue,
617
- isCheckedMaxFee,
618
- maxDiscountAmount,
619
- transactionTerms,
620
- termsMinTotalAmount,
621
- termsMinQty,
622
- limitFee,
623
- collections,
624
- brands,
625
- eligibilityType,
626
- isOneTimeUsage,
627
- quota,
628
- isOneTimeUsagePerCard,
629
- payment,
630
- isGiftCard
631
- } = props;
632
- const { bankName = "", creditBinGroup = [], debitBinGroup = [] } = payment || {};
633
- const period = getPeriodText({ dateStart, dateEnd });
634
- const appliesTo = getAppliesTo({ type, collections, brands, eligibilityType, payment });
635
- const methodTerms = useVoucherMethodTerms({
636
- type,
637
- discountType,
638
- discountValue,
639
- isCheckedMaxFee,
640
- maxDiscountAmount,
641
- transactionTerms,
642
- termsMinTotalAmount,
643
- termsMinQty,
644
- limitFee
645
- });
646
- const usageLimit = getVoucherUsageLimit({ isOneTimeUsage, isOneTimeUsagePerCard });
647
- const bankBin = getBankBin({ bankName, creditBinGroup, debitBinGroup });
648
- if (period) terms.push(period);
649
- if (methodTerms) terms.push(methodTerms);
650
- if (type === "Affiliate" /* affiliate */) {
651
- terms.push("Voucher affiliate dapat digabungkan dengan tipe voucher lainnya.");
652
- }
653
- if (appliesTo) terms.push(appliesTo);
654
- if (usageLimit) terms.push(usageLimit);
655
- if (quota > 0) terms.push("Kuota voucher terbatas.");
656
- if ((bankBin || []).length > 0) terms.push(...bankBin);
657
- if (type === "Order" /* order */ || type === "Payment" /* payment */ || type === "Free Insurance" /* freeInsurance */ || type === "Gift" /* gift */ && !isGiftCard) {
658
- terms.push("Hanya berlaku untuk produk tertentu.");
659
- }
660
- return terms;
661
- }
662
- return [];
663
- };
664
- var use_voucher_tnc_default = useVoucherTnc;
665
- // Annotate the CommonJS export names for ESM import in node:
666
- 0 && (module.exports = {
667
- DiscountType,
668
- VoucherType,
669
- canUseDOM,
670
- getOwnerDocument,
671
- isBrowser,
672
- isElement,
673
- isValidEvent,
674
- useCallbackRef,
675
- useClipboard,
676
- useDebounce,
677
- useDimensions,
678
- useDisclosure,
679
- useMediaQuery,
680
- useNumberFormatter,
681
- useOnlineStatus,
682
- useOutsideClick,
683
- useSafeLayoutEffect,
684
- useVoucherTnc
685
- });
1
+ 'use strict';require('./chunk-Q2LVN3QY.js');var chunk2XNWBZU3_js=require('./chunk-2XNWBZU3.js'),chunkELX5IXB4_js=require('./chunk-ELX5IXB4.js'),chunk3EZJIWT4_js=require('./chunk-3EZJIWT4.js'),chunkN7Z7DA36_js=require('./chunk-N7Z7DA36.js'),chunkIX7NK5RI_js=require('./chunk-IX7NK5RI.js'),chunkKOCPH2DG_js=require('./chunk-KOCPH2DG.js'),chunkBUGYRVTO_js=require('./chunk-BUGYRVTO.js'),chunkY5HNEW7L_js=require('./chunk-Y5HNEW7L.js'),chunkCWURCKL2_js=require('./chunk-CWURCKL2.js'),chunkRATGBP35_js=require('./chunk-RATGBP35.js'),chunk2DTW2MMP_js=require('./chunk-2DTW2MMP.js'),chunk55ZXUIJW_js=require('./chunk-55ZXUIJW.js');Object.defineProperty(exports,"useMediaQuery",{enumerable:true,get:function(){return chunk2XNWBZU3_js.a}});Object.defineProperty(exports,"useOnlineStatus",{enumerable:true,get:function(){return chunkELX5IXB4_js.a}});Object.defineProperty(exports,"useOutsideClick",{enumerable:true,get:function(){return chunk3EZJIWT4_js.a}});Object.defineProperty(exports,"DiscountType",{enumerable:true,get:function(){return chunkN7Z7DA36_js.b}});Object.defineProperty(exports,"VoucherType",{enumerable:true,get:function(){return chunkN7Z7DA36_js.a}});Object.defineProperty(exports,"useVoucherTnc",{enumerable:true,get:function(){return chunkN7Z7DA36_js.c}});Object.defineProperty(exports,"useNumberFormatter",{enumerable:true,get:function(){return chunkIX7NK5RI_js.a}});Object.defineProperty(exports,"useClipboard",{enumerable:true,get:function(){return chunkKOCPH2DG_js.a}});Object.defineProperty(exports,"useDebounce",{enumerable:true,get:function(){return chunkBUGYRVTO_js.a}});Object.defineProperty(exports,"useDimensions",{enumerable:true,get:function(){return chunkY5HNEW7L_js.a}});Object.defineProperty(exports,"useSafeLayoutEffect",{enumerable:true,get:function(){return chunkCWURCKL2_js.a}});Object.defineProperty(exports,"canUseDOM",{enumerable:true,get:function(){return chunkRATGBP35_js.d}});Object.defineProperty(exports,"getOwnerDocument",{enumerable:true,get:function(){return chunkRATGBP35_js.b}});Object.defineProperty(exports,"isBrowser",{enumerable:true,get:function(){return chunkRATGBP35_js.e}});Object.defineProperty(exports,"isElement",{enumerable:true,get:function(){return chunkRATGBP35_js.a}});Object.defineProperty(exports,"isValidEvent",{enumerable:true,get:function(){return chunkRATGBP35_js.c}});Object.defineProperty(exports,"useDisclosure",{enumerable:true,get:function(){return chunk2DTW2MMP_js.a}});Object.defineProperty(exports,"useCallbackRef",{enumerable:true,get:function(){return chunk55ZXUIJW_js.a}});//# sourceMappingURL=index.js.map
686
2
  //# sourceMappingURL=index.js.map