@commercelayer/app-elements 5.5.4 → 5.7.0

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 (216) hide show
  1. package/dist/CodeEditorComponent--5lVbv6t.js +720 -0
  2. package/dist/InputDateComponent-NpCZmpgY.js +4887 -0
  3. package/dist/RuleEngineComponent-BbIy4caP.js +1404 -0
  4. package/dist/dictionaries/customers.d.ts +1 -1
  5. package/dist/dictionaries/orders.d.ts +7 -7
  6. package/dist/dictionaries/promotions.d.ts +2 -2
  7. package/dist/dictionaries/returns.d.ts +4 -4
  8. package/dist/dictionaries/shipments.d.ts +4 -4
  9. package/dist/dictionaries/stockTransfers.d.ts +4 -4
  10. package/dist/dictionaries/types.d.ts +2 -2
  11. package/dist/fetchCoreResourcesSuggestions-DLZhtrDX.js +124 -0
  12. package/dist/helpers/appsNavigation.d.ts +2 -2
  13. package/dist/helpers/attachments.d.ts +1 -1
  14. package/dist/helpers/date.d.ts +13 -13
  15. package/dist/helpers/downloadJsonAsFile.d.ts +1 -1
  16. package/dist/helpers/resources.d.ts +4 -4
  17. package/dist/helpers/tracking.d.ts +4 -4
  18. package/dist/hooks/useClickAway.d.ts +1 -1
  19. package/dist/hooks/useEditMetadataOverlay.d.ts +3 -3
  20. package/dist/hooks/useEditTagsOverlay.d.ts +2 -2
  21. package/dist/hooks/useIsChanged.d.ts +1 -1
  22. package/dist/{main-DR-JViDx.js → main-BqlK85T7.js} +26963 -28780
  23. package/dist/main.d.ts +60 -60
  24. package/dist/main.js +1 -1
  25. package/dist/{parseISO-BGAQxnde.js → parseISO-B-bk2SyC.js} +17 -17
  26. package/dist/providers/CoreSdkProvider/CoreSdkProvider.d.ts +1 -1
  27. package/dist/providers/CoreSdkProvider/makeSdkClient.d.ts +1 -1
  28. package/dist/providers/CoreSdkProvider/useCoreApi.d.ts +1 -1
  29. package/dist/providers/GTMProvider.d.ts +1 -1
  30. package/dist/providers/TokenProvider/MockTokenProvider.d.ts +1 -1
  31. package/dist/providers/TokenProvider/TokenProvider.d.ts +1 -1
  32. package/dist/providers/TokenProvider/getAccessTokenFromUrl.d.ts +1 -1
  33. package/dist/providers/TokenProvider/index.d.ts +1 -1
  34. package/dist/providers/TokenProvider/reducer.d.ts +2 -2
  35. package/dist/providers/TokenProvider/storage.d.ts +4 -4
  36. package/dist/providers/TokenProvider/types.d.ts +10 -10
  37. package/dist/providers/TokenProvider/url.d.ts +1 -1
  38. package/dist/providers/TokenProvider/validateToken.d.ts +2 -2
  39. package/dist/providers/createApp.d.ts +1 -1
  40. package/dist/style.css +1 -1
  41. package/dist/tailwind.config.js +141 -142
  42. package/dist/ui/atoms/A.d.ts +1 -1
  43. package/dist/ui/atoms/Alert.d.ts +1 -1
  44. package/dist/ui/atoms/Avatar.d.ts +3 -3
  45. package/dist/ui/atoms/Avatar.utils.d.ts +18 -18
  46. package/dist/ui/atoms/AvatarLetter/colors.d.ts +1 -1
  47. package/dist/ui/atoms/Badge/Badge.d.ts +3 -3
  48. package/dist/ui/atoms/Badge/badgeVariants.d.ts +1 -1
  49. package/dist/ui/atoms/ButtonFilter.d.ts +1 -1
  50. package/dist/ui/atoms/Card.d.ts +15 -11
  51. package/dist/ui/atoms/CodeBlock.d.ts +1 -1
  52. package/dist/ui/atoms/EmptyState.d.ts +1 -1
  53. package/dist/ui/atoms/Grid.d.ts +6 -6
  54. package/dist/ui/atoms/Hint.d.ts +1 -1
  55. package/dist/ui/atoms/Hr.d.ts +2 -2
  56. package/dist/ui/atoms/Icon/Icon.d.ts +2 -2
  57. package/dist/ui/atoms/Icon/icons.d.ts +1 -1
  58. package/dist/ui/atoms/PageHeading/PageHeading.d.ts +3 -3
  59. package/dist/ui/atoms/PageHeading/PageHeadingToolbar.d.ts +2 -2
  60. package/dist/ui/atoms/Progress.d.ts +1 -1
  61. package/dist/ui/atoms/RadialProgress.d.ts +2 -2
  62. package/dist/ui/atoms/Section.d.ts +2 -2
  63. package/dist/ui/atoms/Skeleton.d.ts +1 -1
  64. package/dist/ui/atoms/Spacer.d.ts +3 -3
  65. package/dist/ui/atoms/StatusDot.d.ts +1 -1
  66. package/dist/ui/atoms/StatusIcon.d.ts +2 -2
  67. package/dist/ui/atoms/Table/Table.d.ts +1 -1
  68. package/dist/ui/atoms/Tag.d.ts +3 -3
  69. package/dist/ui/atoms/Text.d.ts +6 -6
  70. package/dist/ui/atoms/Tooltip.d.ts +2 -2
  71. package/dist/ui/composite/ActionButtons/ActionButtons.d.ts +2 -2
  72. package/dist/ui/composite/Address.d.ts +1 -1
  73. package/dist/ui/composite/Dropdown/Dropdown.d.ts +1 -1
  74. package/dist/ui/composite/Dropdown/DropdownItem.d.ts +11 -7
  75. package/dist/ui/composite/Dropdown/DropdownMenu.d.ts +3 -3
  76. package/dist/ui/composite/HomePageLayout.d.ts +3 -3
  77. package/dist/ui/composite/List.d.ts +2 -2
  78. package/dist/ui/composite/ListDetails.d.ts +2 -2
  79. package/dist/ui/composite/ListDetailsItem.d.ts +3 -3
  80. package/dist/ui/composite/ListItem.d.ts +7 -7
  81. package/dist/ui/composite/PageError.d.ts +2 -2
  82. package/dist/ui/composite/PageLayout.d.ts +6 -6
  83. package/dist/ui/composite/Routes/Routes.d.ts +3 -3
  84. package/dist/ui/composite/Routes/index.d.ts +2 -2
  85. package/dist/ui/composite/Routes/utils.d.ts +5 -5
  86. package/dist/ui/composite/SearchBar.d.ts +1 -1
  87. package/dist/ui/composite/Timeline.d.ts +1 -1
  88. package/dist/ui/composite/Toast.d.ts +1 -1
  89. package/dist/ui/composite/Toolbar.d.ts +6 -6
  90. package/dist/ui/forms/CodeEditor/CodeEditorComponent.d.ts +4 -4
  91. package/dist/ui/forms/CodeEditor/HookedCodeEditor.d.ts +1 -1
  92. package/dist/ui/forms/CodeEditor/fetchCoreResourcesSuggestions.d.ts +7 -7
  93. package/dist/ui/forms/CodeEditor/index.d.ts +1 -1
  94. package/dist/ui/forms/Input/Input.d.ts +2 -2
  95. package/dist/ui/forms/InputCheckbox/HookedInputCheckbox.d.ts +1 -1
  96. package/dist/ui/forms/InputCheckbox/InputCheckbox.d.ts +2 -2
  97. package/dist/ui/forms/InputCheckbox/index.d.ts +1 -1
  98. package/dist/ui/forms/InputCheckboxGroup/HookedInputCheckboxGroup.d.ts +1 -1
  99. package/dist/ui/forms/InputCheckboxGroup/InputCheckboxGroupItem.d.ts +2 -2
  100. package/dist/ui/forms/InputCheckboxGroup/index.d.ts +2 -2
  101. package/dist/ui/forms/InputCheckboxGroup/reducer.d.ts +3 -3
  102. package/dist/ui/forms/InputCurrency/HookedInputCurrency.d.ts +1 -1
  103. package/dist/ui/forms/InputCurrency/InputCurrency.d.ts +3 -3
  104. package/dist/ui/forms/InputCurrency/index.d.ts +1 -1
  105. package/dist/ui/forms/InputCurrency/utils.d.ts +1 -1
  106. package/dist/ui/forms/InputCurrencyRange.d.ts +3 -3
  107. package/dist/ui/forms/InputDate/HookedInputDate.d.ts +1 -1
  108. package/dist/ui/forms/InputDateRange/HookedInputDateRange.d.ts +1 -1
  109. package/dist/ui/forms/InputDateRange/InputDateRange.d.ts +5 -5
  110. package/dist/ui/forms/InputDateRange/index.d.ts +1 -1
  111. package/dist/ui/forms/InputFeedback.d.ts +1 -1
  112. package/dist/ui/forms/InputFile.d.ts +1 -1
  113. package/dist/ui/forms/InputJson.d.ts +1 -1
  114. package/dist/ui/forms/InputRadioGroup/HookedInputRadioGroup.d.ts +1 -1
  115. package/dist/ui/forms/InputRadioGroup/index.d.ts +1 -1
  116. package/dist/ui/forms/InputResourceGroup/FullList.d.ts +3 -3
  117. package/dist/ui/forms/InputResourceGroup/HookedInputResourceGroup.d.ts +1 -1
  118. package/dist/ui/forms/InputResourceGroup/InputResourceGroup.d.ts +1 -1
  119. package/dist/ui/forms/InputResourceGroup/index.d.ts +2 -2
  120. package/dist/ui/forms/InputResourceGroup/utils.d.ts +3 -3
  121. package/dist/ui/forms/InputSelect/CreatableComponent.d.ts +1 -1
  122. package/dist/ui/forms/InputSelect/GenericAsyncComponent.d.ts +1 -1
  123. package/dist/ui/forms/InputSelect/HookedInputSelect.d.ts +1 -1
  124. package/dist/ui/forms/InputSelect/InputSelect.d.ts +1 -1
  125. package/dist/ui/forms/InputSelect/SelectComponent.d.ts +1 -1
  126. package/dist/ui/forms/InputSelect/index.d.ts +3 -3
  127. package/dist/ui/forms/InputSelect/styles.d.ts +1 -1
  128. package/dist/ui/forms/InputSelect/utils.d.ts +1 -1
  129. package/dist/ui/forms/InputSimpleSelect/InputSimpleSelect.d.ts +1 -1
  130. package/dist/ui/forms/InputSimpleSelect/index.d.ts +2 -2
  131. package/dist/ui/forms/InputSpinner/HookedInputSpinner.d.ts +1 -1
  132. package/dist/ui/forms/InputSpinner/InputSpinner.d.ts +1 -1
  133. package/dist/ui/forms/InputSpinner/index.d.ts +1 -1
  134. package/dist/ui/forms/InputSwitch/InputSwitch.d.ts +1 -1
  135. package/dist/ui/forms/InputSwitch/index.d.ts +1 -1
  136. package/dist/ui/forms/InputTextArea/index.d.ts +1 -1
  137. package/dist/ui/forms/InputToggleButton/HookedInputToggleButton.d.ts +1 -1
  138. package/dist/ui/forms/InputToggleButton/InputToggleButton.d.ts +4 -4
  139. package/dist/ui/forms/InputToggleButton/index.d.ts +2 -2
  140. package/dist/ui/forms/MarketWithCurrencySelector/HookedMarketWithCurrencySelector.d.ts +2 -2
  141. package/dist/ui/forms/MarketWithCurrencySelector/index.d.ts +1 -1
  142. package/dist/ui/forms/ReactHookForm/HookedValidationApiError.d.ts +1 -1
  143. package/dist/ui/forms/ReactHookForm/setApiFormErrors.d.ts +1 -1
  144. package/dist/ui/forms/ReactHookForm/useValidationFeedback.d.ts +1 -1
  145. package/dist/ui/forms/RuleEngine/Action/ActionListItem.d.ts +1 -1
  146. package/dist/ui/forms/RuleEngine/Action/ActionValue.d.ts +1 -1
  147. package/dist/ui/forms/RuleEngine/Action/index.d.ts +1 -1
  148. package/dist/ui/forms/RuleEngine/Condition/ArrayMatch.d.ts +0 -0
  149. package/dist/ui/forms/RuleEngine/Condition/ConditionListItem.d.ts +1 -1
  150. package/dist/ui/forms/RuleEngine/Condition/ConditionMatcher.d.ts +1 -1
  151. package/dist/ui/forms/RuleEngine/Condition/ConditionValue.d.ts +1 -1
  152. package/dist/ui/forms/RuleEngine/Condition/Connector.d.ts +0 -0
  153. package/dist/ui/forms/RuleEngine/Condition/RangeInputs.d.ts +0 -0
  154. package/dist/ui/forms/RuleEngine/Condition/ValueComponents/InputArrayMatch.d.ts +2 -2
  155. package/dist/ui/forms/RuleEngine/Condition/ValueComponents/InputNumberRange.d.ts +2 -2
  156. package/dist/ui/forms/RuleEngine/Condition/ValueComponents/InputTextRange.d.ts +2 -2
  157. package/dist/ui/forms/RuleEngine/Condition/dictionaries.d.ts +0 -0
  158. package/dist/ui/forms/RuleEngine/Condition/index.d.ts +1 -1
  159. package/dist/ui/forms/RuleEngine/Condition/types.d.ts +0 -0
  160. package/dist/ui/forms/RuleEngine/Condition/utils.d.ts +1 -1
  161. package/dist/ui/forms/RuleEngine/RuleEngineComponent.d.ts +4 -4
  162. package/dist/ui/forms/RuleEngine/RuleEngineContext.d.ts +1 -1
  163. package/dist/ui/forms/RuleEngine/utils.d.ts +6 -6
  164. package/dist/ui/internals/FlexRow.d.ts +1 -1
  165. package/dist/ui/internals/InputWrapper.d.ts +6 -6
  166. package/dist/ui/internals/InteractiveElement.className.d.ts +4 -4
  167. package/dist/ui/internals/Overlay.d.ts +1 -1
  168. package/dist/ui/resources/ResourceAddress/ResourceAddress.d.ts +2 -2
  169. package/dist/ui/resources/ResourceAddress/ResourceAddressFormFields.d.ts +1 -1
  170. package/dist/ui/resources/ResourceAddress/index.d.ts +1 -1
  171. package/dist/ui/resources/ResourceAddress/useResourceAddressOverlay.d.ts +2 -2
  172. package/dist/ui/resources/ResourceAttachments/index.d.ts +1 -1
  173. package/dist/ui/resources/ResourceDetails/useEditDetailsOverlay.d.ts +2 -2
  174. package/dist/ui/resources/ResourceLineItems/index.d.ts +1 -1
  175. package/dist/ui/resources/ResourceListItem/ResourceListItem.d.ts +2 -2
  176. package/dist/ui/resources/ResourceListItem/ResourceListItem.mocks.d.ts +9 -0
  177. package/dist/ui/resources/ResourceListItem/index.d.ts +1 -1
  178. package/dist/ui/resources/ResourceListItem/types.d.ts +3 -3
  179. package/dist/ui/resources/ResourceMetadata/ResourceMetadata.d.ts +2 -2
  180. package/dist/ui/resources/ResourceMetadata/index.d.ts +1 -1
  181. package/dist/ui/resources/ResourceOrderTimeline.d.ts +1 -1
  182. package/dist/ui/resources/ResourcePaymentMethod.d.ts +3 -3
  183. package/dist/ui/resources/ResourceShipmentParcels.mocks.d.ts +2 -2
  184. package/dist/ui/resources/ResourceTags.d.ts +3 -3
  185. package/dist/ui/resources/useResourceFilters/FieldCurrencyRange.d.ts +1 -2
  186. package/dist/ui/resources/useResourceFilters/FiltersForm.d.ts +1 -1
  187. package/dist/ui/resources/useResourceFilters/FiltersNav.d.ts +1 -2
  188. package/dist/ui/resources/useResourceFilters/FiltersSearchBar.d.ts +3 -3
  189. package/dist/ui/resources/useResourceFilters/adaptFormValuesToSdk.d.ts +1 -1
  190. package/dist/ui/resources/useResourceFilters/adaptFormValuesToUrlQuery.d.ts +1 -1
  191. package/dist/ui/resources/useResourceFilters/adaptSdkToMetrics.d.ts +4 -4
  192. package/dist/ui/resources/useResourceFilters/adaptSdkToUrlQuery.d.ts +2 -2
  193. package/dist/ui/resources/useResourceFilters/adaptUrlQueryToFormValues.d.ts +1 -1
  194. package/dist/ui/resources/useResourceFilters/adaptUrlQueryToSdk.d.ts +1 -1
  195. package/dist/ui/resources/useResourceFilters/adaptUrlQueryToUrlQuery.d.ts +1 -1
  196. package/dist/ui/resources/useResourceFilters/adapters.types.d.ts +8 -8
  197. package/dist/ui/resources/useResourceFilters/timeUtils.d.ts +1 -1
  198. package/dist/ui/resources/useResourceFilters/types.d.ts +18 -18
  199. package/dist/ui/resources/useResourceFilters/useResourceFilters.d.ts +10 -11
  200. package/dist/ui/resources/useResourceFilters/utils.d.ts +2 -2
  201. package/dist/ui/resources/useResourceList/adaptMetricsOrderToCore.d.ts +1 -1
  202. package/dist/ui/resources/useResourceList/index.d.ts +1 -1
  203. package/dist/ui/resources/useResourceList/infiniteFetcher.d.ts +5 -5
  204. package/dist/ui/resources/useResourceList/metricsApiClient.d.ts +4 -4
  205. package/dist/ui/resources/useResourceList/reducer.d.ts +5 -5
  206. package/dist/ui/resources/useResourceList/useResourceList.d.ts +10 -10
  207. package/dist/ui/resources/useResourceList/utils.d.ts +1 -1
  208. package/dist/utils/array.d.ts +1 -1
  209. package/dist/utils/htmltags.d.ts +1 -1
  210. package/dist/utils/pagination.d.ts +4 -4
  211. package/dist/vendor.css +1 -1
  212. package/package.json +32 -35
  213. package/dist/CodeEditorComponent-BTinRSNU.js +0 -739
  214. package/dist/InputDateComponent-DbOIWLmQ.js +0 -4964
  215. package/dist/RuleEngineComponent-BTMemWTZ.js +0 -1389
  216. package/dist/fetchCoreResourcesSuggestions-CZkDwjO2.js +0 -126
@@ -1,1389 +0,0 @@
1
- "use client";
2
- import { t as k, b as Z, d as G, j as t, i as E, g as Q, e as P, f as g, h as j, k as V, D as z, l as S, n as p, B as U, o as T, p as K, q as ee, r as te, s as ae, v as $, I as le, C as ne } from "./main-DR-JViDx.js";
3
- import "react-hook-form";
4
- import I, { useReducer as se, useCallback as w, useMemo as re, createContext as ie, useContext as ue, useState as x, useEffect as N, useRef as ce } from "react";
5
- import { a as de } from "./fetchCoreResourcesSuggestions-CZkDwjO2.js";
6
- import { p as A } from "./parseISO-BGAQxnde.js";
7
- function q(e, a) {
8
- const l = e.match(
9
- /(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d{0,7}))?(?:Z|(.)(\d{2}):?(\d{2})?)?/
10
- );
11
- return l ? k(
12
- Date.UTC(
13
- +l[1],
14
- +l[2] - 1,
15
- +l[3],
16
- +l[4] - (+l[9] || 0) * (l[8] == "-" ? -1 : 1),
17
- +l[5] - (+l[10] || 0) * (l[8] == "-" ? -1 : 1),
18
- +l[6],
19
- +((l[7] || "0") + "00").substring(0, 3)
20
- ),
21
- a == null ? void 0 : a.in
22
- ) : k(NaN, a == null ? void 0 : a.in);
23
- }
24
- function D(e, a, l) {
25
- return e == null ? e : Z(e, a, l);
26
- }
27
- function M(e, a) {
28
- return e == null ? !0 : G(e, a);
29
- }
30
- const W = ie(
31
- void 0
32
- );
33
- function oe(e, a) {
34
- var l;
35
- switch (a.type) {
36
- case "SET_PATH": {
37
- const i = { ...e.value };
38
- if (a.value === null)
39
- if (/\.\d+$/.test(a.path)) {
40
- const u = a.path.replace(/\.\d+$/, ""), s = parseInt(((l = a.path.match(/\d+$/)) == null ? void 0 : l[0]) ?? "0", 10), r = Q(i, u);
41
- Array.isArray(r) && (r.splice(s, 1), D(i, u, r), r.length === 0 && u.endsWith(".nested.conditions") && M(i, u.replace(/\.conditions$/, "")));
42
- } else
43
- M(i, a.path);
44
- else
45
- D(i, a.path, a.value);
46
- return {
47
- ...e,
48
- value: i
49
- };
50
- }
51
- case "SET_SELECTED_RULE_INDEX":
52
- return {
53
- ...e,
54
- selectedRuleIndex: a.index
55
- };
56
- case "SET_VALUE":
57
- return E(e.value, a.value) ? e : a.value.rules.length === 0 ? {
58
- selectedRuleIndex: 0,
59
- value: {
60
- rules: [
61
- {
62
- name: "Rule name",
63
- // @ts-expect-error Setting `null` is intentional for rendering an empty action
64
- actions: [null],
65
- // @ts-expect-error Setting `null` is intentional for rendering an empty condition
66
- conditions: [null]
67
- }
68
- ]
69
- }
70
- } : {
71
- ...e,
72
- value: a.value
73
- };
74
- default:
75
- return e;
76
- }
77
- }
78
- function fe({
79
- children: e,
80
- initialValue: a
81
- }) {
82
- const [l, i] = se(oe, {
83
- value: a,
84
- selectedRuleIndex: 0
85
- }), u = w((d, c) => {
86
- i({ type: "SET_PATH", path: d, value: c });
87
- }, []), s = w((d) => {
88
- i({ type: "SET_SELECTED_RULE_INDEX", index: d });
89
- }, []), r = w((d) => {
90
- i({ type: "SET_VALUE", value: d });
91
- }, []), n = re(
92
- () => ({
93
- state: l,
94
- setPath: u,
95
- setSelectedRuleIndex: s,
96
- setValue: r
97
- }),
98
- [l, u, s, r]
99
- );
100
- return /* @__PURE__ */ t.jsx(W.Provider, { value: n, children: e });
101
- }
102
- function y() {
103
- const e = ue(W);
104
- if (e === void 0)
105
- throw new Error("useRuleEngine must be used within a RuleEngineProvider");
106
- return e;
107
- }
108
- const X = P([
109
- "blank",
110
- "present",
111
- "null",
112
- "not_null"
113
- ]);
114
- function R(e) {
115
- return null;
116
- }
117
- function me({
118
- item: e,
119
- pathPrefix: a
120
- }) {
121
- var i, u, s, r;
122
- const { setPath: l } = y();
123
- if (e == null)
124
- return null;
125
- switch (e.type) {
126
- case "buy_x_pay_y":
127
- return /* @__PURE__ */ t.jsxs("div", { className: "w-36 flex items-center gap-0.5", children: [
128
- /* @__PURE__ */ t.jsx(
129
- g,
130
- {
131
- name: `${a}.value.x`,
132
- type: "number",
133
- suffix: "X",
134
- defaultValue: (i = e.value) == null ? void 0 : i.x,
135
- onChange: (n) => {
136
- l(
137
- `${a}.value.x`,
138
- parseInt(n.currentTarget.value, 10)
139
- );
140
- }
141
- }
142
- ),
143
- /* @__PURE__ */ t.jsx(
144
- g,
145
- {
146
- name: `${a}.value.y`,
147
- type: "number",
148
- suffix: "Y",
149
- defaultValue: (u = e.value) == null ? void 0 : u.y,
150
- onChange: (n) => {
151
- l(
152
- `${a}.value.y`,
153
- parseInt(n.currentTarget.value, 10)
154
- );
155
- }
156
- }
157
- )
158
- ] });
159
- case "every_x_discount_y":
160
- return /* @__PURE__ */ t.jsxs("div", { className: "w-36 flex items-center gap-0.5", children: [
161
- /* @__PURE__ */ t.jsx(
162
- g,
163
- {
164
- name: `${a}.value.x`,
165
- type: "number",
166
- suffix: "X",
167
- defaultValue: (s = e.value) == null ? void 0 : s.x,
168
- onChange: (n) => {
169
- l(
170
- `${a}.value.x`,
171
- parseInt(n.currentTarget.value, 10)
172
- );
173
- }
174
- }
175
- ),
176
- /* @__PURE__ */ t.jsx(
177
- g,
178
- {
179
- name: `${a}.value.y`,
180
- type: "number",
181
- suffix: "Y",
182
- defaultValue: (r = e.value) == null ? void 0 : r.y,
183
- onChange: (n) => {
184
- l(
185
- `${a}.value.y`,
186
- parseInt(n.currentTarget.value, 10)
187
- );
188
- }
189
- }
190
- )
191
- ] });
192
- case "fixed_amount":
193
- case "fixed_price":
194
- return /* @__PURE__ */ t.jsx("div", { className: "w-36", children: /* @__PURE__ */ t.jsx(
195
- g,
196
- {
197
- name: `${a}.value`,
198
- type: "number",
199
- defaultValue: e.value,
200
- min: 0,
201
- suffix: "cents",
202
- onChange: (n) => {
203
- l(
204
- `${a}.value`,
205
- parseInt(n.currentTarget.value, 10)
206
- );
207
- }
208
- }
209
- ) });
210
- case "percentage": {
211
- const n = (e.value * 100).toFixed(2);
212
- return /* @__PURE__ */ t.jsx("div", { className: "w-24", children: /* @__PURE__ */ t.jsx(
213
- g,
214
- {
215
- name: `${a}.value`,
216
- type: "number",
217
- defaultValue: n.endsWith(".00") ? n.slice(0, -3) : n,
218
- min: 0,
219
- max: 100,
220
- suffix: "%",
221
- onChange: (d) => {
222
- l(
223
- `${a}.value`,
224
- parseFloat(d.currentTarget.value) / 100
225
- );
226
- }
227
- }
228
- ) });
229
- }
230
- default:
231
- return R();
232
- }
233
- }
234
- function ge({
235
- item: e,
236
- index: a,
237
- onDelete: l
238
- }) {
239
- const {
240
- setPath: i,
241
- state: { selectedRuleIndex: u }
242
- } = y(), s = {
243
- percentage: "Percentage discount",
244
- fixed_amount: "Fixed amount",
245
- fixed_price: "Fixed price",
246
- buy_x_pay_y: "Buy X, Pay Y",
247
- every_x_discount_y: "Every X, Discount Y"
248
- }, r = `rules.${u}.actions.${a}`;
249
- return /* @__PURE__ */ t.jsx("div", { className: "mb-4 last:mb-0", children: /* @__PURE__ */ t.jsxs("div", { className: "bg-gray-50 rounded-md flex items-center", children: [
250
- /* @__PURE__ */ t.jsxs("div", { className: "flex items-center justify-between gap-2 flex-grow p-2", children: [
251
- /* @__PURE__ */ t.jsx("div", { className: "flex-1", children: /* @__PURE__ */ t.jsx(
252
- j,
253
- {
254
- name: `${r}.type`,
255
- defaultValue: e != null ? {
256
- label: s[e.type],
257
- value: e.type
258
- } : void 0,
259
- initialValues: Object.entries(s).map(
260
- ([n, d]) => ({ value: n, label: d })
261
- ),
262
- onSelect: (n) => {
263
- V(n) && i(`${r}.type`, n.value);
264
- }
265
- }
266
- ) }),
267
- /* @__PURE__ */ t.jsx(me, { item: e, pathPrefix: r }),
268
- /* @__PURE__ */ t.jsx("div", { className: "text-black font-bold text-sm", children: "ON" }),
269
- /* @__PURE__ */ t.jsx("div", { className: "flex-1", children: /* @__PURE__ */ t.jsx(
270
- g,
271
- {
272
- name: `${r}.selector`,
273
- type: "text",
274
- defaultValue: e != null ? e.selector : void 0,
275
- onChange: (n) => {
276
- i(`${r}.selector`, n.currentTarget.value);
277
- }
278
- }
279
- ) })
280
- ] }),
281
- l != null && /* @__PURE__ */ t.jsx(
282
- z,
283
- {
284
- className: "w-8 border-l border-gray-100 flex items-center justify-center self-stretch",
285
- dropdownLabel: /* @__PURE__ */ t.jsx("button", { className: "flex items-center justify-center self-stretch flex-grow", children: /* @__PURE__ */ t.jsx(p, { name: "dotsThreeVertical", size: 16, weight: "bold" }) }),
286
- dropdownItems: /* @__PURE__ */ t.jsx(t.Fragment, { children: /* @__PURE__ */ t.jsx(
287
- S,
288
- {
289
- label: "Delete",
290
- onClick: () => {
291
- i(`${r}`, null), l();
292
- }
293
- }
294
- ) })
295
- }
296
- )
297
- ] }) });
298
- }
299
- function xe({
300
- actions: e
301
- }) {
302
- const [a, l] = x(0), {
303
- setPath: i,
304
- state: { selectedRuleIndex: u }
305
- } = y();
306
- return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
307
- /* @__PURE__ */ t.jsx("div", { children: e == null ? void 0 : e.map((s, r, n) => /* @__PURE__ */ t.jsx(
308
- ge,
309
- {
310
- item: s,
311
- index: r,
312
- onDelete: n.length > 1 ? () => {
313
- l((d) => d + 1);
314
- } : void 0
315
- },
316
- `${u}-${r}-${a}`
317
- )) }),
318
- /* @__PURE__ */ t.jsx("div", { className: "mt-6", children: /* @__PURE__ */ t.jsxs(
319
- U,
320
- {
321
- size: "small",
322
- variant: "secondary",
323
- alignItems: "center",
324
- onClick: () => {
325
- i(
326
- `rules.${u}.actions.${(e == null ? void 0 : e.length) ?? 0}`,
327
- void 0
328
- );
329
- },
330
- children: [
331
- /* @__PURE__ */ t.jsx(p, { name: "plusCircle" }),
332
- " Add action"
333
- ]
334
- }
335
- ) })
336
- ] });
337
- }
338
- function Y(e) {
339
- const [a, l] = x(void 0);
340
- return N(() => {
341
- (e == null ? void 0 : e.field) != null && de(e.field).then((i) => {
342
- l(i);
343
- }).catch((i) => {
344
- console.error("Error fetching field info:", i);
345
- });
346
- }, [e == null ? void 0 : e.field]), { infos: a };
347
- }
348
- function B(e) {
349
- if (typeof e == "string")
350
- return T(q(e)) ? "datetime" : "string";
351
- if (typeof e == "number")
352
- return "integer";
353
- if (typeof e == "boolean")
354
- return "boolean";
355
- if (Array.isArray(e)) {
356
- if (typeof e[0] == "string")
357
- return T(q(e[0])) ? "datetime" : "string";
358
- if (typeof e[0] == "number")
359
- return "integer";
360
- }
361
- return "string";
362
- }
363
- function he({
364
- item: e,
365
- pathPrefix: a
366
- }) {
367
- var s, r;
368
- const { setPath: l } = y(), { infos: i } = Y(e);
369
- let u = (s = i == null ? void 0 : i.field) == null ? void 0 : s.type;
370
- return u == null && (u = B(e == null ? void 0 : e.value)), /* @__PURE__ */ t.jsx(
371
- j,
372
- {
373
- name: `${a}.matcher`,
374
- value: e != null ? {
375
- label: ((r = O.find((n) => n.matcher === e.matcher && (u != null && n.fieldTypes.includes(u) || u == null))) == null ? void 0 : r.label) ?? // eslint-disable-next-line no-irregular-whitespace
376
- (e.matcher != null ? `⚠️   ${e.matcher}` : ""),
377
- value: e.matcher
378
- } : void 0,
379
- initialValues: O.filter(({ fieldTypes: n, visible: d }) => d !== !1 && n.includes(u)).map(({ matcher: n, label: d }) => ({ value: n, label: d })),
380
- onSelect: (n) => {
381
- V(n) && (l(`${a}.matcher`, n.value), X.includes(
382
- n.value
383
- ) && l(`${a}.value`, null));
384
- }
385
- }
386
- );
387
- }
388
- const O = [
389
- {
390
- /** Matches if field value equals provided value
391
- * @field Integer, String, Datetime, Boolean
392
- * @value Integer, String, Datetime, Boolean
393
- */
394
- matcher: "eq",
395
- label: "equals",
396
- fieldTypes: ["integer", "string", "datetime", "boolean"]
397
- },
398
- {
399
- /** Matches if field value is not equal to provided value
400
- * @field Integer, String, Datetime, Boolean
401
- * @value Integer, String, Datetime, Boolean
402
- */
403
- matcher: "not_eq",
404
- label: "not equals",
405
- fieldTypes: ["integer", "string", "datetime", "boolean"]
406
- },
407
- {
408
- /** Matches if field value is less than provided value
409
- * @field Integer, Datetime
410
- * @value Integer, Datetime
411
- */
412
- matcher: "lt",
413
- label: "<",
414
- fieldTypes: ["integer", "datetime"]
415
- },
416
- {
417
- /** Matches if field value is less than or equal to provided value
418
- * @field Integer, Datetime
419
- * @value Integer, Datetime
420
- */
421
- matcher: "lteq",
422
- label: "≤",
423
- fieldTypes: ["integer", "datetime"]
424
- },
425
- {
426
- /** Matches if field value is greater than provided value
427
- * @field Integer, Datetime
428
- * @value Integer, Datetime
429
- */
430
- matcher: "gt",
431
- label: ">",
432
- fieldTypes: ["integer", "datetime"]
433
- },
434
- {
435
- /** Matches if field value is greater than or equal to provided value
436
- * @field Integer, Datetime
437
- * @value Integer, Datetime
438
- */
439
- matcher: "gteq",
440
- label: "≥",
441
- fieldTypes: ["integer", "datetime"]
442
- },
443
- {
444
- /** Matches if field value is a multiple of provided value
445
- * @field Integer
446
- * @value Integer
447
- */
448
- matcher: "multiple",
449
- label: "is a multiple of",
450
- fieldTypes: ["integer"]
451
- },
452
- {
453
- /** Matches if field value matches regex pattern
454
- * @field String
455
- * @value String
456
- */
457
- matcher: "matches",
458
- label: "matches regex",
459
- fieldTypes: ["string"]
460
- },
461
- {
462
- /** Matches if field value does not match regex pattern
463
- * @field String
464
- * @value String
465
- */
466
- matcher: "does_not_match",
467
- label: "doesn't match regex",
468
- fieldTypes: ["string"]
469
- },
470
- {
471
- /** Matches if field value starts with provided string
472
- * @field String
473
- * @value String
474
- */
475
- matcher: "start_with",
476
- label: "starts with",
477
- fieldTypes: ["string"]
478
- },
479
- {
480
- /** Matches if field value does not start with provided string
481
- * @field String
482
- * @value String
483
- */
484
- matcher: "not_start_with",
485
- label: "doesn't start with",
486
- fieldTypes: ["string"]
487
- },
488
- {
489
- /** Matches if field value ends with provided string
490
- * @field String
491
- * @value String
492
- */
493
- matcher: "end_with",
494
- label: "ends with",
495
- fieldTypes: ["string"]
496
- },
497
- {
498
- /** Matches if field value does not end with provided string
499
- * @field String
500
- * @value String
501
- */
502
- matcher: "not_end_with",
503
- label: "doesn't end with",
504
- fieldTypes: ["string"]
505
- },
506
- {
507
- /** Matches if field value is between two values (exclusive)
508
- * @field Integer, Datetime
509
- * @value Array
510
- */
511
- matcher: "gt_lt",
512
- label: "> and <",
513
- fieldTypes: ["integer"]
514
- },
515
- {
516
- /** Matches if field value is between two values (inclusive start, exclusive end)
517
- * @field Integer, Datetime
518
- * @value Array
519
- */
520
- matcher: "gteq_lt",
521
- label: "≥ and <",
522
- fieldTypes: ["integer"]
523
- },
524
- {
525
- /** Matches if field value is greater than first and less than or equal to second
526
- * @field Integer, Datetime
527
- * @value Array
528
- */
529
- matcher: "gt_lteq",
530
- label: "> and ≤",
531
- fieldTypes: ["integer"]
532
- },
533
- {
534
- /** Matches if field value is between two values (inclusive)
535
- * @field Integer, Datetime
536
- * @value Array
537
- */
538
- matcher: "gteq_lteq",
539
- label: "≥ and ≤",
540
- fieldTypes: ["integer"]
541
- },
542
- {
543
- /** Matches if field value is between two values (exclusive)
544
- * @field Integer, Datetime
545
- * @value Array
546
- */
547
- matcher: "gt_lt",
548
- label: "date range",
549
- visible: !1,
550
- fieldTypes: ["datetime"]
551
- },
552
- {
553
- /** Matches if field value is between two values (inclusive start, exclusive end)
554
- * @field Integer, Datetime
555
- * @value Array
556
- */
557
- matcher: "gteq_lt",
558
- label: "date range",
559
- visible: !1,
560
- fieldTypes: ["datetime"]
561
- },
562
- {
563
- /** Matches if field value is greater than first and less than or equal to second
564
- * @field Integer, Datetime
565
- * @value Array
566
- */
567
- matcher: "gt_lteq",
568
- label: "date range",
569
- visible: !1,
570
- fieldTypes: ["datetime"]
571
- },
572
- {
573
- /** Matches if field value is between two values (inclusive)
574
- * @field Integer, Datetime
575
- * @value Array
576
- */
577
- matcher: "gteq_lteq",
578
- label: "date range",
579
- visible: !0,
580
- fieldTypes: ["datetime"]
581
- },
582
- {
583
- /** Matches if field value is in provided array
584
- * @field Integer, String, Datetime
585
- * @value Array
586
- */
587
- matcher: "is_in",
588
- label: "is one of",
589
- fieldTypes: ["integer", "string", "datetime"]
590
- },
591
- {
592
- /** Matches if field value is not in provided array
593
- * @field Integer, String, Datetime
594
- * @value Array
595
- */
596
- matcher: "is_not_in",
597
- label: "is not one of",
598
- fieldTypes: ["integer", "string", "datetime"]
599
- },
600
- {
601
- /** Matches objects within arrays that meet specified requirements
602
- * @field Array
603
- * @value Object
604
- */
605
- matcher: "array_match",
606
- label: "is",
607
- fieldTypes: ["integer", "string", "datetime"]
608
- },
609
- {
610
- /** Matches if field value is null or empty string */
611
- matcher: "blank",
612
- label: "is blank",
613
- fieldTypes: ["integer", "string", "datetime", "boolean"]
614
- },
615
- {
616
- /** Matches if field value is null */
617
- matcher: "null",
618
- label: "is null",
619
- fieldTypes: ["integer", "string", "datetime", "boolean"]
620
- },
621
- {
622
- /** Matches if field value is not null */
623
- matcher: "not_null",
624
- label: "is not null",
625
- fieldTypes: ["integer", "string", "datetime", "boolean"]
626
- },
627
- {
628
- /** Matches if field value is not null */
629
- matcher: "present",
630
- label: "is present",
631
- fieldTypes: ["integer", "string", "datetime", "boolean"]
632
- }
633
- ], F = {
634
- in_and: {
635
- label: "all of"
636
- },
637
- in_or: {
638
- label: "at least one of"
639
- },
640
- not_in_and: {
641
- label: "not any of"
642
- },
643
- not_in_or: {
644
- label: "not at least one of"
645
- }
646
- };
647
- function be({
648
- value: e,
649
- pathPrefix: a
650
- }) {
651
- return (typeof e != "object" || Array.isArray(e) || e === null) && (e = {
652
- in_and: []
653
- }), /* @__PURE__ */ t.jsx("div", { children: Object.entries(e).map(([l, i], u) => /* @__PURE__ */ t.jsx(
654
- ye,
655
- {
656
- pathPrefix: a,
657
- defaultValue: i,
658
- initialMatcher: l
659
- },
660
- `${a}.${u}`
661
- )) });
662
- }
663
- function ye({
664
- initialMatcher: e,
665
- defaultValue: a,
666
- pathPrefix: l
667
- }) {
668
- const [i, u] = x(e), [s, r] = x(e), [n, d] = x(a), { setPath: c } = y();
669
- return N(() => {
670
- i !== s && (c(`${l}.${i}`, null), u(s)), c(`${l}.${s}`, n);
671
- }, [s, n, c]), /* @__PURE__ */ t.jsxs("div", { className: "flex gap-2 last-of-type:mt-2", children: [
672
- /* @__PURE__ */ t.jsx("div", { className: "flex-shrink-0", children: /* @__PURE__ */ t.jsx(
673
- j,
674
- {
675
- defaultValue: [
676
- { value: s, label: F[s].label }
677
- ],
678
- initialValues: Object.entries(F).map(
679
- ([o, { label: f }]) => ({
680
- value: o,
681
- label: f
682
- })
683
- ),
684
- onSelect: (o) => {
685
- V(o) && r(o.value);
686
- }
687
- }
688
- ) }),
689
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ t.jsx(
690
- j,
691
- {
692
- isMulti: !0,
693
- isCreatable: !0,
694
- defaultValue: (Array.isArray(n) ? n : []).map((o) => ({
695
- value: o,
696
- label: o.toString()
697
- })),
698
- initialValues: [],
699
- onSelect: (o) => {
700
- K(o) && d(
701
- o.map(
702
- (f) => typeof f.value == "boolean" ? f.value.toString() : f.value
703
- )
704
- );
705
- }
706
- }
707
- ) })
708
- ] });
709
- }
710
- function ve({
711
- value: e,
712
- onChange: a
713
- }) {
714
- const [l, i] = x(
715
- Array.isArray(e) && typeof e[0] == "number" ? e[0] : null
716
- ), [u, s] = x(
717
- Array.isArray(e) && typeof e[1] == "number" ? e[1] : null
718
- );
719
- return /* @__PURE__ */ t.jsxs("div", { className: "flex items-center gap-4", children: [
720
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ t.jsx(
721
- g,
722
- {
723
- type: "number",
724
- placeholder: "Min",
725
- value: l ?? "",
726
- onChange: (r) => {
727
- const n = parseInt(r.currentTarget.value, 10);
728
- i(isNaN(n) ? null : n), a([isNaN(n) ? null : n, u]);
729
- }
730
- }
731
- ) }),
732
- /* @__PURE__ */ t.jsx("span", { className: "text-gray-300", children: "to" }),
733
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ t.jsx(
734
- g,
735
- {
736
- type: "number",
737
- placeholder: "Max",
738
- value: u ?? "",
739
- onChange: (r) => {
740
- const n = parseInt(r.currentTarget.value, 10);
741
- s(isNaN(n) ? null : n), a([l, isNaN(n) ? null : n]);
742
- }
743
- }
744
- ) })
745
- ] });
746
- }
747
- function pe({
748
- value: e,
749
- onChange: a
750
- }) {
751
- const [l, i] = x(
752
- Array.isArray(e) && typeof e[0] == "string" ? e[0] : null
753
- ), [u, s] = x(
754
- Array.isArray(e) && typeof e[1] == "string" ? e[1] : null
755
- );
756
- return /* @__PURE__ */ t.jsxs("div", { className: "flex items-center gap-4", children: [
757
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ t.jsx(
758
- g,
759
- {
760
- type: "text",
761
- placeholder: "Min",
762
- value: l ?? "",
763
- onChange: (r) => {
764
- const n = r.currentTarget.value;
765
- i(n), a([n, u]);
766
- }
767
- }
768
- ) }),
769
- /* @__PURE__ */ t.jsx("span", { className: "text-gray-300", children: "to" }),
770
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow", children: /* @__PURE__ */ t.jsx(
771
- g,
772
- {
773
- type: "text",
774
- placeholder: "Max",
775
- value: u ?? "",
776
- onChange: (r) => {
777
- const n = r.currentTarget.value;
778
- s(n), a([l, n]);
779
- }
780
- }
781
- ) })
782
- ] });
783
- }
784
- function je({
785
- item: e,
786
- pathPrefix: a
787
- }) {
788
- var d;
789
- const { setPath: l } = y(), { infos: i } = Y(e), u = `${a}.value`;
790
- if (e == null || X.includes(
791
- e.matcher
792
- ))
793
- return null;
794
- const s = e;
795
- let r = (d = i == null ? void 0 : i.field) == null ? void 0 : d.type;
796
- r == null && (r = B(s.value)), (typeof s.value == "string" && /^{{.*}}$/.test(s.value) || Array.isArray(s.value) && s.value.some(
797
- (c) => typeof c == "string" && /^{{.*}}$/.test(c)
798
- )) && (r = "string");
799
- let n = null;
800
- switch (r) {
801
- case "datetime": {
802
- n = "date";
803
- break;
804
- }
805
- case "boolean": {
806
- n = "boolean";
807
- break;
808
- }
809
- case "string": {
810
- n = "text";
811
- break;
812
- }
813
- case "integer":
814
- case "float": {
815
- n = "number";
816
- break;
817
- }
818
- case "array":
819
- case "json":
820
- case "object":
821
- break;
822
- default: {
823
- n = "text";
824
- break;
825
- }
826
- }
827
- switch (s.matcher) {
828
- case "eq":
829
- case "not_eq":
830
- case "lt":
831
- case "lteq":
832
- case "gt":
833
- case "gteq":
834
- case "multiple":
835
- case "start_with":
836
- case "not_start_with":
837
- case "end_with":
838
- case "not_end_with":
839
- break;
840
- case "matches":
841
- case "does_not_match":
842
- break;
843
- case "gt_lt":
844
- case "gteq_lt":
845
- case "gt_lteq":
846
- case "gteq_lteq": {
847
- n === "number" && (n = "numberRange"), n === "text" && (n = "textRange"), n === "date" && (n = "dateRange");
848
- break;
849
- }
850
- case "is_in":
851
- case "is_not_in": {
852
- n = "tag";
853
- break;
854
- }
855
- case "array_match": {
856
- n = "arrayMatch";
857
- break;
858
- }
859
- default: {
860
- R(s.matcher);
861
- break;
862
- }
863
- }
864
- switch (n) {
865
- case "date": {
866
- const c = A(
867
- typeof s.value == "string" ? s.value : ""
868
- );
869
- return /* @__PURE__ */ t.jsx(
870
- te,
871
- {
872
- value: T(c) ? c : void 0,
873
- showTimeSelect: !0,
874
- placeholder: "Enter value",
875
- onChange: (o) => {
876
- l(u, o == null ? void 0 : o.toJSON());
877
- }
878
- }
879
- );
880
- }
881
- case "dateRange": {
882
- const c = Array.isArray(s.value) ? s.value.map((o) => {
883
- const f = A(typeof o == "string" ? o : "");
884
- return T(f) ? f : null;
885
- }) : [null, null];
886
- return /* @__PURE__ */ t.jsx(
887
- ee,
888
- {
889
- value: c,
890
- showTimeSelect: !0,
891
- onChange: (o) => {
892
- l(
893
- `${a}.value`,
894
- o.map((f) => (f == null ? void 0 : f.toJSON()) ?? null)
895
- );
896
- }
897
- }
898
- );
899
- }
900
- case "numberRange":
901
- return /* @__PURE__ */ t.jsx(
902
- ve,
903
- {
904
- value: s.value,
905
- onChange: (c) => {
906
- l(u, c);
907
- }
908
- }
909
- );
910
- case "textRange":
911
- return /* @__PURE__ */ t.jsx(
912
- pe,
913
- {
914
- value: s.value,
915
- onChange: (c) => {
916
- l(u, c);
917
- }
918
- }
919
- );
920
- case "arrayMatch":
921
- return /* @__PURE__ */ t.jsx(
922
- be,
923
- {
924
- value: s.value,
925
- pathPrefix: `${a}.value`
926
- }
927
- );
928
- case "tag":
929
- return /* @__PURE__ */ t.jsx(
930
- j,
931
- {
932
- isMulti: !0,
933
- isClearable: !1,
934
- isCreatable: !0,
935
- defaultValue: Array.isArray(s.value) ? s.value.map((c) => ({
936
- label: c.toString(),
937
- value: c
938
- })) : [],
939
- initialValues: [],
940
- onSelect: (c) => {
941
- K(c) && l(
942
- `${a}.value`,
943
- c.map((o) => {
944
- if (r === "integer") {
945
- const f = parseInt(o.value.toString(), 10);
946
- return isNaN(f) ? null : f;
947
- }
948
- return o.value;
949
- }).filter((o) => o != null)
950
- );
951
- }
952
- }
953
- );
954
- case "number":
955
- return /* @__PURE__ */ t.jsx(
956
- g,
957
- {
958
- name: `${a}.value`,
959
- type: "number",
960
- defaultValue: typeof s.value == "number" ? s.value : "",
961
- placeholder: "Enter value",
962
- onChange: (c) => {
963
- l(
964
- `${a}.value`,
965
- parseInt(c.currentTarget.value, 10)
966
- );
967
- }
968
- }
969
- );
970
- case "boolean":
971
- return /* @__PURE__ */ t.jsx(
972
- j,
973
- {
974
- name: `${a}.value`,
975
- defaultValue: typeof s.value == "boolean" ? {
976
- label: s.value ? "Yes" : "No",
977
- value: s.value
978
- } : void 0,
979
- initialValues: [
980
- { label: "Yes", value: !0 },
981
- { label: "No", value: !1 }
982
- ],
983
- onSelect: (c) => {
984
- V(c) && l(u, c.value);
985
- }
986
- }
987
- );
988
- case "text":
989
- case null:
990
- return /* @__PURE__ */ t.jsx(
991
- g,
992
- {
993
- name: `${a}.value`,
994
- type: "text",
995
- defaultValue: typeof s.value == "string" ? s.value : JSON.stringify(s.value),
996
- placeholder: "Enter value",
997
- onChange: (c) => {
998
- l(u, c.currentTarget.value);
999
- }
1000
- }
1001
- );
1002
- default:
1003
- return R();
1004
- }
1005
- }
1006
- function Ne({
1007
- item: e,
1008
- nestingLevel: a,
1009
- pathPrefix: l,
1010
- onDelete: i
1011
- }) {
1012
- const { setPath: u } = y(), s = [];
1013
- return a < 2 && (s[0] ?? (s[0] = []), s[0].push(
1014
- /* @__PURE__ */ t.jsx(
1015
- S,
1016
- {
1017
- label: "Nest conditions",
1018
- onClick: () => {
1019
- var r;
1020
- u(
1021
- `${l}.nested.conditions.${(((r = e == null ? void 0 : e.nested) == null ? void 0 : r.conditions) ?? []).length}`,
1022
- void 0
1023
- );
1024
- }
1025
- }
1026
- )
1027
- )), i != null && (s[1] ?? (s[1] = []), s[1].push(
1028
- /* @__PURE__ */ t.jsx(
1029
- S,
1030
- {
1031
- label: "Delete",
1032
- onClick: () => {
1033
- u(`${l}`, null), i();
1034
- }
1035
- }
1036
- )
1037
- )), /* @__PURE__ */ t.jsxs("div", { className: "bg-gray-50 rounded-md flex items-center", children: [
1038
- /* @__PURE__ */ t.jsx("div", { className: "flex items-center justify-between gap-2 flex-grow p-2", children: /* @__PURE__ */ t.jsxs("div", { className: "flex flex-col gap-2 flex-grow", children: [
1039
- /* @__PURE__ */ t.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
1040
- /* @__PURE__ */ t.jsx("div", { className: "flex-1", children: /* @__PURE__ */ t.jsx(
1041
- g,
1042
- {
1043
- name: `${l}.field`,
1044
- type: "text",
1045
- defaultValue: e != null ? e.field : void 0,
1046
- onChange: (r) => {
1047
- u(`${l}.field`, r.currentTarget.value);
1048
- },
1049
- onBlur: (r) => {
1050
- u(`${l}.field`, r.currentTarget.value);
1051
- }
1052
- }
1053
- ) }),
1054
- /* @__PURE__ */ t.jsx("div", { className: "flex-14", children: /* @__PURE__ */ t.jsx(he, { item: e, pathPrefix: l }) })
1055
- ] }),
1056
- /* @__PURE__ */ t.jsx(je, { item: e, pathPrefix: l })
1057
- ] }) }),
1058
- s.length > 0 && /* @__PURE__ */ t.jsx(
1059
- z,
1060
- {
1061
- className: "w-8 border-l border-gray-100 flex items-center justify-center self-stretch",
1062
- dropdownLabel: /* @__PURE__ */ t.jsx("button", { className: "flex items-center justify-center self-stretch flex-grow", children: /* @__PURE__ */ t.jsx(p, { name: "dotsThreeVertical", size: 16, weight: "bold" }) }),
1063
- dropdownItems: s.map((r, n, d) => /* @__PURE__ */ t.jsxs(I.Fragment, { children: [
1064
- r.map((c, o) => /* @__PURE__ */ t.jsx(I.Fragment, { children: c }, o)),
1065
- n < d.length - 1 && /* @__PURE__ */ t.jsx(ae, {})
1066
- ] }, n))
1067
- }
1068
- )
1069
- ] });
1070
- }
1071
- function H({
1072
- item: e,
1073
- children: a,
1074
- nestingLevel: l = 0,
1075
- pathPrefix: i
1076
- }) {
1077
- var o, f;
1078
- const {
1079
- state: { selectedRuleIndex: u }
1080
- } = y(), s = ((o = e == null ? void 0 : e.conditions_logic) == null ? void 0 : o.toLowerCase()) ?? "and", { setPath: r } = y(), [n, d] = x(0), c = l > 0;
1081
- return /* @__PURE__ */ t.jsxs(
1082
- "div",
1083
- {
1084
- className: $("query-group", {
1085
- "p-4 border border-gray-200 rounded-md": c
1086
- }),
1087
- children: [
1088
- a,
1089
- e != null && (e.conditions ?? []).length > 0 && /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
1090
- /* @__PURE__ */ t.jsxs(
1091
- "select",
1092
- {
1093
- onChange: (m) => {
1094
- r(
1095
- `${i}.conditions_logic`,
1096
- m.currentTarget.value
1097
- );
1098
- },
1099
- defaultValue: s,
1100
- className: "pl-4 pr-8 py-2 font-bold focus:ring-0 focus:outline-none appearance-none bg-gray-50 border border-gray-200 rounded-md text-sm leading-4",
1101
- children: [
1102
- /* @__PURE__ */ t.jsxs("option", { value: "and", children: [
1103
- c ? "Nested in " : "",
1104
- "AND"
1105
- ] }),
1106
- /* @__PURE__ */ t.jsxs("option", { value: "or", children: [
1107
- c ? "Nested in " : "",
1108
- "OR"
1109
- ] })
1110
- ]
1111
- }
1112
- ),
1113
- /* @__PURE__ */ t.jsx("div", { className: "border-l border-gray-200 ml-3 pt-3", children: (f = e == null ? void 0 : e.conditions) == null ? void 0 : f.map((m, h, b) => {
1114
- const v = h === b.length - 1;
1115
- return /* @__PURE__ */ t.jsxs(
1116
- "div",
1117
- {
1118
- className: "flex items-center mb-4 last:mb-0 relative",
1119
- children: [
1120
- /* @__PURE__ */ t.jsx(_e, { rounded: v }),
1121
- /* @__PURE__ */ t.jsx("div", { className: "ml-4 w-full", children: /* @__PURE__ */ t.jsx(
1122
- H,
1123
- {
1124
- item: (m == null ? void 0 : m.nested) ?? void 0,
1125
- nestingLevel: (m == null ? void 0 : m.nested) != null ? l + 1 : 0,
1126
- pathPrefix: `${i}.conditions.${h}.nested`,
1127
- children: /* @__PURE__ */ t.jsx(
1128
- "div",
1129
- {
1130
- className: $({
1131
- "mb-4": (m == null ? void 0 : m.nested) != null
1132
- }),
1133
- children: /* @__PURE__ */ t.jsx(
1134
- Ne,
1135
- {
1136
- item: m,
1137
- nestingLevel: l,
1138
- pathPrefix: `${i}.conditions.${h}`,
1139
- onDelete: b.length > 1 || l > 0 ? () => {
1140
- d((_) => _ + 1);
1141
- } : void 0
1142
- }
1143
- )
1144
- }
1145
- )
1146
- }
1147
- ) })
1148
- ]
1149
- },
1150
- `${u}-${h}-${n}`
1151
- );
1152
- }) })
1153
- ] })
1154
- ]
1155
- }
1156
- );
1157
- }
1158
- function _e({
1159
- rounded: e = !1
1160
- }) {
1161
- return e ? /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
1162
- /* @__PURE__ */ t.jsx("div", { className: "absolute -left-[1px] top-1/2 w-px h-1/2 bg-white" }),
1163
- /* @__PURE__ */ t.jsx("div", { className: "absolute -left-[1px] top-1/2 -translate-y-1/2 w-3.5 h-3.5 border-l border-b rounded-es-sm bg-white border-gray-200" })
1164
- ] }) : /* @__PURE__ */ t.jsx("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-3.5 h-px bg-gray-200" });
1165
- }
1166
- function we() {
1167
- var s;
1168
- const {
1169
- setPath: e,
1170
- state: { value: a, selectedRuleIndex: l }
1171
- } = y(), [i, u] = x(
1172
- ((s = a.rules[l]) == null ? void 0 : s.name) ?? ""
1173
- );
1174
- return N(() => {
1175
- var r;
1176
- u(((r = a.rules[l]) == null ? void 0 : r.name) ?? "");
1177
- }, [l]), /* @__PURE__ */ t.jsx(
1178
- "div",
1179
- {
1180
- contentEditable: "plaintext-only",
1181
- suppressContentEditableWarning: !0,
1182
- onInput: (r) => {
1183
- const d = r.currentTarget.innerText.replace(/[\n\s]+/g, " ").trim();
1184
- e(`rules.${l}.name`, d);
1185
- },
1186
- onKeyDown: (r) => {
1187
- r.key === "Enter" && (r.preventDefault(), r.currentTarget.blur());
1188
- },
1189
- onBlur: (r) => {
1190
- const n = r.currentTarget;
1191
- n.innerText = n.innerText.replace(/[\n\s]+/g, " ").trim();
1192
- },
1193
- children: i
1194
- },
1195
- l
1196
- );
1197
- }
1198
- const L = {
1199
- rules: []
1200
- }, C = (e) => {
1201
- try {
1202
- return JSON.parse(e ?? JSON.stringify(L));
1203
- } catch {
1204
- return L;
1205
- }
1206
- }, Te = (e) => {
1207
- try {
1208
- return JSON.parse(e ?? "{}"), !0;
1209
- } catch {
1210
- return !1;
1211
- }
1212
- };
1213
- function Ae(e) {
1214
- const [a, l] = x(
1215
- C(e.value ?? e.defaultValue)
1216
- );
1217
- return N(
1218
- function() {
1219
- a.rules.length === 0 && l(C(e.value));
1220
- },
1221
- [e.value]
1222
- ), /* @__PURE__ */ t.jsx(fe, { initialValue: { rules: a.rules }, children: /* @__PURE__ */ t.jsx($e, { ...e }) });
1223
- }
1224
- function $e(e) {
1225
- const {
1226
- state: { value: a, selectedRuleIndex: l },
1227
- setSelectedRuleIndex: i,
1228
- setValue: u,
1229
- setPath: s
1230
- } = y(), [r, n] = x(
1231
- e.defaultCodeEditorVisible ?? !1
1232
- ), d = a.rules[l], c = ce(null), [o, f] = x(0);
1233
- N(
1234
- function() {
1235
- var b, v, _;
1236
- E(C((b = c.current) == null ? void 0 : b.getValue()), a) || (v = c.current) == null || v.setValue(JSON.stringify(a, null, 2)), (_ = e.onChange) == null || _.call(e, a);
1237
- },
1238
- [a]
1239
- );
1240
- const m = w(
1241
- (h) => {
1242
- const b = C(h);
1243
- c.current != null && c.current.hasTextFocus() && Te(h) && !E(b, a) && (u(b), f((v) => v + 1));
1244
- },
1245
- [a]
1246
- );
1247
- return /* @__PURE__ */ t.jsx(
1248
- le,
1249
- {
1250
- hint: e.hint,
1251
- feedback: e.feedback,
1252
- className: "h-full [&>div:first-of-type]:h-full",
1253
- children: /* @__PURE__ */ t.jsxs("section", { className: "flex h-full", children: [
1254
- /* @__PURE__ */ t.jsxs(
1255
- "div",
1256
- {
1257
- className: `shrink-0 basis-3/5 overflow-x-auto relative flex flex-col ${r ? "" : "grow"}`,
1258
- children: [
1259
- /* @__PURE__ */ t.jsxs("header", { className: "w-full bg-white border-b border-gray-200 py-3 px-8 flex text-[13px] gap-4 text-gray-400 font-semibold items-center", children: [
1260
- /* @__PURE__ */ t.jsxs("div", { className: "flex items-center gap-4 flex-wrap", children: [
1261
- a.rules.map((h, b) => {
1262
- const v = `#${(b + 1).toString().padStart(2, "0")}`;
1263
- return /* @__PURE__ */ t.jsx(
1264
- "button",
1265
- {
1266
- className: $("font-bold", {
1267
- "text-black": l === b
1268
- }),
1269
- onClick: () => {
1270
- i(b);
1271
- },
1272
- children: v
1273
- },
1274
- `${l}-${h.id}`
1275
- );
1276
- }),
1277
- /* @__PURE__ */ t.jsx(
1278
- "button",
1279
- {
1280
- className: $("font-bold", {
1281
- "text-black": !0
1282
- }),
1283
- onClick: () => {
1284
- s(`rules.${a.rules.length}`, {
1285
- name: "Rule name",
1286
- actions: [null],
1287
- conditions: [null]
1288
- }), i(a.rules.length);
1289
- },
1290
- children: /* @__PURE__ */ t.jsx(p, { name: "plus", size: 16, className: "shrink-0" })
1291
- }
1292
- )
1293
- ] }),
1294
- /* @__PURE__ */ t.jsx("div", { className: "flex-grow flex justify-end", children: /* @__PURE__ */ t.jsx(
1295
- "button",
1296
- {
1297
- className: "text-blue-600 hover:text-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500",
1298
- onClick: () => {
1299
- n(!r);
1300
- },
1301
- children: /* @__PURE__ */ t.jsx(p, { name: "sidebarSimple", size: 16, color: "#101111" })
1302
- }
1303
- ) })
1304
- ] }),
1305
- /* @__PURE__ */ t.jsxs(Ve, { children: [
1306
- /* @__PURE__ */ t.jsxs("div", { className: "mb-8 flex items-center gap-2", children: [
1307
- /* @__PURE__ */ t.jsx(we, {}),
1308
- /* @__PURE__ */ t.jsx(p, { name: "pencilSimple", size: 16, className: "shrink-0" })
1309
- ] }),
1310
- /* @__PURE__ */ t.jsx(J, { title: "Actions", icon: "lightning", children: /* @__PURE__ */ t.jsx(xe, { actions: d == null ? void 0 : d.actions }) }),
1311
- /* @__PURE__ */ t.jsx(Ce, { children: "when" }),
1312
- /* @__PURE__ */ t.jsxs(J, { title: "Conditions", icon: "treeView", children: [
1313
- /* @__PURE__ */ t.jsx(
1314
- H,
1315
- {
1316
- item: d,
1317
- pathPrefix: `rules.${l}`
1318
- }
1319
- ),
1320
- /* @__PURE__ */ t.jsx("div", { className: "mt-6", children: /* @__PURE__ */ t.jsxs(
1321
- U,
1322
- {
1323
- size: "small",
1324
- variant: "secondary",
1325
- alignItems: "center",
1326
- onClick: () => {
1327
- var h;
1328
- s(
1329
- `rules.${l}.conditions.${((h = d == null ? void 0 : d.conditions) == null ? void 0 : h.length) ?? 0}`,
1330
- void 0
1331
- );
1332
- },
1333
- children: [
1334
- /* @__PURE__ */ t.jsx(p, { name: "plusCircle" }),
1335
- " Add condition"
1336
- ]
1337
- }
1338
- ) })
1339
- ] })
1340
- ] })
1341
- ]
1342
- },
1343
- o
1344
- ),
1345
- r && /* @__PURE__ */ t.jsx("div", { className: "shrink-0 basis-2/5", children: /* @__PURE__ */ t.jsx(
1346
- ne,
1347
- {
1348
- ref: c,
1349
- name: e.id ?? e.name,
1350
- height: "100%",
1351
- language: "json",
1352
- jsonSchema: "order-rules",
1353
- defaultValue: JSON.stringify(a, null, 2),
1354
- noRounding: !0,
1355
- onChange: m
1356
- }
1357
- ) })
1358
- ] })
1359
- }
1360
- );
1361
- }
1362
- function Ce({ children: e }) {
1363
- return /* @__PURE__ */ t.jsxs("div", { className: "text-gray-500 flex items-center justify-center flex-col", children: [
1364
- /* @__PURE__ */ t.jsx("div", { className: "h-6 w-[2px] bg-gray-200" }),
1365
- /* @__PURE__ */ t.jsx("span", { className: "font-bold my-1 bg-gray-200 px-3 relative uppercase rounded h-[25px] items-center flex text-sm", children: e }),
1366
- /* @__PURE__ */ t.jsx("div", { className: "h-6 w-[2px] bg-gray-200" })
1367
- ] });
1368
- }
1369
- function J({
1370
- children: e,
1371
- title: a,
1372
- icon: l
1373
- }) {
1374
- return /* @__PURE__ */ t.jsxs("div", { className: "rounded-md bg-white shadow-sm", children: [
1375
- /* @__PURE__ */ t.jsxs("div", { className: "flex items-center space-x-4 py-4 border-b border-gray-100", children: [
1376
- /* @__PURE__ */ t.jsx("div", { className: "w-8 h-8 -ml-4 bg-white rounded-full border border-gray-200 flex items-center justify-center shadow-sm shadow-primary-200", children: /* @__PURE__ */ t.jsx(p, { name: l }) }),
1377
- /* @__PURE__ */ t.jsx("h2", { className: "text-lg font-semibold", children: a })
1378
- ] }),
1379
- /* @__PURE__ */ t.jsx("div", { className: "p-6", children: e })
1380
- ] });
1381
- }
1382
- function Ve({
1383
- children: e
1384
- }) {
1385
- return /* @__PURE__ */ t.jsx("div", { className: "h-full w-full bg-gray-50 p-8 [background-image:radial-gradient(#d6d6d6_1px,transparent_1px)] [background-size:16px_16px] overflow-auto", children: /* @__PURE__ */ t.jsx("div", { className: "max-w-[900px] mx-auto", children: e }) });
1386
- }
1387
- export {
1388
- Ae as RuleEngine
1389
- };