@oxy.so/bloom 4.32.0 → 4.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/docs/adoption-matrix.mdx +5 -4
  2. package/docs/date-picker.mdx +15 -28
  3. package/docs/locale.mdx +50 -0
  4. package/docs/provider.mdx +11 -0
  5. package/lib/commonjs/activity-feed/ActivityFeed.js +7 -4
  6. package/lib/commonjs/activity-feed/ActivityFeed.js.map +1 -1
  7. package/lib/commonjs/alert-dialog/AlertDialog.js +4 -1
  8. package/lib/commonjs/alert-dialog/AlertDialog.js.map +1 -1
  9. package/lib/commonjs/announcement/Announcement.js +5 -4
  10. package/lib/commonjs/announcement/Announcement.js.map +1 -1
  11. package/lib/commonjs/app-shell/ProOfferCard.js +5 -4
  12. package/lib/commonjs/app-shell/ProOfferCard.js.map +1 -1
  13. package/lib/commonjs/calendar/shared.js +5 -11
  14. package/lib/commonjs/calendar/shared.js.map +1 -1
  15. package/lib/commonjs/chart-cards/medical-parts.js +6 -2
  16. package/lib/commonjs/chart-cards/medical-parts.js.map +1 -1
  17. package/lib/commonjs/chat-composer/ComposerBanner.js +5 -3
  18. package/lib/commonjs/chat-composer/ComposerBanner.js.map +1 -1
  19. package/lib/commonjs/chat-list/ChatSearchField.js +4 -1
  20. package/lib/commonjs/chat-list/ChatSearchField.js.map +1 -1
  21. package/lib/commonjs/composer-panel/ComposerPopover.js +3 -1
  22. package/lib/commonjs/composer-panel/ComposerPopover.js.map +1 -1
  23. package/lib/commonjs/data-table/DataTableRowActions.js +6 -4
  24. package/lib/commonjs/data-table/DataTableRowActions.js.map +1 -1
  25. package/lib/commonjs/data-table/DataTableSearch.js +5 -3
  26. package/lib/commonjs/data-table/DataTableSearch.js.map +1 -1
  27. package/lib/commonjs/date-picker/Calendar.js +11 -2
  28. package/lib/commonjs/date-picker/Calendar.js.map +1 -1
  29. package/lib/commonjs/date-picker/CalendarMonth.js +4 -3
  30. package/lib/commonjs/date-picker/CalendarMonth.js.map +1 -1
  31. package/lib/commonjs/date-picker/DatePicker.js +13 -4
  32. package/lib/commonjs/date-picker/DatePicker.js.map +1 -1
  33. package/lib/commonjs/date-picker/DateRangePicker.js +17 -13
  34. package/lib/commonjs/date-picker/DateRangePicker.js.map +1 -1
  35. package/lib/commonjs/date-picker/MeetingScheduler.js +18 -13
  36. package/lib/commonjs/date-picker/MeetingScheduler.js.map +1 -1
  37. package/lib/commonjs/date-picker/PickerShell.js +5 -5
  38. package/lib/commonjs/date-picker/PickerShell.js.map +1 -1
  39. package/lib/commonjs/date-picker/calendar-grid.js +7 -21
  40. package/lib/commonjs/date-picker/calendar-grid.js.map +1 -1
  41. package/lib/commonjs/date-picker/messages.js +526 -0
  42. package/lib/commonjs/date-picker/messages.js.map +1 -0
  43. package/lib/commonjs/dialog/DialogHeader.js +12 -7
  44. package/lib/commonjs/dialog/DialogHeader.js.map +1 -1
  45. package/lib/commonjs/dialog/SheetShell.js +4 -2
  46. package/lib/commonjs/dialog/SheetShell.js.map +1 -1
  47. package/lib/commonjs/dropdown-menu/DropdownMenu.js +4 -1
  48. package/lib/commonjs/dropdown-menu/DropdownMenu.js.map +1 -1
  49. package/lib/commonjs/dropdown-menu/DropdownMenu.web.js +4 -1
  50. package/lib/commonjs/dropdown-menu/DropdownMenu.web.js.map +1 -1
  51. package/lib/commonjs/floating/FloatingPanel.js +3 -1
  52. package/lib/commonjs/floating/FloatingPanel.js.map +1 -1
  53. package/lib/commonjs/home-search/HomeSearchBar.js +5 -4
  54. package/lib/commonjs/home-search/HomeSearchBar.js.map +1 -1
  55. package/lib/commonjs/home-search/SavedSearchCard.js +7 -5
  56. package/lib/commonjs/home-search/SavedSearchCard.js.map +1 -1
  57. package/lib/commonjs/index.js +1063 -1034
  58. package/lib/commonjs/index.js.map +1 -1
  59. package/lib/commonjs/index.web.js +1063 -1034
  60. package/lib/commonjs/index.web.js.map +1 -1
  61. package/lib/commonjs/listing-card/ListingCard.js +5 -5
  62. package/lib/commonjs/listing-card/ListingCard.js.map +1 -1
  63. package/lib/commonjs/listing-details/ReviewCard.js +7 -5
  64. package/lib/commonjs/listing-details/ReviewCard.js.map +1 -1
  65. package/lib/commonjs/listing-editor/ListingQualityMeter.js +5 -4
  66. package/lib/commonjs/listing-editor/ListingQualityMeter.js.map +1 -1
  67. package/lib/commonjs/locale/common-messages.js +517 -0
  68. package/lib/commonjs/locale/common-messages.js.map +1 -0
  69. package/lib/commonjs/locale/context.js +35 -0
  70. package/lib/commonjs/locale/context.js.map +1 -0
  71. package/lib/commonjs/locale/format-date.js +34 -0
  72. package/lib/commonjs/locale/format-date.js.map +1 -0
  73. package/lib/commonjs/locale/index.js +32 -0
  74. package/lib/commonjs/locale/index.js.map +1 -0
  75. package/lib/commonjs/locale/languages.js +35 -0
  76. package/lib/commonjs/locale/languages.js.map +1 -0
  77. package/lib/commonjs/locale/messages.js +34 -0
  78. package/lib/commonjs/locale/messages.js.map +1 -0
  79. package/lib/commonjs/locale/plural.js +53 -0
  80. package/lib/commonjs/locale/plural.js.map +1 -0
  81. package/lib/commonjs/map-marker/MapListingPreview.js +7 -5
  82. package/lib/commonjs/map-marker/MapListingPreview.js.map +1 -1
  83. package/lib/commonjs/media-card/FriendActivityCard.js +3 -1
  84. package/lib/commonjs/media-card/FriendActivityCard.js.map +1 -1
  85. package/lib/commonjs/media-card/GenreCard.js +3 -1
  86. package/lib/commonjs/media-card/GenreCard.js.map +1 -1
  87. package/lib/commonjs/media-card/MediaCard.js +3 -1
  88. package/lib/commonjs/media-card/MediaCard.js.map +1 -1
  89. package/lib/commonjs/media-card/QuickAccessTile.js +4 -3
  90. package/lib/commonjs/media-card/QuickAccessTile.js.map +1 -1
  91. package/lib/commonjs/media-card/RecapCard.js +4 -3
  92. package/lib/commonjs/media-card/RecapCard.js.map +1 -1
  93. package/lib/commonjs/media-card/parts.js +5 -2
  94. package/lib/commonjs/media-card/parts.js.map +1 -1
  95. package/lib/commonjs/media-header/MediaActionBar.js +5 -4
  96. package/lib/commonjs/media-header/MediaActionBar.js.map +1 -1
  97. package/lib/commonjs/media-header/PopularTracks.js +5 -4
  98. package/lib/commonjs/media-header/PopularTracks.js.map +1 -1
  99. package/lib/commonjs/media-header/parts.js +6 -2
  100. package/lib/commonjs/media-header/parts.js.map +1 -1
  101. package/lib/commonjs/media-shelf/Shelf.js +7 -4
  102. package/lib/commonjs/media-shelf/Shelf.js.map +1 -1
  103. package/lib/commonjs/media-shelf/ShelfSkeleton.js +5 -3
  104. package/lib/commonjs/media-shelf/ShelfSkeleton.js.map +1 -1
  105. package/lib/commonjs/menubar/Menubar.web.js +4 -1
  106. package/lib/commonjs/menubar/Menubar.web.js.map +1 -1
  107. package/lib/commonjs/message-media/FileMessage.js +5 -3
  108. package/lib/commonjs/message-media/FileMessage.js.map +1 -1
  109. package/lib/commonjs/message-media/parts.js +4 -1
  110. package/lib/commonjs/message-media/parts.js.map +1 -1
  111. package/lib/commonjs/music-library/SearchField.js +4 -1
  112. package/lib/commonjs/music-library/SearchField.js.map +1 -1
  113. package/lib/commonjs/overlay/Overlay.js +4 -1
  114. package/lib/commonjs/overlay/Overlay.js.map +1 -1
  115. package/lib/commonjs/page-header/PageHeader.js +5 -4
  116. package/lib/commonjs/page-header/PageHeader.js.map +1 -1
  117. package/lib/commonjs/pagination/Pagination.js +7 -5
  118. package/lib/commonjs/pagination/Pagination.js.map +1 -1
  119. package/lib/commonjs/place-card/PlaceCard.js +5 -5
  120. package/lib/commonjs/place-card/PlaceCard.js.map +1 -1
  121. package/lib/commonjs/place-reviews/PlaceReviewCard.js +7 -5
  122. package/lib/commonjs/place-reviews/PlaceReviewCard.js.map +1 -1
  123. package/lib/commonjs/place-reviews/WriteReviewPrompt.js +5 -3
  124. package/lib/commonjs/place-reviews/WriteReviewPrompt.js.map +1 -1
  125. package/lib/commonjs/provider/BloomProvider.js +18 -13
  126. package/lib/commonjs/provider/BloomProvider.js.map +1 -1
  127. package/lib/commonjs/recent-hires-card/RecentHiresCard.js +7 -5
  128. package/lib/commonjs/recent-hires-card/RecentHiresCard.js.map +1 -1
  129. package/lib/commonjs/settings-modal/SettingsModal.js +3 -1
  130. package/lib/commonjs/settings-modal/SettingsModal.js.map +1 -1
  131. package/lib/commonjs/sidebar/Sidebar.js +5 -4
  132. package/lib/commonjs/sidebar/Sidebar.js.map +1 -1
  133. package/lib/commonjs/stay-filters/AmenityFilter.js +6 -2
  134. package/lib/commonjs/stay-filters/AmenityFilter.js.map +1 -1
  135. package/lib/commonjs/stay-search/GuestPicker.js +5 -3
  136. package/lib/commonjs/stay-search/GuestPicker.js.map +1 -1
  137. package/lib/commonjs/stepper/Stepper.js +4 -1
  138. package/lib/commonjs/stepper/Stepper.js.map +1 -1
  139. package/lib/commonjs/toast/ToastContent.js +3 -1
  140. package/lib/commonjs/toast/ToastContent.js.map +1 -1
  141. package/lib/commonjs/vendor-card/VendorCard.js +3 -2
  142. package/lib/commonjs/vendor-card/VendorCard.js.map +1 -1
  143. package/lib/commonjs/wizard/WizardFooter.js +7 -5
  144. package/lib/commonjs/wizard/WizardFooter.js.map +1 -1
  145. package/lib/module/activity-feed/ActivityFeed.js +8 -3
  146. package/lib/module/activity-feed/ActivityFeed.js.map +1 -1
  147. package/lib/module/alert-dialog/AlertDialog.js +4 -1
  148. package/lib/module/alert-dialog/AlertDialog.js.map +1 -1
  149. package/lib/module/announcement/Announcement.js +6 -3
  150. package/lib/module/announcement/Announcement.js.map +1 -1
  151. package/lib/module/app-shell/ProOfferCard.js +6 -3
  152. package/lib/module/app-shell/ProOfferCard.js.map +1 -1
  153. package/lib/module/calendar/shared.js +5 -11
  154. package/lib/module/calendar/shared.js.map +1 -1
  155. package/lib/module/chart-cards/medical-parts.js +6 -2
  156. package/lib/module/chart-cards/medical-parts.js.map +1 -1
  157. package/lib/module/chat-composer/ComposerBanner.js +6 -2
  158. package/lib/module/chat-composer/ComposerBanner.js.map +1 -1
  159. package/lib/module/chat-list/ChatSearchField.js +6 -3
  160. package/lib/module/chat-list/ChatSearchField.js.map +1 -1
  161. package/lib/module/composer-panel/ComposerPopover.js +3 -1
  162. package/lib/module/composer-panel/ComposerPopover.js.map +1 -1
  163. package/lib/module/data-table/DataTableRowActions.js +7 -3
  164. package/lib/module/data-table/DataTableRowActions.js.map +1 -1
  165. package/lib/module/data-table/DataTableSearch.js +6 -2
  166. package/lib/module/data-table/DataTableSearch.js.map +1 -1
  167. package/lib/module/date-picker/Calendar.js +11 -2
  168. package/lib/module/date-picker/Calendar.js.map +1 -1
  169. package/lib/module/date-picker/CalendarMonth.js +4 -3
  170. package/lib/module/date-picker/CalendarMonth.js.map +1 -1
  171. package/lib/module/date-picker/DatePicker.js +13 -4
  172. package/lib/module/date-picker/DatePicker.js.map +1 -1
  173. package/lib/module/date-picker/DateRangePicker.js +17 -13
  174. package/lib/module/date-picker/DateRangePicker.js.map +1 -1
  175. package/lib/module/date-picker/MeetingScheduler.js +18 -13
  176. package/lib/module/date-picker/MeetingScheduler.js.map +1 -1
  177. package/lib/module/date-picker/PickerShell.js +6 -4
  178. package/lib/module/date-picker/PickerShell.js.map +1 -1
  179. package/lib/module/date-picker/calendar-grid.js +7 -21
  180. package/lib/module/date-picker/calendar-grid.js.map +1 -1
  181. package/lib/module/date-picker/messages.js +523 -0
  182. package/lib/module/date-picker/messages.js.map +1 -0
  183. package/lib/module/dialog/DialogHeader.js +12 -7
  184. package/lib/module/dialog/DialogHeader.js.map +1 -1
  185. package/lib/module/dialog/SheetShell.js +4 -2
  186. package/lib/module/dialog/SheetShell.js.map +1 -1
  187. package/lib/module/dropdown-menu/DropdownMenu.js +4 -1
  188. package/lib/module/dropdown-menu/DropdownMenu.js.map +1 -1
  189. package/lib/module/dropdown-menu/DropdownMenu.web.js +4 -1
  190. package/lib/module/dropdown-menu/DropdownMenu.web.js.map +1 -1
  191. package/lib/module/floating/FloatingPanel.js +3 -1
  192. package/lib/module/floating/FloatingPanel.js.map +1 -1
  193. package/lib/module/home-search/HomeSearchBar.js +6 -3
  194. package/lib/module/home-search/HomeSearchBar.js.map +1 -1
  195. package/lib/module/home-search/SavedSearchCard.js +8 -4
  196. package/lib/module/home-search/SavedSearchCard.js.map +1 -1
  197. package/lib/module/index.js +1 -0
  198. package/lib/module/index.js.map +1 -1
  199. package/lib/module/index.web.js +1 -0
  200. package/lib/module/index.web.js.map +1 -1
  201. package/lib/module/listing-card/ListingCard.js +6 -4
  202. package/lib/module/listing-card/ListingCard.js.map +1 -1
  203. package/lib/module/listing-details/ReviewCard.js +8 -4
  204. package/lib/module/listing-details/ReviewCard.js.map +1 -1
  205. package/lib/module/listing-editor/ListingQualityMeter.js +6 -3
  206. package/lib/module/listing-editor/ListingQualityMeter.js.map +1 -1
  207. package/lib/module/locale/common-messages.js +513 -0
  208. package/lib/module/locale/common-messages.js.map +1 -0
  209. package/lib/module/locale/context.js +30 -0
  210. package/lib/module/locale/context.js.map +1 -0
  211. package/lib/module/locale/format-date.js +30 -0
  212. package/lib/module/locale/format-date.js.map +1 -0
  213. package/lib/module/locale/index.js +7 -0
  214. package/lib/module/locale/index.js.map +1 -0
  215. package/lib/module/locale/languages.js +29 -0
  216. package/lib/module/locale/languages.js.map +1 -0
  217. package/lib/module/locale/messages.js +30 -0
  218. package/lib/module/locale/messages.js.map +1 -0
  219. package/lib/module/locale/plural.js +48 -0
  220. package/lib/module/locale/plural.js.map +1 -0
  221. package/lib/module/map-marker/MapListingPreview.js +8 -4
  222. package/lib/module/map-marker/MapListingPreview.js.map +1 -1
  223. package/lib/module/media-card/FriendActivityCard.js +3 -1
  224. package/lib/module/media-card/FriendActivityCard.js.map +1 -1
  225. package/lib/module/media-card/GenreCard.js +3 -1
  226. package/lib/module/media-card/GenreCard.js.map +1 -1
  227. package/lib/module/media-card/MediaCard.js +5 -3
  228. package/lib/module/media-card/MediaCard.js.map +1 -1
  229. package/lib/module/media-card/QuickAccessTile.js +5 -2
  230. package/lib/module/media-card/QuickAccessTile.js.map +1 -1
  231. package/lib/module/media-card/RecapCard.js +5 -2
  232. package/lib/module/media-card/RecapCard.js.map +1 -1
  233. package/lib/module/media-card/parts.js +5 -2
  234. package/lib/module/media-card/parts.js.map +1 -1
  235. package/lib/module/media-header/MediaActionBar.js +6 -3
  236. package/lib/module/media-header/MediaActionBar.js.map +1 -1
  237. package/lib/module/media-header/PopularTracks.js +6 -3
  238. package/lib/module/media-header/PopularTracks.js.map +1 -1
  239. package/lib/module/media-header/parts.js +8 -3
  240. package/lib/module/media-header/parts.js.map +1 -1
  241. package/lib/module/media-shelf/Shelf.js +8 -3
  242. package/lib/module/media-shelf/Shelf.js.map +1 -1
  243. package/lib/module/media-shelf/ShelfSkeleton.js +6 -2
  244. package/lib/module/media-shelf/ShelfSkeleton.js.map +1 -1
  245. package/lib/module/menubar/Menubar.web.js +4 -1
  246. package/lib/module/menubar/Menubar.web.js.map +1 -1
  247. package/lib/module/message-media/FileMessage.js +6 -2
  248. package/lib/module/message-media/FileMessage.js.map +1 -1
  249. package/lib/module/message-media/parts.js +6 -2
  250. package/lib/module/message-media/parts.js.map +1 -1
  251. package/lib/module/music-library/SearchField.js +6 -3
  252. package/lib/module/music-library/SearchField.js.map +1 -1
  253. package/lib/module/overlay/Overlay.js +4 -1
  254. package/lib/module/overlay/Overlay.js.map +1 -1
  255. package/lib/module/page-header/PageHeader.js +6 -3
  256. package/lib/module/page-header/PageHeader.js.map +1 -1
  257. package/lib/module/pagination/Pagination.js +8 -4
  258. package/lib/module/pagination/Pagination.js.map +1 -1
  259. package/lib/module/place-card/PlaceCard.js +6 -4
  260. package/lib/module/place-card/PlaceCard.js.map +1 -1
  261. package/lib/module/place-reviews/PlaceReviewCard.js +8 -4
  262. package/lib/module/place-reviews/PlaceReviewCard.js.map +1 -1
  263. package/lib/module/place-reviews/WriteReviewPrompt.js +6 -2
  264. package/lib/module/place-reviews/WriteReviewPrompt.js.map +1 -1
  265. package/lib/module/provider/BloomProvider.js +16 -11
  266. package/lib/module/provider/BloomProvider.js.map +1 -1
  267. package/lib/module/recent-hires-card/RecentHiresCard.js +8 -4
  268. package/lib/module/recent-hires-card/RecentHiresCard.js.map +1 -1
  269. package/lib/module/settings-modal/SettingsModal.js +3 -1
  270. package/lib/module/settings-modal/SettingsModal.js.map +1 -1
  271. package/lib/module/sidebar/Sidebar.js +6 -3
  272. package/lib/module/sidebar/Sidebar.js.map +1 -1
  273. package/lib/module/stay-filters/AmenityFilter.js +8 -3
  274. package/lib/module/stay-filters/AmenityFilter.js.map +1 -1
  275. package/lib/module/stay-search/GuestPicker.js +6 -2
  276. package/lib/module/stay-search/GuestPicker.js.map +1 -1
  277. package/lib/module/stepper/Stepper.js +4 -1
  278. package/lib/module/stepper/Stepper.js.map +1 -1
  279. package/lib/module/toast/ToastContent.js +3 -1
  280. package/lib/module/toast/ToastContent.js.map +1 -1
  281. package/lib/module/vendor-card/VendorCard.js +5 -3
  282. package/lib/module/vendor-card/VendorCard.js.map +1 -1
  283. package/lib/module/wizard/WizardFooter.js +8 -4
  284. package/lib/module/wizard/WizardFooter.js.map +1 -1
  285. package/lib/typescript/commonjs/activity-feed/ActivityFeed.d.ts +1 -1
  286. package/lib/typescript/commonjs/activity-feed/ActivityFeed.d.ts.map +1 -1
  287. package/lib/typescript/commonjs/alert-dialog/AlertDialog.d.ts +1 -1
  288. package/lib/typescript/commonjs/alert-dialog/AlertDialog.d.ts.map +1 -1
  289. package/lib/typescript/commonjs/alert-dialog/index.d.ts +1 -1
  290. package/lib/typescript/commonjs/alert-dialog/index.d.ts.map +1 -1
  291. package/lib/typescript/commonjs/alert-dialog/index.web.d.ts +1 -1
  292. package/lib/typescript/commonjs/alert-dialog/index.web.d.ts.map +1 -1
  293. package/lib/typescript/commonjs/announcement/Announcement.d.ts +1 -1
  294. package/lib/typescript/commonjs/announcement/Announcement.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/app-shell/ProOfferCard.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/calendar/shared.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/chart-cards/medical-parts.d.ts +1 -1
  298. package/lib/typescript/commonjs/chart-cards/medical-parts.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/chat-composer/ComposerBanner.d.ts +1 -1
  300. package/lib/typescript/commonjs/chat-composer/ComposerBanner.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/chat-list/ChatSearchField.d.ts +1 -1
  302. package/lib/typescript/commonjs/chat-list/ChatSearchField.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/composer-panel/ComposerPopover.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/data-table/DataTableRowActions.d.ts +1 -1
  305. package/lib/typescript/commonjs/data-table/DataTableRowActions.d.ts.map +1 -1
  306. package/lib/typescript/commonjs/data-table/DataTableSearch.d.ts +1 -1
  307. package/lib/typescript/commonjs/data-table/DataTableSearch.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/date-picker/Calendar.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/date-picker/CalendarMonth.d.ts +5 -3
  310. package/lib/typescript/commonjs/date-picker/CalendarMonth.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/date-picker/DatePicker.d.ts +1 -1
  312. package/lib/typescript/commonjs/date-picker/DatePicker.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/date-picker/DateRangePicker.d.ts +1 -1
  314. package/lib/typescript/commonjs/date-picker/DateRangePicker.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/date-picker/MeetingScheduler.d.ts +1 -1
  316. package/lib/typescript/commonjs/date-picker/MeetingScheduler.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/date-picker/PickerShell.d.ts +3 -3
  318. package/lib/typescript/commonjs/date-picker/PickerShell.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/date-picker/calendar-grid.d.ts +1 -2
  320. package/lib/typescript/commonjs/date-picker/calendar-grid.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/date-picker/messages.d.ts +31 -0
  322. package/lib/typescript/commonjs/date-picker/messages.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/date-picker/types.d.ts +28 -24
  324. package/lib/typescript/commonjs/date-picker/types.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/dialog/DialogHeader.d.ts.map +1 -1
  326. package/lib/typescript/commonjs/dialog/SheetShell.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/dropdown-menu/DropdownMenu.d.ts +1 -1
  328. package/lib/typescript/commonjs/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/dropdown-menu/DropdownMenu.web.d.ts +1 -1
  330. package/lib/typescript/commonjs/dropdown-menu/DropdownMenu.web.d.ts.map +1 -1
  331. package/lib/typescript/commonjs/floating/FloatingPanel.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/home-search/HomeSearchBar.d.ts +1 -1
  333. package/lib/typescript/commonjs/home-search/HomeSearchBar.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/home-search/SavedSearchCard.d.ts +1 -1
  335. package/lib/typescript/commonjs/home-search/SavedSearchCard.d.ts.map +1 -1
  336. package/lib/typescript/commonjs/index.d.ts +2 -0
  337. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  338. package/lib/typescript/commonjs/index.web.d.ts +2 -0
  339. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  340. package/lib/typescript/commonjs/listing-card/ListingCard.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/listing-details/ReviewCard.d.ts +1 -1
  342. package/lib/typescript/commonjs/listing-details/ReviewCard.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/listing-editor/ListingQualityMeter.d.ts +1 -1
  344. package/lib/typescript/commonjs/listing-editor/ListingQualityMeter.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/locale/common-messages.d.ts +54 -0
  346. package/lib/typescript/commonjs/locale/common-messages.d.ts.map +1 -0
  347. package/lib/typescript/commonjs/locale/context.d.ts +18 -0
  348. package/lib/typescript/commonjs/locale/context.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/locale/format-date.d.ts +13 -0
  350. package/lib/typescript/commonjs/locale/format-date.d.ts.map +1 -0
  351. package/lib/typescript/commonjs/locale/index.d.ts +3 -0
  352. package/lib/typescript/commonjs/locale/index.d.ts.map +1 -0
  353. package/lib/typescript/commonjs/locale/languages.d.ts +16 -0
  354. package/lib/typescript/commonjs/locale/languages.d.ts.map +1 -0
  355. package/lib/typescript/commonjs/locale/messages.d.ts +18 -0
  356. package/lib/typescript/commonjs/locale/messages.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/locale/plural.d.ts +19 -0
  358. package/lib/typescript/commonjs/locale/plural.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/map-marker/MapListingPreview.d.ts +1 -1
  360. package/lib/typescript/commonjs/map-marker/MapListingPreview.d.ts.map +1 -1
  361. package/lib/typescript/commonjs/media-card/FriendActivityCard.d.ts.map +1 -1
  362. package/lib/typescript/commonjs/media-card/GenreCard.d.ts.map +1 -1
  363. package/lib/typescript/commonjs/media-card/MediaCard.d.ts.map +1 -1
  364. package/lib/typescript/commonjs/media-card/QuickAccessTile.d.ts.map +1 -1
  365. package/lib/typescript/commonjs/media-card/RecapCard.d.ts.map +1 -1
  366. package/lib/typescript/commonjs/media-card/parts.d.ts +1 -1
  367. package/lib/typescript/commonjs/media-card/parts.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/media-header/MediaActionBar.d.ts +1 -1
  369. package/lib/typescript/commonjs/media-header/MediaActionBar.d.ts.map +1 -1
  370. package/lib/typescript/commonjs/media-header/PopularTracks.d.ts +1 -1
  371. package/lib/typescript/commonjs/media-header/PopularTracks.d.ts.map +1 -1
  372. package/lib/typescript/commonjs/media-header/parts.d.ts +1 -1
  373. package/lib/typescript/commonjs/media-header/parts.d.ts.map +1 -1
  374. package/lib/typescript/commonjs/media-shelf/Shelf.d.ts +1 -1
  375. package/lib/typescript/commonjs/media-shelf/Shelf.d.ts.map +1 -1
  376. package/lib/typescript/commonjs/media-shelf/ShelfSkeleton.d.ts +1 -1
  377. package/lib/typescript/commonjs/media-shelf/ShelfSkeleton.d.ts.map +1 -1
  378. package/lib/typescript/commonjs/menubar/Menubar.web.d.ts +1 -1
  379. package/lib/typescript/commonjs/menubar/Menubar.web.d.ts.map +1 -1
  380. package/lib/typescript/commonjs/message-media/FileMessage.d.ts +1 -1
  381. package/lib/typescript/commonjs/message-media/FileMessage.d.ts.map +1 -1
  382. package/lib/typescript/commonjs/message-media/parts.d.ts.map +1 -1
  383. package/lib/typescript/commonjs/music-library/SearchField.d.ts +1 -1
  384. package/lib/typescript/commonjs/music-library/SearchField.d.ts.map +1 -1
  385. package/lib/typescript/commonjs/overlay/Overlay.d.ts.map +1 -1
  386. package/lib/typescript/commonjs/page-header/PageHeader.d.ts +1 -1
  387. package/lib/typescript/commonjs/page-header/PageHeader.d.ts.map +1 -1
  388. package/lib/typescript/commonjs/pagination/Pagination.d.ts.map +1 -1
  389. package/lib/typescript/commonjs/place-card/PlaceCard.d.ts.map +1 -1
  390. package/lib/typescript/commonjs/place-reviews/PlaceReviewCard.d.ts +1 -1
  391. package/lib/typescript/commonjs/place-reviews/PlaceReviewCard.d.ts.map +1 -1
  392. package/lib/typescript/commonjs/place-reviews/WriteReviewPrompt.d.ts +1 -1
  393. package/lib/typescript/commonjs/place-reviews/WriteReviewPrompt.d.ts.map +1 -1
  394. package/lib/typescript/commonjs/provider/BloomProvider.d.ts +1 -1
  395. package/lib/typescript/commonjs/provider/BloomProvider.d.ts.map +1 -1
  396. package/lib/typescript/commonjs/provider/types.d.ts +6 -0
  397. package/lib/typescript/commonjs/provider/types.d.ts.map +1 -1
  398. package/lib/typescript/commonjs/recent-hires-card/RecentHiresCard.d.ts.map +1 -1
  399. package/lib/typescript/commonjs/settings-modal/SettingsModal.d.ts.map +1 -1
  400. package/lib/typescript/commonjs/sidebar/Sidebar.d.ts.map +1 -1
  401. package/lib/typescript/commonjs/stay-filters/AmenityFilter.d.ts +1 -1
  402. package/lib/typescript/commonjs/stay-filters/AmenityFilter.d.ts.map +1 -1
  403. package/lib/typescript/commonjs/stay-search/GuestPicker.d.ts +1 -1
  404. package/lib/typescript/commonjs/stay-search/GuestPicker.d.ts.map +1 -1
  405. package/lib/typescript/commonjs/stepper/Stepper.d.ts +1 -1
  406. package/lib/typescript/commonjs/stepper/Stepper.d.ts.map +1 -1
  407. package/lib/typescript/commonjs/toast/ToastContent.d.ts.map +1 -1
  408. package/lib/typescript/commonjs/vendor-card/VendorCard.d.ts.map +1 -1
  409. package/lib/typescript/commonjs/wizard/WizardFooter.d.ts +1 -1
  410. package/lib/typescript/commonjs/wizard/WizardFooter.d.ts.map +1 -1
  411. package/lib/typescript/module/activity-feed/ActivityFeed.d.ts +1 -1
  412. package/lib/typescript/module/activity-feed/ActivityFeed.d.ts.map +1 -1
  413. package/lib/typescript/module/alert-dialog/AlertDialog.d.ts +1 -1
  414. package/lib/typescript/module/alert-dialog/AlertDialog.d.ts.map +1 -1
  415. package/lib/typescript/module/alert-dialog/index.d.ts +1 -1
  416. package/lib/typescript/module/alert-dialog/index.d.ts.map +1 -1
  417. package/lib/typescript/module/alert-dialog/index.web.d.ts +1 -1
  418. package/lib/typescript/module/alert-dialog/index.web.d.ts.map +1 -1
  419. package/lib/typescript/module/announcement/Announcement.d.ts +1 -1
  420. package/lib/typescript/module/announcement/Announcement.d.ts.map +1 -1
  421. package/lib/typescript/module/app-shell/ProOfferCard.d.ts.map +1 -1
  422. package/lib/typescript/module/calendar/shared.d.ts.map +1 -1
  423. package/lib/typescript/module/chart-cards/medical-parts.d.ts +1 -1
  424. package/lib/typescript/module/chart-cards/medical-parts.d.ts.map +1 -1
  425. package/lib/typescript/module/chat-composer/ComposerBanner.d.ts +1 -1
  426. package/lib/typescript/module/chat-composer/ComposerBanner.d.ts.map +1 -1
  427. package/lib/typescript/module/chat-list/ChatSearchField.d.ts +1 -1
  428. package/lib/typescript/module/chat-list/ChatSearchField.d.ts.map +1 -1
  429. package/lib/typescript/module/composer-panel/ComposerPopover.d.ts.map +1 -1
  430. package/lib/typescript/module/data-table/DataTableRowActions.d.ts +1 -1
  431. package/lib/typescript/module/data-table/DataTableRowActions.d.ts.map +1 -1
  432. package/lib/typescript/module/data-table/DataTableSearch.d.ts +1 -1
  433. package/lib/typescript/module/data-table/DataTableSearch.d.ts.map +1 -1
  434. package/lib/typescript/module/date-picker/Calendar.d.ts.map +1 -1
  435. package/lib/typescript/module/date-picker/CalendarMonth.d.ts +5 -3
  436. package/lib/typescript/module/date-picker/CalendarMonth.d.ts.map +1 -1
  437. package/lib/typescript/module/date-picker/DatePicker.d.ts +1 -1
  438. package/lib/typescript/module/date-picker/DatePicker.d.ts.map +1 -1
  439. package/lib/typescript/module/date-picker/DateRangePicker.d.ts +1 -1
  440. package/lib/typescript/module/date-picker/DateRangePicker.d.ts.map +1 -1
  441. package/lib/typescript/module/date-picker/MeetingScheduler.d.ts +1 -1
  442. package/lib/typescript/module/date-picker/MeetingScheduler.d.ts.map +1 -1
  443. package/lib/typescript/module/date-picker/PickerShell.d.ts +3 -3
  444. package/lib/typescript/module/date-picker/PickerShell.d.ts.map +1 -1
  445. package/lib/typescript/module/date-picker/calendar-grid.d.ts +1 -2
  446. package/lib/typescript/module/date-picker/calendar-grid.d.ts.map +1 -1
  447. package/lib/typescript/module/date-picker/messages.d.ts +31 -0
  448. package/lib/typescript/module/date-picker/messages.d.ts.map +1 -0
  449. package/lib/typescript/module/date-picker/types.d.ts +28 -24
  450. package/lib/typescript/module/date-picker/types.d.ts.map +1 -1
  451. package/lib/typescript/module/dialog/DialogHeader.d.ts.map +1 -1
  452. package/lib/typescript/module/dialog/SheetShell.d.ts.map +1 -1
  453. package/lib/typescript/module/dropdown-menu/DropdownMenu.d.ts +1 -1
  454. package/lib/typescript/module/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  455. package/lib/typescript/module/dropdown-menu/DropdownMenu.web.d.ts +1 -1
  456. package/lib/typescript/module/dropdown-menu/DropdownMenu.web.d.ts.map +1 -1
  457. package/lib/typescript/module/floating/FloatingPanel.d.ts.map +1 -1
  458. package/lib/typescript/module/home-search/HomeSearchBar.d.ts +1 -1
  459. package/lib/typescript/module/home-search/HomeSearchBar.d.ts.map +1 -1
  460. package/lib/typescript/module/home-search/SavedSearchCard.d.ts +1 -1
  461. package/lib/typescript/module/home-search/SavedSearchCard.d.ts.map +1 -1
  462. package/lib/typescript/module/index.d.ts +2 -0
  463. package/lib/typescript/module/index.d.ts.map +1 -1
  464. package/lib/typescript/module/index.web.d.ts +2 -0
  465. package/lib/typescript/module/index.web.d.ts.map +1 -1
  466. package/lib/typescript/module/listing-card/ListingCard.d.ts.map +1 -1
  467. package/lib/typescript/module/listing-details/ReviewCard.d.ts +1 -1
  468. package/lib/typescript/module/listing-details/ReviewCard.d.ts.map +1 -1
  469. package/lib/typescript/module/listing-editor/ListingQualityMeter.d.ts +1 -1
  470. package/lib/typescript/module/listing-editor/ListingQualityMeter.d.ts.map +1 -1
  471. package/lib/typescript/module/locale/common-messages.d.ts +54 -0
  472. package/lib/typescript/module/locale/common-messages.d.ts.map +1 -0
  473. package/lib/typescript/module/locale/context.d.ts +18 -0
  474. package/lib/typescript/module/locale/context.d.ts.map +1 -0
  475. package/lib/typescript/module/locale/format-date.d.ts +13 -0
  476. package/lib/typescript/module/locale/format-date.d.ts.map +1 -0
  477. package/lib/typescript/module/locale/index.d.ts +3 -0
  478. package/lib/typescript/module/locale/index.d.ts.map +1 -0
  479. package/lib/typescript/module/locale/languages.d.ts +16 -0
  480. package/lib/typescript/module/locale/languages.d.ts.map +1 -0
  481. package/lib/typescript/module/locale/messages.d.ts +18 -0
  482. package/lib/typescript/module/locale/messages.d.ts.map +1 -0
  483. package/lib/typescript/module/locale/plural.d.ts +19 -0
  484. package/lib/typescript/module/locale/plural.d.ts.map +1 -0
  485. package/lib/typescript/module/map-marker/MapListingPreview.d.ts +1 -1
  486. package/lib/typescript/module/map-marker/MapListingPreview.d.ts.map +1 -1
  487. package/lib/typescript/module/media-card/FriendActivityCard.d.ts.map +1 -1
  488. package/lib/typescript/module/media-card/GenreCard.d.ts.map +1 -1
  489. package/lib/typescript/module/media-card/MediaCard.d.ts.map +1 -1
  490. package/lib/typescript/module/media-card/QuickAccessTile.d.ts.map +1 -1
  491. package/lib/typescript/module/media-card/RecapCard.d.ts.map +1 -1
  492. package/lib/typescript/module/media-card/parts.d.ts +1 -1
  493. package/lib/typescript/module/media-card/parts.d.ts.map +1 -1
  494. package/lib/typescript/module/media-header/MediaActionBar.d.ts +1 -1
  495. package/lib/typescript/module/media-header/MediaActionBar.d.ts.map +1 -1
  496. package/lib/typescript/module/media-header/PopularTracks.d.ts +1 -1
  497. package/lib/typescript/module/media-header/PopularTracks.d.ts.map +1 -1
  498. package/lib/typescript/module/media-header/parts.d.ts +1 -1
  499. package/lib/typescript/module/media-header/parts.d.ts.map +1 -1
  500. package/lib/typescript/module/media-shelf/Shelf.d.ts +1 -1
  501. package/lib/typescript/module/media-shelf/Shelf.d.ts.map +1 -1
  502. package/lib/typescript/module/media-shelf/ShelfSkeleton.d.ts +1 -1
  503. package/lib/typescript/module/media-shelf/ShelfSkeleton.d.ts.map +1 -1
  504. package/lib/typescript/module/menubar/Menubar.web.d.ts +1 -1
  505. package/lib/typescript/module/menubar/Menubar.web.d.ts.map +1 -1
  506. package/lib/typescript/module/message-media/FileMessage.d.ts +1 -1
  507. package/lib/typescript/module/message-media/FileMessage.d.ts.map +1 -1
  508. package/lib/typescript/module/message-media/parts.d.ts.map +1 -1
  509. package/lib/typescript/module/music-library/SearchField.d.ts +1 -1
  510. package/lib/typescript/module/music-library/SearchField.d.ts.map +1 -1
  511. package/lib/typescript/module/overlay/Overlay.d.ts.map +1 -1
  512. package/lib/typescript/module/page-header/PageHeader.d.ts +1 -1
  513. package/lib/typescript/module/page-header/PageHeader.d.ts.map +1 -1
  514. package/lib/typescript/module/pagination/Pagination.d.ts.map +1 -1
  515. package/lib/typescript/module/place-card/PlaceCard.d.ts.map +1 -1
  516. package/lib/typescript/module/place-reviews/PlaceReviewCard.d.ts +1 -1
  517. package/lib/typescript/module/place-reviews/PlaceReviewCard.d.ts.map +1 -1
  518. package/lib/typescript/module/place-reviews/WriteReviewPrompt.d.ts +1 -1
  519. package/lib/typescript/module/place-reviews/WriteReviewPrompt.d.ts.map +1 -1
  520. package/lib/typescript/module/provider/BloomProvider.d.ts +1 -1
  521. package/lib/typescript/module/provider/BloomProvider.d.ts.map +1 -1
  522. package/lib/typescript/module/provider/types.d.ts +6 -0
  523. package/lib/typescript/module/provider/types.d.ts.map +1 -1
  524. package/lib/typescript/module/recent-hires-card/RecentHiresCard.d.ts.map +1 -1
  525. package/lib/typescript/module/settings-modal/SettingsModal.d.ts.map +1 -1
  526. package/lib/typescript/module/sidebar/Sidebar.d.ts.map +1 -1
  527. package/lib/typescript/module/stay-filters/AmenityFilter.d.ts +1 -1
  528. package/lib/typescript/module/stay-filters/AmenityFilter.d.ts.map +1 -1
  529. package/lib/typescript/module/stay-search/GuestPicker.d.ts +1 -1
  530. package/lib/typescript/module/stay-search/GuestPicker.d.ts.map +1 -1
  531. package/lib/typescript/module/stepper/Stepper.d.ts +1 -1
  532. package/lib/typescript/module/stepper/Stepper.d.ts.map +1 -1
  533. package/lib/typescript/module/toast/ToastContent.d.ts.map +1 -1
  534. package/lib/typescript/module/vendor-card/VendorCard.d.ts.map +1 -1
  535. package/lib/typescript/module/wizard/WizardFooter.d.ts +1 -1
  536. package/lib/typescript/module/wizard/WizardFooter.d.ts.map +1 -1
  537. package/package.json +18 -1
  538. package/src/activity-feed/ActivityFeed.tsx +6 -2
  539. package/src/alert-dialog/AlertDialog.tsx +4 -1
  540. package/src/announcement/Announcement.tsx +4 -1
  541. package/src/app-shell/ProOfferCard.tsx +4 -1
  542. package/src/calendar/shared.ts +5 -12
  543. package/src/chart-cards/medical-parts.tsx +6 -2
  544. package/src/chat-composer/ComposerBanner.tsx +4 -1
  545. package/src/chat-list/ChatSearchField.tsx +4 -1
  546. package/src/composer-panel/ComposerPopover.tsx +3 -1
  547. package/src/data-table/DataTableRowActions.tsx +5 -2
  548. package/src/data-table/DataTableSearch.tsx +4 -1
  549. package/src/date-picker/Calendar.tsx +8 -2
  550. package/src/date-picker/CalendarMonth.tsx +8 -5
  551. package/src/date-picker/DatePicker.tsx +10 -4
  552. package/src/date-picker/DateRangePicker.tsx +14 -13
  553. package/src/date-picker/MeetingScheduler.tsx +17 -11
  554. package/src/date-picker/PickerShell.tsx +6 -5
  555. package/src/date-picker/calendar-grid.ts +16 -23
  556. package/src/date-picker/messages.ts +470 -0
  557. package/src/date-picker/types.ts +28 -24
  558. package/src/dialog/DialogHeader.tsx +12 -7
  559. package/src/dialog/SheetShell.tsx +4 -2
  560. package/src/dropdown-menu/DropdownMenu.tsx +4 -1
  561. package/src/dropdown-menu/DropdownMenu.web.tsx +4 -1
  562. package/src/floating/FloatingPanel.tsx +3 -1
  563. package/src/home-search/HomeSearchBar.tsx +4 -1
  564. package/src/home-search/SavedSearchCard.tsx +6 -2
  565. package/src/index.ts +2 -0
  566. package/src/index.web.ts +2 -0
  567. package/src/listing-card/ListingCard.tsx +4 -2
  568. package/src/listing-details/ReviewCard.tsx +6 -2
  569. package/src/listing-editor/ListingQualityMeter.tsx +4 -1
  570. package/src/locale/common-messages.ts +554 -0
  571. package/src/locale/context.ts +23 -0
  572. package/src/locale/format-date.ts +28 -0
  573. package/src/locale/index.ts +4 -0
  574. package/src/locale/languages.ts +45 -0
  575. package/src/locale/messages.ts +29 -0
  576. package/src/locale/plural.ts +53 -0
  577. package/src/map-marker/MapListingPreview.tsx +6 -2
  578. package/src/media-card/FriendActivityCard.tsx +3 -1
  579. package/src/media-card/GenreCard.tsx +3 -1
  580. package/src/media-card/MediaCard.tsx +3 -1
  581. package/src/media-card/QuickAccessTile.tsx +3 -1
  582. package/src/media-card/RecapCard.tsx +3 -1
  583. package/src/media-card/parts.tsx +5 -2
  584. package/src/media-header/MediaActionBar.tsx +4 -1
  585. package/src/media-header/PopularTracks.tsx +4 -1
  586. package/src/media-header/parts.tsx +6 -2
  587. package/src/media-shelf/Shelf.tsx +6 -2
  588. package/src/media-shelf/ShelfSkeleton.tsx +4 -1
  589. package/src/menubar/Menubar.web.tsx +4 -1
  590. package/src/message-media/FileMessage.tsx +4 -1
  591. package/src/message-media/parts.tsx +4 -1
  592. package/src/music-library/SearchField.tsx +4 -1
  593. package/src/overlay/Overlay.tsx +4 -1
  594. package/src/page-header/PageHeader.tsx +4 -1
  595. package/src/pagination/Pagination.tsx +6 -2
  596. package/src/place-card/PlaceCard.tsx +4 -2
  597. package/src/place-reviews/PlaceReviewCard.tsx +6 -2
  598. package/src/place-reviews/WriteReviewPrompt.tsx +4 -1
  599. package/src/provider/BloomProvider.tsx +39 -35
  600. package/src/provider/types.ts +6 -0
  601. package/src/recent-hires-card/RecentHiresCard.tsx +6 -2
  602. package/src/settings-modal/SettingsModal.tsx +3 -1
  603. package/src/sidebar/Sidebar.tsx +4 -1
  604. package/src/stay-filters/AmenityFilter.tsx +6 -2
  605. package/src/stay-search/GuestPicker.tsx +4 -1
  606. package/src/stepper/Stepper.tsx +4 -1
  607. package/src/toast/ToastContent.tsx +3 -1
  608. package/src/vendor-card/VendorCard.tsx +3 -1
  609. package/src/wizard/WizardFooter.tsx +6 -2
@@ -0,0 +1,554 @@
1
+ import { useMessages, type MessageCatalog } from './messages';
2
+
3
+ /**
4
+ * The words every family says — a close button's name, "Loading", "Back" —
5
+ * in each Bloom language, so each family does not keep its own English copy.
6
+ * A family's own catalog holds only what is particular to it.
7
+ */
8
+ export interface CommonMessages {
9
+ close: string;
10
+ /** Names a control that sets something aside: a banner's ✕, a backdrop, a sheet's handle. */
11
+ dismiss: string;
12
+ /** A navigation bar's back button. */
13
+ back: string;
14
+ /** The same, where it reads as an action rather than a place ("Go back"). */
15
+ goBack: string;
16
+ /** Names a busy region or skeleton. */
17
+ loading: string;
18
+ /** A compact overflow trigger ("More"). */
19
+ more: string;
20
+ moreOptions: string;
21
+ moreActions: string;
22
+ /** Names a progress bar. */
23
+ progress: string;
24
+ stepOf: (step: number, total: number) => string;
25
+ /**
26
+ * A control's name about one item: "More actions for Ana". The connector is
27
+ * the language's, never an English "for" between translated words.
28
+ */
29
+ labelFor: (label: string, subject: string) => string;
30
+ /** The hint on a sheet's drag handle. */
31
+ tapToClose: string;
32
+ cancel: string;
33
+ done: string;
34
+ save: string;
35
+ delete: string;
36
+ edit: string;
37
+ remove: string;
38
+ retry: string;
39
+ search: string;
40
+ showMore: string;
41
+ showLess: string;
42
+ next: string;
43
+ previous: string;
44
+ open: string;
45
+ menu: string;
46
+ copy: string;
47
+ copied: string;
48
+ send: string;
49
+ clear: string;
50
+ seeAll: string;
51
+ }
52
+
53
+ export const COMMON_MESSAGES: MessageCatalog<CommonMessages> = {
54
+ en: {
55
+ close: 'Close',
56
+ dismiss: 'Dismiss',
57
+ back: 'Back',
58
+ goBack: 'Go back',
59
+ loading: 'Loading',
60
+ more: 'More',
61
+ moreOptions: 'More options',
62
+ moreActions: 'More actions',
63
+ progress: 'Progress',
64
+ stepOf: (step, total) => `Step ${step} of ${total}`,
65
+ labelFor: (label, subject) => `${label} for ${subject}`,
66
+ tapToClose: 'Tap to close',
67
+ cancel: 'Cancel',
68
+ done: 'Done',
69
+ save: 'Save',
70
+ delete: 'Delete',
71
+ edit: 'Edit',
72
+ remove: 'Remove',
73
+ retry: 'Retry',
74
+ search: 'Search',
75
+ showMore: 'Show more',
76
+ showLess: 'Show less',
77
+ next: 'Next',
78
+ previous: 'Previous',
79
+ open: 'Open',
80
+ menu: 'Menu',
81
+ copy: 'Copy',
82
+ copied: 'Copied',
83
+ send: 'Send',
84
+ clear: 'Clear',
85
+ seeAll: 'See all',
86
+ },
87
+ es: {
88
+ close: 'Cerrar',
89
+ dismiss: 'Descartar',
90
+ back: 'Atrás',
91
+ goBack: 'Volver',
92
+ loading: 'Cargando',
93
+ more: 'Más',
94
+ moreOptions: 'Más opciones',
95
+ moreActions: 'Más acciones',
96
+ progress: 'Progreso',
97
+ stepOf: (step, total) => `Paso ${step} de ${total}`,
98
+ labelFor: (label, subject) => `${label} de ${subject}`,
99
+ tapToClose: 'Toca para cerrar',
100
+ cancel: 'Cancelar',
101
+ done: 'Hecho',
102
+ save: 'Guardar',
103
+ delete: 'Eliminar',
104
+ edit: 'Editar',
105
+ remove: 'Quitar',
106
+ retry: 'Reintentar',
107
+ search: 'Buscar',
108
+ showMore: 'Mostrar más',
109
+ showLess: 'Mostrar menos',
110
+ next: 'Siguiente',
111
+ previous: 'Anterior',
112
+ open: 'Abrir',
113
+ menu: 'Menú',
114
+ copy: 'Copiar',
115
+ copied: 'Copiado',
116
+ send: 'Enviar',
117
+ clear: 'Borrar',
118
+ seeAll: 'Ver todo',
119
+ },
120
+ ca: {
121
+ close: 'Tanca',
122
+ dismiss: 'Descarta',
123
+ back: 'Enrere',
124
+ goBack: 'Torna enrere',
125
+ loading: "S'està carregant",
126
+ more: 'Més',
127
+ moreOptions: 'Més opcions',
128
+ moreActions: 'Més accions',
129
+ progress: 'Progrés',
130
+ stepOf: (step, total) => `Pas ${step} de ${total}`,
131
+ labelFor: (label, subject) => `${label} de ${subject}`,
132
+ tapToClose: 'Toca per tancar',
133
+ cancel: 'Cancel·la',
134
+ done: 'Fet',
135
+ save: 'Desa',
136
+ delete: 'Suprimeix',
137
+ edit: 'Edita',
138
+ remove: 'Treu',
139
+ retry: 'Torna-ho a provar',
140
+ search: 'Cerca',
141
+ showMore: "Mostra'n més",
142
+ showLess: "Mostra'n menys",
143
+ next: 'Següent',
144
+ previous: 'Anterior',
145
+ open: 'Obre',
146
+ menu: 'Menú',
147
+ copy: 'Copia',
148
+ copied: 'Copiat',
149
+ send: 'Envia',
150
+ clear: 'Esborra',
151
+ seeAll: 'Mostra-ho tot',
152
+ },
153
+ de: {
154
+ close: 'Schließen',
155
+ dismiss: 'Ausblenden',
156
+ back: 'Zurück',
157
+ goBack: 'Zurückgehen',
158
+ loading: 'Wird geladen',
159
+ more: 'Mehr',
160
+ moreOptions: 'Weitere Optionen',
161
+ moreActions: 'Weitere Aktionen',
162
+ progress: 'Fortschritt',
163
+ stepOf: (step, total) => `Schritt ${step} von ${total}`,
164
+ labelFor: (label, subject) => `${label} für ${subject}`,
165
+ tapToClose: 'Zum Schließen tippen',
166
+ cancel: 'Abbrechen',
167
+ done: 'Fertig',
168
+ save: 'Speichern',
169
+ delete: 'Löschen',
170
+ edit: 'Bearbeiten',
171
+ remove: 'Entfernen',
172
+ retry: 'Erneut versuchen',
173
+ search: 'Suchen',
174
+ showMore: 'Mehr anzeigen',
175
+ showLess: 'Weniger anzeigen',
176
+ next: 'Weiter',
177
+ previous: 'Vorherige',
178
+ open: 'Öffnen',
179
+ menu: 'Menü',
180
+ copy: 'Kopieren',
181
+ copied: 'Kopiert',
182
+ send: 'Senden',
183
+ clear: 'Leeren',
184
+ seeAll: 'Alle anzeigen',
185
+ },
186
+ fr: {
187
+ close: 'Fermer',
188
+ dismiss: 'Ignorer',
189
+ back: 'Retour',
190
+ goBack: 'Revenir en arrière',
191
+ loading: 'Chargement',
192
+ more: 'Plus',
193
+ moreOptions: "Plus d'options",
194
+ moreActions: "Plus d'actions",
195
+ progress: 'Progression',
196
+ stepOf: (step, total) => `Étape ${step} sur ${total}`,
197
+ labelFor: (label, subject) => `${label} pour ${subject}`,
198
+ tapToClose: 'Touchez pour fermer',
199
+ cancel: 'Annuler',
200
+ done: 'Terminé',
201
+ save: 'Enregistrer',
202
+ delete: 'Supprimer',
203
+ edit: 'Modifier',
204
+ remove: 'Retirer',
205
+ retry: 'Réessayer',
206
+ search: 'Rechercher',
207
+ showMore: 'Afficher plus',
208
+ showLess: 'Afficher moins',
209
+ next: 'Suivant',
210
+ previous: 'Précédent',
211
+ open: 'Ouvrir',
212
+ menu: 'Menu',
213
+ copy: 'Copier',
214
+ copied: 'Copié',
215
+ send: 'Envoyer',
216
+ clear: 'Effacer',
217
+ seeAll: 'Tout afficher',
218
+ },
219
+ it: {
220
+ close: 'Chiudi',
221
+ dismiss: 'Ignora',
222
+ back: 'Indietro',
223
+ goBack: 'Torna indietro',
224
+ loading: 'Caricamento',
225
+ more: 'Altro',
226
+ moreOptions: 'Altre opzioni',
227
+ moreActions: 'Altre azioni',
228
+ progress: 'Avanzamento',
229
+ stepOf: (step, total) => `Passaggio ${step} di ${total}`,
230
+ labelFor: (label, subject) => `${label} per ${subject}`,
231
+ tapToClose: 'Tocca per chiudere',
232
+ cancel: 'Annulla',
233
+ done: 'Fine',
234
+ save: 'Salva',
235
+ delete: 'Elimina',
236
+ edit: 'Modifica',
237
+ remove: 'Rimuovi',
238
+ retry: 'Riprova',
239
+ search: 'Cerca',
240
+ showMore: 'Mostra di più',
241
+ showLess: 'Mostra di meno',
242
+ next: 'Avanti',
243
+ previous: 'Precedente',
244
+ open: 'Apri',
245
+ menu: 'Menu',
246
+ copy: 'Copia',
247
+ copied: 'Copiato',
248
+ send: 'Invia',
249
+ clear: 'Cancella',
250
+ seeAll: 'Mostra tutto',
251
+ },
252
+ pt: {
253
+ close: 'Fechar',
254
+ dismiss: 'Dispensar',
255
+ back: 'Voltar',
256
+ goBack: 'Voltar atrás',
257
+ loading: 'Carregando',
258
+ more: 'Mais',
259
+ moreOptions: 'Mais opções',
260
+ moreActions: 'Mais ações',
261
+ progress: 'Progresso',
262
+ stepOf: (step, total) => `Etapa ${step} de ${total}`,
263
+ labelFor: (label, subject) => `${label} de ${subject}`,
264
+ tapToClose: 'Toque para fechar',
265
+ cancel: 'Cancelar',
266
+ done: 'Concluído',
267
+ save: 'Salvar',
268
+ delete: 'Excluir',
269
+ edit: 'Editar',
270
+ remove: 'Remover',
271
+ retry: 'Tentar novamente',
272
+ search: 'Pesquisar',
273
+ showMore: 'Mostrar mais',
274
+ showLess: 'Mostrar menos',
275
+ next: 'Próximo',
276
+ previous: 'Anterior',
277
+ open: 'Abrir',
278
+ menu: 'Menu',
279
+ copy: 'Copiar',
280
+ copied: 'Copiado',
281
+ send: 'Enviar',
282
+ clear: 'Limpar',
283
+ seeAll: 'Ver tudo',
284
+ },
285
+ ru: {
286
+ close: 'Закрыть',
287
+ dismiss: 'Скрыть',
288
+ back: 'Назад',
289
+ goBack: 'Вернуться',
290
+ loading: 'Загрузка',
291
+ more: 'Ещё',
292
+ moreOptions: 'Другие параметры',
293
+ moreActions: 'Другие действия',
294
+ progress: 'Прогресс',
295
+ stepOf: (step, total) => `Шаг ${step} из ${total}`,
296
+ labelFor: (label, subject) => `${label}: ${subject}`,
297
+ tapToClose: 'Нажмите, чтобы закрыть',
298
+ cancel: 'Отмена',
299
+ done: 'Готово',
300
+ save: 'Сохранить',
301
+ delete: 'Удалить',
302
+ edit: 'Изменить',
303
+ remove: 'Убрать',
304
+ retry: 'Повторить',
305
+ search: 'Поиск',
306
+ showMore: 'Показать больше',
307
+ showLess: 'Показать меньше',
308
+ next: 'Далее',
309
+ previous: 'Предыдущий',
310
+ open: 'Открыть',
311
+ menu: 'Меню',
312
+ copy: 'Копировать',
313
+ copied: 'Скопировано',
314
+ send: 'Отправить',
315
+ clear: 'Очистить',
316
+ seeAll: 'Показать все',
317
+ },
318
+ tr: {
319
+ close: 'Kapat',
320
+ dismiss: 'Yoksay',
321
+ back: 'Geri',
322
+ goBack: 'Geri dön',
323
+ loading: 'Yükleniyor',
324
+ more: 'Daha fazla',
325
+ moreOptions: 'Diğer seçenekler',
326
+ moreActions: 'Diğer işlemler',
327
+ progress: 'İlerleme',
328
+ stepOf: (step, total) => `Adım ${step}/${total}`,
329
+ labelFor: (label, subject) => `${subject}: ${label}`,
330
+ tapToClose: 'Kapatmak için dokunun',
331
+ cancel: 'İptal',
332
+ done: 'Bitti',
333
+ save: 'Kaydet',
334
+ delete: 'Sil',
335
+ edit: 'Düzenle',
336
+ remove: 'Kaldır',
337
+ retry: 'Yeniden dene',
338
+ search: 'Ara',
339
+ showMore: 'Daha fazla göster',
340
+ showLess: 'Daha az göster',
341
+ next: 'İleri',
342
+ previous: 'Önceki',
343
+ open: 'Aç',
344
+ menu: 'Menü',
345
+ copy: 'Kopyala',
346
+ copied: 'Kopyalandı',
347
+ send: 'Gönder',
348
+ clear: 'Temizle',
349
+ seeAll: 'Tümünü gör',
350
+ },
351
+ ja: {
352
+ close: '閉じる',
353
+ dismiss: '非表示',
354
+ back: '戻る',
355
+ goBack: '前に戻る',
356
+ loading: '読み込み中',
357
+ more: 'その他',
358
+ moreOptions: 'その他のオプション',
359
+ moreActions: 'その他の操作',
360
+ progress: '進捗',
361
+ stepOf: (step, total) => `ステップ ${step}/${total}`,
362
+ labelFor: (label, subject) => `${subject}の${label}`,
363
+ tapToClose: 'タップして閉じる',
364
+ cancel: 'キャンセル',
365
+ done: '完了',
366
+ save: '保存',
367
+ delete: '削除',
368
+ edit: '編集',
369
+ remove: '取り除く',
370
+ retry: '再試行',
371
+ search: '検索',
372
+ showMore: 'もっと見る',
373
+ showLess: '表示を減らす',
374
+ next: '次へ',
375
+ previous: '前へ',
376
+ open: '開く',
377
+ menu: 'メニュー',
378
+ copy: 'コピー',
379
+ copied: 'コピーしました',
380
+ send: '送信',
381
+ clear: 'クリア',
382
+ seeAll: 'すべて表示',
383
+ },
384
+ zh: {
385
+ close: '关闭',
386
+ dismiss: '忽略',
387
+ back: '返回',
388
+ goBack: '返回上一页',
389
+ loading: '正在加载',
390
+ more: '更多',
391
+ moreOptions: '更多选项',
392
+ moreActions: '更多操作',
393
+ progress: '进度',
394
+ stepOf: (step, total) => `第 ${step} 步,共 ${total} 步`,
395
+ labelFor: (label, subject) => `${subject}的${label}`,
396
+ tapToClose: '轻触以关闭',
397
+ cancel: '取消',
398
+ done: '完成',
399
+ save: '保存',
400
+ delete: '删除',
401
+ edit: '编辑',
402
+ remove: '移除',
403
+ retry: '重试',
404
+ search: '搜索',
405
+ showMore: '显示更多',
406
+ showLess: '收起',
407
+ next: '下一个',
408
+ previous: '上一个',
409
+ open: '打开',
410
+ menu: '菜单',
411
+ copy: '复制',
412
+ copied: '已复制',
413
+ send: '发送',
414
+ clear: '清除',
415
+ seeAll: '查看全部',
416
+ },
417
+ ar: {
418
+ close: 'إغلاق',
419
+ dismiss: 'تجاهل',
420
+ back: 'رجوع',
421
+ goBack: 'العودة',
422
+ loading: 'جارٍ التحميل',
423
+ more: 'المزيد',
424
+ moreOptions: 'خيارات إضافية',
425
+ moreActions: 'إجراءات إضافية',
426
+ progress: 'التقدم',
427
+ stepOf: (step, total) => `الخطوة ${step} من ${total}`,
428
+ labelFor: (label, subject) => `${label}: ${subject}`,
429
+ tapToClose: 'انقر للإغلاق',
430
+ cancel: 'إلغاء',
431
+ done: 'تم',
432
+ save: 'حفظ',
433
+ delete: 'حذف',
434
+ edit: 'تعديل',
435
+ remove: 'إزالة',
436
+ retry: 'إعادة المحاولة',
437
+ search: 'بحث',
438
+ showMore: 'عرض المزيد',
439
+ showLess: 'عرض أقل',
440
+ next: 'التالي',
441
+ previous: 'السابق',
442
+ open: 'فتح',
443
+ menu: 'القائمة',
444
+ copy: 'نسخ',
445
+ copied: 'تم النسخ',
446
+ send: 'إرسال',
447
+ clear: 'مسح',
448
+ seeAll: 'عرض الكل',
449
+ },
450
+ hi: {
451
+ close: 'बंद करें',
452
+ dismiss: 'ख़ारिज करें',
453
+ back: 'वापस',
454
+ goBack: 'वापस जाएं',
455
+ loading: 'लोड हो रहा है',
456
+ more: 'और',
457
+ moreOptions: 'और विकल्प',
458
+ moreActions: 'और कार्रवाइयां',
459
+ progress: 'प्रगति',
460
+ stepOf: (step, total) => `चरण ${step} / ${total}`,
461
+ labelFor: (label, subject) => `${subject} के लिए ${label}`,
462
+ tapToClose: 'बंद करने के लिए टैप करें',
463
+ cancel: 'रद्द करें',
464
+ done: 'हो गया',
465
+ save: 'सहेजें',
466
+ delete: 'हटाएं',
467
+ edit: 'संपादित करें',
468
+ remove: 'निकालें',
469
+ retry: 'फिर से कोशिश करें',
470
+ search: 'खोजें',
471
+ showMore: 'और दिखाएं',
472
+ showLess: 'कम दिखाएं',
473
+ next: 'अगला',
474
+ previous: 'पिछला',
475
+ open: 'खोलें',
476
+ menu: 'मेन्यू',
477
+ copy: 'कॉपी करें',
478
+ copied: 'कॉपी हो गया',
479
+ send: 'भेजें',
480
+ clear: 'साफ़ करें',
481
+ seeAll: 'सभी देखें',
482
+ },
483
+ bn: {
484
+ close: 'বন্ধ করুন',
485
+ dismiss: 'খারিজ করুন',
486
+ back: 'পিছনে',
487
+ goBack: 'ফিরে যান',
488
+ loading: 'লোড হচ্ছে',
489
+ more: 'আরও',
490
+ moreOptions: 'আরও বিকল্প',
491
+ moreActions: 'আরও কাজ',
492
+ progress: 'অগ্রগতি',
493
+ stepOf: (step, total) => `ধাপ ${step}/${total}`,
494
+ labelFor: (label, subject) => `${subject}-এর জন্য ${label}`,
495
+ tapToClose: 'বন্ধ করতে ট্যাপ করুন',
496
+ cancel: 'বাতিল',
497
+ done: 'সম্পন্ন',
498
+ save: 'সংরক্ষণ করুন',
499
+ delete: 'মুছুন',
500
+ edit: 'সম্পাদনা করুন',
501
+ remove: 'সরান',
502
+ retry: 'আবার চেষ্টা করুন',
503
+ search: 'অনুসন্ধান',
504
+ showMore: 'আরও দেখান',
505
+ showLess: 'কম দেখান',
506
+ next: 'পরবর্তী',
507
+ previous: 'পূর্ববর্তী',
508
+ open: 'খুলুন',
509
+ menu: 'মেনু',
510
+ copy: 'কপি করুন',
511
+ copied: 'কপি হয়েছে',
512
+ send: 'পাঠান',
513
+ clear: 'মুছে ফেলুন',
514
+ seeAll: 'সব দেখুন',
515
+ },
516
+ id: {
517
+ close: 'Tutup',
518
+ dismiss: 'Abaikan',
519
+ back: 'Kembali',
520
+ goBack: 'Kembali ke sebelumnya',
521
+ loading: 'Memuat',
522
+ more: 'Lainnya',
523
+ moreOptions: 'Opsi lainnya',
524
+ moreActions: 'Tindakan lainnya',
525
+ progress: 'Kemajuan',
526
+ stepOf: (step, total) => `Langkah ${step} dari ${total}`,
527
+ labelFor: (label, subject) => `${label} untuk ${subject}`,
528
+ tapToClose: 'Ketuk untuk menutup',
529
+ cancel: 'Batal',
530
+ done: 'Selesai',
531
+ save: 'Simpan',
532
+ delete: 'Hapus',
533
+ edit: 'Edit',
534
+ remove: 'Keluarkan',
535
+ retry: 'Coba lagi',
536
+ search: 'Cari',
537
+ showMore: 'Tampilkan lebih banyak',
538
+ showLess: 'Tampilkan lebih sedikit',
539
+ next: 'Berikutnya',
540
+ previous: 'Sebelumnya',
541
+ open: 'Buka',
542
+ menu: 'Menu',
543
+ copy: 'Salin',
544
+ copied: 'Disalin',
545
+ send: 'Kirim',
546
+ clear: 'Bersihkan',
547
+ seeAll: 'Lihat semua',
548
+ },
549
+ };
550
+
551
+ /** The common words in the locale in effect (prop → `LocaleProvider` → runtime). */
552
+ export function useCommonMessages(locale?: string): CommonMessages {
553
+ return useMessages(COMMON_MESSAGES, locale).messages;
554
+ }
@@ -0,0 +1,23 @@
1
+ import { createContext, createElement, useContext, type ReactNode } from 'react';
2
+
3
+ const LocaleContext = createContext<string | undefined>(undefined);
4
+
5
+ /**
6
+ * Sets the locale every Bloom component below it formats and speaks in —
7
+ * month names, dates, and Bloom's own fixed strings (Cancel, Apply, …).
8
+ * `BloomProvider`'s `locale` prop mounts one; mount another to scope a subtree.
9
+ * Unset, components follow the runtime's locale.
10
+ */
11
+ export function LocaleProvider({ locale, children }: { locale?: string; children?: ReactNode }) {
12
+ return createElement(LocaleContext.Provider, { value: locale }, children);
13
+ }
14
+
15
+ /**
16
+ * The locale a component should use: its own `locale` prop, else the nearest
17
+ * `LocaleProvider`'s, else `undefined` — which `Intl` and the message catalogs
18
+ * both read as "the runtime's".
19
+ */
20
+ export function useBloomLocale(locale?: string): string | undefined {
21
+ const inherited = useContext(LocaleContext);
22
+ return locale ?? inherited;
23
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `Intl.DateTimeFormat` pinned to the GREGORIAN calendar, keeping the locale's
3
+ * language, digits and order.
4
+ *
5
+ * Bloom's grids lay out and return Gregorian `Date`s. A locale whose default
6
+ * calendar is another one — `fa-IR` (Persian, year 1405), `th-TH` (Buddhist,
7
+ * 2569), some `ar-*` — would otherwise title a Gregorian September with
8
+ * another calendar's month and year, so the day a reader picks and the day the
9
+ * app receives disagree. `null` when the runtime cannot format at all (a bad
10
+ * tag), for the caller's own fallback.
11
+ */
12
+ export function formatGregorian(
13
+ date: Date,
14
+ locale: string | undefined,
15
+ options: Intl.DateTimeFormatOptions,
16
+ ): string | null {
17
+ try {
18
+ return new Intl.DateTimeFormat(locale, { ...options, calendar: 'gregory' }).format(date);
19
+ } catch {
20
+ // An engine that rejects the `calendar` option still formats the locale's
21
+ // words; only a tag it cannot read at all falls through to `null`.
22
+ try {
23
+ return new Intl.DateTimeFormat(locale, options).format(date);
24
+ } catch {
25
+ return null;
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,4 @@
1
+ export { LocaleProvider, useBloomLocale } from './context';
2
+ export { BLOOM_LANGUAGES, resolveBloomLanguage, type BloomLanguage } from './languages';
3
+ // `messages.ts` and `plural.ts` are how families localise themselves, not app
4
+ // API: an app speaks through `locale` and each family's `labels` overrides.
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The languages Bloom ships its own strings in — the fleet's app languages.
3
+ * A `MessageCatalog` must name every one of them, so adding a language here
4
+ * fails the type-check of every catalog until it is translated.
5
+ */
6
+ export const BLOOM_LANGUAGES = [
7
+ 'en',
8
+ 'es',
9
+ 'ca',
10
+ 'de',
11
+ 'fr',
12
+ 'it',
13
+ 'pt',
14
+ 'ru',
15
+ 'tr',
16
+ 'ja',
17
+ 'zh',
18
+ 'ar',
19
+ 'hi',
20
+ 'bn',
21
+ 'id',
22
+ ] as const;
23
+
24
+ export type BloomLanguage = (typeof BLOOM_LANGUAGES)[number];
25
+
26
+ const SUPPORTED = new Set<string>(BLOOM_LANGUAGES);
27
+
28
+ /**
29
+ * The language a BCP 47 tag asks for, among Bloom's: its primary subtag
30
+ * (`es-MX` → `es`, `pt_BR` → `pt`, `ca-ES-valencia` → `ca`). Anything Bloom
31
+ * does not ship, and no tag at all, falls back to English.
32
+ */
33
+ export function resolveBloomLanguage(locale: string | null | undefined): BloomLanguage {
34
+ const primary = locale?.split(/[-_]/)[0]?.toLowerCase();
35
+ return primary && SUPPORTED.has(primary) ? (primary as BloomLanguage) : 'en';
36
+ }
37
+
38
+ /** The runtime's own locale (the browser's, or the device's through Hermes' `Intl`). */
39
+ export function runtimeLocale(): string | undefined {
40
+ try {
41
+ return new Intl.DateTimeFormat().resolvedOptions().locale;
42
+ } catch {
43
+ return undefined;
44
+ }
45
+ }
@@ -0,0 +1,29 @@
1
+ import { useMemo } from 'react';
2
+
3
+ import { useBloomLocale } from './context';
4
+ import { resolveBloomLanguage, runtimeLocale, type BloomLanguage } from './languages';
5
+
6
+ /**
7
+ * A family's fixed strings in every Bloom language. The type makes each
8
+ * language REQUIRED and complete, so a missing translation is a type error
9
+ * rather than an English word inside a translated screen.
10
+ */
11
+ export type MessageCatalog<M> = Readonly<Record<BloomLanguage, M>>;
12
+
13
+ /** The catalog entry for `locale`, falling back to English for a language Bloom does not ship. */
14
+ export function pickMessages<M>(catalog: MessageCatalog<M>, locale: string | undefined): M {
15
+ return catalog[resolveBloomLanguage(locale ?? runtimeLocale())];
16
+ }
17
+
18
+ /**
19
+ * The resolved locale (prop → `LocaleProvider` → runtime) and the family's
20
+ * strings in it. A component still lets its `labels` prop win over these.
21
+ */
22
+ export function useMessages<M>(
23
+ catalog: MessageCatalog<M>,
24
+ localeProp?: string,
25
+ ): { locale: string | undefined; messages: M } {
26
+ const locale = useBloomLocale(localeProp);
27
+ const messages = useMemo(() => pickMessages(catalog, locale), [catalog, locale]);
28
+ return { locale, messages };
29
+ }