@salesmind-ai/design-system 0.6.0 → 1.0.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/README.md +2 -0
- package/dist/Anton-Regular-MLEXVTB2.woff2 +0 -0
- package/dist/admin/index.cjs +5 -61
- package/dist/admin/index.css +0 -3918
- package/dist/admin/index.css.map +1 -1
- package/dist/admin/index.d.cts +1 -422
- package/dist/admin/index.d.ts +1 -422
- package/dist/admin/index.js +1 -5
- package/dist/blog/index.cjs +13 -34
- package/dist/blog/index.css +0 -579
- package/dist/blog/index.css.map +1 -1
- package/dist/blog/index.d.cts +1 -54
- package/dist/blog/index.d.ts +1 -54
- package/dist/blog/index.js +5 -6
- package/dist/charts/index.cjs +0 -46
- package/dist/charts/index.d.cts +1 -452
- package/dist/charts/index.d.ts +1 -452
- package/dist/charts/index.js +1 -3
- package/dist/{chunk-YTYDQBVY.cjs → chunk-2VVRZBUR.cjs} +4 -4
- package/dist/{chunk-GQELL2MF.cjs → chunk-3NS6X2R4.cjs} +20 -203
- package/dist/chunk-3NS6X2R4.cjs.map +1 -0
- package/dist/{chunk-XEX2AEZK.cjs → chunk-65DTHLVX.cjs} +66 -186
- package/dist/chunk-65DTHLVX.cjs.map +1 -0
- package/dist/{chunk-QALDZ7WQ.js → chunk-6BUS7RMS.js} +21 -198
- package/dist/chunk-6BUS7RMS.js.map +1 -0
- package/dist/{chunk-LTPTW2US.cjs → chunk-6BXKRDK5.cjs} +587 -977
- package/dist/chunk-6BXKRDK5.cjs.map +1 -0
- package/dist/{chunk-BJZ2DKS5.cjs → chunk-6QIQCUYC.cjs} +11 -10
- package/dist/chunk-6QIQCUYC.cjs.map +1 -0
- package/dist/{chunk-H2Y6BSTL.cjs → chunk-7EUR3AKV.cjs} +1 -1
- package/dist/chunk-7EUR3AKV.cjs.map +1 -0
- package/dist/{chunk-VFJZQQZU.js → chunk-AMNY5TS3.js} +11 -10
- package/dist/chunk-AMNY5TS3.js.map +1 -0
- package/dist/{chunk-YJ6C3EKW.js → chunk-CLXLQCNQ.js} +52 -168
- package/dist/chunk-CLXLQCNQ.js.map +1 -0
- package/dist/{chunk-H2KQ3WSH.cjs → chunk-CVLD5RQK.cjs} +12 -14
- package/dist/chunk-CVLD5RQK.cjs.map +1 -0
- package/dist/chunk-EPD4ZEPY.cjs +344 -0
- package/dist/chunk-EPD4ZEPY.cjs.map +1 -0
- package/dist/{chunk-6D22TFLA.cjs → chunk-FVSL5YMB.cjs} +16 -32
- package/dist/chunk-FVSL5YMB.cjs.map +1 -0
- package/dist/chunk-FXYOSA4E.cjs +118 -0
- package/dist/chunk-FXYOSA4E.cjs.map +1 -0
- package/dist/{chunk-ECXBTUH6.cjs → chunk-GPHQGLR5.cjs} +27 -204
- package/dist/chunk-GPHQGLR5.cjs.map +1 -0
- package/dist/chunk-JPUJWI7F.cjs +73 -0
- package/dist/chunk-JPUJWI7F.cjs.map +1 -0
- package/dist/{chunk-6UNG76Y2.js → chunk-K526GN7P.js} +2 -2
- package/dist/{chunk-SICKWUWB.js → chunk-KJHPOB3J.js} +1 -1
- package/dist/chunk-KJHPOB3J.js.map +1 -0
- package/dist/{chunk-Y26OHHMX.js → chunk-KSEETC4E.js} +508 -891
- package/dist/chunk-KSEETC4E.js.map +1 -0
- package/dist/chunk-KXVFFEGD.js +60 -0
- package/dist/chunk-KXVFFEGD.js.map +1 -0
- package/dist/chunk-LQB7QLD3.js +288 -0
- package/dist/chunk-LQB7QLD3.js.map +1 -0
- package/dist/chunk-LUD52ZJF.cjs +726 -0
- package/dist/chunk-LUD52ZJF.cjs.map +1 -0
- package/dist/{chunk-7UZ5DETZ.js → chunk-MBAG654R.js} +4 -216
- package/dist/chunk-MBAG654R.js.map +1 -0
- package/dist/chunk-OMP6FAZ6.cjs +183 -0
- package/dist/chunk-OMP6FAZ6.cjs.map +1 -0
- package/dist/{chunk-WYH4TKS5.js → chunk-PBYRTNQ5.js} +6 -8
- package/dist/chunk-PBYRTNQ5.js.map +1 -0
- package/dist/chunk-PYREXCZK.js +679 -0
- package/dist/chunk-PYREXCZK.js.map +1 -0
- package/dist/{chunk-P5BOFE5A.js → chunk-RSLA2FJN.js} +28 -183
- package/dist/chunk-RSLA2FJN.js.map +1 -0
- package/dist/chunk-S46SKHMD.js +173 -0
- package/dist/chunk-S46SKHMD.js.map +1 -0
- package/dist/chunk-SFXTB7JL.js +190 -0
- package/dist/chunk-SFXTB7JL.js.map +1 -0
- package/dist/chunk-SGYXYMKZ.cjs +214 -0
- package/dist/chunk-SGYXYMKZ.cjs.map +1 -0
- package/dist/chunk-UGKYP6F3.cjs +296 -0
- package/dist/chunk-UGKYP6F3.cjs.map +1 -0
- package/dist/{chunk-HDVAMYSG.js → chunk-VFO2MUPI.js} +14 -29
- package/dist/chunk-VFO2MUPI.js.map +1 -0
- package/dist/chunk-WB6XDNU7.js +115 -0
- package/dist/chunk-WB6XDNU7.js.map +1 -0
- package/dist/core/index.cjs +144 -626
- package/dist/core/index.css +178 -3567
- package/dist/core/index.css.map +1 -1
- package/dist/core/index.d.cts +940 -902
- package/dist/core/index.d.ts +940 -902
- package/dist/core/index.js +6 -12
- package/dist/i18n/index.cjs +54 -49
- package/dist/i18n/index.d.cts +46 -11
- package/dist/i18n/index.d.ts +46 -11
- package/dist/i18n/index.js +2 -1
- package/dist/index-C8A3X92-.d.cts +1100 -0
- package/dist/index-wZPBPkOV.d.ts +1100 -0
- package/dist/index.cjs +506 -1004
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +6026 -16790
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +307 -22
- package/dist/index.d.ts +307 -22
- package/dist/index.js +274 -39
- package/dist/index.js.map +1 -1
- package/dist/marketing/index.cjs +33 -76
- package/dist/marketing/index.css +1896 -3234
- package/dist/marketing/index.css.map +1 -1
- package/dist/marketing/index.d.cts +3 -1351
- package/dist/marketing/index.d.ts +3 -1351
- package/dist/marketing/index.js +5 -8
- package/dist/motion/index.cjs +3 -20
- package/dist/motion/index.css +0 -580
- package/dist/motion/index.css.map +1 -1
- package/dist/motion/index.d.cts +1 -37
- package/dist/motion/index.d.ts +1 -37
- package/dist/motion/index.js +1 -2
- package/dist/nav/index.cjs +10 -35
- package/dist/nav/index.css +28 -580
- package/dist/nav/index.css.map +1 -1
- package/dist/nav/index.d.cts +2 -60
- package/dist/nav/index.d.ts +2 -60
- package/dist/nav/index.js +1 -2
- package/dist/report/index.cjs +1166 -175
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.d.cts +208 -5
- package/dist/report/index.d.ts +208 -5
- package/dist/report/index.js +1141 -3
- package/dist/report/index.js.map +1 -1
- package/dist/sections/index.cjs +8 -10
- package/dist/sections/index.cjs.map +1 -1
- package/dist/sections/index.css +0 -206
- package/dist/sections/index.css.map +1 -1
- package/dist/sections/index.js +2 -4
- package/dist/sections/index.js.map +1 -1
- package/dist/social-media/index.cjs +4 -0
- package/dist/social-media/index.cjs.map +1 -0
- package/dist/social-media/index.d.cts +2 -0
- package/dist/social-media/index.d.ts +2 -0
- package/dist/social-media/index.js +3 -0
- package/dist/social-media/index.js.map +1 -0
- package/dist/social-proof/index.cjs +4 -36
- package/dist/social-proof/index.css +3 -1106
- package/dist/social-proof/index.css.map +1 -1
- package/dist/social-proof/index.d.cts +26 -171
- package/dist/social-proof/index.d.ts +26 -171
- package/dist/social-proof/index.js +1 -5
- package/dist/styles/styles.css +602 -3044
- package/dist/theme/index.cjs +11 -19
- package/dist/theme/index.css +0 -352
- package/dist/theme/index.css.map +1 -1
- package/dist/theme/index.d.cts +1 -25
- package/dist/theme/index.d.ts +1 -25
- package/dist/theme/index.js +2 -2
- package/dist/web/client/index.cjs +10 -10
- package/dist/web/client/index.css +118 -0
- package/dist/web/client/index.css.map +1 -1
- package/dist/web/client/index.js +2 -2
- package/dist/web/index.cjs +10 -10
- package/dist/web/index.css +118 -0
- package/dist/web/index.css.map +1 -1
- package/dist/web/index.js +2 -2
- package/package.json +10 -4
- package/dist/AppearancePanel-UT57J69V.d.cts +0 -51
- package/dist/AppearancePanel-UT57J69V.d.ts +0 -51
- package/dist/ExportMenu-A2TLFiVv.d.cts +0 -311
- package/dist/ExportMenu-C8qck5AT.d.ts +0 -311
- package/dist/Select-BdZmK0Lt.d.cts +0 -66
- package/dist/Select-BdZmK0Lt.d.ts +0 -66
- package/dist/chart-types-BGVVO-zl.d.cts +0 -208
- package/dist/chart-types-BGVVO-zl.d.ts +0 -208
- package/dist/charts/index.css +0 -1167
- package/dist/charts/index.css.map +0 -1
- package/dist/chunk-3BAQDW3V.cjs +0 -1207
- package/dist/chunk-3BAQDW3V.cjs.map +0 -1
- package/dist/chunk-3NKRFUAR.js +0 -37
- package/dist/chunk-3NKRFUAR.js.map +0 -1
- package/dist/chunk-3TGSIILM.cjs +0 -201
- package/dist/chunk-3TGSIILM.cjs.map +0 -1
- package/dist/chunk-4GM5BGBN.cjs +0 -801
- package/dist/chunk-4GM5BGBN.cjs.map +0 -1
- package/dist/chunk-5LA3T22E.cjs +0 -562
- package/dist/chunk-5LA3T22E.cjs.map +0 -1
- package/dist/chunk-5SN66B2X.js +0 -2542
- package/dist/chunk-5SN66B2X.js.map +0 -1
- package/dist/chunk-6D22TFLA.cjs.map +0 -1
- package/dist/chunk-6H4DSTXR.js +0 -786
- package/dist/chunk-6H4DSTXR.js.map +0 -1
- package/dist/chunk-6HKQ5ILL.cjs +0 -1624
- package/dist/chunk-6HKQ5ILL.cjs.map +0 -1
- package/dist/chunk-7PX2AZ6Y.js +0 -39
- package/dist/chunk-7PX2AZ6Y.js.map +0 -1
- package/dist/chunk-7UZ5DETZ.js.map +0 -1
- package/dist/chunk-B6AVAX4F.js +0 -1415
- package/dist/chunk-B6AVAX4F.js.map +0 -1
- package/dist/chunk-BJZ2DKS5.cjs.map +0 -1
- package/dist/chunk-BUTQSDQH.js +0 -200
- package/dist/chunk-BUTQSDQH.js.map +0 -1
- package/dist/chunk-C2BCDNAV.js +0 -24
- package/dist/chunk-C2BCDNAV.js.map +0 -1
- package/dist/chunk-CJ2MKVAF.cjs +0 -46
- package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
- package/dist/chunk-E7D6EKJ4.cjs +0 -44
- package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
- package/dist/chunk-ECXBTUH6.cjs.map +0 -1
- package/dist/chunk-FAFAP4L5.js +0 -183
- package/dist/chunk-FAFAP4L5.js.map +0 -1
- package/dist/chunk-G2XGBO5V.cjs +0 -2565
- package/dist/chunk-G2XGBO5V.cjs.map +0 -1
- package/dist/chunk-GQELL2MF.cjs.map +0 -1
- package/dist/chunk-H2KQ3WSH.cjs.map +0 -1
- package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
- package/dist/chunk-HCZW5AJN.cjs +0 -234
- package/dist/chunk-HCZW5AJN.cjs.map +0 -1
- package/dist/chunk-HDVAMYSG.js.map +0 -1
- package/dist/chunk-HN4PHABT.js +0 -126
- package/dist/chunk-HN4PHABT.js.map +0 -1
- package/dist/chunk-LTPTW2US.cjs.map +0 -1
- package/dist/chunk-MDB2WCRQ.cjs +0 -137
- package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
- package/dist/chunk-MQRB634A.cjs +0 -34
- package/dist/chunk-MQRB634A.cjs.map +0 -1
- package/dist/chunk-NN3TUHIH.js +0 -28
- package/dist/chunk-NN3TUHIH.js.map +0 -1
- package/dist/chunk-OWS2KAXZ.js +0 -701
- package/dist/chunk-OWS2KAXZ.js.map +0 -1
- package/dist/chunk-P5BOFE5A.js.map +0 -1
- package/dist/chunk-PUPSK3DI.cjs +0 -216
- package/dist/chunk-PUPSK3DI.cjs.map +0 -1
- package/dist/chunk-Q2MFGYTE.cjs +0 -1449
- package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
- package/dist/chunk-Q75DBVDY.cjs +0 -68
- package/dist/chunk-Q75DBVDY.cjs.map +0 -1
- package/dist/chunk-QALDZ7WQ.js.map +0 -1
- package/dist/chunk-QWE2RNCS.js +0 -1195
- package/dist/chunk-QWE2RNCS.js.map +0 -1
- package/dist/chunk-RQUFZAZ7.js +0 -1608
- package/dist/chunk-RQUFZAZ7.js.map +0 -1
- package/dist/chunk-SICKWUWB.js.map +0 -1
- package/dist/chunk-TCFC7XTB.js +0 -212
- package/dist/chunk-TCFC7XTB.js.map +0 -1
- package/dist/chunk-UTVXGAQP.cjs +0 -2437
- package/dist/chunk-UTVXGAQP.cjs.map +0 -1
- package/dist/chunk-UVEMY3FQ.cjs +0 -717
- package/dist/chunk-UVEMY3FQ.cjs.map +0 -1
- package/dist/chunk-VFJZQQZU.js.map +0 -1
- package/dist/chunk-WH7PYHZY.cjs +0 -35
- package/dist/chunk-WH7PYHZY.cjs.map +0 -1
- package/dist/chunk-WYH4TKS5.js.map +0 -1
- package/dist/chunk-XEX2AEZK.cjs.map +0 -1
- package/dist/chunk-XPTVHPCN.js +0 -2320
- package/dist/chunk-XPTVHPCN.js.map +0 -1
- package/dist/chunk-XWPDRMZG.js +0 -62
- package/dist/chunk-XWPDRMZG.js.map +0 -1
- package/dist/chunk-Y26OHHMX.js.map +0 -1
- package/dist/chunk-YJ6C3EKW.js.map +0 -1
- package/dist/motion-C651Ry6d.d.cts +0 -832
- package/dist/motion-C651Ry6d.d.ts +0 -832
- package/dist/report/index.css +0 -1239
- package/dist/report/index.css.map +0 -1
- /package/dist/{chunk-6UNG76Y2.js.map → chunk-2VVRZBUR.cjs.map} +0 -0
- /package/dist/{chunk-YTYDQBVY.cjs.map → chunk-K526GN7P.js.map} +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { IntlProvider, useIntl } from 'react-intl';
|
|
2
|
+
export { FormattedDate, FormattedMessage, FormattedNumber, defineMessages } from 'react-intl';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
|
|
6
|
+
// src/i18n/IntlProvider.tsx
|
|
7
|
+
var defaultMessages = {
|
|
8
|
+
// Common
|
|
9
|
+
"ds.common.loading": "Loading...",
|
|
10
|
+
"ds.common.error": "An error occurred",
|
|
11
|
+
"ds.common.retry": "Retry",
|
|
12
|
+
"ds.common.cancel": "Cancel",
|
|
13
|
+
"ds.common.confirm": "Confirm",
|
|
14
|
+
"ds.common.close": "Close",
|
|
15
|
+
"ds.common.save": "Save",
|
|
16
|
+
"ds.common.delete": "Delete",
|
|
17
|
+
"ds.common.edit": "Edit",
|
|
18
|
+
"ds.common.submit": "Submit",
|
|
19
|
+
"ds.common.required": "Required",
|
|
20
|
+
"ds.common.optional": "Optional",
|
|
21
|
+
// Alert
|
|
22
|
+
"ds.alert.dismissLabel": "Dismiss alert",
|
|
23
|
+
"ds.alert.successTitle": "Success",
|
|
24
|
+
"ds.alert.errorTitle": "Error",
|
|
25
|
+
"ds.alert.warningTitle": "Warning",
|
|
26
|
+
"ds.alert.infoTitle": "Information",
|
|
27
|
+
// Toast
|
|
28
|
+
"ds.toast.dismissLabel": "Dismiss notification",
|
|
29
|
+
// Dialog
|
|
30
|
+
"ds.dialog.closeLabel": "Close dialog",
|
|
31
|
+
// Form
|
|
32
|
+
"ds.form.showPassword": "Show password",
|
|
33
|
+
"ds.form.hidePassword": "Hide password",
|
|
34
|
+
"ds.form.clearInput": "Clear input",
|
|
35
|
+
"ds.form.invalidEmail": "Please enter a valid email address",
|
|
36
|
+
"ds.form.passwordRequired": "Password is required",
|
|
37
|
+
// Auth
|
|
38
|
+
"ds.auth.loginTitle": "Sign in to your account",
|
|
39
|
+
"ds.auth.signupTitle": "Create your account",
|
|
40
|
+
"ds.auth.forgotPasswordTitle": "Reset your password",
|
|
41
|
+
"ds.auth.emailLabel": "Email address",
|
|
42
|
+
"ds.auth.passwordLabel": "Password",
|
|
43
|
+
"ds.auth.rememberMe": "Remember me",
|
|
44
|
+
"ds.auth.forgotPassword": "Forgot your password?",
|
|
45
|
+
"ds.auth.signIn": "Sign in",
|
|
46
|
+
"ds.auth.signUp": "Sign up",
|
|
47
|
+
"ds.auth.sendResetLink": "Send reset link",
|
|
48
|
+
"ds.auth.backToLogin": "Back to login",
|
|
49
|
+
// Navigation
|
|
50
|
+
"ds.nav.menuLabel": "Navigation menu",
|
|
51
|
+
"ds.nav.toggleSidebar": "Toggle sidebar",
|
|
52
|
+
"ds.nav.expandSubmenu": "Expand submenu",
|
|
53
|
+
"ds.nav.collapseSubmenu": "Collapse submenu",
|
|
54
|
+
// Report
|
|
55
|
+
"ds.report.confidenceLabel": "Confidence score",
|
|
56
|
+
"ds.report.dataCoverageLabel": "Data coverage",
|
|
57
|
+
"ds.report.insufficientData": "Insufficient data",
|
|
58
|
+
"ds.report.exportPdf": "Export as PDF",
|
|
59
|
+
"ds.report.exportCsv": "Export as CSV",
|
|
60
|
+
"ds.report.exportPptx": "Export as PowerPoint",
|
|
61
|
+
// Appearance
|
|
62
|
+
"ds.appearance.themeLabel": "Theme",
|
|
63
|
+
"ds.appearance.darkTheme": "Dark",
|
|
64
|
+
"ds.appearance.lightTheme": "Light",
|
|
65
|
+
"ds.appearance.highContrastTheme": "High contrast",
|
|
66
|
+
"ds.appearance.densityLabel": "Density",
|
|
67
|
+
"ds.appearance.comfortableDensity": "Comfortable",
|
|
68
|
+
"ds.appearance.compactDensity": "Compact",
|
|
69
|
+
// Pagination
|
|
70
|
+
"ds.pagination.previous": "Previous",
|
|
71
|
+
"ds.pagination.next": "Next",
|
|
72
|
+
"ds.pagination.goToPreviousPage": "Go to previous page",
|
|
73
|
+
"ds.pagination.goToNextPage": "Go to next page",
|
|
74
|
+
// Calendar
|
|
75
|
+
"ds.calendar.previousMonth": "Previous month",
|
|
76
|
+
"ds.calendar.nextMonth": "Next month",
|
|
77
|
+
// Carousel
|
|
78
|
+
"ds.carousel.previousSlide": "Previous slide",
|
|
79
|
+
"ds.carousel.nextSlide": "Next slide",
|
|
80
|
+
// Methodology
|
|
81
|
+
"ds.methodology.title": "Methodology",
|
|
82
|
+
"ds.methodology.sampleSize": "Sample Size",
|
|
83
|
+
"ds.methodology.dataSources": "Data Sources",
|
|
84
|
+
"ds.methodology.calculation": "Calculation",
|
|
85
|
+
// BookingEmbed
|
|
86
|
+
"BookingEmbed.loading": "Loading calendar...",
|
|
87
|
+
"BookingEmbed.errorTitle": "Calendar unavailable",
|
|
88
|
+
"BookingEmbed.errorDescription": "We couldn't load the calendar. Please try again or open it in a new tab.",
|
|
89
|
+
"BookingEmbed.openInNewTab": "Open in new tab"
|
|
90
|
+
};
|
|
91
|
+
function DSIntlProvider({
|
|
92
|
+
locale = "en",
|
|
93
|
+
messages,
|
|
94
|
+
intlConfig,
|
|
95
|
+
children
|
|
96
|
+
}) {
|
|
97
|
+
const mergedMessages = {
|
|
98
|
+
...defaultMessages,
|
|
99
|
+
...messages
|
|
100
|
+
};
|
|
101
|
+
return /* @__PURE__ */ jsx(
|
|
102
|
+
IntlProvider,
|
|
103
|
+
{
|
|
104
|
+
locale,
|
|
105
|
+
messages: mergedMessages,
|
|
106
|
+
defaultLocale: "en",
|
|
107
|
+
onError: (err) => {
|
|
108
|
+
if (process.env.NODE_ENV === "development") {
|
|
109
|
+
if (err.code !== "MISSING_TRANSLATION") {
|
|
110
|
+
console.error(err);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
...intlConfig,
|
|
115
|
+
children
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
function useMessage() {
|
|
120
|
+
const intl = useIntl();
|
|
121
|
+
const formatMessage = useCallback(
|
|
122
|
+
(descriptor, values) => {
|
|
123
|
+
return intl.formatMessage(descriptor, values);
|
|
124
|
+
},
|
|
125
|
+
[intl]
|
|
126
|
+
);
|
|
127
|
+
return formatMessage;
|
|
128
|
+
}
|
|
129
|
+
function useLocale() {
|
|
130
|
+
const intl = useIntl();
|
|
131
|
+
return intl.locale;
|
|
132
|
+
}
|
|
133
|
+
function useIsRTL() {
|
|
134
|
+
const locale = useLocale();
|
|
135
|
+
const rtlLocales = [
|
|
136
|
+
"ar",
|
|
137
|
+
// Arabic
|
|
138
|
+
"he",
|
|
139
|
+
// Hebrew
|
|
140
|
+
"fa",
|
|
141
|
+
// Persian/Farsi
|
|
142
|
+
"ur",
|
|
143
|
+
// Urdu
|
|
144
|
+
"ps",
|
|
145
|
+
// Pashto
|
|
146
|
+
"sd",
|
|
147
|
+
// Sindhi
|
|
148
|
+
"yi"
|
|
149
|
+
// Yiddish
|
|
150
|
+
];
|
|
151
|
+
return rtlLocales.some((rtl) => locale === rtl || locale.startsWith(`${rtl}-`));
|
|
152
|
+
}
|
|
153
|
+
function useTextDirection() {
|
|
154
|
+
const isRTL = useIsRTL();
|
|
155
|
+
return isRTL ? "rtl" : "ltr";
|
|
156
|
+
}
|
|
157
|
+
function useNumberFormat() {
|
|
158
|
+
const intl = useIntl();
|
|
159
|
+
const formatNumber = useCallback(
|
|
160
|
+
(value, options) => {
|
|
161
|
+
return intl.formatNumber(value, options);
|
|
162
|
+
},
|
|
163
|
+
[intl]
|
|
164
|
+
);
|
|
165
|
+
return formatNumber;
|
|
166
|
+
}
|
|
167
|
+
function useDateFormat() {
|
|
168
|
+
const intl = useIntl();
|
|
169
|
+
const formatDate = useCallback(
|
|
170
|
+
(value, options) => {
|
|
171
|
+
return intl.formatDate(value, options);
|
|
172
|
+
},
|
|
173
|
+
[intl]
|
|
174
|
+
);
|
|
175
|
+
return formatDate;
|
|
176
|
+
}
|
|
177
|
+
function useRelativeTime() {
|
|
178
|
+
const intl = useIntl();
|
|
179
|
+
const formatRelativeTime = useCallback(
|
|
180
|
+
(value, unit, options) => {
|
|
181
|
+
return intl.formatRelativeTime(value, unit, options);
|
|
182
|
+
},
|
|
183
|
+
[intl]
|
|
184
|
+
);
|
|
185
|
+
return formatRelativeTime;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export { DSIntlProvider, useDateFormat, useIsRTL, useLocale, useMessage, useNumberFormat, useRelativeTime, useTextDirection };
|
|
189
|
+
//# sourceMappingURL=out.js.map
|
|
190
|
+
//# sourceMappingURL=chunk-SFXTB7JL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/IntlProvider.tsx","../src/i18n/useMessage.ts","../src/i18n/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Design System IntlProvider\n *\n * Wraps react-intl's IntlProvider with design system defaults.\n * Components receive i18n context through this provider.\n *\n * @example\n * ```tsx\n * import { DSIntlProvider } from '@salesmind-ai/design-system';\n *\n * // With default English messages\n * <DSIntlProvider>\n * <App />\n * </DSIntlProvider>\n *\n * // With custom locale and messages\n * <DSIntlProvider locale=\"fr\" messages={frenchMessages}>\n * <App />\n * </DSIntlProvider>\n * ```\n */\n\nimport React from 'react';\nimport { IntlProvider, IntlConfig } from 'react-intl';\n\n/**\n * Default English messages (extracted from component defaults)\n * These serve as fallbacks when no messages are provided.\n */\nconst defaultMessages: Record<string, string> = {\n // Common\n 'ds.common.loading': 'Loading...',\n 'ds.common.error': 'An error occurred',\n 'ds.common.retry': 'Retry',\n 'ds.common.cancel': 'Cancel',\n 'ds.common.confirm': 'Confirm',\n 'ds.common.close': 'Close',\n 'ds.common.save': 'Save',\n 'ds.common.delete': 'Delete',\n 'ds.common.edit': 'Edit',\n 'ds.common.submit': 'Submit',\n 'ds.common.required': 'Required',\n 'ds.common.optional': 'Optional',\n\n // Alert\n 'ds.alert.dismissLabel': 'Dismiss alert',\n 'ds.alert.successTitle': 'Success',\n 'ds.alert.errorTitle': 'Error',\n 'ds.alert.warningTitle': 'Warning',\n 'ds.alert.infoTitle': 'Information',\n\n // Toast\n 'ds.toast.dismissLabel': 'Dismiss notification',\n\n // Dialog\n 'ds.dialog.closeLabel': 'Close dialog',\n\n // Form\n 'ds.form.showPassword': 'Show password',\n 'ds.form.hidePassword': 'Hide password',\n 'ds.form.clearInput': 'Clear input',\n 'ds.form.invalidEmail': 'Please enter a valid email address',\n 'ds.form.passwordRequired': 'Password is required',\n\n // Auth\n 'ds.auth.loginTitle': 'Sign in to your account',\n 'ds.auth.signupTitle': 'Create your account',\n 'ds.auth.forgotPasswordTitle': 'Reset your password',\n 'ds.auth.emailLabel': 'Email address',\n 'ds.auth.passwordLabel': 'Password',\n 'ds.auth.rememberMe': 'Remember me',\n 'ds.auth.forgotPassword': 'Forgot your password?',\n 'ds.auth.signIn': 'Sign in',\n 'ds.auth.signUp': 'Sign up',\n 'ds.auth.sendResetLink': 'Send reset link',\n 'ds.auth.backToLogin': 'Back to login',\n\n // Navigation\n 'ds.nav.menuLabel': 'Navigation menu',\n 'ds.nav.toggleSidebar': 'Toggle sidebar',\n 'ds.nav.expandSubmenu': 'Expand submenu',\n 'ds.nav.collapseSubmenu': 'Collapse submenu',\n\n // Report\n 'ds.report.confidenceLabel': 'Confidence score',\n 'ds.report.dataCoverageLabel': 'Data coverage',\n 'ds.report.insufficientData': 'Insufficient data',\n 'ds.report.exportPdf': 'Export as PDF',\n 'ds.report.exportCsv': 'Export as CSV',\n 'ds.report.exportPptx': 'Export as PowerPoint',\n\n // Appearance\n 'ds.appearance.themeLabel': 'Theme',\n 'ds.appearance.darkTheme': 'Dark',\n 'ds.appearance.lightTheme': 'Light',\n 'ds.appearance.highContrastTheme': 'High contrast',\n 'ds.appearance.densityLabel': 'Density',\n 'ds.appearance.comfortableDensity': 'Comfortable',\n 'ds.appearance.compactDensity': 'Compact',\n\n // Pagination\n 'ds.pagination.previous': 'Previous',\n 'ds.pagination.next': 'Next',\n 'ds.pagination.goToPreviousPage': 'Go to previous page',\n 'ds.pagination.goToNextPage': 'Go to next page',\n\n // Calendar\n 'ds.calendar.previousMonth': 'Previous month',\n 'ds.calendar.nextMonth': 'Next month',\n\n // Carousel\n 'ds.carousel.previousSlide': 'Previous slide',\n 'ds.carousel.nextSlide': 'Next slide',\n\n // Methodology\n 'ds.methodology.title': 'Methodology',\n 'ds.methodology.sampleSize': 'Sample Size',\n 'ds.methodology.dataSources': 'Data Sources',\n 'ds.methodology.calculation': 'Calculation',\n\n // BookingEmbed\n 'BookingEmbed.loading': 'Loading calendar...',\n 'BookingEmbed.errorTitle': 'Calendar unavailable',\n 'BookingEmbed.errorDescription': \"We couldn't load the calendar. Please try again or open it in a new tab.\",\n 'BookingEmbed.openInNewTab': 'Open in new tab',\n};\n\nexport interface DSIntlProviderProps {\n /**\n * Locale identifier (e.g., 'en', 'fr', 'de')\n * @default 'en'\n */\n locale?: string;\n\n /**\n * Translated messages for the locale.\n * If not provided, defaults to English messages.\n */\n messages?: Record<string, string>;\n\n /**\n * Additional IntlProvider configuration\n */\n intlConfig?: Partial<IntlConfig>;\n\n /**\n * Child components\n */\n children: React.ReactNode;\n}\n\n/**\n * Design System IntlProvider\n *\n * Provides internationalization context to all design system components.\n * Wrap your app with this provider to enable i18n support.\n */\nexport function DSIntlProvider({\n locale = 'en',\n messages,\n intlConfig,\n children,\n}: DSIntlProviderProps) {\n // Merge provided messages with defaults (provided messages take precedence)\n const mergedMessages = {\n ...defaultMessages,\n ...messages,\n };\n\n return (\n <IntlProvider\n locale={locale}\n messages={mergedMessages}\n defaultLocale=\"en\"\n onError={(err) => {\n // Only log missing translation errors in development\n if (process.env.NODE_ENV === 'development') {\n // Filter out \"MISSING_TRANSLATION\" errors for default messages\n if (err.code !== 'MISSING_TRANSLATION') {\n console.error(err);\n }\n }\n }}\n {...intlConfig}\n >\n {children}\n </IntlProvider>\n );\n}\n\nexport default DSIntlProvider;\n","/**\n * Design System Message Hooks\n *\n * Provides hooks for accessing internationalized messages in components.\n * These hooks are optional - components can still accept string props directly.\n *\n * @example\n * ```tsx\n * import { useMessage, commonMessages } from '@salesmind-ai/design-system';\n *\n * function MyComponent() {\n * const t = useMessage();\n * return <button>{t(commonMessages.save)}</button>;\n * }\n * ```\n */\n\nimport { useIntl, MessageDescriptor, PrimitiveType } from 'react-intl';\nimport { useCallback } from 'react';\n\n/**\n * Format message values type\n */\nexport type MessageValues = Record<string, PrimitiveType>;\n\n/**\n * Hook to get a message formatter function\n *\n * @returns A function that formats messages\n *\n * @example\n * ```tsx\n * const t = useMessage();\n * return <span>{t(commonMessages.loading)}</span>;\n * ```\n */\nexport function useMessage() {\n const intl = useIntl();\n\n const formatMessage = useCallback(\n (descriptor: MessageDescriptor, values?: MessageValues): string => {\n return intl.formatMessage(descriptor, values);\n },\n [intl],\n );\n\n return formatMessage;\n}\n\n/**\n * Hook to get the current locale\n *\n * @returns The current locale string (e.g., 'en', 'fr')\n *\n * @example\n * ```tsx\n * const locale = useLocale();\n * console.log(locale); // 'en'\n * ```\n */\nexport function useLocale(): string {\n const intl = useIntl();\n return intl.locale;\n}\n\n/**\n * Hook to check if RTL is needed for current locale\n *\n * @returns true if the current locale is RTL\n *\n * @example\n * ```tsx\n * const isRTL = useIsRTL();\n * return <div style={{ direction: isRTL ? 'rtl' : 'ltr' }}>...</div>;\n * ```\n */\nexport function useIsRTL(): boolean {\n const locale = useLocale();\n\n // RTL locales\n const rtlLocales = [\n 'ar', // Arabic\n 'he', // Hebrew\n 'fa', // Persian/Farsi\n 'ur', // Urdu\n 'ps', // Pashto\n 'sd', // Sindhi\n 'yi', // Yiddish\n ];\n\n return rtlLocales.some((rtl) => locale === rtl || locale.startsWith(`${rtl}-`));\n}\n\n/**\n * Hook to get the current text direction\n *\n * @returns 'rtl' or 'ltr' based on locale\n *\n * @example\n * ```tsx\n * const dir = useTextDirection();\n * return <div dir={dir}>...</div>;\n * ```\n */\nexport function useTextDirection(): 'rtl' | 'ltr' {\n const isRTL = useIsRTL();\n return isRTL ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook to format a number according to locale\n *\n * @returns A number formatter function\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormat();\n * return <span>{formatNumber(1234.56)}</span>; // \"1,234.56\" in en-US\n * ```\n */\nexport function useNumberFormat() {\n const intl = useIntl();\n\n const formatNumber = useCallback(\n (value: number, options?: Intl.NumberFormatOptions): string => {\n return intl.formatNumber(value, options as Parameters<typeof intl.formatNumber>[1]);\n },\n [intl],\n );\n\n return formatNumber;\n}\n\n/**\n * Hook to format a date according to locale\n *\n * @returns A date formatter function\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormat();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormat() {\n const intl = useIntl();\n\n const formatDate = useCallback(\n (value: Date | number, options?: Intl.DateTimeFormatOptions): string => {\n return intl.formatDate(value, options);\n },\n [intl],\n );\n\n return formatDate;\n}\n\n/**\n * Hook to format a relative time (e.g., \"2 days ago\")\n *\n * @returns A relative time formatter function\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTime();\n * return <span>{formatRelative(-2, 'day')}</span>; // \"2 days ago\"\n * ```\n */\nexport function useRelativeTime() {\n const intl = useIntl();\n\n const formatRelativeTime = useCallback(\n (\n value: number,\n unit: Intl.RelativeTimeFormatUnit,\n options?: Intl.RelativeTimeFormatOptions,\n ): string => {\n return intl.formatRelativeTime(value, unit, options as Parameters<typeof intl.formatRelativeTime>[2]);\n },\n [intl],\n );\n\n return formatRelativeTime;\n}\n","/**\n * Design System Internationalization Module\n *\n * Provides i18n infrastructure for design system components.\n *\n * @module i18n\n */\n\n// Provider\nexport { DSIntlProvider, type DSIntlProviderProps } from './IntlProvider';\n\n// Hooks\nexport {\n useMessage,\n useLocale,\n useIsRTL,\n useTextDirection,\n useNumberFormat,\n useDateFormat,\n useRelativeTime,\n type MessageValues,\n} from './useMessage';\n\n// Messages\nexport {\n commonMessages,\n alertMessages,\n toastMessages,\n dialogMessages,\n formMessages,\n authMessages,\n navigationMessages,\n reportMessages,\n appearanceMessages,\n paginationMessages,\n calendarMessages,\n carouselMessages,\n methodologyMessages,\n bookingEmbedMessages,\n allMessages,\n} from './messages';\n\n// Re-export react-intl types for convenience\nexport type { MessageDescriptor } from 'react-intl';\nexport { defineMessages, FormattedMessage, FormattedNumber, FormattedDate } from 'react-intl';\n"]}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var reactIntl = require('react-intl');
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
// src/i18n/IntlProvider.tsx
|
|
8
|
+
var defaultMessages = {
|
|
9
|
+
// Common
|
|
10
|
+
"ds.common.loading": "Loading...",
|
|
11
|
+
"ds.common.error": "An error occurred",
|
|
12
|
+
"ds.common.retry": "Retry",
|
|
13
|
+
"ds.common.cancel": "Cancel",
|
|
14
|
+
"ds.common.confirm": "Confirm",
|
|
15
|
+
"ds.common.close": "Close",
|
|
16
|
+
"ds.common.save": "Save",
|
|
17
|
+
"ds.common.delete": "Delete",
|
|
18
|
+
"ds.common.edit": "Edit",
|
|
19
|
+
"ds.common.submit": "Submit",
|
|
20
|
+
"ds.common.required": "Required",
|
|
21
|
+
"ds.common.optional": "Optional",
|
|
22
|
+
// Alert
|
|
23
|
+
"ds.alert.dismissLabel": "Dismiss alert",
|
|
24
|
+
"ds.alert.successTitle": "Success",
|
|
25
|
+
"ds.alert.errorTitle": "Error",
|
|
26
|
+
"ds.alert.warningTitle": "Warning",
|
|
27
|
+
"ds.alert.infoTitle": "Information",
|
|
28
|
+
// Toast
|
|
29
|
+
"ds.toast.dismissLabel": "Dismiss notification",
|
|
30
|
+
// Dialog
|
|
31
|
+
"ds.dialog.closeLabel": "Close dialog",
|
|
32
|
+
// Form
|
|
33
|
+
"ds.form.showPassword": "Show password",
|
|
34
|
+
"ds.form.hidePassword": "Hide password",
|
|
35
|
+
"ds.form.clearInput": "Clear input",
|
|
36
|
+
"ds.form.invalidEmail": "Please enter a valid email address",
|
|
37
|
+
"ds.form.passwordRequired": "Password is required",
|
|
38
|
+
// Auth
|
|
39
|
+
"ds.auth.loginTitle": "Sign in to your account",
|
|
40
|
+
"ds.auth.signupTitle": "Create your account",
|
|
41
|
+
"ds.auth.forgotPasswordTitle": "Reset your password",
|
|
42
|
+
"ds.auth.emailLabel": "Email address",
|
|
43
|
+
"ds.auth.passwordLabel": "Password",
|
|
44
|
+
"ds.auth.rememberMe": "Remember me",
|
|
45
|
+
"ds.auth.forgotPassword": "Forgot your password?",
|
|
46
|
+
"ds.auth.signIn": "Sign in",
|
|
47
|
+
"ds.auth.signUp": "Sign up",
|
|
48
|
+
"ds.auth.sendResetLink": "Send reset link",
|
|
49
|
+
"ds.auth.backToLogin": "Back to login",
|
|
50
|
+
// Navigation
|
|
51
|
+
"ds.nav.menuLabel": "Navigation menu",
|
|
52
|
+
"ds.nav.toggleSidebar": "Toggle sidebar",
|
|
53
|
+
"ds.nav.expandSubmenu": "Expand submenu",
|
|
54
|
+
"ds.nav.collapseSubmenu": "Collapse submenu",
|
|
55
|
+
// Report
|
|
56
|
+
"ds.report.confidenceLabel": "Confidence score",
|
|
57
|
+
"ds.report.dataCoverageLabel": "Data coverage",
|
|
58
|
+
"ds.report.insufficientData": "Insufficient data",
|
|
59
|
+
"ds.report.exportPdf": "Export as PDF",
|
|
60
|
+
"ds.report.exportCsv": "Export as CSV",
|
|
61
|
+
"ds.report.exportPptx": "Export as PowerPoint",
|
|
62
|
+
// Appearance
|
|
63
|
+
"ds.appearance.themeLabel": "Theme",
|
|
64
|
+
"ds.appearance.darkTheme": "Dark",
|
|
65
|
+
"ds.appearance.lightTheme": "Light",
|
|
66
|
+
"ds.appearance.highContrastTheme": "High contrast",
|
|
67
|
+
"ds.appearance.densityLabel": "Density",
|
|
68
|
+
"ds.appearance.comfortableDensity": "Comfortable",
|
|
69
|
+
"ds.appearance.compactDensity": "Compact",
|
|
70
|
+
// Pagination
|
|
71
|
+
"ds.pagination.previous": "Previous",
|
|
72
|
+
"ds.pagination.next": "Next",
|
|
73
|
+
"ds.pagination.goToPreviousPage": "Go to previous page",
|
|
74
|
+
"ds.pagination.goToNextPage": "Go to next page",
|
|
75
|
+
// Calendar
|
|
76
|
+
"ds.calendar.previousMonth": "Previous month",
|
|
77
|
+
"ds.calendar.nextMonth": "Next month",
|
|
78
|
+
// Carousel
|
|
79
|
+
"ds.carousel.previousSlide": "Previous slide",
|
|
80
|
+
"ds.carousel.nextSlide": "Next slide",
|
|
81
|
+
// Methodology
|
|
82
|
+
"ds.methodology.title": "Methodology",
|
|
83
|
+
"ds.methodology.sampleSize": "Sample Size",
|
|
84
|
+
"ds.methodology.dataSources": "Data Sources",
|
|
85
|
+
"ds.methodology.calculation": "Calculation",
|
|
86
|
+
// BookingEmbed
|
|
87
|
+
"BookingEmbed.loading": "Loading calendar...",
|
|
88
|
+
"BookingEmbed.errorTitle": "Calendar unavailable",
|
|
89
|
+
"BookingEmbed.errorDescription": "We couldn't load the calendar. Please try again or open it in a new tab.",
|
|
90
|
+
"BookingEmbed.openInNewTab": "Open in new tab"
|
|
91
|
+
};
|
|
92
|
+
function DSIntlProvider({
|
|
93
|
+
locale = "en",
|
|
94
|
+
messages,
|
|
95
|
+
intlConfig,
|
|
96
|
+
children
|
|
97
|
+
}) {
|
|
98
|
+
const mergedMessages = {
|
|
99
|
+
...defaultMessages,
|
|
100
|
+
...messages
|
|
101
|
+
};
|
|
102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
+
reactIntl.IntlProvider,
|
|
104
|
+
{
|
|
105
|
+
locale,
|
|
106
|
+
messages: mergedMessages,
|
|
107
|
+
defaultLocale: "en",
|
|
108
|
+
onError: (err) => {
|
|
109
|
+
if (process.env.NODE_ENV === "development") {
|
|
110
|
+
if (err.code !== "MISSING_TRANSLATION") {
|
|
111
|
+
console.error(err);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
...intlConfig,
|
|
116
|
+
children
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
function useMessage() {
|
|
121
|
+
const intl = reactIntl.useIntl();
|
|
122
|
+
const formatMessage = react.useCallback(
|
|
123
|
+
(descriptor, values) => {
|
|
124
|
+
return intl.formatMessage(descriptor, values);
|
|
125
|
+
},
|
|
126
|
+
[intl]
|
|
127
|
+
);
|
|
128
|
+
return formatMessage;
|
|
129
|
+
}
|
|
130
|
+
function useLocale() {
|
|
131
|
+
const intl = reactIntl.useIntl();
|
|
132
|
+
return intl.locale;
|
|
133
|
+
}
|
|
134
|
+
function useIsRTL() {
|
|
135
|
+
const locale = useLocale();
|
|
136
|
+
const rtlLocales = [
|
|
137
|
+
"ar",
|
|
138
|
+
// Arabic
|
|
139
|
+
"he",
|
|
140
|
+
// Hebrew
|
|
141
|
+
"fa",
|
|
142
|
+
// Persian/Farsi
|
|
143
|
+
"ur",
|
|
144
|
+
// Urdu
|
|
145
|
+
"ps",
|
|
146
|
+
// Pashto
|
|
147
|
+
"sd",
|
|
148
|
+
// Sindhi
|
|
149
|
+
"yi"
|
|
150
|
+
// Yiddish
|
|
151
|
+
];
|
|
152
|
+
return rtlLocales.some((rtl) => locale === rtl || locale.startsWith(`${rtl}-`));
|
|
153
|
+
}
|
|
154
|
+
function useTextDirection() {
|
|
155
|
+
const isRTL = useIsRTL();
|
|
156
|
+
return isRTL ? "rtl" : "ltr";
|
|
157
|
+
}
|
|
158
|
+
function useNumberFormat() {
|
|
159
|
+
const intl = reactIntl.useIntl();
|
|
160
|
+
const formatNumber = react.useCallback(
|
|
161
|
+
(value, options) => {
|
|
162
|
+
return intl.formatNumber(value, options);
|
|
163
|
+
},
|
|
164
|
+
[intl]
|
|
165
|
+
);
|
|
166
|
+
return formatNumber;
|
|
167
|
+
}
|
|
168
|
+
function useDateFormat() {
|
|
169
|
+
const intl = reactIntl.useIntl();
|
|
170
|
+
const formatDate = react.useCallback(
|
|
171
|
+
(value, options) => {
|
|
172
|
+
return intl.formatDate(value, options);
|
|
173
|
+
},
|
|
174
|
+
[intl]
|
|
175
|
+
);
|
|
176
|
+
return formatDate;
|
|
177
|
+
}
|
|
178
|
+
function useRelativeTime() {
|
|
179
|
+
const intl = reactIntl.useIntl();
|
|
180
|
+
const formatRelativeTime = react.useCallback(
|
|
181
|
+
(value, unit, options) => {
|
|
182
|
+
return intl.formatRelativeTime(value, unit, options);
|
|
183
|
+
},
|
|
184
|
+
[intl]
|
|
185
|
+
);
|
|
186
|
+
return formatRelativeTime;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
Object.defineProperty(exports, "FormattedDate", {
|
|
190
|
+
enumerable: true,
|
|
191
|
+
get: function () { return reactIntl.FormattedDate; }
|
|
192
|
+
});
|
|
193
|
+
Object.defineProperty(exports, "FormattedMessage", {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
get: function () { return reactIntl.FormattedMessage; }
|
|
196
|
+
});
|
|
197
|
+
Object.defineProperty(exports, "FormattedNumber", {
|
|
198
|
+
enumerable: true,
|
|
199
|
+
get: function () { return reactIntl.FormattedNumber; }
|
|
200
|
+
});
|
|
201
|
+
Object.defineProperty(exports, "defineMessages", {
|
|
202
|
+
enumerable: true,
|
|
203
|
+
get: function () { return reactIntl.defineMessages; }
|
|
204
|
+
});
|
|
205
|
+
exports.DSIntlProvider = DSIntlProvider;
|
|
206
|
+
exports.useDateFormat = useDateFormat;
|
|
207
|
+
exports.useIsRTL = useIsRTL;
|
|
208
|
+
exports.useLocale = useLocale;
|
|
209
|
+
exports.useMessage = useMessage;
|
|
210
|
+
exports.useNumberFormat = useNumberFormat;
|
|
211
|
+
exports.useRelativeTime = useRelativeTime;
|
|
212
|
+
exports.useTextDirection = useTextDirection;
|
|
213
|
+
//# sourceMappingURL=out.js.map
|
|
214
|
+
//# sourceMappingURL=chunk-SGYXYMKZ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/IntlProvider.tsx","../src/i18n/useMessage.ts","../src/i18n/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Design System IntlProvider\n *\n * Wraps react-intl's IntlProvider with design system defaults.\n * Components receive i18n context through this provider.\n *\n * @example\n * ```tsx\n * import { DSIntlProvider } from '@salesmind-ai/design-system';\n *\n * // With default English messages\n * <DSIntlProvider>\n * <App />\n * </DSIntlProvider>\n *\n * // With custom locale and messages\n * <DSIntlProvider locale=\"fr\" messages={frenchMessages}>\n * <App />\n * </DSIntlProvider>\n * ```\n */\n\nimport React from 'react';\nimport { IntlProvider, IntlConfig } from 'react-intl';\n\n/**\n * Default English messages (extracted from component defaults)\n * These serve as fallbacks when no messages are provided.\n */\nconst defaultMessages: Record<string, string> = {\n // Common\n 'ds.common.loading': 'Loading...',\n 'ds.common.error': 'An error occurred',\n 'ds.common.retry': 'Retry',\n 'ds.common.cancel': 'Cancel',\n 'ds.common.confirm': 'Confirm',\n 'ds.common.close': 'Close',\n 'ds.common.save': 'Save',\n 'ds.common.delete': 'Delete',\n 'ds.common.edit': 'Edit',\n 'ds.common.submit': 'Submit',\n 'ds.common.required': 'Required',\n 'ds.common.optional': 'Optional',\n\n // Alert\n 'ds.alert.dismissLabel': 'Dismiss alert',\n 'ds.alert.successTitle': 'Success',\n 'ds.alert.errorTitle': 'Error',\n 'ds.alert.warningTitle': 'Warning',\n 'ds.alert.infoTitle': 'Information',\n\n // Toast\n 'ds.toast.dismissLabel': 'Dismiss notification',\n\n // Dialog\n 'ds.dialog.closeLabel': 'Close dialog',\n\n // Form\n 'ds.form.showPassword': 'Show password',\n 'ds.form.hidePassword': 'Hide password',\n 'ds.form.clearInput': 'Clear input',\n 'ds.form.invalidEmail': 'Please enter a valid email address',\n 'ds.form.passwordRequired': 'Password is required',\n\n // Auth\n 'ds.auth.loginTitle': 'Sign in to your account',\n 'ds.auth.signupTitle': 'Create your account',\n 'ds.auth.forgotPasswordTitle': 'Reset your password',\n 'ds.auth.emailLabel': 'Email address',\n 'ds.auth.passwordLabel': 'Password',\n 'ds.auth.rememberMe': 'Remember me',\n 'ds.auth.forgotPassword': 'Forgot your password?',\n 'ds.auth.signIn': 'Sign in',\n 'ds.auth.signUp': 'Sign up',\n 'ds.auth.sendResetLink': 'Send reset link',\n 'ds.auth.backToLogin': 'Back to login',\n\n // Navigation\n 'ds.nav.menuLabel': 'Navigation menu',\n 'ds.nav.toggleSidebar': 'Toggle sidebar',\n 'ds.nav.expandSubmenu': 'Expand submenu',\n 'ds.nav.collapseSubmenu': 'Collapse submenu',\n\n // Report\n 'ds.report.confidenceLabel': 'Confidence score',\n 'ds.report.dataCoverageLabel': 'Data coverage',\n 'ds.report.insufficientData': 'Insufficient data',\n 'ds.report.exportPdf': 'Export as PDF',\n 'ds.report.exportCsv': 'Export as CSV',\n 'ds.report.exportPptx': 'Export as PowerPoint',\n\n // Appearance\n 'ds.appearance.themeLabel': 'Theme',\n 'ds.appearance.darkTheme': 'Dark',\n 'ds.appearance.lightTheme': 'Light',\n 'ds.appearance.highContrastTheme': 'High contrast',\n 'ds.appearance.densityLabel': 'Density',\n 'ds.appearance.comfortableDensity': 'Comfortable',\n 'ds.appearance.compactDensity': 'Compact',\n\n // Pagination\n 'ds.pagination.previous': 'Previous',\n 'ds.pagination.next': 'Next',\n 'ds.pagination.goToPreviousPage': 'Go to previous page',\n 'ds.pagination.goToNextPage': 'Go to next page',\n\n // Calendar\n 'ds.calendar.previousMonth': 'Previous month',\n 'ds.calendar.nextMonth': 'Next month',\n\n // Carousel\n 'ds.carousel.previousSlide': 'Previous slide',\n 'ds.carousel.nextSlide': 'Next slide',\n\n // Methodology\n 'ds.methodology.title': 'Methodology',\n 'ds.methodology.sampleSize': 'Sample Size',\n 'ds.methodology.dataSources': 'Data Sources',\n 'ds.methodology.calculation': 'Calculation',\n\n // BookingEmbed\n 'BookingEmbed.loading': 'Loading calendar...',\n 'BookingEmbed.errorTitle': 'Calendar unavailable',\n 'BookingEmbed.errorDescription': \"We couldn't load the calendar. Please try again or open it in a new tab.\",\n 'BookingEmbed.openInNewTab': 'Open in new tab',\n};\n\nexport interface DSIntlProviderProps {\n /**\n * Locale identifier (e.g., 'en', 'fr', 'de')\n * @default 'en'\n */\n locale?: string;\n\n /**\n * Translated messages for the locale.\n * If not provided, defaults to English messages.\n */\n messages?: Record<string, string>;\n\n /**\n * Additional IntlProvider configuration\n */\n intlConfig?: Partial<IntlConfig>;\n\n /**\n * Child components\n */\n children: React.ReactNode;\n}\n\n/**\n * Design System IntlProvider\n *\n * Provides internationalization context to all design system components.\n * Wrap your app with this provider to enable i18n support.\n */\nexport function DSIntlProvider({\n locale = 'en',\n messages,\n intlConfig,\n children,\n}: DSIntlProviderProps) {\n // Merge provided messages with defaults (provided messages take precedence)\n const mergedMessages = {\n ...defaultMessages,\n ...messages,\n };\n\n return (\n <IntlProvider\n locale={locale}\n messages={mergedMessages}\n defaultLocale=\"en\"\n onError={(err) => {\n // Only log missing translation errors in development\n if (process.env.NODE_ENV === 'development') {\n // Filter out \"MISSING_TRANSLATION\" errors for default messages\n if (err.code !== 'MISSING_TRANSLATION') {\n console.error(err);\n }\n }\n }}\n {...intlConfig}\n >\n {children}\n </IntlProvider>\n );\n}\n\nexport default DSIntlProvider;\n","/**\n * Design System Message Hooks\n *\n * Provides hooks for accessing internationalized messages in components.\n * These hooks are optional - components can still accept string props directly.\n *\n * @example\n * ```tsx\n * import { useMessage, commonMessages } from '@salesmind-ai/design-system';\n *\n * function MyComponent() {\n * const t = useMessage();\n * return <button>{t(commonMessages.save)}</button>;\n * }\n * ```\n */\n\nimport { useIntl, MessageDescriptor, PrimitiveType } from 'react-intl';\nimport { useCallback } from 'react';\n\n/**\n * Format message values type\n */\nexport type MessageValues = Record<string, PrimitiveType>;\n\n/**\n * Hook to get a message formatter function\n *\n * @returns A function that formats messages\n *\n * @example\n * ```tsx\n * const t = useMessage();\n * return <span>{t(commonMessages.loading)}</span>;\n * ```\n */\nexport function useMessage() {\n const intl = useIntl();\n\n const formatMessage = useCallback(\n (descriptor: MessageDescriptor, values?: MessageValues): string => {\n return intl.formatMessage(descriptor, values);\n },\n [intl],\n );\n\n return formatMessage;\n}\n\n/**\n * Hook to get the current locale\n *\n * @returns The current locale string (e.g., 'en', 'fr')\n *\n * @example\n * ```tsx\n * const locale = useLocale();\n * console.log(locale); // 'en'\n * ```\n */\nexport function useLocale(): string {\n const intl = useIntl();\n return intl.locale;\n}\n\n/**\n * Hook to check if RTL is needed for current locale\n *\n * @returns true if the current locale is RTL\n *\n * @example\n * ```tsx\n * const isRTL = useIsRTL();\n * return <div style={{ direction: isRTL ? 'rtl' : 'ltr' }}>...</div>;\n * ```\n */\nexport function useIsRTL(): boolean {\n const locale = useLocale();\n\n // RTL locales\n const rtlLocales = [\n 'ar', // Arabic\n 'he', // Hebrew\n 'fa', // Persian/Farsi\n 'ur', // Urdu\n 'ps', // Pashto\n 'sd', // Sindhi\n 'yi', // Yiddish\n ];\n\n return rtlLocales.some((rtl) => locale === rtl || locale.startsWith(`${rtl}-`));\n}\n\n/**\n * Hook to get the current text direction\n *\n * @returns 'rtl' or 'ltr' based on locale\n *\n * @example\n * ```tsx\n * const dir = useTextDirection();\n * return <div dir={dir}>...</div>;\n * ```\n */\nexport function useTextDirection(): 'rtl' | 'ltr' {\n const isRTL = useIsRTL();\n return isRTL ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook to format a number according to locale\n *\n * @returns A number formatter function\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormat();\n * return <span>{formatNumber(1234.56)}</span>; // \"1,234.56\" in en-US\n * ```\n */\nexport function useNumberFormat() {\n const intl = useIntl();\n\n const formatNumber = useCallback(\n (value: number, options?: Intl.NumberFormatOptions): string => {\n return intl.formatNumber(value, options as Parameters<typeof intl.formatNumber>[1]);\n },\n [intl],\n );\n\n return formatNumber;\n}\n\n/**\n * Hook to format a date according to locale\n *\n * @returns A date formatter function\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormat();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormat() {\n const intl = useIntl();\n\n const formatDate = useCallback(\n (value: Date | number, options?: Intl.DateTimeFormatOptions): string => {\n return intl.formatDate(value, options);\n },\n [intl],\n );\n\n return formatDate;\n}\n\n/**\n * Hook to format a relative time (e.g., \"2 days ago\")\n *\n * @returns A relative time formatter function\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTime();\n * return <span>{formatRelative(-2, 'day')}</span>; // \"2 days ago\"\n * ```\n */\nexport function useRelativeTime() {\n const intl = useIntl();\n\n const formatRelativeTime = useCallback(\n (\n value: number,\n unit: Intl.RelativeTimeFormatUnit,\n options?: Intl.RelativeTimeFormatOptions,\n ): string => {\n return intl.formatRelativeTime(value, unit, options as Parameters<typeof intl.formatRelativeTime>[2]);\n },\n [intl],\n );\n\n return formatRelativeTime;\n}\n","/**\n * Design System Internationalization Module\n *\n * Provides i18n infrastructure for design system components.\n *\n * @module i18n\n */\n\n// Provider\nexport { DSIntlProvider, type DSIntlProviderProps } from './IntlProvider';\n\n// Hooks\nexport {\n useMessage,\n useLocale,\n useIsRTL,\n useTextDirection,\n useNumberFormat,\n useDateFormat,\n useRelativeTime,\n type MessageValues,\n} from './useMessage';\n\n// Messages\nexport {\n commonMessages,\n alertMessages,\n toastMessages,\n dialogMessages,\n formMessages,\n authMessages,\n navigationMessages,\n reportMessages,\n appearanceMessages,\n paginationMessages,\n calendarMessages,\n carouselMessages,\n methodologyMessages,\n bookingEmbedMessages,\n allMessages,\n} from './messages';\n\n// Re-export react-intl types for convenience\nexport type { MessageDescriptor } from 'react-intl';\nexport { defineMessages, FormattedMessage, FormattedNumber, FormattedDate } from 'react-intl';\n"]}
|