@ankhorage/zora 25.8.15 → 25.8.17

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 (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/capabilities/index.js +34 -59
  4. package/dist/capabilities/index.js.map +3 -3
  5. package/dist/features/date-picker/composition/DatePickerContent.d.ts.map +1 -1
  6. package/dist/features/date-picker/composition/DatePickerContent.js +1 -11
  7. package/dist/features/date-picker/composition/DatePickerContent.js.map +1 -1
  8. package/dist/features/date-picker/composition/DatePickerField.d.ts.map +1 -1
  9. package/dist/features/date-picker/composition/DatePickerField.js +2 -17
  10. package/dist/features/date-picker/composition/DatePickerField.js.map +1 -1
  11. package/dist/features/matrix-grid/application/getMatrixGridNextFocusId.js +7 -19
  12. package/dist/features/matrix-grid/application/getMatrixGridNextFocusId.js.map +1 -1
  13. package/dist/features/picker/composition/PickerField.d.ts +14 -0
  14. package/dist/features/picker/composition/PickerField.d.ts.map +1 -0
  15. package/dist/features/picker/composition/PickerField.js +21 -0
  16. package/dist/features/picker/composition/PickerField.js.map +1 -0
  17. package/dist/features/picker/composition/PickerHeader.d.ts +9 -0
  18. package/dist/features/picker/composition/PickerHeader.d.ts.map +1 -0
  19. package/dist/features/picker/composition/PickerHeader.js +14 -0
  20. package/dist/features/picker/composition/PickerHeader.js.map +1 -0
  21. package/dist/features/tabletop/meta.d.ts +46 -46
  22. package/dist/features/tabletop/meta.d.ts.map +1 -1
  23. package/dist/features/tabletop/meta.js +33 -58
  24. package/dist/features/tabletop/meta.js.map +1 -1
  25. package/dist/features/time-picker/composition/TimePickerContent.js +1 -12
  26. package/dist/features/time-picker/composition/TimePickerContent.js.map +1 -1
  27. package/dist/features/time-picker/composition/TimePickerField.d.ts.map +1 -1
  28. package/dist/features/time-picker/composition/TimePickerField.js +2 -17
  29. package/dist/features/time-picker/composition/TimePickerField.js.map +1 -1
  30. package/dist/features/typography/utils/headingThemeRecipeMeta.d.ts +5 -5
  31. package/dist/features/typography/utils/headingThemeRecipeMeta.d.ts.map +1 -1
  32. package/dist/features/typography/utils/headingThemeRecipeMeta.js +2 -19
  33. package/dist/features/typography/utils/headingThemeRecipeMeta.js.map +1 -1
  34. package/dist/features/typography/utils/resolveHeadingRecipe.d.ts.map +1 -1
  35. package/dist/features/typography/utils/resolveHeadingRecipe.js +11 -68
  36. package/dist/features/typography/utils/resolveHeadingRecipe.js.map +1 -1
  37. package/dist/features/typography/utils/resolveHeadingThemeRecipe.d.ts +4 -4
  38. package/dist/features/typography/utils/resolveHeadingThemeRecipe.d.ts.map +1 -1
  39. package/dist/features/typography/utils/resolveHeadingThemeRecipe.js +2 -33
  40. package/dist/features/typography/utils/resolveHeadingThemeRecipe.js.map +1 -1
  41. package/dist/features/typography/utils/resolveTextStyle.d.ts.map +1 -1
  42. package/dist/features/typography/utils/resolveTextStyle.js +11 -76
  43. package/dist/features/typography/utils/resolveTextStyle.js.map +1 -1
  44. package/dist/features/typography/utils/resolveTextThemeRecipe.d.ts +4 -4
  45. package/dist/features/typography/utils/resolveTextThemeRecipe.d.ts.map +1 -1
  46. package/dist/features/typography/utils/resolveTextThemeRecipe.js +2 -33
  47. package/dist/features/typography/utils/resolveTextThemeRecipe.js.map +1 -1
  48. package/dist/features/typography/utils/resolveTypographyStyleTokens.d.ts +21 -0
  49. package/dist/features/typography/utils/resolveTypographyStyleTokens.d.ts.map +1 -0
  50. package/dist/features/typography/utils/resolveTypographyStyleTokens.js +75 -0
  51. package/dist/features/typography/utils/resolveTypographyStyleTokens.js.map +1 -0
  52. package/dist/features/typography/utils/resolveTypographyThemeRecipeFields.d.ts +10 -0
  53. package/dist/features/typography/utils/resolveTypographyThemeRecipeFields.d.ts.map +1 -0
  54. package/dist/features/typography/utils/resolveTypographyThemeRecipeFields.js +19 -0
  55. package/dist/features/typography/utils/resolveTypographyThemeRecipeFields.js.map +1 -0
  56. package/dist/features/typography/utils/textThemeRecipeMeta.d.ts +6 -6
  57. package/dist/features/typography/utils/textThemeRecipeMeta.d.ts.map +1 -1
  58. package/dist/features/typography/utils/textThemeRecipeMeta.js +2 -19
  59. package/dist/features/typography/utils/textThemeRecipeMeta.js.map +1 -1
  60. package/dist/features/typography/utils/typographyThemeRecipeFields.d.ts +30 -0
  61. package/dist/features/typography/utils/typographyThemeRecipeFields.d.ts.map +1 -0
  62. package/dist/features/typography/utils/typographyThemeRecipeFields.js +23 -0
  63. package/dist/features/typography/utils/typographyThemeRecipeFields.js.map +1 -0
  64. package/dist/features/uploader/adapters/inbound/Uploader.d.ts.map +1 -1
  65. package/dist/features/uploader/adapters/inbound/Uploader.js +1 -16
  66. package/dist/features/uploader/adapters/inbound/Uploader.js.map +1 -1
  67. package/dist/features/uploader/application/use-cases/validateUploadAsset.d.ts.map +1 -1
  68. package/dist/features/uploader/application/use-cases/validateUploadAsset.js +1 -16
  69. package/dist/features/uploader/application/use-cases/validateUploadAsset.js.map +1 -1
  70. package/dist/features/web-component-artifact/composition/createWebDesiredStateWithNodeAsync.d.ts.map +1 -1
  71. package/dist/features/web-component-artifact/composition/createWebDesiredStateWithNodeAsync.js +3 -4
  72. package/dist/features/web-component-artifact/composition/createWebDesiredStateWithNodeAsync.js.map +1 -1
  73. package/dist/features/web-component-artifact/composition/readWebComponentPackageMetadataAsync.d.ts +8 -0
  74. package/dist/features/web-component-artifact/composition/readWebComponentPackageMetadataAsync.d.ts.map +1 -0
  75. package/dist/features/web-component-artifact/composition/readWebComponentPackageMetadataAsync.js +10 -0
  76. package/dist/features/web-component-artifact/composition/readWebComponentPackageMetadataAsync.js.map +1 -0
  77. package/dist/features/web-component-artifact/composition/synchronizeDeclaredWebComponentsWithNodeAsync.d.ts.map +1 -1
  78. package/dist/features/web-component-artifact/composition/synchronizeDeclaredWebComponentsWithNodeAsync.js +4 -6
  79. package/dist/features/web-component-artifact/composition/synchronizeDeclaredWebComponentsWithNodeAsync.js.map +1 -1
  80. package/package.json +14 -14
  81. package/src/expo57Migration.test.ts +50 -0
  82. package/src/features/date-picker/composition/DatePickerContent.tsx +1 -22
  83. package/src/features/date-picker/composition/DatePickerField.tsx +2 -31
  84. package/src/features/matrix-grid/application/getMatrixGridNextFocusId.ts +11 -22
  85. package/src/features/picker/composition/PickerField.tsx +61 -0
  86. package/src/features/picker/composition/PickerHeader.tsx +25 -0
  87. package/src/features/tabletop/meta.ts +34 -58
  88. package/src/features/time-picker/composition/TimePickerContent.tsx +1 -23
  89. package/src/features/time-picker/composition/TimePickerField.tsx +2 -31
  90. package/src/features/typography/utils/headingThemeRecipeMeta.ts +2 -19
  91. package/src/features/typography/utils/resolveHeadingRecipe.ts +12 -88
  92. package/src/features/typography/utils/resolveHeadingThemeRecipe.ts +3 -39
  93. package/src/features/typography/utils/resolveTextStyle.ts +10 -98
  94. package/src/features/typography/utils/resolveTextThemeRecipe.ts +3 -39
  95. package/src/features/typography/utils/resolveTypographyStyleTokens.ts +113 -0
  96. package/src/features/typography/utils/resolveTypographyThemeRecipeFields.ts +27 -0
  97. package/src/features/typography/utils/textThemeRecipeMeta.ts +2 -19
  98. package/src/features/typography/utils/typographyThemeRecipeFields.ts +23 -0
  99. package/src/features/uploader/adapters/inbound/Uploader.tsx +1 -20
  100. package/src/features/uploader/application/use-cases/validateUploadAsset.test.ts +2 -2
  101. package/src/features/uploader/application/use-cases/validateUploadAsset.ts +2 -20
  102. package/src/features/web-component-artifact/composition/createWebDesiredStateWithNodeAsync.ts +3 -6
  103. package/src/features/web-component-artifact/composition/readWebComponentPackageMetadataAsync.ts +18 -0
  104. package/src/features/web-component-artifact/composition/synchronizeDeclaredWebComponentsWithNodeAsync.ts +4 -8
  105. package/web-dist/chunks/{Accordion-rqr10gn4.js → Accordion-1495be5z.js} +2 -2
  106. package/web-dist/chunks/{Accordion-m2hcc8g4.js → Accordion-3qphhsb4.js} +1 -1
  107. package/web-dist/chunks/{Accordion-gn8ptzwb.js → Accordion-4x8gdqqs.js} +1 -1
  108. package/web-dist/chunks/{Accordion-9aczb0k2.js → Accordion-58bpmzdj.js} +2 -2
  109. package/web-dist/chunks/{Accordion-2jy53kzk.js → Accordion-69c4pfz2.js} +2 -2
  110. package/web-dist/chunks/{Accordion-rqhh2m5b.js → Accordion-7n93d7fa.js} +1 -1
  111. package/web-dist/chunks/{Accordion-m6mp8aea.js → Accordion-a42brn0p.js} +1 -1
  112. package/web-dist/chunks/{Accordion-g08740h4.js → Accordion-c912kzs0.js} +1 -1
  113. package/web-dist/chunks/{Accordion-tyh8jj9d.js → Accordion-cbbafww1.js} +1 -1
  114. package/web-dist/chunks/{Accordion-11ej93t5.js → Accordion-cjjg81ry.js} +2 -2
  115. package/web-dist/chunks/{Accordion-vkd002gw.js → Accordion-d0bebw9j.js} +3 -3
  116. package/web-dist/chunks/{Accordion-vjcd5kxc.js → Accordion-gntmfcmz.js} +1 -1
  117. package/web-dist/chunks/{Accordion-wqyrrptg.js → Accordion-jyemxzat.js} +1 -1
  118. package/web-dist/chunks/{Accordion-p7d5svfq.js → Accordion-kmwhjw1k.js} +1 -1
  119. package/web-dist/chunks/{Accordion-26prtnm7.js → Accordion-ptxa6trg.js} +1 -1
  120. package/web-dist/chunks/{Accordion-4yq92mxp.js → Accordion-ve81xazy.js} +1 -1
  121. package/web-dist/chunks/Accordion-vnb3vntm.js +79 -0
  122. package/web-dist/chunks/{Accordion-9rnsg9pk.js → Accordion-vqx3exsq.js} +129 -243
  123. package/web-dist/chunks/{Accordion-1hbt9k69.js → Accordion-w95t2pr3.js} +1 -1
  124. package/web-dist/chunks/{Accordion-g2aqhct0.js → Accordion-z5dpzw3g.js} +2 -2
  125. package/web-dist/chunks/{Accordion-a4pz3vjj.js → Accordion-zf1g5422.js} +1 -1
  126. package/web-dist/components/accordion/Accordion.js +2 -2
  127. package/web-dist/components/accordion-item/AccordionItem.js +2 -2
  128. package/web-dist/components/app-bar/AppBar.js +2 -2
  129. package/web-dist/components/app-header/AppHeader.js +2 -2
  130. package/web-dist/components/auth-screen/AuthScreen.js +4 -4
  131. package/web-dist/components/avatar/Avatar.js +2 -2
  132. package/web-dist/components/avatar-group/AvatarGroup.js +2 -2
  133. package/web-dist/components/barcode-scanner-view/BarcodeScannerView.js +4 -4
  134. package/web-dist/components/breadcrumbs/Breadcrumbs.js +1 -1
  135. package/web-dist/components/camera-permission-view/CameraPermissionView.js +4 -4
  136. package/web-dist/components/card/Card.js +3 -3
  137. package/web-dist/components/chat-list-item/ChatListItem.js +3 -3
  138. package/web-dist/components/checkbox/Checkbox.js +2 -2
  139. package/web-dist/components/checkbox-group/CheckboxGroup.js +2 -2
  140. package/web-dist/components/chip/Chip.js +2 -2
  141. package/web-dist/components/chip-group/ChipGroup.js +2 -2
  142. package/web-dist/components/collection-editor/CollectionEditor.js +3 -3
  143. package/web-dist/components/content-rail/ContentRail.js +1 -1
  144. package/web-dist/components/data-table/DataTable.js +7 -7
  145. package/web-dist/components/date-picker/DatePicker.js +12 -49
  146. package/web-dist/components/dialog/Dialog.js +2 -2
  147. package/web-dist/components/empty-state/EmptyState.js +4 -4
  148. package/web-dist/components/explorer/Explorer.js +2 -2
  149. package/web-dist/components/field/Field.js +2 -2
  150. package/web-dist/components/file-explorer/FileExplorer.js +2 -2
  151. package/web-dist/components/flat-list/FlatList.js +3 -3
  152. package/web-dist/components/forgot-password-form/ForgotPasswordForm.js +4 -4
  153. package/web-dist/components/form/Form.js +3 -3
  154. package/web-dist/components/form-actions/FormActions.js +3 -3
  155. package/web-dist/components/form-error/FormError.js +3 -3
  156. package/web-dist/components/heading/Heading.js +1 -1
  157. package/web-dist/components/hero/Hero.js +3 -3
  158. package/web-dist/components/list/List.js +3 -3
  159. package/web-dist/components/list-item/ListItem.js +3 -3
  160. package/web-dist/components/list-section/ListSection.js +3 -3
  161. package/web-dist/components/matrix-grid/MatrixGrid.js +5 -17
  162. package/web-dist/components/media-card/MediaCard.js +3 -3
  163. package/web-dist/components/media-explorer/MediaExplorer.js +2 -2
  164. package/web-dist/components/message-bubble/MessageBubble.js +3 -3
  165. package/web-dist/components/metric-card/MetricCard.js +3 -3
  166. package/web-dist/components/missing-element/MissingElement.js +1 -1
  167. package/web-dist/components/o-auth-provider-button/OAuthProviderButton.js +4 -4
  168. package/web-dist/components/o-auth-provider-list/OAuthProviderList.js +4 -4
  169. package/web-dist/components/otp-form/OtpForm.js +4 -4
  170. package/web-dist/components/pagination/Pagination.js +1 -1
  171. package/web-dist/components/palette-item/PaletteItem.js +3 -3
  172. package/web-dist/components/post-card/PostCard.js +3 -3
  173. package/web-dist/components/product-card/ProductCard.js +3 -3
  174. package/web-dist/components/progress/Progress.js +2 -2
  175. package/web-dist/components/progress-ring/ProgressRing.js +2 -2
  176. package/web-dist/components/radio/Radio.js +2 -2
  177. package/web-dist/components/radio-group/RadioGroup.js +2 -2
  178. package/web-dist/components/reader/Reader.js +4 -4
  179. package/web-dist/components/scan-overlay/ScanOverlay.js +4 -4
  180. package/web-dist/components/screen-section/ScreenSection.js +2 -2
  181. package/web-dist/components/section-header/SectionHeader.js +2 -2
  182. package/web-dist/components/section-list/SectionList.js +3 -3
  183. package/web-dist/components/sign-in-form/SignInForm.js +4 -4
  184. package/web-dist/components/sign-up-form/SignUpForm.js +4 -4
  185. package/web-dist/components/skeleton/Skeleton.js +6 -6
  186. package/web-dist/components/skeleton-card/SkeletonCard.js +6 -6
  187. package/web-dist/components/skeleton-list/SkeletonList.js +6 -6
  188. package/web-dist/components/skeleton-text/SkeletonText.js +6 -6
  189. package/web-dist/components/text/Text.js +1 -1
  190. package/web-dist/components/time-picker/TimePicker.js +12 -51
  191. package/web-dist/components/timeline/Timeline.js +1 -1
  192. package/web-dist/components/toolbar/Toolbar.js +3 -3
  193. package/web-dist/components/tree-item/TreeItem.js +3 -3
  194. package/web-dist/components/uploader/Uploader.js +21 -37
  195. package/web-dist/manifest.json +204 -202
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTextStyle.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextStyle.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,GAIlB,MAAM,oBAAoB,CAAC;AAU5B,uFAAuF;AACvF,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,GAAG,KAAK,GACU;IACxB,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC;IACzE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC;IAC9E,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,aAAa,CAClC,KAAK,EACL,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CACvD,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC;QAC/D,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,iBAAiB,CAAC;YAC5B,KAAK;YACL,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,cAAc;YACtB,MAAM;SACP,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QACvC,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,aAAa;QACxB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC;AAqBD,SAAS,0BAA0B,CAAC,UAAsB;IACxD,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB,EAAE,MAAkB;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,KAAK,SAAS,CAAC;QACf;YACE,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,GAMP;IACC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IAErF,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAmB,EACnB,OAAoB,EACpB,UAAsB;IAEtB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO;gBACL,QAAQ,EAAE,0BAA0B,CAAC,UAAU,CAAC;oBAC9C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5B,UAAU,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC5D,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACnC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,QAAQ;aACjB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACnC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,UAAU;gBAClB,aAAa,EAAE,WAAW;gBAC1B,aAAa,EAAE,GAAG;aACnB,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;aAClB,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAmB,EAAE,KAAgB;IACjE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;QACnC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QAChC,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QACjC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QACjC,KAAK,SAAS,CAAC;QACf;YACE,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,QAAsB,EAAE,KAAiB;IACtF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/D,CAAC;IAED,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;QACzC,KAAK,SAAS,CAAC;QACf;YACE,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3C,CAAC;AACH,CAAC","sourcesContent":["import {\n type Breakpoint,\n type FontWeight,\n resolveResponsive,\n type Responsive,\n type RoleSemantics,\n type SurfaceTheme,\n} from '@ankhorage/surface';\nimport type { TextStyle } from 'react-native';\n\nimport type {\n TextAlign,\n TextColor,\n TextEmphasis,\n TextVariant,\n TextWeight,\n} from '../../../types/text';\n/*** Resolves responsive text variants and theme semantics into a native text style. */\nexport function resolveTextStyle({\n theme,\n breakpoint,\n variant,\n color,\n emphasis,\n weight,\n align,\n italic = false,\n}: ResolveTextStyleOptions): TextStyle {\n const resolvedVariant = resolveResponsive(variant, breakpoint) ?? 'body';\n const resolvedEmphasis = resolveResponsive(emphasis, breakpoint) ?? 'default';\n const resolvedColor = resolveResponsive(color, breakpoint);\n const resolvedAlign = resolveResponsive(align, breakpoint);\n const recipe = resolveVariantRecipe(theme, resolvedVariant, breakpoint);\n const resolvedWeight = resolveWeight(\n theme,\n resolveResponsive(weight, breakpoint) ?? recipe.weight,\n );\n\n return {\n color: resolveTextColor(theme, resolvedEmphasis, resolvedColor),\n elevation: 0,\n fontFamily: resolveFontFamily({\n theme,\n variant: resolvedVariant,\n weight: resolvedWeight,\n italic,\n }),\n fontSize: recipe.fontSize,\n fontStyle: italic ? 'italic' : 'normal',\n fontWeight: resolvedWeight,\n letterSpacing: recipe.letterSpacing,\n lineHeight: recipe.lineHeight,\n textAlign: resolvedAlign,\n textTransform: recipe.textTransform,\n };\n}\n\ninterface VariantRecipe {\n fontSize: number;\n lineHeight: number;\n weight: TextWeight;\n textTransform?: TextStyle['textTransform'];\n letterSpacing?: number;\n}\n\ninterface ResolveTextStyleOptions {\n theme: SurfaceTheme;\n breakpoint: Breakpoint;\n variant?: Responsive<TextVariant>;\n color?: Responsive<TextColor>;\n emphasis?: Responsive<TextEmphasis>;\n weight?: Responsive<TextWeight>;\n align?: Responsive<TextAlign>;\n italic?: boolean;\n}\n\nfunction isMediumBreakpointOrLarger(breakpoint: Breakpoint): boolean {\n return breakpoint === 'md' || breakpoint === 'lg' || breakpoint === 'xl';\n}\n\nfunction resolveWeight(theme: SurfaceTheme, weight: TextWeight): FontWeight {\n switch (weight) {\n case 'medium':\n return theme.typography.weights.medium;\n case 'semiBold':\n return theme.typography.weights.semiBold;\n case 'bold':\n return theme.typography.weights.bold;\n case 'regular':\n default:\n return theme.typography.weights.regular;\n }\n}\n\nfunction resolveFontFamily({\n theme,\n variant,\n weight,\n italic,\n}: {\n theme: SurfaceTheme;\n variant: TextVariant;\n weight: FontWeight;\n italic: boolean;\n}): string | undefined {\n if (variant === 'code') {\n return 'monospace';\n }\n\n const fonts = italic ? theme.typography.fonts.italic : theme.typography.fonts.normal;\n\n for (const [fontWeight, fontFamily] of Object.entries(fonts)) {\n if (fontWeight === weight) {\n return fontFamily;\n }\n }\n\n return undefined;\n}\n\nfunction resolveVariantRecipe(\n theme: SurfaceTheme,\n variant: TextVariant,\n breakpoint: Breakpoint,\n): VariantRecipe {\n switch (variant) {\n case 'lead':\n return {\n fontSize: isMediumBreakpointOrLarger(breakpoint)\n ? theme.typography.sizes.l\n : theme.typography.sizes.m,\n lineHeight: isMediumBreakpointOrLarger(breakpoint) ? 28 : 24,\n weight: 'regular',\n };\n case 'bodySmall':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 20,\n weight: 'regular',\n };\n case 'caption':\n return {\n fontSize: theme.typography.sizes.xs,\n lineHeight: 16,\n weight: 'regular',\n };\n case 'label':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 18,\n weight: 'medium',\n };\n case 'eyebrow':\n return {\n fontSize: theme.typography.sizes.xs,\n lineHeight: 16,\n weight: 'semiBold',\n textTransform: 'uppercase',\n letterSpacing: 0.8,\n };\n case 'code':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 20,\n weight: 'regular',\n };\n case 'body':\n default:\n return {\n fontSize: theme.typography.sizes.m,\n lineHeight: 24,\n weight: 'regular',\n };\n }\n}\n\nfunction resolveRoleSemantics(theme: SurfaceTheme, color: TextColor): RoleSemantics {\n switch (color) {\n case 'secondary':\n return theme.semantics.secondary;\n case 'tertiary':\n return theme.semantics.accent;\n case 'quaternary':\n return theme.semantics.highlight;\n case 'neutral':\n return theme.semantics.action.neutral;\n case 'error':\n return theme.semantics.error;\n case 'info':\n return theme.semantics.info;\n case 'danger':\n return theme.semantics.action.danger;\n case 'success':\n return theme.semantics.success;\n case 'warning':\n return theme.semantics.warning;\n case 'primary':\n default:\n return theme.semantics.action.primary;\n }\n}\n\nfunction resolveTextColor(theme: SurfaceTheme, emphasis: TextEmphasis, color?: TextColor): string {\n if (color) {\n const role = resolveRoleSemantics(theme, color);\n return emphasis === 'inverse' ? role.onSolidText : role.base;\n }\n\n switch (emphasis) {\n case 'muted':\n return theme.semantics.content.muted;\n case 'subtle':\n return theme.semantics.content.subtle;\n case 'inverse':\n return theme.semantics.content.inverse;\n case 'default':\n default:\n return theme.semantics.content.default;\n }\n}\n"]}
1
+ {"version":3,"file":"resolveTextStyle.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextStyle.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Breakpoint,\n resolveResponsive,\n type Responsive,\n type SurfaceTheme,\n} from '@ankhorage/surface';\nimport type { TextStyle } from 'react-native';\n\nimport type {\n TextAlign,\n TextColor,\n TextEmphasis,\n TextVariant,\n TextWeight,\n} from '../../../types/text';\nimport { resolveTypographyStyleTokens } from './resolveTypographyStyleTokens';\n/*** Resolves responsive text variants and theme semantics into a native text style. */\nexport function resolveTextStyle({\n theme,\n breakpoint,\n variant,\n color,\n emphasis,\n weight,\n align,\n italic = false,\n}: ResolveTextStyleOptions): TextStyle {\n const resolvedVariant = resolveResponsive(variant, breakpoint) ?? 'body';\n const resolvedEmphasis = resolveResponsive(emphasis, breakpoint) ?? 'default';\n const resolvedColor = resolveResponsive(color, breakpoint);\n const resolvedAlign = resolveResponsive(align, breakpoint);\n const recipe = resolveVariantRecipe(theme, resolvedVariant, breakpoint);\n const tokens = resolveTypographyStyleTokens({\n theme,\n color: resolvedColor,\n emphasis: resolvedEmphasis,\n weight: resolveResponsive(weight, breakpoint) ?? recipe.weight,\n italic,\n });\n\n return {\n color: tokens.color,\n elevation: 0,\n fontFamily: resolvedVariant === 'code' ? 'monospace' : tokens.fontFamily,\n fontSize: recipe.fontSize,\n fontStyle: italic ? 'italic' : 'normal',\n fontWeight: tokens.fontWeight,\n letterSpacing: recipe.letterSpacing,\n lineHeight: recipe.lineHeight,\n textAlign: resolvedAlign,\n textTransform: recipe.textTransform,\n };\n}\n\ninterface VariantRecipe {\n fontSize: number;\n lineHeight: number;\n weight: TextWeight;\n textTransform?: TextStyle['textTransform'];\n letterSpacing?: number;\n}\n\ninterface ResolveTextStyleOptions {\n theme: SurfaceTheme;\n breakpoint: Breakpoint;\n variant?: Responsive<TextVariant>;\n color?: Responsive<TextColor>;\n emphasis?: Responsive<TextEmphasis>;\n weight?: Responsive<TextWeight>;\n align?: Responsive<TextAlign>;\n italic?: boolean;\n}\n\nfunction isMediumBreakpointOrLarger(breakpoint: Breakpoint): boolean {\n return breakpoint === 'md' || breakpoint === 'lg' || breakpoint === 'xl';\n}\n\nfunction resolveVariantRecipe(\n theme: SurfaceTheme,\n variant: TextVariant,\n breakpoint: Breakpoint,\n): VariantRecipe {\n switch (variant) {\n case 'lead':\n return {\n fontSize: isMediumBreakpointOrLarger(breakpoint)\n ? theme.typography.sizes.l\n : theme.typography.sizes.m,\n lineHeight: isMediumBreakpointOrLarger(breakpoint) ? 28 : 24,\n weight: 'regular',\n };\n case 'bodySmall':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 20,\n weight: 'regular',\n };\n case 'caption':\n return {\n fontSize: theme.typography.sizes.xs,\n lineHeight: 16,\n weight: 'regular',\n };\n case 'label':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 18,\n weight: 'medium',\n };\n case 'eyebrow':\n return {\n fontSize: theme.typography.sizes.xs,\n lineHeight: 16,\n weight: 'semiBold',\n textTransform: 'uppercase',\n letterSpacing: 0.8,\n };\n case 'code':\n return {\n fontSize: theme.typography.sizes.s,\n lineHeight: 20,\n weight: 'regular',\n };\n case 'body':\n default:\n return {\n fontSize: theme.typography.sizes.m,\n lineHeight: 24,\n weight: 'regular',\n };\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import type { ThemeRecipeOverrideValue } from '@ankhorage/contracts';
2
- import type { TextAlign, TextVariant, TextWeight } from '../../../types/text';
2
+ import type { TextVariant } from '../../../types/text';
3
3
  export declare function resolveTextThemeRecipe(fields: Readonly<Record<string, ThemeRecipeOverrideValue>>): {
4
- variant: TextVariant | undefined;
5
4
  color: "primary" | "secondary" | "tertiary" | "quaternary" | "neutral" | "error" | "success" | "warning" | "info" | "danger" | undefined;
6
5
  emphasis: "default" | "muted" | "subtle" | "inverse" | undefined;
7
- align: TextAlign | undefined;
8
- weight: TextWeight | undefined;
6
+ align: "justify" | "left" | "right" | "center" | "auto" | undefined;
7
+ weight: "bold" | "regular" | "medium" | "semiBold" | undefined;
9
8
  italic: boolean | undefined;
9
+ variant: TextVariant | undefined;
10
10
  };
11
11
  //# sourceMappingURL=resolveTextThemeRecipe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTextThemeRecipe.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextThemeRecipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EACV,SAAS,EAGT,WAAW,EACX,UAAU,EACX,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;;;;;;;EAShG"}
1
+ {"version":3,"file":"resolveTextThemeRecipe.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextThemeRecipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;;;;;;;EAKhG"}
@@ -1,11 +1,8 @@
1
+ import { resolveTypographyThemeRecipeFields } from './resolveTypographyThemeRecipeFields';
1
2
  export function resolveTextThemeRecipe(fields) {
2
3
  return {
3
4
  variant: readVariant(fields.variant),
4
- color: readColor(fields.color),
5
- emphasis: readEmphasis(fields.emphasis),
6
- align: readAlign(fields.align),
7
- weight: readWeight(fields.weight),
8
- italic: typeof fields.italic === 'boolean' ? fields.italic : undefined,
5
+ ...resolveTypographyThemeRecipeFields(fields),
9
6
  };
10
7
  }
11
8
  function readVariant(value) {
@@ -15,32 +12,4 @@ function readVariant(value) {
15
12
  return value;
16
13
  return undefined;
17
14
  }
18
- function readColor(value) {
19
- if (typeof value !== 'string')
20
- return undefined;
21
- if (value === 'primary' || value === 'secondary' || value === 'tertiary')
22
- return value;
23
- if (value === 'quaternary' || value === 'neutral' || value === 'danger')
24
- return value;
25
- if (value === 'success' || value === 'warning' || value === 'error' || value === 'info')
26
- return value;
27
- return undefined;
28
- }
29
- function readEmphasis(value) {
30
- if (value === 'default' || value === 'muted' || value === 'subtle' || value === 'inverse')
31
- return value;
32
- return undefined;
33
- }
34
- function readAlign(value) {
35
- if (value === 'auto' || value === 'left' || value === 'right')
36
- return value;
37
- if (value === 'center' || value === 'justify')
38
- return value;
39
- return undefined;
40
- }
41
- function readWeight(value) {
42
- if (value === 'regular' || value === 'medium' || value === 'semiBold' || value === 'bold')
43
- return value;
44
- return undefined;
45
- }
46
15
  //# sourceMappingURL=resolveTextThemeRecipe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTextThemeRecipe.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextThemeRecipe.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,sBAAsB,CAAC,MAA0D;IAC/F,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9B,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA2C;IAC9D,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;QACtF,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,KAA2C;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACvF,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;QACrF,OAAO,KAAK,CAAC;IACf,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAA2C;IAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS;QACvF,OAAO,KAAK,CAAC;IACf,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,KAA2C;IAC5D,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAA2C;IAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,MAAM;QACvF,OAAO,KAAK,CAAC;IACf,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { ThemeRecipeOverrideValue } from '@ankhorage/contracts';\n\nimport type {\n TextAlign,\n TextColor,\n TextEmphasis,\n TextVariant,\n TextWeight,\n} from '../../../types/text';\n\nexport function resolveTextThemeRecipe(fields: Readonly<Record<string, ThemeRecipeOverrideValue>>) {\n return {\n variant: readVariant(fields.variant),\n color: readColor(fields.color),\n emphasis: readEmphasis(fields.emphasis),\n align: readAlign(fields.align),\n weight: readWeight(fields.weight),\n italic: typeof fields.italic === 'boolean' ? fields.italic : undefined,\n };\n}\n\nfunction readVariant(value: ThemeRecipeOverrideValue | undefined): TextVariant | undefined {\n if (value === 'body' || value === 'lead' || value === 'bodySmall' || value === 'caption')\n return value;\n if (value === 'label' || value === 'eyebrow' || value === 'code') return value;\n return undefined;\n}\n\nfunction readColor(value: ThemeRecipeOverrideValue | undefined): TextColor | undefined {\n if (typeof value !== 'string') return undefined;\n if (value === 'primary' || value === 'secondary' || value === 'tertiary') return value;\n if (value === 'quaternary' || value === 'neutral' || value === 'danger') return value;\n if (value === 'success' || value === 'warning' || value === 'error' || value === 'info')\n return value;\n return undefined;\n}\n\nfunction readEmphasis(value: ThemeRecipeOverrideValue | undefined): TextEmphasis | undefined {\n if (value === 'default' || value === 'muted' || value === 'subtle' || value === 'inverse')\n return value;\n return undefined;\n}\n\nfunction readAlign(value: ThemeRecipeOverrideValue | undefined): TextAlign | undefined {\n if (value === 'auto' || value === 'left' || value === 'right') return value;\n if (value === 'center' || value === 'justify') return value;\n return undefined;\n}\n\nfunction readWeight(value: ThemeRecipeOverrideValue | undefined): TextWeight | undefined {\n if (value === 'regular' || value === 'medium' || value === 'semiBold' || value === 'bold')\n return value;\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"resolveTextThemeRecipe.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTextThemeRecipe.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAE1F,MAAM,UAAU,sBAAsB,CAAC,MAA0D;IAC/F,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,GAAG,kCAAkC,CAAC,MAAM,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA2C;IAC9D,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;QACtF,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/E,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { ThemeRecipeOverrideValue } from '@ankhorage/contracts';\n\nimport type { TextVariant } from '../../../types/text';\nimport { resolveTypographyThemeRecipeFields } from './resolveTypographyThemeRecipeFields';\n\nexport function resolveTextThemeRecipe(fields: Readonly<Record<string, ThemeRecipeOverrideValue>>) {\n return {\n variant: readVariant(fields.variant),\n ...resolveTypographyThemeRecipeFields(fields),\n };\n}\n\nfunction readVariant(value: ThemeRecipeOverrideValue | undefined): TextVariant | undefined {\n if (value === 'body' || value === 'lead' || value === 'bodySmall' || value === 'caption')\n return value;\n if (value === 'label' || value === 'eyebrow' || value === 'code') return value;\n return undefined;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import type { FontWeight, SurfaceTheme } from '@ankhorage/surface';
2
+ import type { ZoraColor, ZoraEmphasis } from '../../../types/theme';
3
+ /*** Resolves the Surface-derived style tokens shared by Heading and Text. */
4
+ export declare function resolveTypographyStyleTokens({ theme, color, emphasis, weight, italic, }: ResolveTypographyStyleTokensInput): ResolveTypographyStyleTokensOutput;
5
+ interface ResolveTypographyStyleTokensInput {
6
+ readonly theme: SurfaceTheme;
7
+ readonly color: TypographyColor | undefined;
8
+ readonly emphasis: TypographyEmphasis;
9
+ readonly weight: TypographyWeight;
10
+ readonly italic: boolean;
11
+ }
12
+ interface ResolveTypographyStyleTokensOutput {
13
+ readonly color: string;
14
+ readonly fontFamily: string | undefined;
15
+ readonly fontWeight: FontWeight;
16
+ }
17
+ type TypographyColor = ZoraColor;
18
+ type TypographyEmphasis = ZoraEmphasis;
19
+ type TypographyWeight = 'regular' | 'medium' | 'semiBold' | 'bold';
20
+ export {};
21
+ //# sourceMappingURL=resolveTypographyStyleTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTypographyStyleTokens.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTypographyStyleTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,iCAAiC,GAAG,kCAAkC,CAaxE;AAED,UAAU,iCAAiC;IACzC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,kCAAkC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED,KAAK,eAAe,GAAG,SAAS,CAAC;AACjC,KAAK,kBAAkB,GAAG,YAAY,CAAC;AACvC,KAAK,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC"}
@@ -0,0 +1,75 @@
1
+ /*** Resolves the Surface-derived style tokens shared by Heading and Text. */
2
+ export function resolveTypographyStyleTokens({ theme, color, emphasis, weight, italic, }) {
3
+ const role = color ? resolveRoleSemantics(theme, color) : undefined;
4
+ const fontWeight = resolveWeight(theme, weight);
5
+ return {
6
+ color: role
7
+ ? emphasis === 'inverse'
8
+ ? role.onSolidText
9
+ : role.base
10
+ : resolveEmphasisColor(theme, emphasis),
11
+ fontFamily: resolveFontFamily(theme, fontWeight, italic),
12
+ fontWeight,
13
+ };
14
+ }
15
+ function resolveRoleSemantics(theme, color) {
16
+ switch (color) {
17
+ case 'secondary':
18
+ return theme.semantics.secondary;
19
+ case 'tertiary':
20
+ return theme.semantics.accent;
21
+ case 'quaternary':
22
+ return theme.semantics.highlight;
23
+ case 'neutral':
24
+ return theme.semantics.action.neutral;
25
+ case 'error':
26
+ return theme.semantics.error;
27
+ case 'info':
28
+ return theme.semantics.info;
29
+ case 'danger':
30
+ return theme.semantics.action.danger;
31
+ case 'success':
32
+ return theme.semantics.success;
33
+ case 'warning':
34
+ return theme.semantics.warning;
35
+ case 'primary':
36
+ default:
37
+ return theme.semantics.action.primary;
38
+ }
39
+ }
40
+ function resolveEmphasisColor(theme, emphasis) {
41
+ switch (emphasis) {
42
+ case 'muted':
43
+ return theme.semantics.content.muted;
44
+ case 'subtle':
45
+ return theme.semantics.content.subtle;
46
+ case 'inverse':
47
+ return theme.semantics.content.inverse;
48
+ case 'default':
49
+ default:
50
+ return theme.semantics.content.default;
51
+ }
52
+ }
53
+ function resolveWeight(theme, weight) {
54
+ switch (weight) {
55
+ case 'medium':
56
+ return theme.typography.weights.medium;
57
+ case 'semiBold':
58
+ return theme.typography.weights.semiBold;
59
+ case 'bold':
60
+ return theme.typography.weights.bold;
61
+ case 'regular':
62
+ default:
63
+ return theme.typography.weights.regular;
64
+ }
65
+ }
66
+ function resolveFontFamily(theme, weight, italic) {
67
+ const fonts = italic ? theme.typography.fonts.italic : theme.typography.fonts.normal;
68
+ for (const [fontWeight, fontFamily] of Object.entries(fonts)) {
69
+ if (fontWeight === weight) {
70
+ return fontFamily;
71
+ }
72
+ }
73
+ return undefined;
74
+ }
75
+ //# sourceMappingURL=resolveTypographyStyleTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTypographyStyleTokens.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTypographyStyleTokens.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FontWeight, RoleSemantics, SurfaceTheme } from '@ankhorage/surface';\n\nimport type { ZoraColor, ZoraEmphasis } from '../../../types/theme';\n\n/*** Resolves the Surface-derived style tokens shared by Heading and Text. */\nexport function resolveTypographyStyleTokens({\n theme,\n color,\n emphasis,\n weight,\n italic,\n}: ResolveTypographyStyleTokensInput): ResolveTypographyStyleTokensOutput {\n const role = color ? resolveRoleSemantics(theme, color) : undefined;\n const fontWeight = resolveWeight(theme, weight);\n\n return {\n color: role\n ? emphasis === 'inverse'\n ? role.onSolidText\n : role.base\n : resolveEmphasisColor(theme, emphasis),\n fontFamily: resolveFontFamily(theme, fontWeight, italic),\n fontWeight,\n };\n}\n\ninterface ResolveTypographyStyleTokensInput {\n readonly theme: SurfaceTheme;\n readonly color: TypographyColor | undefined;\n readonly emphasis: TypographyEmphasis;\n readonly weight: TypographyWeight;\n readonly italic: boolean;\n}\n\ninterface ResolveTypographyStyleTokensOutput {\n readonly color: string;\n readonly fontFamily: string | undefined;\n readonly fontWeight: FontWeight;\n}\n\ntype TypographyColor = ZoraColor;\ntype TypographyEmphasis = ZoraEmphasis;\ntype TypographyWeight = 'regular' | 'medium' | 'semiBold' | 'bold';\n\nfunction resolveRoleSemantics(theme: SurfaceTheme, color: TypographyColor): RoleSemantics {\n switch (color) {\n case 'secondary':\n return theme.semantics.secondary;\n case 'tertiary':\n return theme.semantics.accent;\n case 'quaternary':\n return theme.semantics.highlight;\n case 'neutral':\n return theme.semantics.action.neutral;\n case 'error':\n return theme.semantics.error;\n case 'info':\n return theme.semantics.info;\n case 'danger':\n return theme.semantics.action.danger;\n case 'success':\n return theme.semantics.success;\n case 'warning':\n return theme.semantics.warning;\n case 'primary':\n default:\n return theme.semantics.action.primary;\n }\n}\n\nfunction resolveEmphasisColor(theme: SurfaceTheme, emphasis: TypographyEmphasis): string {\n switch (emphasis) {\n case 'muted':\n return theme.semantics.content.muted;\n case 'subtle':\n return theme.semantics.content.subtle;\n case 'inverse':\n return theme.semantics.content.inverse;\n case 'default':\n default:\n return theme.semantics.content.default;\n }\n}\n\nfunction resolveWeight(theme: SurfaceTheme, weight: TypographyWeight): FontWeight {\n switch (weight) {\n case 'medium':\n return theme.typography.weights.medium;\n case 'semiBold':\n return theme.typography.weights.semiBold;\n case 'bold':\n return theme.typography.weights.bold;\n case 'regular':\n default:\n return theme.typography.weights.regular;\n }\n}\n\nfunction resolveFontFamily(\n theme: SurfaceTheme,\n weight: FontWeight,\n italic: boolean,\n): string | undefined {\n const fonts = italic ? theme.typography.fonts.italic : theme.typography.fonts.normal;\n\n for (const [fontWeight, fontFamily] of Object.entries(fonts)) {\n if (fontWeight === weight) {\n return fontFamily;\n }\n }\n\n return undefined;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { ThemeRecipeOverrideValue } from '@ankhorage/contracts';
2
+ /*** Resolves the common scalar presentation fields in Typography theme recipes. */
3
+ export declare function resolveTypographyThemeRecipeFields(fields: Readonly<Record<string, ThemeRecipeOverrideValue>>): {
4
+ color: "primary" | "secondary" | "tertiary" | "quaternary" | "neutral" | "error" | "success" | "warning" | "info" | "danger" | undefined;
5
+ emphasis: "default" | "muted" | "subtle" | "inverse" | undefined;
6
+ align: "justify" | "left" | "right" | "center" | "auto" | undefined;
7
+ weight: "bold" | "regular" | "medium" | "semiBold" | undefined;
8
+ italic: boolean | undefined;
9
+ };
10
+ //# sourceMappingURL=resolveTypographyThemeRecipeFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTypographyThemeRecipeFields.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTypographyThemeRecipeFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAOrE,mFAAmF;AACnF,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;;;;;;EAS3D"}
@@ -0,0 +1,19 @@
1
+ import { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';
2
+ const ALIGNMENTS = ['auto', 'left', 'right', 'center', 'justify'];
3
+ const WEIGHTS = ['regular', 'medium', 'semiBold', 'bold'];
4
+ /*** Resolves the common scalar presentation fields in Typography theme recipes. */
5
+ export function resolveTypographyThemeRecipeFields(fields) {
6
+ return {
7
+ color: readChoice(fields.color, ZORA_COLORS),
8
+ emphasis: readChoice(fields.emphasis, ZORA_EMPHASES),
9
+ align: readChoice(fields.align, ALIGNMENTS),
10
+ weight: readChoice(fields.weight, WEIGHTS),
11
+ italic: typeof fields.italic === 'boolean' ? fields.italic : undefined,
12
+ };
13
+ }
14
+ function readChoice(value, choices) {
15
+ if (typeof value !== 'string')
16
+ return undefined;
17
+ return choices.find((choice) => choice === value);
18
+ }
19
+ //# sourceMappingURL=resolveTypographyThemeRecipeFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTypographyThemeRecipeFields.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/resolveTypographyThemeRecipeFields.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAC3E,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AAEnE,mFAAmF;AACnF,MAAM,UAAU,kCAAkC,CAChD,MAA0D;IAE1D,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;QAC5C,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;QACpD,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAA2C,EAC3C,OAAqB;IAErB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import type { ThemeRecipeOverrideValue } from '@ankhorage/contracts';\n\nimport { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';\n\nconst ALIGNMENTS = ['auto', 'left', 'right', 'center', 'justify'] as const;\nconst WEIGHTS = ['regular', 'medium', 'semiBold', 'bold'] as const;\n\n/*** Resolves the common scalar presentation fields in Typography theme recipes. */\nexport function resolveTypographyThemeRecipeFields(\n fields: Readonly<Record<string, ThemeRecipeOverrideValue>>,\n) {\n return {\n color: readChoice(fields.color, ZORA_COLORS),\n emphasis: readChoice(fields.emphasis, ZORA_EMPHASES),\n align: readChoice(fields.align, ALIGNMENTS),\n weight: readChoice(fields.weight, WEIGHTS),\n italic: typeof fields.italic === 'boolean' ? fields.italic : undefined,\n };\n}\n\nfunction readChoice<T extends string>(\n value: ThemeRecipeOverrideValue | undefined,\n choices: readonly T[],\n): T | undefined {\n if (typeof value !== 'string') return undefined;\n return choices.find((choice) => choice === value);\n}\n"]}
@@ -3,12 +3,6 @@ export declare const textThemeRecipeMeta: {
3
3
  readonly kind: "component";
4
4
  readonly description: "Maps semantic Text presentation defaults into runtime props.";
5
5
  readonly fields: {
6
- readonly variant: {
7
- readonly type: "choice";
8
- readonly label: "Typography variant";
9
- readonly options: readonly ["body", "lead", "bodySmall", "caption", "label", "eyebrow", "code"];
10
- readonly default: "body";
11
- };
12
6
  readonly color: {
13
7
  readonly type: "choice";
14
8
  readonly label: "Color";
@@ -35,6 +29,12 @@ export declare const textThemeRecipeMeta: {
35
29
  readonly label: "Italic";
36
30
  readonly default: false;
37
31
  };
32
+ readonly variant: {
33
+ readonly type: "choice";
34
+ readonly label: "Typography variant";
35
+ readonly options: readonly ["body", "lead", "bodySmall", "caption", "label", "eyebrow", "code"];
36
+ readonly default: "body";
37
+ };
38
38
  };
39
39
  };
40
40
  //# sourceMappingURL=textThemeRecipeMeta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textThemeRecipeMeta.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/textThemeRecipeMeta.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BQ,CAAC"}
1
+ {"version":3,"file":"textThemeRecipeMeta.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/textThemeRecipeMeta.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaQ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';
1
+ import { typographyThemeRecipeFields } from './typographyThemeRecipeFields';
2
2
  export const textThemeRecipeMeta = {
3
3
  name: 'Text',
4
4
  kind: 'component',
@@ -10,24 +10,7 @@ export const textThemeRecipeMeta = {
10
10
  options: ['body', 'lead', 'bodySmall', 'caption', 'label', 'eyebrow', 'code'],
11
11
  default: 'body',
12
12
  },
13
- color: { type: 'choice', label: 'Color', options: ZORA_COLORS },
14
- emphasis: {
15
- type: 'choice',
16
- label: 'Emphasis',
17
- options: ZORA_EMPHASES,
18
- default: 'default',
19
- },
20
- align: {
21
- type: 'choice',
22
- label: 'Align',
23
- options: ['auto', 'left', 'right', 'center', 'justify'],
24
- },
25
- weight: {
26
- type: 'choice',
27
- label: 'Weight',
28
- options: ['regular', 'medium', 'semiBold', 'bold'],
29
- },
30
- italic: { type: 'boolean', label: 'Italic', default: false },
13
+ ...typographyThemeRecipeFields,
31
14
  },
32
15
  };
33
16
  //# sourceMappingURL=textThemeRecipeMeta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textThemeRecipeMeta.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/textThemeRecipeMeta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,8DAA8D;IAC3E,MAAM,EAAE;QACN,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YAC7E,OAAO,EAAE,MAAM;SAChB;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;QAC/D,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,SAAS;SACnB;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;SACxD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;SACnD;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;KAC7D;CACqC,CAAC","sourcesContent":["import type { ZoraThemeRecipeMeta } from '../../../types/theme-recipe';\nimport { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';\n\nexport const textThemeRecipeMeta = {\n name: 'Text',\n kind: 'component',\n description: 'Maps semantic Text presentation defaults into runtime props.',\n fields: {\n variant: {\n type: 'choice',\n label: 'Typography variant',\n options: ['body', 'lead', 'bodySmall', 'caption', 'label', 'eyebrow', 'code'],\n default: 'body',\n },\n color: { type: 'choice', label: 'Color', options: ZORA_COLORS },\n emphasis: {\n type: 'choice',\n label: 'Emphasis',\n options: ZORA_EMPHASES,\n default: 'default',\n },\n align: {\n type: 'choice',\n label: 'Align',\n options: ['auto', 'left', 'right', 'center', 'justify'],\n },\n weight: {\n type: 'choice',\n label: 'Weight',\n options: ['regular', 'medium', 'semiBold', 'bold'],\n },\n italic: { type: 'boolean', label: 'Italic', default: false },\n },\n} as const satisfies ZoraThemeRecipeMeta;\n"]}
1
+ {"version":3,"file":"textThemeRecipeMeta.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/textThemeRecipeMeta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,8DAA8D;IAC3E,MAAM,EAAE;QACN,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;YAC7E,OAAO,EAAE,MAAM;SAChB;QACD,GAAG,2BAA2B;KAC/B;CACqC,CAAC","sourcesContent":["import type { ZoraThemeRecipeMeta } from '../../../types/theme-recipe';\nimport { typographyThemeRecipeFields } from './typographyThemeRecipeFields';\n\nexport const textThemeRecipeMeta = {\n name: 'Text',\n kind: 'component',\n description: 'Maps semantic Text presentation defaults into runtime props.',\n fields: {\n variant: {\n type: 'choice',\n label: 'Typography variant',\n options: ['body', 'lead', 'bodySmall', 'caption', 'label', 'eyebrow', 'code'],\n default: 'body',\n },\n ...typographyThemeRecipeFields,\n },\n} as const satisfies ZoraThemeRecipeMeta;\n"]}
@@ -0,0 +1,30 @@
1
+ /*** Defines the common presentation fields used by Typography theme recipes. */
2
+ export declare const typographyThemeRecipeFields: {
3
+ readonly color: {
4
+ readonly type: "choice";
5
+ readonly label: "Color";
6
+ readonly options: readonly ["primary", "secondary", "tertiary", "quaternary", "neutral", "success", "warning", "error", "info", "danger"];
7
+ };
8
+ readonly emphasis: {
9
+ readonly type: "choice";
10
+ readonly label: "Emphasis";
11
+ readonly options: readonly ["default", "muted", "subtle", "inverse"];
12
+ readonly default: "default";
13
+ };
14
+ readonly align: {
15
+ readonly type: "choice";
16
+ readonly label: "Align";
17
+ readonly options: readonly ["auto", "left", "right", "center", "justify"];
18
+ };
19
+ readonly weight: {
20
+ readonly type: "choice";
21
+ readonly label: "Weight";
22
+ readonly options: readonly ["regular", "medium", "semiBold", "bold"];
23
+ };
24
+ readonly italic: {
25
+ readonly type: "boolean";
26
+ readonly label: "Italic";
27
+ readonly default: false;
28
+ };
29
+ };
30
+ //# sourceMappingURL=typographyThemeRecipeFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typographyThemeRecipeFields.d.ts","sourceRoot":"","sources":["../../../../src/features/typography/utils/typographyThemeRecipeFields.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmB9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';
2
+ /*** Defines the common presentation fields used by Typography theme recipes. */
3
+ export const typographyThemeRecipeFields = {
4
+ color: { type: 'choice', label: 'Color', options: ZORA_COLORS },
5
+ emphasis: {
6
+ type: 'choice',
7
+ label: 'Emphasis',
8
+ options: ZORA_EMPHASES,
9
+ default: 'default',
10
+ },
11
+ align: {
12
+ type: 'choice',
13
+ label: 'Align',
14
+ options: ['auto', 'left', 'right', 'center', 'justify'],
15
+ },
16
+ weight: {
17
+ type: 'choice',
18
+ label: 'Weight',
19
+ options: ['regular', 'medium', 'semiBold', 'bold'],
20
+ },
21
+ italic: { type: 'boolean', label: 'Italic', default: false },
22
+ };
23
+ //# sourceMappingURL=typographyThemeRecipeFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typographyThemeRecipeFields.js","sourceRoot":"","sources":["../../../../src/features/typography/utils/typographyThemeRecipeFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,gFAAgF;AAChF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;IAC/D,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,SAAS;KACnB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;KACxD;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;KACnD;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;CACpD,CAAC","sourcesContent":["import { ZORA_COLORS, ZORA_EMPHASES } from '../../theme/colorModel';\n\n/*** Defines the common presentation fields used by Typography theme recipes. */\nexport const typographyThemeRecipeFields = {\n color: { type: 'choice', label: 'Color', options: ZORA_COLORS },\n emphasis: {\n type: 'choice',\n label: 'Emphasis',\n options: ZORA_EMPHASES,\n default: 'default',\n },\n align: {\n type: 'choice',\n label: 'Align',\n options: ['auto', 'left', 'right', 'center', 'justify'],\n },\n weight: {\n type: 'choice',\n label: 'Weight',\n options: ['regular', 'medium', 'semiBold', 'bold'],\n },\n italic: { type: 'boolean', label: 'Italic', default: false },\n} as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../../../../src/features/uploader/adapters/inbound/Uploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAe,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAcvF,gFAAgF;AAChF,eAAO,MAAM,QAAQ,qDAAoC,CAAC"}
1
+ {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../../../../src/features/uploader/adapters/inbound/Uploader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAe,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAcvF,gFAAgF;AAChF,eAAO,MAAM,QAAQ,qDAAoC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { formatBytes } from '@ankhorage/utility/number';
1
2
  import React from 'react';
2
3
  import { Button } from '../../../button/public';
3
4
  import { Dialog } from '../../../dialog/public';
@@ -304,20 +305,4 @@ function formatUnknownError(error) {
304
305
  }
305
306
  return 'Something went wrong.';
306
307
  }
307
- /*** Formats an upload byte limit for concise helper text. */
308
- function formatBytes(value) {
309
- if (!Number.isFinite(value) || value <= 0) {
310
- return '0 B';
311
- }
312
- const units = ['B', 'KB', 'MB', 'GB'];
313
- let size = value;
314
- let unitIndex = 0;
315
- while (size >= 1024 && unitIndex < units.length - 1) {
316
- size /= 1024;
317
- unitIndex += 1;
318
- }
319
- const unit = units.at(unitIndex) ?? 'B';
320
- const rounded = unitIndex === 0 ? Math.round(size) : Math.round(size * 10) / 10;
321
- return `${rounded} ${unit}`;
322
- }
323
308
  //# sourceMappingURL=Uploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Uploader.js","sourceRoot":"","sources":["../../../../../src/features/uploader/adapters/inbound/Uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { UploadAsset, UploaderProps, UploadType } from '../../../../types/upload';\nimport { Button } from '../../../button/public';\nimport { Dialog } from '../../../dialog/public';\nimport { Explorer } from '../../../explorer/public';\nimport { Field } from '../../../form/public';\nimport { Icon } from '../../../icon/public';\nimport { Image } from '../../../image/public';\nimport { View } from '../../../layout/public';\nimport { Progress } from '../../../progress/public';\nimport { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope';\nimport { Text } from '../../../typography/public';\nimport { validateUploadAsset } from '../../application/use-cases/validateUploadAsset';\nimport { createUploadPicker } from '../../composition/createUploadPicker';\n\n/*** Picks, validates, uploads, previews, and removes one generic file asset. */\nexport const Uploader = withZoraThemeScope(UploaderInner);\n\n/*** Owns the interactive state for the generic uploader inbound adapter. */\nfunction UploaderInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n value = null,\n onChange,\n onValueChange,\n onUploadRequest,\n onRemoveRequest,\n onValidationError,\n uploadState = 'idle',\n uploadProgress,\n label = 'File',\n description,\n helperText,\n errorText,\n type = 'file',\n accept,\n maxSizeBytes,\n required,\n disabled = false,\n readOnly = false,\n validatePicked,\n explorerItems,\n onUpload,\n onRemove,\n aspectRatio = 1,\n interactionPolicy,\n}: UploaderProps) {\n const passive = interactionPolicy === 'passive';\n const picker = React.useMemo(() => createUploadPicker(), []);\n const [internalError, setInternalError] = React.useState<string | undefined>();\n const [internalUploading, setUploading] = React.useState(false);\n const [internalRemoving, setRemoving] = React.useState(false);\n const uploading = internalUploading || uploadState === 'uploading';\n const removing = internalRemoving || uploadState === 'removing';\n const [progress, setProgress] = React.useState<number | null>(null);\n const [previewOpen, setPreviewOpen] = React.useState(false);\n const [explorerOpen, setExplorerOpen] = React.useState(false);\n const mountedRef = React.useRef<boolean | null>(null);\n const resolvedAccept = resolveUploadAccept(type, accept);\n const actionsDisabled = disabled || readOnly;\n const effectiveError = errorText ?? internalError;\n const notifyValue = React.useCallback(\n (next: UploadAsset | null) => {\n onChange?.(next);\n onValueChange?.(next);\n },\n [onChange, onValueChange],\n );\n\n React.useEffect(() => {\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const isMounted = React.useCallback(() => mountedRef.current === true, []);\n\n const setProgressSafe = React.useCallback(\n (next: number | null) => {\n if (!isMounted()) {\n return;\n }\n\n setProgress(clampProgress(next));\n },\n [isMounted],\n );\n\n const acceptPicked = React.useCallback(\n async (picked: UploadAsset | null) => {\n if (!picked || !isMounted() || passive || actionsDisabled || uploading || removing) return;\n setInternalError(undefined);\n const validationError = validateUploadAsset({\n accept: resolvedAccept,\n asset: picked,\n maxSizeBytes,\n validate: validatePicked,\n });\n if (validationError) {\n setInternalError(validationError);\n onValidationError?.({ message: validationError });\n return;\n }\n notifyValue(picked);\n onUploadRequest?.({ asset: picked });\n if (!onUpload) return;\n\n setUploading(true);\n setProgressSafe(0);\n try {\n const uploaded = await onUpload(picked, { setProgress: setProgressSafe });\n if (!isMounted()) return;\n notifyValue(uploaded);\n setUploading(false);\n setProgress(null);\n } catch (error) {\n if (!isMounted()) return;\n setInternalError(formatUnknownError(error));\n setUploading(false);\n setProgress(null);\n }\n },\n [\n actionsDisabled,\n isMounted,\n maxSizeBytes,\n notifyValue,\n onUpload,\n onUploadRequest,\n onValidationError,\n passive,\n removing,\n resolvedAccept,\n setProgressSafe,\n uploading,\n validatePicked,\n ],\n );\n\n const handlePick = React.useCallback(async () => {\n if (passive || actionsDisabled || uploading || removing) return;\n if (explorerItems !== undefined) {\n setExplorerOpen(true);\n return;\n }\n setInternalError(undefined);\n try {\n await acceptPicked(await picker.pickAsync({ accept: resolvedAccept, type }));\n } catch (error) {\n if (isMounted()) setInternalError(formatUnknownError(error));\n }\n }, [\n acceptPicked,\n actionsDisabled,\n explorerItems,\n isMounted,\n passive,\n picker,\n removing,\n resolvedAccept,\n type,\n uploading,\n ]);\n\n const handleRemove = React.useCallback(async () => {\n if (passive || actionsDisabled || uploading || removing || !value) {\n return;\n }\n\n setInternalError(undefined);\n if (onRemoveRequest) {\n onRemoveRequest({ asset: value });\n return;\n }\n if (!onRemove) {\n notifyValue(null);\n return;\n }\n\n setRemoving(true);\n try {\n await onRemove(value);\n if (isMounted()) {\n notifyValue(null);\n setRemoving(false);\n }\n } catch (error) {\n if (isMounted()) {\n setInternalError(formatUnknownError(error));\n setRemoving(false);\n }\n }\n }, [\n actionsDisabled,\n isMounted,\n notifyValue,\n onRemove,\n onRemoveRequest,\n passive,\n removing,\n uploading,\n value,\n ]);\n\n const canPreviewImage = type === 'image' && resolveRenderableAssetUrl(value) !== null;\n\n return (\n <>\n <Field\n description={description}\n disabled={disabled}\n errorText={effectiveError}\n helperText={helperText}\n interactionPolicy={interactionPolicy}\n invalid={Boolean(effectiveError)}\n label={label}\n readOnly={readOnly}\n required={required}\n testID={testID}\n >\n <View gap=\"m\">\n <UploadPresentation asset={value} aspectRatio={aspectRatio} type={type} />\n\n {resolvedAccept || maxSizeBytes ? (\n <View gap=\"xs\">\n {resolvedAccept ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n Accepted: {resolvedAccept}\n </Text>\n ) : null}\n {maxSizeBytes ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n Max size: {formatBytes(maxSizeBytes)}\n </Text>\n ) : null}\n </View>\n ) : null}\n\n {uploading ? (\n <View gap=\"xs\">\n <Text emphasis=\"muted\" variant=\"caption\">\n Uploading…\n </Text>\n {uploadProgress !== undefined || progress !== null ? (\n <Progress max={1} value={clampProgress(uploadProgress ?? progress) ?? 0} />\n ) : null}\n </View>\n ) : null}\n\n <View direction={{ base: 'column', md: 'row' }} gap=\"s\">\n <Button\n disabled={actionsDisabled || uploading || removing}\n interactionPolicy={interactionPolicy}\n onPress={() => {\n void handlePick();\n }}\n >\n {value ? 'Replace file' : 'Select file'}\n </Button>\n\n {value ? (\n <Button\n color=\"danger\"\n disabled={actionsDisabled || uploading || removing}\n interactionPolicy={interactionPolicy}\n loading={removing}\n variant=\"outline\"\n onPress={() => {\n void handleRemove();\n }}\n >\n Remove\n </Button>\n ) : null}\n\n {canPreviewImage ? (\n <Button\n color=\"neutral\"\n interactionPolicy={interactionPolicy}\n variant=\"soft\"\n onPress={() => setPreviewOpen(true)}\n >\n Preview\n </Button>\n ) : null}\n </View>\n </View>\n </Field>\n\n {explorerItems !== undefined ? (\n <Dialog\n closeOnBackdrop\n interactionPolicy={interactionPolicy}\n onDismiss={() => setExplorerOpen(false)}\n title=\"Select from collection\"\n visible={explorerOpen}\n >\n <Explorer\n items={explorerItems}\n height={360}\n interactionPolicy={interactionPolicy}\n onActivate={({ id }) => {\n const chosen = explorerItems.find((item) => item.id === id)?.uploadAsset;\n setExplorerOpen(false);\n if (chosen) {\n void acceptPicked(chosen).catch((error: unknown) => {\n if (isMounted()) setInternalError(formatUnknownError(error));\n });\n }\n }}\n />\n </Dialog>\n ) : null}\n\n {canPreviewImage ? (\n <Dialog\n closeOnBackdrop\n interactionPolicy={interactionPolicy}\n onDismiss={() => setPreviewOpen(false)}\n title=\"Image preview\"\n visible={previewOpen}\n >\n <View gap=\"m\">\n <Image aspectRatio={aspectRatio} fit=\"contain\" source={value} />\n <View direction=\"row\" justify=\"flex-end\">\n <Button\n color=\"neutral\"\n interactionPolicy={interactionPolicy}\n variant=\"soft\"\n onPress={() => setPreviewOpen(false)}\n >\n Close\n </Button>\n </View>\n </View>\n </Dialog>\n ) : null}\n </>\n );\n}\n\n/*** Renders image previews or generic file metadata without exposing picker-specific assets. */\nfunction UploadPresentation({\n asset,\n aspectRatio,\n type,\n}: {\n asset: UploadAsset | null;\n aspectRatio: number;\n type: UploadType;\n}) {\n if (type === 'image') {\n return <Image aspectRatio={aspectRatio} source={asset} />;\n }\n\n return (\n <View borderWidth={1} p=\"m\" radius=\"m\">\n <View direction=\"row\" gap=\"s\">\n <Icon name={resolveUploadIcon(type)} size={22} />\n <View gap=\"xs\">\n <Text variant=\"label\" weight=\"semiBold\">\n {asset?.fileName ?? 'No file selected'}\n </Text>\n {asset?.contentType ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {asset.contentType}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\n/*** Resolves the native picker default while allowing accept to remain the precise restriction. */\nfunction resolveUploadAccept(type: UploadType, accept: string | undefined): string | undefined {\n if (accept) {\n return accept;\n }\n\n if (type === 'image') {\n return 'image/*';\n }\n\n if (type === 'video') {\n return 'video/*';\n }\n\n return undefined;\n}\n\n/*** Resolves an upload asset URL when it can be rendered directly. */\nfunction resolveRenderableAssetUrl(asset: UploadAsset | null): string | null {\n if (!asset) {\n return null;\n }\n\n switch (asset.kind) {\n case 'local':\n return asset.uri;\n case 'url':\n return asset.url;\n case 'storage':\n return asset.publicUrl ?? null;\n }\n}\n\n/*** Resolves a generic icon for the selected upload mode. */\nfunction resolveUploadIcon(\n type: UploadType,\n): 'attach-outline' | 'document-text-outline' | 'videocam-outline' {\n switch (type) {\n case 'video':\n return 'videocam-outline';\n case 'document':\n return 'document-text-outline';\n case 'file':\n case 'image':\n return 'attach-outline';\n }\n}\n\n/*** Clamps progress callbacks into the normalized 0..1 range. */\nfunction clampProgress(value: number | null): number | null {\n if (value === null || !Number.isFinite(value)) {\n return null;\n }\n\n return Math.max(0, Math.min(1, value));\n}\n\n/*** Converts unknown picker/upload failures into user-facing text. */\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.trim().length > 0) {\n return error;\n }\n\n return 'Something went wrong.';\n}\n\n/*** Formats an upload byte limit for concise helper text. */\nfunction formatBytes(value: number): string {\n if (!Number.isFinite(value) || value <= 0) {\n return '0 B';\n }\n\n const units = ['B', 'KB', 'MB', 'GB'] as const;\n let size = value;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex += 1;\n }\n\n const unit = units.at(unitIndex) ?? 'B';\n const rounded = unitIndex === 0 ? Math.round(size) : Math.round(size * 10) / 10;\n return `${rounded} ${unit}`;\n}\n"]}
1
+ {"version":3,"file":"Uploader.js","sourceRoot":"","sources":["../../../../../src/features/uploader/adapters/inbound/Uploader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { formatBytes } from '@ankhorage/utility/number';\nimport React from 'react';\n\nimport type { UploadAsset, UploaderProps, UploadType } from '../../../../types/upload';\nimport { Button } from '../../../button/public';\nimport { Dialog } from '../../../dialog/public';\nimport { Explorer } from '../../../explorer/public';\nimport { Field } from '../../../form/public';\nimport { Icon } from '../../../icon/public';\nimport { Image } from '../../../image/public';\nimport { View } from '../../../layout/public';\nimport { Progress } from '../../../progress/public';\nimport { withZoraThemeScope } from '../../../theme/adapters/inbound/withZoraThemeScope';\nimport { Text } from '../../../typography/public';\nimport { validateUploadAsset } from '../../application/use-cases/validateUploadAsset';\nimport { createUploadPicker } from '../../composition/createUploadPicker';\n\n/*** Picks, validates, uploads, previews, and removes one generic file asset. */\nexport const Uploader = withZoraThemeScope(UploaderInner);\n\n/*** Owns the interactive state for the generic uploader inbound adapter. */\nfunction UploaderInner({\n themeId: _themeId,\n mode: _mode,\n testID,\n value = null,\n onChange,\n onValueChange,\n onUploadRequest,\n onRemoveRequest,\n onValidationError,\n uploadState = 'idle',\n uploadProgress,\n label = 'File',\n description,\n helperText,\n errorText,\n type = 'file',\n accept,\n maxSizeBytes,\n required,\n disabled = false,\n readOnly = false,\n validatePicked,\n explorerItems,\n onUpload,\n onRemove,\n aspectRatio = 1,\n interactionPolicy,\n}: UploaderProps) {\n const passive = interactionPolicy === 'passive';\n const picker = React.useMemo(() => createUploadPicker(), []);\n const [internalError, setInternalError] = React.useState<string | undefined>();\n const [internalUploading, setUploading] = React.useState(false);\n const [internalRemoving, setRemoving] = React.useState(false);\n const uploading = internalUploading || uploadState === 'uploading';\n const removing = internalRemoving || uploadState === 'removing';\n const [progress, setProgress] = React.useState<number | null>(null);\n const [previewOpen, setPreviewOpen] = React.useState(false);\n const [explorerOpen, setExplorerOpen] = React.useState(false);\n const mountedRef = React.useRef<boolean | null>(null);\n const resolvedAccept = resolveUploadAccept(type, accept);\n const actionsDisabled = disabled || readOnly;\n const effectiveError = errorText ?? internalError;\n const notifyValue = React.useCallback(\n (next: UploadAsset | null) => {\n onChange?.(next);\n onValueChange?.(next);\n },\n [onChange, onValueChange],\n );\n\n React.useEffect(() => {\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const isMounted = React.useCallback(() => mountedRef.current === true, []);\n\n const setProgressSafe = React.useCallback(\n (next: number | null) => {\n if (!isMounted()) {\n return;\n }\n\n setProgress(clampProgress(next));\n },\n [isMounted],\n );\n\n const acceptPicked = React.useCallback(\n async (picked: UploadAsset | null) => {\n if (!picked || !isMounted() || passive || actionsDisabled || uploading || removing) return;\n setInternalError(undefined);\n const validationError = validateUploadAsset({\n accept: resolvedAccept,\n asset: picked,\n maxSizeBytes,\n validate: validatePicked,\n });\n if (validationError) {\n setInternalError(validationError);\n onValidationError?.({ message: validationError });\n return;\n }\n notifyValue(picked);\n onUploadRequest?.({ asset: picked });\n if (!onUpload) return;\n\n setUploading(true);\n setProgressSafe(0);\n try {\n const uploaded = await onUpload(picked, { setProgress: setProgressSafe });\n if (!isMounted()) return;\n notifyValue(uploaded);\n setUploading(false);\n setProgress(null);\n } catch (error) {\n if (!isMounted()) return;\n setInternalError(formatUnknownError(error));\n setUploading(false);\n setProgress(null);\n }\n },\n [\n actionsDisabled,\n isMounted,\n maxSizeBytes,\n notifyValue,\n onUpload,\n onUploadRequest,\n onValidationError,\n passive,\n removing,\n resolvedAccept,\n setProgressSafe,\n uploading,\n validatePicked,\n ],\n );\n\n const handlePick = React.useCallback(async () => {\n if (passive || actionsDisabled || uploading || removing) return;\n if (explorerItems !== undefined) {\n setExplorerOpen(true);\n return;\n }\n setInternalError(undefined);\n try {\n await acceptPicked(await picker.pickAsync({ accept: resolvedAccept, type }));\n } catch (error) {\n if (isMounted()) setInternalError(formatUnknownError(error));\n }\n }, [\n acceptPicked,\n actionsDisabled,\n explorerItems,\n isMounted,\n passive,\n picker,\n removing,\n resolvedAccept,\n type,\n uploading,\n ]);\n\n const handleRemove = React.useCallback(async () => {\n if (passive || actionsDisabled || uploading || removing || !value) {\n return;\n }\n\n setInternalError(undefined);\n if (onRemoveRequest) {\n onRemoveRequest({ asset: value });\n return;\n }\n if (!onRemove) {\n notifyValue(null);\n return;\n }\n\n setRemoving(true);\n try {\n await onRemove(value);\n if (isMounted()) {\n notifyValue(null);\n setRemoving(false);\n }\n } catch (error) {\n if (isMounted()) {\n setInternalError(formatUnknownError(error));\n setRemoving(false);\n }\n }\n }, [\n actionsDisabled,\n isMounted,\n notifyValue,\n onRemove,\n onRemoveRequest,\n passive,\n removing,\n uploading,\n value,\n ]);\n\n const canPreviewImage = type === 'image' && resolveRenderableAssetUrl(value) !== null;\n\n return (\n <>\n <Field\n description={description}\n disabled={disabled}\n errorText={effectiveError}\n helperText={helperText}\n interactionPolicy={interactionPolicy}\n invalid={Boolean(effectiveError)}\n label={label}\n readOnly={readOnly}\n required={required}\n testID={testID}\n >\n <View gap=\"m\">\n <UploadPresentation asset={value} aspectRatio={aspectRatio} type={type} />\n\n {resolvedAccept || maxSizeBytes ? (\n <View gap=\"xs\">\n {resolvedAccept ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n Accepted: {resolvedAccept}\n </Text>\n ) : null}\n {maxSizeBytes ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n Max size: {formatBytes(maxSizeBytes)}\n </Text>\n ) : null}\n </View>\n ) : null}\n\n {uploading ? (\n <View gap=\"xs\">\n <Text emphasis=\"muted\" variant=\"caption\">\n Uploading…\n </Text>\n {uploadProgress !== undefined || progress !== null ? (\n <Progress max={1} value={clampProgress(uploadProgress ?? progress) ?? 0} />\n ) : null}\n </View>\n ) : null}\n\n <View direction={{ base: 'column', md: 'row' }} gap=\"s\">\n <Button\n disabled={actionsDisabled || uploading || removing}\n interactionPolicy={interactionPolicy}\n onPress={() => {\n void handlePick();\n }}\n >\n {value ? 'Replace file' : 'Select file'}\n </Button>\n\n {value ? (\n <Button\n color=\"danger\"\n disabled={actionsDisabled || uploading || removing}\n interactionPolicy={interactionPolicy}\n loading={removing}\n variant=\"outline\"\n onPress={() => {\n void handleRemove();\n }}\n >\n Remove\n </Button>\n ) : null}\n\n {canPreviewImage ? (\n <Button\n color=\"neutral\"\n interactionPolicy={interactionPolicy}\n variant=\"soft\"\n onPress={() => setPreviewOpen(true)}\n >\n Preview\n </Button>\n ) : null}\n </View>\n </View>\n </Field>\n\n {explorerItems !== undefined ? (\n <Dialog\n closeOnBackdrop\n interactionPolicy={interactionPolicy}\n onDismiss={() => setExplorerOpen(false)}\n title=\"Select from collection\"\n visible={explorerOpen}\n >\n <Explorer\n items={explorerItems}\n height={360}\n interactionPolicy={interactionPolicy}\n onActivate={({ id }) => {\n const chosen = explorerItems.find((item) => item.id === id)?.uploadAsset;\n setExplorerOpen(false);\n if (chosen) {\n void acceptPicked(chosen).catch((error: unknown) => {\n if (isMounted()) setInternalError(formatUnknownError(error));\n });\n }\n }}\n />\n </Dialog>\n ) : null}\n\n {canPreviewImage ? (\n <Dialog\n closeOnBackdrop\n interactionPolicy={interactionPolicy}\n onDismiss={() => setPreviewOpen(false)}\n title=\"Image preview\"\n visible={previewOpen}\n >\n <View gap=\"m\">\n <Image aspectRatio={aspectRatio} fit=\"contain\" source={value} />\n <View direction=\"row\" justify=\"flex-end\">\n <Button\n color=\"neutral\"\n interactionPolicy={interactionPolicy}\n variant=\"soft\"\n onPress={() => setPreviewOpen(false)}\n >\n Close\n </Button>\n </View>\n </View>\n </Dialog>\n ) : null}\n </>\n );\n}\n\n/*** Renders image previews or generic file metadata without exposing picker-specific assets. */\nfunction UploadPresentation({\n asset,\n aspectRatio,\n type,\n}: {\n asset: UploadAsset | null;\n aspectRatio: number;\n type: UploadType;\n}) {\n if (type === 'image') {\n return <Image aspectRatio={aspectRatio} source={asset} />;\n }\n\n return (\n <View borderWidth={1} p=\"m\" radius=\"m\">\n <View direction=\"row\" gap=\"s\">\n <Icon name={resolveUploadIcon(type)} size={22} />\n <View gap=\"xs\">\n <Text variant=\"label\" weight=\"semiBold\">\n {asset?.fileName ?? 'No file selected'}\n </Text>\n {asset?.contentType ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {asset.contentType}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\n/*** Resolves the native picker default while allowing accept to remain the precise restriction. */\nfunction resolveUploadAccept(type: UploadType, accept: string | undefined): string | undefined {\n if (accept) {\n return accept;\n }\n\n if (type === 'image') {\n return 'image/*';\n }\n\n if (type === 'video') {\n return 'video/*';\n }\n\n return undefined;\n}\n\n/*** Resolves an upload asset URL when it can be rendered directly. */\nfunction resolveRenderableAssetUrl(asset: UploadAsset | null): string | null {\n if (!asset) {\n return null;\n }\n\n switch (asset.kind) {\n case 'local':\n return asset.uri;\n case 'url':\n return asset.url;\n case 'storage':\n return asset.publicUrl ?? null;\n }\n}\n\n/*** Resolves a generic icon for the selected upload mode. */\nfunction resolveUploadIcon(\n type: UploadType,\n): 'attach-outline' | 'document-text-outline' | 'videocam-outline' {\n switch (type) {\n case 'video':\n return 'videocam-outline';\n case 'document':\n return 'document-text-outline';\n case 'file':\n case 'image':\n return 'attach-outline';\n }\n}\n\n/*** Clamps progress callbacks into the normalized 0..1 range. */\nfunction clampProgress(value: number | null): number | null {\n if (value === null || !Number.isFinite(value)) {\n return null;\n }\n\n return Math.max(0, Math.min(1, value));\n}\n\n/*** Converts unknown picker/upload failures into user-facing text. */\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.trim().length > 0) {\n return error;\n }\n\n return 'Something went wrong.';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validateUploadAsset.d.ts","sourceRoot":"","sources":["../../../../../src/features/uploader/application/use-cases/validateUploadAsset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,MAAM,EACN,YAAY,EACZ,QAAQ,GACT,EAAE,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAiB/C"}
1
+ {"version":3,"file":"validateUploadAsset.d.ts","sourceRoot":"","sources":["../../../../../src/features/uploader/application/use-cases/validateUploadAsset.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,MAAM,EACN,YAAY,EACZ,QAAQ,GACT,EAAE,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAiB/C"}