dispersa 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +1 -2
  2. package/dist/{builders.d.cts → builders-B7_pBy58.d.cts} +180 -6
  3. package/dist/{builders.d.ts → builders-BEoMaLal.d.ts} +180 -6
  4. package/dist/{types-8MLtztK3.d.ts → config-schemas-DnEBhIg0.d.cts} +1 -158
  5. package/dist/{types-BHBHRm0a.d.cts → config-schemas-DnEBhIg0.d.ts} +1 -158
  6. package/dist/dispersa-DF2ZkG2O.d.ts +567 -0
  7. package/dist/dispersa-DJeCN0cP.d.cts +567 -0
  8. package/dist/index.cjs +2117 -2098
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +7 -7
  11. package/dist/index.d.ts +7 -7
  12. package/dist/index.js +2117 -2098
  13. package/dist/index.js.map +1 -1
  14. package/dist/{lint.cjs → lint/index.cjs} +2 -2
  15. package/dist/lint/index.cjs.map +1 -0
  16. package/dist/{lint.d.ts → lint/index.d.cts} +8 -7
  17. package/dist/{lint.d.cts → lint/index.d.ts} +8 -7
  18. package/dist/{lint.js → lint/index.js} +2 -2
  19. package/dist/lint/index.js.map +1 -0
  20. package/dist/{renderers.d.ts → output-tree-BRbfWSmG.d.ts} +3 -10
  21. package/dist/{renderers.d.cts → output-tree-Hmi77EMv.d.cts} +3 -10
  22. package/dist/{builders.cjs → outputs/builders.cjs} +30 -30
  23. package/dist/outputs/builders.cjs.map +1 -0
  24. package/dist/outputs/builders.d.cts +7 -0
  25. package/dist/outputs/builders.d.ts +7 -0
  26. package/dist/{builders.js → outputs/builders.js} +30 -30
  27. package/dist/outputs/builders.js.map +1 -0
  28. package/dist/outputs/index.cjs +3750 -0
  29. package/dist/outputs/index.cjs.map +1 -0
  30. package/dist/outputs/index.d.cts +73 -0
  31. package/dist/outputs/index.d.ts +73 -0
  32. package/dist/outputs/index.js +3730 -0
  33. package/dist/outputs/index.js.map +1 -0
  34. package/dist/{filters.cjs → processing/filters/index.cjs} +24 -18
  35. package/dist/processing/filters/index.cjs.map +1 -0
  36. package/dist/processing/filters/index.d.cts +36 -0
  37. package/dist/processing/filters/index.d.ts +36 -0
  38. package/dist/{filters.js → processing/filters/index.js} +24 -18
  39. package/dist/processing/filters/index.js.map +1 -0
  40. package/dist/{preprocessors.cjs → processing/preprocessors/index.cjs} +3 -3
  41. package/dist/processing/preprocessors/index.cjs.map +1 -0
  42. package/dist/processing/preprocessors/index.d.cts +29 -0
  43. package/dist/processing/preprocessors/index.d.ts +29 -0
  44. package/dist/{preprocessors.js → processing/preprocessors/index.js} +3 -3
  45. package/dist/processing/preprocessors/index.js.map +1 -0
  46. package/dist/{transforms.cjs → processing/transforms/index.cjs} +2 -7
  47. package/dist/processing/transforms/index.cjs.map +1 -0
  48. package/dist/{transforms.d.ts → processing/transforms/index.d.cts} +2 -2
  49. package/dist/{transforms.d.cts → processing/transforms/index.d.ts} +2 -2
  50. package/dist/{transforms.js → processing/transforms/index.js} +2 -7
  51. package/dist/processing/transforms/index.js.map +1 -0
  52. package/dist/{errors.cjs → shared/errors/index.cjs} +12 -2
  53. package/dist/shared/errors/index.cjs.map +1 -0
  54. package/dist/{errors-qT4sJgSA.d.ts → shared/errors/index.d.cts} +11 -2
  55. package/dist/{errors-qT4sJgSA.d.cts → shared/errors/index.d.ts} +11 -2
  56. package/dist/{errors.js → shared/errors/index.js} +12 -3
  57. package/dist/shared/errors/index.js.map +1 -0
  58. package/dist/types-B0cI70Bt.d.cts +453 -0
  59. package/dist/types-BxDEUCos.d.ts +453 -0
  60. package/dist/types-DUc4vLZH.d.cts +36 -0
  61. package/dist/types-s3UoDRKl.d.ts +36 -0
  62. package/package.json +26 -36
  63. package/dist/android-CRDfSB3_.d.cts +0 -126
  64. package/dist/android-DANJjjPO.d.ts +0 -126
  65. package/dist/builders.cjs.map +0 -1
  66. package/dist/builders.js.map +0 -1
  67. package/dist/dispersa-BC1kDF5u.d.ts +0 -118
  68. package/dist/dispersa-DL3J_Pmz.d.cts +0 -118
  69. package/dist/errors.cjs.map +0 -1
  70. package/dist/errors.d.cts +0 -1
  71. package/dist/errors.d.ts +0 -1
  72. package/dist/errors.js.map +0 -1
  73. package/dist/filters.cjs.map +0 -1
  74. package/dist/filters.d.cts +0 -83
  75. package/dist/filters.d.ts +0 -83
  76. package/dist/filters.js.map +0 -1
  77. package/dist/index-Dajm5rvM.d.ts +0 -895
  78. package/dist/index-De6SjZYH.d.cts +0 -895
  79. package/dist/lint.cjs.map +0 -1
  80. package/dist/lint.js.map +0 -1
  81. package/dist/preprocessors.cjs.map +0 -1
  82. package/dist/preprocessors.d.cts +0 -17
  83. package/dist/preprocessors.d.ts +0 -17
  84. package/dist/preprocessors.js.map +0 -1
  85. package/dist/renderers.cjs +0 -28
  86. package/dist/renderers.cjs.map +0 -1
  87. package/dist/renderers.js +0 -24
  88. package/dist/renderers.js.map +0 -1
  89. package/dist/transforms.cjs.map +0 -1
  90. package/dist/transforms.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { T as Transform } from './types-BltzwVYK.cjs';
2
- import './types-TQHV1MrY.cjs';
1
+ import { T as Transform } from '../../types-DztXKlka.js';
2
+ import '../../types-TQHV1MrY.js';
3
3
 
4
4
  /**
5
5
  * @fileoverview Built-in color value transforms with alpha channel support
@@ -407,12 +407,7 @@ function durationToSeconds() {
407
407
  }
408
408
  };
409
409
  }
410
- /**
411
- * @license
412
- * Copyright (c) 2025 Dispersa Contributors
413
- * SPDX-License-Identifier: MIT
414
- */
415
410
 
416
411
  export { colorToColorFunction, colorToHex, colorToHsl, colorToHwb, colorToLab, colorToLch, colorToOklab, colorToOklch, colorToRgb, dimensionToPx, dimensionToRem, dimensionToUnitless, durationToMs, durationToSeconds, fontWeightToNumber, nameCamelCase, nameConstantCase, nameKebabCase, namePascalCase, namePrefix, nameSnakeCase, nameSuffix };
417
- //# sourceMappingURL=transforms.js.map
418
- //# sourceMappingURL=transforms.js.map
412
+ //# sourceMappingURL=index.js.map
413
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/processing/transforms/built-in/color-converter.ts","../../../src/processing/transforms/built-in/color-format.ts","../../../src/processing/transforms/built-in/color-transform-factory.ts","../../../src/processing/transforms/built-in/color-transforms.ts","../../../src/shared/constants.ts","../../../src/processing/transforms/built-in/dimension-converter.ts","../../../src/processing/transforms/built-in/dimension-transforms.ts","../../../src/processing/transforms/built-in/name-transforms.ts","../../../src/processing/transforms/built-in/other-transforms.ts"],"names":["dtcgObjectToCulori","converter","formatCss"],"mappings":";;;;AA6BO,SAAS,cAAc,KAAA,EAA2C;AACvE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,YAAA,IAAgB,SAAS,YAAA,IAAgB,KAAA;AAE5F;AAMA,SAAS,kBAAkB,SAAA,EAA+C;AACxE,EAAA,OAAO,SAAA,KAAc,SAAS,MAAA,GAAY,SAAA;AAC5C;AAMO,SAAS,mBAAmB,KAAA,EAAsC;AACvE,EAAA,MAAM,CAAC,IAAI,EAAA,EAAI,EAAE,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,iBAAiB,CAAA;AAC3D,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,KAAU,SAAY,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA;AAG3E,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,CAAW,WAAA,EAAY;AAGhD,EAAA,QAAQ,UAAA;AAAY;AAAA,IAElB,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEnD,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEpD,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,MAAM,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAElD,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEnD,KAAK,cAAA;AACH,MAAA,OAAO,EAAE,MAAM,UAAA,EAAY,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAExD,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAM,SAAA,EAAW,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA;AAAA,IAGvD,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEnD,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA;AAAA,IAGnD,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEnD,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAEnD,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAErD,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA;AAAA,IAGrD,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA,IAErD,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAM,OAAA,EAAS,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA;AAAA,IAGrD;AACE,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,KAAA,EAAM;AAAA;AAEvD;AAKO,SAAS,iBAAiB,KAAA,EAAiC;AAChE,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,CAAA;AAE7B,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,OAAO,WAAW,WAAW,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,UAAU,WAAW,CAAA;AAC9B;AC3GO,SAAS,iBAAiB,KAAA,EAAiC;AAChE,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,OAAO,UAAU,WAAW,CAAA;AAC9B;AAKO,SAAS,iBAAiB,KAAA,EAAiC;AAChE,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,OAAO,UAAU,WAAW,CAAA;AAC9B;ACRO,SAASA,oBAAmB,KAAA,EAAmB;AACpD,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,mBAAoB,KAAK,CAAA;AAClC;AAcO,SAAS,qBAAqBC,UAAAA,EAA2D;AAC9F,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,MAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AAEzB,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAYA,WAAU,KAAK,CAAA;AACjC,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU;AAAA,MACvC,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,GACF;AACF;AAcO,SAAS,2BAA2B,IAAA,EAAuB;AAChE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAASD,oBAAmB,KAAK,CAAA;AAEvC,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,OAAO,KAAA;AAAA,QACT;AAGA,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,IAAI,CAAA,CAAE,MAAM,CAAA;AACxC,QAAA,MAAM,SAAA,GAAY,UAAU,SAAS,CAAA;AAErC,QAAA,IAAI,cAAc,EAAA,EAAI;AACpB,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU;AAAA,MACvC,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,GACF;AACF;;;ACpEO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,qBAAqB,gBAAgB,CAAA;AAC9C;AAKO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,qBAAqB,gBAAgB,CAAA;AAC9C;AAKO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,qBAAqB,gBAAgB,CAAA;AAC9C;AASO,SAAS,YAAA,GAA0B;AACxC,EAAA,OAAO,2BAA2B,OAAO,CAAA;AAC3C;AAKO,SAAS,YAAA,GAA0B;AACxC,EAAA,OAAO,2BAA2B,OAAO,CAAA;AAC3C;AAKO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,2BAA2B,KAAK,CAAA;AACzC;AAKO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,2BAA2B,KAAK,CAAA;AACzC;AAKO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,2BAA2B,KAAK,CAAA;AACzC;AAMO,SAAS,oBAAA,GAAkC;AAChD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAASA,oBAAmB,KAAK,CAAA;AAEvC,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,OAAO,KAAA;AAAA,QACT;AAGA,QAAA,MAAM,SAAA,GAAYE,UAAU,MAAM,CAAA;AAElC,QAAA,IAAI,cAAc,EAAA,EAAI;AACpB,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU;AAAA,MACvC,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,GACF;AACF;;;ACxGO,IAAM,yBAAA,GAA4B,EAAA;;;ACHlC,SAAS,kBAAkB,KAAA,EAAyC;AACzE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,OAAA,IAAW,SAAS,MAAA,IAAU,KAAA;AACtF;AAKO,SAAS,wBAAwB,SAAA,EAAmC;AACzE,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,KAAK,CAAA,EAAG,UAAU,IAAI,CAAA,CAAA;AAC5C;AAYO,SAAS,gBAAA,CACd,KAAA,EACA,MAAA,EACA,YAAA,GAAe,yBAAA,EACC;AAChB,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA;AACvB,EAAA,IAAI,WAAW,KAAA,CAAM,KAAA;AAGrB,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,QAAA,GAAW,QAAA,GAAW,YAAA;AAAA,EACxB,CAAA,MAAA,IAAW,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,EAAQ;AAEnD,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,QAAA,GAAW,QAAA,GAAW,YAAA;AAAA,EACxB,CAAA,MAAA,IAAW,WAAW,IAAA,EAAM;AAE1B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AACF;;;AC5CO,SAAS,aAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,WAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAGpB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,QAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,KAAA,EAAyB,IAAA,EAAM,yBAAyB,CAAA;AAC3F,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,uBAAA,CAAwB,SAAS,CAAA,EAAE;AAAA,MAChE;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AACF;AAKO,SAAS,cAAA,GAA4B;AAC1C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,WAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAGpB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,QAAA,MAAM,SAAA,GAAY,gBAAA;AAAA,UAChB,KAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,uBAAA,CAAwB,SAAS,CAAA,EAAE;AAAA,MAChE;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AACF;AAKO,SAAS,mBAAA,GAAiC;AAC/C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,WAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAGpB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,MAAM,GAAG,CAAA,GAAI,QAAQ,GAAA,EAAI;AAAA,MACtD;AAGA,MAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAS,MAAyB,KAAA,EAAM;AAAA,MAC7D;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AACF;AC7EO,SAAS,aAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,aAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,aAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,cAAA,GAA4B;AAC1C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,OAAO,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,gBAAA,GAA8B;AAC5C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,OAAO,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAYO,SAAS,WAAW,MAAA,EAA2B;AACpD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,IAAI,CAAA;AAAA,OAC9B;AAAA,IACF;AAAA,GACF;AACF;AAYO,SAAS,WAAW,MAAA,EAA2B;AACpD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,GAAG,MAAM,CAAA;AAAA,OAC9B;AAAA,IACF;AAAA,GACF;AACF;;;ACjHO,SAAS,kBAAA,GAAgC;AAC9C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,YAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,SAAA,GAAoC;AAAA,UACxC,IAAA,EAAM,GAAA;AAAA,UACN,QAAA,EAAU,GAAA;AAAA,UACV,aAAA,EAAe,GAAA;AAAA,UACf,aAAA,EAAe,GAAA;AAAA,UACf,KAAA,EAAO,GAAA;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,GAAA;AAAA,UACT,MAAA,EAAQ,GAAA;AAAA,UACR,WAAA,EAAa,GAAA;AAAA,UACb,WAAA,EAAa,GAAA;AAAA,UACb,IAAA,EAAM,GAAA;AAAA,UACN,YAAA,EAAc,GAAA;AAAA,UACd,YAAA,EAAc,GAAA;AAAA,UACd,KAAA,EAAO,GAAA;AAAA,UACP,KAAA,EAAO,GAAA;AAAA,UACP,aAAA,EAAe,GAAA;AAAA,UACf,aAAA,EAAe;AAAA,SACjB;AAEA,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,WAAA,EAAa,CAAA;AAC5C,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAO;AAAA,QACpC;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AACF;AAMA,SAAS,cAAc,QAAA,EAA0C;AAC/D,EAAA,IACE,OAAO,aAAa,QAAA,IACpB,QAAA,KAAa,QACb,OAAA,IAAW,QAAA,IACX,UAAU,QAAA,EACV;AACA,IAAA,MAAM,OAAQ,QAAA,CAA8B,IAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,MAAA,CAAQ,QAAA,CAAgC,KAAK,CAAA;AAC7D,IAAA,IAAI,OAAO,QAAA,CAAS,OAAO,MAAM,IAAA,KAAS,IAAA,IAAQ,SAAS,GAAA,CAAA,EAAM;AAC/D,MAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAK;AAAA,IAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,GAAW,MAAA,CAAO,QAAQ,CAAA,GAAI,EAAA;AAC9F,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AACtB,IAAA,MAAM,OAAA,GAAU,WAAW,GAAG,CAAA;AAC9B,IAAA,OAAO,MAAA,CAAO,SAAS,OAAO,CAAA,GAAI,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAK,GAAI,IAAA;AAAA,EACrE;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACrB,IAAA,MAAM,OAAA,GAAU,WAAW,GAAG,CAAA;AAC9B,IAAA,OAAO,MAAA,CAAO,SAAS,OAAO,CAAA,GAAI,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,GAAA,EAAI,GAAI,IAAA;AAAA,EACpE;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,mBAAA,CAAoB,QAAwB,MAAA,EAAsC;AACzF,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAW,IAAA,GACd,EAAE,KAAA,EAAO,MAAA,CAAO,QAAQ,GAAA,EAAM,IAAA,EAAM,IAAA,EAAK,GACzC,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,GAAQ,GAAA,EAAM,MAAM,GAAA,EAAI;AAC9C;AAKO,SAAS,YAAA,GAA0B;AACxC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,UAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AACzC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,EAAQ,IAAI,CAAA;AAClD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,IAAA,EAAK,EAAE;AAAA,IAC9E;AAAA,GACF;AACF;AAKO,SAAS,iBAAA,GAA+B;AAC7C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAyB,KAAA,CAAM,KAAA,KAAU,UAAA;AAAA,IACnD,SAAA,EAAW,CAAC,KAAA,KAAyB;AACnC,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AACzC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,EAAQ,GAAG,CAAA;AACjD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,IAAA,EAAK,EAAE;AAAA,IAC9E;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * @fileoverview Color format conversion utilities for DTCG 2025.10\n * Uses culori for accurate color science and conversions\n */\n\nimport type { ColorComponent, ColorSpace, ColorValueObject } from '@shared/token-types'\nimport {\n formatHex,\n formatHex8,\n type Color as CuloriColor,\n type Rgb,\n type Lrgb,\n type Hsl,\n type Hwb,\n type Lab,\n type Lch,\n type Oklab,\n type Oklch,\n type P3,\n type A98,\n type Prophoto,\n type Rec2020,\n type Xyz65,\n type Xyz50,\n} from 'culori'\n\n/**\n * Check if a color value is in DTCG object format\n */\nexport function isColorObject(value: unknown): value is ColorValueObject {\n return (\n typeof value === 'object' && value !== null && 'colorSpace' in value && 'components' in value\n )\n}\n\n/**\n * Convert a color component value to culori format\n * The \"none\" keyword becomes undefined (culori's representation of missing channels)\n */\nfunction componentToCulori(component: ColorComponent): number | undefined {\n return component === 'none' ? undefined : component\n}\n\n/**\n * Convert DTCG color object to culori color object\n * Handles all 14 DTCG color spaces and the \"none\" keyword\n */\nexport function dtcgObjectToCulori(color: ColorValueObject): CuloriColor {\n const [c1, c2, c3] = color.components.map(componentToCulori)\n const alpha = color.alpha !== undefined ? componentToCulori(color.alpha) : undefined\n\n // Normalize color space (case-insensitive, handle aliases)\n const colorSpace = color.colorSpace.toLowerCase() as Lowercase<ColorSpace>\n\n // Map DTCG color spaces to culori color objects with proper property names\n switch (colorSpace) {\n // RGB-based color spaces (components are R, G, B in 0-1 range)\n case 'srgb':\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n\n case 'srgb-linear':\n return { mode: 'lrgb', r: c1, g: c2, b: c3, alpha } as Lrgb\n\n case 'display-p3':\n return { mode: 'p3', r: c1, g: c2, b: c3, alpha } as P3\n\n case 'a98-rgb':\n return { mode: 'a98', r: c1, g: c2, b: c3, alpha } as A98\n\n case 'prophoto-rgb':\n return { mode: 'prophoto', r: c1, g: c2, b: c3, alpha } as Prophoto\n\n case 'rec2020':\n return { mode: 'rec2020', r: c1, g: c2, b: c3, alpha } as Rec2020\n\n // Cylindrical color spaces (Hue, Saturation/Whiteness, Lightness/Blackness)\n case 'hsl':\n return { mode: 'hsl', h: c1, s: c2, l: c3, alpha } as Hsl\n\n case 'hwb':\n return { mode: 'hwb', h: c1, w: c2, b: c3, alpha } as Hwb\n\n // Lab color spaces (Lightness, a/b or Chroma/Hue)\n case 'lab':\n return { mode: 'lab', l: c1, a: c2, b: c3, alpha } as Lab\n\n case 'lch':\n return { mode: 'lch', l: c1, c: c2, h: c3, alpha } as Lch\n\n case 'oklab':\n return { mode: 'oklab', l: c1, a: c2, b: c3, alpha } as Oklab\n\n case 'oklch':\n return { mode: 'oklch', l: c1, c: c2, h: c3, alpha } as Oklch\n\n // XYZ color spaces\n case 'xyz-d65':\n return { mode: 'xyz65', x: c1, y: c2, z: c3, alpha } as Xyz65\n\n case 'xyz-d50':\n return { mode: 'xyz50', x: c1, y: c2, z: c3, alpha } as Xyz50\n\n // Fallback to sRGB if color space is not recognized\n default:\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n }\n}\n\n/**\n * Convert DTCG color object to hex string\n */\nexport function colorObjectToHex(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n const alpha = color.alpha ?? 1\n\n if (alpha < 1) {\n return formatHex8(culoriColor)\n }\n\n return formatHex(culoriColor)\n}\n","/**\n * @fileoverview Color format conversions that use culori's formatRgb / formatHsl\n * Split from color-converter to avoid pulling these into bundles that only need hex.\n */\n\nimport type { ColorValueObject } from '@shared/token-types'\nimport { formatRgb, formatHsl } from 'culori'\n\nimport { dtcgObjectToCulori } from './color-converter'\n\n/**\n * Convert DTCG color object to rgb/rgba string\n */\nexport function colorObjectToRgb(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n return formatRgb(culoriColor)\n}\n\n/**\n * Convert DTCG color object to hsl/hsla string\n */\nexport function colorObjectToHsl(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n return formatHsl(culoriColor)\n}\n","/**\n * @fileoverview Unified factory for creating color transforms\n * Handles both simple conversions and modern color space transformations\n */\n\nimport { ColorValue, ColorValueObject, ResolvedToken } from '@shared/token-types'\nimport { converter, formatCss, type Mode } from 'culori'\n\nimport { Transform } from '..'\n\nimport { dtcgObjectToCulori as convertDtcgToCulori, isColorObject } from './color-converter'\n\n/**\n * Convert DTCG color value to culori color object\n * Returns null if value is not a ColorValueObject (e.g., unresolved alias reference)\n */\nexport function dtcgObjectToCulori(value: ColorValue) {\n if (!isColorObject(value)) {\n return null\n }\n return convertDtcgToCulori(value)\n}\n\n/**\n * Create a simple color transform with direct string conversion\n * Used for basic color formats (hex, rgb, hsl)\n *\n * @param converter - Function to convert color object to string\n * @returns Transform object\n *\n * @example\n * ```typescript\n * const hexTransform = createColorTransform('color:hex', colorObjectToHex)\n * ```\n */\nexport function createColorTransform(converter: (value: ColorValueObject) => string): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'color',\n transform: (token: ResolvedToken) => {\n const value = token.$value as ColorValue\n\n if (!isColorObject(value)) {\n // String values should be alias references that get resolved before transforms\n return token\n }\n\n try {\n const converted = converter(value)\n return { ...token, $value: converted }\n } catch {\n // If conversion fails, return token unchanged\n return token\n }\n },\n }\n}\n\n/**\n * Create a modern color transform using culori converter\n * Used for CSS Color Module Level 4 color spaces (oklch, oklab, lch, lab, hwb)\n *\n * @param mode - Culori color mode to convert to\n * @returns Transform object\n *\n * @example\n * ```typescript\n * const oklchTransform = createModernColorTransform('color:oklch', 'oklch')\n * ```\n */\nexport function createModernColorTransform(mode: Mode): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'color',\n transform: (token: ResolvedToken) => {\n const value = token.$value as ColorValue\n\n try {\n const parsed = dtcgObjectToCulori(value)\n\n if (parsed === null) {\n return token\n }\n\n // Convert to target color space\n const converted = converter(mode)(parsed)\n const formatted = formatCss(converted)\n\n if (formatted === '') {\n return token\n }\n\n return { ...token, $value: formatted }\n } catch {\n // Gracefully fall back to original token on unsupported color values\n return token\n }\n },\n }\n}\n","/**\n * @fileoverview Built-in color value transforms with alpha channel support\n * Includes both standard (hex, rgb, hsl) and modern CSS Color Module Level 4 transforms\n * Uses culori for accurate color conversions\n *\n * Note: Transforms only handle DTCG object format. String values are alias references\n * that must be resolved before transforms run.\n */\n\nimport type { ColorValue, ResolvedToken } from '@shared/token-types'\nimport { formatCss } from 'culori'\n\nimport type { Transform } from '../types'\n\nimport { colorObjectToHex } from './color-converter'\nimport { colorObjectToHsl, colorObjectToRgb } from './color-format'\nimport {\n createColorTransform,\n createModernColorTransform,\n dtcgObjectToCulori,\n} from './color-transform-factory'\n\n// ============================================================================\n// Standard Color Transforms (hex, rgb, hsl)\n// ============================================================================\n\n/**\n * Convert color to hex format (with alpha support via 8-digit hex)\n */\nexport function colorToHex(): Transform {\n return createColorTransform(colorObjectToHex)\n}\n\n/**\n * Convert color to rgb/rgba format (preserves alpha)\n */\nexport function colorToRgb(): Transform {\n return createColorTransform(colorObjectToRgb)\n}\n\n/**\n * Convert color to hsl/hsla format (preserves alpha)\n */\nexport function colorToHsl(): Transform {\n return createColorTransform(colorObjectToHsl)\n}\n\n// ============================================================================\n// Modern CSS Color Module Level 4 Transforms\n// ============================================================================\n\n/**\n * Convert color to oklch format (perceptual color space)\n */\nexport function colorToOklch(): Transform {\n return createModernColorTransform('oklch')\n}\n\n/**\n * Convert color to oklab format (perceptual color space)\n */\nexport function colorToOklab(): Transform {\n return createModernColorTransform('oklab')\n}\n\n/**\n * Convert color to lch format (CIELAB lightness-chroma-hue)\n */\nexport function colorToLch(): Transform {\n return createModernColorTransform('lch')\n}\n\n/**\n * Convert color to lab format (CIELAB)\n */\nexport function colorToLab(): Transform {\n return createModernColorTransform('lab')\n}\n\n/**\n * Convert color to hwb format (hue-whiteness-blackness)\n */\nexport function colorToHwb(): Transform {\n return createModernColorTransform('hwb')\n}\n\n/**\n * Convert color to CSS color() function format\n * Uses the original color space and formats as CSS color() function\n */\nexport function colorToColorFunction(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'color',\n transform: (token: ResolvedToken) => {\n const value = token.$value as ColorValue\n\n try {\n const parsed = dtcgObjectToCulori(value)\n\n if (parsed === null) {\n return token\n }\n\n // Format as color() function (preserves original color space)\n const formatted = formatCss(parsed)\n\n if (formatted === '') {\n return token\n }\n\n return { ...token, $value: formatted }\n } catch {\n // Gracefully fall back to original token on unsupported color values\n return token\n }\n },\n }\n}\n","/**\n * @fileoverview Global constants\n */\n\n/**\n * Default maximum depth for alias resolution\n * Prevents infinite recursion in circular references\n */\nexport const DEFAULT_MAX_ALIAS_DEPTH = 10\n\n/**\n * Default base font size in pixels for rem/em conversions\n */\nexport const DEFAULT_BASE_FONT_SIZE_PX = 16\n","/**\n * @fileoverview Dimension format conversion utilities for DTCG 2025.10\n * Handles dimension object format { value: number, unit: string }\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue } from '@shared/token-types'\n/**\n * Check if a value is in dimension object format\n */\nexport function isDimensionObject(value: unknown): value is DimensionValue {\n return typeof value === 'object' && value !== null && 'value' in value && 'unit' in value\n}\n\n/**\n * Convert DTCG dimension object to CSS string\n */\nexport function dimensionObjectToString(dimension: DimensionValue): string {\n return `${dimension.value}${dimension.unit}`\n}\n\n/**\n * Convert a DTCG dimension object between units (px, rem).\n *\n * Converts via px as an intermediate: rem -> px -> target.\n * Returns the original value unchanged for unsupported unit combinations.\n *\n * @param value - Source dimension object\n * @param toUnit - Target CSS unit\n * @param baseFontSize - Base font size in px used for rem conversions\n */\nexport function convertDimension(\n value: DimensionValue,\n toUnit: DimensionValue['unit'],\n baseFontSize = DEFAULT_BASE_FONT_SIZE_PX,\n): DimensionValue {\n const fromUnit = value.unit\n let numValue = value.value\n\n // Convert to px first (as intermediate)\n if (fromUnit === 'rem') {\n numValue = numValue * baseFontSize\n } else if (fromUnit !== 'px' && fromUnit !== toUnit) {\n // If not px, rem, or em, and not already target unit, return as-is\n return value\n }\n\n // Convert from px to target unit\n if (toUnit === 'rem') {\n numValue = numValue / baseFontSize\n } else if (toUnit !== 'px') {\n // Can't convert to other units, return original\n return value\n }\n\n return {\n value: numValue,\n unit: toUnit,\n }\n}\n","/**\n * @fileoverview Built-in dimension value transforms\n * Handles DTCG 2025.10 object format { value: number, unit: string }\n * and converts to string format for output\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue, ResolvedToken } from '@shared/token-types'\n\nimport type { Transform } from '../types'\n\nimport { convertDimension, dimensionObjectToString, isDimensionObject } from './dimension-converter'\n/**\n * Convert dimension to px string format\n */\nexport function dimensionToPx(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'dimension',\n transform: (token: ResolvedToken) => {\n const value = token.$value\n\n // If already a string, return as-is\n if (typeof value === 'string') {\n return token\n }\n\n // Convert dimension object to px\n if (isDimensionObject(value)) {\n const converted = convertDimension(value as DimensionValue, 'px', DEFAULT_BASE_FONT_SIZE_PX)\n return { ...token, $value: dimensionObjectToString(converted) }\n }\n\n return token\n },\n }\n}\n\n/**\n * Convert dimension to rem string format\n */\nexport function dimensionToRem(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'dimension',\n transform: (token: ResolvedToken) => {\n const value = token.$value\n\n // If already a string, return as-is\n if (typeof value === 'string') {\n return token\n }\n\n // Convert dimension object to rem\n if (isDimensionObject(value)) {\n const converted = convertDimension(\n value as DimensionValue,\n 'rem',\n DEFAULT_BASE_FONT_SIZE_PX,\n )\n return { ...token, $value: dimensionObjectToString(converted) }\n }\n\n return token\n },\n }\n}\n\n/**\n * Unitless dimension (extract numeric value)\n */\nexport function dimensionToUnitless(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'dimension',\n transform: (token: ResolvedToken) => {\n const value = token.$value\n\n // If already a string, parse out the number\n if (typeof value === 'string') {\n const num = parseFloat(value)\n return { ...token, $value: isNaN(num) ? value : num }\n }\n\n // Extract value from dimension object\n if (isDimensionObject(value)) {\n return { ...token, $value: (value as DimensionValue).value }\n }\n\n return token\n },\n }\n}\n","/**\n * @fileoverview Built-in name transforms using change-case library for robust case conversion\n */\n\nimport { ResolvedToken } from '@shared/token-types'\nimport { camelCase, kebabCase, snakeCase, pascalCase, constantCase } from 'change-case'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert token name to camelCase\n */\nexport function nameCamelCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = camelCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to kebab-case\n */\nexport function nameKebabCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = kebabCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to snake_case\n */\nexport function nameSnakeCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = snakeCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to PascalCase\n */\nexport function namePascalCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = pascalCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to CONSTANT_CASE\n */\nexport function nameConstantCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = constantCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Add prefix to token name\n *\n * @example\n * ```typescript\n * // Add 'ds-' prefix to all token names\n * transforms: [namePrefix('ds-')]\n * // 'color.primary' becomes 'ds-color.primary'\n * ```\n */\nexport function namePrefix(prefix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${prefix}${token.name}`,\n }\n },\n }\n}\n\n/**\n * Add suffix to token name\n *\n * @example\n * ```typescript\n * // Add '-token' suffix to all token names\n * transforms: [nameSuffix('-token')]\n * // 'color.primary' becomes 'color.primary-token'\n * ```\n */\nexport function nameSuffix(suffix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${token.name}${suffix}`,\n }\n },\n }\n}\n","/**\n * @fileoverview Other built-in value transforms\n */\n\nimport { ResolvedToken } from '@shared/token-types'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert font weight to numeric value\n */\nexport function fontWeightToNumber(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'fontWeight',\n transform: (token: ResolvedToken) => {\n const value = token.$value\n\n if (typeof value === 'number') {\n return token\n }\n\n if (typeof value === 'string') {\n const weightMap: Record<string, number> = {\n thin: 100,\n hairline: 100,\n 'extra-light': 200,\n 'ultra-light': 200,\n light: 300,\n normal: 400,\n regular: 400,\n medium: 500,\n 'semi-bold': 600,\n 'demi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n 'ultra-bold': 800,\n black: 900,\n heavy: 900,\n 'extra-black': 950,\n 'ultra-black': 950,\n }\n\n const weight = weightMap[value.toLowerCase()]\n if (weight !== undefined) {\n return { ...token, $value: weight }\n }\n }\n\n return token\n },\n }\n}\n\ntype DurationUnit = 'ms' | 's'\ntype ParsedDuration = { value: number; unit: DurationUnit }\n\n/** Parse a raw duration value (object or string form) into a normalized representation */\nfunction parseDuration(rawValue: unknown): ParsedDuration | null {\n if (\n typeof rawValue === 'object' &&\n rawValue !== null &&\n 'value' in rawValue &&\n 'unit' in rawValue\n ) {\n const unit = (rawValue as { unit: string }).unit\n const numeric = Number((rawValue as { value: unknown }).value)\n if (Number.isFinite(numeric) && (unit === 'ms' || unit === 's')) {\n return { value: numeric, unit }\n }\n return null\n }\n\n const str = typeof rawValue === 'string' || typeof rawValue === 'number' ? String(rawValue) : ''\n if (str.endsWith('ms')) {\n const numeric = parseFloat(str)\n return Number.isFinite(numeric) ? { value: numeric, unit: 'ms' } : null\n }\n if (str.endsWith('s')) {\n const numeric = parseFloat(str)\n return Number.isFinite(numeric) ? { value: numeric, unit: 's' } : null\n }\n\n return null\n}\n\n/** Convert a parsed duration to the target unit */\nfunction convertDurationUnit(parsed: ParsedDuration, target: DurationUnit): ParsedDuration {\n if (parsed.unit === target) {\n return parsed\n }\n return target === 'ms'\n ? { value: parsed.value * 1000, unit: 'ms' }\n : { value: parsed.value / 1000, unit: 's' }\n}\n\n/**\n * Convert duration to milliseconds\n */\nexport function durationToMs(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'duration',\n transform: (token: ResolvedToken) => {\n const parsed = parseDuration(token.$value)\n if (!parsed) {\n return token\n }\n const converted = convertDurationUnit(parsed, 'ms')\n return { ...token, $value: { value: converted.value, unit: converted.unit } }\n },\n }\n}\n\n/**\n * Convert duration to seconds\n */\nexport function durationToSeconds(): Transform {\n return {\n matcher: (token: ResolvedToken) => token.$type === 'duration',\n transform: (token: ResolvedToken) => {\n const parsed = parseDuration(token.$value)\n if (!parsed) {\n return token\n }\n const converted = convertDurationUnit(parsed, 's')\n return { ...token, $value: { value: converted.value, unit: converted.unit } }\n },\n }\n}\n"]}
@@ -81,14 +81,24 @@ var ModifierError = class extends DispersaError {
81
81
  this.name = "ModifierError";
82
82
  }
83
83
  };
84
+ var LintError = class extends DispersaError {
85
+ constructor(issues) {
86
+ const errorCount = issues.filter((i) => i.severity === "error").length;
87
+ const warningCount = issues.filter((i) => i.severity === "warn").length;
88
+ super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`);
89
+ this.issues = issues;
90
+ this.name = "LintError";
91
+ }
92
+ };
84
93
 
85
94
  exports.BasePermutationError = BasePermutationError;
86
95
  exports.CircularReferenceError = CircularReferenceError;
87
96
  exports.ConfigurationError = ConfigurationError;
88
97
  exports.DispersaError = DispersaError;
89
98
  exports.FileOperationError = FileOperationError;
99
+ exports.LintError = LintError;
90
100
  exports.ModifierError = ModifierError;
91
101
  exports.TokenReferenceError = TokenReferenceError;
92
102
  exports.ValidationError = ValidationError;
93
- //# sourceMappingURL=errors.cjs.map
94
- //# sourceMappingURL=errors.cjs.map
103
+ //# sourceMappingURL=index.cjs.map
104
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @fileoverview Error classes - Subpath export for dispersa/errors\n *\n * This is the public entry point when importing from 'dispersa/errors'.\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n *\n * @example\n * ```typescript\n * import { ValidationError, ConfigurationError } from 'dispersa/errors'\n *\n * throw new ValidationError('Invalid token', { message: 'Token missing $value' })\n * ```\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n\n/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\n }\n}\n"]}
@@ -1,9 +1,18 @@
1
1
  /**
2
- * @fileoverview Custom error classes for Dispersa
2
+ * @fileoverview Error classes - Subpath export for dispersa/errors
3
+ *
4
+ * This is the public entry point when importing from 'dispersa/errors'.
3
5
  *
4
6
  * Error classes are intentionally kept as simple value objects with no
5
7
  * imports from utility modules. Suggestion formatting is done at call
6
8
  * sites to keep the error hierarchy dependency-free.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { ValidationError, ConfigurationError } from 'dispersa/errors'
13
+ *
14
+ * throw new ValidationError('Invalid token', { message: 'Token missing $value' })
15
+ * ```
7
16
  */
8
17
  /**
9
18
  * Base error class for all Dispersa errors
@@ -101,4 +110,4 @@ declare class LintError extends DispersaError {
101
110
  }>);
102
111
  }
103
112
 
104
- export { BasePermutationError as B, CircularReferenceError as C, DispersaError as D, FileOperationError as F, LintError as L, ModifierError as M, TokenReferenceError as T, ValidationError as V, ConfigurationError as a };
113
+ export { BasePermutationError, CircularReferenceError, ConfigurationError, DispersaError, FileOperationError, LintError, ModifierError, TokenReferenceError, ValidationError };
@@ -1,9 +1,18 @@
1
1
  /**
2
- * @fileoverview Custom error classes for Dispersa
2
+ * @fileoverview Error classes - Subpath export for dispersa/errors
3
+ *
4
+ * This is the public entry point when importing from 'dispersa/errors'.
3
5
  *
4
6
  * Error classes are intentionally kept as simple value objects with no
5
7
  * imports from utility modules. Suggestion formatting is done at call
6
8
  * sites to keep the error hierarchy dependency-free.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { ValidationError, ConfigurationError } from 'dispersa/errors'
13
+ *
14
+ * throw new ValidationError('Invalid token', { message: 'Token missing $value' })
15
+ * ```
7
16
  */
8
17
  /**
9
18
  * Base error class for all Dispersa errors
@@ -101,4 +110,4 @@ declare class LintError extends DispersaError {
101
110
  }>);
102
111
  }
103
112
 
104
- export { BasePermutationError as B, CircularReferenceError as C, DispersaError as D, FileOperationError as F, LintError as L, ModifierError as M, TokenReferenceError as T, ValidationError as V, ConfigurationError as a };
113
+ export { BasePermutationError, CircularReferenceError, ConfigurationError, DispersaError, FileOperationError, LintError, ModifierError, TokenReferenceError, ValidationError };
@@ -79,7 +79,16 @@ var ModifierError = class extends DispersaError {
79
79
  this.name = "ModifierError";
80
80
  }
81
81
  };
82
+ var LintError = class extends DispersaError {
83
+ constructor(issues) {
84
+ const errorCount = issues.filter((i) => i.severity === "error").length;
85
+ const warningCount = issues.filter((i) => i.severity === "warn").length;
86
+ super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`);
87
+ this.issues = issues;
88
+ this.name = "LintError";
89
+ }
90
+ };
82
91
 
83
- export { BasePermutationError, CircularReferenceError, ConfigurationError, DispersaError, FileOperationError, ModifierError, TokenReferenceError, ValidationError };
84
- //# sourceMappingURL=errors.js.map
85
- //# sourceMappingURL=errors.js.map
92
+ export { BasePermutationError, CircularReferenceError, ConfigurationError, DispersaError, FileOperationError, LintError, ModifierError, TokenReferenceError, ValidationError };
93
+ //# sourceMappingURL=index.js.map
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview Error classes - Subpath export for dispersa/errors\n *\n * This is the public entry point when importing from 'dispersa/errors'.\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n *\n * @example\n * ```typescript\n * import { ValidationError, ConfigurationError } from 'dispersa/errors'\n *\n * throw new ValidationError('Invalid token', { message: 'Token missing $value' })\n * ```\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n\n/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\n }\n}\n"]}