@heliofi/common 0.2.288 → 0.2.289

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 (51) hide show
  1. package/dist/src/domain/constants/theme.d.ts +2 -0
  2. package/dist/src/domain/constants/theme.js +31 -0
  3. package/dist/src/domain/constants/theme.js.map +1 -1
  4. package/dist/src/domain/model/company/dtos/updateCompany.dto.d.ts +2 -1
  5. package/dist/src/domain/model/company/dtos/updateCompany.dto.js +8 -3
  6. package/dist/src/domain/model/company/dtos/updateCompany.dto.js.map +1 -1
  7. package/dist/src/domain/model/company/entities/BaseCompany.entity.d.ts +1 -0
  8. package/dist/src/domain/model/company/entities/BaseCompany.entity.js.map +1 -1
  9. package/dist/src/domain/model/currency/entities/BlockchainCurrencyFeature.d.ts +2 -1
  10. package/dist/src/domain/model/currency/entities/BlockchainCurrencyFeature.js +1 -0
  11. package/dist/src/domain/model/currency/entities/BlockchainCurrencyFeature.js.map +1 -1
  12. package/dist/src/domain/model/theme/dtos/createTheme.dto.d.ts +8 -0
  13. package/dist/src/domain/model/theme/dtos/createTheme.dto.js +43 -0
  14. package/dist/src/domain/model/theme/dtos/createTheme.dto.js.map +1 -0
  15. package/dist/src/domain/model/theme/dtos/createTheme.dto.spec.d.ts +1 -0
  16. package/dist/src/domain/model/theme/dtos/createTheme.dto.spec.js +42 -0
  17. package/dist/src/domain/model/theme/dtos/createTheme.dto.spec.js.map +1 -0
  18. package/dist/src/domain/model/theme/dtos/{CustomTheme.dto.js → customTheme.dto.js} +1 -1
  19. package/dist/src/domain/model/theme/dtos/{CustomTheme.dto.js.map → customTheme.dto.js.map} +1 -1
  20. package/dist/src/domain/model/theme/dtos/index.d.ts +5 -1
  21. package/dist/src/domain/model/theme/dtos/index.js +5 -1
  22. package/dist/src/domain/model/theme/dtos/index.js.map +1 -1
  23. package/dist/src/domain/model/theme/dtos/themePalette.dto.d.ts +8 -0
  24. package/dist/src/domain/model/theme/dtos/themePalette.dto.js +47 -0
  25. package/dist/src/domain/model/theme/dtos/themePalette.dto.js.map +1 -0
  26. package/dist/src/domain/model/theme/dtos/themeTokens.dto.d.ts +9 -0
  27. package/dist/src/domain/model/theme/dtos/themeTokens.dto.js +63 -0
  28. package/dist/src/domain/model/theme/dtos/themeTokens.dto.js.map +1 -0
  29. package/dist/src/domain/model/theme/dtos/themeTokens.dto.spec.d.ts +1 -0
  30. package/dist/src/domain/model/theme/dtos/themeTokens.dto.spec.js +70 -0
  31. package/dist/src/domain/model/theme/dtos/themeTokens.dto.spec.js.map +1 -0
  32. package/dist/src/domain/model/theme/dtos/updateTheme.dto.d.ts +8 -0
  33. package/dist/src/domain/model/theme/dtos/updateTheme.dto.js +44 -0
  34. package/dist/src/domain/model/theme/dtos/updateTheme.dto.js.map +1 -0
  35. package/dist/src/domain/model/theme/entities/Theme.entity.d.ts +11 -0
  36. package/dist/src/domain/model/theme/entities/Theme.entity.js +8 -0
  37. package/dist/src/domain/model/theme/entities/Theme.entity.js.map +1 -0
  38. package/dist/src/domain/model/theme/entities/ThemePalette.entity.d.ts +8 -0
  39. package/dist/src/domain/model/theme/entities/ThemePalette.entity.js +7 -0
  40. package/dist/src/domain/model/theme/entities/ThemePalette.entity.js.map +1 -0
  41. package/dist/src/domain/model/theme/entities/ThemeTokens.entity.d.ts +9 -0
  42. package/dist/src/domain/model/theme/entities/ThemeTokens.entity.js +7 -0
  43. package/dist/src/domain/model/theme/entities/ThemeTokens.entity.js.map +1 -0
  44. package/dist/src/domain/model/theme/entities/index.d.ts +3 -0
  45. package/dist/src/domain/model/theme/entities/index.js +3 -0
  46. package/dist/src/domain/model/theme/entities/index.js.map +1 -1
  47. package/dist/src/domain/model/withdraw/entities/WithdrawalDetailEnriched.entity.d.ts +5 -2
  48. package/dist/src/domain/model/withdraw/entities/WithdrawalDetailEnriched.entity.js.map +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +2 -2
  51. /package/dist/src/domain/model/theme/dtos/{CustomTheme.dto.d.ts → customTheme.dto.d.ts} +0 -0
@@ -6,3 +6,5 @@ export declare enum ThemeMode {
6
6
  LIGHT = "LIGHT",
7
7
  DARK = "DARK"
8
8
  }
9
+ export declare function hexToRgb(hex: string): [number, number, number] | undefined;
10
+ export declare function pickTextColorOnButton(hex: string): TextColor;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ThemeMode = exports.TextColor = void 0;
4
+ exports.hexToRgb = hexToRgb;
5
+ exports.pickTextColorOnButton = pickTextColorOnButton;
4
6
  var TextColor;
5
7
  (function (TextColor) {
6
8
  TextColor["WHITE"] = "WHITE";
@@ -11,4 +13,33 @@ var ThemeMode;
11
13
  ThemeMode["LIGHT"] = "LIGHT";
12
14
  ThemeMode["DARK"] = "DARK";
13
15
  })(ThemeMode || (exports.ThemeMode = ThemeMode = {}));
16
+ function hexToRgb(hex) {
17
+ if (hex == null)
18
+ return undefined;
19
+ let value = hex.trim().replace(/^#/, '');
20
+ if (value.length === 3) {
21
+ value = value
22
+ .split('')
23
+ .map((ch) => ch + ch)
24
+ .join('');
25
+ }
26
+ if (!/^[0-9a-fA-F]{6}$/.test(value))
27
+ return undefined;
28
+ return [
29
+ parseInt(value.slice(0, 2), 16),
30
+ parseInt(value.slice(2, 4), 16),
31
+ parseInt(value.slice(4, 6), 16),
32
+ ];
33
+ }
34
+ function pickTextColorOnButton(hex) {
35
+ const rgb = hexToRgb(hex);
36
+ if (rgb == null)
37
+ return TextColor.WHITE;
38
+ const [r, g, b] = rgb.map((channel) => {
39
+ const c = channel / 255;
40
+ return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
41
+ });
42
+ const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
43
+ return luminance > 0.179 ? TextColor.BLACK : TextColor.WHITE;
44
+ }
14
45
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/domain/constants/theme.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,4BAAe,CAAA;AACjB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/domain/constants/theme.ts"],"names":[],"mappings":";;;AAUA,4BAeC;AAMD,sDAWC;AA1CD,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,4BAAe,CAAA;AACjB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK;aACV,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;aACpB,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO;QACL,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAMD,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC;IAExC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC;QACxB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAEvD,OAAO,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CustomThemeDto } from '../../theme/dtos/CustomTheme.dto';
1
+ import { CustomThemeDto } from '../../theme/dtos/customTheme.dto';
2
2
  export declare class UpdateCompanyDto {
3
3
  name?: string;
4
4
  email?: string;
@@ -10,5 +10,6 @@ export declare class UpdateCompanyDto {
10
10
  tradingViewDetails?: string;
11
11
  useDirectEvmTransfers?: boolean;
12
12
  customTheme?: CustomThemeDto;
13
+ defaultTheme?: string | null;
13
14
  defaultCheckoutImage?: string | null;
14
15
  }
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdateCompanyDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
14
  const class_transformer_1 = require("class-transformer");
15
- const CustomTheme_dto_1 = require("../../theme/dtos/CustomTheme.dto");
15
+ const customTheme_dto_1 = require("../../theme/dtos/customTheme.dto");
16
16
  const decorators_1 = require("../../../decorators");
17
17
  class UpdateCompanyDto {
18
18
  }
@@ -64,10 +64,15 @@ __decorate([
64
64
  ], UpdateCompanyDto.prototype, "useDirectEvmTransfers", void 0);
65
65
  __decorate([
66
66
  (0, class_validator_1.IsOptional)(),
67
- (0, class_transformer_1.Type)(() => CustomTheme_dto_1.CustomThemeDto),
67
+ (0, class_transformer_1.Type)(() => customTheme_dto_1.CustomThemeDto),
68
68
  (0, class_validator_1.ValidateNested)(),
69
- __metadata("design:type", CustomTheme_dto_1.CustomThemeDto)
69
+ __metadata("design:type", customTheme_dto_1.CustomThemeDto)
70
70
  ], UpdateCompanyDto.prototype, "customTheme", void 0);
71
+ __decorate([
72
+ (0, decorators_1.IsOptionalOrNull)(),
73
+ (0, class_validator_1.IsMongoId)(),
74
+ __metadata("design:type", Object)
75
+ ], UpdateCompanyDto.prototype, "defaultTheme", void 0);
71
76
  __decorate([
72
77
  (0, decorators_1.IsOptionalOrNull)(),
73
78
  (0, class_validator_1.IsString)(),
@@ -1 +1 @@
1
- {"version":3,"file":"updateCompany.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/company/dtos/updateCompany.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAKyB;AACzB,yDAAyC;AACzC,sEAAkE;AAClE,oDAAuD;AAEvD,MAAa,gBAAgB;CA6C5B;AA7CD,4CA6CC;AA1CC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACG;AAId;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACE;AAIf;IAFC,IAAA,6BAAgB,GAAE;IAClB,IAAA,0BAAQ,GAAE;;8CACU;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;oDACS;AAIpB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yDACc;AAIzB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iDACM;AAIjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;qDACU;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4DACiB;AAI5B;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;+DACoB;AAKhC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;IAC1B,IAAA,gCAAc,GAAE;8BACH,gCAAc;qDAAC;AAI7B;IAFC,IAAA,6BAAgB,GAAE;IAClB,IAAA,0BAAQ,GAAE;;8DAC0B"}
1
+ {"version":3,"file":"updateCompany.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/company/dtos/updateCompany.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAMyB;AACzB,yDAAyC;AACzC,sEAAkE;AAClE,oDAAuD;AAEvD,MAAa,gBAAgB;CAqD5B;AArDD,4CAqDC;AAlDC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACG;AAId;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACE;AAIf;IAFC,IAAA,6BAAgB,GAAE;IAClB,IAAA,0BAAQ,GAAE;;8CACU;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;oDACS;AAIpB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yDACc;AAIzB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iDACM;AAIjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;qDACU;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4DACiB;AAI5B;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;+DACoB;AAKhC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;IAC1B,IAAA,gCAAc,GAAE;8BACH,gCAAc;qDAAC;AAQ7B;IAFC,IAAA,6BAAgB,GAAE;IAClB,IAAA,2BAAS,GAAE;;sDACiB;AAI7B;IAFC,IAAA,6BAAgB,GAAE;IAClB,IAAA,0BAAQ,GAAE;;8DAC0B"}
@@ -31,6 +31,7 @@ export declare class BaseCompany extends Entity {
31
31
  onrampDirectlyToMerchant?: boolean;
32
32
  showWeb3Auth?: boolean;
33
33
  customTheme?: CustomTheme;
34
+ defaultTheme?: string;
34
35
  allowDeposit?: boolean;
35
36
  enabledRestrictedDepositEngines?: BlockchainEngineType[];
36
37
  enabledBetaFeatures: BetaFeature[];
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCompany.entity.js","sourceRoot":"","sources":["../../../../../../src/domain/model/company/entities/BaseCompany.entity.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAWtC,MAAa,WAAY,SAAQ,eAAM;CAyDtC;AAzDD,kCAyDC"}
1
+ {"version":3,"file":"BaseCompany.entity.js","sourceRoot":"","sources":["../../../../../../src/domain/model/company/entities/BaseCompany.entity.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAWtC,MAAa,WAAY,SAAQ,eAAM;CAgEtC;AAhED,kCAgEC"}
@@ -1,5 +1,6 @@
1
1
  export declare enum BlockchainCurrencyFeature {
2
2
  EVM_REQUIRES_APPROVAL_RESET = "EVM_REQUIRES_APPROVAL_RESET",
3
3
  EVM_NATIVE_GASLESS = "EVM_NATIVE_GASLESS",
4
- EVM_GASLESS_DISABLED = "EVM_GASLESS_DISABLED"
4
+ EVM_GASLESS_DISABLED = "EVM_GASLESS_DISABLED",
5
+ EVM_SPONSORED_GAS_FUNDING = "EVM_SPONSORED_GAS_FUNDING"
5
6
  }
@@ -6,5 +6,6 @@ var BlockchainCurrencyFeature;
6
6
  BlockchainCurrencyFeature["EVM_REQUIRES_APPROVAL_RESET"] = "EVM_REQUIRES_APPROVAL_RESET";
7
7
  BlockchainCurrencyFeature["EVM_NATIVE_GASLESS"] = "EVM_NATIVE_GASLESS";
8
8
  BlockchainCurrencyFeature["EVM_GASLESS_DISABLED"] = "EVM_GASLESS_DISABLED";
9
+ BlockchainCurrencyFeature["EVM_SPONSORED_GAS_FUNDING"] = "EVM_SPONSORED_GAS_FUNDING";
9
10
  })(BlockchainCurrencyFeature || (exports.BlockchainCurrencyFeature = BlockchainCurrencyFeature = {}));
10
11
  //# sourceMappingURL=BlockchainCurrencyFeature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockchainCurrencyFeature.js","sourceRoot":"","sources":["../../../../../../src/domain/model/currency/entities/BlockchainCurrencyFeature.ts"],"names":[],"mappings":";;;AAAA,IAAY,yBAgBX;AAhBD,WAAY,yBAAyB;IACnC,wFAA2D,CAAA;IAM3D,sEAAyC,CAAA;IAQzC,0EAA6C,CAAA;AAC/C,CAAC,EAhBW,yBAAyB,yCAAzB,yBAAyB,QAgBpC"}
1
+ {"version":3,"file":"BlockchainCurrencyFeature.js","sourceRoot":"","sources":["../../../../../../src/domain/model/currency/entities/BlockchainCurrencyFeature.ts"],"names":[],"mappings":";;;AAAA,IAAY,yBAwBX;AAxBD,WAAY,yBAAyB;IACnC,wFAA2D,CAAA;IAM3D,sEAAyC,CAAA;IAQzC,0EAA6C,CAAA;IAQ7C,oFAAuD,CAAA;AACzD,CAAC,EAxBW,yBAAyB,yCAAzB,yBAAyB,QAwBpC"}
@@ -0,0 +1,8 @@
1
+ import { ThemePaletteDto } from './themePalette.dto';
2
+ import { ThemeTokensDto } from './themeTokens.dto';
3
+ export declare class CreateThemeDto {
4
+ name: string;
5
+ light: ThemePaletteDto;
6
+ dark: ThemePaletteDto;
7
+ tokens: ThemeTokensDto;
8
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateThemeDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const themePalette_dto_1 = require("./themePalette.dto");
16
+ const themeTokens_dto_1 = require("./themeTokens.dto");
17
+ class CreateThemeDto {
18
+ }
19
+ exports.CreateThemeDto = CreateThemeDto;
20
+ __decorate([
21
+ (0, class_validator_1.IsNotEmpty)(),
22
+ (0, class_validator_1.IsString)(),
23
+ __metadata("design:type", String)
24
+ ], CreateThemeDto.prototype, "name", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsDefined)(),
27
+ (0, class_validator_1.ValidateNested)(),
28
+ (0, class_transformer_1.Type)(() => themePalette_dto_1.ThemePaletteDto),
29
+ __metadata("design:type", themePalette_dto_1.ThemePaletteDto)
30
+ ], CreateThemeDto.prototype, "light", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsDefined)(),
33
+ (0, class_validator_1.ValidateNested)(),
34
+ (0, class_transformer_1.Type)(() => themePalette_dto_1.ThemePaletteDto),
35
+ __metadata("design:type", themePalette_dto_1.ThemePaletteDto)
36
+ ], CreateThemeDto.prototype, "dark", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsDefined)(),
39
+ (0, class_validator_1.ValidateNested)(),
40
+ (0, class_transformer_1.Type)(() => themeTokens_dto_1.ThemeTokensDto),
41
+ __metadata("design:type", themeTokens_dto_1.ThemeTokensDto)
42
+ ], CreateThemeDto.prototype, "tokens", void 0);
43
+ //# sourceMappingURL=createTheme.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/createTheme.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAKyB;AACzB,yDAAyC;AACzC,yDAAqD;AACrD,uDAAmD;AAEnD,MAAa,cAAc;CAmB1B;AAnBD,wCAmBC;AAhBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4CACE;AAKb;IAHC,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kCAAe,CAAC;8BACrB,kCAAe;6CAAC;AAKvB;IAHC,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kCAAe,CAAC;8BACtB,kCAAe;4CAAC;AAKtB;IAHC,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;8BACnB,gCAAc;8CAAC"}
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const class_validator_1 = require("class-validator");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const createTheme_dto_1 = require("./createTheme.dto");
7
+ const validPalette = {
8
+ primaryColor: '#7D00FF',
9
+ neutralColor: '#9CA3AF',
10
+ backgroundColor: '#ffffff',
11
+ };
12
+ const validTokens = {
13
+ containerBorderRadius: 8,
14
+ inputBorderRadius: 4,
15
+ buttonBorderRadius: 4,
16
+ containerBorderWidth: 1,
17
+ inputBorderWidth: 1,
18
+ fontFamily: 'Inter',
19
+ padding: 16,
20
+ };
21
+ const validPayload = {
22
+ name: 'Test Theme',
23
+ light: validPalette,
24
+ dark: validPalette,
25
+ tokens: validTokens,
26
+ };
27
+ describe('CreateThemeDto', () => {
28
+ it('accepts a fully valid payload', async () => {
29
+ const dto = (0, class_transformer_1.plainToInstance)(createTheme_dto_1.CreateThemeDto, validPayload);
30
+ const errors = await (0, class_validator_1.validate)(dto);
31
+ expect(errors).toHaveLength(0);
32
+ });
33
+ it.each(['light', 'dark', 'tokens'])('rejects when %s is missing', async (field) => {
34
+ const { [field]: _, ...rest } = validPayload;
35
+ const dto = (0, class_transformer_1.plainToInstance)(createTheme_dto_1.CreateThemeDto, rest);
36
+ const errors = await (0, class_validator_1.validate)(dto);
37
+ const match = errors.find((e) => e.property === field);
38
+ expect(match).toBeDefined();
39
+ expect(match?.constraints?.isDefined).toBeDefined();
40
+ });
41
+ });
42
+ //# sourceMappingURL=createTheme.dto.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.dto.spec.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/createTheme.dto.spec.ts"],"names":[],"mappings":";;AAAA,4BAA0B;AAC1B,qDAA2C;AAC3C,yDAAoD;AACpD,uDAAmD;AAEnD,MAAM,YAAY,GAAG;IACnB,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,WAAW,GAAG;IAClB,qBAAqB,EAAE,CAAC;IACxB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC;IACrB,oBAAoB,EAAE,CAAC;IACvB,gBAAgB,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAA,mCAAe,EAAC,gCAAc,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAQ,EAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC,CAC3C,4BAA4B,EAC5B,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAA,mCAAe,EAAC,gCAAc,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAQ,EAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -40,4 +40,4 @@ __decorate([
40
40
  (0, class_validator_1.IsHexColor)(),
41
41
  __metadata("design:type", String)
42
42
  ], CustomThemeDto.prototype, "backgroundColor", void 0);
43
- //# sourceMappingURL=CustomTheme.dto.js.map
43
+ //# sourceMappingURL=customTheme.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTheme.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/CustomTheme.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6E;AAC7E,oDAAgE;AAEhE,MAAa,cAAc;CAoB1B;AApBD,wCAoBC;AAjBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;oDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;oDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,iBAAS,CAAC;;yDACW;AAI7B;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,iBAAS,CAAC;;iDACG;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;uDACY"}
1
+ {"version":3,"file":"customTheme.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/customTheme.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6E;AAC7E,oDAAgE;AAEhE,MAAa,cAAc;CAoB1B;AApBD,wCAoBC;AAjBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;oDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;oDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,iBAAS,CAAC;;yDACW;AAI7B;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,iBAAS,CAAC;;iDACG;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;uDACY"}
@@ -1 +1,5 @@
1
- export * from './CustomTheme.dto';
1
+ export * from './customTheme.dto';
2
+ export * from './themePalette.dto';
3
+ export * from './themeTokens.dto';
4
+ export * from './createTheme.dto';
5
+ export * from './updateTheme.dto';
@@ -14,5 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./CustomTheme.dto"), exports);
17
+ __exportStar(require("./customTheme.dto"), exports);
18
+ __exportStar(require("./themePalette.dto"), exports);
19
+ __exportStar(require("./themeTokens.dto"), exports);
20
+ __exportStar(require("./createTheme.dto"), exports);
21
+ __exportStar(require("./updateTheme.dto"), exports);
18
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,qDAAmC;AACnC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC"}
@@ -0,0 +1,8 @@
1
+ export declare class ThemePaletteDto {
2
+ primaryColor: string;
3
+ neutralColor: string;
4
+ backgroundColor: string;
5
+ successColor?: string;
6
+ dangerColor?: string;
7
+ warningColor?: string;
8
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ThemePaletteDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class ThemePaletteDto {
15
+ }
16
+ exports.ThemePaletteDto = ThemePaletteDto;
17
+ __decorate([
18
+ (0, class_validator_1.IsNotEmpty)(),
19
+ (0, class_validator_1.IsHexColor)(),
20
+ __metadata("design:type", String)
21
+ ], ThemePaletteDto.prototype, "primaryColor", void 0);
22
+ __decorate([
23
+ (0, class_validator_1.IsNotEmpty)(),
24
+ (0, class_validator_1.IsHexColor)(),
25
+ __metadata("design:type", String)
26
+ ], ThemePaletteDto.prototype, "neutralColor", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsNotEmpty)(),
29
+ (0, class_validator_1.IsHexColor)(),
30
+ __metadata("design:type", String)
31
+ ], ThemePaletteDto.prototype, "backgroundColor", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.IsHexColor)(),
35
+ __metadata("design:type", String)
36
+ ], ThemePaletteDto.prototype, "successColor", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsHexColor)(),
40
+ __metadata("design:type", String)
41
+ ], ThemePaletteDto.prototype, "dangerColor", void 0);
42
+ __decorate([
43
+ (0, class_validator_1.IsOptional)(),
44
+ (0, class_validator_1.IsHexColor)(),
45
+ __metadata("design:type", String)
46
+ ], ThemePaletteDto.prototype, "warningColor", void 0);
47
+ //# sourceMappingURL=themePalette.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themePalette.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/themePalette.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAqE;AAErE,MAAa,eAAe;CAwB3B;AAxBD,0CAwBC;AArBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;qDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;qDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;wDACW;AAIxB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;qDACS;AAItB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;oDACQ;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;qDACS"}
@@ -0,0 +1,9 @@
1
+ export declare class ThemeTokensDto {
2
+ containerBorderRadius: number;
3
+ inputBorderRadius: number;
4
+ buttonBorderRadius: number;
5
+ containerBorderWidth: number;
6
+ inputBorderWidth: number;
7
+ fontFamily?: string;
8
+ padding: number;
9
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ThemeTokensDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const MAX_RADIUS_PX = 200;
15
+ const MAX_BORDER_WIDTH_PX = 20;
16
+ const MAX_PADDING_PX = 200;
17
+ class ThemeTokensDto {
18
+ }
19
+ exports.ThemeTokensDto = ThemeTokensDto;
20
+ __decorate([
21
+ (0, class_validator_1.IsNumber)(),
22
+ (0, class_validator_1.Min)(0),
23
+ (0, class_validator_1.Max)(MAX_RADIUS_PX),
24
+ __metadata("design:type", Number)
25
+ ], ThemeTokensDto.prototype, "containerBorderRadius", void 0);
26
+ __decorate([
27
+ (0, class_validator_1.IsNumber)(),
28
+ (0, class_validator_1.Min)(0),
29
+ (0, class_validator_1.Max)(MAX_RADIUS_PX),
30
+ __metadata("design:type", Number)
31
+ ], ThemeTokensDto.prototype, "inputBorderRadius", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsNumber)(),
34
+ (0, class_validator_1.Min)(0),
35
+ (0, class_validator_1.Max)(MAX_RADIUS_PX),
36
+ __metadata("design:type", Number)
37
+ ], ThemeTokensDto.prototype, "buttonBorderRadius", void 0);
38
+ __decorate([
39
+ (0, class_validator_1.IsNumber)(),
40
+ (0, class_validator_1.Min)(0),
41
+ (0, class_validator_1.Max)(MAX_BORDER_WIDTH_PX),
42
+ __metadata("design:type", Number)
43
+ ], ThemeTokensDto.prototype, "containerBorderWidth", void 0);
44
+ __decorate([
45
+ (0, class_validator_1.IsNumber)(),
46
+ (0, class_validator_1.Min)(0),
47
+ (0, class_validator_1.Max)(MAX_BORDER_WIDTH_PX),
48
+ __metadata("design:type", Number)
49
+ ], ThemeTokensDto.prototype, "inputBorderWidth", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.IsString)(),
53
+ (0, class_validator_1.IsNotEmpty)(),
54
+ (0, class_validator_1.Matches)(/^[a-zA-Z0-9\s\-,'"]+$/),
55
+ __metadata("design:type", String)
56
+ ], ThemeTokensDto.prototype, "fontFamily", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsNumber)(),
59
+ (0, class_validator_1.Min)(0),
60
+ (0, class_validator_1.Max)(MAX_PADDING_PX),
61
+ __metadata("design:type", Number)
62
+ ], ThemeTokensDto.prototype, "padding", void 0);
63
+ //# sourceMappingURL=themeTokens.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeTokens.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/themeTokens.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAQyB;AAMzB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAa,cAAc;CAoC1B;AApCD,wCAoCC;AAhCC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,aAAa,CAAC;;6DACW;AAK9B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,aAAa,CAAC;;yDACO;AAK1B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,aAAa,CAAC;;0DACQ;AAK3B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,mBAAmB,CAAC;;4DACI;AAK7B;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,mBAAmB,CAAC;;wDACA;AAMzB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,EAAC,uBAAuB,CAAC;;kDACb;AAKpB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;IACN,IAAA,qBAAG,EAAC,cAAc,CAAC;;+CACJ"}
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const class_validator_1 = require("class-validator");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const themeTokens_dto_1 = require("./themeTokens.dto");
7
+ const validTokens = {
8
+ containerBorderRadius: 8,
9
+ inputBorderRadius: 4,
10
+ buttonBorderRadius: 4,
11
+ containerBorderWidth: 1,
12
+ inputBorderWidth: 1,
13
+ fontFamily: 'Inter',
14
+ padding: 16,
15
+ };
16
+ describe('ThemeTokensDto', () => {
17
+ it('accepts valid tokens', async () => {
18
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, validTokens);
19
+ const errors = await (0, class_validator_1.validate)(dto);
20
+ expect(errors).toHaveLength(0);
21
+ });
22
+ it('rejects empty fontFamily', async () => {
23
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, {
24
+ ...validTokens,
25
+ fontFamily: '',
26
+ });
27
+ const errors = await (0, class_validator_1.validate)(dto);
28
+ const match = errors.find((e) => e.property === 'fontFamily');
29
+ expect(match).toBeDefined();
30
+ expect(match?.constraints?.isNotEmpty).toBeDefined();
31
+ });
32
+ it('accepts non-empty fontFamily with spaces', async () => {
33
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, {
34
+ ...validTokens,
35
+ fontFamily: 'Fira Code',
36
+ });
37
+ const errors = await (0, class_validator_1.validate)(dto);
38
+ expect(errors).toHaveLength(0);
39
+ });
40
+ it('accepts omitted fontFamily', async () => {
41
+ const { fontFamily: _, ...withoutFont } = validTokens;
42
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, withoutFont);
43
+ const errors = await (0, class_validator_1.validate)(dto);
44
+ expect(errors).toHaveLength(0);
45
+ });
46
+ it.each([
47
+ 'Inter',
48
+ 'Fira Code',
49
+ "'Roboto Mono', monospace",
50
+ '"Open Sans"',
51
+ 'Noto Sans JP',
52
+ ])('accepts safe fontFamily: %s', async (fontFamily) => {
53
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, { ...validTokens, fontFamily });
54
+ const errors = await (0, class_validator_1.validate)(dto);
55
+ expect(errors).toHaveLength(0);
56
+ });
57
+ it.each([
58
+ '}; background: url(https://evil.com)',
59
+ 'Inter; } * { display: none',
60
+ 'Inter<script>alert(1)</script>',
61
+ "Inter'); DROP TABLE themes; --",
62
+ 'url(javascript:alert(1))',
63
+ ])('rejects CSS-injection fontFamily: %s', async (fontFamily) => {
64
+ const dto = (0, class_transformer_1.plainToInstance)(themeTokens_dto_1.ThemeTokensDto, { ...validTokens, fontFamily });
65
+ const errors = await (0, class_validator_1.validate)(dto);
66
+ const match = errors.find((e) => e.property === 'fontFamily');
67
+ expect(match).toBeDefined();
68
+ });
69
+ });
70
+ //# sourceMappingURL=themeTokens.dto.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeTokens.dto.spec.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/themeTokens.dto.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ThemePaletteDto } from './themePalette.dto';
2
+ import { ThemeTokensDto } from './themeTokens.dto';
3
+ export declare class UpdateThemeDto {
4
+ name?: string;
5
+ light?: ThemePaletteDto;
6
+ dark?: ThemePaletteDto;
7
+ tokens?: ThemeTokensDto;
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UpdateThemeDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const themePalette_dto_1 = require("./themePalette.dto");
16
+ const themeTokens_dto_1 = require("./themeTokens.dto");
17
+ class UpdateThemeDto {
18
+ }
19
+ exports.UpdateThemeDto = UpdateThemeDto;
20
+ __decorate([
21
+ (0, class_validator_1.IsOptional)(),
22
+ (0, class_validator_1.IsNotEmpty)(),
23
+ (0, class_validator_1.IsString)(),
24
+ __metadata("design:type", String)
25
+ ], UpdateThemeDto.prototype, "name", void 0);
26
+ __decorate([
27
+ (0, class_validator_1.IsOptional)(),
28
+ (0, class_validator_1.ValidateNested)(),
29
+ (0, class_transformer_1.Type)(() => themePalette_dto_1.ThemePaletteDto),
30
+ __metadata("design:type", themePalette_dto_1.ThemePaletteDto)
31
+ ], UpdateThemeDto.prototype, "light", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.ValidateNested)(),
35
+ (0, class_transformer_1.Type)(() => themePalette_dto_1.ThemePaletteDto),
36
+ __metadata("design:type", themePalette_dto_1.ThemePaletteDto)
37
+ ], UpdateThemeDto.prototype, "dark", void 0);
38
+ __decorate([
39
+ (0, class_validator_1.IsOptional)(),
40
+ (0, class_validator_1.ValidateNested)(),
41
+ (0, class_transformer_1.Type)(() => themeTokens_dto_1.ThemeTokensDto),
42
+ __metadata("design:type", themeTokens_dto_1.ThemeTokensDto)
43
+ ], UpdateThemeDto.prototype, "tokens", void 0);
44
+ //# sourceMappingURL=updateTheme.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTheme.dto.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/dtos/updateTheme.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAKyB;AACzB,yDAAyC;AACzC,yDAAqD;AACrD,uDAAmD;AAQnD,MAAa,cAAc;CAoB1B;AApBD,wCAoBC;AAhBC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4CACG;AAKd;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kCAAe,CAAC;8BACpB,kCAAe;6CAAC;AAKxB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kCAAe,CAAC;8BACrB,kCAAe;4CAAC;AAKvB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;8BAClB,gCAAc;8CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Entity } from '../../entity';
2
+ import { ThemePalette } from './ThemePalette.entity';
3
+ import { ThemeTokens } from './ThemeTokens.entity';
4
+ export declare class Theme extends Entity {
5
+ id: string;
6
+ companyId: string;
7
+ name: string;
8
+ light: ThemePalette;
9
+ dark: ThemePalette;
10
+ tokens: ThemeTokens;
11
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Theme = void 0;
4
+ const entity_1 = require("../../entity");
5
+ class Theme extends entity_1.Entity {
6
+ }
7
+ exports.Theme = Theme;
8
+ //# sourceMappingURL=Theme.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Theme.entity.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/entities/Theme.entity.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAatC,MAAa,KAAM,SAAQ,eAAM;CAYhC;AAZD,sBAYC"}
@@ -0,0 +1,8 @@
1
+ export declare class ThemePalette {
2
+ primaryColor: string;
3
+ neutralColor: string;
4
+ backgroundColor: string;
5
+ successColor?: string;
6
+ dangerColor?: string;
7
+ warningColor?: string;
8
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemePalette = void 0;
4
+ class ThemePalette {
5
+ }
6
+ exports.ThemePalette = ThemePalette;
7
+ //# sourceMappingURL=ThemePalette.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemePalette.entity.js","sourceRoot":"","sources":["../../../../../../src/domain/model/theme/entities/ThemePalette.entity.ts"],"names":[],"mappings":";;;AAYA,MAAa,YAAY;CAYxB;AAZD,oCAYC"}