@lahat-group/cli 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1168 -1209
  2. package/package.json +14 -5
package/dist/index.js CHANGED
@@ -7229,184 +7229,178 @@ var NEVER = INVALID;
7229
7229
  // ../../packages/shared/src/materialIds.ts
7230
7230
  init_esm_shims();
7231
7231
  var MATERIAL_IDS = [
7232
- // Interior-only colors (current product catalog)
7232
+ // Interior-only colors (current product catalog) — generated
7233
+ // <generated:interior-ids>
7234
+ "interior-ph158-sm",
7235
+ "interior-ph159-sm",
7236
+ "interior-ph163-sm",
7237
+ "interior-kh62-dt",
7238
+ // </generated:interior-ids>
7239
+ // Replaced interior colors (2026-08-14) — kept so frozen order snapshots still resolve a
7240
+ // label + supplier code; normalized to DEFAULT_INTERNAL_MATERIAL_ID at consumption.
7233
7241
  "interior-eco-white",
7234
7242
  "interior-champagne",
7235
7243
  "interior-bright-grey",
7236
7244
  "interior-oak-natue",
7237
7245
  // Interior-only melamine (legacy — kept for backward-compat with saved designs;
7238
- // normalized to interior-eco-white via normalizeInternalMaterialId at consumption)
7246
+ // normalized to DEFAULT_INTERNAL_MATERIAL_ID via normalizeInternalMaterialId at consumption)
7239
7247
  "white-melamine",
7240
7248
  "oak-veneer",
7241
7249
  "walnut-veneer",
7242
- // Melamine — Portalline collection (SM'art + Kaindl)
7243
- // Soho (SM'art, NT)
7244
- "ml-soho-natural",
7245
- "ml-soho-brown",
7246
- "ml-soho-grey",
7247
- // Amazon Ash (SM'art, NT)
7248
- "ml-amazon-ash-bleached",
7249
- "ml-amazon-ash-brown",
7250
- "ml-amazon-ash-chestnut",
7251
- "ml-amazon-ash-grey",
7252
- "ml-amazon-ash-taupe",
7253
- // Saqqara (SM'art, NT)
7254
- "ml-saqqara-bleached",
7255
- "ml-saqqara-natural",
7256
- "ml-saqqara-red",
7257
- "ml-saqqara-light-brown",
7258
- "ml-saqqara-chestnut",
7259
- // Allon DT (Kaindl)
7260
- "kl-oak-natural",
7261
- "kl-oak-split-natural",
7262
- "kl-oak-split-smoked",
7263
- "kl-oak-cognac",
7264
- "kl-oak-trunk",
7265
- // Allon / Vinto NT (Kaindl)
7266
- "kl-oak-light",
7267
- "kl-oak-brown",
7268
- "kl-oak-dark-brown",
7269
- "kl-oak-greyish",
7270
- "kl-vinto-cortina",
7271
- // Horsh (Kaindl, DT)
7272
- "kl-oak-bronze",
7273
- "kl-oak-platinum",
7274
- "kl-oak-white",
7275
- "kl-oak-split",
7276
- "kl-teak",
7277
- "kl-ash-grey",
7278
- // Aks DT (SM'art, pattern)
7279
- "ml-aks-khaki",
7280
- "ml-aks-black",
7281
- "ml-aks-white",
7282
- // Acrylic PURE — matte flat (Bluran/SENOSAN, מניפה 6)
7283
- "acrylic-mocha-matte",
7284
- "acrylic-khaki-grey-matte",
7285
- "acrylic-sahara-matte",
7286
- "acrylic-light-grey-matte",
7287
- "acrylic-antique-blue-matte",
7288
- "acrylic-antique-green-matte",
7289
- "acrylic-ivory-matte",
7290
- "acrylic-coffee-matte",
7291
- "acrylic-white-matte",
7292
- "acrylic-grayish-matte",
7293
- "acrylic-smoky-grey-matte",
7294
- "acrylic-indigo-blue-matte",
7295
- "acrylic-pearl-white-matte",
7296
- "acrylic-greige-matte",
7297
- "acrylic-forest-green-matte",
7298
- "acrylic-earth-brown-matte",
7299
- "acrylic-dark-grey-matte",
7300
- "acrylic-dark-black-matte",
7301
- // Acrylic PURE — glossy flat (Bluran/SENOSAN, מניפה 36)
7302
- "acrylic-pure-white-gloss",
7303
- "acrylic-ivory-gloss",
7304
- "acrylic-light-grey-gloss",
7305
- "acrylic-cream-gloss",
7306
- "acrylic-off-white-gloss",
7307
- "acrylic-sahara-gloss",
7308
- "acrylic-mocha-gloss",
7309
- "acrylic-antique-blue-gloss",
7310
- "acrylic-dark-grey-gloss",
7311
- "acrylic-khaki-grey-gloss",
7312
- // Acrylic Fantasy — metallic (Bluran/SENOSAN, מניפה 40)
7313
- "acrylic-metallic-grey",
7314
- "acrylic-bronze",
7315
- "acrylic-metallic-silver",
7316
- "acrylic-metallic-white",
7317
- "acrylic-champagne-silk",
7318
- "acrylic-peach-gold",
7319
- "acrylic-rose-gold",
7320
- "acrylic-metallic-champagne"
7250
+ // <generated:exterior-ids>
7251
+ // Acrylic — flat shades
7252
+ "acrylic-za35-sm",
7253
+ "acrylic-za71-sm",
7254
+ "acrylic-za05-sm",
7255
+ "acrylic-za72-sm",
7256
+ "acrylic-za310-sm",
7257
+ "acrylic-za07-sm",
7258
+ "acrylic-za85-sm",
7259
+ "acrylic-za86-sm",
7260
+ "acrylic-za70-sm",
7261
+ "acrylic-za08-sm",
7262
+ "acrylic-za69-sm",
7263
+ "acrylic-za06-sm",
7264
+ "acrylic-za301-sm",
7265
+ "acrylic-za03-sm",
7266
+ "acrylic-za04-sm",
7267
+ "acrylic-za38-sm",
7268
+ "acrylic-za300-sm",
7269
+ "acrylic-za02-sm",
7270
+ "acrylic-za36-sm",
7271
+ "acrylic-za39-sm",
7272
+ "acrylic-za37-sm",
7273
+ // Melamine — wood grain
7274
+ "mel-kl67-nt",
7275
+ "mel-kh69-dt",
7276
+ "mel-kh63-dt",
7277
+ "mel-kh61-dt",
7278
+ "mel-kh14-dt",
7279
+ "mel-kh68-dt",
7280
+ "mel-kh62-dt",
7281
+ "mel-kh31-dt",
7282
+ "mel-kh32-dt",
7283
+ "mel-kh65-dt",
7284
+ "mel-kh66-dt",
7285
+ "mel-kh74-dt",
7286
+ "mel-kh37-dt",
7287
+ "mel-kh30-dt",
7288
+ "mel-kh64-dt",
7289
+ "mel-kh15-dt",
7290
+ "mel-kh75-dt",
7291
+ "mel-kh33-dt",
7292
+ // Melamine — flat shades
7293
+ "mel-ph158-sm",
7294
+ "mel-ph159-sm",
7295
+ "mel-ph160-sm",
7296
+ "mel-ph161-sm",
7297
+ "mel-ph162-sm",
7298
+ "mel-ph163-sm",
7299
+ "mel-ph164-sm",
7300
+ "mel-ph165-sm",
7301
+ "mel-ph166-sm",
7302
+ "mel-ph167-sm",
7303
+ "mel-ph168-sm",
7304
+ "mel-ph169-sm",
7305
+ "mel-ph170-sm",
7306
+ "mel-ph171-sm",
7307
+ "mel-ph172-sm",
7308
+ "mel-ah07-tap",
7309
+ "mel-ah04-tap",
7310
+ "mel-ah01-tap",
7311
+ "mel-ah05-tap",
7312
+ "mel-ah06-tap"
7313
+ // </generated:exterior-ids>
7321
7314
  ];
7322
7315
  var INTERNAL_MATERIAL_IDS = [
7323
- "interior-eco-white",
7324
- "interior-champagne",
7325
- "interior-bright-grey",
7326
- "interior-oak-natue"
7316
+ // <generated:internal-id-list>
7317
+ "interior-ph158-sm",
7318
+ "interior-ph159-sm",
7319
+ "interior-ph163-sm",
7320
+ "interior-kh62-dt"
7321
+ // </generated:internal-id-list>
7327
7322
  ];
7328
- var DEFAULT_INTERNAL_MATERIAL_ID = "interior-eco-white";
7323
+ var DEFAULT_INTERNAL_MATERIAL_ID = "interior-kh62-dt";
7329
7324
  function normalizeInternalMaterialId(id) {
7330
7325
  if (id && INTERNAL_MATERIAL_IDS.includes(id)) {
7331
7326
  return id;
7332
7327
  }
7333
7328
  return DEFAULT_INTERNAL_MATERIAL_ID;
7334
7329
  }
7330
+ var EVER_INTERIOR_MATERIAL_IDS = /* @__PURE__ */ new Set([
7331
+ ...INTERNAL_MATERIAL_IDS,
7332
+ "interior-eco-white",
7333
+ "interior-champagne",
7334
+ "interior-bright-grey",
7335
+ "interior-oak-natue"
7336
+ ]);
7335
7337
  var EXTERNAL_MATERIAL_IDS = [
7336
- // Melamine — Portalline collection
7337
- "ml-soho-natural",
7338
- "ml-soho-brown",
7339
- "ml-soho-grey",
7340
- "ml-amazon-ash-bleached",
7341
- "ml-amazon-ash-brown",
7342
- "ml-amazon-ash-chestnut",
7343
- "ml-amazon-ash-grey",
7344
- "ml-amazon-ash-taupe",
7345
- "ml-saqqara-bleached",
7346
- "ml-saqqara-natural",
7347
- "ml-saqqara-red",
7348
- "ml-saqqara-light-brown",
7349
- "ml-saqqara-chestnut",
7350
- "kl-oak-natural",
7351
- "kl-oak-split-natural",
7352
- "kl-oak-split-smoked",
7353
- "kl-oak-cognac",
7354
- "kl-oak-trunk",
7355
- "kl-oak-light",
7356
- "kl-oak-brown",
7357
- "kl-oak-dark-brown",
7358
- "kl-oak-greyish",
7359
- "kl-vinto-cortina",
7360
- "kl-oak-bronze",
7361
- "kl-oak-platinum",
7362
- "kl-oak-white",
7363
- "kl-oak-split",
7364
- "kl-teak",
7365
- "kl-ash-grey",
7366
- "ml-aks-khaki",
7367
- "ml-aks-black",
7368
- "ml-aks-white",
7369
- // Acrylic PURE — matte flat
7370
- "acrylic-mocha-matte",
7371
- "acrylic-khaki-grey-matte",
7372
- "acrylic-sahara-matte",
7373
- "acrylic-light-grey-matte",
7374
- "acrylic-antique-blue-matte",
7375
- "acrylic-antique-green-matte",
7376
- "acrylic-ivory-matte",
7377
- "acrylic-coffee-matte",
7378
- "acrylic-white-matte",
7379
- "acrylic-grayish-matte",
7380
- "acrylic-smoky-grey-matte",
7381
- "acrylic-indigo-blue-matte",
7382
- "acrylic-pearl-white-matte",
7383
- "acrylic-greige-matte",
7384
- "acrylic-forest-green-matte",
7385
- "acrylic-earth-brown-matte",
7386
- "acrylic-dark-grey-matte",
7387
- "acrylic-dark-black-matte",
7388
- // Acrylic PURE — glossy flat
7389
- "acrylic-pure-white-gloss",
7390
- "acrylic-ivory-gloss",
7391
- "acrylic-light-grey-gloss",
7392
- "acrylic-cream-gloss",
7393
- "acrylic-off-white-gloss",
7394
- "acrylic-sahara-gloss",
7395
- "acrylic-mocha-gloss",
7396
- "acrylic-antique-blue-gloss",
7397
- "acrylic-dark-grey-gloss",
7398
- "acrylic-khaki-grey-gloss",
7399
- // Acrylic Fantasy — metallic
7400
- "acrylic-metallic-grey",
7401
- "acrylic-bronze",
7402
- "acrylic-metallic-silver",
7403
- "acrylic-metallic-white",
7404
- "acrylic-champagne-silk",
7405
- "acrylic-peach-gold",
7406
- "acrylic-rose-gold",
7407
- "acrylic-metallic-champagne"
7338
+ // <generated:external-id-list>
7339
+ // Acrylic — flat shades
7340
+ "acrylic-za35-sm",
7341
+ "acrylic-za71-sm",
7342
+ "acrylic-za05-sm",
7343
+ "acrylic-za72-sm",
7344
+ "acrylic-za310-sm",
7345
+ "acrylic-za07-sm",
7346
+ "acrylic-za85-sm",
7347
+ "acrylic-za86-sm",
7348
+ "acrylic-za70-sm",
7349
+ "acrylic-za08-sm",
7350
+ "acrylic-za69-sm",
7351
+ "acrylic-za06-sm",
7352
+ "acrylic-za301-sm",
7353
+ "acrylic-za03-sm",
7354
+ "acrylic-za04-sm",
7355
+ "acrylic-za38-sm",
7356
+ "acrylic-za300-sm",
7357
+ "acrylic-za02-sm",
7358
+ "acrylic-za36-sm",
7359
+ "acrylic-za39-sm",
7360
+ "acrylic-za37-sm",
7361
+ // Melamine — wood grain
7362
+ "mel-kl67-nt",
7363
+ "mel-kh69-dt",
7364
+ "mel-kh63-dt",
7365
+ "mel-kh61-dt",
7366
+ "mel-kh14-dt",
7367
+ "mel-kh68-dt",
7368
+ "mel-kh62-dt",
7369
+ "mel-kh31-dt",
7370
+ "mel-kh32-dt",
7371
+ "mel-kh65-dt",
7372
+ "mel-kh66-dt",
7373
+ "mel-kh74-dt",
7374
+ "mel-kh37-dt",
7375
+ "mel-kh30-dt",
7376
+ "mel-kh64-dt",
7377
+ "mel-kh15-dt",
7378
+ "mel-kh75-dt",
7379
+ "mel-kh33-dt",
7380
+ // Melamine — flat shades
7381
+ "mel-ph158-sm",
7382
+ "mel-ph159-sm",
7383
+ "mel-ph160-sm",
7384
+ "mel-ph161-sm",
7385
+ "mel-ph162-sm",
7386
+ "mel-ph163-sm",
7387
+ "mel-ph164-sm",
7388
+ "mel-ph165-sm",
7389
+ "mel-ph166-sm",
7390
+ "mel-ph167-sm",
7391
+ "mel-ph168-sm",
7392
+ "mel-ph169-sm",
7393
+ "mel-ph170-sm",
7394
+ "mel-ph171-sm",
7395
+ "mel-ph172-sm",
7396
+ "mel-ah07-tap",
7397
+ "mel-ah04-tap",
7398
+ "mel-ah01-tap",
7399
+ "mel-ah05-tap",
7400
+ "mel-ah06-tap"
7401
+ // </generated:external-id-list>
7408
7402
  ];
7409
- var DEFAULT_EXTERNAL_MATERIAL_ID = "ml-aks-white";
7403
+ var DEFAULT_EXTERNAL_MATERIAL_ID = "mel-ph172-sm";
7410
7404
  function normalizeExternalMaterialId(id) {
7411
7405
  if (id && EXTERNAL_MATERIAL_IDS.includes(id)) {
7412
7406
  return id;
@@ -7419,8 +7413,9 @@ init_esm_shims();
7419
7413
 
7420
7414
  // ../../packages/shared/src/bomConstants.ts
7421
7415
  init_esm_shims();
7422
- var STANDARD_PANEL_MM = 17;
7416
+ var STANDARD_PANEL_MM = 18;
7423
7417
  var DOOR_THICKNESS_MM = 18;
7418
+ var DOOR_DEPTH_ALLOWANCE_MM = 20;
7424
7419
 
7425
7420
  // ../../packages/shared/src/drawerDepth.ts
7426
7421
  init_esm_shims();
@@ -7460,14 +7455,68 @@ var SHALLOW_DRAWER_DEPTH_BAND = {
7460
7455
  };
7461
7456
  var SHALLOW_DRAWER_MAX_SLOTS = 2;
7462
7457
  var RULE_VERSION_FREE_DIMENSIONS = "4.0";
7458
+ var RULE_VERSION_TOTAL_DEPTH = "5.0";
7459
+ var CURRENT_RULE_VERSION = RULE_VERSION_TOTAL_DEPTH;
7460
+ var FREE_DIMENSION_VERSIONS = [
7461
+ RULE_VERSION_FREE_DIMENSIONS,
7462
+ RULE_VERSION_TOTAL_DEPTH
7463
+ ];
7464
+ function isFreeDimensionConfig(config) {
7465
+ return FREE_DIMENSION_VERSIONS.includes(config.ruleVersion);
7466
+ }
7467
+ function depthIncludesDoors(config) {
7468
+ return config.ruleVersion === RULE_VERSION_TOTAL_DEPTH;
7469
+ }
7470
+ var DOOR_DEPTH_ALLOWANCE_CM = DOOR_DEPTH_ALLOWANCE_MM / 10;
7471
+ function toBodyDepthCm(configuredCm, config) {
7472
+ return depthIncludesDoors(config) ? configuredCm - DOOR_DEPTH_ALLOWANCE_CM : configuredCm;
7473
+ }
7474
+ function toConfiguredDepthCm(bodyCm, config) {
7475
+ return depthIncludesDoors(config) ? bodyCm + DOOR_DEPTH_ALLOWANCE_CM : bodyCm;
7476
+ }
7477
+ function configuredDepthLimitsCm(config) {
7478
+ return {
7479
+ min: toConfiguredDepthCm(DIMENSION_LIMITS.bodyDepthCm.min, config),
7480
+ max: toConfiguredDepthCm(DIMENSION_LIMITS.bodyDepthCm.max, config)
7481
+ };
7482
+ }
7463
7483
  function getColumnDepthCm(config, column) {
7464
- return column.depth ?? config.depth;
7484
+ return toBodyDepthCm(column.depth ?? config.depth, config);
7465
7485
  }
7466
7486
 
7467
7487
  // ../../packages/shared/src/commissions.ts
7468
7488
  init_esm_shims();
7469
7489
  var COMMISSION_STATES = ["potential", "pending_payment", "paid", "cancelled"];
7470
7490
 
7491
+ // ../../packages/shared/src/phone.ts
7492
+ init_esm_shims();
7493
+ var SEPARATORS = /[\s\-().]/g;
7494
+ var IL_PHONE = /^(?:(?:\+?972)0?|0)(?:[23489]\d{7}|[57]\d{8})$/;
7495
+ function normalizePhoneInput(value) {
7496
+ return value.replace(SEPARATORS, "");
7497
+ }
7498
+ function isValidIsraeliPhone(value) {
7499
+ return IL_PHONE.test(normalizePhoneInput(value));
7500
+ }
7501
+
7502
+ // ../../packages/shared/src/nationalId.ts
7503
+ init_esm_shims();
7504
+ var SEPARATORS2 = /[\s\-.]/g;
7505
+ function normalizeNationalIdInput(value) {
7506
+ return value.replace(SEPARATORS2, "");
7507
+ }
7508
+ function isValidIsraeliNationalId(value) {
7509
+ const digits = normalizeNationalIdInput(value);
7510
+ if (!/^\d{1,9}$/.test(digits)) return false;
7511
+ const padded = digits.padStart(9, "0");
7512
+ let sum = 0;
7513
+ for (let i = 0; i < 9; i++) {
7514
+ const product = Number(padded[i]) * (i % 2 === 0 ? 1 : 2);
7515
+ sum += product > 9 ? product - 9 : product;
7516
+ }
7517
+ return sum % 10 === 0;
7518
+ }
7519
+
7471
7520
  // ../../packages/shared/src/schemas.ts
7472
7521
  var MaterialIdSchema = external_exports.enum(MATERIAL_IDS);
7473
7522
  var ModuleTypeSchema = external_exports.enum([
@@ -7561,13 +7610,14 @@ var WardrobeConfigSchema = external_exports.object({
7561
7610
  widthMode: external_exports.enum(["min-columns", "min-doors"]).default("min-doors"),
7562
7611
  handleSku: external_exports.string().optional()
7563
7612
  }).superRefine((data, ctx) => {
7564
- if (data.ruleVersion !== RULE_VERSION_FREE_DIMENSIONS) return;
7565
- const { columnWidthCm, heightCm, bodyDepthCm } = DIMENSION_LIMITS;
7613
+ if (!isFreeDimensionConfig(data)) return;
7614
+ const { columnWidthCm, heightCm } = DIMENSION_LIMITS;
7615
+ const bodyDepthCm = configuredDepthLimitsCm(data);
7566
7616
  if (!Number.isInteger(data.height) || data.height < heightCm.min || data.height > heightCm.max) {
7567
7617
  ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["height"], message: `v4 height must be a whole-cm integer between ${heightCm.min} and ${heightCm.max}` });
7568
7618
  }
7569
7619
  if (!Number.isInteger(data.depth) || data.depth < bodyDepthCm.min || data.depth > bodyDepthCm.max) {
7570
- ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["depth"], message: `v4 depth must be a whole-cm integer between ${bodyDepthCm.min} and ${bodyDepthCm.max}` });
7620
+ ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["depth"], message: `depth must be a whole-cm integer between ${bodyDepthCm.min} and ${bodyDepthCm.max}` });
7571
7621
  }
7572
7622
  data.columns.forEach((col, i) => {
7573
7623
  const offGrid = Math.abs(col.width * 10 - Math.round(col.width * 10)) > 1e-6;
@@ -7575,7 +7625,7 @@ var WardrobeConfigSchema = external_exports.object({
7575
7625
  ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["columns", i, "width"], message: `v4 column width must be on the 1mm grid between ${columnWidthCm.min} and ${columnWidthCm.max}` });
7576
7626
  }
7577
7627
  if (col.depth !== void 0 && (!Number.isInteger(col.depth) || col.depth < bodyDepthCm.min || col.depth > bodyDepthCm.max)) {
7578
- ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["columns", i, "depth"], message: `v4 column depth must be a whole-cm integer between ${bodyDepthCm.min} and ${bodyDepthCm.max}` });
7628
+ ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["columns", i, "depth"], message: `column depth must be a whole-cm integer between ${bodyDepthCm.min} and ${bodyDepthCm.max}` });
7579
7629
  }
7580
7630
  });
7581
7631
  }).transform((data) => ({
@@ -7634,6 +7684,17 @@ var MeasurementPriceBreakdownSchema = external_exports.object({
7634
7684
  total: external_exports.number(),
7635
7685
  currency: external_exports.string()
7636
7686
  });
7687
+ var DiscountSettingsSchema = external_exports.object({
7688
+ enabled: external_exports.boolean(),
7689
+ percent: external_exports.number().min(0).max(100),
7690
+ description: external_exports.string().max(500)
7691
+ });
7692
+ var DiscountBreakdownSchema = DiscountSettingsSchema.extend({
7693
+ subtotal: external_exports.number(),
7694
+ amount: external_exports.number(),
7695
+ total: external_exports.number(),
7696
+ currency: external_exports.literal("NIS")
7697
+ });
7637
7698
  var PriceResultSchema = external_exports.object({
7638
7699
  total: external_exports.number(),
7639
7700
  currency: external_exports.string(),
@@ -7647,7 +7708,8 @@ var PriceResultSchema = external_exports.object({
7647
7708
  })).optional(),
7648
7709
  assemblyPrice: AssemblyPriceBreakdownSchema.optional(),
7649
7710
  transportPrice: TransportPriceBreakdownSchema.optional(),
7650
- measurementPrice: MeasurementPriceBreakdownSchema.optional()
7711
+ measurementPrice: MeasurementPriceBreakdownSchema.optional(),
7712
+ discount: DiscountBreakdownSchema.optional()
7651
7713
  });
7652
7714
  var ServicePricingConfigSchema = external_exports.object({
7653
7715
  id: external_exports.string().nullable(),
@@ -7688,6 +7750,35 @@ var CommissionConfigPatchBodySchema = external_exports.object({
7688
7750
  defaultRatePercent: external_exports.number().min(0).max(100)
7689
7751
  }).strict()
7690
7752
  });
7753
+ var ManufacturerConfigSchema = external_exports.object({
7754
+ email: external_exports.string().email().max(254).nullable(),
7755
+ version: external_exports.number().int().nonnegative()
7756
+ });
7757
+ var ManufacturerConfigPatchBodySchema = external_exports.object({
7758
+ version: external_exports.number().int().nonnegative(),
7759
+ patch: external_exports.object({
7760
+ email: external_exports.string().email().max(254)
7761
+ }).strict()
7762
+ });
7763
+ var DiscountConfigSchema = external_exports.object({
7764
+ id: external_exports.string().nullable(),
7765
+ enabled: external_exports.boolean(),
7766
+ percent: external_exports.number().min(0).max(100),
7767
+ description: external_exports.string().max(500),
7768
+ version: external_exports.number().int().nonnegative(),
7769
+ updatedAt: external_exports.string().nullable()
7770
+ });
7771
+ var DiscountConfigPatchBodySchema = external_exports.object({
7772
+ version: external_exports.number().int().nonnegative(),
7773
+ patch: external_exports.object({
7774
+ enabled: external_exports.boolean().optional(),
7775
+ percent: external_exports.number().min(0).max(100).optional(),
7776
+ description: external_exports.string().max(500).optional()
7777
+ }).strict().refine(
7778
+ (p) => Object.keys(p).length > 0,
7779
+ { message: "patch must contain at least one field" }
7780
+ )
7781
+ });
7691
7782
  var MBomLineItemSchema = external_exports.object({
7692
7783
  sku: external_exports.string(),
7693
7784
  qty: external_exports.number(),
@@ -7702,7 +7793,11 @@ var MBomLineItemSchema = external_exports.object({
7702
7793
  // V2 frozen-snapshot fields (optional — legacy orders and old engine output stay valid)
7703
7794
  material: external_exports.string().optional(),
7704
7795
  thicknessMm: external_exports.number().optional(),
7705
- areaM2: external_exports.number().optional()
7796
+ areaM2: external_exports.number().optional(),
7797
+ name: external_exports.string().optional(),
7798
+ columnIndex: external_exports.number().optional(),
7799
+ /** Present on sections of a part cut down to its material size limit. */
7800
+ segment: external_exports.object({ index: external_exports.number(), count: external_exports.number() }).optional()
7706
7801
  });
7707
7802
  var ManufacturingBOMColumnSchema = external_exports.object({
7708
7803
  columnIndex: external_exports.number(),
@@ -7731,7 +7826,7 @@ var MBomDebugResponseSchema = external_exports.object({
7731
7826
  });
7732
7827
  var CreateCustomerSchema = external_exports.object({
7733
7828
  customerName: external_exports.string().min(1).max(120),
7734
- phoneNumber: external_exports.string().min(1).max(30),
7829
+ phoneNumber: external_exports.string().min(1).max(30).refine(isValidIsraeliPhone, "invalidPhone"),
7735
7830
  email: external_exports.string().email().max(254),
7736
7831
  address: external_exports.string().max(200).optional(),
7737
7832
  apartment: external_exports.string().max(50).optional(),
@@ -7742,7 +7837,7 @@ var CreateCustomerSchema = external_exports.object({
7742
7837
  });
7743
7838
  var UpdateCustomerSchema = external_exports.object({
7744
7839
  customerName: external_exports.string().min(1).max(120).optional(),
7745
- phoneNumber: external_exports.string().min(1).max(30).optional(),
7840
+ phoneNumber: external_exports.string().min(1).max(30).refine(isValidIsraeliPhone, "invalidPhone").optional(),
7746
7841
  email: external_exports.string().email().max(254).optional(),
7747
7842
  // Optional fields accept `null` to explicitly CLEAR (unset) a previously-set
7748
7843
  // value; omitting the key leaves it unchanged. Required for inline edit.
@@ -7794,7 +7889,13 @@ var ReviseOrderSchema = external_exports.object({
7794
7889
  var RegisterSchema = external_exports.object({
7795
7890
  email: external_exports.string().email().max(254),
7796
7891
  password: external_exports.string().min(8).max(128),
7797
- displayName: external_exports.string().min(1).max(50)
7892
+ displayName: external_exports.string().min(1).max(50),
7893
+ /**
7894
+ * Consent to the published legal documents, given on the signup form.
7895
+ * Required — a signup without it is rejected rather than silently recorded as
7896
+ * unconsented, which would leave the account stuck behind the consent gate.
7897
+ */
7898
+ acceptedLegal: external_exports.literal(true)
7798
7899
  });
7799
7900
  var LoginSchema = external_exports.object({
7800
7901
  email: external_exports.string().email().max(254),
@@ -7860,10 +7961,63 @@ var EmailTemplatePatchBodySchema = external_exports.object({
7860
7961
  { message: "patch must contain at least one field" }
7861
7962
  )
7862
7963
  });
7964
+ var CustomerEmailConfigSchema = external_exports.object({
7965
+ key: external_exports.string(),
7966
+ label: external_exports.string(),
7967
+ step: external_exports.number().int().nullable(),
7968
+ enabled: external_exports.boolean(),
7969
+ subject: external_exports.string(),
7970
+ preheader: external_exports.string(),
7971
+ badge: external_exports.string(),
7972
+ heading: external_exports.string(),
7973
+ paragraphs: external_exports.array(external_exports.string()),
7974
+ note: external_exports.string(),
7975
+ disclosure: external_exports.array(external_exports.string()),
7976
+ ctaLabel: external_exports.string(),
7977
+ ctaUrl: external_exports.string(),
7978
+ secondaryCtaLabel: external_exports.string(),
7979
+ secondaryCtaUrl: external_exports.string(),
7980
+ version: external_exports.number().int().nonnegative(),
7981
+ updatedAt: external_exports.string().nullable()
7982
+ });
7983
+ var EmailOutboxRowSchema = external_exports.object({
7984
+ _id: external_exports.string(),
7985
+ orderId: external_exports.string(),
7986
+ key: external_exports.string(),
7987
+ to: external_exports.string(),
7988
+ cc: external_exports.string(),
7989
+ subject: external_exports.string(),
7990
+ status: external_exports.enum(["sent", "failed", "skipped"]),
7991
+ attempts: external_exports.number().int().nonnegative(),
7992
+ lastError: external_exports.string().optional(),
7993
+ skippedReason: external_exports.string().optional(),
7994
+ sentAt: external_exports.string().nullable().optional(),
7995
+ createdAt: external_exports.string()
7996
+ });
7997
+ var CustomerEmailPatchBodySchema = external_exports.object({
7998
+ version: external_exports.number().int().nonnegative(),
7999
+ patch: external_exports.object({
8000
+ enabled: external_exports.boolean().optional(),
8001
+ subject: external_exports.string().max(300).optional(),
8002
+ preheader: external_exports.string().max(300).optional(),
8003
+ badge: external_exports.string().max(120).optional(),
8004
+ heading: external_exports.string().max(200).optional(),
8005
+ paragraphs: external_exports.array(external_exports.string().max(2e3)).max(12).optional(),
8006
+ note: external_exports.string().max(2e3).optional(),
8007
+ disclosure: external_exports.array(external_exports.string().max(2e3)).max(12).optional(),
8008
+ ctaLabel: external_exports.string().max(120).optional(),
8009
+ ctaUrl: external_exports.string().max(500).optional(),
8010
+ secondaryCtaLabel: external_exports.string().max(120).optional(),
8011
+ secondaryCtaUrl: external_exports.string().max(500).optional()
8012
+ }).strict().refine(
8013
+ (p) => Object.keys(p).length > 0,
8014
+ { message: "patch must contain at least one field" }
8015
+ )
8016
+ });
7863
8017
  var CustomerDetailsSchema = external_exports.object({
7864
8018
  email: external_exports.string().email().max(254),
7865
8019
  phone: external_exports.string().min(3).max(30),
7866
- nationalId: external_exports.string().min(5).max(20),
8020
+ nationalId: external_exports.string().min(5).max(20).refine(isValidIsraeliNationalId, "invalidNationalId"),
7867
8021
  installationAddress: external_exports.string().min(3).max(300),
7868
8022
  businessName: external_exports.string().max(120).optional(),
7869
8023
  contactPerson: external_exports.string().max(120).optional()
@@ -7877,6 +8031,11 @@ var OrderTransitionSchema = external_exports.object({
7877
8031
  /** Admin/support override: force-set the main status to `to`, bypassing the legal transition map. */
7878
8032
  override: external_exports.boolean().optional()
7879
8033
  });
8034
+ var UpdateOrderDateSchema = external_exports.object({
8035
+ field: external_exports.enum(["appointmentDate", "scheduledDate"]),
8036
+ value: external_exports.coerce.date(),
8037
+ reason: external_exports.string().max(500).optional()
8038
+ });
7880
8039
 
7881
8040
  // ../../packages/shared/src/pricing.ts
7882
8041
  init_esm_shims();
@@ -7884,10 +8043,72 @@ init_esm_shims();
7884
8043
  // ../../packages/shared/src/manufacturingBom/price.ts
7885
8044
  init_esm_shims();
7886
8045
 
8046
+ // ../../packages/shared/src/discount.ts
8047
+ init_esm_shims();
8048
+
7887
8049
  // ../../packages/shared/src/materials.ts
7888
8050
  init_esm_shims();
7889
8051
  var MATERIALS = {
7890
8052
  // ─── Interior-only colors (current product catalog) ──────────────────
8053
+ // Generated — see `npm run prep:material-images --workspace=api`.
8054
+ // These entries deliberately carry no `substrate`: materialLimitKey() is
8055
+ // `MATERIALS[id].substrate ?? id`, so a substrate here would resolve interior parts to the
8056
+ // exterior melamine sheet-limit row.
8057
+ // <generated:interior-materials>
8058
+ "interior-ph158-sm": {
8059
+ id: "interior-ph158-sm",
8060
+ label: "\u05DC\u05D1\u05DF \u05E6\u05D3\u05E3",
8061
+ priceMultiplier: 1,
8062
+ fallbackColor: "#fafbf5",
8063
+ category: "solid",
8064
+ surfaceTexture: "soft-matte",
8065
+ textureRepeat: { u: 1, v: 1 },
8066
+ sourceRef: "PH158-SM",
8067
+ thumbnail: "materials/interior-ph158-sm/thumbnail.jpg"
8068
+ },
8069
+ "interior-ph159-sm": {
8070
+ id: "interior-ph159-sm",
8071
+ label: "\u05D0\u05E4\u05D5\u05E8 \u05D1\u05D4\u05D9\u05E8",
8072
+ priceMultiplier: 1,
8073
+ fallbackColor: "#d2cbc1",
8074
+ category: "solid",
8075
+ surfaceTexture: "soft-matte",
8076
+ textureRepeat: { u: 1, v: 1 },
8077
+ sourceRef: "PH159-SM",
8078
+ thumbnail: "materials/interior-ph159-sm/thumbnail.jpg"
8079
+ },
8080
+ "interior-ph163-sm": {
8081
+ id: "interior-ph163-sm",
8082
+ label: "\u05D2\u05E8\u05D9\u05D9\u05D6\u05F3",
8083
+ priceMultiplier: 1,
8084
+ fallbackColor: "#cec6b6",
8085
+ category: "solid",
8086
+ surfaceTexture: "soft-matte",
8087
+ textureRepeat: { u: 1, v: 1 },
8088
+ sourceRef: "PH163-SM",
8089
+ thumbnail: "materials/interior-ph163-sm/thumbnail.jpg"
8090
+ },
8091
+ "interior-kh62-dt": {
8092
+ id: "interior-kh62-dt",
8093
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D7\u05DD \u05DE\u05D9\u05E7\u05E1",
8094
+ priceMultiplier: 1,
8095
+ fallbackColor: "#875f3b",
8096
+ textureSet: {
8097
+ baseColor: "materials/interior-kh62-dt/baseColor.jpg",
8098
+ normal: "materials/interior-kh62-dt/normal.jpg",
8099
+ roughness: "materials/interior-kh62-dt/roughness.jpg"
8100
+ },
8101
+ category: "wood-grain",
8102
+ surfaceTexture: "deep-texture",
8103
+ textureRepeat: { u: 1, v: 1 },
8104
+ sourceRef: "KH62-DT",
8105
+ thumbnail: "materials/interior-kh62-dt/thumbnail.jpg"
8106
+ },
8107
+ // </generated:interior-materials>
8108
+ // ─── Interior-only colors (replaced 2026-08-14 — kept for frozen order snapshots) ─────
8109
+ // Not selectable (absent from INTERNAL_MATERIAL_IDS). Order.items[].manufacturingBom stores
8110
+ // the material id at order time, and the CSV Color/Material columns resolve through here, so
8111
+ // removing these would blank those columns on every historical interior row.
7891
8112
  "interior-eco-white": {
7892
8113
  id: "interior-eco-white",
7893
8114
  label: "Eco White",
@@ -7985,1173 +8206,806 @@ var MATERIALS = {
7985
8206
  textureRepeat: { u: 3, v: 4 },
7986
8207
  thumbnail: "materials/walnut-veneer/thumbnail.jpg"
7987
8208
  },
7988
- // ─── Melamine — Portalline collection (SM'art + Kaindl) ──────────────
7989
- // Soho (SM'art, NT)
7990
- "ml-soho-natural": {
7991
- id: "ml-soho-natural",
7992
- label: "Soho Natural",
7993
- priceMultiplier: 1.2,
7994
- fallbackColor: "#c8a882",
7995
- textureSet: {
7996
- baseColor: "materials/ml-soho-natural/baseColor.ktx2",
7997
- normal: "materials/ml-soho-natural/normal.ktx2",
7998
- roughness: "materials/ml-soho-natural/roughness.ktx2"
7999
- },
8000
- category: "wood-grain",
8001
- surfaceTexture: "pore",
8002
- textureRepeat: { u: 3, v: 4 },
8003
- sourceRef: "ML34NT19",
8004
- thumbnail: "materials/ml-soho-natural/thumbnail.jpg",
8005
- substrate: "melamine"
8209
+ // <generated:exterior-materials>
8210
+ "acrylic-za35-sm": {
8211
+ id: "acrylic-za35-sm",
8212
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D2\u05E8\u05D9\u05D9\u05D6\u05F3",
8213
+ priceMultiplier: 1,
8214
+ fallbackColor: "#cec7be",
8215
+ category: "solid",
8216
+ surfaceTexture: "soft-matte",
8217
+ textureRepeat: { u: 1, v: 1 },
8218
+ sourceRef: "ZA35-SM",
8219
+ thumbnail: "materials/acrylic-za35-sm/thumbnail.jpg",
8220
+ substrate: "acrylic"
8006
8221
  },
8007
- "ml-soho-brown": {
8008
- id: "ml-soho-brown",
8009
- label: "Soho Brown",
8010
- priceMultiplier: 1.2,
8011
- fallbackColor: "#7b5838",
8012
- textureSet: {
8013
- baseColor: "materials/ml-soho-brown/baseColor.ktx2",
8014
- normal: "materials/ml-soho-brown/normal.ktx2",
8015
- roughness: "materials/ml-soho-brown/roughness.ktx2"
8016
- },
8017
- category: "wood-grain",
8018
- surfaceTexture: "pore",
8019
- textureRepeat: { u: 3, v: 4 },
8020
- sourceRef: "ML35NT19",
8021
- thumbnail: "materials/ml-soho-brown/thumbnail.jpg",
8022
- substrate: "melamine"
8222
+ "acrylic-za71-sm": {
8223
+ id: "acrylic-za71-sm",
8224
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D0\u05E4\u05D5\u05E8 \u05D1\u05D4\u05D9\u05E8",
8225
+ priceMultiplier: 1,
8226
+ fallbackColor: "#d2cbc1",
8227
+ category: "solid",
8228
+ surfaceTexture: "soft-matte",
8229
+ textureRepeat: { u: 1, v: 1 },
8230
+ sourceRef: "ZA71-SM",
8231
+ thumbnail: "materials/acrylic-za71-sm/thumbnail.jpg",
8232
+ substrate: "acrylic"
8023
8233
  },
8024
- "ml-soho-grey": {
8025
- id: "ml-soho-grey",
8026
- label: "Soho Grey",
8027
- priceMultiplier: 1.2,
8028
- fallbackColor: "#7b8b8b",
8029
- textureSet: {
8030
- baseColor: "materials/ml-soho-grey/baseColor.ktx2",
8031
- normal: "materials/ml-soho-grey/normal.ktx2",
8032
- roughness: "materials/ml-soho-grey/roughness.ktx2"
8033
- },
8034
- category: "wood-grain",
8035
- surfaceTexture: "pore",
8036
- textureRepeat: { u: 3, v: 4 },
8037
- sourceRef: "ML36NT19",
8038
- thumbnail: "materials/ml-soho-grey/thumbnail.jpg",
8039
- substrate: "melamine"
8234
+ "acrylic-za05-sm": {
8235
+ id: "acrylic-za05-sm",
8236
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D0\u05E4\u05D5\u05E8 \u05D7\u05D0\u05E7\u05D9",
8237
+ priceMultiplier: 1,
8238
+ fallbackColor: "#696357",
8239
+ category: "solid",
8240
+ surfaceTexture: "soft-matte",
8241
+ textureRepeat: { u: 1, v: 1 },
8242
+ sourceRef: "ZA05-SM",
8243
+ thumbnail: "materials/acrylic-za05-sm/thumbnail.jpg",
8244
+ substrate: "acrylic"
8040
8245
  },
8041
- // Amazon Ash (SM'art, NT)
8042
- "ml-amazon-ash-bleached": {
8043
- id: "ml-amazon-ash-bleached",
8044
- label: "Amazon Ash Bleached",
8045
- priceMultiplier: 1.3,
8046
- fallbackColor: "#e8e0d8",
8047
- textureSet: {
8048
- baseColor: "materials/ml-amazon-ash-bleached/baseColor.ktx2",
8049
- normal: "materials/ml-amazon-ash-bleached/normal.ktx2",
8050
- roughness: "materials/ml-amazon-ash-bleached/roughness.ktx2"
8051
- },
8052
- category: "wood-grain",
8053
- surfaceTexture: "pore",
8054
- textureRepeat: { u: 3, v: 4 },
8055
- sourceRef: "ML28NT19",
8056
- thumbnail: "materials/ml-amazon-ash-bleached/thumbnail.jpg",
8057
- substrate: "melamine"
8246
+ "acrylic-za72-sm": {
8247
+ id: "acrylic-za72-sm",
8248
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D0\u05E4\u05D5\u05E8 \u05DB\u05D4\u05D4",
8249
+ priceMultiplier: 1,
8250
+ fallbackColor: "#282423",
8251
+ category: "solid",
8252
+ surfaceTexture: "soft-matte",
8253
+ textureRepeat: { u: 1, v: 1 },
8254
+ sourceRef: "ZA72-SM",
8255
+ thumbnail: "materials/acrylic-za72-sm/thumbnail.jpg",
8256
+ substrate: "acrylic"
8058
8257
  },
8059
- "ml-amazon-ash-brown": {
8060
- id: "ml-amazon-ash-brown",
8061
- label: "Amazon Ash Brown",
8062
- priceMultiplier: 1.3,
8063
- fallbackColor: "#8b6b50",
8064
- textureSet: {
8065
- baseColor: "materials/ml-amazon-ash-brown/baseColor.ktx2",
8066
- normal: "materials/ml-amazon-ash-brown/normal.ktx2",
8067
- roughness: "materials/ml-amazon-ash-brown/roughness.ktx2"
8068
- },
8069
- category: "wood-grain",
8070
- surfaceTexture: "pore",
8071
- textureRepeat: { u: 3, v: 4 },
8072
- sourceRef: "ML29NT19",
8073
- thumbnail: "materials/ml-amazon-ash-brown/thumbnail.jpg",
8074
- substrate: "melamine"
8258
+ "acrylic-za310-sm": {
8259
+ id: "acrylic-za310-sm",
8260
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D0\u05E4\u05D5\u05E8 \u05DE\u05E2\u05D5\u05E9\u05DF",
8261
+ priceMultiplier: 1,
8262
+ fallbackColor: "#55565a",
8263
+ category: "solid",
8264
+ surfaceTexture: "soft-matte",
8265
+ textureRepeat: { u: 1, v: 1 },
8266
+ sourceRef: "ZA310-SM",
8267
+ thumbnail: "materials/acrylic-za310-sm/thumbnail.jpg",
8268
+ substrate: "acrylic"
8075
8269
  },
8076
- "ml-amazon-ash-chestnut": {
8077
- id: "ml-amazon-ash-chestnut",
8078
- label: "Amazon Ash Chestnut",
8079
- priceMultiplier: 1.3,
8080
- fallbackColor: "#7b4a28",
8081
- textureSet: {
8082
- baseColor: "materials/ml-amazon-ash-chestnut/baseColor.ktx2",
8083
- normal: "materials/ml-amazon-ash-chestnut/normal.ktx2",
8084
- roughness: "materials/ml-amazon-ash-chestnut/roughness.ktx2"
8085
- },
8086
- category: "wood-grain",
8087
- surfaceTexture: "pore",
8088
- textureRepeat: { u: 3, v: 4 },
8089
- sourceRef: "ML30NT19",
8090
- thumbnail: "materials/ml-amazon-ash-chestnut/thumbnail.jpg",
8091
- substrate: "melamine"
8270
+ "acrylic-za07-sm": {
8271
+ id: "acrylic-za07-sm",
8272
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D0\u05E4\u05E8\u05E4\u05E8",
8273
+ priceMultiplier: 1,
8274
+ fallbackColor: "#9e9a99",
8275
+ category: "solid",
8276
+ surfaceTexture: "soft-matte",
8277
+ textureRepeat: { u: 1, v: 1 },
8278
+ sourceRef: "ZA07-SM",
8279
+ thumbnail: "materials/acrylic-za07-sm/thumbnail.jpg",
8280
+ substrate: "acrylic"
8092
8281
  },
8093
- "ml-amazon-ash-grey": {
8094
- id: "ml-amazon-ash-grey",
8095
- label: "Amazon Ash Grey",
8096
- priceMultiplier: 1.3,
8097
- fallbackColor: "#9b9b90",
8098
- textureSet: {
8099
- baseColor: "materials/ml-amazon-ash-grey/baseColor.ktx2",
8100
- normal: "materials/ml-amazon-ash-grey/normal.ktx2",
8101
- roughness: "materials/ml-amazon-ash-grey/roughness.ktx2"
8102
- },
8103
- category: "wood-grain",
8104
- surfaceTexture: "pore",
8105
- textureRepeat: { u: 3, v: 4 },
8106
- sourceRef: "ML31NT19",
8107
- thumbnail: "materials/ml-amazon-ash-grey/thumbnail.jpg",
8108
- substrate: "melamine"
8282
+ "acrylic-za85-sm": {
8283
+ id: "acrylic-za85-sm",
8284
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D7\u05D5\u05DD \u05D0\u05D3\u05DE\u05D4",
8285
+ priceMultiplier: 1,
8286
+ fallbackColor: "#604440",
8287
+ category: "solid",
8288
+ surfaceTexture: "soft-matte",
8289
+ textureRepeat: { u: 1, v: 1 },
8290
+ sourceRef: "ZA85-SM",
8291
+ thumbnail: "materials/acrylic-za85-sm/thumbnail.jpg",
8292
+ substrate: "acrylic"
8109
8293
  },
8110
- "ml-amazon-ash-taupe": {
8111
- id: "ml-amazon-ash-taupe",
8112
- label: "Amazon Ash Taupe",
8113
- priceMultiplier: 1.3,
8114
- fallbackColor: "#8b7b6b",
8115
- textureSet: {
8116
- baseColor: "materials/ml-amazon-ash-taupe/baseColor.ktx2",
8117
- normal: "materials/ml-amazon-ash-taupe/normal.ktx2",
8118
- roughness: "materials/ml-amazon-ash-taupe/roughness.ktx2"
8119
- },
8120
- category: "wood-grain",
8121
- surfaceTexture: "pore",
8122
- textureRepeat: { u: 3, v: 4 },
8123
- sourceRef: "ML33NT19",
8124
- thumbnail: "materials/ml-amazon-ash-taupe/thumbnail.jpg",
8125
- substrate: "melamine"
8294
+ "acrylic-za86-sm": {
8295
+ id: "acrylic-za86-sm",
8296
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D9\u05E8\u05D5\u05E7 \u05D9\u05E2\u05E8",
8297
+ priceMultiplier: 1,
8298
+ fallbackColor: "#3d423c",
8299
+ category: "solid",
8300
+ surfaceTexture: "soft-matte",
8301
+ textureRepeat: { u: 1, v: 1 },
8302
+ sourceRef: "ZA86-SM",
8303
+ thumbnail: "materials/acrylic-za86-sm/thumbnail.jpg",
8304
+ substrate: "acrylic"
8126
8305
  },
8127
- // Saqqara (SM'art, NT)
8128
- "ml-saqqara-bleached": {
8129
- id: "ml-saqqara-bleached",
8130
- label: "Saqqara Bleached",
8131
- priceMultiplier: 1.3,
8132
- fallbackColor: "#ece8e0",
8133
- textureSet: {
8134
- baseColor: "materials/ml-saqqara-bleached/baseColor.ktx2",
8135
- normal: "materials/ml-saqqara-bleached/normal.ktx2",
8136
- roughness: "materials/ml-saqqara-bleached/roughness.ktx2"
8137
- },
8138
- category: "wood-grain",
8139
- surfaceTexture: "pore",
8140
- textureRepeat: { u: 3, v: 4 },
8141
- sourceRef: "ML46NT",
8142
- thumbnail: "materials/ml-saqqara-bleached/thumbnail.jpg",
8143
- substrate: "melamine"
8306
+ "acrylic-za70-sm": {
8307
+ id: "acrylic-za70-sm",
8308
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05D9\u05E8\u05D5\u05E7 \u05E2\u05EA\u05D9\u05E7",
8309
+ priceMultiplier: 1,
8310
+ fallbackColor: "#94a3a0",
8311
+ category: "solid",
8312
+ surfaceTexture: "soft-matte",
8313
+ textureRepeat: { u: 1, v: 1 },
8314
+ sourceRef: "ZA70-SM",
8315
+ thumbnail: "materials/acrylic-za70-sm/thumbnail.jpg",
8316
+ substrate: "acrylic"
8144
8317
  },
8145
- "ml-saqqara-natural": {
8146
- id: "ml-saqqara-natural",
8147
- label: "Saqqara Natural",
8148
- priceMultiplier: 1.3,
8149
- fallbackColor: "#d4b890",
8150
- textureSet: {
8151
- baseColor: "materials/ml-saqqara-natural/baseColor.ktx2",
8152
- normal: "materials/ml-saqqara-natural/normal.ktx2",
8153
- roughness: "materials/ml-saqqara-natural/roughness.ktx2"
8154
- },
8155
- category: "wood-grain",
8156
- surfaceTexture: "pore",
8157
- textureRepeat: { u: 3, v: 4 },
8158
- sourceRef: "ML48NT",
8159
- thumbnail: "materials/ml-saqqara-natural/thumbnail.jpg",
8160
- substrate: "melamine"
8318
+ "acrylic-za08-sm": {
8319
+ id: "acrylic-za08-sm",
8320
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05DB\u05D7\u05D5\u05DC \u05D0\u05D9\u05E0\u05D3\u05D9\u05D2\u05D5",
8321
+ priceMultiplier: 1,
8322
+ fallbackColor: "#333645",
8323
+ category: "solid",
8324
+ surfaceTexture: "soft-matte",
8325
+ textureRepeat: { u: 1, v: 1 },
8326
+ sourceRef: "ZA08-SM",
8327
+ thumbnail: "materials/acrylic-za08-sm/thumbnail.jpg",
8328
+ substrate: "acrylic"
8161
8329
  },
8162
- "ml-saqqara-red": {
8163
- id: "ml-saqqara-red",
8164
- label: "Saqqara Red",
8165
- priceMultiplier: 1.3,
8166
- fallbackColor: "#a07050",
8167
- textureSet: {
8168
- baseColor: "materials/ml-saqqara-red/baseColor.ktx2",
8169
- normal: "materials/ml-saqqara-red/normal.ktx2",
8170
- roughness: "materials/ml-saqqara-red/roughness.ktx2"
8171
- },
8172
- category: "wood-grain",
8173
- surfaceTexture: "pore",
8174
- textureRepeat: { u: 3, v: 4 },
8175
- sourceRef: "ML49NT",
8176
- thumbnail: "materials/ml-saqqara-red/thumbnail.jpg",
8177
- substrate: "melamine"
8330
+ "acrylic-za69-sm": {
8331
+ id: "acrylic-za69-sm",
8332
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05DB\u05D7\u05D5\u05DC \u05E2\u05EA\u05D9\u05E7",
8333
+ priceMultiplier: 1,
8334
+ fallbackColor: "#939aa0",
8335
+ category: "solid",
8336
+ surfaceTexture: "soft-matte",
8337
+ textureRepeat: { u: 1, v: 1 },
8338
+ sourceRef: "ZA69-SM",
8339
+ thumbnail: "materials/acrylic-za69-sm/thumbnail.jpg",
8340
+ substrate: "acrylic"
8178
8341
  },
8179
- "ml-saqqara-light-brown": {
8180
- id: "ml-saqqara-light-brown",
8181
- label: "Saqqara Light Brown",
8182
- priceMultiplier: 1.3,
8183
- fallbackColor: "#b89070",
8184
- textureSet: {
8185
- baseColor: "materials/ml-saqqara-light-brown/baseColor.ktx2",
8186
- normal: "materials/ml-saqqara-light-brown/normal.ktx2",
8187
- roughness: "materials/ml-saqqara-light-brown/roughness.ktx2"
8188
- },
8189
- category: "wood-grain",
8190
- surfaceTexture: "pore",
8191
- textureRepeat: { u: 3, v: 4 },
8192
- sourceRef: "ML50NT",
8193
- thumbnail: "materials/ml-saqqara-light-brown/thumbnail.jpg",
8194
- substrate: "melamine"
8342
+ "acrylic-za06-sm": {
8343
+ id: "acrylic-za06-sm",
8344
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05DC\u05D1\u05DF",
8345
+ priceMultiplier: 1,
8346
+ fallbackColor: "#ffffff",
8347
+ category: "solid",
8348
+ surfaceTexture: "soft-matte",
8349
+ textureRepeat: { u: 1, v: 1 },
8350
+ sourceRef: "ZA06-SM",
8351
+ thumbnail: "materials/acrylic-za06-sm/thumbnail.jpg",
8352
+ substrate: "acrylic"
8195
8353
  },
8196
- "ml-saqqara-chestnut": {
8197
- id: "ml-saqqara-chestnut",
8198
- label: "Saqqara Chestnut",
8199
- priceMultiplier: 1.3,
8200
- fallbackColor: "#6b4830",
8201
- textureSet: {
8202
- baseColor: "materials/ml-saqqara-chestnut/baseColor.ktx2",
8203
- normal: "materials/ml-saqqara-chestnut/normal.ktx2",
8204
- roughness: "materials/ml-saqqara-chestnut/roughness.ktx2"
8205
- },
8206
- category: "wood-grain",
8207
- surfaceTexture: "pore",
8208
- textureRepeat: { u: 3, v: 4 },
8209
- sourceRef: "ML51NT",
8210
- thumbnail: "materials/ml-saqqara-chestnut/thumbnail.jpg",
8211
- substrate: "melamine"
8354
+ "acrylic-za301-sm": {
8355
+ id: "acrylic-za301-sm",
8356
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05DC\u05D1\u05DF \u05E6\u05D3\u05E3",
8357
+ priceMultiplier: 1,
8358
+ fallbackColor: "#f3eddf",
8359
+ category: "solid",
8360
+ surfaceTexture: "soft-matte",
8361
+ textureRepeat: { u: 1, v: 1 },
8362
+ sourceRef: "ZA301-SM",
8363
+ thumbnail: "materials/acrylic-za301-sm/thumbnail.jpg",
8364
+ substrate: "acrylic"
8212
8365
  },
8213
- // Allon DT (Kaindl)
8214
- "kl-oak-natural": {
8215
- id: "kl-oak-natural",
8216
- label: "Oak Natural",
8217
- priceMultiplier: 1.4,
8218
- fallbackColor: "#d4a870",
8219
- textureSet: {
8220
- baseColor: "materials/kl-oak-natural/baseColor.ktx2",
8221
- normal: "materials/kl-oak-natural/normal.ktx2",
8222
- roughness: "materials/kl-oak-natural/roughness.ktx2"
8223
- },
8224
- category: "wood-grain",
8225
- surfaceTexture: "pore",
8226
- textureRepeat: { u: 3, v: 4 },
8227
- sourceRef: "KL32NT/KH32DT",
8228
- thumbnail: "materials/kl-oak-natural/thumbnail.jpg",
8229
- substrate: "melamine"
8366
+ "acrylic-za03-sm": {
8367
+ id: "acrylic-za03-sm",
8368
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05DE\u05D5\u05E7\u05D4",
8369
+ priceMultiplier: 1,
8370
+ fallbackColor: "#b39e83",
8371
+ category: "solid",
8372
+ surfaceTexture: "soft-matte",
8373
+ textureRepeat: { u: 1, v: 1 },
8374
+ sourceRef: "ZA03-SM",
8375
+ thumbnail: "materials/acrylic-za03-sm/thumbnail.jpg",
8376
+ substrate: "acrylic"
8230
8377
  },
8231
- "kl-oak-split-natural": {
8232
- id: "kl-oak-split-natural",
8233
- label: "Oak Split Natural",
8234
- priceMultiplier: 1.4,
8235
- fallbackColor: "#c89860",
8236
- textureSet: {
8237
- baseColor: "materials/kl-oak-split-natural/baseColor.ktx2",
8238
- normal: "materials/kl-oak-split-natural/normal.ktx2",
8239
- roughness: "materials/kl-oak-split-natural/roughness.ktx2"
8240
- },
8241
- category: "wood-grain",
8242
- surfaceTexture: "pore",
8243
- textureRepeat: { u: 3, v: 4 },
8244
- sourceRef: "KL31NT/KH31DT",
8245
- thumbnail: "materials/kl-oak-split-natural/thumbnail.jpg",
8246
- substrate: "melamine"
8378
+ "acrylic-za04-sm": {
8379
+ id: "acrylic-za04-sm",
8380
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05E1\u05D4\u05E8\u05D4",
8381
+ priceMultiplier: 1,
8382
+ fallbackColor: "#cdbeab",
8383
+ category: "solid",
8384
+ surfaceTexture: "soft-matte",
8385
+ textureRepeat: { u: 1, v: 1 },
8386
+ sourceRef: "ZA04-SM",
8387
+ thumbnail: "materials/acrylic-za04-sm/thumbnail.jpg",
8388
+ substrate: "acrylic"
8247
8389
  },
8248
- "kl-oak-split-smoked": {
8249
- id: "kl-oak-split-smoked",
8250
- label: "Oak Split Smoked",
8251
- priceMultiplier: 1.4,
8252
- fallbackColor: "#8b7058",
8253
- textureSet: {
8254
- baseColor: "materials/kl-oak-split-smoked/baseColor.ktx2",
8255
- normal: "materials/kl-oak-split-smoked/normal.ktx2",
8256
- roughness: "materials/kl-oak-split-smoked/roughness.ktx2"
8257
- },
8258
- category: "wood-grain",
8259
- surfaceTexture: "pore",
8260
- textureRepeat: { u: 3, v: 4 },
8261
- sourceRef: "KL30NT/KH30DT",
8262
- thumbnail: "materials/kl-oak-split-smoked/thumbnail.jpg",
8263
- substrate: "melamine"
8390
+ "acrylic-za38-sm": {
8391
+ id: "acrylic-za38-sm",
8392
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05E7\u05E4\u05D4",
8393
+ priceMultiplier: 1,
8394
+ fallbackColor: "#afa49a",
8395
+ category: "solid",
8396
+ surfaceTexture: "soft-matte",
8397
+ textureRepeat: { u: 1, v: 1 },
8398
+ sourceRef: "ZA38-SM",
8399
+ thumbnail: "materials/acrylic-za38-sm/thumbnail.jpg",
8400
+ substrate: "acrylic"
8264
8401
  },
8265
- "kl-oak-cognac": {
8266
- id: "kl-oak-cognac",
8267
- label: "Oak Cognac",
8268
- priceMultiplier: 1.5,
8269
- fallbackColor: "#7b4a28",
8270
- textureSet: {
8271
- baseColor: "materials/kl-oak-cognac/baseColor.ktx2",
8272
- normal: "materials/kl-oak-cognac/normal.ktx2",
8273
- roughness: "materials/kl-oak-cognac/roughness.ktx2"
8274
- },
8275
- category: "wood-grain",
8276
- surfaceTexture: "pore",
8277
- textureRepeat: { u: 3, v: 4 },
8278
- sourceRef: "KL15NT/KH15DT",
8279
- thumbnail: "materials/kl-oak-cognac/thumbnail.jpg",
8280
- substrate: "melamine"
8402
+ "acrylic-za300-sm": {
8403
+ id: "acrylic-za300-sm",
8404
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05E9\u05D7\u05D5\u05E8 \u05DB\u05D4\u05D4",
8405
+ priceMultiplier: 1,
8406
+ fallbackColor: "#1e1e1e",
8407
+ category: "solid",
8408
+ surfaceTexture: "soft-matte",
8409
+ textureRepeat: { u: 1, v: 1 },
8410
+ sourceRef: "ZA300-SM",
8411
+ thumbnail: "materials/acrylic-za300-sm/thumbnail.jpg",
8412
+ substrate: "acrylic"
8281
8413
  },
8282
- "kl-oak-trunk": {
8283
- id: "kl-oak-trunk",
8284
- label: "Oak Trunk",
8285
- priceMultiplier: 1.4,
8286
- fallbackColor: "#c09060",
8287
- textureSet: {
8288
- baseColor: "materials/kl-oak-trunk/baseColor.ktx2",
8289
- normal: "materials/kl-oak-trunk/normal.ktx2",
8290
- roughness: "materials/kl-oak-trunk/roughness.ktx2"
8291
- },
8292
- category: "wood-grain",
8293
- surfaceTexture: "deep-texture",
8294
- textureRepeat: { u: 3, v: 4 },
8295
- sourceRef: "KL14NT/KH14DT",
8296
- thumbnail: "materials/kl-oak-trunk/thumbnail.jpg",
8297
- substrate: "melamine"
8414
+ "acrylic-za02-sm": {
8415
+ id: "acrylic-za02-sm",
8416
+ label: "\u05D0\u05E7\u05E8\u05D9\u05DC \u05E9\u05E0\u05D4\u05D1",
8417
+ priceMultiplier: 1,
8418
+ fallbackColor: "#ffeccc",
8419
+ category: "solid",
8420
+ surfaceTexture: "soft-matte",
8421
+ textureRepeat: { u: 1, v: 1 },
8422
+ sourceRef: "ZA02-SM",
8423
+ thumbnail: "materials/acrylic-za02-sm/thumbnail.jpg",
8424
+ substrate: "acrylic"
8298
8425
  },
8299
- // Allon / Vinto NT (Kaindl)
8300
- "kl-oak-light": {
8301
- id: "kl-oak-light",
8302
- label: "Oak Light",
8303
- priceMultiplier: 1.4,
8304
- fallbackColor: "#d8c8a8",
8305
- textureSet: {
8306
- baseColor: "materials/kl-oak-light/baseColor.ktx2",
8307
- normal: "materials/kl-oak-light/normal.ktx2",
8308
- roughness: "materials/kl-oak-light/roughness.ktx2"
8309
- },
8310
- category: "wood-grain",
8311
- surfaceTexture: "pore",
8312
- textureRepeat: { u: 3, v: 4 },
8313
- sourceRef: "ML58NT",
8314
- thumbnail: "materials/kl-oak-light/thumbnail.jpg",
8315
- substrate: "melamine"
8426
+ "acrylic-za36-sm": {
8427
+ id: "acrylic-za36-sm",
8428
+ label: "\u05D7\u05D5\u05DC",
8429
+ priceMultiplier: 1,
8430
+ fallbackColor: "#e3ddcf",
8431
+ category: "solid",
8432
+ surfaceTexture: "soft-matte",
8433
+ textureRepeat: { u: 1, v: 1 },
8434
+ sourceRef: "ZA36-SM",
8435
+ thumbnail: "materials/acrylic-za36-sm/thumbnail.jpg",
8436
+ substrate: "acrylic"
8316
8437
  },
8317
- "kl-oak-brown": {
8318
- id: "kl-oak-brown",
8319
- label: "Oak Brown",
8320
- priceMultiplier: 1.4,
8321
- fallbackColor: "#9b7050",
8322
- textureSet: {
8323
- baseColor: "materials/kl-oak-brown/baseColor.ktx2",
8324
- normal: "materials/kl-oak-brown/normal.ktx2",
8325
- roughness: "materials/kl-oak-brown/roughness.ktx2"
8326
- },
8327
- category: "wood-grain",
8328
- surfaceTexture: "pore",
8329
- textureRepeat: { u: 3, v: 4 },
8330
- sourceRef: "ML59NT",
8331
- thumbnail: "materials/kl-oak-brown/thumbnail.jpg",
8332
- substrate: "melamine"
8438
+ "acrylic-za39-sm": {
8439
+ id: "acrylic-za39-sm",
8440
+ label: "\u05D7\u05DC\u05D5\u05E7 \u05E0\u05D7\u05DC",
8441
+ priceMultiplier: 1,
8442
+ fallbackColor: "#d0cfca",
8443
+ category: "solid",
8444
+ surfaceTexture: "soft-matte",
8445
+ textureRepeat: { u: 1, v: 1 },
8446
+ sourceRef: "ZA39-SM",
8447
+ thumbnail: "materials/acrylic-za39-sm/thumbnail.jpg",
8448
+ substrate: "acrylic"
8333
8449
  },
8334
- "kl-oak-dark-brown": {
8335
- id: "kl-oak-dark-brown",
8336
- label: "Oak Dark Brown",
8337
- priceMultiplier: 1.4,
8338
- fallbackColor: "#7b5038",
8339
- textureSet: {
8340
- baseColor: "materials/kl-oak-dark-brown/baseColor.ktx2",
8341
- normal: "materials/kl-oak-dark-brown/normal.ktx2",
8342
- roughness: "materials/kl-oak-dark-brown/roughness.ktx2"
8343
- },
8344
- category: "wood-grain",
8345
- surfaceTexture: "pore",
8346
- textureRepeat: { u: 3, v: 4 },
8347
- sourceRef: "ML60NT",
8348
- thumbnail: "materials/kl-oak-dark-brown/thumbnail.jpg",
8349
- substrate: "melamine"
8450
+ "acrylic-za37-sm": {
8451
+ id: "acrylic-za37-sm",
8452
+ label: "\u05D7\u05E8\u05E1",
8453
+ priceMultiplier: 1,
8454
+ fallbackColor: "#dfdbd2",
8455
+ category: "solid",
8456
+ surfaceTexture: "soft-matte",
8457
+ textureRepeat: { u: 1, v: 1 },
8458
+ sourceRef: "ZA37-SM",
8459
+ thumbnail: "materials/acrylic-za37-sm/thumbnail.jpg",
8460
+ substrate: "acrylic"
8350
8461
  },
8351
- "kl-oak-greyish": {
8352
- id: "kl-oak-greyish",
8353
- label: "Oak Greyish",
8354
- priceMultiplier: 1.4,
8355
- fallbackColor: "#9b9080",
8462
+ "mel-kl67-nt": {
8463
+ id: "mel-kl67-nt",
8464
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D3\u05D1\u05E9 \u05D1\u05D4\u05D9\u05E8 \u05DE\u05D9\u05E7\u05E1",
8465
+ priceMultiplier: 1,
8466
+ fallbackColor: "#bd9055",
8356
8467
  textureSet: {
8357
- baseColor: "materials/kl-oak-greyish/baseColor.ktx2",
8358
- normal: "materials/kl-oak-greyish/normal.ktx2",
8359
- roughness: "materials/kl-oak-greyish/roughness.ktx2"
8468
+ baseColor: "materials/mel-kl67-nt/baseColor.jpg",
8469
+ normal: "materials/mel-kl67-nt/normal.jpg",
8470
+ roughness: "materials/mel-kl67-nt/roughness.jpg"
8360
8471
  },
8361
8472
  category: "wood-grain",
8362
8473
  surfaceTexture: "pore",
8363
8474
  textureRepeat: { u: 3, v: 4 },
8364
- sourceRef: "ML61NT",
8365
- thumbnail: "materials/kl-oak-greyish/thumbnail.jpg",
8475
+ sourceRef: "KL67-NT",
8476
+ thumbnail: "materials/mel-kl67-nt/thumbnail.jpg",
8366
8477
  substrate: "melamine"
8367
8478
  },
8368
- "kl-vinto-cortina": {
8369
- id: "kl-vinto-cortina",
8370
- label: "Vinto Cortina",
8371
- priceMultiplier: 1.4,
8372
- fallbackColor: "#c8a050",
8479
+ "mel-kh69-dt": {
8480
+ id: "mel-kh69-dt",
8481
+ label: "\u05D0\u05D2\u05D5\u05D6 \u05DB\u05D4\u05D4 \u05E4\u05E1\u05D9\u05DD \u05E4\u05E8\u05D0\u05D9",
8482
+ priceMultiplier: 1,
8483
+ fallbackColor: "#635037",
8373
8484
  textureSet: {
8374
- baseColor: "materials/kl-vinto-cortina/baseColor.ktx2",
8375
- normal: "materials/kl-vinto-cortina/normal.ktx2",
8376
- roughness: "materials/kl-vinto-cortina/roughness.ktx2"
8485
+ baseColor: "materials/mel-kh69-dt/baseColor.jpg",
8486
+ normal: "materials/mel-kh69-dt/normal.jpg",
8487
+ roughness: "materials/mel-kh69-dt/roughness.jpg"
8377
8488
  },
8378
8489
  category: "wood-grain",
8379
8490
  surfaceTexture: "deep-texture",
8380
8491
  textureRepeat: { u: 3, v: 4 },
8381
- sourceRef: "ML15DT",
8382
- thumbnail: "materials/kl-vinto-cortina/thumbnail.jpg",
8383
- substrate: "melamine"
8384
- },
8385
- // Horsh (Kaindl, DT)
8386
- "kl-oak-bronze": {
8387
- id: "kl-oak-bronze",
8388
- label: "Oak Bronze",
8389
- priceMultiplier: 1.5,
8390
- fallbackColor: "#6b4028",
8391
- textureSet: {
8392
- baseColor: "materials/kl-oak-bronze/baseColor.ktx2",
8393
- normal: "materials/kl-oak-bronze/normal.ktx2",
8394
- roughness: "materials/kl-oak-bronze/roughness.ktx2"
8395
- },
8396
- category: "wood-grain",
8397
- surfaceTexture: "deep-pore",
8398
- textureRepeat: { u: 3, v: 4 },
8399
- sourceRef: "KL04NT/KH04DT",
8400
- thumbnail: "materials/kl-oak-bronze/thumbnail.jpg",
8401
- substrate: "melamine"
8402
- },
8403
- "kl-oak-platinum": {
8404
- id: "kl-oak-platinum",
8405
- label: "Oak Platinum",
8406
- priceMultiplier: 1.5,
8407
- fallbackColor: "#c0b8a8",
8408
- textureSet: {
8409
- baseColor: "materials/kl-oak-platinum/baseColor.ktx2",
8410
- normal: "materials/kl-oak-platinum/normal.ktx2",
8411
- roughness: "materials/kl-oak-platinum/roughness.ktx2"
8412
- },
8413
- category: "wood-grain",
8414
- surfaceTexture: "deep-pore",
8415
- textureRepeat: { u: 3, v: 4 },
8416
- sourceRef: "KL03NT/KH03DT",
8417
- thumbnail: "materials/kl-oak-platinum/thumbnail.jpg",
8418
- substrate: "melamine"
8419
- },
8420
- "kl-oak-white": {
8421
- id: "kl-oak-white",
8422
- label: "Oak White",
8423
- priceMultiplier: 1.5,
8424
- fallbackColor: "#ece8e0",
8425
- textureSet: {
8426
- baseColor: "materials/kl-oak-white/baseColor.ktx2",
8427
- normal: "materials/kl-oak-white/normal.ktx2",
8428
- roughness: "materials/kl-oak-white/roughness.ktx2"
8429
- },
8430
- category: "wood-grain",
8431
- surfaceTexture: "deep-pore",
8432
- textureRepeat: { u: 3, v: 4 },
8433
- sourceRef: "KL01NT/KH01DT",
8434
- thumbnail: "materials/kl-oak-white/thumbnail.jpg",
8435
- substrate: "melamine"
8436
- },
8437
- "kl-oak-split": {
8438
- id: "kl-oak-split",
8439
- label: "Oak Split",
8440
- priceMultiplier: 1.5,
8441
- fallbackColor: "#c09868",
8442
- textureSet: {
8443
- baseColor: "materials/kl-oak-split/baseColor.ktx2",
8444
- normal: "materials/kl-oak-split/normal.ktx2",
8445
- roughness: "materials/kl-oak-split/roughness.ktx2"
8446
- },
8447
- category: "wood-grain",
8448
- surfaceTexture: "deep-pore",
8449
- textureRepeat: { u: 3, v: 4 },
8450
- sourceRef: "KL07NT/KH07DT",
8451
- thumbnail: "materials/kl-oak-split/thumbnail.jpg",
8452
- substrate: "melamine"
8453
- },
8454
- "kl-teak": {
8455
- id: "kl-teak",
8456
- label: "Teak",
8457
- priceMultiplier: 1.8,
8458
- fallbackColor: "#4a3020",
8459
- textureSet: {
8460
- baseColor: "materials/kl-teak/baseColor.ktx2",
8461
- normal: "materials/kl-teak/normal.ktx2",
8462
- roughness: "materials/kl-teak/roughness.ktx2"
8463
- },
8464
- category: "wood-grain",
8465
- surfaceTexture: "deep-pore",
8466
- textureRepeat: { u: 3, v: 4 },
8467
- sourceRef: "KL02NT/KH02DT",
8468
- thumbnail: "materials/kl-teak/thumbnail.jpg",
8469
- substrate: "melamine"
8470
- },
8471
- "kl-ash-grey": {
8472
- id: "kl-ash-grey",
8473
- label: "Ash Grey",
8474
- priceMultiplier: 1.5,
8475
- fallbackColor: "#9b9898",
8476
- textureSet: {
8477
- baseColor: "materials/kl-ash-grey/baseColor.ktx2",
8478
- normal: "materials/kl-ash-grey/normal.ktx2",
8479
- roughness: "materials/kl-ash-grey/roughness.ktx2"
8480
- },
8481
- category: "wood-grain",
8482
- surfaceTexture: "deep-pore",
8483
- textureRepeat: { u: 3, v: 4 },
8484
- sourceRef: "KL33NT/KH33DT",
8485
- thumbnail: "materials/kl-ash-grey/thumbnail.jpg",
8486
- substrate: "melamine"
8487
- },
8488
- // Aks DT (SM'art, pattern)
8489
- "ml-aks-khaki": {
8490
- id: "ml-aks-khaki",
8491
- label: "Aks Khaki",
8492
- priceMultiplier: 1,
8493
- fallbackColor: "#9b9880",
8494
- textureSet: {
8495
- baseColor: "materials/ml-aks-khaki/baseColor.ktx2",
8496
- normal: "materials/ml-aks-khaki/normal.ktx2",
8497
- roughness: "materials/ml-aks-khaki/roughness.ktx2"
8498
- },
8499
- category: "pattern",
8500
- surfaceTexture: "deep-texture",
8501
- textureRepeat: { u: 2, v: 2 },
8502
- sourceRef: "ML07DT",
8503
- thumbnail: "materials/ml-aks-khaki/thumbnail.jpg",
8492
+ sourceRef: "KH69-DT",
8493
+ thumbnail: "materials/mel-kh69-dt/thumbnail.jpg",
8504
8494
  substrate: "melamine"
8505
8495
  },
8506
- "ml-aks-black": {
8507
- id: "ml-aks-black",
8508
- label: "Aks Black",
8496
+ "mel-kh63-dt": {
8497
+ id: "mel-kh63-dt",
8498
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D0\u05D2\u05D5\u05D6\u05D9 \u05DE\u05D9\u05E7\u05E1",
8509
8499
  priceMultiplier: 1,
8510
- fallbackColor: "#1a1a1a",
8500
+ fallbackColor: "#614728",
8511
8501
  textureSet: {
8512
- baseColor: "materials/ml-aks-black/baseColor.ktx2",
8513
- normal: "materials/ml-aks-black/normal.ktx2",
8514
- roughness: "materials/ml-aks-black/roughness.ktx2"
8502
+ baseColor: "materials/mel-kh63-dt/baseColor.jpg",
8503
+ normal: "materials/mel-kh63-dt/normal.jpg",
8504
+ roughness: "materials/mel-kh63-dt/roughness.jpg"
8515
8505
  },
8516
- category: "pattern",
8506
+ category: "wood-grain",
8517
8507
  surfaceTexture: "deep-texture",
8518
- textureRepeat: { u: 2, v: 2 },
8519
- sourceRef: "ML09DT",
8520
- thumbnail: "materials/ml-aks-black/thumbnail.jpg",
8508
+ textureRepeat: { u: 3, v: 4 },
8509
+ sourceRef: "KH63-DT",
8510
+ thumbnail: "materials/mel-kh63-dt/thumbnail.jpg",
8521
8511
  substrate: "melamine"
8522
8512
  },
8523
- "ml-aks-white": {
8524
- id: "ml-aks-white",
8525
- label: "Aks White",
8513
+ "mel-kh61-dt": {
8514
+ id: "mel-kh61-dt",
8515
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D1\u05D4\u05D9\u05E8 \u05DE\u05D9\u05E7\u05E1",
8526
8516
  priceMultiplier: 1,
8527
- fallbackColor: "#f5f5f5",
8517
+ fallbackColor: "#a8824d",
8528
8518
  textureSet: {
8529
- baseColor: "materials/ml-aks-white/baseColor.ktx2",
8530
- normal: "materials/ml-aks-white/normal.ktx2",
8531
- roughness: "materials/ml-aks-white/roughness.ktx2"
8519
+ baseColor: "materials/mel-kh61-dt/baseColor.jpg",
8520
+ normal: "materials/mel-kh61-dt/normal.jpg",
8521
+ roughness: "materials/mel-kh61-dt/roughness.jpg"
8532
8522
  },
8533
- category: "pattern",
8523
+ category: "wood-grain",
8534
8524
  surfaceTexture: "deep-texture",
8535
- textureRepeat: { u: 2, v: 2 },
8536
- sourceRef: "ML06DT",
8537
- thumbnail: "materials/ml-aks-white/thumbnail.jpg",
8538
- substrate: "melamine"
8539
- },
8540
- // ─── Acrylic PURE — matte flat (Bluran/SENOSAN, מניפה 6) ────────────
8541
- "acrylic-mocha-matte": {
8542
- id: "acrylic-mocha-matte",
8543
- label: "Mocha Matte",
8544
- priceMultiplier: 1,
8545
- fallbackColor: "#8b6b4e",
8546
- textureSet: {
8547
- baseColor: "materials/acrylic-mocha-matte/baseColor.ktx2",
8548
- normal: "materials/acrylic-mocha-matte/normal.ktx2",
8549
- roughness: "materials/acrylic-mocha-matte/roughness.ktx2"
8550
- },
8551
- category: "solid",
8552
- surfaceTexture: "soft-matte",
8553
- textureRepeat: { u: 1, v: 1 },
8554
- sourceRef: "ZA03SM",
8555
- thumbnail: "materials/acrylic-mocha-matte/thumbnail.jpg",
8556
- substrate: "acrylic"
8557
- },
8558
- "acrylic-khaki-grey-matte": {
8559
- id: "acrylic-khaki-grey-matte",
8560
- label: "Khaki Grey Matte",
8561
- priceMultiplier: 1,
8562
- fallbackColor: "#8b8b7a",
8563
- textureSet: {
8564
- baseColor: "materials/acrylic-khaki-grey-matte/baseColor.ktx2",
8565
- normal: "materials/acrylic-khaki-grey-matte/normal.ktx2",
8566
- roughness: "materials/acrylic-khaki-grey-matte/roughness.ktx2"
8567
- },
8568
- category: "solid",
8569
- surfaceTexture: "soft-matte",
8570
- textureRepeat: { u: 1, v: 1 },
8571
- sourceRef: "ZA05SM",
8572
- thumbnail: "materials/acrylic-khaki-grey-matte/thumbnail.jpg",
8573
- substrate: "acrylic"
8525
+ textureRepeat: { u: 3, v: 4 },
8526
+ sourceRef: "KH61-DT",
8527
+ thumbnail: "materials/mel-kh61-dt/thumbnail.jpg",
8528
+ substrate: "melamine"
8574
8529
  },
8575
- "acrylic-sahara-matte": {
8576
- id: "acrylic-sahara-matte",
8577
- label: "Sahara Matte",
8530
+ "mel-kh14-dt": {
8531
+ id: "mel-kh14-dt",
8532
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D2\u05D3\u05E2",
8578
8533
  priceMultiplier: 1,
8579
- fallbackColor: "#c4a882",
8534
+ fallbackColor: "#916c3a",
8580
8535
  textureSet: {
8581
- baseColor: "materials/acrylic-sahara-matte/baseColor.ktx2",
8582
- normal: "materials/acrylic-sahara-matte/normal.ktx2",
8583
- roughness: "materials/acrylic-sahara-matte/roughness.ktx2"
8536
+ baseColor: "materials/mel-kh14-dt/baseColor.jpg",
8537
+ normal: "materials/mel-kh14-dt/normal.jpg",
8538
+ roughness: "materials/mel-kh14-dt/roughness.jpg"
8584
8539
  },
8585
- category: "solid",
8586
- surfaceTexture: "soft-matte",
8587
- textureRepeat: { u: 1, v: 1 },
8588
- sourceRef: "ZA04SM",
8589
- thumbnail: "materials/acrylic-sahara-matte/thumbnail.jpg",
8590
- substrate: "acrylic"
8540
+ category: "wood-grain",
8541
+ surfaceTexture: "deep-texture",
8542
+ textureRepeat: { u: 3, v: 4 },
8543
+ sourceRef: "KH14-DT",
8544
+ thumbnail: "materials/mel-kh14-dt/thumbnail.jpg",
8545
+ substrate: "melamine"
8591
8546
  },
8592
- "acrylic-light-grey-matte": {
8593
- id: "acrylic-light-grey-matte",
8594
- label: "Light Grey Matte",
8547
+ "mel-kh68-dt": {
8548
+ id: "mel-kh68-dt",
8549
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D7\u05D5\u05DD \u05D0\u05D3\u05DE\u05D3\u05DD \u05DE\u05D9\u05E7\u05E1",
8595
8550
  priceMultiplier: 1,
8596
- fallbackColor: "#afafaf",
8551
+ fallbackColor: "#725337",
8597
8552
  textureSet: {
8598
- baseColor: "materials/acrylic-light-grey-matte/baseColor.ktx2",
8599
- normal: "materials/acrylic-light-grey-matte/normal.ktx2",
8600
- roughness: "materials/acrylic-light-grey-matte/roughness.ktx2"
8553
+ baseColor: "materials/mel-kh68-dt/baseColor.jpg",
8554
+ normal: "materials/mel-kh68-dt/normal.jpg",
8555
+ roughness: "materials/mel-kh68-dt/roughness.jpg"
8601
8556
  },
8602
- category: "solid",
8603
- surfaceTexture: "soft-matte",
8604
- textureRepeat: { u: 1, v: 1 },
8605
- sourceRef: "ZA71SM",
8606
- thumbnail: "materials/acrylic-light-grey-matte/thumbnail.jpg",
8607
- substrate: "acrylic"
8557
+ category: "wood-grain",
8558
+ surfaceTexture: "deep-texture",
8559
+ textureRepeat: { u: 3, v: 4 },
8560
+ sourceRef: "KH68-DT",
8561
+ thumbnail: "materials/mel-kh68-dt/thumbnail.jpg",
8562
+ substrate: "melamine"
8608
8563
  },
8609
- "acrylic-antique-blue-matte": {
8610
- id: "acrylic-antique-blue-matte",
8611
- label: "Antique Blue Matte",
8564
+ "mel-kh62-dt": {
8565
+ id: "mel-kh62-dt",
8566
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D7\u05DD \u05DE\u05D9\u05E7\u05E1",
8612
8567
  priceMultiplier: 1,
8613
- fallbackColor: "#5b7b8b",
8568
+ fallbackColor: "#875f3b",
8614
8569
  textureSet: {
8615
- baseColor: "materials/acrylic-antique-blue-matte/baseColor.ktx2",
8616
- normal: "materials/acrylic-antique-blue-matte/normal.ktx2",
8617
- roughness: "materials/acrylic-antique-blue-matte/roughness.ktx2"
8570
+ baseColor: "materials/mel-kh62-dt/baseColor.jpg",
8571
+ normal: "materials/mel-kh62-dt/normal.jpg",
8572
+ roughness: "materials/mel-kh62-dt/roughness.jpg"
8618
8573
  },
8619
- category: "solid",
8620
- surfaceTexture: "soft-matte",
8621
- textureRepeat: { u: 1, v: 1 },
8622
- sourceRef: "ZA69SM",
8623
- thumbnail: "materials/acrylic-antique-blue-matte/thumbnail.jpg",
8624
- substrate: "acrylic"
8574
+ category: "wood-grain",
8575
+ surfaceTexture: "deep-texture",
8576
+ textureRepeat: { u: 3, v: 4 },
8577
+ sourceRef: "KH62-DT",
8578
+ thumbnail: "materials/mel-kh62-dt/thumbnail.jpg",
8579
+ substrate: "melamine"
8625
8580
  },
8626
- "acrylic-antique-green-matte": {
8627
- id: "acrylic-antique-green-matte",
8628
- label: "Antique Green Matte",
8581
+ "mel-kh31-dt": {
8582
+ id: "mel-kh31-dt",
8583
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D8\u05D1\u05E2\u05D9 \u05DE\u05D1\u05D5\u05E7\u05E2",
8629
8584
  priceMultiplier: 1,
8630
- fallbackColor: "#6b8b7a",
8585
+ fallbackColor: "#c4a985",
8631
8586
  textureSet: {
8632
- baseColor: "materials/acrylic-antique-green-matte/baseColor.ktx2",
8633
- normal: "materials/acrylic-antique-green-matte/normal.ktx2",
8634
- roughness: "materials/acrylic-antique-green-matte/roughness.ktx2"
8587
+ baseColor: "materials/mel-kh31-dt/baseColor.jpg",
8588
+ normal: "materials/mel-kh31-dt/normal.jpg",
8589
+ roughness: "materials/mel-kh31-dt/roughness.jpg"
8635
8590
  },
8636
- category: "solid",
8637
- surfaceTexture: "soft-matte",
8638
- textureRepeat: { u: 1, v: 1 },
8639
- sourceRef: "ZA70SM",
8640
- thumbnail: "materials/acrylic-antique-green-matte/thumbnail.jpg",
8641
- substrate: "acrylic"
8591
+ category: "wood-grain",
8592
+ surfaceTexture: "deep-texture",
8593
+ textureRepeat: { u: 3, v: 4 },
8594
+ sourceRef: "KH31-DT",
8595
+ thumbnail: "materials/mel-kh31-dt/thumbnail.jpg",
8596
+ substrate: "melamine"
8642
8597
  },
8643
- "acrylic-ivory-matte": {
8644
- id: "acrylic-ivory-matte",
8645
- label: "Ivory Matte",
8598
+ "mel-kh32-dt": {
8599
+ id: "mel-kh32-dt",
8600
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D8\u05D1\u05E2\u05D9 \u05DE\u05D9\u05E7\u05E1",
8646
8601
  priceMultiplier: 1,
8647
- fallbackColor: "#ede8d5",
8602
+ fallbackColor: "#be9562",
8648
8603
  textureSet: {
8649
- baseColor: "materials/acrylic-ivory-matte/baseColor.ktx2",
8650
- normal: "materials/acrylic-ivory-matte/normal.ktx2",
8651
- roughness: "materials/acrylic-ivory-matte/roughness.ktx2"
8604
+ baseColor: "materials/mel-kh32-dt/baseColor.jpg",
8605
+ normal: "materials/mel-kh32-dt/normal.jpg",
8606
+ roughness: "materials/mel-kh32-dt/roughness.jpg"
8652
8607
  },
8653
- category: "solid",
8654
- surfaceTexture: "soft-matte",
8655
- textureRepeat: { u: 1, v: 1 },
8656
- sourceRef: "ZA02SM",
8657
- thumbnail: "materials/acrylic-ivory-matte/thumbnail.jpg",
8658
- substrate: "acrylic"
8608
+ category: "wood-grain",
8609
+ surfaceTexture: "deep-texture",
8610
+ textureRepeat: { u: 3, v: 4 },
8611
+ sourceRef: "KH32-DT",
8612
+ thumbnail: "materials/mel-kh32-dt/thumbnail.jpg",
8613
+ substrate: "melamine"
8659
8614
  },
8660
- "acrylic-coffee-matte": {
8661
- id: "acrylic-coffee-matte",
8662
- label: "Coffee Matte",
8615
+ "mel-kh65-dt": {
8616
+ id: "mel-kh65-dt",
8617
+ label: "\u05D0\u05DC\u05D5\u05DF \u05D8\u05E8\u05D8\u05D5\u05E4\u05D5 \u05DE\u05D9\u05E7\u05E1",
8663
8618
  priceMultiplier: 1,
8664
- fallbackColor: "#6b4a3a",
8619
+ fallbackColor: "#6f5d46",
8665
8620
  textureSet: {
8666
- baseColor: "materials/acrylic-coffee-matte/baseColor.ktx2",
8667
- normal: "materials/acrylic-coffee-matte/normal.ktx2",
8668
- roughness: "materials/acrylic-coffee-matte/roughness.ktx2"
8621
+ baseColor: "materials/mel-kh65-dt/baseColor.jpg",
8622
+ normal: "materials/mel-kh65-dt/normal.jpg",
8623
+ roughness: "materials/mel-kh65-dt/roughness.jpg"
8669
8624
  },
8670
- category: "solid",
8671
- surfaceTexture: "soft-matte",
8672
- textureRepeat: { u: 1, v: 1 },
8673
- sourceRef: "ZA38SM",
8674
- thumbnail: "materials/acrylic-coffee-matte/thumbnail.jpg",
8675
- substrate: "acrylic"
8625
+ category: "wood-grain",
8626
+ surfaceTexture: "deep-texture",
8627
+ textureRepeat: { u: 3, v: 4 },
8628
+ sourceRef: "KH65-DT",
8629
+ thumbnail: "materials/mel-kh65-dt/thumbnail.jpg",
8630
+ substrate: "melamine"
8676
8631
  },
8677
- "acrylic-white-matte": {
8678
- id: "acrylic-white-matte",
8679
- label: "White Matte",
8632
+ "mel-kh66-dt": {
8633
+ id: "mel-kh66-dt",
8634
+ label: "\u05D0\u05DC\u05D5\u05DF \u05DB\u05D4\u05D4 \u05DE\u05D9\u05E7\u05E1",
8680
8635
  priceMultiplier: 1,
8681
- fallbackColor: "#f5f5f5",
8636
+ fallbackColor: "#140c09",
8682
8637
  textureSet: {
8683
- baseColor: "materials/acrylic-white-matte/baseColor.ktx2",
8684
- normal: "materials/acrylic-white-matte/normal.ktx2",
8685
- roughness: "materials/acrylic-white-matte/roughness.ktx2"
8638
+ baseColor: "materials/mel-kh66-dt/baseColor.jpg",
8639
+ normal: "materials/mel-kh66-dt/normal.jpg",
8640
+ roughness: "materials/mel-kh66-dt/roughness.jpg"
8686
8641
  },
8687
- category: "solid",
8688
- surfaceTexture: "soft-matte",
8689
- textureRepeat: { u: 1, v: 1 },
8690
- sourceRef: "ZA06SM",
8691
- thumbnail: "materials/acrylic-white-matte/thumbnail.jpg",
8692
- substrate: "acrylic"
8642
+ category: "wood-grain",
8643
+ surfaceTexture: "deep-texture",
8644
+ textureRepeat: { u: 3, v: 4 },
8645
+ sourceRef: "KH66-DT",
8646
+ thumbnail: "materials/mel-kh66-dt/thumbnail.jpg",
8647
+ substrate: "melamine"
8693
8648
  },
8694
- "acrylic-grayish-matte": {
8695
- id: "acrylic-grayish-matte",
8696
- label: "Grayish Matte",
8649
+ "mel-kh74-dt": {
8650
+ id: "mel-kh74-dt",
8651
+ label: "\u05D0\u05DC\u05D5\u05DF \u05DB\u05DE\u05D4\u05D9\u05DF \u05DE\u05D9\u05E7\u05E1",
8697
8652
  priceMultiplier: 1,
8698
- fallbackColor: "#c8c8c8",
8653
+ fallbackColor: "#47382a",
8699
8654
  textureSet: {
8700
- baseColor: "materials/acrylic-grayish-matte/baseColor.ktx2",
8701
- normal: "materials/acrylic-grayish-matte/normal.ktx2",
8702
- roughness: "materials/acrylic-grayish-matte/roughness.ktx2"
8655
+ baseColor: "materials/mel-kh74-dt/baseColor.jpg",
8656
+ normal: "materials/mel-kh74-dt/normal.jpg",
8657
+ roughness: "materials/mel-kh74-dt/roughness.jpg"
8703
8658
  },
8704
- category: "solid",
8705
- surfaceTexture: "soft-matte",
8706
- textureRepeat: { u: 1, v: 1 },
8707
- sourceRef: "ZA07SM",
8708
- thumbnail: "materials/acrylic-grayish-matte/thumbnail.jpg",
8709
- substrate: "acrylic"
8659
+ category: "wood-grain",
8660
+ surfaceTexture: "deep-texture",
8661
+ textureRepeat: { u: 3, v: 4 },
8662
+ sourceRef: "KH74-DT",
8663
+ thumbnail: "materials/mel-kh74-dt/thumbnail.jpg",
8664
+ substrate: "melamine"
8710
8665
  },
8711
- "acrylic-smoky-grey-matte": {
8712
- id: "acrylic-smoky-grey-matte",
8713
- label: "Smoky Grey Matte",
8666
+ "mel-kh37-dt": {
8667
+ id: "mel-kh37-dt",
8668
+ label: "\u05D0\u05DC\u05D5\u05DF \u05DB\u05E4\u05E8\u05D9 \u05DE\u05D1\u05D5\u05E7\u05E2",
8714
8669
  priceMultiplier: 1,
8715
- fallbackColor: "#8b8b8b",
8670
+ fallbackColor: "#92714f",
8716
8671
  textureSet: {
8717
- baseColor: "materials/acrylic-smoky-grey-matte/baseColor.ktx2",
8718
- normal: "materials/acrylic-smoky-grey-matte/normal.ktx2",
8719
- roughness: "materials/acrylic-smoky-grey-matte/roughness.ktx2"
8672
+ baseColor: "materials/mel-kh37-dt/baseColor.jpg",
8673
+ normal: "materials/mel-kh37-dt/normal.jpg",
8674
+ roughness: "materials/mel-kh37-dt/roughness.jpg"
8720
8675
  },
8721
- category: "solid",
8722
- surfaceTexture: "soft-matte",
8723
- textureRepeat: { u: 1, v: 1 },
8724
- sourceRef: "ZA310SM",
8725
- thumbnail: "materials/acrylic-smoky-grey-matte/thumbnail.jpg",
8726
- substrate: "acrylic"
8676
+ category: "wood-grain",
8677
+ surfaceTexture: "deep-texture",
8678
+ textureRepeat: { u: 3, v: 4 },
8679
+ sourceRef: "KH37-DT",
8680
+ thumbnail: "materials/mel-kh37-dt/thumbnail.jpg",
8681
+ substrate: "melamine"
8727
8682
  },
8728
- "acrylic-indigo-blue-matte": {
8729
- id: "acrylic-indigo-blue-matte",
8730
- label: "Indigo Blue Matte",
8683
+ "mel-kh30-dt": {
8684
+ id: "mel-kh30-dt",
8685
+ label: "\u05D0\u05DC\u05D5\u05DF \u05DE\u05E2\u05D5\u05E9\u05DF \u05DE\u05D1\u05D5\u05E7\u05E2",
8731
8686
  priceMultiplier: 1,
8732
- fallbackColor: "#3b4b7b",
8687
+ fallbackColor: "#9f865d",
8733
8688
  textureSet: {
8734
- baseColor: "materials/acrylic-indigo-blue-matte/baseColor.ktx2",
8735
- normal: "materials/acrylic-indigo-blue-matte/normal.ktx2",
8736
- roughness: "materials/acrylic-indigo-blue-matte/roughness.ktx2"
8689
+ baseColor: "materials/mel-kh30-dt/baseColor.jpg",
8690
+ normal: "materials/mel-kh30-dt/normal.jpg",
8691
+ roughness: "materials/mel-kh30-dt/roughness.jpg"
8737
8692
  },
8738
- category: "solid",
8739
- surfaceTexture: "soft-matte",
8740
- textureRepeat: { u: 1, v: 1 },
8741
- sourceRef: "ZA08SM",
8742
- thumbnail: "materials/acrylic-indigo-blue-matte/thumbnail.jpg",
8743
- substrate: "acrylic"
8693
+ category: "wood-grain",
8694
+ surfaceTexture: "deep-texture",
8695
+ textureRepeat: { u: 3, v: 4 },
8696
+ sourceRef: "KH30-DT",
8697
+ thumbnail: "materials/mel-kh30-dt/thumbnail.jpg",
8698
+ substrate: "melamine"
8744
8699
  },
8745
- "acrylic-pearl-white-matte": {
8746
- id: "acrylic-pearl-white-matte",
8747
- label: "Pearl White Matte",
8700
+ "mel-kh64-dt": {
8701
+ id: "mel-kh64-dt",
8702
+ label: "\u05D0\u05DC\u05D5\u05DF \u05DE\u05E2\u05D5\u05E9\u05DF \u05DE\u05D9\u05E7\u05E1",
8748
8703
  priceMultiplier: 1,
8749
- fallbackColor: "#f0ede8",
8704
+ fallbackColor: "#6b573f",
8750
8705
  textureSet: {
8751
- baseColor: "materials/acrylic-pearl-white-matte/baseColor.ktx2",
8752
- normal: "materials/acrylic-pearl-white-matte/normal.ktx2",
8753
- roughness: "materials/acrylic-pearl-white-matte/roughness.ktx2"
8706
+ baseColor: "materials/mel-kh64-dt/baseColor.jpg",
8707
+ normal: "materials/mel-kh64-dt/normal.jpg",
8708
+ roughness: "materials/mel-kh64-dt/roughness.jpg"
8754
8709
  },
8755
- category: "solid",
8756
- surfaceTexture: "soft-matte",
8757
- textureRepeat: { u: 1, v: 1 },
8758
- sourceRef: "ZA301SM",
8759
- thumbnail: "materials/acrylic-pearl-white-matte/thumbnail.jpg",
8760
- substrate: "acrylic"
8710
+ category: "wood-grain",
8711
+ surfaceTexture: "deep-texture",
8712
+ textureRepeat: { u: 3, v: 4 },
8713
+ sourceRef: "KH64-DT",
8714
+ thumbnail: "materials/mel-kh64-dt/thumbnail.jpg",
8715
+ substrate: "melamine"
8761
8716
  },
8762
- "acrylic-greige-matte": {
8763
- id: "acrylic-greige-matte",
8764
- label: "Greige Matte",
8717
+ "mel-kh15-dt": {
8718
+ id: "mel-kh15-dt",
8719
+ label: "\u05D0\u05DC\u05D5\u05DF \u05E7\u05D5\u05E0\u05D9\u05D0\u05E7 \u05D2\u05D3\u05E2",
8765
8720
  priceMultiplier: 1,
8766
- fallbackColor: "#bfbaa8",
8721
+ fallbackColor: "#503622",
8767
8722
  textureSet: {
8768
- baseColor: "materials/acrylic-greige-matte/baseColor.ktx2",
8769
- normal: "materials/acrylic-greige-matte/normal.ktx2",
8770
- roughness: "materials/acrylic-greige-matte/roughness.ktx2"
8723
+ baseColor: "materials/mel-kh15-dt/baseColor.jpg",
8724
+ normal: "materials/mel-kh15-dt/normal.jpg",
8725
+ roughness: "materials/mel-kh15-dt/roughness.jpg"
8771
8726
  },
8772
- category: "solid",
8773
- surfaceTexture: "soft-matte",
8774
- textureRepeat: { u: 1, v: 1 },
8775
- sourceRef: "ZA35SM",
8776
- thumbnail: "materials/acrylic-greige-matte/thumbnail.jpg",
8777
- substrate: "acrylic"
8727
+ category: "wood-grain",
8728
+ surfaceTexture: "deep-texture",
8729
+ textureRepeat: { u: 3, v: 4 },
8730
+ sourceRef: "KH15-DT",
8731
+ thumbnail: "materials/mel-kh15-dt/thumbnail.jpg",
8732
+ substrate: "melamine"
8778
8733
  },
8779
- "acrylic-forest-green-matte": {
8780
- id: "acrylic-forest-green-matte",
8781
- label: "Forest Green Matte",
8734
+ "mel-kh75-dt": {
8735
+ id: "mel-kh75-dt",
8736
+ label: "\u05D0\u05DC\u05D5\u05DF \u05E9\u05D9\u05D8\u05D0\u05E7\u05D9 \u05DE\u05D9\u05E7\u05E1",
8782
8737
  priceMultiplier: 1,
8783
- fallbackColor: "#4a6b5a",
8738
+ fallbackColor: "#88766b",
8784
8739
  textureSet: {
8785
- baseColor: "materials/acrylic-forest-green-matte/baseColor.ktx2",
8786
- normal: "materials/acrylic-forest-green-matte/normal.ktx2",
8787
- roughness: "materials/acrylic-forest-green-matte/roughness.ktx2"
8740
+ baseColor: "materials/mel-kh75-dt/baseColor.jpg",
8741
+ normal: "materials/mel-kh75-dt/normal.jpg",
8742
+ roughness: "materials/mel-kh75-dt/roughness.jpg"
8788
8743
  },
8789
- category: "solid",
8790
- surfaceTexture: "soft-matte",
8791
- textureRepeat: { u: 1, v: 1 },
8792
- sourceRef: "ZA86SM",
8793
- thumbnail: "materials/acrylic-forest-green-matte/thumbnail.jpg",
8794
- substrate: "acrylic"
8744
+ category: "wood-grain",
8745
+ surfaceTexture: "deep-texture",
8746
+ textureRepeat: { u: 3, v: 4 },
8747
+ sourceRef: "KH75-DT",
8748
+ thumbnail: "materials/mel-kh75-dt/thumbnail.jpg",
8749
+ substrate: "melamine"
8795
8750
  },
8796
- "acrylic-earth-brown-matte": {
8797
- id: "acrylic-earth-brown-matte",
8798
- label: "Earth Brown Matte",
8751
+ "mel-kh33-dt": {
8752
+ id: "mel-kh33-dt",
8753
+ label: "\u05D0\u05E9\u05D0 \u05D0\u05E4\u05D5\u05E8",
8799
8754
  priceMultiplier: 1,
8800
- fallbackColor: "#7b5b4a",
8755
+ fallbackColor: "#978769",
8801
8756
  textureSet: {
8802
- baseColor: "materials/acrylic-earth-brown-matte/baseColor.ktx2",
8803
- normal: "materials/acrylic-earth-brown-matte/normal.ktx2",
8804
- roughness: "materials/acrylic-earth-brown-matte/roughness.ktx2"
8757
+ baseColor: "materials/mel-kh33-dt/baseColor.jpg",
8758
+ normal: "materials/mel-kh33-dt/normal.jpg",
8759
+ roughness: "materials/mel-kh33-dt/roughness.jpg"
8805
8760
  },
8806
- category: "solid",
8807
- surfaceTexture: "soft-matte",
8808
- textureRepeat: { u: 1, v: 1 },
8809
- sourceRef: "ZA85SM",
8810
- thumbnail: "materials/acrylic-earth-brown-matte/thumbnail.jpg",
8811
- substrate: "acrylic"
8761
+ category: "wood-grain",
8762
+ surfaceTexture: "deep-texture",
8763
+ textureRepeat: { u: 3, v: 4 },
8764
+ sourceRef: "KH33-DT",
8765
+ thumbnail: "materials/mel-kh33-dt/thumbnail.jpg",
8766
+ substrate: "melamine"
8812
8767
  },
8813
- "acrylic-dark-grey-matte": {
8814
- id: "acrylic-dark-grey-matte",
8815
- label: "Dark Grey Matte",
8768
+ "mel-ph158-sm": {
8769
+ id: "mel-ph158-sm",
8770
+ label: "\u05DC\u05D1\u05DF \u05E6\u05D3\u05E3",
8816
8771
  priceMultiplier: 1,
8817
- fallbackColor: "#6b6b6b",
8818
- textureSet: {
8819
- baseColor: "materials/acrylic-dark-grey-matte/baseColor.ktx2",
8820
- normal: "materials/acrylic-dark-grey-matte/normal.ktx2",
8821
- roughness: "materials/acrylic-dark-grey-matte/roughness.ktx2"
8822
- },
8772
+ fallbackColor: "#fafbf5",
8823
8773
  category: "solid",
8824
8774
  surfaceTexture: "soft-matte",
8825
8775
  textureRepeat: { u: 1, v: 1 },
8826
- sourceRef: "ZA72SM",
8827
- thumbnail: "materials/acrylic-dark-grey-matte/thumbnail.jpg",
8828
- substrate: "acrylic"
8776
+ sourceRef: "PH158-SM",
8777
+ thumbnail: "materials/mel-ph158-sm/thumbnail.jpg",
8778
+ substrate: "melamine"
8829
8779
  },
8830
- "acrylic-dark-black-matte": {
8831
- id: "acrylic-dark-black-matte",
8832
- label: "Dark Black Matte",
8780
+ "mel-ph159-sm": {
8781
+ id: "mel-ph159-sm",
8782
+ label: "\u05D0\u05E4\u05D5\u05E8 \u05D1\u05D4\u05D9\u05E8",
8833
8783
  priceMultiplier: 1,
8834
- fallbackColor: "#1a1a1a",
8835
- textureSet: {
8836
- baseColor: "materials/acrylic-dark-black-matte/baseColor.ktx2",
8837
- normal: "materials/acrylic-dark-black-matte/normal.ktx2",
8838
- roughness: "materials/acrylic-dark-black-matte/roughness.ktx2"
8839
- },
8784
+ fallbackColor: "#d2cbc1",
8840
8785
  category: "solid",
8841
8786
  surfaceTexture: "soft-matte",
8842
8787
  textureRepeat: { u: 1, v: 1 },
8843
- sourceRef: "ZA300SM",
8844
- thumbnail: "materials/acrylic-dark-black-matte/thumbnail.jpg",
8845
- substrate: "acrylic"
8788
+ sourceRef: "PH159-SM",
8789
+ thumbnail: "materials/mel-ph159-sm/thumbnail.jpg",
8790
+ substrate: "melamine"
8846
8791
  },
8847
- // ─── Acrylic PURE — glossy flat (Bluran/SENOSAN, מניפה 36) ──────────
8848
- "acrylic-pure-white-gloss": {
8849
- id: "acrylic-pure-white-gloss",
8850
- label: "Pure White Gloss",
8792
+ "mel-ph160-sm": {
8793
+ id: "mel-ph160-sm",
8794
+ label: "\u05DC\u05D1\u05DF \u05D0\u05E4\u05E8\u05E4\u05E8",
8851
8795
  priceMultiplier: 1,
8852
- fallbackColor: "#ffffff",
8853
- textureSet: {
8854
- baseColor: "materials/acrylic-pure-white-gloss/baseColor.ktx2",
8855
- normal: "materials/acrylic-pure-white-gloss/normal.ktx2",
8856
- roughness: "materials/acrylic-pure-white-gloss/roughness.ktx2"
8857
- },
8796
+ fallbackColor: "#fbfaf6",
8858
8797
  category: "solid",
8859
- surfaceTexture: "smooth",
8798
+ surfaceTexture: "soft-matte",
8860
8799
  textureRepeat: { u: 1, v: 1 },
8861
- sourceRef: "ZA12HG",
8862
- thumbnail: "materials/acrylic-pure-white-gloss/thumbnail.jpg",
8863
- substrate: "acrylic"
8800
+ sourceRef: "PH160-SM",
8801
+ thumbnail: "materials/mel-ph160-sm/thumbnail.jpg",
8802
+ substrate: "melamine"
8864
8803
  },
8865
- "acrylic-ivory-gloss": {
8866
- id: "acrylic-ivory-gloss",
8867
- label: "Ivory Gloss",
8804
+ "mel-ph161-sm": {
8805
+ id: "mel-ph161-sm",
8806
+ label: "\u05E9\u05E0\u05D4\u05D1",
8868
8807
  priceMultiplier: 1,
8869
- fallbackColor: "#ede8d5",
8870
- textureSet: {
8871
- baseColor: "materials/acrylic-ivory-gloss/baseColor.ktx2",
8872
- normal: "materials/acrylic-ivory-gloss/normal.ktx2",
8873
- roughness: "materials/acrylic-ivory-gloss/roughness.ktx2"
8874
- },
8808
+ fallbackColor: "#fff5e3",
8875
8809
  category: "solid",
8876
- surfaceTexture: "smooth",
8810
+ surfaceTexture: "soft-matte",
8877
8811
  textureRepeat: { u: 1, v: 1 },
8878
- sourceRef: "ZA53HG",
8879
- thumbnail: "materials/acrylic-ivory-gloss/thumbnail.jpg",
8880
- substrate: "acrylic"
8812
+ sourceRef: "PH161-SM",
8813
+ thumbnail: "materials/mel-ph161-sm/thumbnail.jpg",
8814
+ substrate: "melamine"
8881
8815
  },
8882
- "acrylic-light-grey-gloss": {
8883
- id: "acrylic-light-grey-gloss",
8884
- label: "Light Grey Gloss",
8816
+ "mel-ph162-sm": {
8817
+ id: "mel-ph162-sm",
8818
+ label: "\u05D0\u05E4\u05D5\u05E8 \u05DB\u05D4\u05D4",
8885
8819
  priceMultiplier: 1,
8886
- fallbackColor: "#afafaf",
8887
- textureSet: {
8888
- baseColor: "materials/acrylic-light-grey-gloss/baseColor.ktx2",
8889
- normal: "materials/acrylic-light-grey-gloss/normal.ktx2",
8890
- roughness: "materials/acrylic-light-grey-gloss/roughness.ktx2"
8891
- },
8820
+ fallbackColor: "#2f2b2c",
8892
8821
  category: "solid",
8893
- surfaceTexture: "smooth",
8822
+ surfaceTexture: "soft-matte",
8894
8823
  textureRepeat: { u: 1, v: 1 },
8895
- sourceRef: "ZA16HG",
8896
- thumbnail: "materials/acrylic-light-grey-gloss/thumbnail.jpg",
8897
- substrate: "acrylic"
8824
+ sourceRef: "PH162-SM",
8825
+ thumbnail: "materials/mel-ph162-sm/thumbnail.jpg",
8826
+ substrate: "melamine"
8898
8827
  },
8899
- "acrylic-cream-gloss": {
8900
- id: "acrylic-cream-gloss",
8901
- label: "Cream Gloss",
8828
+ "mel-ph163-sm": {
8829
+ id: "mel-ph163-sm",
8830
+ label: "\u05D2\u05E8\u05D9\u05D9\u05D6\u05F3",
8902
8831
  priceMultiplier: 1,
8903
- fallbackColor: "#f0e8d0",
8904
- textureSet: {
8905
- baseColor: "materials/acrylic-cream-gloss/baseColor.ktx2",
8906
- normal: "materials/acrylic-cream-gloss/normal.ktx2",
8907
- roughness: "materials/acrylic-cream-gloss/roughness.ktx2"
8908
- },
8832
+ fallbackColor: "#cec6b6",
8909
8833
  category: "solid",
8910
- surfaceTexture: "smooth",
8834
+ surfaceTexture: "soft-matte",
8911
8835
  textureRepeat: { u: 1, v: 1 },
8912
- sourceRef: "ZA13HG",
8913
- thumbnail: "materials/acrylic-cream-gloss/thumbnail.jpg",
8914
- substrate: "acrylic"
8836
+ sourceRef: "PH163-SM",
8837
+ thumbnail: "materials/mel-ph163-sm/thumbnail.jpg",
8838
+ substrate: "melamine"
8915
8839
  },
8916
- "acrylic-off-white-gloss": {
8917
- id: "acrylic-off-white-gloss",
8918
- label: "Off-White Gloss",
8840
+ "mel-ph164-sm": {
8841
+ id: "mel-ph164-sm",
8842
+ label: "\u05D7\u05D5\u05DD \u05D0\u05D3\u05DE\u05D4",
8919
8843
  priceMultiplier: 1,
8920
- fallbackColor: "#f5f0e8",
8921
- textureSet: {
8922
- baseColor: "materials/acrylic-off-white-gloss/baseColor.ktx2",
8923
- normal: "materials/acrylic-off-white-gloss/normal.ktx2",
8924
- roughness: "materials/acrylic-off-white-gloss/roughness.ktx2"
8925
- },
8844
+ fallbackColor: "#604440",
8926
8845
  category: "solid",
8927
- surfaceTexture: "smooth",
8846
+ surfaceTexture: "soft-matte",
8928
8847
  textureRepeat: { u: 1, v: 1 },
8929
- sourceRef: "ZA52HG",
8930
- thumbnail: "materials/acrylic-off-white-gloss/thumbnail.jpg",
8931
- substrate: "acrylic"
8848
+ sourceRef: "PH164-SM",
8849
+ thumbnail: "materials/mel-ph164-sm/thumbnail.jpg",
8850
+ substrate: "melamine"
8932
8851
  },
8933
- "acrylic-sahara-gloss": {
8934
- id: "acrylic-sahara-gloss",
8935
- label: "Sahara Gloss",
8852
+ "mel-ph165-sm": {
8853
+ id: "mel-ph165-sm",
8854
+ label: "\u05D0\u05E4\u05E8\u05E4\u05E8",
8936
8855
  priceMultiplier: 1,
8937
- fallbackColor: "#c4a882",
8938
- textureSet: {
8939
- baseColor: "materials/acrylic-sahara-gloss/baseColor.ktx2",
8940
- normal: "materials/acrylic-sahara-gloss/normal.ktx2",
8941
- roughness: "materials/acrylic-sahara-gloss/roughness.ktx2"
8942
- },
8856
+ fallbackColor: "#848889",
8943
8857
  category: "solid",
8944
- surfaceTexture: "smooth",
8858
+ surfaceTexture: "soft-matte",
8945
8859
  textureRepeat: { u: 1, v: 1 },
8946
- sourceRef: "ZA15HG",
8947
- thumbnail: "materials/acrylic-sahara-gloss/thumbnail.jpg",
8948
- substrate: "acrylic"
8860
+ sourceRef: "PH165-SM",
8861
+ thumbnail: "materials/mel-ph165-sm/thumbnail.jpg",
8862
+ substrate: "melamine"
8949
8863
  },
8950
- "acrylic-mocha-gloss": {
8951
- id: "acrylic-mocha-gloss",
8952
- label: "Mocha Gloss",
8864
+ "mel-ph166-sm": {
8865
+ id: "mel-ph166-sm",
8866
+ label: "\u05DB\u05D7\u05D5\u05DC \u05D0\u05D9\u05E0\u05D3\u05D9\u05D2\u05D5",
8953
8867
  priceMultiplier: 1,
8954
- fallbackColor: "#8b6b4e",
8955
- textureSet: {
8956
- baseColor: "materials/acrylic-mocha-gloss/baseColor.ktx2",
8957
- normal: "materials/acrylic-mocha-gloss/normal.ktx2",
8958
- roughness: "materials/acrylic-mocha-gloss/roughness.ktx2"
8959
- },
8868
+ fallbackColor: "#333645",
8960
8869
  category: "solid",
8961
- surfaceTexture: "smooth",
8870
+ surfaceTexture: "soft-matte",
8962
8871
  textureRepeat: { u: 1, v: 1 },
8963
- sourceRef: "ZA14HG",
8964
- thumbnail: "materials/acrylic-mocha-gloss/thumbnail.jpg",
8965
- substrate: "acrylic"
8872
+ sourceRef: "PH166-SM",
8873
+ thumbnail: "materials/mel-ph166-sm/thumbnail.jpg",
8874
+ substrate: "melamine"
8966
8875
  },
8967
- "acrylic-antique-blue-gloss": {
8968
- id: "acrylic-antique-blue-gloss",
8969
- label: "Antique Blue Gloss",
8876
+ "mel-ph167-sm": {
8877
+ id: "mel-ph167-sm",
8878
+ label: "\u05E7\u05E4\u05D4 \u05D0\u05D5-\u05DC\u05D4",
8970
8879
  priceMultiplier: 1,
8971
- fallbackColor: "#5b7b8b",
8972
- textureSet: {
8973
- baseColor: "materials/acrylic-antique-blue-gloss/baseColor.ktx2",
8974
- normal: "materials/acrylic-antique-blue-gloss/normal.ktx2",
8975
- roughness: "materials/acrylic-antique-blue-gloss/roughness.ktx2"
8976
- },
8880
+ fallbackColor: "#cac1a2",
8977
8881
  category: "solid",
8978
- surfaceTexture: "smooth",
8882
+ surfaceTexture: "soft-matte",
8979
8883
  textureRepeat: { u: 1, v: 1 },
8980
- sourceRef: "ZA20HG",
8981
- thumbnail: "materials/acrylic-antique-blue-gloss/thumbnail.jpg",
8982
- substrate: "acrylic"
8884
+ sourceRef: "PH167-SM",
8885
+ thumbnail: "materials/mel-ph167-sm/thumbnail.jpg",
8886
+ substrate: "melamine"
8983
8887
  },
8984
- "acrylic-dark-grey-gloss": {
8985
- id: "acrylic-dark-grey-gloss",
8986
- label: "Dark Grey Gloss",
8888
+ "mel-ph168-sm": {
8889
+ id: "mel-ph168-sm",
8890
+ label: "\u05D9\u05E8\u05D5\u05E7 \u05D9\u05E2\u05E8",
8987
8891
  priceMultiplier: 1,
8988
- fallbackColor: "#6b6b6b",
8989
- textureSet: {
8990
- baseColor: "materials/acrylic-dark-grey-gloss/baseColor.ktx2",
8991
- normal: "materials/acrylic-dark-grey-gloss/normal.ktx2",
8992
- roughness: "materials/acrylic-dark-grey-gloss/roughness.ktx2"
8993
- },
8892
+ fallbackColor: "#3e453d",
8994
8893
  category: "solid",
8995
- surfaceTexture: "smooth",
8894
+ surfaceTexture: "soft-matte",
8996
8895
  textureRepeat: { u: 1, v: 1 },
8997
- sourceRef: "ZA18HG",
8998
- thumbnail: "materials/acrylic-dark-grey-gloss/thumbnail.jpg",
8999
- substrate: "acrylic"
8896
+ sourceRef: "PH168-SM",
8897
+ thumbnail: "materials/mel-ph168-sm/thumbnail.jpg",
8898
+ substrate: "melamine"
9000
8899
  },
9001
- "acrylic-khaki-grey-gloss": {
9002
- id: "acrylic-khaki-grey-gloss",
9003
- label: "Khaki Grey Gloss",
8900
+ "mel-ph169-sm": {
8901
+ id: "mel-ph169-sm",
8902
+ label: "\u05D0\u05E4\u05D5\u05E8 \u05DE\u05E2\u05D5\u05E9\u05DF",
9004
8903
  priceMultiplier: 1,
9005
- fallbackColor: "#8b8b7a",
9006
- textureSet: {
9007
- baseColor: "materials/acrylic-khaki-grey-gloss/baseColor.ktx2",
9008
- normal: "materials/acrylic-khaki-grey-gloss/normal.ktx2",
9009
- roughness: "materials/acrylic-khaki-grey-gloss/roughness.ktx2"
9010
- },
8904
+ fallbackColor: "#55565a",
9011
8905
  category: "solid",
9012
- surfaceTexture: "smooth",
8906
+ surfaceTexture: "soft-matte",
9013
8907
  textureRepeat: { u: 1, v: 1 },
9014
- sourceRef: "ZA17HG",
9015
- thumbnail: "materials/acrylic-khaki-grey-gloss/thumbnail.jpg",
9016
- substrate: "acrylic"
8908
+ sourceRef: "PH169-SM",
8909
+ thumbnail: "materials/mel-ph169-sm/thumbnail.jpg",
8910
+ substrate: "melamine"
9017
8911
  },
9018
- // ─── Acrylic Fantasy — metallic (Bluran/SENOSAN, מניפה 40) ──────────
9019
- "acrylic-metallic-grey": {
9020
- id: "acrylic-metallic-grey",
9021
- label: "Metallic Grey",
8912
+ "mel-ph170-sm": {
8913
+ id: "mel-ph170-sm",
8914
+ label: "\u05D0\u05E4\u05D5\u05E8 \u05D7\u05D0\u05E7\u05D9",
9022
8915
  priceMultiplier: 1,
9023
- fallbackColor: "#8b8b8b",
9024
- textureSet: {
9025
- baseColor: "materials/acrylic-metallic-grey/baseColor.ktx2",
9026
- normal: "materials/acrylic-metallic-grey/normal.ktx2",
9027
- roughness: "materials/acrylic-metallic-grey/roughness.ktx2"
9028
- },
8916
+ fallbackColor: "#696357",
9029
8917
  category: "solid",
9030
- surfaceTexture: "smooth",
8918
+ surfaceTexture: "soft-matte",
9031
8919
  textureRepeat: { u: 1, v: 1 },
9032
- sourceRef: "ZA78SM",
9033
- thumbnail: "materials/acrylic-metallic-grey/thumbnail.jpg",
9034
- substrate: "acrylic"
8920
+ sourceRef: "PH170-SM",
8921
+ thumbnail: "materials/mel-ph170-sm/thumbnail.jpg",
8922
+ substrate: "melamine"
9035
8923
  },
9036
- "acrylic-bronze": {
9037
- id: "acrylic-bronze",
9038
- label: "Bronze",
8924
+ "mel-ph171-sm": {
8925
+ id: "mel-ph171-sm",
8926
+ label: "\u05E1\u05D4\u05E8\u05D4",
9039
8927
  priceMultiplier: 1,
9040
- fallbackColor: "#8b6b3a",
9041
- textureSet: {
9042
- baseColor: "materials/acrylic-bronze/baseColor.ktx2",
9043
- normal: "materials/acrylic-bronze/normal.ktx2",
9044
- roughness: "materials/acrylic-bronze/roughness.ktx2"
9045
- },
8928
+ fallbackColor: "#c9bdaf",
9046
8929
  category: "solid",
9047
- surfaceTexture: "smooth",
8930
+ surfaceTexture: "soft-matte",
9048
8931
  textureRepeat: { u: 1, v: 1 },
9049
- sourceRef: "ZA84SM",
9050
- thumbnail: "materials/acrylic-bronze/thumbnail.jpg",
9051
- substrate: "acrylic"
8932
+ sourceRef: "PH171-SM",
8933
+ thumbnail: "materials/mel-ph171-sm/thumbnail.jpg",
8934
+ substrate: "melamine"
9052
8935
  },
9053
- "acrylic-metallic-silver": {
9054
- id: "acrylic-metallic-silver",
9055
- label: "Metallic Silver",
8936
+ "mel-ph172-sm": {
8937
+ id: "mel-ph172-sm",
8938
+ label: "\u05D8\u05D5\u05E8\u05E7\u05D9\u05D6",
9056
8939
  priceMultiplier: 1,
9057
- fallbackColor: "#c0c0c0",
9058
- textureSet: {
9059
- baseColor: "materials/acrylic-metallic-silver/baseColor.ktx2",
9060
- normal: "materials/acrylic-metallic-silver/normal.ktx2",
9061
- roughness: "materials/acrylic-metallic-silver/roughness.ktx2"
9062
- },
8940
+ fallbackColor: "#cad3d0",
9063
8941
  category: "solid",
9064
- surfaceTexture: "smooth",
8942
+ surfaceTexture: "soft-matte",
9065
8943
  textureRepeat: { u: 1, v: 1 },
9066
- sourceRef: "ZA27HG",
9067
- thumbnail: "materials/acrylic-metallic-silver/thumbnail.jpg",
9068
- substrate: "acrylic"
8944
+ sourceRef: "PH172-SM",
8945
+ thumbnail: "materials/mel-ph172-sm/thumbnail.jpg",
8946
+ substrate: "melamine"
9069
8947
  },
9070
- "acrylic-metallic-white": {
9071
- id: "acrylic-metallic-white",
9072
- label: "Metallic White",
8948
+ "mel-ah07-tap": {
8949
+ id: "mel-ah07-tap",
8950
+ label: "\u05D0\u05E4\u05D5\u05E8",
9073
8951
  priceMultiplier: 1,
9074
- fallbackColor: "#f0f0f0",
9075
- textureSet: {
9076
- baseColor: "materials/acrylic-metallic-white/baseColor.ktx2",
9077
- normal: "materials/acrylic-metallic-white/normal.ktx2",
9078
- roughness: "materials/acrylic-metallic-white/roughness.ktx2"
9079
- },
8952
+ fallbackColor: "#e0dcd9",
9080
8953
  category: "solid",
9081
- surfaceTexture: "smooth",
8954
+ surfaceTexture: "soft-matte",
9082
8955
  textureRepeat: { u: 1, v: 1 },
9083
- sourceRef: "ZA25HG",
9084
- thumbnail: "materials/acrylic-metallic-white/thumbnail.jpg",
9085
- substrate: "acrylic"
8956
+ sourceRef: "AH07-TAP",
8957
+ thumbnail: "materials/mel-ah07-tap/thumbnail.jpg",
8958
+ substrate: "melamine"
9086
8959
  },
9087
- "acrylic-champagne-silk": {
9088
- id: "acrylic-champagne-silk",
9089
- label: "Champagne Silk",
8960
+ "mel-ah04-tap": {
8961
+ id: "mel-ah04-tap",
8962
+ label: "\u05D1\u05D6\u05F3",
9090
8963
  priceMultiplier: 1,
9091
- fallbackColor: "#c8b89a",
9092
- textureSet: {
9093
- baseColor: "materials/acrylic-champagne-silk/baseColor.ktx2",
9094
- normal: "materials/acrylic-champagne-silk/normal.ktx2",
9095
- roughness: "materials/acrylic-champagne-silk/roughness.ktx2"
9096
- },
8964
+ fallbackColor: "#d8d0cb",
9097
8965
  category: "solid",
9098
- surfaceTexture: "smooth",
8966
+ surfaceTexture: "soft-matte",
9099
8967
  textureRepeat: { u: 1, v: 1 },
9100
- sourceRef: "ZA10SM",
9101
- thumbnail: "materials/acrylic-champagne-silk/thumbnail.jpg",
9102
- substrate: "acrylic"
8968
+ sourceRef: "AH04-TAP",
8969
+ thumbnail: "materials/mel-ah04-tap/thumbnail.jpg",
8970
+ substrate: "melamine"
9103
8971
  },
9104
- "acrylic-peach-gold": {
9105
- id: "acrylic-peach-gold",
9106
- label: "Peach Gold",
8972
+ "mel-ah01-tap": {
8973
+ id: "mel-ah01-tap",
8974
+ label: "\u05D2\u05E8\u05E4\u05D9\u05D8",
9107
8975
  priceMultiplier: 1,
9108
- fallbackColor: "#d4a878",
9109
- textureSet: {
9110
- baseColor: "materials/acrylic-peach-gold/baseColor.ktx2",
9111
- normal: "materials/acrylic-peach-gold/normal.ktx2",
9112
- roughness: "materials/acrylic-peach-gold/roughness.ktx2"
9113
- },
8976
+ fallbackColor: "#57585a",
9114
8977
  category: "solid",
9115
- surfaceTexture: "smooth",
8978
+ surfaceTexture: "soft-matte",
9116
8979
  textureRepeat: { u: 1, v: 1 },
9117
- sourceRef: "ZA83SM",
9118
- thumbnail: "materials/acrylic-peach-gold/thumbnail.jpg",
9119
- substrate: "acrylic"
8980
+ sourceRef: "AH01-TAP",
8981
+ thumbnail: "materials/mel-ah01-tap/thumbnail.jpg",
8982
+ substrate: "melamine"
9120
8983
  },
9121
- "acrylic-rose-gold": {
9122
- id: "acrylic-rose-gold",
9123
- label: "Rose Gold",
8984
+ "mel-ah05-tap": {
8985
+ id: "mel-ah05-tap",
8986
+ label: "\u05D7\u05D5\u05DC",
9124
8987
  priceMultiplier: 1,
9125
- fallbackColor: "#c8a090",
9126
- textureSet: {
9127
- baseColor: "materials/acrylic-rose-gold/baseColor.ktx2",
9128
- normal: "materials/acrylic-rose-gold/normal.ktx2",
9129
- roughness: "materials/acrylic-rose-gold/roughness.ktx2"
9130
- },
8988
+ fallbackColor: "#e5ddd6",
9131
8989
  category: "solid",
9132
- surfaceTexture: "smooth",
8990
+ surfaceTexture: "soft-matte",
9133
8991
  textureRepeat: { u: 1, v: 1 },
9134
- sourceRef: "ZA82SM",
9135
- thumbnail: "materials/acrylic-rose-gold/thumbnail.jpg",
9136
- substrate: "acrylic"
8992
+ sourceRef: "AH05-TAP",
8993
+ thumbnail: "materials/mel-ah05-tap/thumbnail.jpg",
8994
+ substrate: "melamine"
9137
8995
  },
9138
- "acrylic-metallic-champagne": {
9139
- id: "acrylic-metallic-champagne",
9140
- label: "Metallic Champagne",
8996
+ "mel-ah06-tap": {
8997
+ id: "mel-ah06-tap",
8998
+ label: "\u05DC\u05D1\u05DF",
9141
8999
  priceMultiplier: 1,
9142
- fallbackColor: "#c0a878",
9143
- textureSet: {
9144
- baseColor: "materials/acrylic-metallic-champagne/baseColor.ktx2",
9145
- normal: "materials/acrylic-metallic-champagne/normal.ktx2",
9146
- roughness: "materials/acrylic-metallic-champagne/roughness.ktx2"
9147
- },
9000
+ fallbackColor: "#f8f9fc",
9148
9001
  category: "solid",
9149
- surfaceTexture: "smooth",
9002
+ surfaceTexture: "soft-matte",
9150
9003
  textureRepeat: { u: 1, v: 1 },
9151
- sourceRef: "ZA26HG",
9152
- thumbnail: "materials/acrylic-metallic-champagne/thumbnail.jpg",
9153
- substrate: "acrylic"
9004
+ sourceRef: "AH06-TAP",
9005
+ thumbnail: "materials/mel-ah06-tap/thumbnail.jpg",
9006
+ substrate: "melamine"
9154
9007
  }
9008
+ // </generated:exterior-materials>
9155
9009
  };
9156
9010
 
9157
9011
  // ../../packages/shared/src/surfaceTextures.ts
@@ -9223,40 +9077,80 @@ var MATERIAL_LABELS_HE = {
9223
9077
  // Interior-only melamine (legacy)
9224
9078
  "white-melamine": "\u05DE\u05DC\u05DE\u05D9\u05DF \u05DC\u05D1\u05DF",
9225
9079
  "oak-veneer": "\u05E4\u05D5\u05E8\u05E0\u05D9\u05E8 \u05D0\u05DC\u05D5\u05DF",
9226
- "walnut-veneer": "\u05E4\u05D5\u05E8\u05E0\u05D9\u05E8 \u05D0\u05D2\u05D5\u05D6",
9227
- // Melamine — Portalline collection
9228
- "ml-soho-natural": "\u05E1\u05D5\u05D4\u05D5 \u05D8\u05D1\u05E2\u05D9",
9229
- "ml-soho-brown": "\u05E1\u05D5\u05D4\u05D5 \u05D7\u05D5\u05DD",
9230
- "ml-soho-grey": "\u05E1\u05D5\u05D4\u05D5 \u05D0\u05E4\u05D5\u05E8",
9231
- "ml-amazon-ash-bleached": "\u05D0\u05DE\u05D6\u05D5\u05DF \u05D0\u05E9 \u05DE\u05D5\u05DC\u05D1\u05DF",
9232
- "ml-amazon-ash-brown": "\u05D0\u05DE\u05D6\u05D5\u05DF \u05D0\u05E9 \u05D7\u05D5\u05DD",
9233
- "ml-amazon-ash-chestnut": "\u05D0\u05DE\u05D6\u05D5\u05DF \u05D0\u05E9 \u05E2\u05E8\u05DE\u05D5\u05DF",
9234
- "ml-amazon-ash-grey": "\u05D0\u05DE\u05D6\u05D5\u05DF \u05D0\u05E9 \u05D0\u05E4\u05D5\u05E8",
9235
- "ml-amazon-ash-taupe": "\u05D0\u05DE\u05D6\u05D5\u05DF \u05D0\u05E9 \u05D8\u05D0\u05D5\u05E4",
9236
- "ml-saqqara-bleached": "\u05E1\u05E7\u05E8\u05D4 \u05DE\u05D5\u05DC\u05D1\u05DF",
9237
- "ml-saqqara-natural": "\u05E1\u05E7\u05E8\u05D4 \u05D8\u05D1\u05E2\u05D9",
9238
- "ml-saqqara-red": "\u05E1\u05E7\u05E8\u05D4 \u05D0\u05D3\u05D5\u05DD",
9239
- "ml-saqqara-light-brown": "\u05E1\u05E7\u05E8\u05D4 \u05D7\u05D5\u05DD \u05D1\u05D4\u05D9\u05E8",
9240
- "ml-saqqara-chestnut": "\u05E1\u05E7\u05E8\u05D4 \u05E2\u05E8\u05DE\u05D5\u05DF",
9241
- "kl-oak-natural": "\u05D0\u05DC\u05D5\u05DF \u05D8\u05D1\u05E2\u05D9",
9242
- "kl-oak-split-natural": "\u05D0\u05DC\u05D5\u05DF \u05E1\u05E4\u05DC\u05D9\u05D8 \u05D8\u05D1\u05E2\u05D9",
9243
- "kl-oak-split-smoked": "\u05D0\u05DC\u05D5\u05DF \u05E1\u05E4\u05DC\u05D9\u05D8 \u05DE\u05E2\u05D5\u05E9\u05DF",
9244
- "kl-oak-cognac": "\u05D0\u05DC\u05D5\u05DF \u05E7\u05D5\u05E0\u05D9\u05D0\u05E7",
9245
- "kl-oak-trunk": "\u05D0\u05DC\u05D5\u05DF \u05D2\u05D6\u05E2",
9246
- "kl-oak-light": "\u05D0\u05DC\u05D5\u05DF \u05D1\u05D4\u05D9\u05E8",
9247
- "kl-oak-brown": "\u05D0\u05DC\u05D5\u05DF \u05D7\u05D5\u05DD",
9248
- "kl-oak-dark-brown": "\u05D0\u05DC\u05D5\u05DF \u05D7\u05D5\u05DD \u05DB\u05D4\u05D4",
9249
- "kl-oak-greyish": "\u05D0\u05DC\u05D5\u05DF \u05D0\u05E4\u05E8\u05E4\u05E8",
9250
- "kl-vinto-cortina": "\u05D5\u05D9\u05E0\u05D8\u05D5 \u05E7\u05D5\u05E8\u05D8\u05D9\u05E0\u05D4",
9251
- "kl-oak-bronze": "\u05D0\u05DC\u05D5\u05DF \u05D1\u05E8\u05D5\u05E0\u05D6\u05D4",
9252
- "kl-oak-platinum": "\u05D0\u05DC\u05D5\u05DF \u05E4\u05DC\u05D8\u05D9\u05E0\u05D4",
9253
- "kl-oak-white": "\u05D0\u05DC\u05D5\u05DF \u05DC\u05D1\u05DF",
9254
- "kl-oak-split": "\u05D0\u05DC\u05D5\u05DF \u05E1\u05E4\u05DC\u05D9\u05D8",
9255
- "kl-teak": "\u05D8\u05D9\u05E7",
9256
- "kl-ash-grey": "\u05D0\u05E4\u05E8 \u05D0\u05E4\u05D5\u05E8",
9257
- "ml-aks-khaki": "\u05D0\u05E7\u05E1 \u05D7\u05D0\u05E7\u05D9",
9258
- "ml-aks-black": "\u05D0\u05E7\u05E1 \u05E9\u05D7\u05D5\u05E8",
9259
- "ml-aks-white": "\u05D0\u05E7\u05E1 \u05DC\u05D1\u05DF"
9080
+ "walnut-veneer": "\u05E4\u05D5\u05E8\u05E0\u05D9\u05E8 \u05D0\u05D2\u05D5\u05D6"
9081
+ };
9082
+ var MATERIAL_LABELS_EN = {
9083
+ // <generated:interior-labels-en>
9084
+ "interior-ph158-sm": "Pearl White",
9085
+ "interior-ph159-sm": "Light Grey",
9086
+ "interior-ph163-sm": "Greige",
9087
+ "interior-kh62-dt": "Warm Oak Mix",
9088
+ // </generated:interior-labels-en>
9089
+ "interior-eco-white": "Eco White",
9090
+ "interior-champagne": "Champagne",
9091
+ "interior-bright-grey": "Bright Grey",
9092
+ "interior-oak-natue": "Oak Natue",
9093
+ // <generated:material-labels-en>
9094
+ "acrylic-za35-sm": "Greige",
9095
+ "acrylic-za71-sm": "Light Grey",
9096
+ "acrylic-za05-sm": "Khaki Grey",
9097
+ "acrylic-za72-sm": "Dark Grey",
9098
+ "acrylic-za310-sm": "Smoky Grey",
9099
+ "acrylic-za07-sm": "Greyish",
9100
+ "acrylic-za85-sm": "Earth Brown",
9101
+ "acrylic-za86-sm": "Forest Green",
9102
+ "acrylic-za70-sm": "Antique Green",
9103
+ "acrylic-za08-sm": "Indigo Blue",
9104
+ "acrylic-za69-sm": "Antique Blue",
9105
+ "acrylic-za06-sm": "White",
9106
+ "acrylic-za301-sm": "Pearl White",
9107
+ "acrylic-za03-sm": "Mocha",
9108
+ "acrylic-za04-sm": "Sahara",
9109
+ "acrylic-za38-sm": "Coffee",
9110
+ "acrylic-za300-sm": "Dark Black",
9111
+ "acrylic-za02-sm": "Ivory",
9112
+ "acrylic-za36-sm": "Sand",
9113
+ "acrylic-za39-sm": "River Pebble",
9114
+ "acrylic-za37-sm": "Clay",
9115
+ "mel-kl67-nt": "Light Honey Oak Mix",
9116
+ "mel-kh69-dt": "Dark Walnut Wild Stripe",
9117
+ "mel-kh63-dt": "Nutty Oak Mix",
9118
+ "mel-kh61-dt": "Light Oak Mix",
9119
+ "mel-kh14-dt": "Oak Trunk",
9120
+ "mel-kh68-dt": "Reddish Brown Oak Mix",
9121
+ "mel-kh62-dt": "Warm Oak Mix",
9122
+ "mel-kh31-dt": "Oak Split Natural",
9123
+ "mel-kh32-dt": "Oak Natural Mix",
9124
+ "mel-kh65-dt": "Tartufo Oak Mix",
9125
+ "mel-kh66-dt": "Dark Oak Mix",
9126
+ "mel-kh74-dt": "Truffle Oak Mix",
9127
+ "mel-kh37-dt": "Rustic Split Oak",
9128
+ "mel-kh30-dt": "Oak Split Smoked",
9129
+ "mel-kh64-dt": "Smoked Oak Mix",
9130
+ "mel-kh15-dt": "Oak Cognac Trunk",
9131
+ "mel-kh75-dt": "Shiitake Oak Mix",
9132
+ "mel-kh33-dt": "Ash Grey",
9133
+ "mel-ph158-sm": "Pearl White",
9134
+ "mel-ph159-sm": "Light Grey",
9135
+ "mel-ph160-sm": "Greyish White",
9136
+ "mel-ph161-sm": "Ivory",
9137
+ "mel-ph162-sm": "Dark Grey",
9138
+ "mel-ph163-sm": "Greige",
9139
+ "mel-ph164-sm": "Earth Brown",
9140
+ "mel-ph165-sm": "Greyish",
9141
+ "mel-ph166-sm": "Indigo Blue",
9142
+ "mel-ph167-sm": "Caf\xE9 au Lait",
9143
+ "mel-ph168-sm": "Forest Green",
9144
+ "mel-ph169-sm": "Smoky Grey",
9145
+ "mel-ph170-sm": "Khaki Grey",
9146
+ "mel-ph171-sm": "Sahara",
9147
+ "mel-ph172-sm": "Turquoise",
9148
+ "mel-ah07-tap": "Grey",
9149
+ "mel-ah04-tap": "Beige",
9150
+ "mel-ah01-tap": "Graphite",
9151
+ "mel-ah05-tap": "Sand",
9152
+ "mel-ah06-tap": "White"
9153
+ // </generated:material-labels-en>
9260
9154
  };
9261
9155
  function describeWardrobe(config, locale = "en") {
9262
9156
  if (locale === "he") return describeWardrobeHe(config);
@@ -9265,12 +9159,16 @@ function describeWardrobe(config, locale = "en") {
9265
9159
  lines.push(`${posLabel} wardrobe, ${config.width} \xD7 ${config.height} \xD7 ${config.depth} cm`);
9266
9160
  const intId = config.materialInternal ?? config.material;
9267
9161
  const extId = config.materialExternal ?? config.material;
9268
- const intLabel = MATERIALS[intId].label;
9269
- const extLabel = MATERIALS[extId].label;
9162
+ const intLabel = MATERIAL_LABELS_EN[intId] ?? MATERIALS[intId].label;
9163
+ const extLabel = MATERIAL_LABELS_EN[extId] ?? MATERIALS[extId].label;
9164
+ const intCode = MATERIALS[intId]?.sourceRef;
9165
+ const intText = intCode ? `${intLabel} (${intCode})` : intLabel;
9166
+ const extCode = MATERIALS[extId]?.sourceRef;
9167
+ const extText = extCode ? `${extLabel} (${extCode})` : extLabel;
9270
9168
  if (intId === extId) {
9271
- lines.push(`Material: ${intLabel}`);
9169
+ lines.push(`Material: ${intText}`);
9272
9170
  } else {
9273
- lines.push(`Material: ${intLabel} (interior) / ${extLabel} (exterior)`);
9171
+ lines.push(`Material: ${intText} (interior) / ${extText} (exterior)`);
9274
9172
  }
9275
9173
  const colWidths = config.columns.map((c) => `${c.width}`).join(" + ");
9276
9174
  lines.push(
@@ -9304,10 +9202,14 @@ function describeWardrobeHe(config) {
9304
9202
  const extId = config.materialExternal ?? config.material;
9305
9203
  const intLabel = MATERIAL_LABELS_HE[intId] ?? MATERIALS[intId].label;
9306
9204
  const extLabel = MATERIAL_LABELS_HE[extId] ?? MATERIALS[extId].label;
9205
+ const intCode = MATERIALS[intId]?.sourceRef;
9206
+ const intText = intCode ? `${intLabel} (${intCode})` : intLabel;
9207
+ const extCode = MATERIALS[extId]?.sourceRef;
9208
+ const extText = extCode ? `${extLabel} (${extCode})` : extLabel;
9307
9209
  if (intId === extId) {
9308
- lines.push(`\u05D7\u05D5\u05DE\u05E8: ${intLabel}`);
9210
+ lines.push(`\u05D7\u05D5\u05DE\u05E8: ${intText}`);
9309
9211
  } else {
9310
- lines.push(`\u05D7\u05D5\u05DE\u05E8: ${intLabel} (\u05E4\u05E0\u05D9\u05DD) / ${extLabel} (\u05D7\u05D5\u05E5)`);
9212
+ lines.push(`\u05D7\u05D5\u05DE\u05E8: ${intText} (\u05E4\u05E0\u05D9\u05DD) / ${extText} (\u05D7\u05D5\u05E5)`);
9311
9213
  }
9312
9214
  const colWidths = config.columns.map((c) => `${c.width}`).join(" + ");
9313
9215
  const colWord = config.columns.length === 1 ? "\u05E2\u05DE\u05D5\u05D3\u05D4" : "\u05E2\u05DE\u05D5\u05D3\u05D5\u05EA";
@@ -9414,8 +9316,8 @@ init_esm_shims();
9414
9316
 
9415
9317
  // ../../packages/shared/src/shelfSpacing.ts
9416
9318
  init_esm_shims();
9417
- var SHELF_THICKNESS_CM = 2.8;
9418
- var FIXED_SHELF_GAPS_CM = [37.4, 34.2, 34.2];
9319
+ var SHELF_THICKNESS_CM = 2.5;
9320
+ var FIXED_SHELF_GAPS_CM = [37.4, 34.5, 34.5];
9419
9321
  var UPPER_COMPARTMENT_BRACKETS = [
9420
9322
  { maxHeightCm: 170, compartments: 1 },
9421
9323
  // 1241 < h ≤ 1700
@@ -9486,6 +9388,14 @@ init_esm_shims();
9486
9388
 
9487
9389
  // ../../packages/shared/src/manufacturingBom/splitToLimits.ts
9488
9390
  init_esm_shims();
9391
+ var MIN_SEGMENT_MM = 150;
9392
+
9393
+ // ../../packages/shared/src/manufacturingBom/translateV2.ts
9394
+ var CUT_LABEL = {
9395
+ "column-height": "cut at column height",
9396
+ "max-length": "cut at material max length",
9397
+ "min-segment": `cut to keep the small section at ${MIN_SEGMENT_MM}mm`
9398
+ };
9489
9399
 
9490
9400
  // ../../packages/shared/src/manufacturingBom/handleLookup.ts
9491
9401
  init_esm_shims();
@@ -9493,6 +9403,9 @@ init_esm_shims();
9493
9403
  // ../../packages/shared/src/permissions.ts
9494
9404
  init_esm_shims();
9495
9405
 
9406
+ // ../../packages/shared/src/legal.ts
9407
+ init_esm_shims();
9408
+
9496
9409
  // ../../packages/shared/src/orderWorkflow.ts
9497
9410
  init_esm_shims();
9498
9411
  var ORDER_STATUSES = [
@@ -9566,6 +9479,22 @@ var ORDER_EMAIL_EVENTS = [
9566
9479
  ];
9567
9480
  var ALL_ORDER_EMAIL_EVENTS = ORDER_EMAIL_EVENTS.map((e) => e.event);
9568
9481
 
9482
+ // ../../packages/shared/src/customerEmails.ts
9483
+ init_esm_shims();
9484
+ var CUSTOMER_EMAILS = [
9485
+ { key: "order_confirmed", label: "\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D4\u05D6\u05DE\u05E0\u05D4 \u2014 \u05DE\u05E1\u05DE\u05DA \u05D2\u05D9\u05DC\u05D5\u05D9 \u05E0\u05D0\u05D5\u05EA", step: 1, hasHero: true, hasLineItems: true },
9486
+ { key: "measurement_coordination", label: "\u05EA\u05D9\u05D0\u05D5\u05DD \u05DE\u05D3\u05D9\u05D3\u05D4", step: 2, hasHero: false, hasLineItems: false },
9487
+ { key: "entering_production", label: "\u05D4\u05D0\u05E8\u05D5\u05DF \u05E0\u05DB\u05E0\u05E1 \u05DC\u05D9\u05D9\u05E6\u05D5\u05E8", step: 3, hasHero: false, hasLineItems: false },
9488
+ { key: "production_complete", label: "\u05E1\u05D9\u05D5\u05DD \u05D9\u05D9\u05E6\u05D5\u05E8", step: 4, hasHero: false, hasLineItems: false },
9489
+ { key: "installation_scheduled", label: "\u05EA\u05D9\u05D0\u05D5\u05DD \u05D5\u05D4\u05EA\u05E7\u05E0\u05D4", step: 5, hasHero: false, hasLineItems: false },
9490
+ { key: "installation_complete", label: "\u05DC\u05D0\u05D7\u05E8 \u05D4\u05EA\u05E7\u05E0\u05D4", step: 5, hasHero: true, hasLineItems: false },
9491
+ { key: "appointment_changed", label: "\u05E9\u05D9\u05E0\u05D5\u05D9 \u05DE\u05D5\u05E2\u05D3", step: null, hasHero: false, hasLineItems: false },
9492
+ { key: "order_revised", label: "\u05E2\u05D3\u05DB\u05D5\u05DF \u05D4\u05D6\u05DE\u05E0\u05D4", step: null, hasHero: false, hasLineItems: true }
9493
+ ];
9494
+ var CUSTOMER_EMAIL_BY_KEY = Object.fromEntries(
9495
+ CUSTOMER_EMAILS.map((d) => [d.key, d])
9496
+ );
9497
+
9569
9498
  // ../../packages/shared/src/manufacturingBom/index.ts
9570
9499
  init_esm_shims();
9571
9500
 
@@ -9627,6 +9556,7 @@ var HandleCreateBodySchema = external_exports.object({
9627
9556
  costPrice: external_exports.number().nonnegative().max(1e6).default(0),
9628
9557
  sellPrice: external_exports.number().nonnegative().max(1e6).default(0),
9629
9558
  isPushToOpen: external_exports.boolean().default(false),
9559
+ isNoHandle: external_exports.boolean().default(false),
9630
9560
  isDefault: external_exports.boolean().default(false),
9631
9561
  active: external_exports.boolean().default(true)
9632
9562
  });
@@ -9801,6 +9731,9 @@ init_esm_shims();
9801
9731
  // ../../packages/shared/src/manufacturingBom/materialLimitsLookup.ts
9802
9732
  init_esm_shims();
9803
9733
 
9734
+ // ../../packages/shared/src/manufacturingBom/seams.ts
9735
+ init_esm_shims();
9736
+
9804
9737
  // ../../packages/shared/src/export/index.ts
9805
9738
  init_esm_shims();
9806
9739
 
@@ -10119,9 +10052,11 @@ var columnRules = [
10119
10052
  const depth = getColumnDepthCm(model.source, sourceCol);
10120
10053
  const { min, max } = DIMENSION_LIMITS.bodyDepthCm;
10121
10054
  if (depth < min || depth > max) {
10055
+ const limits = configuredDepthLimitsCm(model.source);
10056
+ const configured = toConfiguredDepthCm(depth, model.source);
10122
10057
  return [{
10123
10058
  path: `columns[${colIdx}]`,
10124
- message: `Column ${colIdx + 1} body depth (${depth}cm) must be between ${min}cm and ${max}cm.`,
10059
+ message: `Column ${colIdx + 1} depth (${configured}cm) must be between ${limits.min}cm and ${limits.max}cm.`,
10125
10060
  severity: "error",
10126
10061
  ruleId: "column-depth-range"
10127
10062
  }];
@@ -10763,7 +10698,7 @@ var PRESET_MAP = new Map(
10763
10698
  function buildDefaultConfig(opts = {}) {
10764
10699
  const width = opts.width ?? 100;
10765
10700
  const height = opts.height ?? 240;
10766
- const depth = opts.depth ?? 60;
10701
+ const depth = opts.depth ?? 62;
10767
10702
  const usableHeight = height - OVERHEAD_CM;
10768
10703
  const columnWidths = deriveColumnLayout(width);
10769
10704
  const columns = columnWidths.map((w) => ({
@@ -10780,7 +10715,7 @@ function buildDefaultConfig(opts = {}) {
10780
10715
  materialInternal: DEFAULT_INTERNAL_MATERIAL_ID,
10781
10716
  materialExternal: DEFAULT_EXTERNAL_MATERIAL_ID,
10782
10717
  columns,
10783
- ruleVersion: RULE_VERSION_FREE_DIMENSIONS
10718
+ ruleVersion: CURRENT_RULE_VERSION
10784
10719
  };
10785
10720
  const result = validateConfig(config);
10786
10721
  return result.correctedConfig ?? config;
@@ -11780,7 +11715,7 @@ To authorize this CLI, visit:
11780
11715
  const body = err instanceof HTTPError ? await err.response.json().catch(() => ({})) : {};
11781
11716
  const error = body.error;
11782
11717
  if (error === "authorization_pending") continue;
11783
- if (error === "slow_down") {
11718
+ if (error === "slow_down" || err instanceof HTTPError && err.response.status === 429) {
11784
11719
  interval += 5;
11785
11720
  continue;
11786
11721
  }
@@ -11795,12 +11730,12 @@ init_esm_shims();
11795
11730
  async function whoami(opts = {}) {
11796
11731
  const client3 = createClient(readConfig()?.accessToken ?? null);
11797
11732
  const me = await client3.get("auth/me").json();
11798
- emit(
11799
- me,
11800
- !!opts.json,
11801
- () => process.stdout.write(`${me.displayName} <${me.email}> (${me.role})
11802
- `)
11803
- );
11733
+ emit(me, !!opts.json, () => {
11734
+ process.stdout.write(`${me.displayName} <${me.email}> \u2014 account role: ${me.role}
11735
+ `);
11736
+ if (me.agent) process.stdout.write(`Agent key scopes: ${me.agent.scopes.join(", ")}
11737
+ `);
11738
+ });
11804
11739
  }
11805
11740
  function logout(opts = {}) {
11806
11741
  clearConfig();
@@ -11903,9 +11838,32 @@ function skillInstall(opts) {
11903
11838
  });
11904
11839
  }
11905
11840
 
11841
+ // src/errors.ts
11842
+ init_esm_shims();
11843
+ async function readErrorBody(err) {
11844
+ if (!(err instanceof HTTPError)) return null;
11845
+ try {
11846
+ return await err.response.json();
11847
+ } catch {
11848
+ return null;
11849
+ }
11850
+ }
11851
+ async function formatCliError(err, json) {
11852
+ const body = await readErrorBody(err);
11853
+ if (json) {
11854
+ return JSON.stringify(body ? { error: body.error ?? "request_failed", ...body } : { error: err.message }, null, 2);
11855
+ }
11856
+ if (!body) return `Error: ${err.message}`;
11857
+ const parts = [body.error ?? "Request failed"];
11858
+ if (body.detail) parts.push(body.detail);
11859
+ if (body.fix_hint) parts.push(`fix: ${body.fix_hint}`);
11860
+ if (body.issues) parts.push(JSON.stringify(body.issues));
11861
+ return `Error: ${parts.join(" \u2014 ")}`;
11862
+ }
11863
+
11906
11864
  // src/version.ts
11907
11865
  init_esm_shims();
11908
- var CLI_VERSION = "1.1.0";
11866
+ var CLI_VERSION = "1.1.2";
11909
11867
 
11910
11868
  // src/index.ts
11911
11869
  program.name("wardrobe").description("Wardrobe configurator CLI").version(CLI_VERSION);
@@ -11946,8 +11904,9 @@ var projects = program.command("projects").description("Manage projects");
11946
11904
  projects.command("list").description("List accessible projects").option("--json", "machine-readable output").action((o) => listProjects(o));
11947
11905
  var skill = program.command("skill").description("Manage the bundled Claude Skill");
11948
11906
  skill.command("install").description("Install the wardrobe-configurator Skill for Claude Code").option("--project", "install into ./.claude/skills instead of ~/.claude/skills").option("--json", "machine-readable output").action((o) => skillInstall(o));
11949
- program.parseAsync().catch((err) => {
11950
- process.stderr.write(`Error: ${err.message}
11907
+ program.parseAsync().catch(async (err) => {
11908
+ const message = await formatCliError(err, process.argv.includes("--json"));
11909
+ process.stderr.write(`${message}
11951
11910
  `);
11952
11911
  process.exit(1);
11953
11912
  });