@flamingo-stack/openframe-frontend-core 0.0.490-snapshot.20260728181420 → 0.0.490

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 (154) hide show
  1. package/dist/{chunk-VD4QDSP7.cjs → chunk-2MKUHJ3O.cjs} +40 -40
  2. package/dist/{chunk-VD4QDSP7.cjs.map → chunk-2MKUHJ3O.cjs.map} +1 -1
  3. package/dist/{chunk-EHHX22JL.cjs → chunk-3IEVA5AO.cjs} +93 -93
  4. package/dist/{chunk-EHHX22JL.cjs.map → chunk-3IEVA5AO.cjs.map} +1 -1
  5. package/dist/{chunk-IUGJAILN.js → chunk-6CFFISUC.js} +3 -3
  6. package/dist/{chunk-CZTKQVIQ.js → chunk-6CJ2K7BD.js} +3 -3
  7. package/dist/{chunk-ZEC5U5T7.js → chunk-6QK3ONDD.js} +2 -2
  8. package/dist/{chunk-GL33BHGZ.cjs → chunk-7I42V2OD.cjs} +73 -73
  9. package/dist/{chunk-GL33BHGZ.cjs.map → chunk-7I42V2OD.cjs.map} +1 -1
  10. package/dist/{chunk-GTMW4KY7.js → chunk-AIRNG27G.js} +6 -6
  11. package/dist/{chunk-ITV6LSG7.cjs → chunk-AW63ET2A.cjs} +19 -19
  12. package/dist/{chunk-ITV6LSG7.cjs.map → chunk-AW63ET2A.cjs.map} +1 -1
  13. package/dist/{chunk-TTYJAZ7P.cjs → chunk-BIKOJ4FH.cjs} +32 -58
  14. package/dist/chunk-BIKOJ4FH.cjs.map +1 -0
  15. package/dist/{chunk-35CTCUJ7.js → chunk-BZMOEWWS.js} +6 -6
  16. package/dist/{chunk-QNFAZIFC.cjs → chunk-D5LQMRPU.cjs} +5 -5
  17. package/dist/{chunk-QNFAZIFC.cjs.map → chunk-D5LQMRPU.cjs.map} +1 -1
  18. package/dist/{chunk-T4BUS6JV.js → chunk-EGXCWZYP.js} +3 -3
  19. package/dist/{chunk-HRMOCJKU.cjs → chunk-EJQUYZXF.cjs} +12 -12
  20. package/dist/{chunk-HRMOCJKU.cjs.map → chunk-EJQUYZXF.cjs.map} +1 -1
  21. package/dist/{chunk-J2V4B6FF.cjs → chunk-FY5XAW3H.cjs} +18 -18
  22. package/dist/{chunk-J2V4B6FF.cjs.map → chunk-FY5XAW3H.cjs.map} +1 -1
  23. package/dist/{chunk-YKE2KZ2Y.cjs → chunk-GMPYR3MX.cjs} +33 -33
  24. package/dist/{chunk-YKE2KZ2Y.cjs.map → chunk-GMPYR3MX.cjs.map} +1 -1
  25. package/dist/{chunk-6O3YTVLG.cjs → chunk-GUTYUMGV.cjs} +12 -12
  26. package/dist/{chunk-6O3YTVLG.cjs.map → chunk-GUTYUMGV.cjs.map} +1 -1
  27. package/dist/{chunk-QKWOBV55.js → chunk-GZK7FWJJ.js} +12 -12
  28. package/dist/chunk-GZK7FWJJ.js.map +1 -0
  29. package/dist/{chunk-7NRRONK5.cjs → chunk-IEZ3YBAP.cjs} +32 -32
  30. package/dist/{chunk-7NRRONK5.cjs.map → chunk-IEZ3YBAP.cjs.map} +1 -1
  31. package/dist/{chunk-THC3K262.cjs → chunk-KP5KRRD6.cjs} +3 -3
  32. package/dist/{chunk-THC3K262.cjs.map → chunk-KP5KRRD6.cjs.map} +1 -1
  33. package/dist/{chunk-U2JIGUXF.js → chunk-MPYDX5WX.js} +4 -4
  34. package/dist/{chunk-ZDUJ6BDI.js → chunk-NGEFYPY7.js} +4 -4
  35. package/dist/{chunk-CYIUPI7J.js → chunk-OQIMH2WQ.js} +1004 -1167
  36. package/dist/{chunk-CYIUPI7J.js.map → chunk-OQIMH2WQ.js.map} +1 -1
  37. package/dist/{chunk-WEUNPE3S.js → chunk-PB3BTZDU.js} +113 -139
  38. package/dist/chunk-PB3BTZDU.js.map +1 -0
  39. package/dist/{chunk-6WTCJI5R.js → chunk-RW2LPL72.js} +2 -2
  40. package/dist/{chunk-SGL6URIJ.cjs → chunk-STYA77PH.cjs} +12 -12
  41. package/dist/chunk-STYA77PH.cjs.map +1 -0
  42. package/dist/{chunk-PVSXTCJY.cjs → chunk-UZZT65PQ.cjs} +40 -40
  43. package/dist/{chunk-PVSXTCJY.cjs.map → chunk-UZZT65PQ.cjs.map} +1 -1
  44. package/dist/{chunk-2YQK6LHR.js → chunk-VDZO6IDR.js} +5 -5
  45. package/dist/{chunk-QF54RPHZ.js → chunk-VL2YMDPH.js} +6 -6
  46. package/dist/{chunk-2RTNC3KP.cjs → chunk-VUXNXWOQ.cjs} +873 -1036
  47. package/dist/chunk-VUXNXWOQ.cjs.map +1 -0
  48. package/dist/{chunk-6XNWT2KC.js → chunk-WLM3F3WU.js} +3 -3
  49. package/dist/components/case-studies/index.cjs +10 -10
  50. package/dist/components/case-studies/index.js +4 -4
  51. package/dist/components/chat/index.cjs +4 -4
  52. package/dist/components/chat/index.js +3 -3
  53. package/dist/components/contact/index.cjs +5 -5
  54. package/dist/components/contact/index.js +4 -4
  55. package/dist/components/docs/index.cjs +7 -7
  56. package/dist/components/docs/index.js +6 -6
  57. package/dist/components/embeds/index.cjs +5 -5
  58. package/dist/components/embeds/index.js +4 -4
  59. package/dist/components/faq/index.cjs +6 -6
  60. package/dist/components/faq/index.js +5 -5
  61. package/dist/components/features/index.cjs +4 -4
  62. package/dist/components/features/index.js +3 -3
  63. package/dist/components/features/select-button.d.ts.map +1 -1
  64. package/dist/components/help-center-pages/index.cjs +23 -23
  65. package/dist/components/help-center-pages/index.js +14 -14
  66. package/dist/components/index.cjs +161 -161
  67. package/dist/components/index.js +12 -12
  68. package/dist/components/layout/page-layout.d.ts +1 -7
  69. package/dist/components/layout/page-layout.d.ts.map +1 -1
  70. package/dist/components/layout/title-block.d.ts +1 -23
  71. package/dist/components/layout/title-block.d.ts.map +1 -1
  72. package/dist/components/navigation/index.cjs +4 -4
  73. package/dist/components/navigation/index.js +3 -3
  74. package/dist/components/onboarding-guides/index.cjs +8 -8
  75. package/dist/components/onboarding-guides/index.js +7 -7
  76. package/dist/components/related-content/index.cjs +6 -6
  77. package/dist/components/related-content/index.js +5 -5
  78. package/dist/components/tickets/index.cjs +7 -7
  79. package/dist/components/tickets/index.js +6 -6
  80. package/dist/components/ui/autocomplete.d.ts.map +1 -1
  81. package/dist/components/ui/checkbox-block.d.ts.map +1 -1
  82. package/dist/components/ui/date-picker.d.ts.map +1 -1
  83. package/dist/components/ui/field-wrapper.d.ts +1 -10
  84. package/dist/components/ui/field-wrapper.d.ts.map +1 -1
  85. package/dist/components/ui/file-manager/index.cjs +50 -50
  86. package/dist/components/ui/file-manager/index.js +1 -1
  87. package/dist/components/ui/floating-tooltip.d.ts +1 -8
  88. package/dist/components/ui/floating-tooltip.d.ts.map +1 -1
  89. package/dist/components/ui/index.cjs +4 -4
  90. package/dist/components/ui/index.js +3 -3
  91. package/dist/components/ui/input-trigger.d.ts.map +1 -1
  92. package/dist/components/ui/input.d.ts.map +1 -1
  93. package/dist/components/ui/page-actions.d.ts +1 -7
  94. package/dist/components/ui/page-actions.d.ts.map +1 -1
  95. package/dist/components/ui/radio-group.d.ts.map +1 -1
  96. package/dist/components/ui/search-input.d.ts.map +1 -1
  97. package/dist/components/ui/select.d.ts.map +1 -1
  98. package/dist/components/ui/tab-navigation.d.ts +1 -10
  99. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  100. package/dist/components/ui/tag-search-input.d.ts.map +1 -1
  101. package/dist/components/ui/textarea.d.ts.map +1 -1
  102. package/dist/components/ui/truncate-text.d.ts +2 -2
  103. package/dist/components/ui/truncate-text.d.ts.map +1 -1
  104. package/dist/hooks/index.cjs +2 -4
  105. package/dist/hooks/index.cjs.map +1 -1
  106. package/dist/hooks/index.js +1 -3
  107. package/dist/hooks/ui/index.d.ts +0 -1
  108. package/dist/hooks/ui/index.d.ts.map +1 -1
  109. package/dist/index.cjs +4 -6
  110. package/dist/index.cjs.map +1 -1
  111. package/dist/index.js +3 -5
  112. package/package.json +1 -1
  113. package/src/components/features/select-button.tsx +1 -4
  114. package/src/components/layout/page-layout.tsx +0 -16
  115. package/src/components/layout/title-block.tsx +7 -106
  116. package/src/components/ui/.field-wrapper.md +4 -5
  117. package/src/components/ui/.tab-navigation.md +1 -14
  118. package/src/components/ui/autocomplete.tsx +1 -13
  119. package/src/components/ui/button/button.tsx +1 -1
  120. package/src/components/ui/checkbox-block.tsx +3 -27
  121. package/src/components/ui/date-picker.tsx +1 -15
  122. package/src/components/ui/field-wrapper.tsx +6 -12
  123. package/src/components/ui/floating-tooltip.tsx +1 -9
  124. package/src/components/ui/input-trigger.tsx +1 -8
  125. package/src/components/ui/input.tsx +1 -8
  126. package/src/components/ui/page-actions.tsx +30 -142
  127. package/src/components/ui/radio-group.tsx +3 -28
  128. package/src/components/ui/search-input.tsx +1 -2
  129. package/src/components/ui/select.tsx +0 -7
  130. package/src/components/ui/tab-navigation.tsx +4 -26
  131. package/src/components/ui/tag-search-input.tsx +2 -9
  132. package/src/components/ui/textarea.tsx +1 -8
  133. package/src/components/ui/truncate-text.tsx +18 -3
  134. package/src/hooks/ui/index.ts +0 -1
  135. package/dist/chunk-2RTNC3KP.cjs.map +0 -1
  136. package/dist/chunk-QKWOBV55.js.map +0 -1
  137. package/dist/chunk-SGL6URIJ.cjs.map +0 -1
  138. package/dist/chunk-TTYJAZ7P.cjs.map +0 -1
  139. package/dist/chunk-WEUNPE3S.js.map +0 -1
  140. package/dist/hooks/ui/use-is-truncated.d.ts +0 -33
  141. package/dist/hooks/ui/use-is-truncated.d.ts.map +0 -1
  142. package/src/hooks/ui/use-is-truncated.ts +0 -66
  143. /package/dist/{chunk-IUGJAILN.js.map → chunk-6CFFISUC.js.map} +0 -0
  144. /package/dist/{chunk-CZTKQVIQ.js.map → chunk-6CJ2K7BD.js.map} +0 -0
  145. /package/dist/{chunk-ZEC5U5T7.js.map → chunk-6QK3ONDD.js.map} +0 -0
  146. /package/dist/{chunk-GTMW4KY7.js.map → chunk-AIRNG27G.js.map} +0 -0
  147. /package/dist/{chunk-35CTCUJ7.js.map → chunk-BZMOEWWS.js.map} +0 -0
  148. /package/dist/{chunk-T4BUS6JV.js.map → chunk-EGXCWZYP.js.map} +0 -0
  149. /package/dist/{chunk-U2JIGUXF.js.map → chunk-MPYDX5WX.js.map} +0 -0
  150. /package/dist/{chunk-ZDUJ6BDI.js.map → chunk-NGEFYPY7.js.map} +0 -0
  151. /package/dist/{chunk-6WTCJI5R.js.map → chunk-RW2LPL72.js.map} +0 -0
  152. /package/dist/{chunk-2YQK6LHR.js.map → chunk-VDZO6IDR.js.map} +0 -0
  153. /package/dist/{chunk-QF54RPHZ.js.map → chunk-VL2YMDPH.js.map} +0 -0
  154. /package/dist/{chunk-6XNWT2KC.js.map → chunk-WLM3F3WU.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/index.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,24hFAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/index.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,g1hFAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/index.cjs"}
package/dist/index.js CHANGED
@@ -988,7 +988,7 @@ import {
988
988
  walkthroughDismissCookieName,
989
989
  withFirstTouchAttribution,
990
990
  writeDismissCookie
991
- } from "./chunk-CYIUPI7J.js";
991
+ } from "./chunk-OQIMH2WQ.js";
992
992
  import {
993
993
  CommandApprovalToast,
994
994
  DEFAULT_MIN_FILL_MS,
@@ -1077,7 +1077,6 @@ import {
1077
1077
  useHorizontalScrollbar,
1078
1078
  useHumanitySignals,
1079
1079
  useImageEdgeColor,
1080
- useIsTruncated,
1081
1080
  useLgUp,
1082
1081
  useLocalStorage,
1083
1082
  useMarqueeEngine,
@@ -1108,7 +1107,7 @@ import {
1108
1107
  validateSchema,
1109
1108
  validateVariables,
1110
1109
  variablesToUrlParams
1111
- } from "./chunk-WEUNPE3S.js";
1110
+ } from "./chunk-PB3BTZDU.js";
1112
1111
  import {
1113
1112
  PLAY_ICON_PATH
1114
1113
  } from "./chunk-OYGFWWLQ.js";
@@ -1147,7 +1146,7 @@ import {
1147
1146
  SkeletonText,
1148
1147
  SplitButton,
1149
1148
  buttonVariants
1150
- } from "./chunk-QKWOBV55.js";
1149
+ } from "./chunk-GZK7FWJJ.js";
1151
1150
  import "./chunk-6U3IUD57.js";
1152
1151
  import "./chunk-OHPI2HRK.js";
1153
1152
  import {
@@ -2547,7 +2546,6 @@ export {
2547
2546
  useHorizontalScrollbar,
2548
2547
  useHumanitySignals,
2549
2548
  useImageEdgeColor,
2550
- useIsTruncated,
2551
2549
  useJetStreamDialogSubscription,
2552
2550
  useLgUp,
2553
2551
  useLoading,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.490-snapshot.20260728181420",
3
+ "version": "0.0.490",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -36,12 +36,9 @@ export const SelectButton = React.forwardRef<HTMLButtonElement, SelectButtonProp
36
36
  "font-body text-left w-full",
37
37
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus",
38
38
  "disabled:pointer-events-none disabled:opacity-50",
39
- // Hover / active move the BACKGROUND only, like Input — the accent
40
- // border is reserved for the selected state, so an unselected button
41
- // no longer flashes "selected" under the cursor.
42
39
  selected
43
40
  ? "bg-ods-open-yellow-light border-ods-accent hover:bg-ods-open-yellow-light-hover active:bg-ods-open-yellow-light-action"
44
- : "bg-ods-card border-ods-border hover:bg-ods-bg-hover active:bg-ods-bg-active",
41
+ : "bg-ods-card border-ods-border hover:bg-ods-bg-hover hover:border-ods-accent active:bg-ods-bg-active active:border-ods-accent",
45
42
  className,
46
43
  )}
47
44
  >
@@ -36,12 +36,6 @@
36
36
  * `titleWrap` prop, forwarded to `TitleBlock`. Defaults to `false` (frozen
37
37
  * single-line truncate). Content detail pages with CMS titles pass it to let
38
38
  * long titles wrap instead of ellipsis-clip. Additive + default-preserving.
39
- *
40
- * SANCTIONED EXCEPTION (2026-07, explicit human sign-off): the OPTIONAL
41
- * `subtitleRow` prop, forwarded to `TitleBlock`. Defaults to `'when-set'` (the
42
- * subtitle row renders only when there is text for it). Pages whose subtitle is
43
- * optional record data use it to choose how the row behaves while loading.
44
- * Additive + default-preserving.
45
39
  * ========================================================================== */
46
40
 
47
41
  import React from 'react'
@@ -74,12 +68,6 @@ export interface PageLayoutProps {
74
68
  /** When true, the title/subtitle render as line-box-accurate skeleton bars (forwarded to
75
69
  * `TitleBlock`). Header height stays identical to the loaded state — for page skeletons. */
76
70
  loading?: boolean
77
- /** Render the header ACTIONS as placeholders (their set depends on data still loading). */
78
- loadingActions?: boolean
79
- /** When the subtitle row occupies the layout (forwarded to `TitleBlock`):
80
- * `'when-set'` (default), `'while-loading'` (skeleton bar while loading, collapses
81
- * if the record has no subtitle), or `'always'` (never collapses). */
82
- subtitleRow?: 'when-set' | 'while-loading' | 'always'
83
71
  /** When true, a long title wraps onto multiple lines instead of the frozen single-line
84
72
  * ellipsis clamp (forwarded to `TitleBlock`). For content detail pages whose h1 is CMS
85
73
  * data of arbitrary length. Additive + default-preserving. */
@@ -108,8 +96,6 @@ export function PageLayout({
108
96
  titleSize,
109
97
  titleAdornment,
110
98
  loading,
111
- loadingActions,
112
- subtitleRow,
113
99
  titleWrap,
114
100
  }: PageLayoutProps) {
115
101
  const hasActions = actions && actions.length > 0
@@ -132,8 +118,6 @@ export function PageLayout({
132
118
  titleSize={titleSize}
133
119
  titleAdornment={titleAdornment}
134
120
  loading={loading}
135
- loadingActions={loadingActions}
136
- subtitleRow={subtitleRow}
137
121
  titleWrap={titleWrap}
138
122
  />
139
123
  )}
@@ -40,14 +40,6 @@
40
40
  * byte-identical. Do NOT change defaults or touch anything else here.
41
41
  *
42
42
  * SANCTIONED EXCEPTION (2026-07, explicit human sign-off): the OPTIONAL
43
- * `subtitleRow` prop. Defaults to `'when-set'` — the subtitle row keeps
44
- * rendering only when `subtitle` is truthy, so every existing caller is
45
- * byte-identical. The other two values decide how a page trades a header that
46
- * never moves against a header that never shows an empty line; see the prop's
47
- * own doc for which to pick. Additive + default-preserving; do NOT change the
48
- * default.
49
- *
50
- * SANCTIONED EXCEPTION (2026-07, explicit human sign-off): the OPTIONAL
51
43
  * `titleWrap` prop. Defaults to `false` — the frozen single-line `truncate`
52
44
  * baseline is unchanged for every existing caller. Content DETAIL pages (whose
53
45
  * h1 is CMS data of arbitrary length — releases, legal docs, FAQ docs, dev
@@ -66,27 +58,12 @@
66
58
  * so its natural width drives the wrap while `truncate` still clamps a title
67
59
  * that alone exceeds the container. The mobile (base) layout is untouched.
68
60
  * This is the new frozen baseline; do NOT re-introduce breakpoint stacking.
69
- *
70
- * SANCTIONED EXCEPTION (2026-07, explicit human sign-off): overflow tooltips on
71
- * the title and subtitle. This one CHANGES the baseline for every caller: the
72
- * native `title=""` attribute on both is replaced by the ODS `FloatingTooltip`,
73
- * armed only when the text is genuinely clipped (`useIsTruncated`). Both stay
74
- * single-line — that is the design, and the tooltip is what makes a clipped
75
- * title readable instead of merely pretty. Nothing is lost for assistive tech:
76
- * `text-overflow: ellipsis` never hid the text from the accessibility tree, so
77
- * the full string was always exposed; the attribute only ever served a mouse.
78
- * The wrapper `div` the tooltip needs goes OUTSIDE the `h1`/`p` — never inside:
79
- * a `div` inside a `p` is auto-closed by the HTML parser, which would split the
80
- * subtitle paragraph and desync hydration. The `titleWrap` branch is untouched
81
- * (wrapped text never clips, so it never needs a tooltip).
82
61
  * ========================================================================== */
83
62
 
84
63
  import React from 'react'
85
- import { useIsTruncated } from '../../hooks/ui/use-is-truncated'
86
64
  import { cn } from '../../utils/cn'
87
65
  import type { ActionsMenuGroup } from '../ui/actions-menu'
88
66
  import { EntityImage } from '../ui/entity-image'
89
- import { FloatingTooltip } from '../ui/floating-tooltip'
90
67
  import { PageActions, type PageActionButton } from '../ui/page-actions'
91
68
  import { BackButton } from './back-button'
92
69
 
@@ -129,28 +106,6 @@ export interface TitleBlockProps {
129
106
  * (typography + surrounding markup unchanged, so header height is identical to loaded).
130
107
  * Additive + default-preserving: omit it and every existing caller is byte-identical. */
131
108
  loading?: boolean
132
- /**
133
- * Render the ACTIONS as placeholders too. Separate from `loading` on purpose:
134
- * a page whose action set is already final (it depends on the route, not on
135
- * the record) keeps showing its real buttons while the title loads.
136
- */
137
- loadingActions?: boolean
138
- /**
139
- * When the subtitle row occupies the layout. The subtitle is often optional
140
- * RECORD data — unknown while loading, sometimes absent afterwards — and there
141
- * is no setting that both fills the loading header and never leaves a blank
142
- * line, so the caller picks which one matters.
143
- *
144
- * - `'when-set'` (default) — only when `subtitle` has text.
145
- * - `'while-loading'` — also during `loading`, as a skeleton bar. The header
146
- * looks complete while it loads, and the row collapses if the record turns
147
- * out to have no subtitle (so that case settles one line shorter).
148
- * - `'always'` — the row never collapses; an empty subtitle holds its line
149
- * with an invisible spacer. The header cannot change height. Use it when the
150
- * loaded page ALWAYS has a subtitle — typically a standalone skeleton
151
- * component matching a page whose subtitle is guaranteed.
152
- */
153
- subtitleRow?: 'when-set' | 'while-loading' | 'always'
154
109
  /** When true, a long title WRAPS onto multiple lines instead of the frozen single-line
155
110
  * ellipsis clamp. For content detail pages whose h1 is CMS data of arbitrary length.
156
111
  * Additive + default-preserving: omit it and every existing caller is byte-identical. */
@@ -174,22 +129,6 @@ function TitleTextSkeleton({ widthClass, heightClass }: { widthClass: string; he
174
129
  )
175
130
  }
176
131
 
177
- /**
178
- * Bar geometry per title size, following the ODS type scale across breakpoints
179
- * (`md` = 800px, `lg` = 1280px here — the SAME widths the typography tokens
180
- * switch at, so bar and text step together).
181
- *
182
- * `h2` needs no `lg` step because `text-h2` has none: it is 24/32 on mobile and
183
- * 32/40 from tablet up. `text-h1` scales at both breakpoints (40 → 48 → 56), so
184
- * its bar does too — reusing the h2 bar there would leave a stamp-sized smudge
185
- * inside a 64px line. Heights stay well under the line box's ascent on purpose;
186
- * see `TitleTextSkeleton` for why that is what keeps the header height honest.
187
- */
188
- const TITLE_SKELETON_SIZE = {
189
- h1: { width: 'w-56 md:w-80 lg:w-96', height: 'h-7 md:h-8 lg:h-9' },
190
- h2: { width: 'w-48 md:w-72', height: 'h-4 md:h-6' },
191
- } as const
192
-
193
132
  export function TitleBlock({
194
133
  title,
195
134
  subtitle,
@@ -204,28 +143,14 @@ export function TitleBlock({
204
143
  titleSize = 'h2',
205
144
  titleAdornment,
206
145
  loading,
207
- loadingActions,
208
- subtitleRow = 'when-set',
209
146
  titleWrap = false,
210
147
  }: TitleBlockProps) {
211
- const hasSubtitleRow =
212
- !!subtitle || subtitleRow === 'always' || (subtitleRow === 'while-loading' && !!loading)
213
148
  const hasActions = actions && actions.length > 0
214
149
  const hasMenuActions = !!menuActions && menuActions.some(g => g.items.length > 0)
215
150
  const titleClass = titleSize === 'h1' ? 'text-h1' : 'text-h2'
216
151
  // Frozen baseline is the single-line `truncate`; `titleWrap` swaps it for
217
152
  // multi-line wrapping (break-words guards pathological unbroken tokens).
218
153
  const titleOverflowClass = titleWrap ? 'break-words' : 'truncate'
219
- const skeletonSize = TITLE_SKELETON_SIZE[titleSize]
220
-
221
- // Exactly one title element renders per pass, so one ref covers every branch.
222
- // The tooltip arms itself only on real clipping — repeating a fully visible
223
- // title back to the user is noise, and `titleWrap`/loading never clip at all.
224
- const { ref: titleRef, isTruncated: titleTruncated } = useIsTruncated<HTMLHeadingElement>(loading ? null : title)
225
- const { ref: subtitleRef, isTruncated: subtitleTruncated } = useIsTruncated<HTMLParagraphElement>(
226
- loading ? null : subtitle,
227
- )
228
- const titleNode = loading ? <TitleTextSkeleton widthClass={skeletonSize.width} heightClass={skeletonSize.height} /> : title
229
154
 
230
155
  return (
231
156
  <div
@@ -258,7 +183,7 @@ export function TitleBlock({
258
183
  className="hidden md:inline-flex"
259
184
  />
260
185
  )}
261
- {(image || hasSubtitleRow || loading) ? (
186
+ {(image || subtitle || loading) ? (
262
187
  <div className="flex items-center gap-[var(--spacing-system-m)] min-w-0 w-full">
263
188
  {image && (
264
189
  <EntityImage
@@ -271,32 +196,15 @@ export function TitleBlock({
271
196
  {(loading || title) && (
272
197
  titleAdornment ? (
273
198
  <div className="flex items-center gap-[var(--spacing-system-m)] min-w-0 w-full">
274
- {/* `min-w-0` moves onto the tooltip's wrapper: the wrapper is
275
- now the flex item, and without it the row refuses to
276
- shrink and pushes the adornment out. */}
277
- <FloatingTooltip content={title} side="bottom" disabled={!titleTruncated} triggerClassName="min-w-0">
278
- <h1 ref={titleRef} className={cn(titleClass, 'text-ods-text-primary min-w-0', titleOverflowClass)}>{titleNode}</h1>
279
- </FloatingTooltip>
199
+ <h1 className={cn(titleClass, 'text-ods-text-primary min-w-0', titleOverflowClass)} title={title}>{loading ? <TitleTextSkeleton widthClass="w-48 md:w-72" heightClass="h-4 md:h-6" /> : title}</h1>
280
200
  <span className="shrink-0">{titleAdornment}</span>
281
201
  </div>
282
202
  ) : (
283
- <FloatingTooltip content={title} side="bottom" disabled={!titleTruncated}>
284
- <h1 ref={titleRef} className={cn(titleClass, 'text-ods-text-primary', titleOverflowClass)}>{titleNode}</h1>
285
- </FloatingTooltip>
203
+ <h1 className={cn(titleClass, 'text-ods-text-primary', titleOverflowClass)} title={title}>{loading ? <TitleTextSkeleton widthClass="w-48 md:w-72" heightClass="h-4 md:h-6" /> : title}</h1>
286
204
  )
287
205
  )}
288
- {hasSubtitleRow && (
289
- /* The NBSP is a pure spacer, reached only in `'always'` mode: an
290
- empty `p` collapses to zero height (its only content would be
291
- collapsible whitespace), which is exactly the shift that mode
292
- exists to prevent. Hidden from AT — it carries no meaning. */
293
- <FloatingTooltip content={subtitle} side="bottom" disabled={!subtitleTruncated}>
294
- <p
295
- ref={subtitleRef}
296
- className="text-h6 text-ods-text-secondary truncate"
297
- aria-hidden={!loading && !subtitle ? true : undefined}
298
- >{loading ? <TitleTextSkeleton widthClass="w-28 md:w-36" heightClass="h-2.5 md:h-3" /> : (subtitle || '\u00A0')}</p>
299
- </FloatingTooltip>
206
+ {subtitle && (
207
+ <p className="text-h6 text-ods-text-secondary truncate" title={subtitle}>{loading ? <TitleTextSkeleton widthClass="w-28 md:w-36" heightClass="h-2.5 md:h-3" /> : subtitle}</p>
300
208
  )}
301
209
  </div>
302
210
  </div>
@@ -304,9 +212,7 @@ export function TitleBlock({
304
212
  title && (
305
213
  titleAdornment ? (
306
214
  <div className="flex items-center gap-[var(--spacing-system-m)] min-w-0 w-full">
307
- <FloatingTooltip content={title} side="bottom" disabled={!titleTruncated} triggerClassName="min-w-0">
308
- <h1 ref={titleRef} className={cn(titleClass, 'text-ods-text-primary min-w-0', titleOverflowClass)}>{title}</h1>
309
- </FloatingTooltip>
215
+ <h1 className={cn(titleClass, 'text-ods-text-primary min-w-0', titleOverflowClass)} title={title}>{title}</h1>
310
216
  <span className="shrink-0">{titleAdornment}</span>
311
217
  </div>
312
218
  ) : (
@@ -320,18 +226,13 @@ export function TitleBlock({
320
226
  )}
321
227
  </div>
322
228
 
323
- {/* `loadingActions` opens this gate on its own: the case the flag exists for
324
- is a page that does not YET know its action set, which is exactly the
325
- page that passes `actions={[]}` — gating on `hasActions` alone would
326
- render nothing and then pop the real buttons in. */}
327
- {(hasActions || hasMenuActions || selector || loadingActions) && (
229
+ {(hasActions || hasMenuActions || selector) && (
328
230
  <div className="flex gap-2 items-center shrink-0">
329
231
  <PageActions
330
232
  variant={actionsVariant}
331
233
  actions={actions ?? []}
332
234
  menuActions={menuActions}
333
235
  selector={selector}
334
- loading={loadingActions}
335
236
  />
336
237
  </div>
337
238
  )}
@@ -1,4 +1,4 @@
1
- <!-- source-hash: 674794aef9f624e4f74a99dae56b9617 -->
1
+ <!-- source-hash: bd15d4489bb0eca1b2faabacba129705 -->
2
2
  A layout wrapper component that adds an optional label above and a status message below any form field, handling the visual chrome (label + feedback text) while letting the field itself remain unstyled.
3
3
 
4
4
  ## Key Components
@@ -11,16 +11,15 @@ A `forwardRef` component that wraps form fields with consistent label and feedba
11
11
  | Prop | Type | Default | Description |
12
12
  |------|------|---------|-------------|
13
13
  | `label` | `string` | — | Label text rendered above the field |
14
- | `error` | `string` | — | Status/feedback message rendered below the field (out of flow) |
14
+ | `error` | `string` | — | Status/feedback message rendered below the field |
15
15
  | `errorVariant` | `"error" \| "warning" \| "success" \| "muted"` | `"error"` | Color variant for the feedback message |
16
16
  | `className` | `string` | — | Additional class applied to the outer wrapper |
17
17
  | `children` | `React.ReactNode` | — | The field element(s) to wrap |
18
18
 
19
19
  **Behavior:**
20
20
  - When neither `label` nor `error` is present, the wrapper renders as `contents` (no layout box introduced).
21
- - When either exists, it renders as a full-width **relative** flex column.
22
- - The feedback message is a single line, ellipsized on overflow; the full text is accessible via the native `title` tooltip.
23
- - The message is positioned **absolutely** (`bottom-0` + `translate-y-full`), so showing or hiding it never changes the field's height — no layout shift on validation. The trade-off: it hangs BELOW the wrapper box and overlaps whatever follows, so a form stacking fields must leave at least ~20px of vertical gap (e.g. `gap-[var(--spacing-system-lf)]`) for it to land in clear space. `CheckboxBlock` uses the same treatment.
21
+ - When either exists, it renders as a full-width flex column.
22
+ - The feedback message clamps to 2 lines with ellipsis; the full text is accessible via the native `title` tooltip.
24
23
 
25
24
  **Color Variants:**
26
25
 
@@ -1,4 +1,4 @@
1
- <!-- source-hash: ef59a6aa7c2983608cd2d9c678c34323 -->
1
+ <!-- source-hash: 4f81360202d7fa9875b28cdae48c29a5 -->
2
2
  Accessible, scrollable tab navigation bar component with optional URL synchronization, overflow scroll shadows, and support for both controlled and URL-driven active tab state.
3
3
 
4
4
  ## Key Components
@@ -46,19 +46,6 @@ Configuration object for URL synchronization:
46
46
  {(activeTab) => <ContentPanel tab={activeTab} />}
47
47
  </TabNavigation>
48
48
 
49
- // Render prop with the pending flag. The tab BODY is deferred
50
- // (`useDeferredValue`), so the underline moves instantly while the body keeps
51
- // showing the previous tab until the new one is ready — no Suspense-fallback
52
- // flash. `isStale` is true during that window; mark the body so stale data
53
- // doesn't read as fresh data.
54
- <TabNavigation tabs={tabs} urlSync>
55
- {(activeTab, { isStale }) => (
56
- <div className={cn(isStale && 'opacity-60 transition-opacity')}>
57
- <ContentPanel tab={activeTab} />
58
- </div>
59
- )}
60
- </TabNavigation>
61
-
62
49
  // Stretched tabs with forced gradients
63
50
  <TabNavigation
64
51
  tabs={tabs}
@@ -124,8 +124,7 @@ const innerInputStyles = cn(
124
124
  "flex-1 min-w-[60px] bg-transparent border-none outline-none",
125
125
  "text-h4",
126
126
  "text-ods-text-primary placeholder:text-ods-text-secondary",
127
- // Disabled - match Input exactly (value greys out, placeholder dims further)
128
- "disabled:cursor-not-allowed disabled:text-ods-text-disabled disabled:placeholder:text-ods-border"
127
+ "disabled:cursor-not-allowed"
129
128
  )
130
129
 
131
130
  function AutocompleteInner<T = string>(
@@ -422,9 +421,6 @@ function AutocompleteInner<T = string>(
422
421
  <PopoverPrimitive.Root open={isOpen} onOpenChange={handleOpenChange} modal={false}>
423
422
  <PopoverPrimitive.Anchor asChild>
424
423
  <div
425
- // Same marker Input/Textarea/Select expose — it is how a form finds
426
- // (and scrolls to) the first field that failed validation.
427
- data-invalid={isInvalid || undefined}
428
424
  className={cn(
429
425
  // Layout — single line, no wrapping
430
426
  "flex items-center rounded-[6px] border min-h-11 md:min-h-12 cursor-text",
@@ -434,14 +430,6 @@ function AutocompleteInner<T = string>(
434
430
  "group",
435
431
  !disabled && "hover:bg-ods-bg-hover hover:border-ods-border-hover active:bg-ods-bg-active active:border-ods-border-active",
436
432
  disabled && "!cursor-not-allowed bg-ods-bg",
437
- // Adornments / chevron carry their own colour — grey them with the
438
- // value so a disabled field reads as one flat colour. Scoped to the
439
- // DIRECT span child (the start adornment) on purpose: as a descendant
440
- // rule it also hit the selected `Tag` chips in the middle zone, whose
441
- // label is a span, and they went invisible against their own fill in
442
- // the light theme. Anything nested inside the adornment that sets its
443
- // own colour keeps it; anything that doesn't inherits the grey.
444
- "has-[:disabled]:[&>span]:text-ods-text-disabled has-[:disabled]:[&_svg]:text-ods-text-disabled",
445
433
  isOpen && !isInvalid && "border-ods-accent hover:border-ods-accent",
446
434
  isInvalid && "border-ods-error hover:border-ods-error"
447
435
  )}
@@ -30,7 +30,7 @@ const buttonVariants = cva(
30
30
  overlay: buttonSurfaceClasses.overlay,
31
31
  },
32
32
  size: {
33
- default: "py-[var(--spacing-system-sf)] px-[var(--spacing-system-m)] text-h3 md:h-12 h-11",
33
+ default: "py-[var(--spacing-system-sf)] px-[var(--spacing-system-m)] text-h3 md:h-12 h-10",
34
34
  small: "p-[var(--spacing-system-xs)] text-h5 h-6 md:h-8",
35
35
  "small-legacy": "py-[var(--spacing-system-xs)] px-[var(--spacing-system-m)] h-10 text-[14px] font-bold", // Temporary alias for "small" — deprecated; grep size="small-legacy" (lib + hub) and migrate the remaining consumers before removal
36
36
  // 24px pill for slim strips (announcement/promo bars, inline banner
@@ -36,9 +36,6 @@ const CheckboxBlock = React.forwardRef<
36
36
  <div className={cn("relative flex w-full flex-col", className)}>
37
37
  <label
38
38
  htmlFor={id}
39
- // Same marker every field exposes — it is how a form finds (and scrolls
40
- // to) the first control that failed validation.
41
- data-invalid={error ? true : undefined}
42
39
  className={cn(
43
40
  "flex items-center gap-[var(--spacing-system-s)] rounded-md ring-1 ring-inset w-full",
44
41
  // Trailing content stacks full-width below the text on mobile.
@@ -48,17 +45,8 @@ const CheckboxBlock = React.forwardRef<
48
45
  description && "min-h-[60px] md:min-h-[64px]",
49
46
  "bg-ods-card ring-ods-border",
50
47
  "cursor-pointer transition-colors duration-200",
51
- // States mirror Input: hover / active move the BACKGROUND, the ring
52
- // stays put. Disabled swaps to the flat `ods-bg` fill and greys the
53
- // text + the box instead of fading the whole block, so a disabled block
54
- // reads the same as a disabled field. The greying itself lives on the
55
- // TEXT COLUMN below, not here: as a descendant rule on the label it also
56
- // repainted the checked INDICATOR (Radix renders it as a `span`, and the
57
- // checkmark svg inherits `currentColor`) and whatever `trailing` renders
58
- // — a `Tag`'s label is a span too, and it went invisible against its own
59
- // fill in the light theme.
60
- !disabled && "hover:bg-ods-bg-hover active:bg-ods-bg-active",
61
- disabled && "cursor-not-allowed bg-ods-bg",
48
+ "hover:ring-ods-accent/30",
49
+ disabled && "opacity-50 cursor-not-allowed hover:ring-ods-border",
62
50
  error && "ring-ods-error",
63
51
  )}
64
52
  >
@@ -75,11 +63,7 @@ const CheckboxBlock = React.forwardRef<
75
63
  error ? "border-ods-error" : "border-[var(--color-border-strong)]",
76
64
  "bg-ods-card",
77
65
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 focus-visible:ring-offset-ods-card",
78
- // Disabled: the EMPTY box dims with the text instead of the whole
79
- // block fading. A checked box keeps its accent fill — greying it too
80
- // would bury the checkmark, and "on but locked" has to stay readable.
81
66
  "disabled:cursor-not-allowed",
82
- "disabled:data-[state=unchecked]:bg-ods-bg disabled:data-[state=unchecked]:border-ods-border",
83
67
  "data-[state=checked]:bg-[var(--color-accent-primary)] data-[state=checked]:border-[var(--color-accent-primary)]"
84
68
  )}
85
69
  >
@@ -89,15 +73,7 @@ const CheckboxBlock = React.forwardRef<
89
73
  <CheckboxCheckmarkIcon className="w-2 h-2 md:w-2.5 md:h-2.5" />
90
74
  </CheckboxPrimitive.Indicator>
91
75
  </CheckboxPrimitive.Root>
92
- <div
93
- className={cn(
94
- "flex flex-1 flex-col justify-center min-w-0",
95
- // Direct children only — these are the two component-owned wrappers.
96
- // `label` and `description` are ReactNode (rich text, inline links),
97
- // so a descendant rule would repaint content the caller styled itself.
98
- disabled && "[&>span]:text-ods-text-disabled",
99
- )}
100
- >
76
+ <div className="flex flex-1 flex-col justify-center min-w-0">
101
77
  <span className={cn(
102
78
  "text-h4 !leading-5 md:!leading-6",
103
79
  "text-ods-text-primary select-none",
@@ -451,12 +451,8 @@ const triggerButtonStyles = cn(
451
451
  // Hover & active (not disabled)
452
452
  "enabled:hover:bg-ods-bg-hover enabled:hover:border-ods-border-hover enabled:active:bg-ods-bg-active enabled:active:border-ods-border-active",
453
453
  "focus:outline-none",
454
- // Disabled - match Input exactly. The value/placeholder span inside sets its
455
- // own colour, so the child rule (higher specificity) greys it too. Scoped to
456
- // DIRECT children like every other field, so nested content that owns its
457
- // colour keeps it.
454
+ // Disabled
458
455
  "disabled:!cursor-not-allowed disabled:bg-ods-bg",
459
- "disabled:text-ods-text-disabled disabled:[&>span]:text-ods-text-disabled disabled:[&_svg]:text-ods-text-disabled",
460
456
  // Animation
461
457
  "transition-colors duration-200"
462
458
  );
@@ -469,7 +465,6 @@ const timeSelectTriggerStyles = cn(
469
465
  "enabled:hover:bg-ods-bg-hover enabled:hover:border-ods-border-hover enabled:active:bg-ods-bg-active enabled:active:border-ods-border-active",
470
466
  "focus:outline-none",
471
467
  "disabled:!cursor-not-allowed disabled:bg-ods-bg",
472
- "disabled:text-ods-text-disabled disabled:[&>span]:text-ods-text-disabled disabled:[&_svg]:text-ods-text-disabled",
473
468
  "transition-colors duration-200 cursor-pointer",
474
469
  "text-ods-text-primary"
475
470
  );
@@ -524,9 +519,6 @@ export function DatePicker(props: DatePickerProps) {
524
519
  <button
525
520
  type="button"
526
521
  disabled={disabled}
527
- // Same marker Input/Textarea/Select expose — it is how a form finds
528
- // (and scrolls to) the first field that failed validation.
529
- data-invalid={isInvalid || undefined}
530
522
  className={cn(triggerButtonStyles, "group", open && !isInvalid && "border-ods-accent enabled:hover:border-ods-accent enabled:hover:bg-ods-card", isInvalid && "border-ods-error enabled:hover:border-ods-error enabled:hover:bg-ods-card", className)}
531
523
  >
532
524
  <Calendar className="size-6 text-ods-text-secondary shrink-0" />
@@ -700,9 +692,6 @@ export function DatePickerInput({
700
692
  <button
701
693
  type="button"
702
694
  disabled={disabled}
703
- // Same marker Input/Textarea/Select expose — it is how a form finds
704
- // (and scrolls to) the first field that failed validation.
705
- data-invalid={isInvalid || undefined}
706
695
  className={cn(triggerButtonStyles, "group", open && !isInvalid && "border-ods-accent enabled:hover:border-ods-accent enabled:hover:bg-ods-card", isInvalid && "border-ods-error enabled:hover:border-ods-error enabled:hover:bg-ods-card", "flex-1")}
707
696
  >
708
697
  <Calendar className="size-6 text-ods-text-secondary shrink-0" />
@@ -934,9 +923,6 @@ export function DatePickerInputSimple({
934
923
  <button
935
924
  type="button"
936
925
  disabled={disabled}
937
- // Same marker Input/Textarea/Select expose — it is how a form finds
938
- // (and scrolls to) the first field that failed validation.
939
- data-invalid={isInvalid || undefined}
940
926
  className={cn(triggerButtonStyles, "group", open && !isInvalid && "border-ods-accent enabled:hover:border-ods-accent enabled:hover:bg-ods-card", isInvalid && "border-ods-error enabled:hover:border-ods-error enabled:hover:bg-ods-card", "flex-1")}
941
927
  >
942
928
  <Calendar className="size-6 text-ods-text-secondary shrink-0" />
@@ -6,16 +6,7 @@ import { cn } from "../../utils/cn"
6
6
  export interface FieldWrapperProps {
7
7
  /** Label text displayed above the field */
8
8
  label?: string
9
- /**
10
- * Status message displayed below the field, on ONE line, ellipsized on
11
- * overflow (full text via the native `title`).
12
- *
13
- * It is positioned OUT OF FLOW (absolute, hanging below the wrapper), so it
14
- * never changes the field's height when it appears — the same treatment
15
- * `CheckboxBlock` uses. The trade is that it overlaps whatever sits directly
16
- * below: a form stacking fields needs at least ~20px of vertical gap (e.g.
17
- * `gap-[var(--spacing-system-lf)]`) for the message to land in clear space.
18
- */
9
+ /** Status message displayed below the field. Wraps up to two lines, then ellipsizes. */
19
10
  error?: string
20
11
  /** Color variant for the message: "error" (red), "warning" (yellow), "success" (green) or "muted" (grey) */
21
12
  errorVariant?: "error" | "warning" | "success" | "muted"
@@ -36,7 +27,7 @@ const FieldWrapper = React.forwardRef<HTMLDivElement, FieldWrapperProps>(
36
27
  const hasChrome = label != null || error != null
37
28
 
38
29
  return (
39
- <div ref={ref} className={cn(hasChrome ? "relative flex w-full flex-col" : "contents", className)}>
30
+ <div ref={ref} className={cn(hasChrome ? "flex w-full flex-col" : "contents", className)}>
40
31
  {label && (
41
32
  <label className="text-h4 text-ods-text-primary mb-1">
42
33
  {label}
@@ -44,7 +35,10 @@ const FieldWrapper = React.forwardRef<HTMLDivElement, FieldWrapperProps>(
44
35
  )}
45
36
  {children}
46
37
  {error && (
47
- <p className={cn("absolute bottom-0 left-0 right-0 translate-y-full text-h6 truncate", errorVariantClasses[errorVariant])} title={error}>
38
+ <p
39
+ className={cn("mt-1 text-h6 break-words line-clamp-2", errorVariantClasses[errorVariant])}
40
+ title={error}
41
+ >
48
42
  {error}
49
43
  </p>
50
44
  )}