@titan-design/react-ui 0.2.7 → 0.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 (82) hide show
  1. package/dist/bodymap-BhG55xHM.d.mts +318 -0
  2. package/dist/bodymap-BhG55xHM.d.ts +318 -0
  3. package/dist/bodymap.d.mts +3 -0
  4. package/dist/bodymap.d.ts +3 -0
  5. package/dist/bodymap.js +2670 -0
  6. package/dist/bodymap.js.map +1 -0
  7. package/dist/bodymap.mjs +1101 -0
  8. package/dist/bodymap.mjs.map +1 -0
  9. package/dist/{chunk-5SSKGS6E.mjs → chunk-7XPB4NAO.mjs} +124 -4
  10. package/dist/chunk-7XPB4NAO.mjs.map +1 -0
  11. package/dist/{chunk-3VLOBS6O.mjs → chunk-P7TSQUN6.mjs} +3 -3
  12. package/dist/{chunk-3VLOBS6O.mjs.map → chunk-P7TSQUN6.mjs.map} +1 -1
  13. package/dist/chunk-TOD2WQBG.mjs +1048 -0
  14. package/dist/chunk-TOD2WQBG.mjs.map +1 -0
  15. package/dist/index.d.mts +375 -249
  16. package/dist/index.d.ts +375 -249
  17. package/dist/index.js +1259 -918
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +1314 -2107
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/theme/index.d.mts +260 -0
  22. package/dist/theme/index.d.ts +260 -0
  23. package/dist/theme/index.js +122 -2
  24. package/dist/theme/index.js.map +1 -1
  25. package/dist/theme/index.mjs +2 -2
  26. package/dist/theme/tokens-css.d.mts +5 -3
  27. package/dist/theme/tokens-css.d.ts +5 -3
  28. package/dist/theme/tokens-css.js +318 -9
  29. package/dist/theme/tokens-css.js.map +1 -1
  30. package/dist/theme/tokens-css.mjs +1 -1
  31. package/dist/theme/tokens-css.mjs.map +1 -1
  32. package/package.json +10 -1
  33. package/src/bodymap.ts +37 -0
  34. package/src/components/custom/Table/Table.test.tsx +27 -0
  35. package/src/components/custom/Table/Table.tsx +33 -17
  36. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +118 -0
  37. package/src/components/custom/Workout/ActiveWorkoutPage.test.tsx +171 -0
  38. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +447 -0
  39. package/src/components/custom/Workout/BodyMap.tsx +5 -6
  40. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +7 -8
  41. package/src/components/custom/Workout/CapacityBandChart.tsx +1 -1
  42. package/src/components/custom/Workout/ExerciseCard.test.tsx +24 -0
  43. package/src/components/custom/Workout/ExerciseCard.tsx +28 -15
  44. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +225 -0
  45. package/src/components/custom/Workout/ExerciseDetailPage.test.tsx +128 -0
  46. package/src/components/custom/Workout/ExerciseDetailPage.tsx +630 -0
  47. package/src/components/custom/Workout/InputBar.tsx +6 -7
  48. package/src/components/custom/Workout/MesoCard.tsx +4 -2
  49. package/src/components/custom/Workout/MesoProgressBar.test.tsx +12 -0
  50. package/src/components/custom/Workout/MesoProgressBar.tsx +5 -1
  51. package/src/components/custom/Workout/MesoStatusCard.tsx +5 -5
  52. package/src/components/custom/Workout/PlaceholderStrip.tsx +2 -3
  53. package/src/components/custom/Workout/PrHistoryModal.tsx +5 -5
  54. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +257 -0
  55. package/src/components/custom/Workout/ProgramPlanningPage.test.tsx +142 -0
  56. package/src/components/custom/Workout/ProgramPlanningPage.tsx +422 -0
  57. package/src/components/custom/Workout/ReadinessCheck.tsx +7 -8
  58. package/src/components/custom/Workout/RestTimer.test.tsx +10 -0
  59. package/src/components/custom/Workout/RestTimer.tsx +11 -9
  60. package/src/components/custom/Workout/SetRow.tsx +13 -19
  61. package/src/components/custom/Workout/StatusDot.tsx +1 -0
  62. package/src/components/custom/Workout/StrengthTrendChart.tsx +5 -5
  63. package/src/components/custom/Workout/TempoDisplay.tsx +3 -1
  64. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +212 -0
  65. package/src/components/custom/Workout/TrainingStatusPage.test.tsx +131 -0
  66. package/src/components/custom/Workout/TrainingStatusPage.tsx +321 -0
  67. package/src/components/custom/Workout/VelocityStrip.test.tsx +10 -0
  68. package/src/components/custom/Workout/VelocityStrip.tsx +16 -15
  69. package/src/components/custom/Workout/WeekRow.tsx +1 -1
  70. package/src/components/custom/Workout/WorkoutCard.tsx +5 -3
  71. package/src/components/custom/Workout/index.ts +71 -32
  72. package/src/theme/config.completeness.test.ts +77 -0
  73. package/src/theme/config.ts +151 -0
  74. package/src/theme/manifest/design-freeze.test.ts +155 -0
  75. package/src/theme/manifest/extract-css-properties.fixture.html +29 -0
  76. package/src/theme/manifest/extract-css-properties.test.ts +112 -0
  77. package/src/theme/tokens-css.ts +5 -3
  78. package/src/theme/workout-tokens.ts +12 -14
  79. package/src/utils/index.ts +10 -0
  80. package/src/utils/workout-format.test.ts +81 -0
  81. package/src/utils/workout-format.ts +83 -0
  82. package/dist/chunk-5SSKGS6E.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/custom/Workout/muscleTaxonomy.ts","../src/components/custom/Workout/BodyMap.tsx","../src/components/custom/Workout/BodyMapDetailPanel.tsx","../src/components/custom/Workout/TrainingStatusPage.tsx"],"names":["MuscleGroup","SimpleMuscleGroup","TEXT_PRIMARY","TEXT_SECONDARY","useState","Animated","useEffect","Easing","View","Pressable","Text","SURFACE_ELEVATED","BORDER_DEFAULT","TEXT_TERTIARY","useMemo"],"mappings":";;;;;;;;AAgBO,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AAEL,EAAAA,aAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,aAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,aAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AAGX,EAAAA,aAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AAGT,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AAtBD,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA4BL,IAAK,iBAAA,qBAAAC,kBAAAA,KAAL;AACL,EAAAA,mBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,mBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,mBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,mBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,mBAAA,UAAA,CAAA,GAAW,UAAA;AARD,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAYL,IAAM,kBAAA,GAA+D;AAAA,EAC1E,CAAC,OAAA,eAA0B,CAAC,OAAA,aAAiB;AAAA,EAC7C,CAAC,MAAA,cAAyB,CAAC,mBAAkB,YAAA,kBAAsB;AAAA,EACnE,CAAC,8BAA8B;AAAA,IAC7B,aAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,GACF;AAAA,EACA,CAAC,QAAA,gBAA2B,CAAC,QAAA,cAAkB;AAAA,EAC/C,CAAC,SAAA,iBAA4B,CAAC,SAAA,eAAmB;AAAA,EACjD,CAAC,oBAAyB;AAAA,IACxB,OAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,GACF;AAAA,EACA,CAAC,MAAA,cAAyB,CAAC,iBAAiB,UAAA,gBAAoB;AAAA,EAChE,CAAC,UAAA,kBAA6B,CAAC,UAAA;AACjC;AAGO,IAAM,qBAA6D,MAAA,CAAO,OAAA;AAAA,EAC/E;AACF,CAAA,CAAE,MAAA;AAAA,EACA,CAAC,GAAA,EAAK,CAAC,MAAA,EAAQ,MAAM,CAAA,KAAM;AACzB,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AAAA,IACf;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAAA,EACA;AACF;AAKO,IAAM,kBAAA,GAA4D;AAAA,EACvE,CAAC,sBAAoB,MAAA;AAAA,EACrB,CAAC,kCAA0B,MAAA;AAAA,EAC3B,CAAC,gCAAyB,MAAA;AAAA,EAC1B,CAAC,0BAAsB,MAAA;AAAA,EACvB,CAAC,oBAAmB,MAAA;AAAA,EACpB,CAAC,gCAAyB,MAAA;AAAA,EAC1B,CAAC,gCAAyB,MAAA;AAAA,EAC1B,CAAC,wBAAqB,MAAA;AAAA,EACtB,CAAC,4BAAuB,MAAA;AAAA,EACxB,CAAC,sBAAoB,MAAA;AAAA,EACrB,CAAC,gCAAyB,MAAA;AAAA,EAC1B,CAAC,wBAAqB,MAAA;AAAA,EACtB,CAAC,wBAAqB,MAAA;AAAA,EACtB,CAAC,kBAAkB,MAAA;AAAA,EACnB,CAAC,4BAAuB;AAC1B;AAOO,IAAM,mBAAA,GAAqD;AAAA,EAChE,CAAC,OAAA,eAAoB,CAAC,OAAO,CAAA;AAAA,EAC7B,CAAC,aAAA,qBAA0B,CAAC,UAAU,CAAA;AAAA,EACtC,CAAC,YAAA,oBAAyB,CAAC,UAAU,CAAA;AAAA,EACrC,CAAC,YAAA,oBAAyB,CAAC,UAAU,CAAA;AAAA,EACrC,CAAC,SAAA,iBAAsB,CAAC,SAAS,CAAA;AAAA,EACjC,CAAC,MAAA,cAAmB,CAAC,YAAY,CAAA;AAAA,EACjC,CAAC,YAAA,oBAAyB,CAAC,cAAc,WAAW,CAAA;AAAA,EACpD,CAAC,QAAA,gBAAqB,CAAC,QAAQ,CAAA;AAAA,EAC/B,CAAC,UAAA,kBAAuB,CAAC,SAAS,CAAA;AAAA,EAClC,CAAC,OAAA,eAAoB,CAAC,YAAY,CAAA;AAAA,EAClC,CAAC,YAAA,oBAAyB,CAAC,WAAW,CAAA;AAAA,EACtC,CAAC,QAAA,gBAAqB,CAAC,SAAS,CAAA;AAAA,EAChC,CAAC,QAAA,gBAAqB,CAAC,QAAQ,CAAA;AAAA,EAC/B,CAAC,KAAA,aAAkB,CAAC,KAAK,CAAA;AAAA,EACzB,CAAC,UAAA,kBAAuB,CAAC,UAAU;AACrC;AAGO,IAAM,oBAAA,GAAoD;AAAA,EAC/D,CAAC,sBAAoB,OAAA;AAAA,EACrB,CAAC,kCAA0B,aAAA;AAAA,EAC3B,CAAC,gCAAyB,YAAA;AAAA,EAC1B,CAAC,gCAAyB,YAAA;AAAA,EAC1B,CAAC,0BAAsB,SAAA;AAAA,EACvB,CAAC,oBAAmB,MAAA;AAAA,EACpB,CAAC,gCAAyB,YAAA;AAAA,EAC1B,CAAC,wBAAqB,QAAA;AAAA,EACtB,CAAC,4BAAuB,UAAA;AAAA,EACxB,CAAC,sBAAoB,OAAA;AAAA,EACrB,CAAC,gCAAyB,YAAA;AAAA,EAC1B,CAAC,wBAAqB,QAAA;AAAA,EACtB,CAAC,wBAAqB,QAAA;AAAA,EACtB,CAAC,kBAAkB,KAAA;AAAA,EACnB,CAAC,4BAAuB;AAC1B;AAGO,IAAM,oBAAA,GAA0D;AAAA,EACrE,CAAC,sBAA0B,OAAA;AAAA,EAC3B,CAAC,oBAAyB,MAAA;AAAA,EAC1B,CAAC,8BAA8B,WAAA;AAAA,EAC/B,CAAC,wBAA2B,QAAA;AAAA,EAC5B,CAAC,0BAA4B,SAAA;AAAA,EAC7B,CAAC,oBAAyB,MAAA;AAAA,EAC1B,CAAC,oBAAyB,MAAA;AAAA,EAC1B,CAAC,4BAA6B;AAChC;AASO,IAAM,wBAAA,GAAiE;AAAA,EAC5E,CAAC,sBAAoB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EAChD,CAAC,oBAAmB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EAC/C,CAAC,gCAAyB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACrD,CAAC,kCAA0B,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAG;AAAA,EACrD,CAAC,gCAAyB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACrD,CAAC,gCAAyB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACrD,CAAC,wBAAqB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACjD,CAAC,0BAAsB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAG;AAAA,EACjD,CAAC,4BAAuB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAG;AAAA,EAClD,CAAC,sBAAoB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EAChD,CAAC,gCAAyB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACrD,CAAC,wBAAqB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACjD,CAAC,wBAAqB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAG;AAAA,EACjD,CAAC,kBAAkB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,EAAA,EAAG;AAAA,EAC7C,CAAC,4BAAuB,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,EAAA;AACjD;AAMO,IAAM,oBAAA,GAAqD;AAAA,EAChE,KAAA,EAAO,eAAA;AAAA,EACP,WAAA,EAAa,aAAA;AAAA,EACb,UAAA,EAAY,YAAA;AAAA,EACZ,IAAA,EAAM;AACR;AAGA,IAAM,eAAA,GAAgD;AAAA,EACpD,KAAA,EAAO,CAAA;AAAA,EACP,WAAA,EAAa,CAAA;AAAA,EACb,UAAA,EAAY,CAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAMO,SAAS,eAAA,CAAgB,MAAA,EAAyC,SAAA,GAAY,CAAA,EAAW;AAC9F,EAAA,MAAM,UAAU,cAAA,CAAe,OAAA;AAC/B,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,OAAA;AACH,MAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,IACjB,KAAK,aAAA;AACH,MAAA,OAAO,OAAA,CAAQ,WAAA;AAAA,IACjB,KAAK,YAAA;AACH,MAAA,OAAO,SAAA,IAAa,IAAA,GAAO,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AAAA,IAC3D,KAAK,MAAA;AACH,MAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,IACjB;AACE,MAAA,OAAO,OAAA,CAAQ,IAAA;AAAA;AAErB;AAGO,SAAS,YAAA,CAAa,GAAiB,CAAA,EAA0B;AACtE,EAAA,OAAO,eAAA,CAAgB,CAAC,CAAA,IAAK,eAAA,CAAgB,CAAC,CAAA;AAChD;AAMO,IAAM,sBAAA,GAAsD;AAAA,EACjE,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,MAAA;AAAA,EACd,SAAA,EAAW,YAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,KAAA;AAAA,EACL,QAAA,EAAU,UAAA;AACZ,CAAA;;;ACpOA,IAAM,IAAA,GAAS,gBAAoE,OAAA,IACjF,eAAA;AAEF,IAAM,YAAA,GAAe,wBAAA;AACrB,IAAM,cAAA,GAAiB,wBAAA;AACvB,IAAM,UAAA,GAAa,GAAA;AACnB,IAAM,YAAA,GAAe,2BAAA;AACrB,IAAM,cAAA,GAAiB,6BAAA;AAuCvB,SAAS,eAAe,IAAA,EAAyC;AAC/D,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAyD;AAC5E,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,KAAA,MAAW,QAAQ,mBAAA,CAAoB,CAAA,CAAE,WAAW,CAAA,IAAK,EAAC,EAAG;AAC3D,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAChC,MAAA,IAAI,CAAC,QAAA,IAAY,YAAA,CAAa,EAAE,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA,EAAG;AAC9D,QAAA,MAAA,CAAO,GAAA,CAAI,MAAM,EAAE,MAAA,EAAQ,EAAE,YAAA,EAAc,SAAA,EAAW,CAAA,CAAE,SAAA,EAAW,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,IACtD,IAAA;AAAA,IACA,KAAA,EAAO,eAAA,CAAgB,CAAA,CAAE,MAAA,EAAQ,EAAE,SAAS;AAAA,GAC9C,CAAE,CAAA;AACJ;AAGA,SAAS,kBAAkB,IAAA,EAAoC;AAC7D,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAoC;AACzD,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,CAAA,CAAE,WAAW,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,CAAS,IAAI,MAAA,EAAQ;AAAA,QACnB,GAAA,EAAK,MAAA;AAAA,QACL,IAAA,EAAM,qBAAqB,MAAM,CAAA;AAAA,QACjC,QAAQ,CAAA,CAAE,YAAA;AAAA,QACV,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,MAAM,CAAA,CAAE,UAAA;AAAA,QACR,QAAQ,CAAA,CAAE;AAAA,OACX,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,UAAA;AACnB,IAAA,QAAA,CAAS,YAAY,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,SAAA,EAAW,EAAE,SAAS,CAAA;AAC7D,IAAA,IAAI,YAAA,CAAa,CAAA,CAAE,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA,EAAG;AACjD,MAAA,QAAA,CAAS,SAAS,CAAA,CAAE,YAAA;AACpB,MAAA,QAAA,CAAS,SAAS,CAAA,CAAE,WAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA;AACrC;AAGA,SAAS,oBAAoB,IAAA,EAAoC;AAC/D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACtB,KAAK,CAAA,CAAE,WAAA;AAAA,IACP,IAAA,EAAM,oBAAA,CAAqB,CAAA,CAAE,WAAW,CAAA;AAAA,IACxC,QAAQ,CAAA,CAAE,YAAA;AAAA,IACV,WAAW,CAAA,CAAE,SAAA;AAAA,IACb,MAAM,CAAA,CAAE,UAAA;AAAA,IACR,QAAQ,CAAA,CAAE;AAAA,GACZ,CAAE,CAAA;AACJ;AAmBO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,IAAA,GAAO,UAAA;AAAA,EACP,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM,cAAA,CAAe,IAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,MAAO,IAAA,KAAS,QAAA,GAAW,kBAAkB,IAAI,CAAA,GAAI,oBAAoB,IAAI,CAAA;AAAA,IAC7E,CAAC,MAAM,IAAI;AAAA,GACb;AAEA,EAAA,MAAM,CAAC,SAAS,CAAA,GAAI,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,iBAAA,GAAoB,CAAA,GAAI,CAAC,CAAC,CAAA;AAChF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,MAAA,CAAO,SAAA,EAAW;AAAA,MAC3C,OAAA,EAAS,oBAAoB,CAAA,GAAI,CAAA;AAAA,MACjC,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AAAA,MAC9B,eAAA,EAAiB;AAAA,KAClB,CAAA;AACD,IAAA,SAAA,CAAU,KAAA,EAAM;AAChB,IAAA,OAAO,MAAM,UAAU,IAAA,EAAK;AAAA,EAC9B,CAAA,EAAG,CAAC,iBAAA,EAAmB,SAAS,CAAC,CAAA;AAEjC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,WAAA,CAAY,EAAE,YAAY,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,WAAA,EAAa,CAAC,CAAA,EAAG,IAAI,GAAG,CAAA;AAClF,EAAA,MAAM,YAAY,iBAAA,GACd,eAAA;AAAA,IACE,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,iBAAiB,CAAA,EAAG,YAAA;AAAA,IACvD,IAAA,CAAK,KAAK,CAAC,CAAA,KAAM,EAAE,WAAA,KAAgB,iBAAiB,GAAG,SAAA,IAAa;AAAA,GACtE,GACA,IAAA;AAEJ,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAA2B;AAClD,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,IAAA,CAAK,IAAA,EAAM;AAClC,IAAA,MAAM,WAAW,IAAA,CAAK,IAAA;AAAA,MAAK,CAAC,CAAA,KAAA,CACzB,mBAAA,CAAoB,CAAA,CAAE,WAAW,KAAK,EAAC,EAAG,QAAA,CAAS,IAAA,CAAK,IAAc;AAAA,KACzE;AACA,IAAA,MAAM,MAAA,GAAS,QAAA,EAAU,WAAA,IAAe,sBAAA,CAAuB,KAAK,IAAI,CAAA;AACxE,IAAA,IAAI,MAAA,gBAAsB,MAAM,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,QAAK,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAG,MAAA,EAAO,UAAA,EAAY,GAAG,KAAA,EACpD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,MAAY,YAAA,EAA4B,CAAA;AAAA,oBAEpD,GAAA;AAAA,MAAC,QAAA,CAAS,IAAA;AAAA,MAAT;AAAA,QACC,KAAA,EAAO;AAAA,UACL;AAAA,YACE,OAAO,GAAA,GAAM,UAAA;AAAA,YACb,SAAA,EAAW,QAAA;AAAA,YACX,SAAA,EAAW,CAAC,EAAE,KAAA,EAAO;AAAA,WACvB;AAAA,UACA,YAAY,EAAE,SAAA,EAAW,CAAA,aAAA,EAAgB,SAAS,IAAG,GAAI;AAAA,SAC3D;AAAA,QAGA,aAAA,EAAW,IAAA;AAAA,QACX,2BAAA,EAA2B,IAAA;AAAA,QAC3B,yBAAA,EAA0B,qBAAA;AAAA,QAC1B,MAAA,EAAO,cAAA;AAAA,QAEP,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,KAAA,EAAO,UAAA;AAAA,YACP,MAAA,EAAO,MAAA;AAAA,YACP,WAAA,EAAa,YAAA;AAAA,YACb,MAAA,EAAQ,cAAA;AAAA,YACR,eAAA,EAAiB;AAAA;AAAA;AACnB;AAAA,KACF;AAAA,IAEC,MAAA,CAAO,WAAW,CAAA,mBACjB,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,CAAA;AAAA,UACX,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,cAAA;AAAA,UACP,SAAA,EAAW,QAAA;AAAA,UACX,UAAA,EAAY;AAAA,SACd;AAAA,QACA,MAAA,EAAO,gBAAA;AAAA,QACR,QAAA,EAAA;AAAA;AAAA,KAED,mBAEA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oBAAA;AAAA,QACV,OAAO,EAAE,SAAA,EAAW,IAAI,GAAA,EAAK,CAAA,EAAG,gBAAgB,QAAA,EAAS;AAAA,QACzD,MAAA,EAAO,iBAAA;AAAA,QAEN,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACX,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA,WAAA,EAAa,sBAAsB,KAAA,CAAM,MAAA;AAAA,YACzC;AAAA,WAAA;AAAA,UAHK,KAAA,CAAM;AAAA,SAKd;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;AAOA,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,YAAA,EAAa,EAAoB;AAC3D,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,sBAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAG,cAAc,CAAA,EAAE;AAAA,MACjC,MAAA,EAAO,sBAAA;AAAA,MAEL,WAAC,OAAA,EAAS,MAAM,CAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AAC1C,QAAA,MAAM,SAAS,IAAA,KAAS,IAAA;AACxB,QAAA,uBACE,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEC,OAAA,EAAS,MAAM,YAAA,GAAe,IAAI,CAAA;AAAA,YAClC,iBAAA,EAAkB,QAAA;AAAA,YAClB,kBAAA,EAAoB,QAAQ,IAAI,CAAA,KAAA,CAAA;AAAA,YAChC,cAAA,EAAc,MAAA;AAAA,YACd,UAAU,CAAC,YAAA;AAAA,YACX,KAAA,EAAO;AAAA,cACL,iBAAA,EAAmB,EAAA;AAAA,cACnB,eAAA,EAAiB,CAAA;AAAA,cACjB,YAAA,EAAc,IAAA;AAAA,cACd,eAAA,EAAiB,SAAS,sBAAA,GAAyB,aAAA;AAAA,cACnD,WAAA,EAAa,CAAA;AAAA,cACb,WAAA,EAAa,SAAS,SAAA,GAAY;AAAA,aACpC;AAAA,YACA,MAAA,EAAQ,mBAAmB,IAAI,CAAA,CAAA;AAAA,YAE/B,QAAA,kBAAA,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,EAAA;AAAA,kBACV,UAAA,EAAY,mBAAA;AAAA,kBACZ,UAAA,EAAY,SAAS,KAAA,GAAQ,KAAA;AAAA,kBAC7B,KAAA,EAAO,SAAS,SAAA,GAAY,cAAA;AAAA,kBAC5B,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA;AACH,WAAA;AAAA,UA1BK;AAAA,SA2BP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AAQA,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,WAAA,EAAa,eAAc,EAAsB;AAC9E,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,KAAA,CAAM,MAAA,EAAQ,MAAM,SAAS,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,oBAAA,CAAqB,KAAA,CAAM,MAAM,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,eAAA,CAAA;AACjF,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAM,CAAA;AAAA,MAC3C,iBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,KAAA;AAAA,MACpB,cAAA,EAAc,WAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,CAAA;AAAA,QACL,iBAAA,EAAmB,CAAA;AAAA,QACnB,eAAA,EAAiB,CAAA;AAAA,QACjB,YAAA,EAAc,IAAA;AAAA,QACd,WAAA,EAAa,CAAA;AAAA,QACb,WAAA,EAAa,cAAc,SAAA,GAAY,6BAAA;AAAA,QACvC,eAAA,EAAiB;AAAA,OACnB;AAAA,MACA,MAAA,EAAQ,CAAA,gBAAA,EAAmB,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,MAEpC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,YAAA,EAAc,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAS;AAAA,YAC5E,2BAAA,EAA2B,IAAA;AAAA,YAC3B,MAAA,EAAQ,CAAA,oBAAA,EAAuB,KAAA,CAAM,GAAG,CAAA;AAAA;AAAA,SAC1C;AAAA,wBACA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,mBAAA;AAAA,cACZ,UAAA,EAAY,KAAA;AAAA,cACZ,KAAA,EAAO;AAAA,aACT;AAAA,YACA,2BAAA,EAA2B,IAAA;AAAA,YAE1B,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA,GACF;AAEJ;ACrUA,IAAM,gBAAA,GAAmB,+BAAA;AACzB,IAAM,cAAA,GAAiB,6BAAA;AACvB,IAAM,aAAA,GAAgB,4BAAA;AACtB,IAAM,cAAA,GAAiB,6BAAA;AACvB,IAAM,aAAA,GAAgB,SAAA;AACtB,IAAMC,aAAAA,GAAe,2BAAA;AACrB,IAAMC,eAAAA,GAAiB,6BAAA;AACvB,IAAM,aAAA,GAAgB,4BAAA;AAGtB,IAAM,eAAA,GAAkB,+DAAA;AAGxB,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,gBAAA,GAAmB,GAAA;AAGzB,IAAM,kBAAA,GAAuD;AAAA,EAC3D,KAAA,EAAO,MAAA;AAAA,EACP,WAAA,EAAa,SAAA;AAAA,EACb,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM;AACR,CAAA;AAiDA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,CAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,CAAA;AACtB,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,cAAA,CAAe,UAAA,EAAoB,EAAE,GAAA,EAAK,KAAI,EAA4B;AACjF,EAAA,MAAM,OAAO,GAAA,GAAM,GAAA;AACnB,EAAA,IAAI,IAAA,IAAQ,CAAA,EAAG,OAAO,UAAA,IAAc,MAAM,CAAA,GAAI,CAAA;AAC9C,EAAA,OAAO,OAAA,CAAA,CAAS,UAAA,GAAa,GAAA,IAAO,IAAI,CAAA;AAC1C;AA0BO,SAAS,kBAAA,CAAmB;AAAA,EACjC,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,IAAA,GAAO,UAAU,OAAA,IAAW,KAAA;AAElC,EAAA,MAAM,CAAC,UAAU,CAAA,GAAIC,QAAAA,CAAS,MAAM,IAAIC,QAAAA,CAAS,KAAA,CAAM,YAAY,CAAC,CAAA;AACpE,EAAA,MAAM,CAAC,QAAQ,CAAA,GAAID,QAAAA,CAAS,MAAM,IAAIC,QAAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;AAEvD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,SAAA,GAAYD,SAAS,QAAA,CAAS;AAAA,MAClCA,QAAAA,CAAS,OAAO,UAAA,EAAY;AAAA,QAC1B,OAAA,EAAS,CAAA;AAAA,QACT,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQE,MAAAA,CAAO,GAAA,CAAIA,MAAAA,CAAO,IAAI,CAAA;AAAA,QAC9B,eAAA,EAAiB;AAAA,OAClB,CAAA;AAAA,MACDF,QAAAA,CAAS,OAAO,QAAA,EAAU;AAAA,QACxB,OAAA,EAAS,gBAAA;AAAA,QACT,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQE,MAAAA,CAAO,GAAA,CAAIA,MAAAA,CAAO,IAAI,CAAA;AAAA,QAC9B,eAAA,EAAiB;AAAA,OAClB;AAAA,KACF,CAAA;AACD,IAAA,SAAA,CAAU,KAAA,EAAM;AAChB,IAAA,OAAO,MAAM,UAAU,IAAA,EAAK;AAAA,EAC9B,CAAA,EAAG,CAAC,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE/B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,WAAA,GAAc,GAAG,WAAW,CAAA,eAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,UAAA,EAAY,SAAS,CAAA,GAAI,GAAA;AAC3D,EAAA,MAAM,eAAA,GAAA,CAAmB,qBAAA,EAAuB,MAAA,IAAU,CAAA,IAAK,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAA,CAAe,iBAAA,EAAmB,MAAA,IAAU,CAAA,IAAK,CAAA;AAEvD,EAAA,uBACE,IAAA;AAAA,IAACC,IAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,gBAAgB,UAAA,EAAW;AAAA,MAChG,MAAA,EAAO,4BAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAACH,QAAAA,CAAS,IAAA;AAAA,UAAT;AAAA,YACC,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,CAAA;AAAA,cACL,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,CAAA;AAAA,cACP,MAAA,EAAQ,CAAA;AAAA,cACR,eAAA,EAAiB,SAAA;AAAA,cACjB,OAAA,EAAS;AAAA,aACX;AAAA,YACA,MAAA,EAAO,qCAAA;AAAA,YAEP,QAAA,kBAAA,GAAA;AAAA,cAACI,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,OAAA;AAAA,gBACT,iBAAA,EAAkB,QAAA;AAAA,gBAClB,kBAAA,EAAoB,SAAS,WAAW,CAAA,QAAA,CAAA;AAAA,gBACxC,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE;AAAA,gBACjB,MAAA,EAAO;AAAA;AAAA;AACT;AAAA,SACF;AAAA,wBAEA,IAAA;AAAA,UAACJ,QAAAA,CAAS,IAAA;AAAA,UAAT;AAAA,YACC,iBAAA,EAAmB,QAAA;AAAA,YACnB,kBAAA,EAAoB,WAAA;AAAA,YACpB,YAAA,EAAY,WAAA;AAAA,YACZ,KAAA,EAAO;AAAA,cACL,eAAA,EAAiB,gBAAA;AAAA,cACjB,mBAAA,EAAqB,EAAA;AAAA,cACrB,oBAAA,EAAsB,EAAA;AAAA,cACtB,SAAA,EAAW,KAAA;AAAA,cACX,SAAA,EAAW,CAAC,EAAE,UAAA,EAAY;AAAA,aAC5B;AAAA,YACA,MAAA,EAAO,uBAAA;AAAA,YACN,GAAG,KAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAACI,SAAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,OAAA;AAAA,kBACT,iBAAA,EAAkB,QAAA;AAAA,kBAClB,kBAAA,EAAoB,SAAS,WAAW,CAAA,QAAA,CAAA;AAAA,kBACxC,OAAA,EAAS,EAAA;AAAA,kBACT,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAU,iBAAiB,CAAA,EAAE;AAAA,kBACjD,MAAA,EAAO,8BAAA;AAAA,kBAEP,QAAA,kBAAA,GAAA;AAAA,oBAACD,IAAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,eAAA,EAAiB,aAAA,EAAc;AAAA,sBAC/E,2BAAA,EAA2B;AAAA;AAAA;AAC7B;AAAA,eACF;AAAA,8BAEA,IAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,EAAE,iBAAA,EAAmB,EAAA,EAAG;AAAA,kBAC/B,qBAAA,EAAuB,EAAE,aAAA,EAAe,EAAA,EAAG;AAAA,kBAC3C,MAAA,EAAO,8BAAA;AAAA,kBAEP,QAAA,EAAA;AAAA,oCAAA,IAAA;AAAA,sBAACA,IAAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,uCAAA;AAAA,wBACV,OAAO,EAAE,GAAA,EAAK,GAAG,UAAA,EAAY,CAAA,EAAG,eAAe,CAAA,EAAE;AAAA,wBACjD,MAAA,EAAO,8BAAA;AAAA,wBAEP,QAAA,EAAA;AAAA,0CAAA,IAAA,CAACA,IAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAG,UAAA,EAAY,CAAA,EAAE,EACrE,QAAA,EAAA;AAAA,4CAAA,GAAA;AAAA,8BAACE,IAAAA;AAAA,8BAAA;AAAA,gCACC,iBAAA,EAAkB,QAAA;AAAA,gCAClB,KAAA,EAAO;AAAA,kCACL,QAAA,EAAU,EAAA;AAAA,kCACV,UAAA,EAAY,6BAAA;AAAA,kCACZ,UAAA,EAAY,KAAA;AAAA,kCACZ,KAAA,EAAOR;AAAA,iCACT;AAAA,gCACA,MAAA,EAAO,6BAAA;AAAA,gCAEN,QAAA,EAAA;AAAA;AAAA,6BACH;AAAA,4CACA,GAAA;AAAA,8BAAC,KAAA;AAAA,8BAAA;AAAA,gCACC,OAAA,EAAQ,QAAA;AAAA,gCACR,KAAA,EAAO,mBAAmB,YAAY,CAAA;AAAA,gCACtC,IAAA,EAAK,IAAA;AAAA,gCACL,MAAA,EAAO,oCAAA;AAAA,gCAEN,+BAAqB,YAAY;AAAA;AAAA;AACpC,2BAAA,EACF,CAAA;AAAA,0CACA,GAAA;AAAA,4BAACO,SAAAA;AAAA,4BAAA;AAAA,8BACC,OAAA,EAAS,OAAA;AAAA,8BACT,iBAAA,EAAkB,QAAA;AAAA,8BAClB,kBAAA,EAAoB,SAAS,WAAW,CAAA,QAAA,CAAA;AAAA,8BACxC,OAAA,EAAS,CAAA;AAAA,8BACT,KAAA,EAAO,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,EAAA,EAAG;AAAA,8BAChC,MAAA,EAAO,6BAAA;AAAA,8BAEP,QAAA,kBAAA,GAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,EAAA,EAAI,KAAA,EAAOP,eAAAA,EAAe,EAAI,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAC7E;AAAA;AAAA,qBACF;AAAA,oBAEC,eAAe,IAAA,oBACd,GAAA;AAAA,sBAACO,IAAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,mBAAA,EAAqB,OAAOP,eAAAA,EAAe;AAAA,wBAC9E,MAAA,EAAO,oCAAA;AAAA,wBAEN,0BAAgB,WAAW,CAAA;AAAA;AAAA,qBAC9B;AAAA,oCAGF,IAAA,CAACK,MAAA,EAAK,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAG,EAAG,MAAA,EAAO,8BAAA,EACrC,QAAA,EAAA;AAAA,sCAAA,IAAA;AAAA,wBAACA,IAAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,uCAAA;AAAA,0BACV,KAAA,EAAO,EAAE,YAAA,EAAc,CAAA,EAAE;AAAA,0BACzB,2BAAA,EAA2B,IAAA;AAAA,0BAE3B,QAAA,EAAA;AAAA,4CAAA,GAAA,CAACE,MAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,mBAAA,EAAqB,UAAA,EAAY,KAAA,EAAO,OAAO,aAAA,EAAc,EACnG,QAAA,EAAA,CAAA,IAAA,EAAO,SAAA,CAAU,GAAG,CAAA,CAAA,EACvB,CAAA;AAAA,gDACCA,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,mBAAA,EAAqB,UAAA,EAAY,OAAO,KAAA,EAAO,aAAA,IACrF,QAAA,EAAA,CAAA,IAAA,EAAO,SAAA,CAAU,GAAG,CAAA,CAAA,EACvB;AAAA;AAAA;AAAA,uBACF;AAAA,sCACA,IAAA;AAAA,wBAACF,IAAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,gBAAgB,QAAA,EAAS;AAAA,0BAC9C,iBAAA,EAAkB,aAAA;AAAA,0BAClB,kBAAA,EAAoB,EAAE,GAAA,EAAK,SAAA,CAAU,KAAK,GAAA,EAAK,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,UAAA,EAAW;AAAA,0BAC9E,kBAAA,EAAoB,GAAG,UAAU,CAAA,0BAAA,EAA6B,UAAU,GAAG,CAAA,SAAA,EAAY,UAAU,GAAG,CAAA,CAAA;AAAA,0BACpG,eAAA,EAAe,UAAA;AAAA,0BACf,iBAAe,SAAA,CAAU,GAAA;AAAA,0BACzB,iBAAe,SAAA,CAAU,GAAA;AAAA,0BACzB,MAAA,EAAO,kCAAA;AAAA,0BAEP,QAAA,EAAA;AAAA,4CAAA,GAAA;AAAA,8BAACA,IAAAA;AAAA,8BAAA;AAAA,gCACC,OAAO,EAAE,MAAA,EAAQ,GAAG,YAAA,EAAc,CAAA,EAAG,iBAAiB,eAAA,EAAgB;AAAA,gCACtE,2BAAA,EAA2B;AAAA;AAAA,6BAC7B;AAAA,4CACA,GAAA;AAAA,8BAACA,IAAAA;AAAA,8BAAA;AAAA,gCACC,KAAA,EAAO;AAAA,kCACL,QAAA,EAAU,UAAA;AAAA,kCACV,IAAA,EAAM,GAAG,UAAU,CAAA,CAAA,CAAA;AAAA,kCACnB,UAAA,EAAY,EAAA;AAAA,kCACZ,KAAA,EAAO,EAAA;AAAA,kCACP,MAAA,EAAQ,EAAA;AAAA,kCACR,YAAA,EAAc,CAAA;AAAA,kCACd,WAAA,EAAa,CAAA;AAAA,kCACb,WAAA,EAAaN,aAAAA;AAAA,kCACb,eAAA,EAAiB,gBAAA;AAAA,kCACjB,SAAA,EAAW;AAAA,iCACb;AAAA,gCACA,2BAAA,EAA2B,IAAA;AAAA,gCAC3B,MAAA,EAAO;AAAA;AAAA;AACT;AAAA;AAAA;AACF,qBAAA,EACF,CAAA;AAAA,oCAEA,IAAA,CAACM,IAAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAI,GAAA,EAAK,CAAA,EAAE,EACvE,QAAA,EAAA;AAAA,sCAAA,GAAA;AAAA,wBAACE,IAAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,EAAA;AAAA,4BACV,UAAA,EAAY,6BAAA;AAAA,4BACZ,UAAA,EAAY,KAAA;AAAA,4BACZ,KAAA,EAAOR;AAAA,2BACT;AAAA,0BACA,MAAA,EAAO,iCAAA;AAAA,0BAEN,QAAA,EAAA;AAAA;AAAA,uBACH;AAAA,sCACA,GAAA;AAAA,wBAACQ,IAAAA;AAAA,wBAAA;AAAA,0BACC,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,mBAAA,EAAqB,OAAOP,eAAAA,EAAe;AAAA,0BAC9E,MAAA,EAAO,kCAAA;AAAA,0BAEN,QAAA,EAAA,CAAA,EAAA,EAAK,UAAU,GAAG,CAAA,IAAA;AAAA;AAAA;AACrB,qBAAA,EACF,CAAA;AAAA,oBAEC,aAAA,IAAiB,IAAA,IAAQ,aAAA,CAAc,MAAA,GAAS,qBAC/C,IAAA,CAACK,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAG,EAAG,QAAO,iCAAA,EACrC,QAAA,EAAA;AAAA,sCAAA,GAAA;AAAA,wBAACE,IAAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,EAAA;AAAA,4BACV,UAAA,EAAY,mBAAA;AAAA,4BACZ,UAAA,EAAY,KAAA;AAAA,4BACZ,KAAA,EAAO,aAAA;AAAA,4BACP,YAAA,EAAc;AAAA,2BAChB;AAAA,0BACA,2BAAA,EAA2B,IAAA;AAAA,0BAE1B,QAAA,EAAA;AAAA;AAAA,uBACH;AAAA,sCACA,GAAA,CAAC,aAAU,IAAA,EAAM,aAAA,EAAe,OAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,aAAA,EAAa,IAAA,EAAC;AAAA,qBAAA,EACvE,CAAA;AAAA,oBAGD,eAAA,oBACC,IAAA,CAACF,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAG,EAAG,MAAA,EAAO,oCAAA,EACrC,QAAA,EAAA;AAAA,sCAAA,GAAA;AAAA,wBAACE,IAAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,EAAA;AAAA,4BACV,UAAA,EAAY,mBAAA;AAAA,4BACZ,UAAA,EAAY,KAAA;AAAA,4BACZ,KAAA,EAAO,aAAA;AAAA,4BACP,YAAA,EAAc;AAAA,2BAChB;AAAA,0BAEC,QAAA,EAAA;AAAA;AAAA,uBACH;AAAA,sBACC,qBAAA,CAAuB,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,qBACrC,IAAA;AAAA,wBAACF,IAAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAU,uCAAA;AAAA,0BACV,KAAA,EAAO;AAAA,4BACL,GAAA,EAAK,EAAA;AAAA,4BACL,eAAA,EAAiB,CAAA;AAAA,4BACjB,iBAAA,EAAmB,EAAA;AAAA,4BACnB,YAAA,EAAc,CAAA;AAAA,4BACd,YAAA,EAAc,CAAA;AAAA,4BACd,eAAA,EAAiB,cAAA;AAAA,4BACjB,WAAA,EAAa,CAAA;AAAA,4BACb,WAAA,EAAa;AAAA,2BACf;AAAA,0BACA,MAAA,EAAQ,sCAAsC,KAAK,CAAA,CAAA;AAAA,0BAEnD,QAAA,EAAA;AAAA,4CAAA,GAAA;AAAA,8BAACE,IAAAA;AAAA,8BAAA;AAAA,gCACC,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,mBAAA,EAAqB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAOR,aAAAA,EAAa;AAAA,gCACxG,MAAA,EAAQ,sCAAsC,KAAK,CAAA,KAAA,CAAA;AAAA,gCAElD,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,6BACZ;AAAA,4CACA,GAAA;AAAA,8BAACQ,IAAAA;AAAA,8BAAA;AAAA,gCACC,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,mBAAA,EAAqB,OAAOP,eAAAA,EAAe;AAAA,gCAC9E,MAAA,EAAQ,sCAAsC,KAAK,CAAA,OAAA,CAAA;AAAA,gCAElD,QAAA,EAAA,CAAA,EAAG,SAAS,IAAI,CAAA,WAAA,EAAW,KAAK,KAAA,CAAM,QAAA,CAAS,kBAAA,GAAqB,GAAG,CAAC,CAAA,CAAA;AAAA;AAAA;AAC3E;AAAA,yBAAA;AAAA,wBAzBK,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,uBA2BjC;AAAA,qBAAA,EACH,CAAA;AAAA,oBAGD,WAAA,oBACC,IAAA,CAACK,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAG,EAAG,MAAA,EAAO,gCAAA,EACrC,QAAA,EAAA;AAAA,sCAAA,GAAA;AAAA,wBAACE,IAAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO;AAAA,4BACL,QAAA,EAAU,EAAA;AAAA,4BACV,UAAA,EAAY,mBAAA;AAAA,4BACZ,UAAA,EAAY,KAAA;AAAA,4BACZ,KAAA,EAAO,aAAA;AAAA,4BACP,YAAA,EAAc;AAAA,2BAChB;AAAA,0BAEC,QAAA,EAAA;AAAA;AAAA,uBACH;AAAA,sBACC,iBAAA,CAAmB,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,qBACjC,IAAA;AAAA,wBAACF,IAAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAU,uCAAA;AAAA,0BACV,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAI,iBAAiB,CAAA,EAAE;AAAA,0BACrC,MAAA,EAAQ,kCAAkC,KAAK,CAAA,CAAA;AAAA,0BAE/C,QAAA,EAAA;AAAA,4CAAA,GAAA;AAAA,8BAACE,IAAAA;AAAA,8BAAA;AAAA,gCACC,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,mBAAA,EAAqB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAOR,aAAAA,EAAa;AAAA,gCACxG,MAAA,EAAQ,kCAAkC,KAAK,CAAA,KAAA,CAAA;AAAA,gCAE9C,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,6BACZ;AAAA,4CACA,GAAA;AAAA,8BAACQ,IAAAA;AAAA,8BAAA;AAAA,gCACC,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,mBAAA,EAAqB,OAAO,aAAA,EAAc;AAAA,gCAC7E,MAAA,EAAQ,kCAAkC,KAAK,CAAA,OAAA,CAAA;AAAA,gCAE9C,QAAA,EAAA,CAAA,EAAG,QAAA,CAAS,WAAW,CAAA,MAAA,EAAM,SAAS,IAAI,CAAA,KAAA;AAAA;AAAA;AAC7C;AAAA,yBAAA;AAAA,wBAhBK,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,uBAkBjC;AAAA,qBAAA,EACH,CAAA;AAAA,oBAGD,mBAAmB,IAAA,oBAClB,GAAA;AAAA,sBAACD,SAAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAS,eAAA;AAAA,wBACT,iBAAA,EAAkB,QAAA;AAAA,wBAClB,kBAAA,EAAoB,QAAQ,WAAW,CAAA,UAAA,CAAA;AAAA,wBACvC,KAAA,EAAO;AAAA,0BACL,SAAA,EAAW,EAAA;AAAA,0BACX,eAAA,EAAiB,EAAA;AAAA,0BACjB,YAAA,EAAc,CAAA;AAAA,0BACd,UAAA,EAAY,QAAA;AAAA,0BACZ,eAAA,EAAiB,sBAAA;AAAA,0BACjB,WAAA,EAAa,CAAA;AAAA,0BACb,WAAA,EAAa;AAAA,yBACf;AAAA,wBACA,MAAA,EAAO,sCAAA;AAAA,wBAEP,QAAA,kBAAA,GAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,mBAAA,EAAqB,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,aAAA,IACrF,QAAA,EAAA,gBAAA,EACH;AAAA;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC1cA,IAAMC,iBAAAA,GAAmB,+BAAA;AACzB,IAAMC,eAAAA,GAAiB,6BAAA;AACvB,IAAMV,aAAAA,GAAe,2BAAA;AACrB,IAAMC,eAAAA,GAAiB,6BAAA;AACvB,IAAMU,cAAAA,GAAgB,4BAAA;AACtB,IAAM,OAAA,GAAU,8BAAA;AAGhB,IAAM,YAAA,GAA+B,CAAC,OAAA,EAAS,aAAA,EAAe,cAAc,MAAM,CAAA;AAiD3E,SAAS,sBAAsB,OAAA,EAAwD;AAC5F,EAAA,MAAM,YAAA,GAA6C;AAAA,IACjD,KAAA,EAAO,CAAA;AAAA,IACP,WAAA,EAAa,CAAA;AAAA,IACb,UAAA,EAAY,CAAA;AAAA,IACZ,IAAA,EAAM;AAAA,GACR;AACA,EAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,eAAA,IAAmB,MAAA,CAAO,UAAA;AAC1B,IAAA,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA,IAAK,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,EAAE,eAAA,EAAiB,cAAA,EAAgB,OAAA,CAAQ,QAAQ,YAAA,EAAa;AACzE;AAGO,SAAS,aAAA,CACd,SACA,IAAA,EACe;AACf,EAAA,OAAO,OAAA,CACJ,MAAA,CAAO,CAAC,MAAA,KAAW,OAAO,IAAA,KAAS,IAAI,CAAA,CACvC,GAAA,CAAI,CAAC,EAAE,WAAA,EAAa,SAAA,EAAW,YAAA,EAAc,YAAW,MAAO;AAAA,IAC9D,WAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,CAAE,CAAA;AACN;AAEA,IAAM,aAAA,GAGD;AAAA,EACH,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,aAAA,EAAc;AAAA,EACrC,EAAE,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,YAAA,EAAa;AAAA,EACzC,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EAC/B,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA;AACxB,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,OAAA,EAAQ,EAAuC;AACrE,EAAA,2BACGL,IAAAA,EAAA,EAAK,WAAU,oBAAA,EAAqB,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAE,EAAG,MAAA,EAAO,gCAC5D,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,OAAM,KAAM;AACrC,IAAA,MAAM,QAAQ,GAAA,KAAQ,OAAA,GAAU,QAAQ,eAAA,GAAkB,OAAA,CAAQ,aAAa,GAAG,CAAA;AAClF,IAAA,uBACE,IAAA;AAAA,MAACA,IAAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,SAAA,EAAW,KAAA;AAAA,UACX,OAAA,EAAS,EAAA;AAAA,UACT,YAAA,EAAc,EAAA;AAAA,UACd,eAAA,EAAiBG,iBAAAA;AAAA,UACjB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAaC;AAAA,SACf;AAAA,QACA,MAAA,EAAQ,gCAAgC,GAAG,CAAA,CAAA;AAAA,QAE3C,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACF,IAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,6BAAA;AAAA,gBACZ,UAAA,EAAY,KAAA;AAAA,gBACZ,KAAA,EAAOR;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA;AAAA,YAACQ,IAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW,CAAA;AAAA,gBACX,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,mBAAA;AAAA,gBACZ,UAAA,EAAY,KAAA;AAAA,gBACZ,aAAA,EAAe,GAAA;AAAA,gBACf,aAAA,EAAe,WAAA;AAAA,gBACf,KAAA,EAAOG;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,OAAA;AAAA,MAlCK;AAAA,KAmCP;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,uBACE,GAAA;AAAA,IAACL,IAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oBAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAA,EAAK,EAAA,EAAI,gBAAgB,QAAA,EAAS;AAAA,MAC3C,MAAA,EAAO,6BAAA;AAAA,MAEN,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,MAAA,qBACjB,IAAA;AAAA,QAACA,IAAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAE;AAAA,UAChB,MAAA,EAAQ,+BAA+B,MAAM,CAAA,CAAA;AAAA,UAE7C,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAACA,IAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,KAAA,EAAO,CAAA;AAAA,kBACP,MAAA,EAAQ,CAAA;AAAA,kBACR,YAAA,EAAc,IAAA;AAAA,kBACd,eAAA,EAAiB,eAAA,CAAgB,MAAA,EAAQ,GAAG;AAAA,iBAC9C;AAAA,gBACA,2BAAA,EAA2B;AAAA;AAAA,aAC7B;AAAA,4BACA,GAAA;AAAA,cAACE,IAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,EAAA;AAAA,kBACV,UAAA,EAAY,mBAAA;AAAA,kBACZ,KAAA,EAAOP,eAAAA;AAAA,kBACP,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAEC,+BAAqB,MAAM;AAAA;AAAA;AAC9B;AAAA,SAAA;AAAA,QAvBK;AAAA,OAyBR;AAAA;AAAA,GACH;AAEJ;AASA,SAAS,cAAc,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,UAAS,EAAuB;AAChF,EAAA,MAAM,IAAA,GAAOW,OAAAA,CAAQ,MAAM,aAAA,CAAc,OAAA,EAAS,IAAI,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AACxE,EAAA,uBACE,GAAA,CAACN,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAAW,KAAA,EAAM,EAAG,MAAA,EAAQ,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAA,EAC1F,QAAA,kBAAA,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,QAAA;AAAA,MACnB,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ;AAaO,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA,GAAQ,iBAAA;AAAA,EACR,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIJ,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,OAAA,GAAUU,QAAQ,MAAM,qBAAA,CAAsB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACvE,EAAA,MAAM,MAAA,GAAS,QAAA,IAAY,IAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,QAAQ,CAAA,IAAK,IAAA,GAAQ,IAAA;AAE9F,EAAA,uBACE,IAAA;AAAA,IAACN,IAAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,OAAO,EAAE,QAAA,EAAU,YAAY,KAAA,EAAO,GAAA,EAAK,iBAAiB,OAAA,EAAQ;AAAA,MACpE,iBAAA,EAAmB,MAAA;AAAA,MACnB,YAAA,EAAY,KAAA;AAAA,MACZ,MAAA,EAAO,sBAAA;AAAA,MACN,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAACA,IAAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,GAAA,EAAK,EAAA,EAAG,EAAG,MAAA,EAAO,8BAAA,EAC5C,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACE,IAAAA;AAAA,YAAA;AAAA,cACC,iBAAA,EAAkB,QAAA;AAAA,cAClB,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,6BAAA;AAAA,gBACZ,UAAA,EAAY,KAAA;AAAA,gBACZ,KAAA,EAAOR;AAAA,eACT;AAAA,cACA,MAAA,EAAO,4BAAA;AAAA,cAEN,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAEA,GAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,IAAA,EAAM,CAAA;AAAA,0BAE1B,GAAA,CAAC,gBAAa,OAAA,EAAkB,CAAA;AAAA,0BAEhC,IAAA;AAAA,YAACM,IAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,eAAA,EAAiBG,iBAAAA;AAAA,gBACjB,WAAA,EAAa,CAAA;AAAA,gBACb,WAAA,EAAaC,eAAAA;AAAA,gBACb,YAAA,EAAc,EAAA;AAAA,gBACd,OAAA,EAAS,EAAA;AAAA,gBACT,GAAA,EAAK;AAAA,eACP;AAAA,cACA,MAAA,EAAO,+BAAA;AAAA,cAEP,QAAA,EAAA;AAAA,gCAAA,IAAA,CAACJ,IAAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,OAAO,EAAE,GAAA,EAAK,GAAE,EACzC,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,OAAA;AAAA,sBACL,OAAA;AAAA,sBACA,QAAA;AAAA,sBACA,QAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACA,GAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,MAAA;AAAA,sBACL,OAAA;AAAA,sBACA,QAAA;AAAA,sBACA,QAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF,CAAA;AAAA,oCACC,YAAA,EAAA,EAAa;AAAA;AAAA;AAAA;AAChB,SAAA,EACF,CAAA;AAAA,QAEC,UAAU,IAAA,oBACT,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,aAAa,MAAA,CAAO,WAAA;AAAA,YACpB,aAAa,MAAA,CAAO,WAAA;AAAA,YACpB,YAAY,MAAA,CAAO,UAAA;AAAA,YACnB,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,cAAc,MAAA,CAAO,YAAA;AAAA,YACrB,aAAa,MAAA,CAAO,WAAA;AAAA,YACpB,eAAe,MAAA,CAAO,aAAA;AAAA,YACtB,uBAAuB,MAAA,CAAO,qBAAA;AAAA,YAC9B,mBAAmB,MAAA,CAAO,iBAAA;AAAA,YAC1B,MAAA,EAAM,IAAA;AAAA,YACN,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI;AAAA;AAAA;AACjC;AAAA;AAAA,GAEJ;AAEJ","file":"bodymap.mjs","sourcesContent":["/**\n * Muscle grouping taxonomy for volume tracking, exercise mapping, and the\n * BodyMap visualization. Ported from the Voltras muscle-taxonomy design doc.\n *\n * Level 2 (15 groups) is the primary volume-tracking unit; SimpleMuscleGroup\n * (8 groups) is the beginner-facing aggregation. MUSCLE_TO_SVG_SLUGS maps each\n * group to react-native-body-highlighter slugs using the closest-slug approach\n * (Phase 1: combined colors, no sub-region splitting — deltoids is a single\n * slug, lats and upper back share `upper-back`).\n */\nimport { WORKOUT_TOKENS } from '../../../theme/workout-tokens'\n\n/**\n * Full muscle group taxonomy for volume tracking and exercise mapping.\n * 15 groups — the primary unit for volume accounting.\n */\nexport enum MuscleGroup {\n // Push\n CHEST = 'chest',\n FRONT_DELTS = 'front_delts',\n SIDE_DELTS = 'side_delts',\n TRICEPS = 'triceps',\n\n // Pull\n LATS = 'lats',\n UPPER_BACK = 'upper_back',\n REAR_DELTS = 'rear_delts',\n BICEPS = 'biceps',\n FOREARMS = 'forearms',\n\n // Legs\n QUADS = 'quads',\n HAMSTRINGS = 'hamstrings',\n GLUTES = 'glutes',\n CALVES = 'calves',\n\n // Core\n ABS = 'abs',\n OBLIQUES = 'obliques',\n}\n\n/**\n * Simplified muscle group view for beginners. Maps to one or more MuscleGroup.\n */\nexport enum SimpleMuscleGroup {\n CHEST = 'chest',\n BACK = 'back',\n SHOULDERS = 'shoulders',\n BICEPS = 'biceps',\n TRICEPS = 'triceps',\n LEGS = 'legs',\n CORE = 'core',\n FOREARMS = 'forearms',\n}\n\n/** Mapping from simplified groups to the full taxonomy. */\nexport const SIMPLE_TO_DETAILED: Record<SimpleMuscleGroup, MuscleGroup[]> = {\n [SimpleMuscleGroup.CHEST]: [MuscleGroup.CHEST],\n [SimpleMuscleGroup.BACK]: [MuscleGroup.LATS, MuscleGroup.UPPER_BACK],\n [SimpleMuscleGroup.SHOULDERS]: [\n MuscleGroup.FRONT_DELTS,\n MuscleGroup.SIDE_DELTS,\n MuscleGroup.REAR_DELTS,\n ],\n [SimpleMuscleGroup.BICEPS]: [MuscleGroup.BICEPS],\n [SimpleMuscleGroup.TRICEPS]: [MuscleGroup.TRICEPS],\n [SimpleMuscleGroup.LEGS]: [\n MuscleGroup.QUADS,\n MuscleGroup.HAMSTRINGS,\n MuscleGroup.GLUTES,\n MuscleGroup.CALVES,\n ],\n [SimpleMuscleGroup.CORE]: [MuscleGroup.ABS, MuscleGroup.OBLIQUES],\n [SimpleMuscleGroup.FOREARMS]: [MuscleGroup.FOREARMS],\n}\n\n/** Reverse map: detailed MuscleGroup -> its SimpleMuscleGroup. */\nexport const DETAILED_TO_SIMPLE: Record<MuscleGroup, SimpleMuscleGroup> = Object.entries(\n SIMPLE_TO_DETAILED\n).reduce(\n (acc, [simple, groups]) => {\n for (const group of groups) {\n acc[group] = simple as SimpleMuscleGroup\n }\n return acc\n },\n {} as Record<MuscleGroup, SimpleMuscleGroup>\n)\n\n/** Movement category for training split organization. */\nexport type MovementCategory = 'push' | 'pull' | 'legs' | 'core'\n\nexport const MUSCLE_TO_CATEGORY: Record<MuscleGroup, MovementCategory> = {\n [MuscleGroup.CHEST]: 'push',\n [MuscleGroup.FRONT_DELTS]: 'push',\n [MuscleGroup.SIDE_DELTS]: 'push',\n [MuscleGroup.TRICEPS]: 'push',\n [MuscleGroup.LATS]: 'pull',\n [MuscleGroup.UPPER_BACK]: 'pull',\n [MuscleGroup.REAR_DELTS]: 'pull',\n [MuscleGroup.BICEPS]: 'pull',\n [MuscleGroup.FOREARMS]: 'pull',\n [MuscleGroup.QUADS]: 'legs',\n [MuscleGroup.HAMSTRINGS]: 'legs',\n [MuscleGroup.GLUTES]: 'legs',\n [MuscleGroup.CALVES]: 'legs',\n [MuscleGroup.ABS]: 'core',\n [MuscleGroup.OBLIQUES]: 'core',\n}\n\n/**\n * react-native-body-highlighter slug(s) per muscle group. Phase 1 uses the\n * closest available slug; deltoids share one path and lats/upper-back share\n * `upper-back` (see doc Level 4 \"Recommended approach\").\n */\nexport const MUSCLE_TO_SVG_SLUGS: Record<MuscleGroup, string[]> = {\n [MuscleGroup.CHEST]: ['chest'],\n [MuscleGroup.FRONT_DELTS]: ['deltoids'],\n [MuscleGroup.SIDE_DELTS]: ['deltoids'],\n [MuscleGroup.REAR_DELTS]: ['deltoids'],\n [MuscleGroup.TRICEPS]: ['triceps'],\n [MuscleGroup.LATS]: ['upper-back'],\n [MuscleGroup.UPPER_BACK]: ['upper-back', 'trapezius'],\n [MuscleGroup.BICEPS]: ['biceps'],\n [MuscleGroup.FOREARMS]: ['forearm'],\n [MuscleGroup.QUADS]: ['quadriceps'],\n [MuscleGroup.HAMSTRINGS]: ['hamstring'],\n [MuscleGroup.GLUTES]: ['gluteal'],\n [MuscleGroup.CALVES]: ['calves'],\n [MuscleGroup.ABS]: ['abs'],\n [MuscleGroup.OBLIQUES]: ['obliques'],\n}\n\n/** Human-readable name per muscle group (used in a11y labels). */\nexport const MUSCLE_DISPLAY_NAMES: Record<MuscleGroup, string> = {\n [MuscleGroup.CHEST]: 'Chest',\n [MuscleGroup.FRONT_DELTS]: 'Front Delts',\n [MuscleGroup.SIDE_DELTS]: 'Side Delts',\n [MuscleGroup.REAR_DELTS]: 'Rear Delts',\n [MuscleGroup.TRICEPS]: 'Triceps',\n [MuscleGroup.LATS]: 'Lats',\n [MuscleGroup.UPPER_BACK]: 'Upper Back',\n [MuscleGroup.BICEPS]: 'Biceps',\n [MuscleGroup.FOREARMS]: 'Forearms',\n [MuscleGroup.QUADS]: 'Quads',\n [MuscleGroup.HAMSTRINGS]: 'Hamstrings',\n [MuscleGroup.GLUTES]: 'Glutes',\n [MuscleGroup.CALVES]: 'Calves',\n [MuscleGroup.ABS]: 'Abs',\n [MuscleGroup.OBLIQUES]: 'Obliques',\n}\n\n/** Human-readable name per simple group. */\nexport const SIMPLE_DISPLAY_NAMES: Record<SimpleMuscleGroup, string> = {\n [SimpleMuscleGroup.CHEST]: 'Chest',\n [SimpleMuscleGroup.BACK]: 'Back',\n [SimpleMuscleGroup.SHOULDERS]: 'Shoulders',\n [SimpleMuscleGroup.BICEPS]: 'Biceps',\n [SimpleMuscleGroup.TRICEPS]: 'Triceps',\n [SimpleMuscleGroup.LEGS]: 'Legs',\n [SimpleMuscleGroup.CORE]: 'Core',\n [SimpleMuscleGroup.FOREARMS]: 'Forearms',\n}\n\n/** Volume landmarks per muscle group (weekly working sets). */\nexport interface VolumeLandmarks {\n mev: number // Minimum Effective Volume\n mav: number // Maximum Adaptive Volume\n mrv: number // Maximum Recoverable Volume\n}\n\nexport const DEFAULT_VOLUME_LANDMARKS: Record<MuscleGroup, VolumeLandmarks> = {\n [MuscleGroup.CHEST]: { mev: 8, mav: 14, mrv: 20 },\n [MuscleGroup.LATS]: { mev: 8, mav: 14, mrv: 20 },\n [MuscleGroup.UPPER_BACK]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.FRONT_DELTS]: { mev: 2, mav: 6, mrv: 10 },\n [MuscleGroup.SIDE_DELTS]: { mev: 6, mav: 14, mrv: 22 },\n [MuscleGroup.REAR_DELTS]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.BICEPS]: { mev: 4, mav: 10, mrv: 18 },\n [MuscleGroup.TRICEPS]: { mev: 4, mav: 8, mrv: 14 },\n [MuscleGroup.FOREARMS]: { mev: 2, mav: 6, mrv: 12 },\n [MuscleGroup.QUADS]: { mev: 6, mav: 12, mrv: 18 },\n [MuscleGroup.HAMSTRINGS]: { mev: 4, mav: 10, mrv: 16 },\n [MuscleGroup.GLUTES]: { mev: 4, mav: 10, mrv: 16 },\n [MuscleGroup.CALVES]: { mev: 6, mav: 10, mrv: 16 },\n [MuscleGroup.ABS]: { mev: 0, mav: 8, mrv: 16 },\n [MuscleGroup.OBLIQUES]: { mev: 0, mav: 6, mrv: 12 },\n}\n\n/** Weekly-volume status relative to MEV/MAV/MRV landmarks. */\nexport type VolumeStatus = 'under' | 'maintenance' | 'productive' | 'over'\n\n/** Readable label per status for a11y descriptions. */\nexport const VOLUME_STATUS_LABELS: Record<VolumeStatus, string> = {\n under: 'under-trained',\n maintenance: 'maintenance',\n productive: 'productive',\n over: 'over-reaching',\n}\n\n/** Severity ranking — higher wins when several groups share an SVG slug. */\nconst STATUS_SEVERITY: Record<VolumeStatus, number> = {\n under: 1,\n maintenance: 2,\n productive: 3,\n over: 4,\n}\n\n/**\n * Maps a volume status (and intensity, 0-1) to a heatmap fill color. The\n * `approaching` token is used when a productive muscle nears its MRV.\n */\nexport function getHeatmapColor(status: VolumeStatus | null | undefined, intensity = 0): string {\n const heatmap = WORKOUT_TOKENS.heatmap\n switch (status) {\n case 'under':\n return heatmap.under\n case 'maintenance':\n return heatmap.maintenance\n case 'productive':\n return intensity >= 0.85 ? heatmap.approaching : heatmap.productive\n case 'over':\n return heatmap.over\n default:\n return heatmap.none\n }\n}\n\n/** True when one status is at least as severe as another. */\nexport function isMoreSevere(a: VolumeStatus, b: VolumeStatus): boolean {\n return STATUS_SEVERITY[a] >= STATUS_SEVERITY[b]\n}\n\n/**\n * Representative MuscleGroup for each SVG slug, used to resolve taps on shared\n * paths (e.g. `deltoids`, `upper-back`) back to a single group.\n */\nexport const SLUG_TO_PRIMARY_MUSCLE: Record<string, MuscleGroup> = {\n chest: MuscleGroup.CHEST,\n deltoids: MuscleGroup.SIDE_DELTS,\n triceps: MuscleGroup.TRICEPS,\n 'upper-back': MuscleGroup.LATS,\n trapezius: MuscleGroup.UPPER_BACK,\n biceps: MuscleGroup.BICEPS,\n forearm: MuscleGroup.FOREARMS,\n quadriceps: MuscleGroup.QUADS,\n hamstring: MuscleGroup.HAMSTRINGS,\n gluteal: MuscleGroup.GLUTES,\n calves: MuscleGroup.CALVES,\n abs: MuscleGroup.ABS,\n obliques: MuscleGroup.OBLIQUES,\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useMemo, useState } from 'react'\nimport { View, Text, Pressable, Animated, Easing, type ViewProps } from 'react-native'\nimport BodyHighlighter, { type ExtendedBodyPart, type Slug } from 'react-native-body-highlighter'\nimport { cn } from '../../../utils/cn'\nimport {\n MuscleGroup,\n SimpleMuscleGroup,\n MUSCLE_TO_SVG_SLUGS,\n MUSCLE_DISPLAY_NAMES,\n SIMPLE_DISPLAY_NAMES,\n DETAILED_TO_SIMPLE,\n SLUG_TO_PRIMARY_MUSCLE,\n VOLUME_STATUS_LABELS,\n getHeatmapColor,\n isMoreSevere,\n type VolumeStatus,\n} from './muscleTaxonomy'\n\n/**\n * react-native-body-highlighter is published as a CommonJS default export; the\n * interop keeps it working whether the bundler unwraps the default or not.\n */\nconst Body = ((BodyHighlighter as unknown as { default?: typeof BodyHighlighter }).default ??\n BodyHighlighter) as typeof BodyHighlighter\n\nconst OUTLINE_FILL = 'rgba(255,255,255,0.08)'\nconst OUTLINE_BORDER = 'rgba(255,255,255,0.12)'\nconst BODY_SCALE = 0.8 // 200x400 intrinsic -> ~160x320 px\nconst TEXT_PRIMARY = 'var(--color-text-primary)'\nconst TEXT_SECONDARY = 'var(--color-text-secondary)'\n\nexport interface BodyMapData {\n muscleGroup: MuscleGroup\n /** Intensity 0-1 for heatmap color. */\n intensity: number\n /** Volume status for tooltip / heatmap token. */\n volumeStatus: VolumeStatus\n /** Weekly effective sets. */\n weeklySets: number\n}\n\nexport interface BodyMapProps extends ViewProps {\n /** Muscle group intensity data. */\n data: BodyMapData[]\n /** Which view to show. */\n view: 'front' | 'back'\n /** Toggle between front/back. */\n onViewChange?: (view: 'front' | 'back') => void\n /** Called when a muscle group is tapped. */\n onMusclePress?: (muscleGroup: MuscleGroup) => void\n /** Currently highlighted muscle (from external selection). */\n highlightedMuscle?: MuscleGroup | null\n /** Show simplified (8 groups) or detailed (15 groups). */\n mode?: 'simple' | 'detailed'\n className?: string\n}\n\ninterface LegendEntry {\n key: string\n name: string\n status: VolumeStatus\n intensity: number\n sets: number\n /** Detailed group reported to onMusclePress. */\n muscle: MuscleGroup\n}\n\n/** Build the per-slug heatmap fill list, combining groups that share a slug. */\nfunction buildSlugParts(data: BodyMapData[]): ExtendedBodyPart[] {\n const bySlug = new Map<string, { status: VolumeStatus; intensity: number }>()\n for (const d of data) {\n for (const slug of MUSCLE_TO_SVG_SLUGS[d.muscleGroup] ?? []) {\n const existing = bySlug.get(slug)\n if (!existing || isMoreSevere(d.volumeStatus, existing.status)) {\n bySlug.set(slug, { status: d.volumeStatus, intensity: d.intensity })\n }\n }\n }\n return Array.from(bySlug.entries()).map(([slug, v]) => ({\n slug: slug as Slug,\n color: getHeatmapColor(v.status, v.intensity),\n }))\n}\n\n/** Collapse data into per-simple-group legend entries (summed sets). */\nfunction buildSimpleLegend(data: BodyMapData[]): LegendEntry[] {\n const bySimple = new Map<SimpleMuscleGroup, LegendEntry>()\n for (const d of data) {\n const simple = DETAILED_TO_SIMPLE[d.muscleGroup]\n const existing = bySimple.get(simple)\n if (!existing) {\n bySimple.set(simple, {\n key: simple,\n name: SIMPLE_DISPLAY_NAMES[simple],\n status: d.volumeStatus,\n intensity: d.intensity,\n sets: d.weeklySets,\n muscle: d.muscleGroup,\n })\n continue\n }\n existing.sets += d.weeklySets\n existing.intensity = Math.max(existing.intensity, d.intensity)\n if (isMoreSevere(d.volumeStatus, existing.status)) {\n existing.status = d.volumeStatus\n existing.muscle = d.muscleGroup\n }\n }\n return Array.from(bySimple.values())\n}\n\n/** One legend entry per data row, named by detailed group. */\nfunction buildDetailedLegend(data: BodyMapData[]): LegendEntry[] {\n return data.map((d) => ({\n key: d.muscleGroup,\n name: MUSCLE_DISPLAY_NAMES[d.muscleGroup],\n status: d.volumeStatus,\n intensity: d.intensity,\n sets: d.weeklySets,\n muscle: d.muscleGroup,\n }))\n}\n\n/**\n * Interactive SVG body map with tappable muscle groups and a volume heatmap.\n * Renders the front or back view (toggle via onViewChange), colors each muscle\n * by its weekly-volume status, and exposes an accessible muscle legend wired to\n * onMusclePress. Phase 1 uses react-native-body-highlighter's combined slugs\n * (deltoids as one path, lats/upper-back shared); swipe between views and the\n * delt/lat SVG split are follow-ups.\n *\n * @example\n * <BodyMap\n * data={[{ muscleGroup: MuscleGroup.CHEST, intensity: 0.7, volumeStatus: 'productive', weeklySets: 12 }]}\n * view=\"front\"\n * onViewChange={setView}\n * onMusclePress={setSelected}\n * highlightedMuscle={selected}\n * />\n */\nexport function BodyMap({\n data,\n view,\n onViewChange,\n onMusclePress,\n highlightedMuscle,\n mode = 'detailed',\n className,\n ...props\n}: BodyMapProps) {\n const slugParts = useMemo(() => buildSlugParts(data), [data])\n const legend = useMemo(\n () => (mode === 'simple' ? buildSimpleLegend(data) : buildDetailedLegend(data)),\n [data, mode]\n )\n\n const [highlight] = useState(() => new Animated.Value(highlightedMuscle ? 1 : 0))\n useEffect(() => {\n const animation = Animated.timing(highlight, {\n toValue: highlightedMuscle ? 1 : 0,\n duration: 250,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n })\n animation.start()\n return () => animation.stop()\n }, [highlightedMuscle, highlight])\n\n const scale = highlight.interpolate({ inputRange: [0, 1], outputRange: [1, 1.02] })\n const glowColor = highlightedMuscle\n ? getHeatmapColor(\n data.find((d) => d.muscleGroup === highlightedMuscle)?.volumeStatus,\n data.find((d) => d.muscleGroup === highlightedMuscle)?.intensity ?? 0\n )\n : null\n\n const handleBodyPress = (part: ExtendedBodyPart) => {\n if (!onMusclePress || !part.slug) return\n const fromData = data.find((d) =>\n (MUSCLE_TO_SVG_SLUGS[d.muscleGroup] ?? []).includes(part.slug as string)\n )\n const muscle = fromData?.muscleGroup ?? SLUG_TO_PRIMARY_MUSCLE[part.slug]\n if (muscle) onMusclePress(muscle)\n }\n\n return (\n <View className={cn(className)} testID=\"body-map\" {...props}>\n <ViewToggle view={view} onViewChange={onViewChange} />\n\n <Animated.View\n style={[\n {\n width: 200 * BODY_SCALE,\n alignSelf: 'center',\n transform: [{ scale }],\n },\n glowColor ? { boxShadow: `0 0 14px 2px ${glowColor}` } : undefined,\n ]}\n // The SVG is decorative; the accessible muscle legend below is the\n // screen-reader / keyboard interface.\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n testID=\"body-map-svg\"\n >\n <Body\n side={view}\n data={slugParts}\n scale={BODY_SCALE}\n gender=\"male\"\n defaultFill={OUTLINE_FILL}\n border={OUTLINE_BORDER}\n onBodyPartPress={handleBodyPress}\n />\n </Animated.View>\n\n {legend.length === 0 ? (\n <Text\n style={{\n marginTop: 8,\n fontSize: 12,\n color: TEXT_SECONDARY,\n textAlign: 'center',\n fontFamily: 'Inter, sans-serif',\n }}\n testID=\"body-map-empty\"\n >\n No training data\n </Text>\n ) : (\n <View\n className=\"flex-row flex-wrap\"\n style={{ marginTop: 10, gap: 6, justifyContent: 'center' }}\n testID=\"body-map-legend\"\n >\n {legend.map((entry) => (\n <MuscleButton\n key={entry.key}\n entry={entry}\n highlighted={highlightedMuscle === entry.muscle}\n onMusclePress={onMusclePress}\n />\n ))}\n </View>\n )}\n </View>\n )\n}\n\ninterface ViewToggleProps {\n view: 'front' | 'back'\n onViewChange?: (view: 'front' | 'back') => void\n}\n\nfunction ViewToggle({ view, onViewChange }: ViewToggleProps) {\n return (\n <View\n className=\"flex-row self-center\"\n style={{ gap: 4, marginBottom: 8 }}\n testID=\"body-map-view-toggle\"\n >\n {(['front', 'back'] as const).map((side) => {\n const active = view === side\n return (\n <Pressable\n key={side}\n onPress={() => onViewChange?.(side)}\n accessibilityRole=\"button\"\n accessibilityLabel={`Show ${side} view`}\n aria-pressed={active}\n disabled={!onViewChange}\n style={{\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderRadius: 9999,\n backgroundColor: active ? 'rgba(255,121,0,0.16)' : 'transparent',\n borderWidth: 1,\n borderColor: active ? '#FF7900' : 'var(--color-border-strong)',\n }}\n testID={`body-map-toggle-${side}`}\n >\n <Text\n style={{\n fontSize: 12,\n fontFamily: 'Inter, sans-serif',\n fontWeight: active ? '700' : '500',\n color: active ? '#FF7900' : TEXT_SECONDARY,\n textTransform: 'capitalize',\n }}\n >\n {side}\n </Text>\n </Pressable>\n )\n })}\n </View>\n )\n}\n\ninterface MuscleButtonProps {\n entry: LegendEntry\n highlighted: boolean\n onMusclePress?: (muscleGroup: MuscleGroup) => void\n}\n\nfunction MuscleButton({ entry, highlighted, onMusclePress }: MuscleButtonProps) {\n const dotColor = getHeatmapColor(entry.status, entry.intensity)\n const label = `${entry.name}, ${VOLUME_STATUS_LABELS[entry.status]}, ${entry.sets} sets this week`\n return (\n <Pressable\n onPress={() => onMusclePress?.(entry.muscle)}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n aria-pressed={highlighted}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 9999,\n borderWidth: 1,\n borderColor: highlighted ? '#FF7900' : 'var(--color-border-default)',\n backgroundColor: 'var(--color-surface-raised)',\n }}\n testID={`body-map-muscle-${entry.key}`}\n >\n <View\n style={{ width: 7, height: 7, borderRadius: 9999, backgroundColor: dotColor }}\n accessibilityElementsHidden\n testID={`body-map-muscle-dot-${entry.key}`}\n />\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '500',\n color: TEXT_PRIMARY,\n }}\n accessibilityElementsHidden\n >\n {entry.name}\n </Text>\n </Pressable>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useEffect, useState } from 'react'\nimport {\n View,\n Text,\n Pressable,\n ScrollView,\n Animated,\n Easing,\n type ViewProps,\n type ViewStyle,\n} from 'react-native'\nimport { Badge, type BadgeColor } from '../../ui/badge'\nimport { Sparkline } from './Sparkline'\nimport {\n MuscleGroup,\n VOLUME_STATUS_LABELS,\n type VolumeLandmarks,\n type VolumeStatus,\n} from './muscleTaxonomy'\n\nconst SURFACE_ELEVATED = 'var(--color-surface-elevated)'\nconst SURFACE_RAISED = 'var(--color-surface-raised)'\nconst BORDER_STRONG = 'var(--color-border-strong)'\nconst BORDER_DEFAULT = 'var(--color-border-default)'\nconst BRAND_PRIMARY = '#FF7900'\nconst TEXT_PRIMARY = 'var(--color-text-primary)'\nconst TEXT_SECONDARY = 'var(--color-text-secondary)'\nconst TEXT_TERTIARY = 'var(--color-text-tertiary)'\n\n/** Volume track gradient: status-info (blue) -> result-improve (teal) -> status-error (red). */\nconst VOLUME_GRADIENT = 'linear-gradient(90deg, #2196F3 0%, #14B8A6 50%, #D14343 100%)'\n\n/** Sheet slides up from this offset (px) and the backdrop fades to this opacity. */\nconst SLIDE_OFFSET = 400\nconst BACKDROP_OPACITY = 0.4\n\n/** Volume status -> Badge color scheme. */\nconst STATUS_BADGE_COLOR: Record<VolumeStatus, BadgeColor> = {\n under: 'info',\n maintenance: 'warning',\n productive: 'success',\n over: 'error',\n}\n\nexport interface ContributingExercise {\n /** Exercise name. */\n name: string\n /** Working sets contributed this week. */\n sets: number\n /** Effective-set multiplier toward this muscle (0-1). */\n contributionWeight: number\n}\n\nexport interface UpcomingExercise {\n /** Exercise name. */\n name: string\n /** Workout the exercise belongs to. */\n workoutName: string\n /** Planned sets. */\n sets: number\n}\n\nexport interface BodyMapDetailPanelProps extends ViewProps {\n /** Muscle group whose volume detail is shown. */\n muscleGroup: MuscleGroup\n /** Human-readable muscle name for the title and a11y label. */\n displayName: string\n /** Weekly effective sets logged for this muscle. */\n weeklySets: number\n /** Volume landmarks (weekly working sets). */\n landmarks: VolumeLandmarks\n /** Weekly-volume status relative to the landmarks. */\n volumeStatus: VolumeStatus\n /** Last trained label, e.g. \"2 days ago\". */\n lastTrained?: string\n /** Volume sparkline data (last 4-8 weeks). */\n weeklyHistory?: number[]\n /** Exercises contributing to this muscle's volume. */\n contributingExercises?: ContributingExercise[]\n /** Upcoming exercises targeting this muscle. */\n upcomingExercises?: UpcomingExercise[]\n /** Whether the bottom sheet is visible. */\n isOpen?: boolean\n /** Alias for `isOpen` (spec wording: \"isOpen/visible\"). `isOpen` wins when both are set. */\n visible?: boolean\n /** Dismiss the panel (backdrop, handle, or close button). */\n onClose: () => void\n /** Navigate to a filtered exercise list. */\n onViewExercises?: () => void\n}\n\nfunction clamp01(value: number): number {\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\n/** Marker position (0-1) of current sets between MEV (left) and MRV (right). */\nfunction markerFraction(weeklySets: number, { mev, mrv }: VolumeLandmarks): number {\n const span = mrv - mev\n if (span <= 0) return weeklySets >= mrv ? 1 : 0\n return clamp01((weeklySets - mev) / span)\n}\n\n/**\n * Slide-up bottom-sheet panel with detailed weekly-volume info for a tapped\n * muscle group: a MEV|current|MRV gradient progress bar, the big weekly set\n * count against MRV, an optional volume sparkline, and the contributing /\n * upcoming exercise lists. Composes the titan `Badge` and Workout `Sparkline`.\n *\n * Controlled via `isOpen` (or the `visible` alias); renders nothing when closed\n * and animates in on open — sheet translateY 400->0 (400ms ease-out) and a\n * backdrop fade 0->0.4 (RN Animated, useNativeDriver:false). Backdrop, handle,\n * and the header close button all call `onClose`.\n *\n * @example\n * <BodyMapDetailPanel\n * muscleGroup={MuscleGroup.CHEST}\n * displayName=\"Chest\"\n * weeklySets={14}\n * landmarks={{ mev: 8, mav: 14, mrv: 20 }}\n * volumeStatus=\"productive\"\n * lastTrained=\"2 days ago\"\n * weeklyHistory={[8, 10, 12, 14]}\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * />\n */\nexport function BodyMapDetailPanel({\n muscleGroup,\n displayName,\n weeklySets,\n landmarks,\n volumeStatus,\n lastTrained,\n weeklyHistory,\n contributingExercises,\n upcomingExercises,\n isOpen,\n visible,\n onClose,\n onViewExercises,\n ...props\n}: BodyMapDetailPanelProps) {\n const open = isOpen ?? visible ?? false\n\n const [translateY] = useState(() => new Animated.Value(SLIDE_OFFSET))\n const [backdrop] = useState(() => new Animated.Value(0))\n\n useEffect(() => {\n if (!open) return\n const animation = Animated.parallel([\n Animated.timing(translateY, {\n toValue: 0,\n duration: 400,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n Animated.timing(backdrop, {\n toValue: BACKDROP_OPACITY,\n duration: 300,\n easing: Easing.out(Easing.ease),\n useNativeDriver: false,\n }),\n ])\n animation.start()\n return () => animation.stop()\n }, [open, translateY, backdrop])\n\n if (!open) return null\n\n const dialogLabel = `${displayName} volume details`\n const markerLeft = markerFraction(weeklySets, landmarks) * 100\n const hasContributing = (contributingExercises?.length ?? 0) > 0\n const hasUpcoming = (upcomingExercises?.length ?? 0) > 0\n\n return (\n <View\n style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'flex-end' }}\n testID=\"body-map-detail-panel-root\"\n >\n <Animated.View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: '#000000',\n opacity: backdrop,\n }}\n testID=\"body-map-detail-panel-backdrop-anim\"\n >\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n style={{ flex: 1 }}\n testID=\"body-map-detail-panel-backdrop\"\n />\n </Animated.View>\n\n <Animated.View\n accessibilityRole={'dialog' as ViewProps['accessibilityRole']}\n accessibilityLabel={dialogLabel}\n aria-label={dialogLabel}\n style={{\n backgroundColor: SURFACE_ELEVATED,\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n maxHeight: '88%',\n transform: [{ translateY }],\n }}\n testID=\"body-map-detail-panel\"\n {...props}\n >\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n hitSlop={12}\n style={{ alignSelf: 'center', paddingVertical: 8 }}\n testID=\"body-map-detail-panel-handle\"\n >\n <View\n style={{ width: 40, height: 4, borderRadius: 2, backgroundColor: BORDER_STRONG }}\n accessibilityElementsHidden\n />\n </Pressable>\n\n <ScrollView\n style={{ paddingHorizontal: 16 }}\n contentContainerStyle={{ paddingBottom: 20 }}\n testID=\"body-map-detail-panel-scroll\"\n >\n <View\n className=\"flex-row items-center justify-between\"\n style={{ gap: 8, paddingTop: 4, paddingBottom: 4 }}\n testID=\"body-map-detail-panel-header\"\n >\n <View className=\"flex-row items-center\" style={{ gap: 8, flexShrink: 1 }}>\n <Text\n accessibilityRole=\"header\"\n style={{\n fontSize: 16,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"body-map-detail-panel-title\"\n >\n {displayName}\n </Text>\n <Badge\n variant=\"subtle\"\n color={STATUS_BADGE_COLOR[volumeStatus]}\n size=\"sm\"\n testID=\"body-map-detail-panel-status-badge\"\n >\n {VOLUME_STATUS_LABELS[volumeStatus]}\n </Badge>\n </View>\n <Pressable\n onPress={onClose}\n accessibilityRole=\"button\"\n accessibilityLabel={`Close ${displayName} details`}\n hitSlop={8}\n style={{ padding: 4, margin: -4 }}\n testID=\"body-map-detail-panel-close\"\n >\n <Text style={{ fontSize: 22, lineHeight: 22, color: TEXT_SECONDARY }}>{'×'}</Text>\n </Pressable>\n </View>\n\n {lastTrained != null && (\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"body-map-detail-panel-last-trained\"\n >\n {`Last trained ${lastTrained}`}\n </Text>\n )}\n\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-volume\">\n <View\n className=\"flex-row items-center justify-between\"\n style={{ marginBottom: 6 }}\n accessibilityElementsHidden\n >\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_TERTIARY }}>\n {`MEV ${landmarks.mev}`}\n </Text>\n <Text style={{ fontSize: 10, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_TERTIARY }}>\n {`MRV ${landmarks.mrv}`}\n </Text>\n </View>\n <View\n style={{ height: 14, justifyContent: 'center' }}\n accessibilityRole=\"progressbar\"\n accessibilityValue={{ min: landmarks.mev, max: landmarks.mrv, now: weeklySets }}\n accessibilityLabel={`${weeklySets} weekly sets, between MEV ${landmarks.mev} and MRV ${landmarks.mrv}`}\n aria-valuenow={weeklySets}\n aria-valuemin={landmarks.mev}\n aria-valuemax={landmarks.mrv}\n testID=\"body-map-detail-panel-volume-bar\"\n >\n <View\n style={{ height: 8, borderRadius: 4, backgroundImage: VOLUME_GRADIENT } as ViewStyle}\n accessibilityElementsHidden\n />\n <View\n style={{\n position: 'absolute',\n left: `${markerLeft}%`,\n marginLeft: -7,\n width: 14,\n height: 14,\n borderRadius: 7,\n borderWidth: 2,\n borderColor: TEXT_PRIMARY,\n backgroundColor: SURFACE_ELEVATED,\n boxShadow: '0 0 4px rgba(0,0,0,0.5)',\n }}\n accessibilityElementsHidden\n testID=\"body-map-detail-panel-volume-marker\"\n />\n </View>\n </View>\n\n <View className=\"flex-row items-baseline\" style={{ marginTop: 14, gap: 4 }}>\n <Text\n style={{\n fontSize: 24,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"body-map-detail-panel-set-count\"\n >\n {weeklySets}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID=\"body-map-detail-panel-mrv-suffix\"\n >\n {`/ ${landmarks.mrv} MRV`}\n </Text>\n </View>\n\n {weeklyHistory != null && weeklyHistory.length > 0 && (\n <View style={{ marginTop: 14 }} testID=\"body-map-detail-panel-sparkline\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 6,\n }}\n accessibilityElementsHidden\n >\n {'VOLUME TREND'}\n </Text>\n <Sparkline data={weeklyHistory} width={80} height={30} highlightLast />\n </View>\n )}\n\n {hasContributing && (\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-contributing\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 8,\n }}\n >\n {'CONTRIBUTING EXERCISES'}\n </Text>\n {contributingExercises!.map((exercise, index) => (\n <View\n key={`${exercise.name}-${index}`}\n className=\"flex-row items-center justify-between\"\n style={{\n gap: 10,\n paddingVertical: 8,\n paddingHorizontal: 12,\n marginBottom: 6,\n borderRadius: 8,\n backgroundColor: SURFACE_RAISED,\n borderWidth: 1,\n borderColor: BORDER_DEFAULT,\n }}\n testID={`body-map-detail-panel-contributing-${index}`}\n >\n <Text\n style={{ flex: 1, fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_PRIMARY }}\n testID={`body-map-detail-panel-contributing-${index}-name`}\n >\n {exercise.name}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_SECONDARY }}\n testID={`body-map-detail-panel-contributing-${index}-detail`}\n >\n {`${exercise.sets} sets · ${Math.round(exercise.contributionWeight * 100)}%`}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {hasUpcoming && (\n <View style={{ marginTop: 16 }} testID=\"body-map-detail-panel-upcoming\">\n <Text\n style={{\n fontSize: 10,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n color: TEXT_TERTIARY,\n marginBottom: 8,\n }}\n >\n {'UPCOMING'}\n </Text>\n {upcomingExercises!.map((exercise, index) => (\n <View\n key={`${exercise.name}-${index}`}\n className=\"flex-row items-center justify-between\"\n style={{ gap: 10, paddingVertical: 6 }}\n testID={`body-map-detail-panel-upcoming-${index}`}\n >\n <Text\n style={{ flex: 1, fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '600', color: TEXT_PRIMARY }}\n testID={`body-map-detail-panel-upcoming-${index}-name`}\n >\n {exercise.name}\n </Text>\n <Text\n style={{ fontSize: 12, fontFamily: 'Inter, sans-serif', color: TEXT_TERTIARY }}\n testID={`body-map-detail-panel-upcoming-${index}-detail`}\n >\n {`${exercise.workoutName} · ${exercise.sets} sets`}\n </Text>\n </View>\n ))}\n </View>\n )}\n\n {onViewExercises != null && (\n <Pressable\n onPress={onViewExercises}\n accessibilityRole=\"button\"\n accessibilityLabel={`View ${displayName} exercises`}\n style={{\n marginTop: 16,\n paddingVertical: 10,\n borderRadius: 8,\n alignItems: 'center',\n backgroundColor: 'rgba(255,121,0,0.12)',\n borderWidth: 1,\n borderColor: 'rgba(255,121,0,0.3)',\n }}\n testID=\"body-map-detail-panel-view-exercises\"\n >\n <Text style={{ fontSize: 13, fontFamily: 'Inter, sans-serif', fontWeight: '700', color: BRAND_PRIMARY }}>\n {'View exercises'}\n </Text>\n </Pressable>\n )}\n </ScrollView>\n </Animated.View>\n </View>\n )\n}\n","// Font mapping: font-heading=Space Grotesk, font-body=Nunito Sans (UI), font-sans=Inter (body)\nimport { useMemo, useState } from 'react'\nimport { View, Text, type ViewProps } from 'react-native'\nimport { BodyMap, type BodyMapData } from './BodyMap'\nimport {\n BodyMapDetailPanel,\n type ContributingExercise,\n type UpcomingExercise,\n} from './BodyMapDetailPanel'\nimport { MesoStatusCard, type MesoStatusCardProps } from './MesoStatusCard'\nimport {\n MuscleGroup,\n VOLUME_STATUS_LABELS,\n getHeatmapColor,\n type VolumeLandmarks,\n type VolumeStatus,\n} from './muscleTaxonomy'\n\nconst SURFACE_ELEVATED = 'var(--color-surface-elevated)'\nconst BORDER_DEFAULT = 'var(--color-border-default)'\nconst TEXT_PRIMARY = 'var(--color-text-primary)'\nconst TEXT_SECONDARY = 'var(--color-text-secondary)'\nconst TEXT_TERTIARY = 'var(--color-text-tertiary)'\nconst PAGE_BG = 'var(--color-background-base)'\n\n/** Volume statuses in display order for the legend and summary cards. */\nconst STATUS_ORDER: VolumeStatus[] = ['under', 'maintenance', 'productive', 'over']\n\n/** One muscle's full volume picture — feeds the body maps and the detail panel. */\nexport interface TrainingStatusMuscle {\n /** Detailed muscle group (drives the SVG heatmap + panel identity). */\n muscleGroup: MuscleGroup\n /** Human-readable name for the legend, summary, and panel title. */\n displayName: string\n /** Which body-map view the muscle belongs to. */\n side: 'front' | 'back'\n /** Heatmap intensity 0-1. */\n intensity: number\n /** Weekly-volume status relative to the landmarks. */\n volumeStatus: VolumeStatus\n /** Weekly effective sets logged. */\n weeklySets: number\n /** Volume landmarks (weekly working sets). */\n landmarks: VolumeLandmarks\n /** Last trained label, e.g. \"2 days ago\". */\n lastTrained?: string\n /** Weekly volume history for the panel sparkline. */\n weeklyHistory?: number[]\n /** Exercises contributing to this muscle's volume. */\n contributingExercises?: ContributingExercise[]\n /** Upcoming exercises targeting this muscle. */\n upcomingExercises?: UpcomingExercise[]\n}\n\n/** Derived, page-level roll-up of the tracked muscles. */\nexport interface TrainingStatusSummary {\n /** Total weekly effective sets across all tracked muscles. */\n totalWeeklySets: number\n /** Number of muscles being tracked. */\n trackedMuscles: number\n /** Count of muscles per volume status. */\n statusCounts: Record<VolumeStatus, number>\n}\n\nexport interface TrainingStatusPageProps extends ViewProps {\n /** Page heading. */\n title?: string\n /** Mesocycle context banner shown at the top. */\n meso: MesoStatusCardProps\n /** Muscles tracked this week. */\n muscles: TrainingStatusMuscle[]\n className?: string\n}\n\n/** Roll up per-muscle rows into the page summary (pure, testable). */\nexport function deriveTrainingSummary(muscles: TrainingStatusMuscle[]): TrainingStatusSummary {\n const statusCounts: Record<VolumeStatus, number> = {\n under: 0,\n maintenance: 0,\n productive: 0,\n over: 0,\n }\n let totalWeeklySets = 0\n for (const muscle of muscles) {\n totalWeeklySets += muscle.weeklySets\n statusCounts[muscle.volumeStatus] += 1\n }\n return { totalWeeklySets, trackedMuscles: muscles.length, statusCounts }\n}\n\n/** Project the muscle rows for one side into `BodyMap` heatmap data. */\nexport function toBodyMapData(\n muscles: TrainingStatusMuscle[],\n side: 'front' | 'back'\n): BodyMapData[] {\n return muscles\n .filter((muscle) => muscle.side === side)\n .map(({ muscleGroup, intensity, volumeStatus, weeklySets }) => ({\n muscleGroup,\n intensity,\n volumeStatus,\n weeklySets,\n }))\n}\n\nconst SUMMARY_CARDS: Array<{\n key: keyof TrainingStatusSummary['statusCounts'] | 'total'\n label: string\n}> = [\n { key: 'total', label: 'Weekly Sets' },\n { key: 'productive', label: 'Productive' },\n { key: 'under', label: 'Under' },\n { key: 'over', label: 'Over' },\n]\n\nfunction SummaryCards({ summary }: { summary: TrainingStatusSummary }) {\n return (\n <View className=\"flex-row flex-wrap\" style={{ gap: 8 }} testID=\"training-status-page-summary\">\n {SUMMARY_CARDS.map(({ key, label }) => {\n const value = key === 'total' ? summary.totalWeeklySets : summary.statusCounts[key]\n return (\n <View\n key={key}\n style={{\n flexGrow: 1,\n flexBasis: '46%',\n padding: 12,\n borderRadius: 10,\n backgroundColor: SURFACE_ELEVATED,\n borderWidth: 1,\n borderColor: BORDER_DEFAULT,\n }}\n testID={`training-status-page-summary-${key}`}\n >\n <Text\n style={{\n fontSize: 22,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n >\n {value}\n </Text>\n <Text\n style={{\n marginTop: 2,\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n color: TEXT_TERTIARY,\n }}\n >\n {label}\n </Text>\n </View>\n )\n })}\n </View>\n )\n}\n\nfunction StatusLegend() {\n return (\n <View\n className=\"flex-row flex-wrap\"\n style={{ gap: 10, justifyContent: 'center' }}\n testID=\"training-status-page-legend\"\n >\n {STATUS_ORDER.map((status) => (\n <View\n key={status}\n className=\"flex-row items-center\"\n style={{ gap: 5 }}\n testID={`training-status-page-legend-${status}`}\n >\n <View\n style={{\n width: 8,\n height: 8,\n borderRadius: 9999,\n backgroundColor: getHeatmapColor(status, 0.6),\n }}\n accessibilityElementsHidden\n />\n <Text\n style={{\n fontSize: 11,\n fontFamily: 'Inter, sans-serif',\n color: TEXT_SECONDARY,\n textTransform: 'capitalize',\n }}\n >\n {VOLUME_STATUS_LABELS[status]}\n </Text>\n </View>\n ))}\n </View>\n )\n}\n\ninterface BodyMapColumnProps {\n side: 'front' | 'back'\n muscles: TrainingStatusMuscle[]\n selected: MuscleGroup | null\n onSelect: (muscle: MuscleGroup) => void\n}\n\nfunction BodyMapColumn({ side, muscles, selected, onSelect }: BodyMapColumnProps) {\n const data = useMemo(() => toBodyMapData(muscles, side), [muscles, side])\n return (\n <View style={{ flexGrow: 1, flexBasis: '46%' }} testID={`training-status-page-bodymap-${side}`}>\n <BodyMap\n data={data}\n view={side}\n onMusclePress={onSelect}\n highlightedMuscle={selected}\n mode=\"detailed\"\n />\n </View>\n )\n}\n\n/**\n * TrainingStatusPage — a body-map training dashboard that composes the\n * mesocycle context banner (`MesoStatusCard`), side-by-side front/back\n * `BodyMap`s with a shared heatmap legend, per-status summary cards, and a\n * tap-to-detail `BodyMapDetailPanel`. Tapping any muscle (SVG or legend chip)\n * opens the slide-up panel for that group; the summary is derived from the\n * supplied muscle rows.\n *\n * @example\n * <TrainingStatusPage meso={meso} muscles={muscles} />\n */\nexport function TrainingStatusPage({\n title = 'Training Status',\n meso,\n muscles,\n className,\n ...props\n}: TrainingStatusPageProps) {\n const [selected, setSelected] = useState<MuscleGroup | null>(null)\n const summary = useMemo(() => deriveTrainingSummary(muscles), [muscles])\n const active = selected != null ? (muscles.find((m) => m.muscleGroup === selected) ?? null) : null\n\n return (\n <View\n className={className}\n style={{ position: 'relative', width: 390, backgroundColor: PAGE_BG }}\n accessibilityRole={'main' as ViewProps['accessibilityRole']}\n aria-label={title}\n testID=\"training-status-page\"\n {...props}\n >\n <View style={{ padding: 16, gap: 16 }} testID=\"training-status-page-content\">\n <Text\n accessibilityRole=\"header\"\n style={{\n fontSize: 20,\n fontFamily: '\"Space Grotesk\", sans-serif',\n fontWeight: '700',\n color: TEXT_PRIMARY,\n }}\n testID=\"training-status-page-title\"\n >\n {title}\n </Text>\n\n <MesoStatusCard {...meso} />\n\n <SummaryCards summary={summary} />\n\n <View\n style={{\n backgroundColor: SURFACE_ELEVATED,\n borderWidth: 1,\n borderColor: BORDER_DEFAULT,\n borderRadius: 12,\n padding: 12,\n gap: 12,\n }}\n testID=\"training-status-page-bodymaps\"\n >\n <View className=\"flex-row\" style={{ gap: 8 }}>\n <BodyMapColumn\n side=\"front\"\n muscles={muscles}\n selected={selected}\n onSelect={setSelected}\n />\n <BodyMapColumn\n side=\"back\"\n muscles={muscles}\n selected={selected}\n onSelect={setSelected}\n />\n </View>\n <StatusLegend />\n </View>\n </View>\n\n {active != null && (\n <BodyMapDetailPanel\n muscleGroup={active.muscleGroup}\n displayName={active.displayName}\n weeklySets={active.weeklySets}\n landmarks={active.landmarks}\n volumeStatus={active.volumeStatus}\n lastTrained={active.lastTrained}\n weeklyHistory={active.weeklyHistory}\n contributingExercises={active.contributingExercises}\n upcomingExercises={active.upcomingExercises}\n isOpen\n onClose={() => setSelected(null)}\n />\n )}\n </View>\n )\n}\n"]}
@@ -732,6 +732,28 @@ function getSemanticColors(mode) {
732
732
  }
733
733
 
734
734
  // src/theme/config.ts
735
+ var themeIndependentCSSVars = {
736
+ // RGB decomposed values for glow shadows
737
+ "--color-brand-primary-rgb": "255, 121, 0",
738
+ "--color-brand-secondary-rgb": "64, 109, 135",
739
+ "--color-status-success-rgb": "20, 184, 166",
740
+ "--color-status-error-rgb": "209, 67, 67",
741
+ "--color-status-warning-rgb": "255, 176, 32",
742
+ "--color-status-info-rgb": "33, 150, 243",
743
+ "--color-background-base-rgb": "16, 16, 16",
744
+ // Font families
745
+ "--font-family-sans": "'Inter'",
746
+ "--font-family-body": "'Nunito Sans'",
747
+ "--font-family-heading": "'Space Grotesk'",
748
+ "--font-family-mono": "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace",
749
+ // Animation tokens
750
+ "--ease-out": "cubic-bezier(0.22, 1, 0.36, 1)",
751
+ "--ease-in-out": "cubic-bezier(0.65, 0, 0.35, 1)",
752
+ "--ease-spring": "cubic-bezier(0.34, 1.56, 0.64, 1)",
753
+ "--duration-fast": "150ms",
754
+ "--duration-normal": "250ms",
755
+ "--duration-slow": "400ms"
756
+ };
735
757
  var lightThemeCSSVars = {
736
758
  "--color-brand-primary": semanticColorsLight["brand-primary"],
737
759
  "--color-brand-primary-light": semanticColorsLight["brand-primary-light"],
@@ -772,7 +794,56 @@ var lightThemeCSSVars = {
772
794
  "--color-interactive-active": semanticColorsLight["interactive-active"],
773
795
  "--color-interactive-selected": semanticColorsLight["interactive-selected"],
774
796
  "--color-interactive-disabled": semanticColorsLight["interactive-disabled"],
775
- "--color-divider": semanticColorsLight["divider"]
797
+ "--color-divider": semanticColorsLight["divider"],
798
+ "--color-brand-primary-hover": semanticColorsLight["brand-primary-hover"],
799
+ "--color-brand-primary-active": semanticColorsLight["brand-primary-active"],
800
+ "--color-brand-secondary-hover": semanticColorsLight["brand-secondary-hover"],
801
+ "--color-brand-secondary-active": semanticColorsLight["brand-secondary-active"],
802
+ "--color-status-success-light": semanticColorsLight["status-success-light"],
803
+ "--color-status-success-dark": semanticColorsLight["status-success-dark"],
804
+ "--color-status-error-light": semanticColorsLight["status-error-light"],
805
+ "--color-status-error-dark": semanticColorsLight["status-error-dark"],
806
+ "--color-status-warning-light": semanticColorsLight["status-warning-light"],
807
+ "--color-status-warning-dark": semanticColorsLight["status-warning-dark"],
808
+ "--color-status-info-light": semanticColorsLight["status-info-light"],
809
+ "--color-status-info-dark": semanticColorsLight["status-info-dark"],
810
+ "--color-on-status-success": semanticColorsLight["on-status-success"],
811
+ "--color-on-status-error": semanticColorsLight["on-status-error"],
812
+ "--color-on-status-warning": semanticColorsLight["on-status-warning"],
813
+ "--color-on-status-info": semanticColorsLight["on-status-info"],
814
+ "--color-result-improve": semanticColorsLight["result-improve"],
815
+ "--color-result-improve-light": semanticColorsLight["result-improve-light"],
816
+ "--color-result-improve-dark": semanticColorsLight["result-improve-dark"],
817
+ "--color-result-degrade": semanticColorsLight["result-degrade"],
818
+ "--color-result-degrade-light": semanticColorsLight["result-degrade-light"],
819
+ "--color-result-degrade-dark": semanticColorsLight["result-degrade-dark"],
820
+ "--color-result-inconclusive": semanticColorsLight["result-inconclusive"],
821
+ "--color-result-inconclusive-light": semanticColorsLight["result-inconclusive-light"],
822
+ "--color-result-neutral": semanticColorsLight["result-neutral"],
823
+ "--color-on-result-improve": semanticColorsLight["on-result-improve"],
824
+ "--color-on-result-degrade": semanticColorsLight["on-result-degrade"],
825
+ "--color-on-result-inconclusive": semanticColorsLight["on-result-inconclusive"],
826
+ "--color-data-1": semanticColorsLight["data-1"],
827
+ "--color-data-2": semanticColorsLight["data-2"],
828
+ "--color-data-3": semanticColorsLight["data-3"],
829
+ "--color-data-4": semanticColorsLight["data-4"],
830
+ "--color-data-5": semanticColorsLight["data-5"],
831
+ "--color-data-6": semanticColorsLight["data-6"],
832
+ "--color-data-7": semanticColorsLight["data-7"],
833
+ "--color-data-8": semanticColorsLight["data-8"],
834
+ "--color-data-9": semanticColorsLight["data-9"],
835
+ "--color-data-10": semanticColorsLight["data-10"],
836
+ "--color-text-link-hover": semanticColorsLight["text-link-hover"],
837
+ "--color-surface-overlay": semanticColorsLight["surface-overlay"],
838
+ "--color-surface-input": semanticColorsLight["surface-input"],
839
+ "--color-border-input": semanticColorsLight["border-input"],
840
+ "--color-border-input-hover": semanticColorsLight["border-input-hover"],
841
+ "--color-border-input-focus": semanticColorsLight["border-input-focus"],
842
+ "--color-border-input-error": semanticColorsLight["border-input-error"],
843
+ "--color-interactive-disabled-text": semanticColorsLight["interactive-disabled-text"],
844
+ "--color-avatar-background": semanticColorsLight["avatar-background"],
845
+ "--color-avatar-text": semanticColorsLight["avatar-text"],
846
+ ...themeIndependentCSSVars
776
847
  };
777
848
  var darkThemeCSSVars = {
778
849
  "--color-brand-primary": semanticColorsDark["brand-primary"],
@@ -814,7 +885,56 @@ var darkThemeCSSVars = {
814
885
  "--color-interactive-active": semanticColorsDark["interactive-active"],
815
886
  "--color-interactive-selected": semanticColorsDark["interactive-selected"],
816
887
  "--color-interactive-disabled": semanticColorsDark["interactive-disabled"],
817
- "--color-divider": semanticColorsDark["divider"]
888
+ "--color-divider": semanticColorsDark["divider"],
889
+ "--color-brand-primary-hover": semanticColorsDark["brand-primary-hover"],
890
+ "--color-brand-primary-active": semanticColorsDark["brand-primary-active"],
891
+ "--color-brand-secondary-hover": semanticColorsDark["brand-secondary-hover"],
892
+ "--color-brand-secondary-active": semanticColorsDark["brand-secondary-active"],
893
+ "--color-status-success-light": semanticColorsDark["status-success-light"],
894
+ "--color-status-success-dark": semanticColorsDark["status-success-dark"],
895
+ "--color-status-error-light": semanticColorsDark["status-error-light"],
896
+ "--color-status-error-dark": semanticColorsDark["status-error-dark"],
897
+ "--color-status-warning-light": semanticColorsDark["status-warning-light"],
898
+ "--color-status-warning-dark": semanticColorsDark["status-warning-dark"],
899
+ "--color-status-info-light": semanticColorsDark["status-info-light"],
900
+ "--color-status-info-dark": semanticColorsDark["status-info-dark"],
901
+ "--color-on-status-success": semanticColorsDark["on-status-success"],
902
+ "--color-on-status-error": semanticColorsDark["on-status-error"],
903
+ "--color-on-status-warning": semanticColorsDark["on-status-warning"],
904
+ "--color-on-status-info": semanticColorsDark["on-status-info"],
905
+ "--color-result-improve": semanticColorsDark["result-improve"],
906
+ "--color-result-improve-light": semanticColorsDark["result-improve-light"],
907
+ "--color-result-improve-dark": semanticColorsDark["result-improve-dark"],
908
+ "--color-result-degrade": semanticColorsDark["result-degrade"],
909
+ "--color-result-degrade-light": semanticColorsDark["result-degrade-light"],
910
+ "--color-result-degrade-dark": semanticColorsDark["result-degrade-dark"],
911
+ "--color-result-inconclusive": semanticColorsDark["result-inconclusive"],
912
+ "--color-result-inconclusive-light": semanticColorsDark["result-inconclusive-light"],
913
+ "--color-result-neutral": semanticColorsDark["result-neutral"],
914
+ "--color-on-result-improve": semanticColorsDark["on-result-improve"],
915
+ "--color-on-result-degrade": semanticColorsDark["on-result-degrade"],
916
+ "--color-on-result-inconclusive": semanticColorsDark["on-result-inconclusive"],
917
+ "--color-data-1": semanticColorsDark["data-1"],
918
+ "--color-data-2": semanticColorsDark["data-2"],
919
+ "--color-data-3": semanticColorsDark["data-3"],
920
+ "--color-data-4": semanticColorsDark["data-4"],
921
+ "--color-data-5": semanticColorsDark["data-5"],
922
+ "--color-data-6": semanticColorsDark["data-6"],
923
+ "--color-data-7": semanticColorsDark["data-7"],
924
+ "--color-data-8": semanticColorsDark["data-8"],
925
+ "--color-data-9": semanticColorsDark["data-9"],
926
+ "--color-data-10": semanticColorsDark["data-10"],
927
+ "--color-text-link-hover": semanticColorsDark["text-link-hover"],
928
+ "--color-surface-overlay": semanticColorsDark["surface-overlay"],
929
+ "--color-surface-input": semanticColorsDark["surface-input"],
930
+ "--color-border-input": semanticColorsDark["border-input"],
931
+ "--color-border-input-hover": semanticColorsDark["border-input-hover"],
932
+ "--color-border-input-focus": semanticColorsDark["border-input-focus"],
933
+ "--color-border-input-error": semanticColorsDark["border-input-error"],
934
+ "--color-interactive-disabled-text": semanticColorsDark["interactive-disabled-text"],
935
+ "--color-avatar-background": semanticColorsDark["avatar-background"],
936
+ "--color-avatar-text": semanticColorsDark["avatar-text"],
937
+ ...themeIndependentCSSVars
818
938
  };
819
939
  function getThemeCSSVars(mode) {
820
940
  return mode === "dark" ? darkThemeCSSVars : lightThemeCSSVars;
@@ -889,5 +1009,5 @@ var gluestackConfig = {
889
1009
  };
890
1010
 
891
1011
  export { __require, buttonSizes, darkThemeCSSVars, discreteRainbow, getDiscreteRainbowColor, getSemanticColors, getThemeCSSVars, gluestackConfig, lightThemeCSSVars, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveShadows, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography };
892
- //# sourceMappingURL=chunk-5SSKGS6E.mjs.map
893
- //# sourceMappingURL=chunk-5SSKGS6E.mjs.map
1012
+ //# sourceMappingURL=chunk-7XPB4NAO.mjs.map
1013
+ //# sourceMappingURL=chunk-7XPB4NAO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/tokens/primitives.ts","../src/theme/tokens/semantic.ts","../src/theme/config.ts"],"names":[],"mappings":"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","file":"chunk-7XPB4NAO.mjs","sourcesContent":["/**\n * Primitive Design Tokens\n *\n * Raw values with no semantic meaning. These are the foundation of the design system\n * and should rarely be used directly in components. Use semantic tokens instead.\n */\n\nexport const primitiveColors = {\n // Blue scale (primary brand)\n blue: {\n 50: '#EFF6FF',\n 100: '#DBEAFE',\n 200: '#BFDBFE',\n 300: '#93C5FD',\n 400: '#60A5FA',\n 500: '#3B82F6',\n 600: '#5048E5', // Primary main\n 700: '#3832A0', // Primary dark\n 800: '#1E40AF',\n 900: '#1E3A8A',\n },\n\n // Green scale (secondary brand)\n green: {\n 50: '#ECFDF5',\n 100: '#D1FAE5',\n 200: '#A7F3D0',\n 300: '#6EE7B7',\n 400: '#3FC79A', // Secondary light\n 500: '#10B981', // Secondary main\n 600: '#059669',\n 700: '#0B815A', // Secondary dark\n 800: '#065F46',\n 900: '#064E3B',\n },\n\n // Teal scale (success)\n teal: {\n 50: '#F0FDFA',\n 100: '#CCFBF1',\n 200: '#99F6E4',\n 300: '#5EEAD4',\n 400: '#43C6B7', // Success light\n 500: '#14B8A6', // Success main\n 600: '#0D9488',\n 700: '#0E8074', // Success dark\n 800: '#115E59',\n 900: '#134E4A',\n },\n\n // Red scale (error)\n red: {\n 50: '#FEF2F2',\n 100: '#FEE2E2',\n 200: '#FECACA',\n 300: '#FCA5A5',\n 400: '#DA6868', // Error light\n 500: '#EF4444',\n 600: '#D14343', // Error main\n 700: '#922E2E', // Error dark\n 800: '#991B1B',\n 900: '#7F1D1D',\n },\n\n // Amber scale (warning)\n amber: {\n 50: '#FFFBEB',\n 100: '#FEF3C7',\n 200: '#FDE68A',\n 300: '#FCD34D',\n 400: '#FFBF4C', // Warning light\n 500: '#FFB020', // Warning main\n 600: '#B27B16', // Warning dark\n 700: '#B45309',\n 800: '#92400E',\n 900: '#78350F',\n },\n\n // Sky/Blue scale (info)\n sky: {\n 50: '#F0F9FF',\n 100: '#E0F2FE',\n 200: '#BAE6FD',\n 300: '#7DD3FC',\n 400: '#64B6F7', // Info light\n 500: '#2196F3', // Info main\n 600: '#0284C7',\n 700: '#0B79D0', // Info dark\n 800: '#075985',\n 900: '#0C4A6E',\n },\n\n // Neutral/Gray scale\n neutral: {\n 50: '#FAFAFA',\n 100: '#F3F4F6',\n 200: '#E5E7EB',\n 300: '#D1D5DB',\n 400: '#9CA3AF',\n 500: '#6B7280',\n 600: '#4B5563',\n 700: '#374151',\n 800: '#1F2937',\n 900: '#111827',\n 950: '#030712',\n },\n\n // Orange scale (accent/brand color)\n accent: {\n 100: '#FFA860',\n 200: '#FF9630',\n 300: '#FF8500',\n 400: '#FF7900',\n 500: '#F56C00',\n 600: '#E06D10',\n 700: '#D0620C',\n 800: '#B75500',\n 900: '#A34900',\n },\n\n // Charcoal scale (dark backgrounds)\n charcoal: {\n 0: '#6E6E6E',\n 50: '#5D5D5D',\n 100: '#4C4C4C',\n 200: '#3C3C3C',\n 300: '#2C2C2C',\n 400: '#1F1F1F',\n 500: '#1C1C1C',\n 600: '#191919',\n 700: '#161616',\n 800: '#131313',\n 900: '#101010',\n },\n\n // Steel scale (cool accent)\n steel: {\n 100: '#8AA4B8',\n 200: '#7894A8',\n 300: '#678498',\n 400: '#557488',\n 500: '#406D87',\n 600: '#39617A',\n 700: '#32556D',\n 800: '#243D53',\n 900: '#1D3146',\n },\n\n // Pure colors\n white: '#FFFFFF',\n black: '#000000',\n transparent: 'transparent',\n} as const\n\n/**\n * Discrete rainbow palette for data visualization\n * Based on Paul Tol's color schemes: https://personal.sron.nl/~pault/#fig:scheme_rainbow_discrete\n */\nexport const discreteRainbow = [\n '#E8ECFB',\n '#D9CCE3',\n '#D1BBD7',\n '#CAACCB',\n '#BA8DB4',\n '#AE76A3',\n '#AA6F9E',\n '#994F88',\n '#882E72',\n '#1965B0',\n '#437DBF',\n '#5289C7',\n '#6195CF',\n '#7BAFDE',\n '#4EB265',\n '#90C987',\n '#CAE0AB',\n '#F7F056',\n '#F7CB45',\n '#F6C141',\n '#F4A736',\n '#F1932D',\n '#EE8026',\n '#E8601C',\n '#E65518',\n '#DC050C',\n '#A5170E',\n '#72190E',\n '#42150A',\n] as const\n\n/**\n * Palette indices for discrete rainbow colors at different palette sizes.\n * For a given palette size (index + 1), returns the indices of colors to use.\n */\nconst discreteRainbowPalettes: number[][] = [\n [10],\n [10, 26],\n [10, 18, 26],\n [10, 15, 18, 26],\n [10, 14, 15, 18, 26],\n [10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 26],\n [9, 10, 14, 15, 17, 18, 23, 26],\n [9, 10, 14, 15, 17, 18, 23, 26, 28],\n [9, 10, 14, 15, 17, 18, 21, 24, 26, 28],\n [9, 10, 12, 14, 15, 17, 18, 21, 24, 26, 28],\n [3, 6, 9, 10, 12, 14, 15, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 21, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26],\n [3, 6, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28],\n [3, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 22, 24, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28],\n [2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n [1, 2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 29],\n]\n\n/**\n * Get a color from the discrete rainbow palette for a given index and palette size.\n * Colors are optimized for visual distinction at each palette size.\n *\n * @param index - The index of the color in the series (0-based)\n * @param size - The total number of colors needed (1-23)\n * @returns The hex color string\n */\nexport function getDiscreteRainbowColor(index: number, size: number): string {\n index = Math.max(0, index)\n size = Math.min(Math.max(1, size), discreteRainbowPalettes.length)\n\n const palette = discreteRainbowPalettes[size - 1]\n if (index >= palette.length) index = index % palette.length\n\n return discreteRainbow[palette[index] - 1]\n}\n\nexport const primitiveTypography = {\n fontFamilies: {\n sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica', 'Arial', 'sans-serif'],\n body: ['Nunito Sans', 'sans-serif'],\n heading: ['Space Grotesk', 'sans-serif'],\n mono: ['SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', 'monospace'],\n },\n fontSizes: {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.5rem', // 24px\n '2xl': '2rem', // 32px\n '3xl': '2.25rem', // 36px\n '4xl': '3rem', // 48px\n '5xl': '3.5rem', // 56px\n },\n fontWeights: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeights: {\n none: 1,\n tight: 1.375,\n snug: 1.5,\n normal: 1.57,\n relaxed: 1.66,\n loose: 1.75,\n },\n letterSpacing: {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.5px',\n },\n} as const\n\nexport const primitiveSpacing = {\n 0: '0',\n px: '1px',\n 0.5: '0.125rem', // 2px\n 1: '0.25rem', // 4px\n 1.5: '0.375rem', // 6px\n 2: '0.5rem', // 8px\n 2.5: '0.625rem', // 10px\n 3: '0.75rem', // 12px\n 3.5: '0.875rem', // 14px\n 4: '1rem', // 16px\n 5: '1.25rem', // 20px\n 6: '1.5rem', // 24px\n 7: '1.75rem', // 28px\n 8: '2rem', // 32px\n 9: '2.25rem', // 36px\n 10: '2.5rem', // 40px\n 11: '2.75rem', // 44px\n 12: '3rem', // 48px\n 14: '3.5rem', // 56px\n 16: '4rem', // 64px\n 20: '5rem', // 80px\n 24: '6rem', // 96px\n 28: '7rem', // 112px\n 32: '8rem', // 128px\n} as const\n\nexport const primitiveBorderRadius = {\n none: '0',\n sm: '4px',\n DEFAULT: '8px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '24px',\n full: '9999px',\n} as const\n\nexport const primitiveShadows = {\n none: 'none',\n sm: '0px 1px 2px rgba(100, 116, 139, 0.12)',\n DEFAULT: '0px 1px 3px rgba(100, 116, 139, 0.12), 0px 1px 2px rgba(100, 116, 139, 0.24)',\n md: '0px 4px 6px rgba(100, 116, 139, 0.12)',\n lg: '0px 10px 15px rgba(100, 116, 139, 0.12)',\n xl: '0px 20px 25px rgba(100, 116, 139, 0.12)',\n '2xl': '0px 25px 50px rgba(100, 116, 139, 0.25)',\n inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',\n} as const\n\nexport const primitiveBreakpoints = {\n xs: 0,\n sm: 600,\n md: 1000,\n lg: 1200,\n xl: 1920,\n} as const\n\nexport const primitiveZIndex = {\n hide: -1,\n auto: 'auto',\n base: 0,\n docked: 10,\n dropdown: 1000,\n sticky: 1100,\n drawer: 1100,\n banner: 1200,\n appBar: 1200,\n overlay: 1300,\n modal: 1400,\n popover: 1500,\n skipLink: 1600,\n toast: 1700,\n tooltip: 1800,\n} as const\n","/**\n * Semantic Design Tokens\n *\n * Meaningful tokens following DTCG (Design Tokens Community Group) naming conventions.\n * Pattern: {category}-{intent}-{variant?}-{state?}\n *\n * Categories:\n * - brand-* : Brand colors (primary, secondary, accent)\n * - status-* : Feedback colors (success, error, warning, info)\n * - result-* : Outcome indicators (improve, degrade, inconclusive, neutral)\n * - data-* : Data visualization colors (chart series)\n * - on-* : Text on colored backgrounds\n * - surface-* : Elevated containers (NOT \"paper\")\n * - background-* : Page backgrounds\n * - text-* : Text colors\n * - border-* : Border colors\n * - interactive-* : Hover/focus/active/disabled states\n */\n\nimport { primitiveColors as p, discreteRainbow } from './primitives'\n\n// Light mode semantic colors (default)\nexport const semanticColorsLight = {\n // Brand colors (brand-*)\n 'brand-primary': p.accent[400], // #FF7900\n 'brand-primary-light': p.accent[200], // #FF9630\n 'brand-primary-dark': p.accent[700], // #D0620C\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.08)',\n 'brand-primary-hover': p.accent[500],\n 'brand-primary-active': p.accent[600],\n\n 'brand-secondary': p.steel[500], // #406D87\n 'brand-secondary-light': p.steel[300], // #678498\n 'brand-secondary-dark': p.steel[700], // #32556D\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.08)',\n 'brand-secondary-hover': p.steel[600],\n 'brand-secondary-active': p.steel[700],\n\n // Text on brand backgrounds (on-*)\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors (status-*)\n 'status-success': p.teal[500], // #14B8A6\n 'status-success-light': p.teal[400], // #43C6B7\n 'status-success-dark': p.teal[700], // #0E8074\n 'status-success-subtle': p.teal[50],\n\n 'status-error': p.red[600], // #D14343\n 'status-error-light': p.red[400], // #DA6868\n 'status-error-dark': p.red[700], // #922E2E\n 'status-error-subtle': p.red[50],\n\n 'status-warning': p.amber[500], // #FFB020\n 'status-warning-light': p.amber[400], // #FFBF4C\n 'status-warning-dark': p.amber[600], // #B27B16\n 'status-warning-subtle': p.amber[50],\n\n 'status-info': p.sky[500], // #2196F3\n 'status-info-light': p.sky[400], // #64B6F7\n 'status-info-dark': p.sky[700], // #0B79D0\n 'status-info-subtle': p.sky[50],\n\n // Text on status backgrounds (on-status-*)\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50', // Green - positive outcome\n 'result-improve-light': 'rgba(76, 175, 80, 0.12)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350', // Red - negative outcome\n 'result-degrade-light': 'rgba(239, 83, 80, 0.12)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97', // Gray - no clear result\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.12)',\n 'result-neutral': p.neutral[500], // Neutral baseline\n\n // Text on result backgrounds (on-result-*)\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (data-*)\n // First 10 colors from discrete rainbow optimized for charts\n 'data-1': discreteRainbow[9], // #1965B0 - Blue\n 'data-2': discreteRainbow[14], // #4EB265 - Green\n 'data-3': discreteRainbow[17], // #F7F056 - Yellow\n 'data-4': discreteRainbow[25], // #DC050C - Red\n 'data-5': discreteRainbow[8], // #882E72 - Purple\n 'data-6': discreteRainbow[20], // #F4A736 - Orange\n 'data-7': discreteRainbow[13], // #7BAFDE - Light Blue\n 'data-8': discreteRainbow[15], // #90C987 - Light Green\n 'data-9': discreteRainbow[3], // #CAACCB - Lavender\n 'data-10': discreteRainbow[22], // #EE8026 - Dark Orange\n\n // Text colors (text-*)\n 'text-primary': '#121828',\n 'text-secondary': '#65748B',\n 'text-tertiary': p.neutral[400],\n 'text-disabled': 'rgba(55, 65, 81, 0.48)',\n 'text-inverse': p.white,\n 'text-link': p.blue[600],\n 'text-link-hover': p.blue[700],\n\n // Surface colors (surface-*) - for elevated containers\n 'surface-base': p.white,\n 'surface-elevated': p.neutral[50], // #FAFAFA - slightly off-white for elevated cards\n 'surface-raised': p.neutral[100], // #F3F4F6 - light gray for raised cards\n 'surface-overlay': p.white,\n 'surface-input': p.neutral[50], // Input field background (filled variant)\n\n // Background colors (background-*)\n 'background-base': '#EBEBEB',\n 'background-default': p.white,\n 'background-subtle': p.neutral[50],\n\n // Border colors (border-*)\n 'border-default': '#E8E9EB',\n 'border-subtle': p.neutral[100],\n 'border-strong': p.neutral[300],\n 'border-focus': p.blue[600],\n 'border-input': p.neutral[300], // Input field border\n 'border-input-hover': p.neutral[400], // Input field border on hover\n 'border-input-focus': p.blue[600], // Input field border on focus\n 'border-input-error': p.red[600], // Input field border on error\n\n // Interactive states (interactive-*)\n 'interactive-hover': 'rgba(55, 65, 81, 0.04)',\n 'interactive-focus': 'rgba(55, 65, 81, 0.12)',\n 'interactive-active': 'rgba(55, 65, 81, 0.16)',\n 'interactive-selected': 'rgba(55, 65, 81, 0.08)',\n 'interactive-disabled': 'rgba(55, 65, 81, 0.12)',\n 'interactive-disabled-text': 'rgba(55, 65, 81, 0.26)',\n\n // Divider\n 'divider': '#E8E9EB',\n\n // Avatar default\n 'avatar-background': p.neutral[500],\n 'avatar-text': p.white,\n} as const\n\n// Dark mode semantic colors\nexport const semanticColorsDark = {\n // Brand colors stay the same in dark mode\n 'brand-primary': p.accent[400],\n 'brand-primary-light': p.accent[200],\n 'brand-primary-dark': p.accent[700],\n 'brand-primary-subtle': 'rgba(255, 121, 0, 0.12)',\n 'brand-primary-hover': p.accent[300],\n 'brand-primary-active': p.accent[200],\n\n 'brand-secondary': p.steel[500],\n 'brand-secondary-light': p.steel[300],\n 'brand-secondary-dark': p.steel[700],\n 'brand-secondary-subtle': 'rgba(64, 109, 135, 0.12)',\n 'brand-secondary-hover': p.steel[400],\n 'brand-secondary-active': p.steel[300],\n\n // Text on brand backgrounds\n 'on-brand-primary': p.white,\n 'on-brand-secondary': p.white,\n\n // Status colors\n 'status-success': p.teal[500],\n 'status-success-light': p.teal[400],\n 'status-success-dark': p.teal[700],\n 'status-success-subtle': 'rgba(20, 184, 166, 0.12)',\n\n 'status-error': p.red[600],\n 'status-error-light': p.red[400],\n 'status-error-dark': p.red[700],\n 'status-error-subtle': 'rgba(209, 67, 67, 0.12)',\n\n 'status-warning': p.amber[500],\n 'status-warning-light': p.amber[400],\n 'status-warning-dark': p.amber[600],\n 'status-warning-subtle': 'rgba(255, 176, 32, 0.12)',\n\n 'status-info': p.sky[500],\n 'status-info-light': p.sky[400],\n 'status-info-dark': p.sky[700],\n 'status-info-subtle': 'rgba(33, 150, 243, 0.12)',\n\n // Text on status backgrounds\n 'on-status-success': p.white,\n 'on-status-error': p.white,\n 'on-status-warning': p.white,\n 'on-status-info': p.white,\n\n // Result/outcome indicators (result-*)\n 'result-improve': '#4caf50',\n 'result-improve-light': 'rgba(76, 175, 80, 0.16)',\n 'result-improve-dark': '#248a24',\n 'result-degrade': '#ef5350',\n 'result-degrade-light': 'rgba(239, 83, 80, 0.16)',\n 'result-degrade-dark': '#b30000',\n 'result-inconclusive': '#9E9A97',\n 'result-inconclusive-light': 'rgba(158, 154, 151, 0.16)',\n 'result-neutral': p.neutral[400],\n\n // Text on result backgrounds\n 'on-result-improve': p.white,\n 'on-result-degrade': p.white,\n 'on-result-inconclusive': p.white,\n\n // Data visualization colors (same in dark mode for consistency)\n 'data-1': discreteRainbow[9],\n 'data-2': discreteRainbow[14],\n 'data-3': discreteRainbow[17],\n 'data-4': discreteRainbow[25],\n 'data-5': discreteRainbow[8],\n 'data-6': discreteRainbow[20],\n 'data-7': discreteRainbow[13],\n 'data-8': discreteRainbow[15],\n 'data-9': discreteRainbow[3],\n 'data-10': discreteRainbow[22],\n\n // Text colors - inverted for dark mode\n 'text-primary': p.neutral[100],\n 'text-secondary': p.neutral[400],\n 'text-tertiary': p.neutral[500],\n 'text-disabled': 'rgba(255, 255, 255, 0.38)',\n 'text-inverse': p.neutral[900],\n 'text-link': '#828DF8',\n 'text-link-hover': p.blue[400],\n\n // Surface colors - dark backgrounds\n 'surface-base': p.charcoal[700], // #161616 - main surface\n 'surface-elevated': p.charcoal[600], // #191919 - elevated surface\n 'surface-raised': p.charcoal[500], // #1C1C1C - raised surface\n 'surface-overlay': p.charcoal[600], // #191919 - overlay surface\n 'surface-input': p.charcoal[600], // #191919 - input surface\n\n // Background colors\n 'background-base': p.charcoal[900], // #101010 - darkest charcoal\n 'background-default': p.charcoal[700], // #161616 - main background\n 'background-subtle': p.charcoal[500], // #1C1C1C - subtle background\n\n // Border colors\n 'border-default': p.charcoal[400], // #1F1F1F - default border\n 'border-subtle': p.charcoal[500], // #1C1C1C - subtle border\n 'border-strong': p.charcoal[300], // #2C2C2C - strong border\n 'border-focus': '#828DF8',\n 'border-input': p.neutral[600],\n 'border-input-hover': p.neutral[500],\n 'border-input-focus': '#828DF8',\n 'border-input-error': p.red[500],\n\n // Interactive states\n 'interactive-hover': 'rgba(255, 255, 255, 0.04)',\n 'interactive-focus': 'rgba(255, 255, 255, 0.12)',\n 'interactive-active': 'rgba(255, 255, 255, 0.16)',\n 'interactive-selected': 'rgba(255, 255, 255, 0.08)',\n 'interactive-disabled': 'rgba(255, 255, 255, 0.12)',\n 'interactive-disabled-text': 'rgba(255, 255, 255, 0.26)',\n\n // Divider\n 'divider': p.charcoal[400], // #1F1F1F - divider color\n\n // Avatar default\n 'avatar-background': p.neutral[600],\n 'avatar-text': p.white,\n} as const\n\n// Typography tokens matching existing app\nexport const semanticTypography = {\n // Headings (Space Grotesk)\n h1: {\n fontFamily: 'heading',\n fontSize: '3.5rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h2: {\n fontFamily: 'heading',\n fontSize: '3rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h3: {\n fontFamily: 'heading',\n fontSize: '2.25rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h4: {\n fontFamily: 'heading',\n fontSize: '2rem',\n fontWeight: 700,\n lineHeight: 1.375,\n },\n h5: {\n fontFamily: 'heading',\n fontSize: '1.5rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n h6: {\n fontFamily: 'heading',\n fontSize: '1.125rem',\n fontWeight: 600,\n lineHeight: 1.375,\n },\n\n // Body text (Nunito Sans)\n body1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 400,\n lineHeight: 1.5,\n },\n body2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: 1.57,\n },\n subtitle1: {\n fontFamily: 'body',\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: 1.75,\n },\n subtitle2: {\n fontFamily: 'body',\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: 1.57,\n },\n caption: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 400,\n lineHeight: 1.66,\n },\n overline: {\n fontFamily: 'body',\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: 2.5,\n letterSpacing: '0.5px',\n textTransform: 'uppercase' as const,\n },\n button: {\n fontFamily: 'sans',\n fontSize: '0.875rem',\n fontWeight: 600,\n lineHeight: 1.75,\n },\n} as const\n\n// Button size tokens\nexport const buttonSizes = {\n sm: {\n paddingX: '16px',\n paddingY: '6px',\n fontSize: '0.875rem',\n },\n md: {\n paddingX: '20px',\n paddingY: '8px',\n fontSize: '0.875rem',\n },\n lg: {\n paddingX: '24px',\n paddingY: '11px',\n fontSize: '1rem',\n },\n} as const\n\n// Export type for theme mode\nexport type ThemeMode = 'light' | 'dark'\n\n// Helper to get semantic colors based on mode\nexport function getSemanticColors(mode: ThemeMode) {\n return mode === 'dark' ? semanticColorsDark : semanticColorsLight\n}\n","/**\n * Theme Configuration\n *\n * Maps semantic tokens to CSS custom properties for runtime theming.\n * Dark mode is the default theme.\n */\n\nimport { semanticColorsLight, semanticColorsDark, type ThemeMode } from './tokens/semantic'\n\n// Theme-independent custom properties: identical in light and dark in\n// global.css (RGB glow decompositions, font families, animation tokens). Kept\n// as literals since they are not part of the semantic COLOR maps, and spread\n// into both theme maps so codegen mirrors global.css exactly.\nconst themeIndependentCSSVars = {\n // RGB decomposed values for glow shadows\n '--color-brand-primary-rgb': '255, 121, 0',\n '--color-brand-secondary-rgb': '64, 109, 135',\n '--color-status-success-rgb': '20, 184, 166',\n '--color-status-error-rgb': '209, 67, 67',\n '--color-status-warning-rgb': '255, 176, 32',\n '--color-status-info-rgb': '33, 150, 243',\n '--color-background-base-rgb': '16, 16, 16',\n\n // Font families\n '--font-family-sans': \"'Inter'\",\n '--font-family-body': \"'Nunito Sans'\",\n '--font-family-heading': \"'Space Grotesk'\",\n '--font-family-mono': \"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace\",\n\n // Animation tokens\n '--ease-out': 'cubic-bezier(0.22, 1, 0.36, 1)',\n '--ease-in-out': 'cubic-bezier(0.65, 0, 0.35, 1)',\n '--ease-spring': 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n '--duration-fast': '150ms',\n '--duration-normal': '250ms',\n '--duration-slow': '400ms',\n} as const\n\n// CSS custom properties for light mode\nexport const lightThemeCSSVars = {\n '--color-brand-primary': semanticColorsLight['brand-primary'],\n '--color-brand-primary-light': semanticColorsLight['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsLight['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsLight['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsLight['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsLight['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsLight['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsLight['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsLight['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsLight['on-brand-secondary'],\n\n '--color-status-success': semanticColorsLight['status-success'],\n '--color-status-success-subtle': semanticColorsLight['status-success-subtle'],\n '--color-status-error': semanticColorsLight['status-error'],\n '--color-status-error-subtle': semanticColorsLight['status-error-subtle'],\n '--color-status-warning': semanticColorsLight['status-warning'],\n '--color-status-warning-subtle': semanticColorsLight['status-warning-subtle'],\n '--color-status-info': semanticColorsLight['status-info'],\n '--color-status-info-subtle': semanticColorsLight['status-info-subtle'],\n\n '--color-text-primary': semanticColorsLight['text-primary'],\n '--color-text-secondary': semanticColorsLight['text-secondary'],\n '--color-text-tertiary': semanticColorsLight['text-tertiary'],\n '--color-text-disabled': semanticColorsLight['text-disabled'],\n '--color-text-inverse': semanticColorsLight['text-inverse'],\n '--color-text-link': semanticColorsLight['text-link'],\n\n '--color-surface-base': semanticColorsLight['surface-base'],\n '--color-surface-elevated': semanticColorsLight['surface-elevated'],\n '--color-surface-raised': semanticColorsLight['surface-raised'],\n\n '--color-background-base': semanticColorsLight['background-base'],\n '--color-background-default': semanticColorsLight['background-default'],\n '--color-background-subtle': semanticColorsLight['background-subtle'],\n\n '--color-border-default': semanticColorsLight['border-default'],\n '--color-border-subtle': semanticColorsLight['border-subtle'],\n '--color-border-strong': semanticColorsLight['border-strong'],\n '--color-border-focus': semanticColorsLight['border-focus'],\n\n '--color-interactive-hover': semanticColorsLight['interactive-hover'],\n '--color-interactive-focus': semanticColorsLight['interactive-focus'],\n '--color-interactive-active': semanticColorsLight['interactive-active'],\n '--color-interactive-selected': semanticColorsLight['interactive-selected'],\n '--color-interactive-disabled': semanticColorsLight['interactive-disabled'],\n\n '--color-divider': semanticColorsLight['divider'],\n\n '--color-brand-primary-hover': semanticColorsLight['brand-primary-hover'],\n '--color-brand-primary-active': semanticColorsLight['brand-primary-active'],\n '--color-brand-secondary-hover': semanticColorsLight['brand-secondary-hover'],\n '--color-brand-secondary-active': semanticColorsLight['brand-secondary-active'],\n\n '--color-status-success-light': semanticColorsLight['status-success-light'],\n '--color-status-success-dark': semanticColorsLight['status-success-dark'],\n '--color-status-error-light': semanticColorsLight['status-error-light'],\n '--color-status-error-dark': semanticColorsLight['status-error-dark'],\n '--color-status-warning-light': semanticColorsLight['status-warning-light'],\n '--color-status-warning-dark': semanticColorsLight['status-warning-dark'],\n '--color-status-info-light': semanticColorsLight['status-info-light'],\n '--color-status-info-dark': semanticColorsLight['status-info-dark'],\n\n '--color-on-status-success': semanticColorsLight['on-status-success'],\n '--color-on-status-error': semanticColorsLight['on-status-error'],\n '--color-on-status-warning': semanticColorsLight['on-status-warning'],\n '--color-on-status-info': semanticColorsLight['on-status-info'],\n\n '--color-result-improve': semanticColorsLight['result-improve'],\n '--color-result-improve-light': semanticColorsLight['result-improve-light'],\n '--color-result-improve-dark': semanticColorsLight['result-improve-dark'],\n '--color-result-degrade': semanticColorsLight['result-degrade'],\n '--color-result-degrade-light': semanticColorsLight['result-degrade-light'],\n '--color-result-degrade-dark': semanticColorsLight['result-degrade-dark'],\n '--color-result-inconclusive': semanticColorsLight['result-inconclusive'],\n '--color-result-inconclusive-light': semanticColorsLight['result-inconclusive-light'],\n '--color-result-neutral': semanticColorsLight['result-neutral'],\n\n '--color-on-result-improve': semanticColorsLight['on-result-improve'],\n '--color-on-result-degrade': semanticColorsLight['on-result-degrade'],\n '--color-on-result-inconclusive': semanticColorsLight['on-result-inconclusive'],\n\n '--color-data-1': semanticColorsLight['data-1'],\n '--color-data-2': semanticColorsLight['data-2'],\n '--color-data-3': semanticColorsLight['data-3'],\n '--color-data-4': semanticColorsLight['data-4'],\n '--color-data-5': semanticColorsLight['data-5'],\n '--color-data-6': semanticColorsLight['data-6'],\n '--color-data-7': semanticColorsLight['data-7'],\n '--color-data-8': semanticColorsLight['data-8'],\n '--color-data-9': semanticColorsLight['data-9'],\n '--color-data-10': semanticColorsLight['data-10'],\n\n '--color-text-link-hover': semanticColorsLight['text-link-hover'],\n\n '--color-surface-overlay': semanticColorsLight['surface-overlay'],\n '--color-surface-input': semanticColorsLight['surface-input'],\n\n '--color-border-input': semanticColorsLight['border-input'],\n '--color-border-input-hover': semanticColorsLight['border-input-hover'],\n '--color-border-input-focus': semanticColorsLight['border-input-focus'],\n '--color-border-input-error': semanticColorsLight['border-input-error'],\n\n '--color-interactive-disabled-text': semanticColorsLight['interactive-disabled-text'],\n\n '--color-avatar-background': semanticColorsLight['avatar-background'],\n '--color-avatar-text': semanticColorsLight['avatar-text'],\n\n ...themeIndependentCSSVars,\n} as const\n\n// CSS custom properties for dark mode (default)\nexport const darkThemeCSSVars = {\n '--color-brand-primary': semanticColorsDark['brand-primary'],\n '--color-brand-primary-light': semanticColorsDark['brand-primary-light'],\n '--color-brand-primary-dark': semanticColorsDark['brand-primary-dark'],\n '--color-brand-primary-subtle': semanticColorsDark['brand-primary-subtle'],\n '--color-brand-secondary': semanticColorsDark['brand-secondary'],\n '--color-brand-secondary-light': semanticColorsDark['brand-secondary-light'],\n '--color-brand-secondary-dark': semanticColorsDark['brand-secondary-dark'],\n '--color-brand-secondary-subtle': semanticColorsDark['brand-secondary-subtle'],\n\n '--color-on-brand-primary': semanticColorsDark['on-brand-primary'],\n '--color-on-brand-secondary': semanticColorsDark['on-brand-secondary'],\n\n '--color-status-success': semanticColorsDark['status-success'],\n '--color-status-success-subtle': semanticColorsDark['status-success-subtle'],\n '--color-status-error': semanticColorsDark['status-error'],\n '--color-status-error-subtle': semanticColorsDark['status-error-subtle'],\n '--color-status-warning': semanticColorsDark['status-warning'],\n '--color-status-warning-subtle': semanticColorsDark['status-warning-subtle'],\n '--color-status-info': semanticColorsDark['status-info'],\n '--color-status-info-subtle': semanticColorsDark['status-info-subtle'],\n\n '--color-text-primary': semanticColorsDark['text-primary'],\n '--color-text-secondary': semanticColorsDark['text-secondary'],\n '--color-text-tertiary': semanticColorsDark['text-tertiary'],\n '--color-text-disabled': semanticColorsDark['text-disabled'],\n '--color-text-inverse': semanticColorsDark['text-inverse'],\n '--color-text-link': semanticColorsDark['text-link'],\n\n '--color-surface-base': semanticColorsDark['surface-base'],\n '--color-surface-elevated': semanticColorsDark['surface-elevated'],\n '--color-surface-raised': semanticColorsDark['surface-raised'],\n\n '--color-background-base': semanticColorsDark['background-base'],\n '--color-background-default': semanticColorsDark['background-default'],\n '--color-background-subtle': semanticColorsDark['background-subtle'],\n\n '--color-border-default': semanticColorsDark['border-default'],\n '--color-border-subtle': semanticColorsDark['border-subtle'],\n '--color-border-strong': semanticColorsDark['border-strong'],\n '--color-border-focus': semanticColorsDark['border-focus'],\n\n '--color-interactive-hover': semanticColorsDark['interactive-hover'],\n '--color-interactive-focus': semanticColorsDark['interactive-focus'],\n '--color-interactive-active': semanticColorsDark['interactive-active'],\n '--color-interactive-selected': semanticColorsDark['interactive-selected'],\n '--color-interactive-disabled': semanticColorsDark['interactive-disabled'],\n\n '--color-divider': semanticColorsDark['divider'],\n\n '--color-brand-primary-hover': semanticColorsDark['brand-primary-hover'],\n '--color-brand-primary-active': semanticColorsDark['brand-primary-active'],\n '--color-brand-secondary-hover': semanticColorsDark['brand-secondary-hover'],\n '--color-brand-secondary-active': semanticColorsDark['brand-secondary-active'],\n\n '--color-status-success-light': semanticColorsDark['status-success-light'],\n '--color-status-success-dark': semanticColorsDark['status-success-dark'],\n '--color-status-error-light': semanticColorsDark['status-error-light'],\n '--color-status-error-dark': semanticColorsDark['status-error-dark'],\n '--color-status-warning-light': semanticColorsDark['status-warning-light'],\n '--color-status-warning-dark': semanticColorsDark['status-warning-dark'],\n '--color-status-info-light': semanticColorsDark['status-info-light'],\n '--color-status-info-dark': semanticColorsDark['status-info-dark'],\n\n '--color-on-status-success': semanticColorsDark['on-status-success'],\n '--color-on-status-error': semanticColorsDark['on-status-error'],\n '--color-on-status-warning': semanticColorsDark['on-status-warning'],\n '--color-on-status-info': semanticColorsDark['on-status-info'],\n\n '--color-result-improve': semanticColorsDark['result-improve'],\n '--color-result-improve-light': semanticColorsDark['result-improve-light'],\n '--color-result-improve-dark': semanticColorsDark['result-improve-dark'],\n '--color-result-degrade': semanticColorsDark['result-degrade'],\n '--color-result-degrade-light': semanticColorsDark['result-degrade-light'],\n '--color-result-degrade-dark': semanticColorsDark['result-degrade-dark'],\n '--color-result-inconclusive': semanticColorsDark['result-inconclusive'],\n '--color-result-inconclusive-light': semanticColorsDark['result-inconclusive-light'],\n '--color-result-neutral': semanticColorsDark['result-neutral'],\n\n '--color-on-result-improve': semanticColorsDark['on-result-improve'],\n '--color-on-result-degrade': semanticColorsDark['on-result-degrade'],\n '--color-on-result-inconclusive': semanticColorsDark['on-result-inconclusive'],\n\n '--color-data-1': semanticColorsDark['data-1'],\n '--color-data-2': semanticColorsDark['data-2'],\n '--color-data-3': semanticColorsDark['data-3'],\n '--color-data-4': semanticColorsDark['data-4'],\n '--color-data-5': semanticColorsDark['data-5'],\n '--color-data-6': semanticColorsDark['data-6'],\n '--color-data-7': semanticColorsDark['data-7'],\n '--color-data-8': semanticColorsDark['data-8'],\n '--color-data-9': semanticColorsDark['data-9'],\n '--color-data-10': semanticColorsDark['data-10'],\n\n '--color-text-link-hover': semanticColorsDark['text-link-hover'],\n\n '--color-surface-overlay': semanticColorsDark['surface-overlay'],\n '--color-surface-input': semanticColorsDark['surface-input'],\n\n '--color-border-input': semanticColorsDark['border-input'],\n '--color-border-input-hover': semanticColorsDark['border-input-hover'],\n '--color-border-input-focus': semanticColorsDark['border-input-focus'],\n '--color-border-input-error': semanticColorsDark['border-input-error'],\n\n '--color-interactive-disabled-text': semanticColorsDark['interactive-disabled-text'],\n\n '--color-avatar-background': semanticColorsDark['avatar-background'],\n '--color-avatar-text': semanticColorsDark['avatar-text'],\n\n ...themeIndependentCSSVars,\n} as const\n\n// Helper to get CSS vars for a theme mode\nexport function getThemeCSSVars(mode: ThemeMode) {\n return mode === 'dark' ? darkThemeCSSVars : lightThemeCSSVars\n}\n\n// Gluestack UI theme configuration\nexport const gluestackConfig = {\n tokens: {\n colors: {\n // Map to our semantic colors via CSS vars\n primary500: 'var(--color-brand-primary)',\n primary600: 'var(--color-brand-primary-dark)',\n primary400: 'var(--color-brand-primary-light)',\n\n secondary500: 'var(--color-brand-secondary)',\n secondary600: 'var(--color-brand-secondary-dark)',\n secondary400: 'var(--color-brand-secondary-light)',\n\n success500: 'var(--color-status-success)',\n error500: 'var(--color-status-error)',\n warning500: 'var(--color-status-warning)',\n info500: 'var(--color-status-info)',\n\n textLight: 'var(--color-text-primary)',\n textDark: 'var(--color-text-inverse)',\n\n backgroundLight: 'var(--color-background-default)',\n backgroundDark: 'var(--color-surface-base)',\n },\n space: {\n '0': 0,\n '1': 4,\n '2': 8,\n '3': 12,\n '4': 16,\n '5': 20,\n '6': 24,\n '8': 32,\n '10': 40,\n '12': 48,\n '16': 64,\n '20': 80,\n '24': 96,\n },\n radii: {\n none: 0,\n sm: 4,\n md: 8,\n lg: 12,\n xl: 16,\n '2xl': 24,\n full: 9999,\n },\n fontSizes: {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n '2xl': 24,\n '3xl': 30,\n '4xl': 36,\n '5xl': 48,\n },\n },\n aliases: {\n bg: 'backgroundColor',\n p: 'padding',\n px: 'paddingHorizontal',\n py: 'paddingVertical',\n m: 'margin',\n mx: 'marginHorizontal',\n my: 'marginVertical',\n h: 'height',\n w: 'width',\n rounded: 'borderRadius',\n },\n} as const\n\nexport type ThemeConfig = typeof gluestackConfig\n"]}
@@ -1,4 +1,4 @@
1
- import { semanticColorsLight, semanticColorsDark } from './chunk-5SSKGS6E.mjs';
1
+ import { semanticColorsLight, semanticColorsDark } from './chunk-7XPB4NAO.mjs';
2
2
  import { Platform } from 'react-native';
3
3
 
4
4
  function hexToRgb(hex) {
@@ -842,5 +842,5 @@ var audiobookPreset = {
842
842
  };
843
843
 
844
844
  export { applyThemePreset, audiobookPreset, componentElevationRanges, createFlatShadow, createPressedHoverShadow, createPressedShadow, createRaisedHoverShadow, createRaisedShadow, darken, defaultPreset, elevationSystem, getBaseSurfaceColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getValidatedElevation, hexToRgb, hsvToRgb, isCssPropertyManifest, isDark, lighten, neumorphicShadows, rgbToHex, rgbToHsv, shadowColors, validateCssPropertyManifest };
845
- //# sourceMappingURL=chunk-3VLOBS6O.mjs.map
846
- //# sourceMappingURL=chunk-3VLOBS6O.mjs.map
845
+ //# sourceMappingURL=chunk-P7TSQUN6.mjs.map
846
+ //# sourceMappingURL=chunk-P7TSQUN6.mjs.map