@salesmind-ai/design-system 0.6.0 → 0.7.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-HDVAMYSG.js → chunk-27Y5ESMM.js} +7 -2
- package/dist/chunk-27Y5ESMM.js.map +1 -0
- 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-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-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-Y26OHHMX.js → chunk-HHQ6J7B6.js} +513 -888
- package/dist/chunk-HHQ6J7B6.js.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-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-6D22TFLA.cjs → chunk-R3ZECV5P.cjs} +9 -4
- package/dist/chunk-R3ZECV5P.cjs.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-WB6XDNU7.js +115 -0
- package/dist/chunk-WB6XDNU7.js.map +1 -0
- package/dist/{chunk-LTPTW2US.cjs → chunk-WE4QIIVN.cjs} +592 -974
- package/dist/chunk-WE4QIIVN.cjs.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-BJ8rBqrO.d.cts +1100 -0
- package/dist/index-BxMqCbqE.d.ts +1100 -0
- package/dist/index.cjs +507 -1001
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +6057 -16713
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +306 -21
- package/dist/index.d.ts +306 -21
- 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 +657 -2990
- package/dist/theme/index.cjs +12 -16
- package/dist/theme/index.css +1 -245
- package/dist/theme/index.css.map +1 -1
- package/dist/theme/index.d.cts +4 -1
- package/dist/theme/index.d.ts +4 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Sidebar/Sidebar.tsx","../src/components/Shell/Shell.tsx"],"names":["React","clsx","jsx","jsxs"],"mappings":"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","sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport './Sidebar.css';\n\nexport interface SidebarProps {\n /** Position of the sidebar */\n position?: 'left' | 'right';\n /** Width of the sidebar */\n width?: number | string;\n /** Whether the sidebar is collapsed */\n collapsed?: boolean;\n /** Custom class name */\n className?: string;\n /** Child content */\n children?: React.ReactNode;\n}\n\n/**\n * Sidebar — Level 1 Glass Panel\n *\n * A floating sidebar that maintains 24px minimum distance from viewport edges.\n * Uses Signature Glass treatment with full optical stack.\n */\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ position = 'left', width = 280, collapsed = false, className, children }, ref) => {\n const style: React.CSSProperties = {\n '--sidebar-width': typeof width === 'number' ? `${width}px` : width,\n } as React.CSSProperties;\n\n return (\n <aside\n ref={ref}\n className={clsx(\n 'ds-sidebar',\n `ds-sidebar--${position}`,\n collapsed && 'ds-sidebar--collapsed',\n className,\n )}\n style={style}\n >\n <div className=\"ds-sidebar__content\">{children}</div>\n </aside>\n );\n },\n);\n\nSidebar.displayName = 'Sidebar';\n\n/* Sidebar Section */\nexport interface SidebarSectionProps {\n title?: string;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n ({ title, className, children }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-sidebar__section', className)}>\n {title && <h3 className=\"ds-sidebar__section-title\">{title}</h3>}\n {children}\n </div>\n );\n },\n);\n\nSidebarSection.displayName = 'SidebarSection';\n\n/* Sidebar Item */\nexport interface SidebarItemProps {\n /** Whether this item is active */\n active?: boolean;\n /** Icon element */\n icon?: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Custom class name */\n className?: string;\n /** Child content */\n children?: React.ReactNode;\n}\n\nexport const SidebarItem = React.forwardRef<HTMLButtonElement, SidebarItemProps>(\n ({ active = false, icon, onClick, className, children }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx('ds-sidebar__item', active && 'ds-sidebar__item--active', className)}\n onClick={onClick}\n type=\"button\"\n >\n {icon && <span className=\"ds-sidebar__item-icon\">{icon}</span>}\n <span className=\"ds-sidebar__item-label\">{children}</span>\n </button>\n );\n },\n);\n\nSidebarItem.displayName = 'SidebarItem';\n","import React, { useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { Sidebar, SidebarSection, SidebarItem } from '../Sidebar/Sidebar';\nimport './Shell.css';\n\n// Icons\nconst HomeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n <polyline points=\"9,22 9,12 15,12 15,22\" />\n </svg>\n);\nconst ChartIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\" />\n <line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\" />\n <line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\" />\n </svg>\n);\nconst UsersIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n);\nconst SettingsIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n);\n\nimport type { NavPlacement } from '../../theme/AppearanceProvider';\n\nexport interface ShellProps {\n /**\n * Navigation placement.\n * If undefined, reads from document.documentElement.dataset.nav\n */\n layout?: NavPlacement;\n /** Custom class name */\n className?: string;\n /** Content */\n children?: React.ReactNode;\n /** Navigation items (optional - uses defaults if not provided) */\n navItems?: NavItem[];\n /** Active nav item key */\n activeNav?: string;\n /** Nav item click handler */\n onNavChange?: (key: string) => void;\n /** Title for the \"System\" sidebar section when navItems.length > 3. @default \"System\" */\n systemSectionTitle?: string;\n}\n\nexport interface NavItem {\n key: string;\n label: string;\n icon: React.ReactNode;\n}\n\nconst DEFAULT_NAV_ITEMS: NavItem[] = [\n { key: 'dashboard', label: 'Dashboard', icon: <HomeIcon /> },\n { key: 'analytics', label: 'Analytics', icon: <ChartIcon /> },\n { key: 'contacts', label: 'Contacts', icon: <UsersIcon /> },\n { key: 'settings', label: 'Settings', icon: <SettingsIcon /> },\n];\n\n/**\n * Read data-nav from HTML element\n */\nfunction getNavFromDocument(): NavPlacement {\n if (typeof document === 'undefined') return 'left';\n const nav = document.documentElement.getAttribute('data-nav');\n if (nav === 'left' || nav === 'right' || nav === 'bottom') {\n return nav;\n }\n return 'left';\n}\n\nexport const Shell = React.forwardRef<HTMLDivElement, ShellProps>(\n (\n {\n layout,\n className,\n children,\n navItems = DEFAULT_NAV_ITEMS,\n activeNav = 'dashboard',\n onNavChange,\n systemSectionTitle = 'System',\n },\n ref,\n ) => {\n // Support both prop-driven and attribute-driven layout\n const [computedLayout, setComputedLayout] = useState<NavPlacement>(\n layout || getNavFromDocument(),\n );\n\n useEffect(() => {\n if (layout) {\n setComputedLayout(layout);\n return;\n }\n\n // Watch for data-nav changes via MutationObserver\n if (typeof document === 'undefined') return;\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-nav') {\n setComputedLayout(getNavFromDocument());\n }\n });\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-nav'],\n });\n\n // Initial read\n setComputedLayout(getNavFromDocument());\n\n return () => observer.disconnect();\n }, [layout]);\n\n const handleNavClick = (key: string) => {\n onNavChange?.(key);\n };\n\n return (\n <div\n ref={ref}\n className={clsx('ds-shell', `ds-shell--${computedLayout}`, className)}\n data-shell-layout={computedLayout}\n >\n {/* Sidebar Navigation */}\n {(computedLayout === 'left' || computedLayout === 'right') && (\n <Sidebar position={computedLayout}>\n <SidebarSection>\n {navItems.slice(0, 3).map((item) => (\n <SidebarItem\n key={item.key}\n icon={item.icon}\n active={activeNav === item.key}\n onClick={() => handleNavClick(item.key)}\n >\n {item.label}\n </SidebarItem>\n ))}\n </SidebarSection>\n {navItems.length > 3 && (\n <SidebarSection title={systemSectionTitle}>\n {navItems.slice(3).map((item) => (\n <SidebarItem\n key={item.key}\n icon={item.icon}\n active={activeNav === item.key}\n onClick={() => handleNavClick(item.key)}\n >\n {item.label}\n </SidebarItem>\n ))}\n </SidebarSection>\n )}\n </Sidebar>\n )}\n\n {/* Bottom Tab Bar Navigation */}\n {computedLayout === 'bottom' && (\n <nav className=\"ds-shell__tab-bar\">\n {navItems.map((item) => (\n <button\n key={item.key}\n className={clsx('ds-shell__tab-item', activeNav === item.key && 'ds-shell__tab-item--active')}\n onClick={() => handleNavClick(item.key)}\n aria-label={item.label}\n >\n {item.icon}\n </button>\n ))}\n </nav>\n )}\n\n {/* Main Content Area */}\n <main className=\"ds-shell__content\">{children}</main>\n </div>\n );\n },\n);\n\nShell.displayName = 'Shell';\n"]}
|
|
@@ -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"]}
|