@refraction-ui/react 0.19.1 → 0.20.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.
- package/dist/chunk-533MCMSU.js +2355 -0
- package/dist/chunk-533MCMSU.js.map +7 -0
- package/dist/chunk-AMK4VCBG.js +250 -0
- package/dist/chunk-AMK4VCBG.js.map +7 -0
- package/dist/chunk-BOLFYVI6.js +90 -0
- package/dist/chunk-BOLFYVI6.js.map +7 -0
- package/dist/chunk-F7B64KT3.js +187 -0
- package/dist/chunk-F7B64KT3.js.map +7 -0
- package/dist/chunk-FD37DFCC.js +77 -0
- package/dist/chunk-FD37DFCC.js.map +7 -0
- package/dist/chunk-H54FLNAF.js +132 -0
- package/dist/chunk-H54FLNAF.js.map +7 -0
- package/dist/chunk-INP46354.js +664 -0
- package/dist/chunk-INP46354.js.map +7 -0
- package/dist/chunk-ONACRMG4.js +116 -0
- package/dist/chunk-ONACRMG4.js.map +7 -0
- package/dist/chunk-SDZ3LROZ.js +7 -0
- package/dist/chunk-SDZ3LROZ.js.map +7 -0
- package/dist/chunk-TOZBR4GL.js +154 -0
- package/dist/chunk-TOZBR4GL.js.map +7 -0
- package/dist/chunk-UNEM2TRI.js +225 -0
- package/dist/chunk-UNEM2TRI.js.map +7 -0
- package/dist/chunk-VK3EQ34F.js +92 -0
- package/dist/chunk-VK3EQ34F.js.map +7 -0
- package/dist/chunk-WK2IIUFO.js +316 -0
- package/dist/chunk-WK2IIUFO.js.map +7 -0
- package/dist/chunk-WSPJTQAV.js +59 -0
- package/dist/chunk-WSPJTQAV.js.map +7 -0
- package/dist/chunk-XWP763SH.js +3 -2
- package/dist/chunk-XWP763SH.js.map +7 -1
- package/dist/chunk-Y2FNNAIL.js +80 -0
- package/dist/chunk-Y2FNNAIL.js.map +1 -0
- package/dist/{chunk-4A4BW3GR.js → chunk-ZF3OHCGV.js} +28 -5
- package/dist/chunk-ZF3OHCGV.js.map +7 -0
- package/dist/form.cjs +5 -11
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +6 -12
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +2879 -33936
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +126 -28780
- package/dist/internal/react-app-shell/index.d.cts +2 -22
- package/dist/internal/react-app-shell/index.d.ts +2 -22
- package/dist/internal/react-badge/index.d.cts +5 -0
- package/dist/internal/react-badge/index.d.ts +5 -0
- package/dist/internal/react-callout/index.d.cts +4 -0
- package/dist/internal/react-callout/index.d.ts +4 -0
- package/dist/internal/react-card/index.d.cts +8 -1
- package/dist/internal/react-card/index.d.ts +8 -1
- package/dist/internal/react-collapsible/index.d.cts +0 -3
- package/dist/internal/react-collapsible/index.d.ts +0 -3
- package/dist/internal/react-combobox/index.d.cts +0 -3
- package/dist/internal/react-combobox/index.d.ts +0 -3
- package/dist/internal/react-command/index.d.cts +0 -3
- package/dist/internal/react-command/index.d.ts +0 -3
- package/dist/internal/react-data-table/index.d.cts +0 -3
- package/dist/internal/react-data-table/index.d.ts +0 -3
- package/dist/internal/react-dialog/index.d.cts +0 -3
- package/dist/internal/react-dialog/index.d.ts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.cts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.ts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.cts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.ts +0 -3
- package/dist/internal/react-form/index.d.cts +2 -21
- package/dist/internal/react-form/index.d.ts +2 -21
- package/dist/internal/react-keyboard-shortcut/index.d.cts +0 -6
- package/dist/internal/react-keyboard-shortcut/index.d.ts +0 -6
- package/dist/internal/react-link-card/index.d.cts +8 -2
- package/dist/internal/react-link-card/index.d.ts +8 -2
- package/dist/internal/react-popover/index.d.cts +0 -3
- package/dist/internal/react-popover/index.d.ts +0 -3
- package/dist/internal/react-sheet/index.d.cts +0 -3
- package/dist/internal/react-sheet/index.d.ts +0 -3
- package/dist/internal/react-slot/index.d.cts +23 -0
- package/dist/internal/react-slot/index.d.ts +23 -0
- package/dist/internal/react-toast/index.d.cts +0 -3
- package/dist/internal/react-toast/index.d.ts +0 -3
- package/dist/internal/react-tooltip/index.d.cts +0 -3
- package/dist/internal/react-tooltip/index.d.ts +0 -3
- package/dist/react-accordion.js +125 -0
- package/dist/react-accordion.js.map +7 -0
- package/dist/react-ai.js +257 -0
- package/dist/react-ai.js.map +7 -0
- package/dist/react-analytics.js +1698 -0
- package/dist/react-analytics.js.map +7 -0
- package/dist/react-animated-text.js +164 -0
- package/dist/react-animated-text.js.map +7 -0
- package/dist/react-app-shell.js +631 -0
- package/dist/react-app-shell.js.map +7 -0
- package/dist/react-audience-feature-card.js +53 -0
- package/dist/react-audience-feature-card.js.map +7 -0
- package/dist/react-audio-room.js +166 -0
- package/dist/react-audio-room.js.map +7 -0
- package/dist/react-auth.js +211 -0
- package/dist/react-auth.js.map +7 -0
- package/dist/react-avatar-group.js +154 -0
- package/dist/react-avatar-group.js.map +7 -0
- package/dist/react-avatar.js +168 -0
- package/dist/react-avatar.js.map +7 -0
- package/dist/react-badge.js +86 -0
- package/dist/react-badge.js.map +7 -0
- package/dist/react-bottom-nav.js +67 -0
- package/dist/react-bottom-nav.js.map +7 -0
- package/dist/react-brand-network-cell.js +92 -0
- package/dist/react-brand-network-cell.js.map +7 -0
- package/dist/react-breadcrumbs.js +104 -0
- package/dist/react-breadcrumbs.js.map +7 -0
- package/dist/react-browser-chrome-mock.js +89 -0
- package/dist/react-browser-chrome-mock.js.map +7 -0
- package/dist/react-button.js +13 -0
- package/dist/react-button.js.map +7 -0
- package/dist/react-calendar.js +301 -0
- package/dist/react-calendar.js.map +7 -0
- package/dist/react-call-controls.js +113 -0
- package/dist/react-call-controls.js.map +7 -0
- package/dist/react-callout.js +152 -0
- package/dist/react-callout.js.map +7 -0
- package/dist/react-card-grid.js +34 -0
- package/dist/react-card-grid.js.map +7 -0
- package/dist/react-card.js +200 -0
- package/dist/react-card.js.map +7 -0
- package/dist/react-carousel.js +132 -0
- package/dist/react-carousel.js.map +7 -0
- package/dist/react-charts.js +509 -0
- package/dist/react-charts.js.map +7 -0
- package/dist/react-checkbox.js +156 -0
- package/dist/react-checkbox.js.map +7 -0
- package/dist/react-checklist.js +168 -0
- package/dist/react-checklist.js.map +7 -0
- package/dist/react-code-block.js +78 -0
- package/dist/react-code-block.js.map +7 -0
- package/dist/react-code-editor.js +184 -0
- package/dist/react-code-editor.js.map +7 -0
- package/dist/react-collapsible.js +192 -0
- package/dist/react-collapsible.js.map +7 -0
- package/dist/react-combobox.js +609 -0
- package/dist/react-combobox.js.map +7 -0
- package/dist/react-command-input.js +202 -0
- package/dist/react-command-input.js.map +7 -0
- package/dist/react-command.js +364 -0
- package/dist/react-command.js.map +7 -0
- package/dist/react-composer.js +2036 -0
- package/dist/react-composer.js.map +7 -0
- package/dist/react-content-protection.js +133 -0
- package/dist/react-content-protection.js.map +7 -0
- package/dist/react-conversation.js +1226 -0
- package/dist/react-conversation.js.map +7 -0
- package/dist/react-cookie-consent.js +291 -0
- package/dist/react-cookie-consent.js.map +7 -0
- package/dist/react-data-table.js +310 -0
- package/dist/react-data-table.js.map +7 -0
- package/dist/react-date-picker.js +95 -0
- package/dist/react-date-picker.js.map +7 -0
- package/dist/react-device-frame.js +137 -0
- package/dist/react-device-frame.js.map +7 -0
- package/dist/react-dialog.js +218 -0
- package/dist/react-dialog.js.map +7 -0
- package/dist/react-diff-viewer.js +460 -0
- package/dist/react-diff-viewer.js.map +7 -0
- package/dist/react-dropdown-menu.js +292 -0
- package/dist/react-dropdown-menu.js.map +7 -0
- package/dist/react-editor-status-bar.js +148 -0
- package/dist/react-editor-status-bar.js.map +7 -0
- package/dist/react-editor-tabs.js +159 -0
- package/dist/react-editor-tabs.js.map +7 -0
- package/dist/react-emoji-picker.js +238 -0
- package/dist/react-emoji-picker.js.map +7 -0
- package/dist/react-empty-state.js +90 -0
- package/dist/react-empty-state.js.map +7 -0
- package/dist/react-feedback-dialog.js +275 -0
- package/dist/react-feedback-dialog.js.map +7 -0
- package/dist/react-file-tree.js +376 -0
- package/dist/react-file-tree.js.map +7 -0
- package/dist/react-file-upload.js +360 -0
- package/dist/react-file-upload.js.map +7 -0
- package/dist/react-floating-reactions.js +124 -0
- package/dist/react-floating-reactions.js.map +7 -0
- package/dist/react-flow-editor.js +198 -0
- package/dist/react-flow-editor.js.map +7 -0
- package/dist/react-footer.js +67 -0
- package/dist/react-footer.js.map +7 -0
- package/dist/react-graph-view.js +197 -0
- package/dist/react-graph-view.js.map +7 -0
- package/dist/react-icon-system.js +9 -0
- package/dist/react-icon-system.js.map +7 -0
- package/dist/react-infinite-canvas.js +8 -0
- package/dist/react-infinite-canvas.js.map +7 -0
- package/dist/react-inline-editor.js +216 -0
- package/dist/react-inline-editor.js.map +7 -0
- package/dist/react-input-group.js +150 -0
- package/dist/react-input-group.js.map +7 -0
- package/dist/react-input.js +10 -0
- package/dist/react-input.js.map +7 -0
- package/dist/react-install-prompt.js +132 -0
- package/dist/react-install-prompt.js.map +7 -0
- package/dist/react-kanban-board.js +198 -0
- package/dist/react-kanban-board.js.map +7 -0
- package/dist/react-keyboard-shortcut.js +36 -0
- package/dist/react-keyboard-shortcut.js.map +7 -0
- package/dist/react-language-selector.js +311 -0
- package/dist/react-language-selector.js.map +7 -0
- package/dist/react-link-card.js +48 -0
- package/dist/react-link-card.js.map +7 -0
- package/dist/react-live-captions.js +92 -0
- package/dist/react-live-captions.js.map +7 -0
- package/dist/react-live-cursors.js +145 -0
- package/dist/react-live-cursors.js.map +7 -0
- package/dist/react-live-transcript.js +117 -0
- package/dist/react-live-transcript.js.map +7 -0
- package/dist/react-location-selector.js +252 -0
- package/dist/react-location-selector.js.map +7 -0
- package/dist/react-logger.js +415 -0
- package/dist/react-logger.js.map +7 -0
- package/dist/react-markdown-renderer.js +12 -0
- package/dist/react-markdown-renderer.js.map +7 -0
- package/dist/react-marquee-strip.js +62 -0
- package/dist/react-marquee-strip.js.map +7 -0
- package/dist/react-mascot.js +367 -0
- package/dist/react-mascot.js.map +7 -0
- package/dist/react-mastery-bar.js +97 -0
- package/dist/react-mastery-bar.js.map +7 -0
- package/dist/react-mini-map.js +207 -0
- package/dist/react-mini-map.js.map +7 -0
- package/dist/react-mobile-nav.js +216 -0
- package/dist/react-mobile-nav.js.map +7 -0
- package/dist/react-navbar.js +96 -0
- package/dist/react-navbar.js.map +7 -0
- package/dist/react-numbered-steps.js +67 -0
- package/dist/react-numbered-steps.js.map +7 -0
- package/dist/react-otp-input.js +318 -0
- package/dist/react-otp-input.js.map +7 -0
- package/dist/react-pagination.js +199 -0
- package/dist/react-pagination.js.map +7 -0
- package/dist/react-password-input.js +104 -0
- package/dist/react-password-input.js.map +7 -0
- package/dist/react-payment.js +81 -0
- package/dist/react-payment.js.map +7 -0
- package/dist/react-popover.js +176 -0
- package/dist/react-popover.js.map +7 -0
- package/dist/react-pre-call-lobby.js +309 -0
- package/dist/react-pre-call-lobby.js.map +7 -0
- package/dist/react-presence-indicator.js +86 -0
- package/dist/react-presence-indicator.js.map +7 -0
- package/dist/react-pricing-card.js +142 -0
- package/dist/react-pricing-card.js.map +7 -0
- package/dist/react-progress-display.js +188 -0
- package/dist/react-progress-display.js.map +7 -0
- package/dist/react-radial-gauge.js +193 -0
- package/dist/react-radial-gauge.js.map +7 -0
- package/dist/react-radio.js +169 -0
- package/dist/react-radio.js.map +7 -0
- package/dist/react-rating-scale.js +171 -0
- package/dist/react-rating-scale.js.map +7 -0
- package/dist/react-reaction-bar.js +111 -0
- package/dist/react-reaction-bar.js.map +7 -0
- package/dist/react-resizable-layout.js +298 -0
- package/dist/react-resizable-layout.js.map +7 -0
- package/dist/react-rich-editor.js +1 -0
- package/dist/react-rich-editor.js.map +7 -0
- package/dist/react-search-bar.js +285 -0
- package/dist/react-search-bar.js.map +7 -0
- package/dist/react-section-head.js +65 -0
- package/dist/react-section-head.js.map +7 -0
- package/dist/react-segmented-control.js +215 -0
- package/dist/react-segmented-control.js.map +7 -0
- package/dist/react-select.js +389 -0
- package/dist/react-select.js.map +7 -0
- package/dist/react-separator.js +86 -0
- package/dist/react-separator.js.map +7 -0
- package/dist/react-sheet.js +310 -0
- package/dist/react-sheet.js.map +7 -0
- package/dist/react-sidebar.js +100 -0
- package/dist/react-sidebar.js.map +7 -0
- package/dist/react-skeleton.js +91 -0
- package/dist/react-skeleton.js.map +7 -0
- package/dist/react-skip-to-content.js +38 -0
- package/dist/react-skip-to-content.js.map +7 -0
- package/dist/react-slide-viewer.js +264 -0
- package/dist/react-slide-viewer.js.map +7 -0
- package/dist/react-slider.js +105 -0
- package/dist/react-slider.js.map +7 -0
- package/dist/react-slot-picker.js +184 -0
- package/dist/react-slot-picker.js.map +7 -0
- package/dist/react-slot.js +7 -0
- package/dist/react-slot.js.map +7 -0
- package/dist/react-social-auth-button.js +169 -0
- package/dist/react-social-auth-button.js.map +7 -0
- package/dist/react-sortable-list.js +204 -0
- package/dist/react-sortable-list.js.map +7 -0
- package/dist/react-stat-grid.js +69 -0
- package/dist/react-stat-grid.js.map +7 -0
- package/dist/react-status-indicator.js +117 -0
- package/dist/react-status-indicator.js.map +7 -0
- package/dist/react-steps.js +167 -0
- package/dist/react-steps.js.map +7 -0
- package/dist/react-sticky-note.js +131 -0
- package/dist/react-sticky-note.js.map +7 -0
- package/dist/react-switch.js +139 -0
- package/dist/react-switch.js.map +7 -0
- package/dist/react-table-of-contents.js +80 -0
- package/dist/react-table-of-contents.js.map +7 -0
- package/dist/react-tabs.js +230 -0
- package/dist/react-tabs.js.map +7 -0
- package/dist/react-terminal.js +101 -0
- package/dist/react-terminal.js.map +7 -0
- package/dist/react-test-results.js +158 -0
- package/dist/react-test-results.js.map +7 -0
- package/dist/react-textarea.js +89 -0
- package/dist/react-textarea.js.map +7 -0
- package/dist/react-thread-view.js +139 -0
- package/dist/react-thread-view.js.map +7 -0
- package/dist/react-timeline.js +153 -0
- package/dist/react-timeline.js.map +7 -0
- package/dist/react-toast.js +253 -0
- package/dist/react-toast.js.map +7 -0
- package/dist/react-tooltip.js +221 -0
- package/dist/react-tooltip.js.map +7 -0
- package/dist/react-version-selector.js +270 -0
- package/dist/react-version-selector.js.map +7 -0
- package/dist/react-video-grid.js +129 -0
- package/dist/react-video-grid.js.map +7 -0
- package/dist/react-video-player.js +206 -0
- package/dist/react-video-player.js.map +7 -0
- package/dist/react-video-tile.js +8 -0
- package/dist/react-video-tile.js.map +7 -0
- package/dist/react-voice-pill.js +314 -0
- package/dist/react-voice-pill.js.map +7 -0
- package/dist/react-waveform.js +558 -0
- package/dist/react-waveform.js.map +7 -0
- package/dist/react-wizard.js +337 -0
- package/dist/react-wizard.js.map +7 -0
- package/dist/styles.css +7 -0
- package/dist/theme.js +1 -1
- package/package.json +3 -2
- package/dist/applicationinsights-web-H7OBLIVJ.js +0 -23393
- package/dist/applicationinsights-web-H7OBLIVJ.js.map +0 -1
- package/dist/chunk-4A4BW3GR.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/module-X3HTTRQK.js +0 -6438
- package/dist/module-X3HTTRQK.js.map +0 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn,
|
|
3
|
+
generateId
|
|
4
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
5
|
+
|
|
6
|
+
// ../react-location-selector/dist/index.js
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
|
|
9
|
+
// ../i18n/dist/index.js
|
|
10
|
+
var LANGUAGES = {
|
|
11
|
+
// English variants
|
|
12
|
+
"en": { code: "en", name: "English", nativeName: "English", direction: "ltr", group: "English" },
|
|
13
|
+
"en-US": { code: "en-US", name: "English (US)", nativeName: "English (US)", direction: "ltr", group: "English" },
|
|
14
|
+
"en-GB": { code: "en-GB", name: "English (UK)", nativeName: "English (UK)", direction: "ltr", group: "English" },
|
|
15
|
+
"en-IN": { code: "en-IN", name: "English (India)", nativeName: "English (India)", direction: "ltr", group: "English" },
|
|
16
|
+
// Indian languages
|
|
17
|
+
"hi": { code: "hi", name: "Hindi", nativeName: "\u0939\u093F\u0928\u094D\u0926\u0940", direction: "ltr", group: "Indian" },
|
|
18
|
+
"te": { code: "te", name: "Telugu", nativeName: "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41", direction: "ltr", group: "Indian" },
|
|
19
|
+
"ta": { code: "ta", name: "Tamil", nativeName: "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", direction: "ltr", group: "Indian" },
|
|
20
|
+
"ur": { code: "ur", name: "Urdu", nativeName: "\u0627\u0631\u062F\u0648", direction: "rtl", group: "Indian" },
|
|
21
|
+
"pa": { code: "pa", name: "Punjabi", nativeName: "\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40", direction: "ltr", group: "Indian" },
|
|
22
|
+
"bn": { code: "bn", name: "Bengali", nativeName: "\u09AC\u09BE\u0982\u09B2\u09BE", direction: "ltr", group: "Indian" },
|
|
23
|
+
"gu": { code: "gu", name: "Gujarati", nativeName: "\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0", direction: "ltr", group: "Indian" },
|
|
24
|
+
"mr": { code: "mr", name: "Marathi", nativeName: "\u092E\u0930\u093E\u0920\u0940", direction: "ltr", group: "Indian" },
|
|
25
|
+
"kn": { code: "kn", name: "Kannada", nativeName: "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1", direction: "ltr", group: "Indian" },
|
|
26
|
+
"ml": { code: "ml", name: "Malayalam", nativeName: "\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D02", direction: "ltr", group: "Indian" },
|
|
27
|
+
// Western European
|
|
28
|
+
"fr": { code: "fr", name: "French", nativeName: "Fran\xE7ais", direction: "ltr", group: "European" },
|
|
29
|
+
"es": { code: "es", name: "Spanish", nativeName: "Espa\xF1ol", direction: "ltr", group: "European" },
|
|
30
|
+
"de": { code: "de", name: "German", nativeName: "Deutsch", direction: "ltr", group: "European" },
|
|
31
|
+
"it": { code: "it", name: "Italian", nativeName: "Italiano", direction: "ltr", group: "European" },
|
|
32
|
+
"pt": { code: "pt", name: "Portuguese", nativeName: "Portugu\xEAs", direction: "ltr", group: "European" },
|
|
33
|
+
"pt-BR": { code: "pt-BR", name: "Portuguese (Brazil)", nativeName: "Portugu\xEAs (Brasil)", direction: "ltr", group: "European" },
|
|
34
|
+
"nl": { code: "nl", name: "Dutch", nativeName: "Nederlands", direction: "ltr", group: "European" },
|
|
35
|
+
// Nordic
|
|
36
|
+
"sv": { code: "sv", name: "Swedish", nativeName: "Svenska", direction: "ltr", group: "European" },
|
|
37
|
+
"da": { code: "da", name: "Danish", nativeName: "Dansk", direction: "ltr", group: "European" },
|
|
38
|
+
"no": { code: "no", name: "Norwegian", nativeName: "Norsk", direction: "ltr", group: "European" },
|
|
39
|
+
"fi": { code: "fi", name: "Finnish", nativeName: "Suomi", direction: "ltr", group: "European" },
|
|
40
|
+
// Eastern European
|
|
41
|
+
"pl": { code: "pl", name: "Polish", nativeName: "Polski", direction: "ltr", group: "European" },
|
|
42
|
+
"cs": { code: "cs", name: "Czech", nativeName: "\u010Ce\u0161tina", direction: "ltr", group: "European" },
|
|
43
|
+
"ro": { code: "ro", name: "Romanian", nativeName: "Rom\xE2n\u0103", direction: "ltr", group: "European" },
|
|
44
|
+
"hu": { code: "hu", name: "Hungarian", nativeName: "Magyar", direction: "ltr", group: "European" },
|
|
45
|
+
"bg": { code: "bg", name: "Bulgarian", nativeName: "\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438", direction: "ltr", group: "European" },
|
|
46
|
+
"hr": { code: "hr", name: "Croatian", nativeName: "Hrvatski", direction: "ltr", group: "European" },
|
|
47
|
+
"sk": { code: "sk", name: "Slovak", nativeName: "Sloven\u010Dina", direction: "ltr", group: "European" },
|
|
48
|
+
"sl": { code: "sl", name: "Slovenian", nativeName: "Sloven\u0161\u010Dina", direction: "ltr", group: "European" },
|
|
49
|
+
"sr": { code: "sr", name: "Serbian", nativeName: "Srpski", direction: "ltr", group: "European" },
|
|
50
|
+
"uk": { code: "uk", name: "Ukrainian", nativeName: "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430", direction: "ltr", group: "European" },
|
|
51
|
+
"el": { code: "el", name: "Greek", nativeName: "\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC", direction: "ltr", group: "European" },
|
|
52
|
+
"ru": { code: "ru", name: "Russian", nativeName: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", direction: "ltr", group: "European" },
|
|
53
|
+
// East Asian
|
|
54
|
+
"ja": { code: "ja", name: "Japanese", nativeName: "\u65E5\u672C\u8A9E", direction: "ltr", group: "East Asian" },
|
|
55
|
+
"ko": { code: "ko", name: "Korean", nativeName: "\uD55C\uAD6D\uC5B4", direction: "ltr", group: "East Asian" },
|
|
56
|
+
"zh": { code: "zh", name: "Chinese (Simplified)", nativeName: "\u4E2D\u6587\uFF08\u7B80\u4F53\uFF09", direction: "ltr", group: "East Asian" },
|
|
57
|
+
"zh-TW": { code: "zh-TW", name: "Chinese (Traditional)", nativeName: "\u4E2D\u6587\uFF08\u7E41\u9AD4\uFF09", direction: "ltr", group: "East Asian" },
|
|
58
|
+
// Middle Eastern
|
|
59
|
+
"ar": { code: "ar", name: "Arabic", nativeName: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", direction: "rtl", group: "Middle Eastern" },
|
|
60
|
+
"he": { code: "he", name: "Hebrew", nativeName: "\u05E2\u05D1\u05E8\u05D9\u05EA", direction: "rtl", group: "Middle Eastern" },
|
|
61
|
+
"tr": { code: "tr", name: "Turkish", nativeName: "T\xFCrk\xE7e", direction: "ltr", group: "Middle Eastern" },
|
|
62
|
+
// Southeast Asian
|
|
63
|
+
"th": { code: "th", name: "Thai", nativeName: "\u0E44\u0E17\u0E22", direction: "ltr", group: "Southeast Asian" },
|
|
64
|
+
"vi": { code: "vi", name: "Vietnamese", nativeName: "Ti\u1EBFng Vi\u1EC7t", direction: "ltr", group: "Southeast Asian" },
|
|
65
|
+
"id": { code: "id", name: "Indonesian", nativeName: "Bahasa Indonesia", direction: "ltr", group: "Southeast Asian" },
|
|
66
|
+
"ms": { code: "ms", name: "Malay", nativeName: "Bahasa Melayu", direction: "ltr", group: "Southeast Asian" }
|
|
67
|
+
};
|
|
68
|
+
var COUNTRIES = {
|
|
69
|
+
// North America
|
|
70
|
+
"US": { code: "US", name: "United States", flag: "\u{1F1FA}\u{1F1F8}", defaultLanguages: ["en"], timezone: "America/New_York" },
|
|
71
|
+
"CA": { code: "CA", name: "Canada", flag: "\u{1F1E8}\u{1F1E6}", defaultLanguages: ["en", "fr"], timezone: "America/Toronto" },
|
|
72
|
+
"MX": { code: "MX", name: "Mexico", flag: "\u{1F1F2}\u{1F1FD}", defaultLanguages: ["es"], timezone: "America/Mexico_City" },
|
|
73
|
+
// UK & Ireland
|
|
74
|
+
"GB": { code: "GB", name: "United Kingdom", flag: "\u{1F1EC}\u{1F1E7}", defaultLanguages: ["en"], timezone: "Europe/London" },
|
|
75
|
+
"IE": { code: "IE", name: "Ireland", flag: "\u{1F1EE}\u{1F1EA}", defaultLanguages: ["en"], timezone: "Europe/Dublin" },
|
|
76
|
+
// Oceania
|
|
77
|
+
"AU": { code: "AU", name: "Australia", flag: "\u{1F1E6}\u{1F1FA}", defaultLanguages: ["en"], timezone: "Australia/Sydney" },
|
|
78
|
+
"NZ": { code: "NZ", name: "New Zealand", flag: "\u{1F1F3}\u{1F1FF}", defaultLanguages: ["en"], timezone: "Pacific/Auckland" },
|
|
79
|
+
// South Asia
|
|
80
|
+
"IN": { code: "IN", name: "India", flag: "\u{1F1EE}\u{1F1F3}", defaultLanguages: ["hi", "en"], timezone: "Asia/Kolkata" },
|
|
81
|
+
"PK": { code: "PK", name: "Pakistan", flag: "\u{1F1F5}\u{1F1F0}", defaultLanguages: ["ur", "en"], timezone: "Asia/Karachi" },
|
|
82
|
+
"BD": { code: "BD", name: "Bangladesh", flag: "\u{1F1E7}\u{1F1E9}", defaultLanguages: ["bn"], timezone: "Asia/Dhaka" },
|
|
83
|
+
"LK": { code: "LK", name: "Sri Lanka", flag: "\u{1F1F1}\u{1F1F0}", defaultLanguages: ["ta", "en"], timezone: "Asia/Colombo" },
|
|
84
|
+
"NP": { code: "NP", name: "Nepal", flag: "\u{1F1F3}\u{1F1F5}", defaultLanguages: ["hi", "en"], timezone: "Asia/Kathmandu" },
|
|
85
|
+
// Western Europe
|
|
86
|
+
"FR": { code: "FR", name: "France", flag: "\u{1F1EB}\u{1F1F7}", defaultLanguages: ["fr"], timezone: "Europe/Paris" },
|
|
87
|
+
"DE": { code: "DE", name: "Germany", flag: "\u{1F1E9}\u{1F1EA}", defaultLanguages: ["de"], timezone: "Europe/Berlin" },
|
|
88
|
+
"ES": { code: "ES", name: "Spain", flag: "\u{1F1EA}\u{1F1F8}", defaultLanguages: ["es"], timezone: "Europe/Madrid" },
|
|
89
|
+
"IT": { code: "IT", name: "Italy", flag: "\u{1F1EE}\u{1F1F9}", defaultLanguages: ["it"], timezone: "Europe/Rome" },
|
|
90
|
+
"PT": { code: "PT", name: "Portugal", flag: "\u{1F1F5}\u{1F1F9}", defaultLanguages: ["pt"], timezone: "Europe/Lisbon" },
|
|
91
|
+
"NL": { code: "NL", name: "Netherlands", flag: "\u{1F1F3}\u{1F1F1}", defaultLanguages: ["nl"], timezone: "Europe/Amsterdam" },
|
|
92
|
+
"BE": { code: "BE", name: "Belgium", flag: "\u{1F1E7}\u{1F1EA}", defaultLanguages: ["nl", "fr", "de"], timezone: "Europe/Brussels" },
|
|
93
|
+
"CH": { code: "CH", name: "Switzerland", flag: "\u{1F1E8}\u{1F1ED}", defaultLanguages: ["de", "fr", "it"], timezone: "Europe/Zurich" },
|
|
94
|
+
"AT": { code: "AT", name: "Austria", flag: "\u{1F1E6}\u{1F1F9}", defaultLanguages: ["de"], timezone: "Europe/Vienna" },
|
|
95
|
+
// Nordic
|
|
96
|
+
"SE": { code: "SE", name: "Sweden", flag: "\u{1F1F8}\u{1F1EA}", defaultLanguages: ["sv"], timezone: "Europe/Stockholm" },
|
|
97
|
+
"NO": { code: "NO", name: "Norway", flag: "\u{1F1F3}\u{1F1F4}", defaultLanguages: ["no"], timezone: "Europe/Oslo" },
|
|
98
|
+
"DK": { code: "DK", name: "Denmark", flag: "\u{1F1E9}\u{1F1F0}", defaultLanguages: ["da"], timezone: "Europe/Copenhagen" },
|
|
99
|
+
"FI": { code: "FI", name: "Finland", flag: "\u{1F1EB}\u{1F1EE}", defaultLanguages: ["fi"], timezone: "Europe/Helsinki" },
|
|
100
|
+
// Eastern Europe
|
|
101
|
+
"PL": { code: "PL", name: "Poland", flag: "\u{1F1F5}\u{1F1F1}", defaultLanguages: ["pl"], timezone: "Europe/Warsaw" },
|
|
102
|
+
"CZ": { code: "CZ", name: "Czech Republic", flag: "\u{1F1E8}\u{1F1FF}", defaultLanguages: ["cs"], timezone: "Europe/Prague" },
|
|
103
|
+
"RO": { code: "RO", name: "Romania", flag: "\u{1F1F7}\u{1F1F4}", defaultLanguages: ["ro"], timezone: "Europe/Bucharest" },
|
|
104
|
+
"HU": { code: "HU", name: "Hungary", flag: "\u{1F1ED}\u{1F1FA}", defaultLanguages: ["hu"], timezone: "Europe/Budapest" },
|
|
105
|
+
"BG": { code: "BG", name: "Bulgaria", flag: "\u{1F1E7}\u{1F1EC}", defaultLanguages: ["bg"], timezone: "Europe/Sofia" },
|
|
106
|
+
"HR": { code: "HR", name: "Croatia", flag: "\u{1F1ED}\u{1F1F7}", defaultLanguages: ["hr"], timezone: "Europe/Zagreb" },
|
|
107
|
+
"SK": { code: "SK", name: "Slovakia", flag: "\u{1F1F8}\u{1F1F0}", defaultLanguages: ["sk"], timezone: "Europe/Bratislava" },
|
|
108
|
+
"SI": { code: "SI", name: "Slovenia", flag: "\u{1F1F8}\u{1F1EE}", defaultLanguages: ["sl"], timezone: "Europe/Ljubljana" },
|
|
109
|
+
"RS": { code: "RS", name: "Serbia", flag: "\u{1F1F7}\u{1F1F8}", defaultLanguages: ["sr"], timezone: "Europe/Belgrade" },
|
|
110
|
+
"UA": { code: "UA", name: "Ukraine", flag: "\u{1F1FA}\u{1F1E6}", defaultLanguages: ["uk"], timezone: "Europe/Kyiv" },
|
|
111
|
+
"RU": { code: "RU", name: "Russia", flag: "\u{1F1F7}\u{1F1FA}", defaultLanguages: ["ru"], timezone: "Europe/Moscow" },
|
|
112
|
+
"TR": { code: "TR", name: "Turkey", flag: "\u{1F1F9}\u{1F1F7}", defaultLanguages: ["tr"], timezone: "Europe/Istanbul" },
|
|
113
|
+
"GR": { code: "GR", name: "Greece", flag: "\u{1F1EC}\u{1F1F7}", defaultLanguages: ["el"], timezone: "Europe/Athens" },
|
|
114
|
+
// East Asia
|
|
115
|
+
"JP": { code: "JP", name: "Japan", flag: "\u{1F1EF}\u{1F1F5}", defaultLanguages: ["ja"], timezone: "Asia/Tokyo" },
|
|
116
|
+
"KR": { code: "KR", name: "South Korea", flag: "\u{1F1F0}\u{1F1F7}", defaultLanguages: ["ko"], timezone: "Asia/Seoul" },
|
|
117
|
+
"CN": { code: "CN", name: "China", flag: "\u{1F1E8}\u{1F1F3}", defaultLanguages: ["zh"], timezone: "Asia/Shanghai" },
|
|
118
|
+
"TW": { code: "TW", name: "Taiwan", flag: "\u{1F1F9}\u{1F1FC}", defaultLanguages: ["zh"], timezone: "Asia/Taipei" },
|
|
119
|
+
// Southeast Asia
|
|
120
|
+
"TH": { code: "TH", name: "Thailand", flag: "\u{1F1F9}\u{1F1ED}", defaultLanguages: ["th"], timezone: "Asia/Bangkok" },
|
|
121
|
+
"VN": { code: "VN", name: "Vietnam", flag: "\u{1F1FB}\u{1F1F3}", defaultLanguages: ["vi"], timezone: "Asia/Ho_Chi_Minh" },
|
|
122
|
+
"ID": { code: "ID", name: "Indonesia", flag: "\u{1F1EE}\u{1F1E9}", defaultLanguages: ["id"], timezone: "Asia/Jakarta" },
|
|
123
|
+
"MY": { code: "MY", name: "Malaysia", flag: "\u{1F1F2}\u{1F1FE}", defaultLanguages: ["ms", "en"], timezone: "Asia/Kuala_Lumpur" },
|
|
124
|
+
"PH": { code: "PH", name: "Philippines", flag: "\u{1F1F5}\u{1F1ED}", defaultLanguages: ["en"], timezone: "Asia/Manila" },
|
|
125
|
+
"SG": { code: "SG", name: "Singapore", flag: "\u{1F1F8}\u{1F1EC}", defaultLanguages: ["en", "ms", "zh"], timezone: "Asia/Singapore" },
|
|
126
|
+
// South America
|
|
127
|
+
"BR": { code: "BR", name: "Brazil", flag: "\u{1F1E7}\u{1F1F7}", defaultLanguages: ["pt"], timezone: "America/Sao_Paulo" },
|
|
128
|
+
"AR": { code: "AR", name: "Argentina", flag: "\u{1F1E6}\u{1F1F7}", defaultLanguages: ["es"], timezone: "America/Argentina/Buenos_Aires" },
|
|
129
|
+
"CO": { code: "CO", name: "Colombia", flag: "\u{1F1E8}\u{1F1F4}", defaultLanguages: ["es"], timezone: "America/Bogota" },
|
|
130
|
+
"CL": { code: "CL", name: "Chile", flag: "\u{1F1E8}\u{1F1F1}", defaultLanguages: ["es"], timezone: "America/Santiago" },
|
|
131
|
+
// Middle East & North Africa
|
|
132
|
+
"SA": { code: "SA", name: "Saudi Arabia", flag: "\u{1F1F8}\u{1F1E6}", defaultLanguages: ["ar"], timezone: "Asia/Riyadh" },
|
|
133
|
+
"AE": { code: "AE", name: "United Arab Emirates", flag: "\u{1F1E6}\u{1F1EA}", defaultLanguages: ["ar", "en"], timezone: "Asia/Dubai" },
|
|
134
|
+
"IL": { code: "IL", name: "Israel", flag: "\u{1F1EE}\u{1F1F1}", defaultLanguages: ["he"], timezone: "Asia/Jerusalem" },
|
|
135
|
+
"EG": { code: "EG", name: "Egypt", flag: "\u{1F1EA}\u{1F1EC}", defaultLanguages: ["ar"], timezone: "Africa/Cairo" }
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// ../location-selector/dist/index.js
|
|
139
|
+
function createLocationSelector(options = {}) {
|
|
140
|
+
const {
|
|
141
|
+
defaultCountry = "US",
|
|
142
|
+
defaultLanguage = "en",
|
|
143
|
+
onCountryChange,
|
|
144
|
+
onLanguageChange
|
|
145
|
+
} = options;
|
|
146
|
+
const state = {
|
|
147
|
+
country: defaultCountry,
|
|
148
|
+
language: defaultLanguage
|
|
149
|
+
};
|
|
150
|
+
const countryId = generateId("location-sel-country");
|
|
151
|
+
const languageId = generateId("location-sel-language");
|
|
152
|
+
function setCountry(country) {
|
|
153
|
+
state.country = country;
|
|
154
|
+
onCountryChange?.(country);
|
|
155
|
+
}
|
|
156
|
+
function setLanguage(language) {
|
|
157
|
+
state.language = language;
|
|
158
|
+
onLanguageChange?.(language);
|
|
159
|
+
}
|
|
160
|
+
const countries = Array.isArray(COUNTRIES) ? COUNTRIES : Object.values(COUNTRIES);
|
|
161
|
+
const languages = Array.isArray(LANGUAGES) ? LANGUAGES : Object.values(LANGUAGES);
|
|
162
|
+
return {
|
|
163
|
+
state,
|
|
164
|
+
setCountry,
|
|
165
|
+
setLanguage,
|
|
166
|
+
countries,
|
|
167
|
+
languages,
|
|
168
|
+
countryProps: {
|
|
169
|
+
id: countryId,
|
|
170
|
+
name: "country"
|
|
171
|
+
},
|
|
172
|
+
languageProps: {
|
|
173
|
+
id: languageId,
|
|
174
|
+
name: "language"
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// ../react-location-selector/dist/index.js
|
|
180
|
+
var LocationSelector = React.forwardRef(
|
|
181
|
+
function LocationSelector2({ defaultCountry = "US", defaultLanguage = "en", onCountryChange, onLanguageChange, className }, ref) {
|
|
182
|
+
const [country, setCountry] = React.useState(defaultCountry);
|
|
183
|
+
const [language, setLanguage] = React.useState(defaultLanguage);
|
|
184
|
+
const handleCountryChange = React.useCallback(
|
|
185
|
+
(c) => {
|
|
186
|
+
setCountry(c);
|
|
187
|
+
onCountryChange?.(c);
|
|
188
|
+
},
|
|
189
|
+
[onCountryChange]
|
|
190
|
+
);
|
|
191
|
+
const handleLanguageChange = React.useCallback(
|
|
192
|
+
(l) => {
|
|
193
|
+
setLanguage(l);
|
|
194
|
+
onLanguageChange?.(l);
|
|
195
|
+
},
|
|
196
|
+
[onLanguageChange]
|
|
197
|
+
);
|
|
198
|
+
const api = React.useMemo(
|
|
199
|
+
() => createLocationSelector({
|
|
200
|
+
defaultCountry,
|
|
201
|
+
defaultLanguage,
|
|
202
|
+
onCountryChange: handleCountryChange,
|
|
203
|
+
onLanguageChange: handleLanguageChange
|
|
204
|
+
}),
|
|
205
|
+
[defaultCountry, defaultLanguage, handleCountryChange, handleLanguageChange]
|
|
206
|
+
);
|
|
207
|
+
return React.createElement(
|
|
208
|
+
"div",
|
|
209
|
+
{ ref, className: cn("flex flex-col gap-4 sm:flex-row", className) },
|
|
210
|
+
React.createElement(
|
|
211
|
+
"div",
|
|
212
|
+
{ className: "flex flex-col gap-1.5 flex-1" },
|
|
213
|
+
React.createElement("label", { htmlFor: api.countryProps.id, className: "text-sm font-medium" }, "Country"),
|
|
214
|
+
React.createElement(
|
|
215
|
+
"select",
|
|
216
|
+
{
|
|
217
|
+
id: api.countryProps.id,
|
|
218
|
+
name: api.countryProps.name,
|
|
219
|
+
value: country,
|
|
220
|
+
onChange: (e) => api.setCountry(e.target.value),
|
|
221
|
+
className: "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
|
222
|
+
},
|
|
223
|
+
api.countries.map(
|
|
224
|
+
(c) => React.createElement("option", { key: c.code || c.id || c, value: c.code || c.id || c }, c.name || c.label || c)
|
|
225
|
+
)
|
|
226
|
+
)
|
|
227
|
+
),
|
|
228
|
+
React.createElement(
|
|
229
|
+
"div",
|
|
230
|
+
{ className: "flex flex-col gap-1.5 flex-1" },
|
|
231
|
+
React.createElement("label", { htmlFor: api.languageProps.id, className: "text-sm font-medium" }, "Language"),
|
|
232
|
+
React.createElement(
|
|
233
|
+
"select",
|
|
234
|
+
{
|
|
235
|
+
id: api.languageProps.id,
|
|
236
|
+
name: api.languageProps.name,
|
|
237
|
+
value: language,
|
|
238
|
+
onChange: (e) => api.setLanguage(e.target.value),
|
|
239
|
+
className: "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
|
240
|
+
},
|
|
241
|
+
api.languages.map(
|
|
242
|
+
(l) => React.createElement("option", { key: l.code || l.id || l, value: l.code || l.id || l }, l.name || l.label || l)
|
|
243
|
+
)
|
|
244
|
+
)
|
|
245
|
+
)
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
export {
|
|
250
|
+
LocationSelector
|
|
251
|
+
};
|
|
252
|
+
//# sourceMappingURL=react-location-selector.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../react-location-selector/dist/index.js", "../../i18n/src/languages.ts", "../../i18n/src/countries.ts", "../../i18n/src/detect-region.ts", "../../i18n/src/voice-registry.ts", "../../i18n/src/locale-utils.ts", "../../location-selector/dist/index.js"],
|
|
4
|
+
"sourcesContent": ["// src/location-selector.tsx\nimport * as React from \"react\";\nimport { createLocationSelector } from \"@refraction-ui/location-selector\";\nimport { cn } from \"@refraction-ui/shared\";\nvar LocationSelector = React.forwardRef(\n function LocationSelector2({ defaultCountry = \"US\", defaultLanguage = \"en\", onCountryChange, onLanguageChange, className }, ref) {\n const [country, setCountry] = React.useState(defaultCountry);\n const [language, setLanguage] = React.useState(defaultLanguage);\n const handleCountryChange = React.useCallback(\n (c) => {\n setCountry(c);\n onCountryChange?.(c);\n },\n [onCountryChange]\n );\n const handleLanguageChange = React.useCallback(\n (l) => {\n setLanguage(l);\n onLanguageChange?.(l);\n },\n [onLanguageChange]\n );\n const api = React.useMemo(\n () => createLocationSelector({\n defaultCountry,\n defaultLanguage,\n onCountryChange: handleCountryChange,\n onLanguageChange: handleLanguageChange\n }),\n [defaultCountry, defaultLanguage, handleCountryChange, handleLanguageChange]\n );\n return React.createElement(\n \"div\",\n { ref, className: cn(\"flex flex-col gap-4 sm:flex-row\", className) },\n React.createElement(\n \"div\",\n { className: \"flex flex-col gap-1.5 flex-1\" },\n React.createElement(\"label\", { htmlFor: api.countryProps.id, className: \"text-sm font-medium\" }, \"Country\"),\n React.createElement(\n \"select\",\n {\n id: api.countryProps.id,\n name: api.countryProps.name,\n value: country,\n onChange: (e) => api.setCountry(e.target.value),\n className: \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n },\n api.countries.map(\n (c) => React.createElement(\"option\", { key: c.code || c.id || c, value: c.code || c.id || c }, c.name || c.label || c)\n )\n )\n ),\n React.createElement(\n \"div\",\n { className: \"flex flex-col gap-1.5 flex-1\" },\n React.createElement(\"label\", { htmlFor: api.languageProps.id, className: \"text-sm font-medium\" }, \"Language\"),\n React.createElement(\n \"select\",\n {\n id: api.languageProps.id,\n name: api.languageProps.name,\n value: language,\n onChange: (e) => api.setLanguage(e.target.value),\n className: \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n },\n api.languages.map(\n (l) => React.createElement(\"option\", { key: l.code || l.id || l, value: l.code || l.id || l }, l.name || l.label || l)\n )\n )\n )\n );\n }\n);\nexport {\n LocationSelector\n};\n", "/**\n * Language type and registry for i18n support.\n */\n\nexport interface Language {\n code: string\n name: string\n nativeName: string\n direction: 'ltr' | 'rtl'\n group?: string\n}\n\nexport const LANGUAGES: Record<string, Language> = {\n // English variants\n 'en': { code: 'en', name: 'English', nativeName: 'English', direction: 'ltr', group: 'English' },\n 'en-US': { code: 'en-US', name: 'English (US)', nativeName: 'English (US)', direction: 'ltr', group: 'English' },\n 'en-GB': { code: 'en-GB', name: 'English (UK)', nativeName: 'English (UK)', direction: 'ltr', group: 'English' },\n 'en-IN': { code: 'en-IN', name: 'English (India)', nativeName: 'English (India)',direction: 'ltr', group: 'English' },\n\n // Indian languages\n 'hi': { code: 'hi', name: 'Hindi', nativeName: 'हिन्दी', direction: 'ltr', group: 'Indian' },\n 'te': { code: 'te', name: 'Telugu', nativeName: 'తెలుగు', direction: 'ltr', group: 'Indian' },\n 'ta': { code: 'ta', name: 'Tamil', nativeName: 'தமிழ்', direction: 'ltr', group: 'Indian' },\n 'ur': { code: 'ur', name: 'Urdu', nativeName: 'اردو', direction: 'rtl', group: 'Indian' },\n 'pa': { code: 'pa', name: 'Punjabi', nativeName: 'ਪੰਜਾਬੀ', direction: 'ltr', group: 'Indian' },\n 'bn': { code: 'bn', name: 'Bengali', nativeName: 'বাংলা', direction: 'ltr', group: 'Indian' },\n 'gu': { code: 'gu', name: 'Gujarati', nativeName: 'ગુજરાતી', direction: 'ltr', group: 'Indian' },\n 'mr': { code: 'mr', name: 'Marathi', nativeName: 'मराठी', direction: 'ltr', group: 'Indian' },\n 'kn': { code: 'kn', name: 'Kannada', nativeName: 'ಕನ್ನಡ', direction: 'ltr', group: 'Indian' },\n 'ml': { code: 'ml', name: 'Malayalam', nativeName: 'മലയാളം', direction: 'ltr', group: 'Indian' },\n\n // Western European\n 'fr': { code: 'fr', name: 'French', nativeName: 'Français', direction: 'ltr', group: 'European' },\n 'es': { code: 'es', name: 'Spanish', nativeName: 'Español', direction: 'ltr', group: 'European' },\n 'de': { code: 'de', name: 'German', nativeName: 'Deutsch', direction: 'ltr', group: 'European' },\n 'it': { code: 'it', name: 'Italian', nativeName: 'Italiano', direction: 'ltr', group: 'European' },\n 'pt': { code: 'pt', name: 'Portuguese', nativeName: 'Português', direction: 'ltr', group: 'European' },\n 'pt-BR': { code: 'pt-BR', name: 'Portuguese (Brazil)', nativeName: 'Português (Brasil)', direction: 'ltr', group: 'European' },\n 'nl': { code: 'nl', name: 'Dutch', nativeName: 'Nederlands', direction: 'ltr', group: 'European' },\n\n // Nordic\n 'sv': { code: 'sv', name: 'Swedish', nativeName: 'Svenska', direction: 'ltr', group: 'European' },\n 'da': { code: 'da', name: 'Danish', nativeName: 'Dansk', direction: 'ltr', group: 'European' },\n 'no': { code: 'no', name: 'Norwegian', nativeName: 'Norsk', direction: 'ltr', group: 'European' },\n 'fi': { code: 'fi', name: 'Finnish', nativeName: 'Suomi', direction: 'ltr', group: 'European' },\n\n // Eastern European\n 'pl': { code: 'pl', name: 'Polish', nativeName: 'Polski', direction: 'ltr', group: 'European' },\n 'cs': { code: 'cs', name: 'Czech', nativeName: 'Čeština', direction: 'ltr', group: 'European' },\n 'ro': { code: 'ro', name: 'Romanian', nativeName: 'Română', direction: 'ltr', group: 'European' },\n 'hu': { code: 'hu', name: 'Hungarian', nativeName: 'Magyar', direction: 'ltr', group: 'European' },\n 'bg': { code: 'bg', name: 'Bulgarian', nativeName: 'Български', direction: 'ltr', group: 'European' },\n 'hr': { code: 'hr', name: 'Croatian', nativeName: 'Hrvatski', direction: 'ltr', group: 'European' },\n 'sk': { code: 'sk', name: 'Slovak', nativeName: 'Slovenčina', direction: 'ltr', group: 'European' },\n 'sl': { code: 'sl', name: 'Slovenian', nativeName: 'Slovenščina', direction: 'ltr', group: 'European' },\n 'sr': { code: 'sr', name: 'Serbian', nativeName: 'Srpski', direction: 'ltr', group: 'European' },\n 'uk': { code: 'uk', name: 'Ukrainian', nativeName: 'Українська', direction: 'ltr', group: 'European' },\n 'el': { code: 'el', name: 'Greek', nativeName: 'Ελληνικά', direction: 'ltr', group: 'European' },\n 'ru': { code: 'ru', name: 'Russian', nativeName: 'Русский', direction: 'ltr', group: 'European' },\n\n // East Asian\n 'ja': { code: 'ja', name: 'Japanese', nativeName: '日本語', direction: 'ltr', group: 'East Asian' },\n 'ko': { code: 'ko', name: 'Korean', nativeName: '한국어', direction: 'ltr', group: 'East Asian' },\n 'zh': { code: 'zh', name: 'Chinese (Simplified)', nativeName: '中文(简体)', direction: 'ltr', group: 'East Asian' },\n 'zh-TW': { code: 'zh-TW', name: 'Chinese (Traditional)', nativeName: '中文(繁體)', direction: 'ltr', group: 'East Asian' },\n\n // Middle Eastern\n 'ar': { code: 'ar', name: 'Arabic', nativeName: 'العربية', direction: 'rtl', group: 'Middle Eastern' },\n 'he': { code: 'he', name: 'Hebrew', nativeName: 'עברית', direction: 'rtl', group: 'Middle Eastern' },\n 'tr': { code: 'tr', name: 'Turkish', nativeName: 'Türkçe', direction: 'ltr', group: 'Middle Eastern' },\n\n // Southeast Asian\n 'th': { code: 'th', name: 'Thai', nativeName: 'ไทย', direction: 'ltr', group: 'Southeast Asian' },\n 'vi': { code: 'vi', name: 'Vietnamese', nativeName: 'Tiếng Việt', direction: 'ltr', group: 'Southeast Asian' },\n 'id': { code: 'id', name: 'Indonesian', nativeName: 'Bahasa Indonesia', direction: 'ltr', group: 'Southeast Asian' },\n 'ms': { code: 'ms', name: 'Malay', nativeName: 'Bahasa Melayu', direction: 'ltr', group: 'Southeast Asian' },\n}\n\n/** BCP-47 TTS language tag mappings for base language codes */\nconst TTS_LANG_MAP: Record<string, string> = {\n 'en': 'en-US',\n 'en-US': 'en-US',\n 'en-GB': 'en-GB',\n 'en-IN': 'en-IN',\n 'hi': 'hi-IN',\n 'te': 'te-IN',\n 'ta': 'ta-IN',\n 'ur': 'ur-PK',\n 'pa': 'pa-IN',\n 'bn': 'bn-IN',\n 'gu': 'gu-IN',\n 'mr': 'mr-IN',\n 'kn': 'kn-IN',\n 'ml': 'ml-IN',\n 'fr': 'fr-FR',\n 'es': 'es-ES',\n 'de': 'de-DE',\n 'it': 'it-IT',\n 'pt': 'pt-PT',\n 'pt-BR': 'pt-BR',\n 'nl': 'nl-NL',\n 'sv': 'sv-SE',\n 'da': 'da-DK',\n 'no': 'nb-NO',\n 'fi': 'fi-FI',\n 'pl': 'pl-PL',\n 'cs': 'cs-CZ',\n 'ro': 'ro-RO',\n 'hu': 'hu-HU',\n 'bg': 'bg-BG',\n 'hr': 'hr-HR',\n 'sk': 'sk-SK',\n 'sl': 'sl-SI',\n 'sr': 'sr-RS',\n 'uk': 'uk-UA',\n 'el': 'el-GR',\n 'ru': 'ru-RU',\n 'ja': 'ja-JP',\n 'ko': 'ko-KR',\n 'zh': 'zh-CN',\n 'zh-TW': 'zh-TW',\n 'ar': 'ar-SA',\n 'he': 'he-IL',\n 'tr': 'tr-TR',\n 'th': 'th-TH',\n 'vi': 'vi-VN',\n 'id': 'id-ID',\n 'ms': 'ms-MY',\n}\n\n/**\n * Get a language by its code.\n */\nexport function getLanguage(code: string): Language | undefined {\n return LANGUAGES[code]\n}\n\n/**\n * Get all supported languages as an array.\n */\nexport function getSupportedLanguages(): Language[] {\n return Object.values(LANGUAGES)\n}\n\n/**\n * Get languages grouped by their language family/group.\n */\nexport function getLanguagesByGroup(): Record<string, Language[]> {\n const groups: Record<string, Language[]> = {}\n for (const lang of Object.values(LANGUAGES)) {\n const group = lang.group ?? 'Other'\n if (!groups[group]) {\n groups[group] = []\n }\n groups[group].push(lang)\n }\n return groups\n}\n\n/**\n * Get the display name for a language code.\n * Returns empty string if the code is not found.\n */\nexport function getLanguageName(code: string): string {\n return LANGUAGES[code]?.name ?? ''\n}\n\n/**\n * Check if a language code represents a right-to-left language.\n */\nexport function isRTL(code: string): boolean {\n return LANGUAGES[code]?.direction === 'rtl'\n}\n\n/**\n * Get the BCP-47 language tag suitable for TTS engines.\n * Returns the code itself if no mapping exists.\n */\nexport function getTtsLang(code: string): string {\n return TTS_LANG_MAP[code] ?? code\n}\n", "/**\n * Country type and registry for i18n support.\n */\n\nexport interface Country {\n code: string\n name: string\n flag: string\n defaultLanguages: string[]\n timezone?: string\n}\n\nexport const COUNTRIES: Record<string, Country> = {\n // North America\n 'US': { code: 'US', name: 'United States', flag: '🇺🇸', defaultLanguages: ['en'], timezone: 'America/New_York' },\n 'CA': { code: 'CA', name: 'Canada', flag: '🇨🇦', defaultLanguages: ['en', 'fr'], timezone: 'America/Toronto' },\n 'MX': { code: 'MX', name: 'Mexico', flag: '🇲🇽', defaultLanguages: ['es'], timezone: 'America/Mexico_City' },\n\n // UK & Ireland\n 'GB': { code: 'GB', name: 'United Kingdom', flag: '🇬🇧', defaultLanguages: ['en'], timezone: 'Europe/London' },\n 'IE': { code: 'IE', name: 'Ireland', flag: '🇮🇪', defaultLanguages: ['en'], timezone: 'Europe/Dublin' },\n\n // Oceania\n 'AU': { code: 'AU', name: 'Australia', flag: '🇦🇺', defaultLanguages: ['en'], timezone: 'Australia/Sydney' },\n 'NZ': { code: 'NZ', name: 'New Zealand', flag: '🇳🇿', defaultLanguages: ['en'], timezone: 'Pacific/Auckland' },\n\n // South Asia\n 'IN': { code: 'IN', name: 'India', flag: '🇮🇳', defaultLanguages: ['hi', 'en'], timezone: 'Asia/Kolkata' },\n 'PK': { code: 'PK', name: 'Pakistan', flag: '🇵🇰', defaultLanguages: ['ur', 'en'], timezone: 'Asia/Karachi' },\n 'BD': { code: 'BD', name: 'Bangladesh', flag: '🇧🇩', defaultLanguages: ['bn'], timezone: 'Asia/Dhaka' },\n 'LK': { code: 'LK', name: 'Sri Lanka', flag: '🇱🇰', defaultLanguages: ['ta', 'en'], timezone: 'Asia/Colombo' },\n 'NP': { code: 'NP', name: 'Nepal', flag: '🇳🇵', defaultLanguages: ['hi', 'en'], timezone: 'Asia/Kathmandu' },\n\n // Western Europe\n 'FR': { code: 'FR', name: 'France', flag: '🇫🇷', defaultLanguages: ['fr'], timezone: 'Europe/Paris' },\n 'DE': { code: 'DE', name: 'Germany', flag: '🇩🇪', defaultLanguages: ['de'], timezone: 'Europe/Berlin' },\n 'ES': { code: 'ES', name: 'Spain', flag: '🇪🇸', defaultLanguages: ['es'], timezone: 'Europe/Madrid' },\n 'IT': { code: 'IT', name: 'Italy', flag: '🇮🇹', defaultLanguages: ['it'], timezone: 'Europe/Rome' },\n 'PT': { code: 'PT', name: 'Portugal', flag: '🇵🇹', defaultLanguages: ['pt'], timezone: 'Europe/Lisbon' },\n 'NL': { code: 'NL', name: 'Netherlands', flag: '🇳🇱', defaultLanguages: ['nl'], timezone: 'Europe/Amsterdam' },\n 'BE': { code: 'BE', name: 'Belgium', flag: '🇧🇪', defaultLanguages: ['nl', 'fr', 'de'], timezone: 'Europe/Brussels' },\n 'CH': { code: 'CH', name: 'Switzerland', flag: '🇨🇭', defaultLanguages: ['de', 'fr', 'it'], timezone: 'Europe/Zurich' },\n 'AT': { code: 'AT', name: 'Austria', flag: '🇦🇹', defaultLanguages: ['de'], timezone: 'Europe/Vienna' },\n\n // Nordic\n 'SE': { code: 'SE', name: 'Sweden', flag: '🇸🇪', defaultLanguages: ['sv'], timezone: 'Europe/Stockholm' },\n 'NO': { code: 'NO', name: 'Norway', flag: '🇳🇴', defaultLanguages: ['no'], timezone: 'Europe/Oslo' },\n 'DK': { code: 'DK', name: 'Denmark', flag: '🇩🇰', defaultLanguages: ['da'], timezone: 'Europe/Copenhagen' },\n 'FI': { code: 'FI', name: 'Finland', flag: '🇫🇮', defaultLanguages: ['fi'], timezone: 'Europe/Helsinki' },\n\n // Eastern Europe\n 'PL': { code: 'PL', name: 'Poland', flag: '🇵🇱', defaultLanguages: ['pl'], timezone: 'Europe/Warsaw' },\n 'CZ': { code: 'CZ', name: 'Czech Republic', flag: '🇨🇿', defaultLanguages: ['cs'], timezone: 'Europe/Prague' },\n 'RO': { code: 'RO', name: 'Romania', flag: '🇷🇴', defaultLanguages: ['ro'], timezone: 'Europe/Bucharest' },\n 'HU': { code: 'HU', name: 'Hungary', flag: '🇭🇺', defaultLanguages: ['hu'], timezone: 'Europe/Budapest' },\n 'BG': { code: 'BG', name: 'Bulgaria', flag: '🇧🇬', defaultLanguages: ['bg'], timezone: 'Europe/Sofia' },\n 'HR': { code: 'HR', name: 'Croatia', flag: '🇭🇷', defaultLanguages: ['hr'], timezone: 'Europe/Zagreb' },\n 'SK': { code: 'SK', name: 'Slovakia', flag: '🇸🇰', defaultLanguages: ['sk'], timezone: 'Europe/Bratislava' },\n 'SI': { code: 'SI', name: 'Slovenia', flag: '🇸🇮', defaultLanguages: ['sl'], timezone: 'Europe/Ljubljana' },\n 'RS': { code: 'RS', name: 'Serbia', flag: '🇷🇸', defaultLanguages: ['sr'], timezone: 'Europe/Belgrade' },\n 'UA': { code: 'UA', name: 'Ukraine', flag: '🇺🇦', defaultLanguages: ['uk'], timezone: 'Europe/Kyiv' },\n 'RU': { code: 'RU', name: 'Russia', flag: '🇷🇺', defaultLanguages: ['ru'], timezone: 'Europe/Moscow' },\n 'TR': { code: 'TR', name: 'Turkey', flag: '🇹🇷', defaultLanguages: ['tr'], timezone: 'Europe/Istanbul' },\n 'GR': { code: 'GR', name: 'Greece', flag: '🇬🇷', defaultLanguages: ['el'], timezone: 'Europe/Athens' },\n\n // East Asia\n 'JP': { code: 'JP', name: 'Japan', flag: '🇯🇵', defaultLanguages: ['ja'], timezone: 'Asia/Tokyo' },\n 'KR': { code: 'KR', name: 'South Korea', flag: '🇰🇷', defaultLanguages: ['ko'], timezone: 'Asia/Seoul' },\n 'CN': { code: 'CN', name: 'China', flag: '🇨🇳', defaultLanguages: ['zh'], timezone: 'Asia/Shanghai' },\n 'TW': { code: 'TW', name: 'Taiwan', flag: '🇹🇼', defaultLanguages: ['zh'], timezone: 'Asia/Taipei' },\n\n // Southeast Asia\n 'TH': { code: 'TH', name: 'Thailand', flag: '🇹🇭', defaultLanguages: ['th'], timezone: 'Asia/Bangkok' },\n 'VN': { code: 'VN', name: 'Vietnam', flag: '🇻🇳', defaultLanguages: ['vi'], timezone: 'Asia/Ho_Chi_Minh' },\n 'ID': { code: 'ID', name: 'Indonesia', flag: '🇮🇩', defaultLanguages: ['id'], timezone: 'Asia/Jakarta' },\n 'MY': { code: 'MY', name: 'Malaysia', flag: '🇲🇾', defaultLanguages: ['ms', 'en'], timezone: 'Asia/Kuala_Lumpur' },\n 'PH': { code: 'PH', name: 'Philippines', flag: '🇵🇭', defaultLanguages: ['en'], timezone: 'Asia/Manila' },\n 'SG': { code: 'SG', name: 'Singapore', flag: '🇸🇬', defaultLanguages: ['en', 'ms', 'zh'], timezone: 'Asia/Singapore' },\n\n // South America\n 'BR': { code: 'BR', name: 'Brazil', flag: '🇧🇷', defaultLanguages: ['pt'], timezone: 'America/Sao_Paulo' },\n 'AR': { code: 'AR', name: 'Argentina', flag: '🇦🇷', defaultLanguages: ['es'], timezone: 'America/Argentina/Buenos_Aires' },\n 'CO': { code: 'CO', name: 'Colombia', flag: '🇨🇴', defaultLanguages: ['es'], timezone: 'America/Bogota' },\n 'CL': { code: 'CL', name: 'Chile', flag: '🇨🇱', defaultLanguages: ['es'], timezone: 'America/Santiago' },\n\n // Middle East & North Africa\n 'SA': { code: 'SA', name: 'Saudi Arabia', flag: '🇸🇦', defaultLanguages: ['ar'], timezone: 'Asia/Riyadh' },\n 'AE': { code: 'AE', name: 'United Arab Emirates', flag: '🇦🇪', defaultLanguages: ['ar', 'en'], timezone: 'Asia/Dubai' },\n 'IL': { code: 'IL', name: 'Israel', flag: '🇮🇱', defaultLanguages: ['he'], timezone: 'Asia/Jerusalem' },\n 'EG': { code: 'EG', name: 'Egypt', flag: '🇪🇬', defaultLanguages: ['ar'], timezone: 'Africa/Cairo' },\n}\n\n/**\n * Get a country by its code.\n */\nexport function getCountry(code: string): Country | undefined {\n return COUNTRIES[code]\n}\n\n/**\n * Get the flag emoji for a country code.\n * Returns empty string if the code is not found.\n */\nexport function getCountryFlag(code: string): string {\n return COUNTRIES[code]?.flag ?? ''\n}\n\n/**\n * Get the display name for a country code.\n * Returns empty string if the code is not found.\n */\nexport function getCountryName(code: string): string {\n return COUNTRIES[code]?.name ?? ''\n}\n\n/**\n * Get default languages for a country.\n * Returns empty array if the country is not found.\n */\nexport function getDefaultLanguagesForCountry(code: string): string[] {\n return COUNTRIES[code]?.defaultLanguages ?? []\n}\n", "/**\n * Region detection utilities.\n * Detects user country and language from browser/environment signals.\n */\n\n/** Mapping of IANA timezone identifiers to ISO country codes */\nexport const TIMEZONE_TO_COUNTRY: Record<string, string> = {\n // United States\n 'America/New_York': 'US',\n 'America/Chicago': 'US',\n 'America/Denver': 'US',\n 'America/Los_Angeles': 'US',\n 'America/Phoenix': 'US',\n 'America/Anchorage': 'US',\n 'Pacific/Honolulu': 'US',\n 'America/Detroit': 'US',\n 'America/Indiana/Indianapolis': 'US',\n 'America/Boise': 'US',\n\n // Canada\n 'America/Toronto': 'CA',\n 'America/Vancouver': 'CA',\n 'America/Edmonton': 'CA',\n 'America/Winnipeg': 'CA',\n 'America/Halifax': 'CA',\n 'America/St_Johns': 'CA',\n\n // Mexico\n 'America/Mexico_City': 'MX',\n 'America/Cancun': 'MX',\n 'America/Tijuana': 'MX',\n\n // UK & Ireland\n 'Europe/London': 'GB',\n 'Europe/Dublin': 'IE',\n\n // Western Europe\n 'Europe/Paris': 'FR',\n 'Europe/Berlin': 'DE',\n 'Europe/Madrid': 'ES',\n 'Europe/Rome': 'IT',\n 'Europe/Lisbon': 'PT',\n 'Europe/Amsterdam': 'NL',\n 'Europe/Brussels': 'BE',\n 'Europe/Zurich': 'CH',\n 'Europe/Vienna': 'AT',\n\n // Nordic\n 'Europe/Stockholm': 'SE',\n 'Europe/Oslo': 'NO',\n 'Europe/Copenhagen': 'DK',\n 'Europe/Helsinki': 'FI',\n\n // Eastern Europe\n 'Europe/Warsaw': 'PL',\n 'Europe/Prague': 'CZ',\n 'Europe/Bucharest': 'RO',\n 'Europe/Budapest': 'HU',\n 'Europe/Sofia': 'BG',\n 'Europe/Zagreb': 'HR',\n 'Europe/Bratislava': 'SK',\n 'Europe/Ljubljana': 'SI',\n 'Europe/Belgrade': 'RS',\n 'Europe/Kyiv': 'UA',\n 'Europe/Moscow': 'RU',\n 'Europe/Istanbul': 'TR',\n 'Europe/Athens': 'GR',\n\n // South Asia\n 'Asia/Kolkata': 'IN',\n 'Asia/Calcutta': 'IN',\n 'Asia/Karachi': 'PK',\n 'Asia/Dhaka': 'BD',\n 'Asia/Colombo': 'LK',\n 'Asia/Kathmandu': 'NP',\n\n // East Asia\n 'Asia/Tokyo': 'JP',\n 'Asia/Seoul': 'KR',\n 'Asia/Shanghai': 'CN',\n 'Asia/Hong_Kong': 'CN',\n 'Asia/Taipei': 'TW',\n\n // Southeast Asia\n 'Asia/Bangkok': 'TH',\n 'Asia/Ho_Chi_Minh': 'VN',\n 'Asia/Jakarta': 'ID',\n 'Asia/Kuala_Lumpur': 'MY',\n 'Asia/Manila': 'PH',\n 'Asia/Singapore': 'SG',\n\n // Oceania\n 'Australia/Sydney': 'AU',\n 'Australia/Melbourne': 'AU',\n 'Australia/Brisbane': 'AU',\n 'Australia/Perth': 'AU',\n 'Australia/Adelaide': 'AU',\n 'Pacific/Auckland': 'NZ',\n\n // South America\n 'America/Sao_Paulo': 'BR',\n 'America/Rio_Branco': 'BR',\n 'America/Argentina/Buenos_Aires': 'AR',\n 'America/Bogota': 'CO',\n 'America/Santiago': 'CL',\n\n // Middle East\n 'Asia/Riyadh': 'SA',\n 'Asia/Dubai': 'AE',\n 'Asia/Jerusalem': 'IL',\n 'Africa/Cairo': 'EG',\n}\n\n/** Mapping of BCP-47 locale strings to ISO country codes */\nexport const LOCALE_TO_COUNTRY: Record<string, string> = {\n 'en-US': 'US',\n 'en-GB': 'GB',\n 'en-AU': 'AU',\n 'en-CA': 'CA',\n 'en-NZ': 'NZ',\n 'en-IE': 'IE',\n 'en-IN': 'IN',\n 'en-SG': 'SG',\n 'en-PH': 'PH',\n 'en-MY': 'MY',\n 'en-ZA': 'ZA',\n 'hi-IN': 'IN',\n 'te-IN': 'IN',\n 'ta-IN': 'IN',\n 'ur-PK': 'PK',\n 'pa-IN': 'IN',\n 'bn-IN': 'IN',\n 'bn-BD': 'BD',\n 'gu-IN': 'IN',\n 'mr-IN': 'IN',\n 'kn-IN': 'IN',\n 'ml-IN': 'IN',\n 'fr-FR': 'FR',\n 'fr-CA': 'CA',\n 'fr-BE': 'BE',\n 'fr-CH': 'CH',\n 'es-ES': 'ES',\n 'es-MX': 'MX',\n 'es-AR': 'AR',\n 'es-CO': 'CO',\n 'es-CL': 'CL',\n 'de-DE': 'DE',\n 'de-AT': 'AT',\n 'de-CH': 'CH',\n 'it-IT': 'IT',\n 'it-CH': 'CH',\n 'pt-PT': 'PT',\n 'pt-BR': 'BR',\n 'nl-NL': 'NL',\n 'nl-BE': 'BE',\n 'sv-SE': 'SE',\n 'da-DK': 'DK',\n 'nb-NO': 'NO',\n 'nn-NO': 'NO',\n 'fi-FI': 'FI',\n 'pl-PL': 'PL',\n 'cs-CZ': 'CZ',\n 'ro-RO': 'RO',\n 'hu-HU': 'HU',\n 'bg-BG': 'BG',\n 'hr-HR': 'HR',\n 'sk-SK': 'SK',\n 'sl-SI': 'SI',\n 'sr-RS': 'SR',\n 'uk-UA': 'UA',\n 'el-GR': 'GR',\n 'ru-RU': 'RU',\n 'ja-JP': 'JP',\n 'ko-KR': 'KR',\n 'zh-CN': 'CN',\n 'zh-TW': 'TW',\n 'zh-HK': 'CN',\n 'ar-SA': 'SA',\n 'ar-AE': 'AE',\n 'ar-EG': 'EG',\n 'he-IL': 'IL',\n 'tr-TR': 'TR',\n 'th-TH': 'TH',\n 'vi-VN': 'VN',\n 'id-ID': 'ID',\n 'ms-MY': 'MY',\n}\n\n/**\n * Detect the user's country from environment signals.\n * Strategy: timezone mapping -> navigator.languages locale mapping -> fallback 'US'\n */\nexport function detectCountry(): string {\n // 1. Try timezone mapping\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (tz && TIMEZONE_TO_COUNTRY[tz]) {\n return TIMEZONE_TO_COUNTRY[tz]\n }\n } catch {\n // Intl may not be available\n }\n\n // 2. Try navigator.languages locale mapping\n try {\n if (typeof navigator !== 'undefined') {\n const languages = navigator.languages\n if (languages && languages.length > 0) {\n for (const locale of languages) {\n if (LOCALE_TO_COUNTRY[locale]) {\n return LOCALE_TO_COUNTRY[locale]\n }\n }\n }\n }\n } catch {\n // navigator may not be available\n }\n\n // 3. Fallback\n return 'US'\n}\n\n/**\n * Detect the user's preferred language from navigator.languages.\n * Returns the first language from navigator.languages, or 'en' as fallback.\n */\nexport function detectLanguage(): string {\n try {\n if (typeof navigator !== 'undefined') {\n const languages = (navigator as any).languages\n if (languages && languages.length > 0) {\n return languages[0]\n }\n if ((navigator as any).language) {\n return (navigator as any).language\n }\n }\n } catch {\n // navigator may not be available\n }\n return 'en'\n}\n", "/**\n * Voice registry for TTS providers.\n */\n\nexport interface VoiceOption {\n id: string\n name: string\n language: string\n provider: 'browser' | 'google' | 'elevenlabs' | 'openai'\n gender?: 'male' | 'female'\n}\n\nexport const VOICES: VoiceOption[] = [\n // Browser voices — English\n { id: 'browser-en-us-female', name: 'English (US) Female', language: 'en-US', provider: 'browser', gender: 'female' },\n { id: 'browser-en-us-male', name: 'English (US) Male', language: 'en-US', provider: 'browser', gender: 'male' },\n { id: 'browser-en-gb-female', name: 'English (UK) Female', language: 'en-GB', provider: 'browser', gender: 'female' },\n { id: 'browser-en-gb-male', name: 'English (UK) Male', language: 'en-GB', provider: 'browser', gender: 'male' },\n { id: 'browser-en-in-female', name: 'English (India) Female', language: 'en-IN', provider: 'browser', gender: 'female' },\n\n // Browser voices — European\n { id: 'browser-fr-female', name: 'French Female', language: 'fr', provider: 'browser', gender: 'female' },\n { id: 'browser-de-female', name: 'German Female', language: 'de', provider: 'browser', gender: 'female' },\n { id: 'browser-es-female', name: 'Spanish Female', language: 'es', provider: 'browser', gender: 'female' },\n { id: 'browser-it-female', name: 'Italian Female', language: 'it', provider: 'browser', gender: 'female' },\n { id: 'browser-pt-female', name: 'Portuguese Female', language: 'pt', provider: 'browser', gender: 'female' },\n\n // Browser voices — Asian\n { id: 'browser-ja-female', name: 'Japanese Female', language: 'ja', provider: 'browser', gender: 'female' },\n { id: 'browser-ko-female', name: 'Korean Female', language: 'ko', provider: 'browser', gender: 'female' },\n { id: 'browser-zh-female', name: 'Chinese Female', language: 'zh', provider: 'browser', gender: 'female' },\n { id: 'browser-hi-female', name: 'Hindi Female', language: 'hi', provider: 'browser', gender: 'female' },\n { id: 'browser-ar-male', name: 'Arabic Male', language: 'ar', provider: 'browser', gender: 'male' },\n\n // Google TTS voices\n { id: 'google-en-us-wavenet-d', name: 'Google WaveNet English (US)', language: 'en-US', provider: 'google', gender: 'male' },\n { id: 'google-en-us-wavenet-f', name: 'Google WaveNet English (US) Female', language: 'en-US', provider: 'google', gender: 'female' },\n { id: 'google-en-gb-wavenet-a', name: 'Google WaveNet English (UK)', language: 'en-GB', provider: 'google', gender: 'female' },\n { id: 'google-fr-wavenet-a', name: 'Google WaveNet French', language: 'fr', provider: 'google', gender: 'female' },\n { id: 'google-de-wavenet-a', name: 'Google WaveNet German', language: 'de', provider: 'google', gender: 'female' },\n { id: 'google-es-wavenet-a', name: 'Google WaveNet Spanish', language: 'es', provider: 'google', gender: 'female' },\n { id: 'google-ja-wavenet-a', name: 'Google WaveNet Japanese', language: 'ja', provider: 'google', gender: 'female' },\n { id: 'google-hi-wavenet-a', name: 'Google WaveNet Hindi', language: 'hi', provider: 'google', gender: 'female' },\n { id: 'google-ar-wavenet-a', name: 'Google WaveNet Arabic', language: 'ar', provider: 'google', gender: 'female' },\n\n // ElevenLabs voices\n { id: 'elevenlabs-rachel', name: 'Rachel', language: 'en', provider: 'elevenlabs', gender: 'female' },\n { id: 'elevenlabs-adam', name: 'Adam', language: 'en', provider: 'elevenlabs', gender: 'male' },\n { id: 'elevenlabs-antoni', name: 'Antoni', language: 'en', provider: 'elevenlabs', gender: 'male' },\n { id: 'elevenlabs-bella', name: 'Bella', language: 'es', provider: 'elevenlabs', gender: 'female' },\n { id: 'elevenlabs-elli', name: 'Elli', language: 'de', provider: 'elevenlabs', gender: 'female' },\n\n // OpenAI TTS voices\n { id: 'openai-alloy', name: 'Alloy', language: 'en', provider: 'openai' },\n { id: 'openai-echo', name: 'Echo', language: 'en', provider: 'openai', gender: 'male' },\n { id: 'openai-fable', name: 'Fable', language: 'en', provider: 'openai', gender: 'male' },\n { id: 'openai-onyx', name: 'Onyx', language: 'en', provider: 'openai', gender: 'male' },\n { id: 'openai-nova', name: 'Nova', language: 'en', provider: 'openai', gender: 'female' },\n { id: 'openai-shimmer', name: 'Shimmer', language: 'en', provider: 'openai', gender: 'female' },\n]\n\n/**\n * Get all voices that match a given language code.\n * Matches both exact codes and prefix codes (e.g., 'en' matches 'en', 'en-US', 'en-GB').\n */\nexport function getVoicesForLanguage(langCode: string): VoiceOption[] {\n return VOICES.filter((v) => v.language === langCode || v.language.startsWith(langCode + '-') || langCode.startsWith(v.language + '-') || v.language.split('-')[0] === langCode)\n}\n\n/**\n * Get the best voice for a language, optionally preferring a specific provider.\n * Returns undefined if no voice matches.\n */\nexport function getBestVoice(langCode: string, preferredProvider?: VoiceOption['provider']): VoiceOption | undefined {\n const voices = getVoicesForLanguage(langCode)\n if (voices.length === 0) return undefined\n\n if (preferredProvider) {\n const preferred = voices.find((v) => v.provider === preferredProvider)\n if (preferred) return preferred\n }\n\n // Return first available voice\n return voices[0]\n}\n\n/**\n * Get all voices from a specific provider.\n */\nexport function getVoicesByProvider(provider: VoiceOption['provider']): VoiceOption[] {\n return VOICES.filter((v) => v.provider === provider)\n}\n", "/**\n * Locale utilities for display names, storage, and localized value resolution.\n */\n\n/** Display names for common locale codes (in their native language) */\nexport const LOCALE_DISPLAY_NAMES: Record<string, string> = {\n 'en': 'English',\n 'en-US': 'English (US)',\n 'en-GB': 'English (UK)',\n 'en-IN': 'English (India)',\n 'hi': 'हिन्दी',\n 'te': 'తెలుగు',\n 'ta': 'தமிழ்',\n 'ur': 'اردو',\n 'pa': 'ਪੰਜਾਬੀ',\n 'bn': 'বাংলা',\n 'gu': 'ગુજરાતી',\n 'mr': 'मराठी',\n 'kn': 'ಕನ್ನಡ',\n 'ml': 'മലയാളം',\n 'fr': 'Français',\n 'es': 'Español',\n 'de': 'Deutsch',\n 'it': 'Italiano',\n 'pt': 'Português',\n 'pt-BR': 'Português (Brasil)',\n 'nl': 'Nederlands',\n 'sv': 'Svenska',\n 'da': 'Dansk',\n 'no': 'Norsk',\n 'fi': 'Suomi',\n 'pl': 'Polski',\n 'cs': 'Čeština',\n 'ro': 'Română',\n 'hu': 'Magyar',\n 'bg': 'Български',\n 'hr': 'Hrvatski',\n 'sk': 'Slovenčina',\n 'sl': 'Slovenščina',\n 'sr': 'Srpski',\n 'uk': 'Українська',\n 'el': 'Ελληνικά',\n 'ru': 'Русский',\n 'ja': '日本語',\n 'ko': '한국어',\n 'zh': '中文',\n 'zh-TW': '中文(繁體)',\n 'ar': 'العربية',\n 'he': 'עברית',\n 'tr': 'Türkçe',\n 'th': 'ไทย',\n 'vi': 'Tiếng Việt',\n 'id': 'Bahasa Indonesia',\n 'ms': 'Bahasa Melayu',\n}\n\nconst DEFAULT_STORAGE_KEY = 'refraction-ui-locale'\n\n/**\n * Get the display name for a locale code.\n * Returns the code itself if not found in the display names map.\n */\nexport function getLocaleDisplayName(code: string): string {\n return LOCALE_DISPLAY_NAMES[code] ?? code\n}\n\n/**\n * Get the stored locale from localStorage (or compatible storage).\n * Returns null if not stored or localStorage is not available.\n */\nexport function getStoredLocale(storageKey?: string): string | null {\n try {\n if (typeof localStorage !== 'undefined') {\n return localStorage.getItem(storageKey ?? DEFAULT_STORAGE_KEY)\n }\n } catch {\n // localStorage may not be available\n }\n return null\n}\n\n/**\n * Store a locale code in localStorage (or compatible storage).\n * Does nothing if localStorage is not available.\n */\nexport function setStoredLocale(code: string, storageKey?: string): void {\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey ?? DEFAULT_STORAGE_KEY, code)\n }\n } catch {\n // localStorage may not be available\n }\n}\n\n/**\n * Resolve a localized value from a record of locale -> value.\n * Tries exact locale, then base language code (for regional variants like 'en-US' -> 'en'),\n * then the fallback locale.\n */\nexport function getLocalizedValue<T>(\n localized: Record<string, T>,\n locale: string,\n fallbackLocale?: string,\n): T | undefined {\n // 1. Exact match\n if (locale in localized) {\n return localized[locale]\n }\n\n // 2. Try base language code (e.g., 'en-US' -> 'en')\n const baseLang = locale.split('-')[0]\n if (baseLang !== locale && baseLang in localized) {\n return localized[baseLang]\n }\n\n // 3. Fallback locale\n if (fallbackLocale && fallbackLocale in localized) {\n return localized[fallbackLocale]\n }\n\n return undefined\n}\n", "// src/location-selector.ts\nimport { COUNTRIES, LANGUAGES } from \"@refraction-ui/i18n\";\nimport { generateId } from \"@refraction-ui/shared\";\nfunction createLocationSelector(options = {}) {\n const {\n defaultCountry = \"US\",\n defaultLanguage = \"en\",\n onCountryChange,\n onLanguageChange\n } = options;\n const state = {\n country: defaultCountry,\n language: defaultLanguage\n };\n const countryId = generateId(\"location-sel-country\");\n const languageId = generateId(\"location-sel-language\");\n function setCountry(country) {\n state.country = country;\n onCountryChange?.(country);\n }\n function setLanguage(language) {\n state.language = language;\n onLanguageChange?.(language);\n }\n const countries = Array.isArray(COUNTRIES) ? COUNTRIES : Object.values(COUNTRIES);\n const languages = Array.isArray(LANGUAGES) ? LANGUAGES : Object.values(LANGUAGES);\n return {\n state,\n setCountry,\n setLanguage,\n countries,\n languages,\n countryProps: {\n id: countryId,\n name: \"country\"\n },\n languageProps: {\n id: languageId,\n name: \"language\"\n }\n };\n}\nexport {\n createLocationSelector\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|