@zaamx/netme-bundle 0.0.5 → 0.0.6

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.
@@ -105,9 +105,50 @@ const ProductSearchSelect = ({
105
105
  ] })
106
106
  ] });
107
107
  };
108
+ const VariantPicker = ({
109
+ productId,
110
+ selectedIds,
111
+ onChange
112
+ }) => {
113
+ const [variants, setVariants] = react.useState([]);
114
+ const [loading, setLoading] = react.useState(false);
115
+ react.useEffect(() => {
116
+ if (!productId) {
117
+ setVariants([]);
118
+ return;
119
+ }
120
+ setLoading(true);
121
+ sdk.admin.product.retrieve(productId).then(
122
+ ({ product }) => setVariants(
123
+ (product.variants || []).map((v) => ({ id: v.id, title: v.title ?? v.id, sku: v.sku ?? void 0 }))
124
+ )
125
+ ).catch(() => setVariants([])).finally(() => setLoading(false));
126
+ }, [productId]);
127
+ const toggle = (id) => onChange(
128
+ selectedIds.includes(id) ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]
129
+ );
130
+ if (loading) return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-400", children: "Loading variants…" });
131
+ if (!loading && variants.length === 0)
132
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-400", children: "No variants found." });
133
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2 max-h-52 overflow-y-auto pr-1", children: variants.map((v) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer select-none", children: [
134
+ /* @__PURE__ */ jsxRuntime.jsx(
135
+ "input",
136
+ {
137
+ type: "checkbox",
138
+ checked: selectedIds.includes(v.id),
139
+ onChange: () => toggle(v.id),
140
+ className: "h-4 w-4 rounded border-gray-300"
141
+ }
142
+ ),
143
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: v.title }),
144
+ v.sku && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-400 font-mono", children: v.sku })
145
+ ] }, v.id)) });
146
+ };
108
147
  const emptyBundleItem = () => ({
109
148
  product_id: void 0,
110
149
  product_title: "",
150
+ variant_mode: "all",
151
+ variant_ids: [],
111
152
  min_quantity: 1,
112
153
  max_quantity: 1,
113
154
  default_quantity: 1,
@@ -115,47 +156,42 @@ const emptyBundleItem = () => ({
115
156
  separate_shipping: false,
116
157
  individual_price: false
117
158
  });
118
- const resetModal = {
119
- isEditing: false,
120
- selectedProductId: void 0,
121
- selectedProductTitle: "",
122
- bundleItems: [],
123
- bundleMeta: []
124
- };
125
- const limit = 15;
159
+ const LIMIT = 15;
126
160
  const BundledProductsPage = () => {
127
161
  const [page, setPage] = react.useState(0);
128
- const [openCreateModal, setOpenCreateModal] = react.useState(false);
162
+ const [openModal, setOpenModal] = react.useState(false);
129
163
  const [isEditing, setIsEditing] = react.useState(false);
130
164
  const [selectedProductId, setSelectedProductId] = react.useState();
131
165
  const [selectedProductTitle, setSelectedProductTitle] = react.useState("");
132
166
  const [bundleItems, setBundleItems] = react.useState([]);
133
167
  const [bundleMeta, setBundleMeta] = react.useState([]);
134
168
  const queryClient = reactQuery.useQueryClient();
135
- const offset = page * limit;
169
+ const offset = page * LIMIT;
136
170
  const closeModal = () => {
137
- setOpenCreateModal(false);
138
- setIsEditing(resetModal.isEditing);
139
- setSelectedProductId(resetModal.selectedProductId);
140
- setSelectedProductTitle(resetModal.selectedProductTitle);
141
- setBundleItems(resetModal.bundleItems);
142
- setBundleMeta(resetModal.bundleMeta);
171
+ setOpenModal(false);
172
+ setIsEditing(false);
173
+ setSelectedProductId(void 0);
174
+ setSelectedProductTitle("");
175
+ setBundleItems([]);
176
+ setBundleMeta([]);
143
177
  };
144
178
  const { data, isLoading } = reactQuery.useQuery({
145
- queryKey: ["bundled-products", offset, limit],
179
+ queryKey: ["bundled-products", offset, LIMIT],
146
180
  queryFn: () => sdk.client.fetch("/admin/bundled-products", {
147
181
  method: "GET",
148
- query: { limit, offset }
182
+ query: { limit: LIMIT, offset }
149
183
  })
150
184
  });
151
185
  const { mutateAsync: saveBundle, isPending: isSaving } = reactQuery.useMutation({
152
- mutationFn: async (payload) => {
186
+ mutationFn: async () => {
153
187
  if (!selectedProductId) throw new Error("No product selected");
188
+ const validItems = bundleItems.filter((i) => i.product_id);
154
189
  await sdk.client.fetch(`/admin/products/${selectedProductId}/bundle`, {
155
190
  method: "POST",
156
191
  body: {
157
- child_product_ids: payload.child_product_ids.map((item) => ({
192
+ child_product_ids: validItems.map((item) => ({
158
193
  id: item.product_id,
194
+ variant_ids: item.variant_mode === "specific" ? item.variant_ids : [],
159
195
  min_quantity: item.min_quantity,
160
196
  max_quantity: item.max_quantity,
161
197
  default_quantity: item.default_quantity,
@@ -163,72 +199,70 @@ const BundledProductsPage = () => {
163
199
  separate_shipping: item.separate_shipping,
164
200
  individual_price: item.individual_price
165
201
  })),
166
- bundle_meta: payload.bundle_meta,
167
- is_bundle: payload.is_bundle
202
+ bundle_meta: bundleMeta,
203
+ is_bundle: true
168
204
  }
169
205
  });
170
206
  }
171
207
  });
172
208
  const { mutateAsync: deleteBundle } = reactQuery.useMutation({
173
- mutationFn: async (productId) => {
174
- await sdk.client.fetch(`/admin/products/${productId}/bundle`, { method: "DELETE" });
175
- }
209
+ mutationFn: (productId) => sdk.client.fetch(`/admin/products/${productId}/bundle`, { method: "DELETE" })
176
210
  });
177
- const handleDeleteBundle = async (productId) => {
178
- try {
179
- await deleteBundle(productId);
180
- ui.toast.success("Bundle deleted successfully");
181
- queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
182
- } catch {
183
- ui.toast.error("Failed to delete bundle");
184
- }
185
- };
186
211
  const handleEditBundle = (bundle) => {
187
212
  setIsEditing(true);
188
213
  setSelectedProductId(bundle.product.id);
189
214
  setSelectedProductTitle(bundle.title);
190
215
  setBundleItems(
191
- bundle.items.map((item) => ({
192
- product_id: item.product.id,
193
- product_title: item.product.title,
194
- min_quantity: item.min_quantity,
195
- max_quantity: item.max_quantity,
196
- default_quantity: item.default_quantity,
197
- optional: item.optional,
198
- separate_shipping: item.separate_shipping,
199
- individual_price: item.individual_price
200
- }))
216
+ bundle.items.map((item) => {
217
+ var _a;
218
+ return {
219
+ product_id: item.product.id,
220
+ product_title: item.product.title,
221
+ variant_mode: ((_a = item.variant_ids) == null ? void 0 : _a.length) ? "specific" : "all",
222
+ variant_ids: item.variant_ids ?? [],
223
+ min_quantity: item.min_quantity,
224
+ max_quantity: item.max_quantity,
225
+ default_quantity: item.default_quantity,
226
+ optional: item.optional,
227
+ separate_shipping: item.separate_shipping,
228
+ individual_price: item.individual_price
229
+ };
230
+ })
201
231
  );
202
232
  setBundleMeta(bundle.bundle_meta || []);
203
- setOpenCreateModal(true);
233
+ setOpenModal(true);
204
234
  };
205
- const handleSaveBundle = async () => {
235
+ const handleDeleteBundle = async (productId) => {
236
+ try {
237
+ await deleteBundle(productId);
238
+ ui.toast.success("Bundle deleted");
239
+ queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
240
+ } catch {
241
+ ui.toast.error("Failed to delete bundle");
242
+ }
243
+ };
244
+ const handleSave = async () => {
206
245
  if (!selectedProductId) {
207
246
  ui.toast.error("Please select a product");
208
247
  return;
209
248
  }
210
- const validItems = bundleItems.filter((item) => item.product_id);
211
- if (validItems.length === 0) {
249
+ if (!bundleItems.some((i) => i.product_id)) {
212
250
  ui.toast.error("Please add at least one product to the bundle");
213
251
  return;
214
252
  }
215
253
  try {
216
- await saveBundle({ child_product_ids: validItems, bundle_meta: bundleMeta, is_bundle: true });
217
- ui.toast.success(isEditing ? "Bundle updated successfully" : "Bundle created successfully");
254
+ await saveBundle();
255
+ ui.toast.success(isEditing ? "Bundle updated" : "Bundle created");
218
256
  queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
219
257
  closeModal();
220
258
  } catch {
221
259
  ui.toast.error(isEditing ? "Failed to update bundle" : "Failed to create bundle");
222
260
  }
223
261
  };
224
- const updateBundleItem = (index, field, value) => {
225
- setBundleItems(
226
- (prev) => prev.map((item, i) => i === index ? { ...item, [field]: value } : item)
227
- );
228
- };
229
- const totalPages = Math.ceil(((data == null ? void 0 : data.count) || 0) / limit);
262
+ const updateItem = (index, field, value) => setBundleItems((prev) => prev.map((item, i) => i === index ? { ...item, [field]: value } : item));
263
+ const totalPages = Math.ceil(((data == null ? void 0 : data.count) || 0) / LIMIT);
230
264
  return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
231
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2 md:flex-row md:items-center p-6", children: [
265
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between p-6", children: [
232
266
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: "Bundled Products" }),
233
267
  /* @__PURE__ */ jsxRuntime.jsx(
234
268
  ui.Button,
@@ -236,7 +270,7 @@ const BundledProductsPage = () => {
236
270
  variant: "primary",
237
271
  onClick: () => {
238
272
  closeModal();
239
- setOpenCreateModal(true);
273
+ setOpenModal(true);
240
274
  },
241
275
  children: "Create Bundle"
242
276
  }
@@ -251,110 +285,60 @@ const BundledProductsPage = () => {
251
285
  /* @__PURE__ */ jsxRuntime.jsx("th", { className: "border border-gray-200 px-4 py-2 text-left", children: "Actions" })
252
286
  ] }) }),
253
287
  /* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
254
- ((data == null ? void 0 : data.bundled_products.length) ?? 0) === 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
255
- "td",
256
- {
257
- colSpan: 4,
258
- className: "border border-gray-200 px-4 py-6 text-center text-gray-500",
259
- children: "No bundled products found."
260
- }
261
- ) }),
288
+ ((data == null ? void 0 : data.bundled_products.length) ?? 0) === 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: 4, className: "border border-gray-200 px-4 py-6 text-center text-gray-400", children: "No bundled products found." }) }),
262
289
  data == null ? void 0 : data.bundled_products.map((bundle) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-gray-50", children: [
263
290
  /* @__PURE__ */ jsxRuntime.jsxs("td", { className: "border border-gray-200 px-4 py-3", children: [
264
- /* @__PURE__ */ jsxRuntime.jsx(
265
- reactRouterDom.Link,
266
- {
267
- to: `/products/${bundle.product.id}`,
268
- className: "font-medium text-blue-600 hover:underline",
269
- children: bundle.title
270
- }
271
- ),
291
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Link, { to: `/products/${bundle.product.id}`, className: "font-medium text-blue-600 hover:underline", children: bundle.title }),
272
292
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-gray-400 mt-0.5", children: bundle.id })
273
293
  ] }),
274
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(
275
- ui.Badge,
276
- {
277
- className: bundle.status === "published" ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600",
278
- children: bundle.status ?? "—"
279
- }
280
- ) }),
281
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5", children: [
294
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { className: bundle.status === "published" ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600", children: bundle.status ?? "—" }) }),
295
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
282
296
  bundle.items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-400", children: "No items" }),
283
- bundle.items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm flex items-center gap-1", children: [
284
- /* @__PURE__ */ jsxRuntime.jsx(
285
- reactRouterDom.Link,
286
- {
287
- to: `/products/${item.product.id}`,
288
- className: "text-blue-600 hover:underline",
289
- children: item.product.title
290
- }
291
- ),
292
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-400", children: [
293
- ",
294
- item.default_quantity
295
- ] }),
296
- item.optional && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { className: "bg-gray-100 text-gray-500 text-xs", children: "Optional" })
297
- ] }, item.id))
297
+ bundle.items.map((item) => {
298
+ var _a;
299
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm", children: [
300
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
301
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Link, { to: `/products/${item.product.id}`, className: "text-blue-600 hover:underline", children: item.product.title }),
302
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-gray-400", children: [
303
+ ",
304
+ item.default_quantity
305
+ ] }),
306
+ item.optional && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { className: "bg-gray-100 text-gray-500 text-xs", children: "Optional" })
307
+ ] }),
308
+ ((_a = item.variant_ids) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-gray-400 ml-1", children: [
309
+ item.variant_ids.length,
310
+ " specific variant",
311
+ item.variant_ids.length > 1 ? "s" : ""
312
+ ] })
313
+ ] }, item.id);
314
+ })
298
315
  ] }) }),
299
316
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
300
- /* @__PURE__ */ jsxRuntime.jsx(
301
- ui.Button,
302
- {
303
- variant: "secondary",
304
- size: "small",
305
- onClick: () => handleEditBundle(bundle),
306
- children: "Edit"
307
- }
308
- ),
309
- /* @__PURE__ */ jsxRuntime.jsx(
310
- ui.Button,
311
- {
312
- variant: "secondary",
313
- size: "small",
314
- onClick: () => handleDeleteBundle(bundle.id),
315
- className: "text-red-600 hover:text-red-700",
316
- children: "Delete"
317
- }
318
- )
317
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", size: "small", onClick: () => handleEditBundle(bundle), children: "Edit" }),
318
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", size: "small", onClick: () => handleDeleteBundle(bundle.id), className: "text-red-600 hover:text-red-700", children: "Delete" })
319
319
  ] }) })
320
320
  ] }, bundle.id))
321
321
  ] })
322
322
  ] }) }),
323
323
  totalPages > 1 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-center gap-2 mt-6", children: [
324
- /* @__PURE__ */ jsxRuntime.jsx(
325
- ui.Button,
326
- {
327
- variant: "secondary",
328
- onClick: () => setPage(Math.max(0, page - 1)),
329
- disabled: page === 0,
330
- children: "Previous"
331
- }
332
- ),
324
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => setPage(Math.max(0, page - 1)), disabled: page === 0, children: "Previous" }),
333
325
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center px-4", children: [
334
326
  "Page ",
335
327
  page + 1,
336
328
  " of ",
337
329
  totalPages
338
330
  ] }),
339
- /* @__PURE__ */ jsxRuntime.jsx(
340
- ui.Button,
341
- {
342
- variant: "secondary",
343
- onClick: () => setPage(Math.min(totalPages - 1, page + 1)),
344
- disabled: page === totalPages - 1,
345
- children: "Next"
346
- }
347
- )
331
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => setPage(Math.min(totalPages - 1, page + 1)), disabled: page === totalPages - 1, children: "Next" })
348
332
  ] })
349
333
  ] }),
350
- /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal, { open: openCreateModal, onOpenChange: (open) => {
334
+ /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal, { open: openModal, onOpenChange: (open) => {
351
335
  if (!open) closeModal();
352
336
  }, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.FocusModal.Content, { children: [
353
337
  /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: isEditing ? "Edit Bundle" : "Create Bundle" }) }),
354
338
  /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Body, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 flex-col items-center h-[80vh] overflow-y-auto px-2 py-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-3xl flex flex-col gap-y-8", children: [
355
339
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
356
340
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Bundle Product" }),
357
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-500 mb-2", children: isEditing ? "The product this bundle is attached to" : "Choose the product that will become a bundle" }),
341
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-500 mb-2", children: isEditing ? "The product this bundle is attached to" : "Choose the product that becomes the bundle" }),
358
342
  /* @__PURE__ */ jsxRuntime.jsx(
359
343
  ProductSearchSelect,
360
344
  {
@@ -378,80 +362,28 @@ const BundledProductsPage = () => {
378
362
  {
379
363
  item,
380
364
  index,
381
- onUpdate: (field, value) => updateBundleItem(index, field, value),
365
+ onUpdate: (field, value) => updateItem(index, field, value),
382
366
  onRemove: () => setBundleItems((prev) => prev.filter((_, i) => i !== index))
383
367
  },
384
368
  index
385
369
  )),
386
- /* @__PURE__ */ jsxRuntime.jsx(
387
- ui.Button,
388
- {
389
- variant: "secondary",
390
- onClick: () => setBundleItems((prev) => [...prev, emptyBundleItem()]),
391
- className: "mt-4",
392
- children: "Add Item"
393
- }
394
- )
370
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => setBundleItems((prev) => [...prev, emptyBundleItem()]), className: "mt-2", children: "Add Item" })
395
371
  ] }),
396
372
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
397
373
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Bundle Metadata" }),
398
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-500 mb-4", children: "Custom key-value pairs for this bundle" }),
374
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-sm text-gray-500 mb-4", children: "Custom key-value pairs" }),
399
375
  bundleMeta.map((meta, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2 mb-2", children: [
400
- /* @__PURE__ */ jsxRuntime.jsx(
401
- ui.Input,
402
- {
403
- placeholder: "Key",
404
- value: meta.key,
405
- onChange: (e) => setBundleMeta(
406
- (prev) => prev.map((m, i) => i === index ? { ...m, key: e.target.value } : m)
407
- )
408
- }
409
- ),
410
- /* @__PURE__ */ jsxRuntime.jsx(
411
- ui.Input,
412
- {
413
- placeholder: "Value",
414
- value: meta.value,
415
- onChange: (e) => setBundleMeta(
416
- (prev) => prev.map(
417
- (m, i) => i === index ? { ...m, value: e.target.value } : m
418
- )
419
- )
420
- }
421
- ),
422
- /* @__PURE__ */ jsxRuntime.jsx(
423
- ui.Button,
424
- {
425
- variant: "secondary",
426
- onClick: () => setBundleMeta((prev) => prev.filter((_, i) => i !== index)),
427
- children: "Remove"
428
- }
429
- )
376
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Input, { placeholder: "Key", value: meta.key, onChange: (e) => setBundleMeta((prev) => prev.map((m, i) => i === index ? { ...m, key: e.target.value } : m)) }),
377
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Input, { placeholder: "Value", value: meta.value, onChange: (e) => setBundleMeta((prev) => prev.map((m, i) => i === index ? { ...m, value: e.target.value } : m)) }),
378
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => setBundleMeta((prev) => prev.filter((_, i) => i !== index)), children: "Remove" })
430
379
  ] }, index)),
431
- /* @__PURE__ */ jsxRuntime.jsx(
432
- ui.Button,
433
- {
434
- variant: "secondary",
435
- onClick: () => setBundleMeta((prev) => [...prev, { key: "", value: "" }]),
436
- className: "mt-4",
437
- children: "Add Metadata"
438
- }
439
- )
380
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => setBundleMeta((prev) => [...prev, { key: "", value: "" }]), className: "mt-2", children: "Add Metadata" })
440
381
  ] })
441
382
  ] })
442
383
  ] }) }) }),
443
384
  /* @__PURE__ */ jsxRuntime.jsx(ui.FocusModal.Footer, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-x-2", children: [
444
385
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: closeModal, children: "Cancel" }),
445
- /* @__PURE__ */ jsxRuntime.jsx(
446
- ui.Button,
447
- {
448
- variant: "primary",
449
- onClick: handleSaveBundle,
450
- isLoading: isSaving,
451
- disabled: !selectedProductId,
452
- children: isEditing ? "Update Bundle" : "Create Bundle"
453
- }
454
- )
386
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "primary", onClick: handleSave, isLoading: isSaving, disabled: !selectedProductId, children: isEditing ? "Update Bundle" : "Create Bundle" })
455
387
  ] }) })
456
388
  ] }) })
457
389
  ] });
@@ -474,78 +406,87 @@ const BundleItemForm = ({ item, index, onUpdate, onRemove }) => /* @__PURE__ */
474
406
  onChange: (id, title) => {
475
407
  onUpdate("product_id", id || void 0);
476
408
  onUpdate("product_title", title);
409
+ onUpdate("variant_mode", "all");
410
+ onUpdate("variant_ids", []);
477
411
  },
478
412
  placeholder: "Search for a product…"
479
413
  }
480
414
  )
481
415
  ] }),
482
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-4", children: [
483
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
484
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Min Quantity" }),
416
+ item.product_id && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
417
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Applies to" }),
418
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-6", children: [
419
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-sm cursor-pointer select-none", children: [
420
+ /* @__PURE__ */ jsxRuntime.jsx(
421
+ "input",
422
+ {
423
+ type: "radio",
424
+ name: `variant-mode-${index}`,
425
+ checked: item.variant_mode === "all",
426
+ onChange: () => {
427
+ onUpdate("variant_mode", "all");
428
+ onUpdate("variant_ids", []);
429
+ }
430
+ }
431
+ ),
432
+ "All variations"
433
+ ] }),
434
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-sm cursor-pointer select-none", children: [
435
+ /* @__PURE__ */ jsxRuntime.jsx(
436
+ "input",
437
+ {
438
+ type: "radio",
439
+ name: `variant-mode-${index}`,
440
+ checked: item.variant_mode === "specific",
441
+ onChange: () => onUpdate("variant_mode", "specific")
442
+ }
443
+ ),
444
+ "Specific variations"
445
+ ] })
446
+ ] }),
447
+ item.variant_mode === "specific" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border border-gray-200 rounded-md p-3 bg-gray-50", children: [
448
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-xs text-gray-500 mb-3", children: 'Check each variation that qualifies for this bundle item. Switching back to "All variations" will clear this selection.' }),
485
449
  /* @__PURE__ */ jsxRuntime.jsx(
486
- ui.Input,
450
+ VariantPicker,
487
451
  {
488
- type: "number",
489
- min: 0,
490
- value: item.min_quantity,
491
- onChange: (e) => onUpdate("min_quantity", parseInt(e.target.value) || 0)
452
+ productId: item.product_id,
453
+ selectedIds: item.variant_ids,
454
+ onChange: (ids) => onUpdate("variant_ids", ids)
492
455
  }
493
- )
456
+ ),
457
+ item.variant_ids.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { className: "text-xs text-gray-400 mt-2", children: [
458
+ item.variant_ids.length,
459
+ " variation",
460
+ item.variant_ids.length > 1 ? "s" : "",
461
+ " selected"
462
+ ] })
463
+ ] })
464
+ ] }),
465
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-4", children: [
466
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
467
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Min Quantity" }),
468
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Input, { type: "number", min: 0, value: item.min_quantity, onChange: (e) => onUpdate("min_quantity", parseInt(e.target.value) || 0) })
494
469
  ] }),
495
470
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
496
471
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Max Quantity" }),
497
- /* @__PURE__ */ jsxRuntime.jsx(
498
- ui.Input,
499
- {
500
- type: "number",
501
- min: 0,
502
- value: item.max_quantity,
503
- onChange: (e) => onUpdate("max_quantity", parseInt(e.target.value) || 0)
504
- }
505
- )
472
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Input, { type: "number", min: 0, value: item.max_quantity, onChange: (e) => onUpdate("max_quantity", parseInt(e.target.value) || 0) })
506
473
  ] }),
507
474
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
508
475
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Default Quantity" }),
509
- /* @__PURE__ */ jsxRuntime.jsx(
510
- ui.Input,
511
- {
512
- type: "number",
513
- min: 0,
514
- value: item.default_quantity,
515
- onChange: (e) => onUpdate("default_quantity", parseInt(e.target.value) || 0)
516
- }
517
- )
476
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Input, { type: "number", min: 0, value: item.default_quantity, onChange: (e) => onUpdate("default_quantity", parseInt(e.target.value) || 0) })
518
477
  ] })
519
478
  ] }),
520
479
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
521
480
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
522
- /* @__PURE__ */ jsxRuntime.jsx(
523
- ui.Switch,
524
- {
525
- checked: item.optional,
526
- onCheckedChange: (checked) => onUpdate("optional", checked)
527
- }
528
- ),
481
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Switch, { checked: item.optional, onCheckedChange: (v) => onUpdate("optional", v) }),
529
482
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Optional" })
530
483
  ] }),
531
484
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
532
- /* @__PURE__ */ jsxRuntime.jsx(
533
- ui.Switch,
534
- {
535
- checked: item.separate_shipping,
536
- onCheckedChange: (checked) => onUpdate("separate_shipping", checked)
537
- }
538
- ),
485
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Switch, { checked: item.separate_shipping, onCheckedChange: (v) => onUpdate("separate_shipping", v) }),
539
486
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Separate Shipping" })
540
487
  ] }),
541
488
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
542
- /* @__PURE__ */ jsxRuntime.jsx(
543
- ui.Switch,
544
- {
545
- checked: item.individual_price,
546
- onCheckedChange: (checked) => onUpdate("individual_price", checked)
547
- }
548
- ),
489
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Switch, { checked: item.individual_price, onCheckedChange: (v) => onUpdate("individual_price", v) }),
549
490
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: "Individual Price" })
550
491
  ] })
551
492
  ] })
@@ -102,9 +102,50 @@ const ProductSearchSelect = ({
102
102
  ] })
103
103
  ] });
104
104
  };
105
+ const VariantPicker = ({
106
+ productId,
107
+ selectedIds,
108
+ onChange
109
+ }) => {
110
+ const [variants, setVariants] = useState([]);
111
+ const [loading, setLoading] = useState(false);
112
+ useEffect(() => {
113
+ if (!productId) {
114
+ setVariants([]);
115
+ return;
116
+ }
117
+ setLoading(true);
118
+ sdk.admin.product.retrieve(productId).then(
119
+ ({ product }) => setVariants(
120
+ (product.variants || []).map((v) => ({ id: v.id, title: v.title ?? v.id, sku: v.sku ?? void 0 }))
121
+ )
122
+ ).catch(() => setVariants([])).finally(() => setLoading(false));
123
+ }, [productId]);
124
+ const toggle = (id) => onChange(
125
+ selectedIds.includes(id) ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]
126
+ );
127
+ if (loading) return /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-400", children: "Loading variants…" });
128
+ if (!loading && variants.length === 0)
129
+ return /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-400", children: "No variants found." });
130
+ return /* @__PURE__ */ jsx("div", { className: "space-y-2 max-h-52 overflow-y-auto pr-1", children: variants.map((v) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer select-none", children: [
131
+ /* @__PURE__ */ jsx(
132
+ "input",
133
+ {
134
+ type: "checkbox",
135
+ checked: selectedIds.includes(v.id),
136
+ onChange: () => toggle(v.id),
137
+ className: "h-4 w-4 rounded border-gray-300"
138
+ }
139
+ ),
140
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: v.title }),
141
+ v.sku && /* @__PURE__ */ jsx("span", { className: "text-xs text-gray-400 font-mono", children: v.sku })
142
+ ] }, v.id)) });
143
+ };
105
144
  const emptyBundleItem = () => ({
106
145
  product_id: void 0,
107
146
  product_title: "",
147
+ variant_mode: "all",
148
+ variant_ids: [],
108
149
  min_quantity: 1,
109
150
  max_quantity: 1,
110
151
  default_quantity: 1,
@@ -112,47 +153,42 @@ const emptyBundleItem = () => ({
112
153
  separate_shipping: false,
113
154
  individual_price: false
114
155
  });
115
- const resetModal = {
116
- isEditing: false,
117
- selectedProductId: void 0,
118
- selectedProductTitle: "",
119
- bundleItems: [],
120
- bundleMeta: []
121
- };
122
- const limit = 15;
156
+ const LIMIT = 15;
123
157
  const BundledProductsPage = () => {
124
158
  const [page, setPage] = useState(0);
125
- const [openCreateModal, setOpenCreateModal] = useState(false);
159
+ const [openModal, setOpenModal] = useState(false);
126
160
  const [isEditing, setIsEditing] = useState(false);
127
161
  const [selectedProductId, setSelectedProductId] = useState();
128
162
  const [selectedProductTitle, setSelectedProductTitle] = useState("");
129
163
  const [bundleItems, setBundleItems] = useState([]);
130
164
  const [bundleMeta, setBundleMeta] = useState([]);
131
165
  const queryClient = useQueryClient();
132
- const offset = page * limit;
166
+ const offset = page * LIMIT;
133
167
  const closeModal = () => {
134
- setOpenCreateModal(false);
135
- setIsEditing(resetModal.isEditing);
136
- setSelectedProductId(resetModal.selectedProductId);
137
- setSelectedProductTitle(resetModal.selectedProductTitle);
138
- setBundleItems(resetModal.bundleItems);
139
- setBundleMeta(resetModal.bundleMeta);
168
+ setOpenModal(false);
169
+ setIsEditing(false);
170
+ setSelectedProductId(void 0);
171
+ setSelectedProductTitle("");
172
+ setBundleItems([]);
173
+ setBundleMeta([]);
140
174
  };
141
175
  const { data, isLoading } = useQuery({
142
- queryKey: ["bundled-products", offset, limit],
176
+ queryKey: ["bundled-products", offset, LIMIT],
143
177
  queryFn: () => sdk.client.fetch("/admin/bundled-products", {
144
178
  method: "GET",
145
- query: { limit, offset }
179
+ query: { limit: LIMIT, offset }
146
180
  })
147
181
  });
148
182
  const { mutateAsync: saveBundle, isPending: isSaving } = useMutation({
149
- mutationFn: async (payload) => {
183
+ mutationFn: async () => {
150
184
  if (!selectedProductId) throw new Error("No product selected");
185
+ const validItems = bundleItems.filter((i) => i.product_id);
151
186
  await sdk.client.fetch(`/admin/products/${selectedProductId}/bundle`, {
152
187
  method: "POST",
153
188
  body: {
154
- child_product_ids: payload.child_product_ids.map((item) => ({
189
+ child_product_ids: validItems.map((item) => ({
155
190
  id: item.product_id,
191
+ variant_ids: item.variant_mode === "specific" ? item.variant_ids : [],
156
192
  min_quantity: item.min_quantity,
157
193
  max_quantity: item.max_quantity,
158
194
  default_quantity: item.default_quantity,
@@ -160,72 +196,70 @@ const BundledProductsPage = () => {
160
196
  separate_shipping: item.separate_shipping,
161
197
  individual_price: item.individual_price
162
198
  })),
163
- bundle_meta: payload.bundle_meta,
164
- is_bundle: payload.is_bundle
199
+ bundle_meta: bundleMeta,
200
+ is_bundle: true
165
201
  }
166
202
  });
167
203
  }
168
204
  });
169
205
  const { mutateAsync: deleteBundle } = useMutation({
170
- mutationFn: async (productId) => {
171
- await sdk.client.fetch(`/admin/products/${productId}/bundle`, { method: "DELETE" });
172
- }
206
+ mutationFn: (productId) => sdk.client.fetch(`/admin/products/${productId}/bundle`, { method: "DELETE" })
173
207
  });
174
- const handleDeleteBundle = async (productId) => {
175
- try {
176
- await deleteBundle(productId);
177
- toast.success("Bundle deleted successfully");
178
- queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
179
- } catch {
180
- toast.error("Failed to delete bundle");
181
- }
182
- };
183
208
  const handleEditBundle = (bundle) => {
184
209
  setIsEditing(true);
185
210
  setSelectedProductId(bundle.product.id);
186
211
  setSelectedProductTitle(bundle.title);
187
212
  setBundleItems(
188
- bundle.items.map((item) => ({
189
- product_id: item.product.id,
190
- product_title: item.product.title,
191
- min_quantity: item.min_quantity,
192
- max_quantity: item.max_quantity,
193
- default_quantity: item.default_quantity,
194
- optional: item.optional,
195
- separate_shipping: item.separate_shipping,
196
- individual_price: item.individual_price
197
- }))
213
+ bundle.items.map((item) => {
214
+ var _a;
215
+ return {
216
+ product_id: item.product.id,
217
+ product_title: item.product.title,
218
+ variant_mode: ((_a = item.variant_ids) == null ? void 0 : _a.length) ? "specific" : "all",
219
+ variant_ids: item.variant_ids ?? [],
220
+ min_quantity: item.min_quantity,
221
+ max_quantity: item.max_quantity,
222
+ default_quantity: item.default_quantity,
223
+ optional: item.optional,
224
+ separate_shipping: item.separate_shipping,
225
+ individual_price: item.individual_price
226
+ };
227
+ })
198
228
  );
199
229
  setBundleMeta(bundle.bundle_meta || []);
200
- setOpenCreateModal(true);
230
+ setOpenModal(true);
201
231
  };
202
- const handleSaveBundle = async () => {
232
+ const handleDeleteBundle = async (productId) => {
233
+ try {
234
+ await deleteBundle(productId);
235
+ toast.success("Bundle deleted");
236
+ queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
237
+ } catch {
238
+ toast.error("Failed to delete bundle");
239
+ }
240
+ };
241
+ const handleSave = async () => {
203
242
  if (!selectedProductId) {
204
243
  toast.error("Please select a product");
205
244
  return;
206
245
  }
207
- const validItems = bundleItems.filter((item) => item.product_id);
208
- if (validItems.length === 0) {
246
+ if (!bundleItems.some((i) => i.product_id)) {
209
247
  toast.error("Please add at least one product to the bundle");
210
248
  return;
211
249
  }
212
250
  try {
213
- await saveBundle({ child_product_ids: validItems, bundle_meta: bundleMeta, is_bundle: true });
214
- toast.success(isEditing ? "Bundle updated successfully" : "Bundle created successfully");
251
+ await saveBundle();
252
+ toast.success(isEditing ? "Bundle updated" : "Bundle created");
215
253
  queryClient.invalidateQueries({ queryKey: ["bundled-products"] });
216
254
  closeModal();
217
255
  } catch {
218
256
  toast.error(isEditing ? "Failed to update bundle" : "Failed to create bundle");
219
257
  }
220
258
  };
221
- const updateBundleItem = (index, field, value) => {
222
- setBundleItems(
223
- (prev) => prev.map((item, i) => i === index ? { ...item, [field]: value } : item)
224
- );
225
- };
226
- const totalPages = Math.ceil(((data == null ? void 0 : data.count) || 0) / limit);
259
+ const updateItem = (index, field, value) => setBundleItems((prev) => prev.map((item, i) => i === index ? { ...item, [field]: value } : item));
260
+ const totalPages = Math.ceil(((data == null ? void 0 : data.count) || 0) / LIMIT);
227
261
  return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
228
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2 md:flex-row md:items-center p-6", children: [
262
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-6", children: [
229
263
  /* @__PURE__ */ jsx(Heading, { children: "Bundled Products" }),
230
264
  /* @__PURE__ */ jsx(
231
265
  Button,
@@ -233,7 +267,7 @@ const BundledProductsPage = () => {
233
267
  variant: "primary",
234
268
  onClick: () => {
235
269
  closeModal();
236
- setOpenCreateModal(true);
270
+ setOpenModal(true);
237
271
  },
238
272
  children: "Create Bundle"
239
273
  }
@@ -248,110 +282,60 @@ const BundledProductsPage = () => {
248
282
  /* @__PURE__ */ jsx("th", { className: "border border-gray-200 px-4 py-2 text-left", children: "Actions" })
249
283
  ] }) }),
250
284
  /* @__PURE__ */ jsxs("tbody", { children: [
251
- ((data == null ? void 0 : data.bundled_products.length) ?? 0) === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
252
- "td",
253
- {
254
- colSpan: 4,
255
- className: "border border-gray-200 px-4 py-6 text-center text-gray-500",
256
- children: "No bundled products found."
257
- }
258
- ) }),
285
+ ((data == null ? void 0 : data.bundled_products.length) ?? 0) === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 4, className: "border border-gray-200 px-4 py-6 text-center text-gray-400", children: "No bundled products found." }) }),
259
286
  data == null ? void 0 : data.bundled_products.map((bundle) => /* @__PURE__ */ jsxs("tr", { className: "hover:bg-gray-50", children: [
260
287
  /* @__PURE__ */ jsxs("td", { className: "border border-gray-200 px-4 py-3", children: [
261
- /* @__PURE__ */ jsx(
262
- Link,
263
- {
264
- to: `/products/${bundle.product.id}`,
265
- className: "font-medium text-blue-600 hover:underline",
266
- children: bundle.title
267
- }
268
- ),
288
+ /* @__PURE__ */ jsx(Link, { to: `/products/${bundle.product.id}`, className: "font-medium text-blue-600 hover:underline", children: bundle.title }),
269
289
  /* @__PURE__ */ jsx("div", { className: "text-xs text-gray-400 mt-0.5", children: bundle.id })
270
290
  ] }),
271
- /* @__PURE__ */ jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsx(
272
- Badge,
273
- {
274
- className: bundle.status === "published" ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600",
275
- children: bundle.status ?? "—"
276
- }
277
- ) }),
278
- /* @__PURE__ */ jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
291
+ /* @__PURE__ */ jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsx(Badge, { className: bundle.status === "published" ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600", children: bundle.status ?? "—" }) }),
292
+ /* @__PURE__ */ jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
279
293
  bundle.items.length === 0 && /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-400", children: "No items" }),
280
- bundle.items.map((item) => /* @__PURE__ */ jsxs("div", { className: "text-sm flex items-center gap-1", children: [
281
- /* @__PURE__ */ jsx(
282
- Link,
283
- {
284
- to: `/products/${item.product.id}`,
285
- className: "text-blue-600 hover:underline",
286
- children: item.product.title
287
- }
288
- ),
289
- /* @__PURE__ */ jsxs("span", { className: "text-gray-400", children: [
290
- ",
291
- item.default_quantity
292
- ] }),
293
- item.optional && /* @__PURE__ */ jsx(Badge, { className: "bg-gray-100 text-gray-500 text-xs", children: "Optional" })
294
- ] }, item.id))
294
+ bundle.items.map((item) => {
295
+ var _a;
296
+ return /* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
297
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
298
+ /* @__PURE__ */ jsx(Link, { to: `/products/${item.product.id}`, className: "text-blue-600 hover:underline", children: item.product.title }),
299
+ /* @__PURE__ */ jsxs("span", { className: "text-gray-400", children: [
300
+ ",
301
+ item.default_quantity
302
+ ] }),
303
+ item.optional && /* @__PURE__ */ jsx(Badge, { className: "bg-gray-100 text-gray-500 text-xs", children: "Optional" })
304
+ ] }),
305
+ ((_a = item.variant_ids) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ jsxs("div", { className: "text-xs text-gray-400 ml-1", children: [
306
+ item.variant_ids.length,
307
+ " specific variant",
308
+ item.variant_ids.length > 1 ? "s" : ""
309
+ ] })
310
+ ] }, item.id);
311
+ })
295
312
  ] }) }),
296
313
  /* @__PURE__ */ jsx("td", { className: "border border-gray-200 px-4 py-3", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
297
- /* @__PURE__ */ jsx(
298
- Button,
299
- {
300
- variant: "secondary",
301
- size: "small",
302
- onClick: () => handleEditBundle(bundle),
303
- children: "Edit"
304
- }
305
- ),
306
- /* @__PURE__ */ jsx(
307
- Button,
308
- {
309
- variant: "secondary",
310
- size: "small",
311
- onClick: () => handleDeleteBundle(bundle.id),
312
- className: "text-red-600 hover:text-red-700",
313
- children: "Delete"
314
- }
315
- )
314
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", onClick: () => handleEditBundle(bundle), children: "Edit" }),
315
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", onClick: () => handleDeleteBundle(bundle.id), className: "text-red-600 hover:text-red-700", children: "Delete" })
316
316
  ] }) })
317
317
  ] }, bundle.id))
318
318
  ] })
319
319
  ] }) }),
320
320
  totalPages > 1 && /* @__PURE__ */ jsxs("div", { className: "flex justify-center gap-2 mt-6", children: [
321
- /* @__PURE__ */ jsx(
322
- Button,
323
- {
324
- variant: "secondary",
325
- onClick: () => setPage(Math.max(0, page - 1)),
326
- disabled: page === 0,
327
- children: "Previous"
328
- }
329
- ),
321
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setPage(Math.max(0, page - 1)), disabled: page === 0, children: "Previous" }),
330
322
  /* @__PURE__ */ jsxs("span", { className: "flex items-center px-4", children: [
331
323
  "Page ",
332
324
  page + 1,
333
325
  " of ",
334
326
  totalPages
335
327
  ] }),
336
- /* @__PURE__ */ jsx(
337
- Button,
338
- {
339
- variant: "secondary",
340
- onClick: () => setPage(Math.min(totalPages - 1, page + 1)),
341
- disabled: page === totalPages - 1,
342
- children: "Next"
343
- }
344
- )
328
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setPage(Math.min(totalPages - 1, page + 1)), disabled: page === totalPages - 1, children: "Next" })
345
329
  ] })
346
330
  ] }),
347
- /* @__PURE__ */ jsx(FocusModal, { open: openCreateModal, onOpenChange: (open) => {
331
+ /* @__PURE__ */ jsx(FocusModal, { open: openModal, onOpenChange: (open) => {
348
332
  if (!open) closeModal();
349
333
  }, children: /* @__PURE__ */ jsxs(FocusModal.Content, { children: [
350
334
  /* @__PURE__ */ jsx(FocusModal.Header, { children: /* @__PURE__ */ jsx(Heading, { level: "h1", children: isEditing ? "Edit Bundle" : "Create Bundle" }) }),
351
335
  /* @__PURE__ */ jsx(FocusModal.Body, { children: /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center h-[80vh] overflow-y-auto px-2 py-8", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-3xl flex flex-col gap-y-8", children: [
352
336
  /* @__PURE__ */ jsxs("div", { children: [
353
337
  /* @__PURE__ */ jsx(Label, { children: "Bundle Product" }),
354
- /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-500 mb-2", children: isEditing ? "The product this bundle is attached to" : "Choose the product that will become a bundle" }),
338
+ /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-500 mb-2", children: isEditing ? "The product this bundle is attached to" : "Choose the product that becomes the bundle" }),
355
339
  /* @__PURE__ */ jsx(
356
340
  ProductSearchSelect,
357
341
  {
@@ -375,80 +359,28 @@ const BundledProductsPage = () => {
375
359
  {
376
360
  item,
377
361
  index,
378
- onUpdate: (field, value) => updateBundleItem(index, field, value),
362
+ onUpdate: (field, value) => updateItem(index, field, value),
379
363
  onRemove: () => setBundleItems((prev) => prev.filter((_, i) => i !== index))
380
364
  },
381
365
  index
382
366
  )),
383
- /* @__PURE__ */ jsx(
384
- Button,
385
- {
386
- variant: "secondary",
387
- onClick: () => setBundleItems((prev) => [...prev, emptyBundleItem()]),
388
- className: "mt-4",
389
- children: "Add Item"
390
- }
391
- )
367
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setBundleItems((prev) => [...prev, emptyBundleItem()]), className: "mt-2", children: "Add Item" })
392
368
  ] }),
393
369
  /* @__PURE__ */ jsxs("div", { children: [
394
370
  /* @__PURE__ */ jsx(Heading, { level: "h2", children: "Bundle Metadata" }),
395
- /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-500 mb-4", children: "Custom key-value pairs for this bundle" }),
371
+ /* @__PURE__ */ jsx(Text, { className: "text-sm text-gray-500 mb-4", children: "Custom key-value pairs" }),
396
372
  bundleMeta.map((meta, index) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2 mb-2", children: [
397
- /* @__PURE__ */ jsx(
398
- Input,
399
- {
400
- placeholder: "Key",
401
- value: meta.key,
402
- onChange: (e) => setBundleMeta(
403
- (prev) => prev.map((m, i) => i === index ? { ...m, key: e.target.value } : m)
404
- )
405
- }
406
- ),
407
- /* @__PURE__ */ jsx(
408
- Input,
409
- {
410
- placeholder: "Value",
411
- value: meta.value,
412
- onChange: (e) => setBundleMeta(
413
- (prev) => prev.map(
414
- (m, i) => i === index ? { ...m, value: e.target.value } : m
415
- )
416
- )
417
- }
418
- ),
419
- /* @__PURE__ */ jsx(
420
- Button,
421
- {
422
- variant: "secondary",
423
- onClick: () => setBundleMeta((prev) => prev.filter((_, i) => i !== index)),
424
- children: "Remove"
425
- }
426
- )
373
+ /* @__PURE__ */ jsx(Input, { placeholder: "Key", value: meta.key, onChange: (e) => setBundleMeta((prev) => prev.map((m, i) => i === index ? { ...m, key: e.target.value } : m)) }),
374
+ /* @__PURE__ */ jsx(Input, { placeholder: "Value", value: meta.value, onChange: (e) => setBundleMeta((prev) => prev.map((m, i) => i === index ? { ...m, value: e.target.value } : m)) }),
375
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setBundleMeta((prev) => prev.filter((_, i) => i !== index)), children: "Remove" })
427
376
  ] }, index)),
428
- /* @__PURE__ */ jsx(
429
- Button,
430
- {
431
- variant: "secondary",
432
- onClick: () => setBundleMeta((prev) => [...prev, { key: "", value: "" }]),
433
- className: "mt-4",
434
- children: "Add Metadata"
435
- }
436
- )
377
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setBundleMeta((prev) => [...prev, { key: "", value: "" }]), className: "mt-2", children: "Add Metadata" })
437
378
  ] })
438
379
  ] })
439
380
  ] }) }) }),
440
381
  /* @__PURE__ */ jsx(FocusModal.Footer, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-x-2", children: [
441
382
  /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: closeModal, children: "Cancel" }),
442
- /* @__PURE__ */ jsx(
443
- Button,
444
- {
445
- variant: "primary",
446
- onClick: handleSaveBundle,
447
- isLoading: isSaving,
448
- disabled: !selectedProductId,
449
- children: isEditing ? "Update Bundle" : "Create Bundle"
450
- }
451
- )
383
+ /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: handleSave, isLoading: isSaving, disabled: !selectedProductId, children: isEditing ? "Update Bundle" : "Create Bundle" })
452
384
  ] }) })
453
385
  ] }) })
454
386
  ] });
@@ -471,78 +403,87 @@ const BundleItemForm = ({ item, index, onUpdate, onRemove }) => /* @__PURE__ */
471
403
  onChange: (id, title) => {
472
404
  onUpdate("product_id", id || void 0);
473
405
  onUpdate("product_title", title);
406
+ onUpdate("variant_mode", "all");
407
+ onUpdate("variant_ids", []);
474
408
  },
475
409
  placeholder: "Search for a product…"
476
410
  }
477
411
  )
478
412
  ] }),
479
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-4", children: [
480
- /* @__PURE__ */ jsxs("div", { children: [
481
- /* @__PURE__ */ jsx(Label, { children: "Min Quantity" }),
413
+ item.product_id && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
414
+ /* @__PURE__ */ jsx(Label, { children: "Applies to" }),
415
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-6", children: [
416
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm cursor-pointer select-none", children: [
417
+ /* @__PURE__ */ jsx(
418
+ "input",
419
+ {
420
+ type: "radio",
421
+ name: `variant-mode-${index}`,
422
+ checked: item.variant_mode === "all",
423
+ onChange: () => {
424
+ onUpdate("variant_mode", "all");
425
+ onUpdate("variant_ids", []);
426
+ }
427
+ }
428
+ ),
429
+ "All variations"
430
+ ] }),
431
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm cursor-pointer select-none", children: [
432
+ /* @__PURE__ */ jsx(
433
+ "input",
434
+ {
435
+ type: "radio",
436
+ name: `variant-mode-${index}`,
437
+ checked: item.variant_mode === "specific",
438
+ onChange: () => onUpdate("variant_mode", "specific")
439
+ }
440
+ ),
441
+ "Specific variations"
442
+ ] })
443
+ ] }),
444
+ item.variant_mode === "specific" && /* @__PURE__ */ jsxs("div", { className: "border border-gray-200 rounded-md p-3 bg-gray-50", children: [
445
+ /* @__PURE__ */ jsx(Text, { className: "text-xs text-gray-500 mb-3", children: 'Check each variation that qualifies for this bundle item. Switching back to "All variations" will clear this selection.' }),
482
446
  /* @__PURE__ */ jsx(
483
- Input,
447
+ VariantPicker,
484
448
  {
485
- type: "number",
486
- min: 0,
487
- value: item.min_quantity,
488
- onChange: (e) => onUpdate("min_quantity", parseInt(e.target.value) || 0)
449
+ productId: item.product_id,
450
+ selectedIds: item.variant_ids,
451
+ onChange: (ids) => onUpdate("variant_ids", ids)
489
452
  }
490
- )
453
+ ),
454
+ item.variant_ids.length > 0 && /* @__PURE__ */ jsxs(Text, { className: "text-xs text-gray-400 mt-2", children: [
455
+ item.variant_ids.length,
456
+ " variation",
457
+ item.variant_ids.length > 1 ? "s" : "",
458
+ " selected"
459
+ ] })
460
+ ] })
461
+ ] }),
462
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-4", children: [
463
+ /* @__PURE__ */ jsxs("div", { children: [
464
+ /* @__PURE__ */ jsx(Label, { children: "Min Quantity" }),
465
+ /* @__PURE__ */ jsx(Input, { type: "number", min: 0, value: item.min_quantity, onChange: (e) => onUpdate("min_quantity", parseInt(e.target.value) || 0) })
491
466
  ] }),
492
467
  /* @__PURE__ */ jsxs("div", { children: [
493
468
  /* @__PURE__ */ jsx(Label, { children: "Max Quantity" }),
494
- /* @__PURE__ */ jsx(
495
- Input,
496
- {
497
- type: "number",
498
- min: 0,
499
- value: item.max_quantity,
500
- onChange: (e) => onUpdate("max_quantity", parseInt(e.target.value) || 0)
501
- }
502
- )
469
+ /* @__PURE__ */ jsx(Input, { type: "number", min: 0, value: item.max_quantity, onChange: (e) => onUpdate("max_quantity", parseInt(e.target.value) || 0) })
503
470
  ] }),
504
471
  /* @__PURE__ */ jsxs("div", { children: [
505
472
  /* @__PURE__ */ jsx(Label, { children: "Default Quantity" }),
506
- /* @__PURE__ */ jsx(
507
- Input,
508
- {
509
- type: "number",
510
- min: 0,
511
- value: item.default_quantity,
512
- onChange: (e) => onUpdate("default_quantity", parseInt(e.target.value) || 0)
513
- }
514
- )
473
+ /* @__PURE__ */ jsx(Input, { type: "number", min: 0, value: item.default_quantity, onChange: (e) => onUpdate("default_quantity", parseInt(e.target.value) || 0) })
515
474
  ] })
516
475
  ] }),
517
476
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
518
477
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
519
- /* @__PURE__ */ jsx(
520
- Switch,
521
- {
522
- checked: item.optional,
523
- onCheckedChange: (checked) => onUpdate("optional", checked)
524
- }
525
- ),
478
+ /* @__PURE__ */ jsx(Switch, { checked: item.optional, onCheckedChange: (v) => onUpdate("optional", v) }),
526
479
  /* @__PURE__ */ jsx(Label, { children: "Optional" })
527
480
  ] }),
528
481
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
529
- /* @__PURE__ */ jsx(
530
- Switch,
531
- {
532
- checked: item.separate_shipping,
533
- onCheckedChange: (checked) => onUpdate("separate_shipping", checked)
534
- }
535
- ),
482
+ /* @__PURE__ */ jsx(Switch, { checked: item.separate_shipping, onCheckedChange: (v) => onUpdate("separate_shipping", v) }),
536
483
  /* @__PURE__ */ jsx(Label, { children: "Separate Shipping" })
537
484
  ] }),
538
485
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
539
- /* @__PURE__ */ jsx(
540
- Switch,
541
- {
542
- checked: item.individual_price,
543
- onCheckedChange: (checked) => onUpdate("individual_price", checked)
544
- }
545
- ),
486
+ /* @__PURE__ */ jsx(Switch, { checked: item.individual_price, onCheckedChange: (v) => onUpdate("individual_price", v) }),
546
487
  /* @__PURE__ */ jsx(Label, { children: "Individual Price" })
547
488
  ] })
548
489
  ] })
@@ -52,6 +52,7 @@ async function GET(req, res) {
52
52
  return {
53
53
  id: childConfig.id,
54
54
  product: { id: childConfig.id, title: childTitle },
55
+ variant_ids: childConfig.variant_ids ?? [],
55
56
  quantity: childConfig.default_quantity || 1,
56
57
  default_quantity: childConfig.default_quantity || 1,
57
58
  min_quantity: childConfig.min_quantity ?? 1,
@@ -89,7 +90,7 @@ async function GET(req, res) {
89
90
  }
90
91
  async function POST(req, res) {
91
92
  try {
92
- const { title, product, items } = req.body;
93
+ const { product, items } = req.body;
93
94
  // Create the product first
94
95
  const productService = req.scope.resolve(utils_1.Modules.PRODUCT);
95
96
  const createdProducts = await productService.createProducts([product]);
@@ -141,4 +142,4 @@ async function POST(req, res) {
141
142
  });
142
143
  }
143
144
  }
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1bmRsZWQtcHJvZHVjdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxrQkFpRkM7QUFFRCxvQkE4REM7QUE5SkQsc0RBQXdEO0FBRXhELHFEQUFtRDtBQUduRCxTQUFTLGNBQWMsQ0FBQyxLQUFVO0lBQ2hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDckIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQUMsT0FBTyxFQUFFLENBQUE7UUFBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDdkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV4RCxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsOEVBQThFO1FBQzlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUs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
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2J1bmRsZWQtcHJvZHVjdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxrQkFrRkM7QUFFRCxvQkE2REM7QUE5SkQsc0RBQXdEO0FBRXhELHFEQUFtRDtBQUduRCxTQUFTLGNBQWMsQ0FBQyxLQUFVO0lBQ2hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDckIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQUMsT0FBTyxFQUFFLENBQUE7UUFBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDdkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV4RCxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsOEVBQThFO1FBQzlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUs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
@@ -59,4 +59,4 @@ async function DELETE(req, res) {
59
59
  });
60
60
  res.json({ product });
61
61
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3RzL1tpZF0vYnVuZGxlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsa0JBa0NDO0FBRUQsb0JBa0NDO0FBRUQsd0JBYUM7QUFqR0QsMEZBQXNIO0FBQ3RILDBGQUE0RjtBQUM1Riw0REFBOEQ7QUFFOUQscURBQW1EO0FBUTVDLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtRQUNwQyxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsa0JBQWtCO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUN2QyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFL0QsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE9BQU87Z0JBQ1YsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLHVDQUF1QztZQUNoRCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTtTQUNoRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUNwQyxNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxTQUFTLEVBQ1YsR0FBRyxHQUFHLENBQUMsSUFZUCxDQUFBO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLG1EQUEyQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsVUFBVSxFQUFFLFNBQVM7WUFDckIsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDWCxTQUFTO1NBQ3lCO0tBQ3JDLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFTSxLQUFLLFVBQVUsTUFBTSxDQUMxQixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsbURBQTJCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMzRSxLQUFLLEVBQUU7WUFDTCxVQUFVLEVBQUUsU0FBUztTQUN0QjtLQUNGLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUMifQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3RzL1tpZF0vYnVuZGxlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsa0JBa0NDO0FBRUQsb0JBbUNDO0FBRUQsd0JBYUM7QUFsR0QsMEZBQXNIO0FBQ3RILDBGQUE0RjtBQUM1Riw0REFBOEQ7QUFFOUQscURBQW1EO0FBUTVDLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtRQUNwQyxNQUFNLGFBQWEsR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sY0FBYyxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsa0JBQWtCO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUN2QyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFL0QsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE9BQU87Z0JBQ1YsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLHVDQUF1QztZQUNoRCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTtTQUNoRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUNwQyxNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxTQUFTLEVBQ1YsR0FBRyxHQUFHLENBQUMsSUFhUCxDQUFBO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLG1EQUEyQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsVUFBVSxFQUFFLFNBQVM7WUFDckIsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDWCxTQUFTO1NBQ3lCO0tBQ3JDLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFTSxLQUFLLFVBQVUsTUFBTSxDQUMxQixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsbURBQTJCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMzRSxLQUFLLEVBQUU7WUFDTCxVQUFVLEVBQUUsU0FBUztTQUN0QjtLQUNGLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUMifQ==
@@ -16,6 +16,7 @@ const updateProductBundleStep = (0, workflows_sdk_1.createStep)("update-product-
16
16
  child_products: {
17
17
  data: input.child_product_ids?.map(child => ({
18
18
  id: child.id,
19
+ variant_ids: child.variant_ids ?? [],
19
20
  min_quantity: child.min_quantity ?? 1,
20
21
  max_quantity: child.max_quantity ?? 1,
21
22
  default_quantity: child.default_quantity ?? 1,
@@ -36,6 +37,7 @@ const updateProductBundleStep = (0, workflows_sdk_1.createStep)("update-product-
36
37
  child_products: {
37
38
  data: input.child_product_ids?.map(child => ({
38
39
  id: child.id,
40
+ variant_ids: child.variant_ids ?? [],
39
41
  min_quantity: child.min_quantity ?? 1,
40
42
  max_quantity: child.max_quantity ?? 1,
41
43
  default_quantity: child.default_quantity ?? 1,
@@ -60,4 +62,4 @@ exports.updateProductBundleWorkflow = (0, workflows_sdk_1.createWorkflow)("updat
60
62
  const product = updateProductBundleStep(input);
61
63
  return new workflows_sdk_1.WorkflowResponse(product);
62
64
  });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXByb2R1Y3QtYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGRhdGUtcHJvZHVjdC1idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLGdEQUFrRDtBQUNsRCxxREFBbUQ7QUFtQm5ELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUN4Qyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLEtBQStCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sYUFBYSxHQUFrQixTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUFhLENBQUMsQ0FBQTtJQUNyRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV6RCxJQUFJLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDM0MsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQ3BCLGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSzt3QkFDakMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUs7d0JBQ25ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLO3FCQUNsRCxDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNWO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUM5QjtnQkFDRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO1NBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQ3BCLGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSzt3QkFDakMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUs7d0JBQ25ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLO3FCQUNsRCxDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNWO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUM5QjtnQkFDRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQWUsQ0FBQTtJQUVwRixPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixHQUFHLE9BQU87UUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUk7S0FDMUIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLDJCQUEyQixHQUFHLElBQUEsOEJBQWMsRUFDdkQsdUJBQXVCLEVBQ3ZCLENBQUMsS0FBK0IsRUFBRSxFQUFFO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUN0QyxDQUFDLENBQ0YsQ0FBQSJ9
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXByb2R1Y3QtYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGRhdGUtcHJvZHVjdC1idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLGdEQUFrRDtBQUNsRCxxREFBbUQ7QUFvQm5ELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUN4Qyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLEtBQStCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sYUFBYSxHQUFrQixTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUFhLENBQUMsQ0FBQTtJQUNyRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV6RCxJQUFJLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDM0MsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQ3BCLGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDWixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO3dCQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSzt3QkFDakMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUs7d0JBQ25ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLO3FCQUNsRCxDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNWO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUM5QjtnQkFDRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO1NBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQ3BCLGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDWixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO3dCQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDO3dCQUNyQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSzt3QkFDakMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUs7d0JBQ25ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLO3FCQUNsRCxDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNWO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO2lCQUM5QjtnQkFDRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7YUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQWUsQ0FBQTtJQUVwRixPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixHQUFHLE9BQU87UUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUk7S0FDMUIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLDJCQUEyQixHQUFHLElBQUEsOEJBQWMsRUFDdkQsdUJBQXVCLEVBQ3ZCLENBQUMsS0FBK0IsRUFBRSxFQUFFO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUN0QyxDQUFDLENBQ0YsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaamx/netme-bundle",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",