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