@attrx/role-morphic 0.1.0 → 0.2.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/roles/area/validate.ts","../src/roles/length/validate.ts","../src/roles/mass/validate.ts","../src/roles/temperature/constants.ts","../src/roles/temperature/validate.ts","../src/roles/volume/validate.ts","../src/roles/speed/validate.ts","../src/roles/energy/validate.ts","../src/roles/power/validate.ts","../src/roles/pressure/validate.ts","../src/roles/frequency/validate.ts","../src/roles/angle/validate.ts","../src/roles/time/validate.ts","../src/roles/digital/validate.ts","../src/roles/color/validate.ts","../src/roles/date/validate.ts","../src/roles/currency/validate.ts"],"names":[],"mappings":";;;AAsCO,IAAM,sBAA+C,GAAA;AAAA,EAC1D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA;AACZ;AAkBO,SAAS,YAAA,CACd,KACA,EAAA,MAAA,GAA+B,sBACb,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,WAAA,CACd,KACA,EAAA,MAAA,GAA+B,sBACtB,EAAA;AACT,EAAO,OAAA,YAAA,CAAa,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACrC;;;ACxEO,IAAM,wBAAmD,GAAA;AAAA,EAC9D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA;AACZ;AAkBO,SAAS,cAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACf,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACxB,EAAA;AACT,EAAO,OAAA,cAAA,CAAe,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACvC;;;AC1EO,IAAM,sBAA+C,GAAA;AAAA,EAC1D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA;AACZ;AAkBO,SAAS,YAAA,CACd,KACA,EAAA,MAAA,GAA+B,sBACb,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,WAAA,CACd,KACA,EAAA,MAAA,GAA+B,sBACtB,EAAA;AACT,EAAO,OAAA,YAAA,CAAa,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACrC;ACAO,IAAM,qBAAwB,GAAA;AAAA;AAAA,EAEnC,qBAAuB,EAAA,OAAA;AAAA;AAAA,EAEvB,wBAA0B,EAAA,OAS5B,CAAA;;;AC3EO,IAAM,aAAiD,GAAA;AAAA,EAC5D,SAAS,qBAAsB,CAAA,qBAAA;AAAA,EAC/B,YAAY,qBAAsB,CAAA,wBAAA;AAAA,EAClC,MAAQ,EAAA,CAAA;AAAA,EACR,OAAS,EAAA;AACX,CAAA;AAKA,IAAM,YAAgD,GAAA;AAAA,EACpD,OAAS,EAAA,OAAA;AAAA,EACT,UAAY,EAAA,OAAA;AAAA,EACZ,MAAQ,EAAA,GAAA;AAAA,EACR,OAAS,EAAA;AACX,CAAA;AAqBO,SAAS,oBACd,KACA,EAAA,IAAA,GAAwB,SACxB,EAAA,MAAA,GAAsC,EACpB,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAI,IAAA,CAAC,OAAO,sBAAwB,EAAA;AAClC,IAAM,MAAA,YAAA,GAAe,cAAc,IAAI,CAAA;AACvC,IAAA,IAAI,QAAQ,YAAc,EAAA;AACxB,MAAM,MAAA,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,MAAO,MAAA,CAAA,IAAA;AAAA,QACL,CAAA,2CAAA,EAA8C,YAAY,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,OACrE;AAAA;AACF;AAIF,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAGjB,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAeO,SAAS,mBACd,KACA,EAAA,IAAA,GAAwB,SACxB,EAAA,MAAA,GAAsC,EAC7B,EAAA;AACT,EAAA,OAAO,mBAAoB,CAAA,KAAA,EAAO,IAAM,EAAA,MAAM,CAAE,CAAA,KAAA;AAClD;;;ACvGO,IAAM,wBAAmD,GAAA;AAAA,EAC9D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA;AACZ;AAkBO,SAAS,cAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACf,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACxB,EAAA;AACT,EAAO,OAAA,cAAA,CAAe,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACvC;;;ACtEO,IAAM,0BAAiD,EAAC;AAkBxD,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAgC,uBACd,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,YAAA,CACd,KACA,EAAA,MAAA,GAAgC,uBACvB,EAAA;AACT,EAAO,OAAA,aAAA,CAAc,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACtC;;;ACzEO,IAAM,wBAAmD,GAAA;AAAA,EAC9D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA;AACZ;AAkBO,SAAS,cAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACf,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,OAAW,IAAA,CAAC,MAAO,CAAA,SAAA,CAAU,KAAK,CAAG,EAAA;AAC9C,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA;AAGxC,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAiC,wBACxB,EAAA;AACT,EAAO,OAAA,cAAA,CAAe,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACvC;;;ACvEO,IAAM,uBAAiD,GAAA;AAAA,EAC5D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,0BAAA;AAAA,EACV,aAAe,EAAA;AACjB;AAmBO,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAgC,uBACd,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,MAAM,eAAkB,GAAA,EAAE,GAAG,uBAAA,EAAyB,GAAG,MAAO,EAAA;AAGhE,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC/C,IAAO,MAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,IAAY,0BAA0B,CAAA;AAAA;AAIpE,EAAA,IACE,gBAAgB,aAChB,IAAA,eAAA,CAAgB,QAAQ,MACxB,IAAA,KAAA,GAAQ,gBAAgB,GACxB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAIzF,EAAA,IAAI,eAAgB,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,gBAAgB,GAAK,EAAA;AACpE,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAGxF,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAaO,SAAS,YAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,aAAA,CAAc,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACtC;;;ACjFO,IAAM,0BAAuD,GAAA;AAAA,EAClE,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,6BAAA;AAAA,EACV,aAAe,EAAA;AACjB;AAmBO,SAAS,gBAAA,CACd,KACA,EAAA,MAAA,GAAmC,0BACjB,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,MAAM,eAAkB,GAAA,EAAE,GAAG,0BAAA,EAA4B,GAAG,MAAO,EAAA;AAGnE,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC/C,IAAO,MAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,IAAY,6BAA6B,CAAA;AAAA;AAIvE,EAAA,IACE,gBAAgB,aAChB,IAAA,eAAA,CAAgB,QAAQ,MACxB,IAAA,KAAA,GAAQ,gBAAgB,GACxB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAIzF,EAAA,IAAI,eAAgB,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,gBAAgB,GAAK,EAAA;AACpE,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAGxF,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAaO,SAAS,eAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACzC;;;ACjFO,IAAM,2BAAyD,GAAA;AAAA,EACpE,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,8BAAA;AAAA,EACV,aAAe,EAAA;AACjB;AAmBO,SAAS,iBAAA,CACd,KACA,EAAA,MAAA,GAAoC,2BAClB,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,MAAM,eAAkB,GAAA,EAAE,GAAG,2BAAA,EAA6B,GAAG,MAAO,EAAA;AAGpE,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC/C,IAAO,MAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,IAAY,8BAA8B,CAAA;AAAA;AAIxE,EAAA,IACE,gBAAgB,aAChB,IAAA,eAAA,CAAgB,QAAQ,MACxB,IAAA,KAAA,GAAQ,gBAAgB,GACxB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAIzF,EAAA,IAAI,eAAgB,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,gBAAgB,GAAK,EAAA;AACpE,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAGxF,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAaO,SAAS,gBAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,iBAAA,CAAkB,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AAC1C;;;AC/EO,IAAM,0BAAiD,EAAC;AAmBxD,SAAS,aAAA,CACd,KACA,EAAA,MAAA,GAAgC,uBACd,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAA,CAAO,KAAK,MAAO,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,MAAA,CAAO,GAAG,CAAE,CAAA,CAAA;AAAA;AAIvE,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAA,CAAO,KAAK,MAAO,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,MAAA,CAAO,GAAG,CAAE,CAAA,CAAA;AAAA;AAGtE,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAcO,SAAS,YAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,aAAA,CAAc,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACtC;;;ACpEO,IAAM,sBAA+C,GAAA;AAAA,EAC1D,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,yBAAA;AAAA,EACV,aAAe,EAAA;AACjB;AAkBO,SAAS,YAAA,CACd,KACA,EAAA,MAAA,GAA+B,sBACb,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,MAAM,eAAkB,GAAA,EAAE,GAAG,sBAAA,EAAwB,GAAG,MAAO,EAAA;AAG/D,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC/C,IAAO,MAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,IAAY,yBAAyB,CAAA;AAAA;AAInE,EAAA,IACE,gBAAgB,aAChB,IAAA,eAAA,CAAgB,QAAQ,MACxB,IAAA,KAAA,GAAQ,gBAAgB,GACxB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAIzF,EAAA,IAAI,eAAgB,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,gBAAgB,GAAK,EAAA;AACpE,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAGxF,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAaO,SAAS,WAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,YAAA,CAAa,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACrC;;;AChFO,IAAM,yBAAqD,GAAA;AAAA,EAChE,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,oCAAA;AAAA,EACV,aAAe,EAAA;AACjB;AAkBO,SAAS,eAAA,CACd,KACA,EAAA,MAAA,GAAkC,yBAChB,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA,IAAY,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+BAA+B;AAAA,KAC1C;AAAA;AAIF,EAAA,MAAM,eAAkB,GAAA,EAAE,GAAG,yBAAA,EAA2B,GAAG,MAAO,EAAA;AAGlE,EAAA,IAAI,CAAC,eAAA,CAAgB,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC/C,IAAO,MAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,QAAA,IAAY,oCAAoC,CAAA;AAAA;AAI9E,EAAA,IACE,gBAAgB,aAChB,IAAA,eAAA,CAAgB,QAAQ,MACxB,IAAA,KAAA,GAAQ,gBAAgB,GACxB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAA0B,uBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAIzF,EAAA,IAAI,eAAgB,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,gBAAgB,GAAK,EAAA;AACpE,IAAA,MAAA,CAAO,KAAK,eAAgB,CAAA,QAAA,IAAY,CAAyB,sBAAA,EAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA;AAAA;AAGxF,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,OAAO,MAAW,KAAA,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAaO,SAAS,cAAA,CACd,OACA,MACS,EAAA;AACT,EAAO,OAAA,eAAA,CAAgB,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACxC;;;AC9FA,IAAM,WAAc,GAAA,kBAAA;AACpB,IAAM,WAAc,GAAA,kBAAA;AACpB,IAAM,WAAc,GAAA,kBAAA;AACpB,IAAM,WAAc,GAAA,kBAAA;AACpB,IAAM,gBAAmB,GAAA,8DAAA;AACzB,IAAM,gBAAmB,GAAA,2EAAA;AASlB,SAAS,YAAY,KAAkC,EAAA;AAC5D,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA;AAE3B,EAAA,IACE,CAAC,WAAY,CAAA,IAAA,CAAK,OAAO,CACzB,IAAA,CAAC,YAAY,IAAK,CAAA,OAAO,KACzB,CAAC,WAAA,CAAY,KAAK,OAAO,CAAA,IACzB,CAAC,WAAY,CAAA,IAAA,CAAK,OAAO,CACzB,EAAA;AACA,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAKO,SAAS,kBAAkB,KAAkC,EAAA;AAClE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,IAAM,EAAA;AAC/C,IAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC1C,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,MAAM,GAAM,GAAA,KAAA;AAGZ,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAEzD,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAEzD,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAGzD,EAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,MAAM,EAAE,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,GAAM,GAAA,GAAA;AAGvB,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,KAAM,WAAc,OAAO,CAAA,KAAM,YAAY,CAAI,GAAA,CAAA,IAAK,IAAI,CAAI,CAAA,EAAA;AAChE,IAAA,MAAA,CAAO,KAAK,0CAA0C,CAAA;AAAA;AAGxD,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAKO,SAAS,kBAAkB,KAAkC,EAAA;AAClE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,6BAA6B,CAAA;AACzC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA;AAE3B,EAAA,IAAI,CAAC,gBAAA,CAAiB,IAAK,CAAA,OAAO,CAAG,EAAA;AACnC,IAAA,MAAA,CAAO,KAAK,2BAA2B,CAAA;AACvC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAKO,SAAS,kBAAkB,KAAkC,EAAA;AAClE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,IAAM,EAAA;AAC/C,IAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC1C,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,MAAM,GAAM,GAAA,KAAA;AAGZ,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAEzD,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAEzD,EAAI,IAAA,OAAO,GAAI,CAAA,CAAA,KAAM,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA;AAGzD,EAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,MAAM,EAAE,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,GAAM,GAAA,GAAA;AAGvB,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,GAAK,EAAA;AACpB,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA;AAEjD,EAAI,IAAA,CAAA,KAAM,WAAc,OAAO,CAAA,KAAM,YAAY,CAAI,GAAA,CAAA,IAAK,IAAI,CAAI,CAAA,EAAA;AAChE,IAAA,MAAA,CAAO,KAAK,0CAA0C,CAAA;AAAA;AAGxD,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAKO,SAAS,kBAAkB,KAAkC,EAAA;AAClE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,6BAA6B,CAAA;AACzC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA;AAE3B,EAAA,IAAI,CAAC,gBAAA,CAAiB,IAAK,CAAA,OAAO,CAAG,EAAA;AACnC,IAAA,MAAA,CAAO,KAAK,2BAA2B,CAAA;AACvC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAoBO,SAAS,aAAA,CAAc,SAAuB,KAAkC,EAAA;AACrF,EAAA,QAAQ,OAAS;AAAA,IACf,KAAK,KAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA;AAAA,IAC1B,KAAK,YAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,YAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,YAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,YAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC;AACE,MAAO,OAAA,EAAE,OAAO,KAAO,EAAA,MAAA,EAAQ,CAAC,CAA0B,uBAAA,EAAA,OAAO,EAAE,CAAE,EAAA;AAAA;AAE3E;AASO,SAAS,mBAAA,CAAoB,SAAuB,KAAyB,EAAA;AAClF,EAAO,OAAA,aAAA,CAAc,OAAS,EAAA,KAAK,CAAE,CAAA,KAAA;AACvC;;;ACzNA,IAAM,mBAAsB,GAAA,sCAAA;AAC5B,IAAM,mBAAsB,GAAA,qBAAA;AASrB,SAAS,YAAY,KAAkC,EAAA;AAC5D,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,2BAA2B,CAAA;AACvC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA;AAG3B,EAAI,IAAA,CAAC,oBAAoB,IAAK,CAAA,OAAO,KAAK,CAAC,mBAAA,CAAoB,IAAK,CAAA,OAAO,CAAG,EAAA;AAC5E,IAAA,MAAA,CAAO,KAAK,yBAAyB,CAAA;AACrC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAIhC,EAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,OAAO,CAAA;AAC7B,EAAA,IAAI,KAAM,CAAA,IAAA,CAAK,OAAQ,EAAC,CAAG,EAAA;AACzB,IAAA,MAAA,CAAO,KAAK,oBAAoB,CAAA;AAChC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAKO,SAAS,kBAAkB,KAAkC,EAAA;AAClE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAC/C,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAU,CAAA,KAAK,CAAG,EAAA;AAC5B,IAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC1C,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAKO,SAAS,cAAc,KAAkC,EAAA;AAC9D,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAA,CAAO,KAAK,wBAAwB,CAAA;AACpC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAA,CAAO,KAAK,+BAA+B,CAAA;AAC3C,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAU,CAAA,KAAK,CAAG,EAAA;AAC5B,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,IAAO,OAAA,EAAE,KAAO,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA;AAGhC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,EAAG,EAAA;AACnC;AAoBO,SAAS,YAAA,CAAa,SAAsB,KAAkC,EAAA;AACnF,EAAA,QAAQ,OAAS;AAAA,IACf,KAAK,KAAA;AACH,MAAA,OAAO,YAAY,KAAK,CAAA;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,OAAA;AACH,MAAA,OAAO,cAAc,KAAK,CAAA;AAAA,IAC5B;AACE,MAAO,OAAA,EAAE,OAAO,KAAO,EAAA,MAAA,EAAQ,CAAC,CAAyB,sBAAA,EAAA,OAAO,EAAE,CAAE,EAAA;AAAA;AAE1E;AASO,SAAS,WAAA,CAAY,SAAsB,KAAyB,EAAA;AACzE,EAAO,OAAA,YAAA,CAAa,OAAS,EAAA,KAAK,CAAE,CAAA,KAAA;AACtC;;;ACrGO,IAAM,0BAAuD,GAAA;AAAA,EAClE,GAAK,EAAA,CAAA;AAAA,EACL,aAAe,EAAA,KAAA;AAAA,EACf,QAAU,EAAA;AACZ;AAoBO,SAAS,gBAAA,CACd,KACA,EAAA,MAAA,GAAmC,0BACjB,EAAA;AAClB,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,wBAAwB,CAAE,EAAA;AAAA;AAI5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,OAAO,EAAE,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,CAAC,sBAAsB,CAAE,EAAA;AAAA;AAI1D,EAAA,IAAI,CAAC,MAAA,CAAO,aAAiB,IAAA,KAAA,GAAQ,CAAG,EAAA;AACtC,IAAM,MAAA,GAAA,GAAM,OAAO,QAAY,IAAA,mCAAA;AAC/B,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,OAAO,aAAiB,IAAA,MAAA,CAAO,QAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAC1E,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,uBAAA,EAA0B,OAAO,GAAG,CAAA,CAAA;AACnE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAA,IAAI,MAAO,CAAA,GAAA,KAAQ,MAAa,IAAA,KAAA,GAAQ,OAAO,GAAK,EAAA;AAClD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAY,IAAA,CAAA,sBAAA,EAAyB,OAAO,GAAG,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AAIjB,EAAI,IAAA,MAAA,CAAO,aAAa,MAAW,EAAA;AACjC,IAAM,MAAA,aAAA,GAAgB,mBAAmB,KAAK,CAAA;AAC9C,IAAI,IAAA,aAAA,GAAgB,OAAO,QAAU,EAAA;AACnC,MAAO,MAAA,CAAA,IAAA;AAAA,QACL,CAAA,wCAAA,EAA2C,OAAO,QAAQ,CAAA,CAAA;AAAA,OAC5D;AAAA;AACF;AAGF,EAAA,OAAO,EAAE,KAAA,EAAO,MAAO,CAAA,MAAA,KAAW,GAAG,MAAO,EAAA;AAC9C;AAaO,SAAS,eAAA,CACd,KACA,EAAA,MAAA,GAAmC,0BAC1B,EAAA;AACT,EAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,MAAM,CAAE,CAAA,KAAA;AACzC;AASA,SAAS,mBAAmB,KAAuB,EAAA;AACjD,EAAI,IAAA,MAAA,CAAO,SAAU,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAO,OAAA,CAAA;AAAA;AAGT,EAAM,MAAA,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAM,MAAA,YAAA,GAAe,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA;AAEpC,EAAA,IAAI,iBAAiB,EAAI,EAAA;AACvB,IAAO,OAAA,CAAA;AAAA;AAGT,EAAO,OAAA,GAAA,CAAI,SAAS,YAAe,GAAA,CAAA;AACrC","file":"validate.js","sourcesContent":["/**\n * Area Role - Validate Pillar\n *\n * Validação semântica de valores de área.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateArea, isValidArea } from '@attrx/role-morphic/area/validate';\n *\n * validateArea(100); // { valid: true, errors: [] }\n * validateArea(-5); // { valid: false, errors: ['Area cannot be negative'] }\n * isValidArea(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface AreaValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para área\n */\nexport const AREA_VALIDATION_CONFIG: AreaValidationConfig = {\n min: 0,\n minError: \"Area cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de área\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateArea(100); // { valid: true, errors: [] }\n * validateArea(-5); // { valid: false, errors: ['Area cannot be negative'] }\n * validateArea(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateArea(\n value: unknown,\n config: AreaValidationConfig = AREA_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de área é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidArea(100); // true\n * isValidArea(-5); // false\n */\nexport function isValidArea(\n value: unknown,\n config: AreaValidationConfig = AREA_VALIDATION_CONFIG\n): boolean {\n return validateArea(value, config).valid;\n}\n","/**\n * Length Role - Validate Pillar\n *\n * Validação semântica de valores de comprimento.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateLength, isValidLength } from '@attrx/role-morphic/length/validate';\n *\n * validateLength(100); // { valid: true, errors: [] }\n * validateLength(-5); // { valid: false, errors: ['Length cannot be negative'] }\n * isValidLength(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface LengthValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para comprimento\n * Length é magnitude escalar, portanto não-negativo por padrão\n */\nexport const LENGTH_VALIDATION_CONFIG: LengthValidationConfig = {\n min: 0,\n minError: \"Length cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de comprimento\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateLength(100); // { valid: true, errors: [] }\n * validateLength(-5); // { valid: false, errors: ['Length cannot be negative'] }\n * validateLength(-5, { min: undefined }); // { valid: true, errors: [] } - permite negativo\n */\nexport function validateLength(\n value: unknown,\n config: LengthValidationConfig = LENGTH_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de comprimento é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidLength(100); // true\n * isValidLength(-5); // false\n */\nexport function isValidLength(\n value: unknown,\n config: LengthValidationConfig = LENGTH_VALIDATION_CONFIG\n): boolean {\n return validateLength(value, config).valid;\n}\n","/**\n * Mass Role - Validate Pillar\n *\n * Validação semântica de valores de massa.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateMass, isValidMass } from '@attrx/role-morphic/mass/validate';\n *\n * validateMass(100); // { valid: true, errors: [] }\n * validateMass(-5); // { valid: false, errors: ['Mass cannot be negative'] }\n * isValidMass(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface MassValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para massa\n */\nexport const MASS_VALIDATION_CONFIG: MassValidationConfig = {\n min: 0,\n minError: \"Mass cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de massa\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateMass(100); // { valid: true, errors: [] }\n * validateMass(-5); // { valid: false, errors: ['Mass cannot be negative'] }\n * validateMass(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateMass(\n value: unknown,\n config: MassValidationConfig = MASS_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de massa é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidMass(100); // true\n * isValidMass(-5); // false\n */\nexport function isValidMass(\n value: unknown,\n config: MassValidationConfig = MASS_VALIDATION_CONFIG\n): boolean {\n return validateMass(value, config).valid;\n}\n","/**\n * Temperature Role - Constants\n *\n * Fórmulas de conversão, símbolos e aliases para unidades de temperatura.\n *\n * IMPORTANTE: Temperatura usa FÓRMULAS, não fatores multiplicativos.\n * Isso porque as escalas têm offsets diferentes (0°C ≠ 0°F ≠ 0K).\n *\n * Fontes:\n * - NIST SP 811 (2008)\n * - SI Brochure, 9th Edition (2019)\n */\n\nimport type { SimpleUnitConfig, UnitAliases } from \"../../contracts\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type TemperatureUnit = \"celsius\" | \"fahrenheit\" | \"kelvin\" | \"rankine\";\n\n// =============================================================================\n// UNITS CONFIG\n// =============================================================================\n\n/**\n * Configuração de cada unidade de temperatura.\n *\n * Base: celsius (°C)\n *\n * Fórmulas de conversão:\n * - Celsius ↔ Fahrenheit: °F = °C × 9/5 + 32\n * - Celsius ↔ Kelvin: K = °C + 273.15\n * - Celsius ↔ Rankine: °R = (°C + 273.15) × 9/5\n *\n * Pontos de referência:\n * | Descrição | Celsius | Fahrenheit | Kelvin | Rankine |\n * |------------------|---------|------------|---------|---------|\n * | Zero absoluto | -273.15 | -459.67 | 0 | 0 |\n * | Congelamento H₂O | 0 | 32 | 273.15 | 491.67 |\n * | Corpo humano | 37 | 98.6 | 310.15 | 558.27 |\n * | Ebulição H₂O | 100 | 212 | 373.15 | 671.67 |\n */\nexport const TEMPERATURE_UNITS: Record<TemperatureUnit, SimpleUnitConfig> = {\n celsius: {\n symbol: \"°C\",\n singular: \"degree Celsius\",\n plural: \"degrees Celsius\",\n toBase: (c: number) => c,\n fromBase: (c: number) => c,\n noSpace: true, // 25°C não 25 °C\n },\n fahrenheit: {\n symbol: \"°F\",\n singular: \"degree Fahrenheit\",\n plural: \"degrees Fahrenheit\",\n toBase: (f: number) => (f - 32) * (5 / 9),\n fromBase: (c: number) => c * (9 / 5) + 32,\n noSpace: true, // 77°F não 77 °F\n },\n kelvin: {\n symbol: \"K\",\n singular: \"kelvin\",\n plural: \"kelvins\",\n toBase: (k: number) => k - 273.15,\n fromBase: (c: number) => c + 273.15,\n // Kelvin usa espaço: \"273 K\" (convenção SI)\n },\n rankine: {\n symbol: \"°R\",\n singular: \"degree Rankine\",\n plural: \"degrees Rankine\",\n toBase: (r: number) => (r - 491.67) * (5 / 9),\n fromBase: (c: number) => (c + 273.15) * (9 / 5),\n noSpace: true, // 500°R não 500 °R\n },\n};\n\n// =============================================================================\n// ALIASES\n// =============================================================================\n\n/**\n * Aliases para reconhecimento de unidades no cast\n */\nexport const TEMPERATURE_ALIASES: UnitAliases = {\n // celsius\n c: \"celsius\",\n \"°c\": \"celsius\",\n // fahrenheit\n f: \"fahrenheit\",\n \"°f\": \"fahrenheit\",\n // kelvin\n k: \"kelvin\",\n // rankine\n r: \"rankine\",\n \"°r\": \"rankine\",\n};\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Lista de todas as unidades */\nexport const TEMPERATURE_UNIT_LIST = Object.keys(\n TEMPERATURE_UNITS,\n) as TemperatureUnit[];\n\n/**\n * Constantes importantes\n */\nexport const TEMPERATURE_CONSTANTS = {\n /** Zero absoluto em Celsius */\n ABSOLUTE_ZERO_CELSIUS: -273.15,\n /** Zero absoluto em Fahrenheit */\n ABSOLUTE_ZERO_FAHRENHEIT: -459.67,\n /** Offset Celsius → Kelvin */\n CELSIUS_TO_KELVIN_OFFSET: 273.15,\n /** Offset Fahrenheit → Rankine (são a mesma escala, só diferente offset) */\n FAHRENHEIT_TO_RANKINE_OFFSET: 459.67,\n /** Ponto de congelamento da água em Fahrenheit */\n WATER_FREEZING_FAHRENHEIT: 32,\n /** Ponto de ebulição da água em Fahrenheit */\n WATER_BOILING_FAHRENHEIT: 212,\n} as const;\n","/**\n * Temperature Role - Validate Pillar\n *\n * Validação semântica de valores de temperatura.\n * Zero dependências externas - pode ser usado standalone.\n *\n * IMPORTANTE: Temperatura não pode ser abaixo do zero absoluto.\n * O zero absoluto varia por escala:\n * - Celsius: -273.15°C\n * - Fahrenheit: -459.67°F\n * - Kelvin: 0K\n * - Rankine: 0°R\n *\n * @example\n * import { validateTemperature, isValidTemperature } from '@attrx/role-morphic/temperature/validate';\n *\n * validateTemperature(100, 'celsius'); // { valid: true, errors: [] }\n * validateTemperature(-300, 'celsius'); // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(-10, 'kelvin'); // { valid: false, errors: ['...below absolute zero...'] }\n * isValidTemperature(100, 'celsius'); // true\n */\n\nimport { type TemperatureUnit, TEMPERATURE_CONSTANTS } from \"./constants\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface TemperatureValidationConfig {\n /** Permite temperaturas abaixo do zero absoluto (default: false) */\n allowBelowAbsoluteZero?: boolean;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para max */\n maxError?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/**\n * Zero absoluto em cada escala\n */\nexport const ABSOLUTE_ZERO: Record<TemperatureUnit, number> = {\n celsius: TEMPERATURE_CONSTANTS.ABSOLUTE_ZERO_CELSIUS,\n fahrenheit: TEMPERATURE_CONSTANTS.ABSOLUTE_ZERO_FAHRENHEIT,\n kelvin: 0,\n rankine: 0,\n};\n\n/**\n * Símbolos para mensagens de erro\n */\nconst UNIT_SYMBOLS: Record<TemperatureUnit, string> = {\n celsius: \"°C\",\n fahrenheit: \"°F\",\n kelvin: \"K\",\n rankine: \"°R\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de temperatura\n *\n * @param value - Valor a ser validado\n * @param unit - Unidade do valor (default: celsius)\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateTemperature(100, 'celsius'); // { valid: true, errors: [] }\n * validateTemperature(-300, 'celsius'); // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(-10, 'kelvin'); // { valid: false, errors: ['...below absolute zero...'] }\n * validateTemperature(0, 'kelvin'); // { valid: true, errors: [] } (0K = zero absoluto)\n * validateTemperature(-459.67, 'fahrenheit'); // { valid: true, errors: [] } (zero absoluto em °F)\n */\nexport function validateTemperature(\n value: unknown,\n unit: TemperatureUnit = \"celsius\",\n config: TemperatureValidationConfig = {}\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Absolute zero check (unless explicitly allowed)\n if (!config.allowBelowAbsoluteZero) {\n const absoluteZero = ABSOLUTE_ZERO[unit];\n if (value < absoluteZero) {\n const symbol = UNIT_SYMBOLS[unit];\n errors.push(\n `Temperature cannot be below absolute zero (${absoluteZero}${symbol})`\n );\n }\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de temperatura é válido\n *\n * @param value - Valor a ser validado\n * @param unit - Unidade do valor (default: celsius)\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidTemperature(100, 'celsius'); // true\n * isValidTemperature(-300, 'celsius'); // false\n * isValidTemperature(-10, 'kelvin'); // false\n */\nexport function isValidTemperature(\n value: unknown,\n unit: TemperatureUnit = \"celsius\",\n config: TemperatureValidationConfig = {}\n): boolean {\n return validateTemperature(value, unit, config).valid;\n}\n\n/**\n * Retorna o zero absoluto na escala especificada\n *\n * @example\n * getAbsoluteZero('celsius'); // -273.15\n * getAbsoluteZero('fahrenheit'); // -459.67\n * getAbsoluteZero('kelvin'); // 0\n */\nexport function getAbsoluteZero(unit: TemperatureUnit): number {\n return ABSOLUTE_ZERO[unit];\n}\n","/**\n * Volume Role - Validate Pillar\n *\n * Validação semântica de valores de volume.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateVolume, isValidVolume } from '@attrx/role-morphic/volume/validate';\n *\n * validateVolume(100); // { valid: true, errors: [] }\n * validateVolume(-5); // { valid: false, errors: ['Volume cannot be negative'] }\n * isValidVolume(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface VolumeValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para volume\n */\nexport const VOLUME_VALIDATION_CONFIG: VolumeValidationConfig = {\n min: 0,\n minError: \"Volume cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de volume\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateVolume(100); // { valid: true, errors: [] }\n * validateVolume(-5); // { valid: false, errors: ['Volume cannot be negative'] }\n * validateVolume(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateVolume(\n value: unknown,\n config: VolumeValidationConfig = VOLUME_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de volume é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidVolume(100); // true\n * isValidVolume(-5); // false\n */\nexport function isValidVolume(\n value: unknown,\n config: VolumeValidationConfig = VOLUME_VALIDATION_CONFIG\n): boolean {\n return validateVolume(value, config).valid;\n}\n","/**\n * Speed Role - Validate Pillar\n *\n * Validação semântica de valores de velocidade.\n * Zero dependências externas - pode ser usado standalone.\n *\n * Nota: Velocidade pode ser negativa (movimento em direção oposta).\n *\n * @example\n * import { validateSpeed, isValidSpeed } from '@attrx/role-morphic/speed/validate';\n *\n * validateSpeed(100); // { valid: true, errors: [] }\n * validateSpeed(-50); // { valid: true, errors: [] } (negativo é válido)\n * isValidSpeed(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface SpeedValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para velocidade\n * Nota: sem min/max por padrão - velocidade pode ser qualquer valor finito\n */\nexport const SPEED_VALIDATION_CONFIG: SpeedValidationConfig = {};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de velocidade\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateSpeed(100); // { valid: true, errors: [] }\n * validateSpeed(-50); // { valid: true, errors: [] }\n * validateSpeed(150, { max: 120 }) // { valid: false, errors: ['Value must be at most 120'] }\n */\nexport function validateSpeed(\n value: unknown,\n config: SpeedValidationConfig = SPEED_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de velocidade é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidSpeed(100); // true\n * isValidSpeed(-50); // true (negativo é válido)\n */\nexport function isValidSpeed(\n value: unknown,\n config: SpeedValidationConfig = SPEED_VALIDATION_CONFIG\n): boolean {\n return validateSpeed(value, config).valid;\n}\n","/**\n * Energy Role - Validate Pillar\n *\n * Validação semântica de valores de energia.\n * Zero dependências externas - pode ser usado standalone.\n *\n * @example\n * import { validateEnergy, isValidEnergy } from '@attrx/role-morphic/energy/validate';\n *\n * validateEnergy(100); // { valid: true, errors: [] }\n * validateEnergy(-5); // { valid: false, errors: ['Energy cannot be negative'] }\n * isValidEnergy(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface EnergyValidationConfig {\n min?: number;\n max?: number;\n integer?: boolean;\n minError?: string;\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para energia\n */\nexport const ENERGY_VALIDATION_CONFIG: EnergyValidationConfig = {\n min: 0,\n minError: \"Energy cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de energia\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateEnergy(100); // { valid: true, errors: [] }\n * validateEnergy(-5); // { valid: false, errors: ['Energy cannot be negative'] }\n * validateEnergy(150, { max: 100 }) // { valid: false, errors: ['Value must be at most 100'] }\n */\nexport function validateEnergy(\n value: unknown,\n config: EnergyValidationConfig = ENERGY_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Min check\n if (config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Integer check\n if (config.integer && !Number.isInteger(value)) {\n errors.push(\"Value must be an integer\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor de energia é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidEnergy(100); // true\n * isValidEnergy(-5); // false\n */\nexport function isValidEnergy(\n value: unknown,\n config: EnergyValidationConfig = ENERGY_VALIDATION_CONFIG\n): boolean {\n return validateEnergy(value, config).valid;\n}\n","/**\n * Power Role - Validate Pillar\n *\n * Validação de valores de potência.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validatePower, isValidPower } from '@attrx/role-morphic/power/validate';\n *\n * validatePower(100); // { valid: true, errors: [] }\n * validatePower(-5); // { valid: false, errors: ['Power cannot be negative'] }\n * isValidPower(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface PowerValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n /** Permitir valores negativos (default: false) */\n allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const POWER_VALIDATION_CONFIG: PowerValidationConfig = {\n min: 0,\n minError: \"Power cannot be negative\",\n allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de potência\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validatePower(100); // { valid: true, errors: [] }\n * validatePower(-5); // { valid: false, errors: ['Power cannot be negative'] }\n * validatePower(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validatePower(1000, { max: 500 }); // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validatePower(\n value: unknown,\n config: PowerValidationConfig = POWER_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Merge with defaults\n const effectiveConfig = { ...POWER_VALIDATION_CONFIG, ...config };\n\n // Check negative\n if (!effectiveConfig.allowNegative && value < 0) {\n errors.push(effectiveConfig.minError || \"Power cannot be negative\");\n }\n\n // Check min (if allowNegative is true and min is set)\n if (\n effectiveConfig.allowNegative &&\n effectiveConfig.min !== undefined &&\n value < effectiveConfig.min\n ) {\n errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n }\n\n // Check max\n if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de potência é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidPower(100); // true\n * isValidPower(-5); // false\n */\nexport function isValidPower(\n value: unknown,\n config?: PowerValidationConfig,\n): boolean {\n return validatePower(value, config).valid;\n}\n","/**\n * Pressure Role - Validate Pillar\n *\n * Validação de valores de pressão.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validatePressure, isValidPressure } from '@attrx/role-morphic/pressure/validate';\n *\n * validatePressure(100); // { valid: true, errors: [] }\n * validatePressure(-5); // { valid: false, errors: ['Pressure cannot be negative'] }\n * isValidPressure(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface PressureValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n /** Permitir valores negativos (default: false) */\n allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const PRESSURE_VALIDATION_CONFIG: PressureValidationConfig = {\n min: 0,\n minError: \"Pressure cannot be negative\",\n allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de pressão\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validatePressure(100); // { valid: true, errors: [] }\n * validatePressure(-5); // { valid: false, errors: ['Pressure cannot be negative'] }\n * validatePressure(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validatePressure(1000, { max: 500 }); // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validatePressure(\n value: unknown,\n config: PressureValidationConfig = PRESSURE_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Merge with defaults\n const effectiveConfig = { ...PRESSURE_VALIDATION_CONFIG, ...config };\n\n // Check negative\n if (!effectiveConfig.allowNegative && value < 0) {\n errors.push(effectiveConfig.minError || \"Pressure cannot be negative\");\n }\n\n // Check min (if allowNegative is true and min is set)\n if (\n effectiveConfig.allowNegative &&\n effectiveConfig.min !== undefined &&\n value < effectiveConfig.min\n ) {\n errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n }\n\n // Check max\n if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de pressão é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidPressure(100); // true\n * isValidPressure(-5); // false\n */\nexport function isValidPressure(\n value: unknown,\n config?: PressureValidationConfig,\n): boolean {\n return validatePressure(value, config).valid;\n}\n","/**\n * Frequency Role - Validate Pillar\n *\n * Validação de valores de frequência.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateFrequency, isValidFrequency } from '@attrx/role-morphic/frequency/validate';\n *\n * validateFrequency(100); // { valid: true, errors: [] }\n * validateFrequency(-5); // { valid: false, errors: ['Frequency cannot be negative'] }\n * isValidFrequency(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface FrequencyValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n /** Permitir valores negativos (default: false) */\n allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const FREQUENCY_VALIDATION_CONFIG: FrequencyValidationConfig = {\n min: 0,\n minError: \"Frequency cannot be negative\",\n allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de frequência\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateFrequency(100); // { valid: true, errors: [] }\n * validateFrequency(-5); // { valid: false, errors: ['Frequency cannot be negative'] }\n * validateFrequency(-5, { allowNegative: true }); // { valid: true, errors: [] }\n * validateFrequency(1000, { max: 500 }); // { valid: false, errors: ['Value must be at most 500'] }\n */\nexport function validateFrequency(\n value: unknown,\n config: FrequencyValidationConfig = FREQUENCY_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Merge with defaults\n const effectiveConfig = { ...FREQUENCY_VALIDATION_CONFIG, ...config };\n\n // Check negative\n if (!effectiveConfig.allowNegative && value < 0) {\n errors.push(effectiveConfig.minError || \"Frequency cannot be negative\");\n }\n\n // Check min (if allowNegative is true and min is set)\n if (\n effectiveConfig.allowNegative &&\n effectiveConfig.min !== undefined &&\n value < effectiveConfig.min\n ) {\n errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n }\n\n // Check max\n if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de frequência é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidFrequency(100); // true\n * isValidFrequency(-5); // false\n */\nexport function isValidFrequency(\n value: unknown,\n config?: FrequencyValidationConfig,\n): boolean {\n return validateFrequency(value, config).valid;\n}\n","/**\n * Angle Role - Validate Pillar\n *\n * Validação de valores de ângulo.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * Nota: Ângulos podem ser negativos (rotação anti-horária) e maiores que 360° (múltiplas voltas).\n *\n * @example\n * import { validateAngle, isValidAngle } from '@attrx/role-morphic/angle/validate';\n *\n * validateAngle(90); // { valid: true, errors: [] }\n * validateAngle(-45); // { valid: true, errors: [] }\n * validateAngle(720); // { valid: true, errors: [] }\n * isValidAngle(90); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface AngleValidationConfig {\n /** Valor mínimo permitido */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\n/** Ângulos não têm restrições por padrão - podem ser negativos e > 360° */\nexport const ANGLE_VALIDATION_CONFIG: AngleValidationConfig = {};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de ângulo\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateAngle(90); // { valid: true, errors: [] }\n * validateAngle(-45); // { valid: true, errors: [] }\n * validateAngle(90, { max: 180 }); // { valid: true, errors: [] }\n * validateAngle(270, { max: 180 }); // { valid: false, errors: ['...'] }\n */\nexport function validateAngle(\n value: unknown,\n config: AngleValidationConfig = ANGLE_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Check min\n if (config.min !== undefined && value < config.min) {\n errors.push(config.minError || `Value must be at least ${config.min}`);\n }\n\n // Check max\n if (config.max !== undefined && value > config.max) {\n errors.push(config.maxError || `Value must be at most ${config.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de ângulo é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidAngle(90); // true\n * isValidAngle(-45); // true\n * isValidAngle(NaN); // false\n */\nexport function isValidAngle(\n value: unknown,\n config?: AngleValidationConfig,\n): boolean {\n return validateAngle(value, config).valid;\n}\n","/**\n * Time Role - Validate Pillar\n *\n * Validação de valores de tempo/duração.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateTime, isValidTime } from '@attrx/role-morphic/time/validate';\n *\n * validateTime(100); // { valid: true, errors: [] }\n * validateTime(-5); // { valid: false, errors: ['Time cannot be negative'] }\n * isValidTime(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface TimeValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n /** Permitir valores negativos (default: false) */\n allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const TIME_VALIDATION_CONFIG: TimeValidationConfig = {\n min: 0,\n minError: \"Time cannot be negative\",\n allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de tempo\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateTime(100); // { valid: true, errors: [] }\n * validateTime(-5); // { valid: false, errors: ['Time cannot be negative'] }\n * validateTime(-5, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateTime(\n value: unknown,\n config: TimeValidationConfig = TIME_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Merge with defaults\n const effectiveConfig = { ...TIME_VALIDATION_CONFIG, ...config };\n\n // Check negative\n if (!effectiveConfig.allowNegative && value < 0) {\n errors.push(effectiveConfig.minError || \"Time cannot be negative\");\n }\n\n // Check min (if allowNegative is true and min is set)\n if (\n effectiveConfig.allowNegative &&\n effectiveConfig.min !== undefined &&\n value < effectiveConfig.min\n ) {\n errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n }\n\n // Check max\n if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de tempo é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidTime(100); // true\n * isValidTime(-5); // false\n */\nexport function isValidTime(\n value: unknown,\n config?: TimeValidationConfig,\n): boolean {\n return validateTime(value, config).valid;\n}\n","/**\n * Digital Role - Validate Pillar\n *\n * Validação de valores de armazenamento digital.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateDigital, isValidDigital } from '@attrx/role-morphic/digital/validate';\n *\n * validateDigital(100); // { valid: true, errors: [] }\n * validateDigital(-5); // { valid: false, errors: ['Digital storage cannot be negative'] }\n * isValidDigital(100); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface DigitalValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Mensagem de erro para valor abaixo do mínimo */\n minError?: string;\n /** Mensagem de erro para valor acima do máximo */\n maxError?: string;\n /** Permitir valores negativos (default: false) */\n allowNegative?: boolean;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// =============================================================================\n// DEFAULT CONFIG\n// =============================================================================\n\nexport const DIGITAL_VALIDATION_CONFIG: DigitalValidationConfig = {\n min: 0,\n minError: \"Digital storage cannot be negative\",\n allowNegative: false,\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor de armazenamento digital\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns Resultado da validação com lista de erros\n *\n * @example\n * validateDigital(100); // { valid: true, errors: [] }\n * validateDigital(-5); // { valid: false, errors: ['Digital storage cannot be negative'] }\n * validateDigital(-5, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateDigital(\n value: unknown,\n config: DigitalValidationConfig = DIGITAL_VALIDATION_CONFIG,\n): ValidationResult {\n const errors: string[] = [];\n\n // Must be a number\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return {\n valid: false,\n errors: [\"Value must be a finite number\"],\n };\n }\n\n // Merge with defaults\n const effectiveConfig = { ...DIGITAL_VALIDATION_CONFIG, ...config };\n\n // Check negative\n if (!effectiveConfig.allowNegative && value < 0) {\n errors.push(effectiveConfig.minError || \"Digital storage cannot be negative\");\n }\n\n // Check min (if allowNegative is true and min is set)\n if (\n effectiveConfig.allowNegative &&\n effectiveConfig.min !== undefined &&\n value < effectiveConfig.min\n ) {\n errors.push(effectiveConfig.minError || `Value must be at least ${effectiveConfig.min}`);\n }\n\n // Check max\n if (effectiveConfig.max !== undefined && value > effectiveConfig.max) {\n errors.push(effectiveConfig.maxError || `Value must be at most ${effectiveConfig.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Verifica se valor de armazenamento digital é válido (helper booleano)\n *\n * @param value - Valor a validar\n * @param config - Configuração de validação (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidDigital(100); // true\n * isValidDigital(-5); // false\n */\nexport function isValidDigital(\n value: unknown,\n config?: DigitalValidationConfig,\n): boolean {\n return validateDigital(value, config).valid;\n}\n","/**\n * Color Role - Validate Pillar\n *\n * Validação de valores de cor.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateColor, isValidColor } from '@attrx/role-morphic/color/validate';\n *\n * validateColor('hex', '#ff0000'); // { valid: true, errors: [] }\n * validateColor('rgb_object', { r: 255, g: 0, b: 0 }); // { valid: true, errors: [] }\n * validateColor('hex', 'invalid'); // { valid: false, errors: [...] }\n */\n\nimport type { ColorVariant, RGBA, ColorRgbObject, ColorHslObject } from \"./types\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ValidationResult = { valid: boolean; errors: string[] };\n\n// =============================================================================\n// REGEX PATTERNS\n// =============================================================================\n\nconst HEX_3_REGEX = /^#?[0-9a-f]{3}$/i;\nconst HEX_4_REGEX = /^#?[0-9a-f]{4}$/i;\nconst HEX_6_REGEX = /^#?[0-9a-f]{6}$/i;\nconst HEX_8_REGEX = /^#?[0-9a-f]{8}$/i;\nconst RGB_STRING_REGEX = /^rgba?\\s*\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*[\\d.]+\\s*)?\\)$/i;\nconst HSL_STRING_REGEX = /^hsla?\\s*\\(\\s*[\\d.]+\\s*,\\s*[\\d.]+%?\\s*,\\s*[\\d.]+%?\\s*(,\\s*[\\d.]+\\s*)?\\)$/i;\n\n// =============================================================================\n// VALIDATE BY VARIANT\n// =============================================================================\n\n/**\n * Valida valor hex\n */\nexport function validateHex(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"string\") {\n errors.push(\"Hex color must be a string\");\n return { valid: false, errors };\n }\n\n const trimmed = value.trim();\n\n if (\n !HEX_3_REGEX.test(trimmed) &&\n !HEX_4_REGEX.test(trimmed) &&\n !HEX_6_REGEX.test(trimmed) &&\n !HEX_8_REGEX.test(trimmed)\n ) {\n errors.push(\"Invalid hex color format\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor RGB object\n */\nexport function validateRgbObject(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"object\" || value === null) {\n errors.push(\"RGB object must be an object\");\n return { valid: false, errors };\n }\n\n const obj = value as Record<string, unknown>;\n\n // Verifica propriedades obrigatórias\n if (typeof obj.r !== \"number\") {\n errors.push(\"RGB object must have numeric 'r' property\");\n }\n if (typeof obj.g !== \"number\") {\n errors.push(\"RGB object must have numeric 'g' property\");\n }\n if (typeof obj.b !== \"number\") {\n errors.push(\"RGB object must have numeric 'b' property\");\n }\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n const { r, g, b, a } = obj as unknown as ColorRgbObject;\n\n // Valida ranges\n if (r < 0 || r > 255) {\n errors.push(\"RGB 'r' must be between 0 and 255\");\n }\n if (g < 0 || g > 255) {\n errors.push(\"RGB 'g' must be between 0 and 255\");\n }\n if (b < 0 || b > 255) {\n errors.push(\"RGB 'b' must be between 0 and 255\");\n }\n if (a !== undefined && (typeof a !== \"number\" || a < 0 || a > 1)) {\n errors.push(\"RGB 'a' must be a number between 0 and 1\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Valida valor RGB string\n */\nexport function validateRgbString(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"string\") {\n errors.push(\"RGB string must be a string\");\n return { valid: false, errors };\n }\n\n const trimmed = value.trim();\n\n if (!RGB_STRING_REGEX.test(trimmed)) {\n errors.push(\"Invalid RGB string format\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor HSL object\n */\nexport function validateHslObject(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"object\" || value === null) {\n errors.push(\"HSL object must be an object\");\n return { valid: false, errors };\n }\n\n const obj = value as Record<string, unknown>;\n\n // Verifica propriedades obrigatórias\n if (typeof obj.h !== \"number\") {\n errors.push(\"HSL object must have numeric 'h' property\");\n }\n if (typeof obj.s !== \"number\") {\n errors.push(\"HSL object must have numeric 's' property\");\n }\n if (typeof obj.l !== \"number\") {\n errors.push(\"HSL object must have numeric 'l' property\");\n }\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n const { h, s, l, a } = obj as unknown as ColorHslObject;\n\n // Valida ranges\n if (h < 0 || h > 360) {\n errors.push(\"HSL 'h' must be between 0 and 360\");\n }\n if (s < 0 || s > 100) {\n errors.push(\"HSL 's' must be between 0 and 100\");\n }\n if (l < 0 || l > 100) {\n errors.push(\"HSL 'l' must be between 0 and 100\");\n }\n if (a !== undefined && (typeof a !== \"number\" || a < 0 || a > 1)) {\n errors.push(\"HSL 'a' must be a number between 0 and 1\");\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Valida valor HSL string\n */\nexport function validateHslString(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"string\") {\n errors.push(\"HSL string must be a string\");\n return { valid: false, errors };\n }\n\n const trimmed = value.trim();\n\n if (!HSL_STRING_REGEX.test(trimmed)) {\n errors.push(\"Invalid HSL string format\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n// =============================================================================\n// MAIN VALIDATE\n// =============================================================================\n\n/**\n * Valida valor de cor para uma variante específica\n *\n * @param variant - Variante a validar\n * @param value - Valor a validar\n * @returns Resultado da validação\n *\n * @example\n * validateColor('hex', '#ff0000');\n * // { valid: true, errors: [] }\n *\n * validateColor('hex', 'invalid');\n * // { valid: false, errors: ['Invalid hex color format'] }\n */\nexport function validateColor(variant: ColorVariant, value: unknown): ValidationResult {\n switch (variant) {\n case \"hex\":\n return validateHex(value);\n case \"rgb_object\":\n return validateRgbObject(value);\n case \"rgb_string\":\n return validateRgbString(value);\n case \"hsl_object\":\n return validateHslObject(value);\n case \"hsl_string\":\n return validateHslString(value);\n default:\n return { valid: false, errors: [`Unknown color variant: ${variant}`] };\n }\n}\n\n/**\n * Verifica se valor é válido para uma variante específica (retorna boolean)\n *\n * @example\n * isValidColorVariant('hex', '#ff0000'); // true\n * isValidColorVariant('hex', 'invalid'); // false\n */\nexport function isValidColorVariant(variant: ColorVariant, value: unknown): boolean {\n return validateColor(variant, value).valid;\n}\n\n/**\n * Verifica se variante existe\n */\nexport function hasColorVariant(variant: string): variant is ColorVariant {\n return (\n variant === \"hex\" ||\n variant === \"rgb_object\" ||\n variant === \"rgb_string\" ||\n variant === \"hsl_object\" ||\n variant === \"hsl_string\"\n );\n}\n\n/**\n * Lista de variantes disponíveis\n */\nexport const COLOR_VARIANTS: ColorVariant[] = [\n \"hex\",\n \"rgb_object\",\n \"rgb_string\",\n \"hsl_object\",\n \"hsl_string\",\n];\n","/**\n * Date Role - Validate Pillar\n *\n * Validação de valores de data.\n * ZERO dependências de outros pilares - totalmente standalone.\n *\n * @example\n * import { validateDate, isValidDate } from '@attrx/role-morphic/date/validate';\n *\n * validateDate('iso', '2024-12-05T19:30:00.000Z'); // { valid: true, errors: [] }\n * validateDate('timestamp', 1733425800000); // { valid: true, errors: [] }\n * validateDate('epoch', 1733425800); // { valid: true, errors: [] }\n */\n\nimport type { DateVariant } from \"./types\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ValidationResult = { valid: boolean; errors: string[] };\n\n// =============================================================================\n// REGEX PATTERNS\n// =============================================================================\n\nconst ISO_DATE_TIME_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\nconst ISO_DATE_ONLY_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n// =============================================================================\n// VALIDATE BY VARIANT\n// =============================================================================\n\n/**\n * Valida valor ISO 8601\n */\nexport function validateIso(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"string\") {\n errors.push(\"ISO date must be a string\");\n return { valid: false, errors };\n }\n\n const trimmed = value.trim();\n\n // Verifica se é um formato ISO válido\n if (!ISO_DATE_TIME_REGEX.test(trimmed) && !ISO_DATE_ONLY_REGEX.test(trimmed)) {\n errors.push(\"Invalid ISO 8601 format\");\n return { valid: false, errors };\n }\n\n // Verifica se a data é parseável\n const date = new Date(trimmed);\n if (isNaN(date.getTime())) {\n errors.push(\"Invalid date value\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor timestamp (milissegundos)\n */\nexport function validateTimestamp(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"number\") {\n errors.push(\"Timestamp must be a number\");\n return { valid: false, errors };\n }\n\n if (!Number.isFinite(value)) {\n errors.push(\"Timestamp must be a finite number\");\n return { valid: false, errors };\n }\n\n if (!Number.isInteger(value)) {\n errors.push(\"Timestamp must be an integer\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n/**\n * Valida valor epoch (segundos)\n */\nexport function validateEpoch(value: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof value !== \"number\") {\n errors.push(\"Epoch must be a number\");\n return { valid: false, errors };\n }\n\n if (!Number.isFinite(value)) {\n errors.push(\"Epoch must be a finite number\");\n return { valid: false, errors };\n }\n\n if (!Number.isInteger(value)) {\n errors.push(\"Epoch must be an integer\");\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n}\n\n// =============================================================================\n// MAIN VALIDATE\n// =============================================================================\n\n/**\n * Valida valor de data para uma variante específica\n *\n * @param variant - Variante a validar (\"iso\", \"timestamp\", \"epoch\")\n * @param value - Valor a validar\n * @returns Resultado da validação\n *\n * @example\n * validateDate('iso', '2024-12-05T19:30:00.000Z');\n * // { valid: true, errors: [] }\n *\n * validateDate('iso', 'invalid');\n * // { valid: false, errors: ['Invalid ISO 8601 format'] }\n */\nexport function validateDate(variant: DateVariant, value: unknown): ValidationResult {\n switch (variant) {\n case \"iso\":\n return validateIso(value);\n case \"timestamp\":\n return validateTimestamp(value);\n case \"epoch\":\n return validateEpoch(value);\n default:\n return { valid: false, errors: [`Unknown date variant: ${variant}`] };\n }\n}\n\n/**\n * Verifica se valor é válido (retorna boolean)\n *\n * @example\n * isValidDate('iso', '2024-12-05T19:30:00.000Z'); // true\n * isValidDate('iso', 'invalid'); // false\n */\nexport function isValidDate(variant: DateVariant, value: unknown): boolean {\n return validateDate(variant, value).valid;\n}\n\n/**\n * Verifica se variante existe\n */\nexport function hasDateVariant(variant: string): variant is DateVariant {\n return variant === \"iso\" || variant === \"timestamp\" || variant === \"epoch\";\n}\n","/**\n * Currency Role - Validate Pillar\n *\n * Validação semântica de valores monetários.\n * Zero dependências externas - pode ser usado standalone.\n *\n * Currency valida o VALOR NUMÉRICO, não o tipo de moeda.\n * O código da moeda é metadata, usado apenas para formatação.\n *\n * @example\n * import { validateCurrency, isValidCurrency } from '@attrx/role-morphic/currency/validate';\n *\n * validateCurrency(100.50); // { valid: true, errors: [] }\n * validateCurrency(-50); // { valid: false, errors: ['Currency value cannot be negative'] }\n * validateCurrency(100.999, { decimals: 2 }); // { valid: false, errors: ['...too many decimal places'] }\n * isValidCurrency(100.50); // true\n */\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface CurrencyValidationConfig {\n /** Valor mínimo permitido (default: 0) */\n min?: number;\n /** Valor máximo permitido */\n max?: number;\n /** Máximo de casas decimais (default: sem limite) */\n decimals?: number;\n /** Permite valores negativos? (default: false) */\n allowNegative?: boolean;\n /** Mensagem de erro para min */\n minError?: string;\n /** Mensagem de erro para max */\n maxError?: string;\n}\n\n// =============================================================================\n// CONFIG\n// =============================================================================\n\n/**\n * Configuração padrão de validação para currency\n */\nexport const CURRENCY_VALIDATION_CONFIG: CurrencyValidationConfig = {\n min: 0,\n allowNegative: false,\n minError: \"Currency value cannot be negative\",\n};\n\n// =============================================================================\n// VALIDATE\n// =============================================================================\n\n/**\n * Valida um valor monetário\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns Resultado da validação com erros se houver\n *\n * @example\n * validateCurrency(100.50); // { valid: true, errors: [] }\n * validateCurrency(-50); // { valid: false, errors: ['Currency value cannot be negative'] }\n * validateCurrency(100.999, { decimals: 2 }); // { valid: false, errors: ['Value has too many decimal places (max: 2)'] }\n * validateCurrency(1000000, { max: 10000 }); // { valid: false, errors: ['Value must be at most 10000'] }\n * validateCurrency(-50, { allowNegative: true }); // { valid: true, errors: [] }\n */\nexport function validateCurrency(\n value: unknown,\n config: CurrencyValidationConfig = CURRENCY_VALIDATION_CONFIG\n): ValidationResult {\n const errors: string[] = [];\n\n // Type check\n if (typeof value !== \"number\") {\n return { valid: false, errors: [\"Value must be a number\"] };\n }\n\n // Finite check\n if (!Number.isFinite(value)) {\n return { valid: false, errors: [\"Value must be finite\"] };\n }\n\n // Negative check (se não permitido)\n if (!config.allowNegative && value < 0) {\n const msg = config.minError ?? \"Currency value cannot be negative\";\n errors.push(msg);\n }\n\n // Min check (se allowNegative, pode ter min customizado)\n if (config.allowNegative && config.min !== undefined && value < config.min) {\n const msg = config.minError ?? `Value must be at least ${config.min}`;\n errors.push(msg);\n }\n\n // Max check\n if (config.max !== undefined && value > config.max) {\n const msg = config.maxError ?? `Value must be at most ${config.max}`;\n errors.push(msg);\n }\n\n // Decimals check\n if (config.decimals !== undefined) {\n const decimalPlaces = countDecimalPlaces(value);\n if (decimalPlaces > config.decimals) {\n errors.push(\n `Value has too many decimal places (max: ${config.decimals})`\n );\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifica se um valor monetário é válido\n *\n * @param value - Valor a ser validado\n * @param config - Configuração customizada (opcional)\n * @returns true se válido, false caso contrário\n *\n * @example\n * isValidCurrency(100.50); // true\n * isValidCurrency(-50); // false\n */\nexport function isValidCurrency(\n value: unknown,\n config: CurrencyValidationConfig = CURRENCY_VALIDATION_CONFIG\n): boolean {\n return validateCurrency(value, config).valid;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/**\n * Conta casas decimais de um número\n */\nfunction countDecimalPlaces(value: number): number {\n if (Number.isInteger(value)) {\n return 0;\n }\n\n const str = String(value);\n const decimalIndex = str.indexOf(\".\");\n\n if (decimalIndex === -1) {\n return 0;\n }\n\n return str.length - decimalIndex - 1;\n}\n"]}