@mesob/ui 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts +102 -9
- package/dist/components.js +4604 -2965
- package/dist/components.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/lib/locale.d.ts +10 -21
- package/dist/lib/locale.js +17 -16
- package/dist/lib/locale.js.map +1 -1
- package/dist/providers.d.ts +7 -2
- package/dist/providers.js +34 -15
- package/dist/providers.js.map +1 -1
- package/package.json +2 -1
- package/src/styles/style-lyra.css +146 -14
- package/src/styles/style-maia.css +146 -14
- package/src/styles/style-mira.css +146 -14
- package/src/styles/style-nova.css +147 -15
- package/src/styles/style-vega.css +146 -14
- package/src/styles/themes.css +11 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, Locale, LocaleKey, SUPPORTED_LANGUAGES, SupportedLanguage, Translation, createLocalInputSchema, createLocalRequiredInputSchema } from './lib/locale.js';
|
|
1
|
+
export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, Locale, LocaleKey, SUPPORTED_LANGUAGES, SupportedLanguage, Translation, createLocalInputSchema, createLocalRequiredInputSchema, getLocaleInputDefault } from './lib/locale.js';
|
|
2
2
|
export { StyleName, ThemeConfig, ThemeVars, buildTheme } from './lib/theme-config.js';
|
|
3
3
|
export { ComponentColor, ComponentRadius, ComponentSize, InputWrapperOrder, REQUIRED_THEME_VARS, THEME_VAR_NAMES, ThemeValidation, ThemeVarName, validateTheme } from './lib/theme-schema.js';
|
|
4
4
|
export { BASE_COLORS, BaseColorTheme, RADII, RadiusOption, getBaseColor, getRadius } from './lib/themes.js';
|
package/dist/index.js
CHANGED
|
@@ -5,18 +5,25 @@ var SUPPORTED_LANGUAGES = [
|
|
|
5
5
|
{ value: "en", label: "English", key: "En" },
|
|
6
6
|
{ value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" }
|
|
7
7
|
];
|
|
8
|
-
var
|
|
9
|
-
|
|
8
|
+
var localeRecord = z.record(z.string(), z.string());
|
|
9
|
+
var LOCALE_INPUT_DEFAULT = {};
|
|
10
|
+
var LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(
|
|
11
|
+
(o) => Object.keys(o).length > 0,
|
|
12
|
+
{ message: "At least one locale required" }
|
|
10
13
|
);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
var LOCALE_OPTIONAL_INPUT_SCHEMA = localeRecord;
|
|
15
|
+
function getLocaleInputDefault(supportedLanguages) {
|
|
16
|
+
return Object.fromEntries(supportedLanguages.map(({ value }) => [value, ""]));
|
|
17
|
+
}
|
|
18
|
+
function createLocalInputSchema(defaultLanguage, supportedLanguages, defaultValidation, otherValidation) {
|
|
19
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
20
|
+
acc[value] = value === defaultLanguage ? defaultValidation : otherValidation;
|
|
14
21
|
return acc;
|
|
15
22
|
}, {});
|
|
16
23
|
return z.object(schemaDefinition);
|
|
17
24
|
}
|
|
18
|
-
function createLocalRequiredInputSchema(validation) {
|
|
19
|
-
const schemaDefinition =
|
|
25
|
+
function createLocalRequiredInputSchema(supportedLanguages, validation) {
|
|
26
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
20
27
|
acc[value] = validation;
|
|
21
28
|
return acc;
|
|
22
29
|
}, {});
|
|
@@ -25,7 +32,7 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
25
32
|
(value) => typeof value === "string" && value.trim().length > 0
|
|
26
33
|
);
|
|
27
34
|
if (!hasValue) {
|
|
28
|
-
for (const { value } of
|
|
35
|
+
for (const { value } of supportedLanguages) {
|
|
29
36
|
ctx.addIssue({
|
|
30
37
|
code: z.ZodIssueCode.custom,
|
|
31
38
|
message: "field is required",
|
|
@@ -35,13 +42,6 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
35
42
|
}
|
|
36
43
|
});
|
|
37
44
|
}
|
|
38
|
-
var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
|
|
39
|
-
z.string().optional()
|
|
40
|
-
);
|
|
41
|
-
var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
|
|
42
|
-
z.string().optional(),
|
|
43
|
-
z.string().optional()
|
|
44
|
-
);
|
|
45
45
|
|
|
46
46
|
// src/lib/theme-config.ts
|
|
47
47
|
import { converter, wcagContrast } from "culori";
|
|
@@ -550,6 +550,7 @@ export {
|
|
|
550
550
|
createLocalInputSchema,
|
|
551
551
|
createLocalRequiredInputSchema,
|
|
552
552
|
getBaseColor,
|
|
553
|
+
getLocaleInputDefault,
|
|
553
554
|
getRadius,
|
|
554
555
|
validateTheme
|
|
555
556
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/locale.ts","../src/lib/theme-config.ts","../src/lib/themes.ts","../src/lib/theme-schema.ts","../src/lib/utils.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nexport const LOCALE_INPUT_DEFAULT = Object.fromEntries(\n SUPPORTED_LANGUAGES.map(({ value }) => [value, '']),\n);\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of SUPPORTED_LANGUAGES) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(\n z.string().optional(),\n);\n\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(\n z.string().optional(),\n z.string().optional(),\n);\n","/**\n * Theme configuration and building logic.\n * Converts user config (hex color + base color) into CSS variables.\n */\n\nimport { converter, wcagContrast } from 'culori';\nimport { getBaseColor, getRadius } from './themes';\n\nconst toOklch = converter('oklch');\n\nexport type StyleName = 'vega' | 'nova' | 'maia' | 'lyra' | 'mira';\n\nexport type ThemeConfig = {\n color: string; // hex like '#1199ee'\n baseColor?: 'neutral' | 'zinc' | 'stone' | 'gray'; // default 'zinc'\n style?: StyleName;\n radius?: 'default' | 'none' | 'small' | 'medium' | 'large';\n};\n\nexport type ThemeVars = {\n light: Record<string, string>;\n dark: Record<string, string>;\n};\n\n/**\n * Formats OKLCH color to CSS string format.\n * Input: { mode: 'oklch', l: 0.5, c: 0.1, h: 200 }\n * Output: 'oklch(0.5 0.1 200)'\n */\nfunction formatOklch(color: ReturnType<typeof toOklch>): string {\n if (!color) {\n return 'oklch(0 0 0)';\n }\n const l = color.l ?? 0;\n const c = color.c ?? 0;\n const h = color.h ?? 0;\n return `oklch(${l.toFixed(3)} ${c.toFixed(3)} ${h.toFixed(3)})`;\n}\n\n/**\n * Calculate contrast color (light or dark text) for a given background.\n * Returns either light or dark OKLCH based on WCAG contrast.\n */\nfunction _getContrastColor(bgHex: string): { light: string; dark: string } {\n const bgColor = toOklch(bgHex);\n if (!bgColor) {\n return {\n light: 'oklch(0.985 0 0)',\n dark: 'oklch(0.145 0 0)',\n };\n }\n\n const white = 'oklch(0.985 0 0)'; // near-white\n const black = 'oklch(0.145 0 0)'; // near-black\n\n // Check contrast with white and black\n const contrastWithWhite = wcagContrast(bgHex, '#fafafa') ?? 0;\n\n // Use the foreground color with better contrast (WCAG AA requires 4.5:1)\n // Use white text if contrast is good enough, otherwise use black\n const lightModeFg = contrastWithWhite >= 4.5 ? white : black;\n\n return {\n light: lightModeFg,\n dark: lightModeFg,\n };\n}\n\n/**\n * Generate 5 chart colors by adjusting lightness/chroma of primary.\n */\nfunction generateChartColors(primaryOklch: ReturnType<typeof toOklch>): {\n light: string[];\n dark: string[];\n} {\n if (!primaryOklch) {\n return {\n light: [\n 'oklch(0.646 0.222 41.116)',\n 'oklch(0.6 0.118 184.704)',\n 'oklch(0.398 0.07 227.392)',\n 'oklch(0.828 0.189 84.429)',\n 'oklch(0.769 0.188 70.08)',\n ],\n dark: [\n 'oklch(0.488 0.243 264.376)',\n 'oklch(0.696 0.17 162.48)',\n 'oklch(0.769 0.188 70.08)',\n 'oklch(0.627 0.265 303.9)',\n 'oklch(0.645 0.246 16.439)',\n ],\n };\n }\n\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode: varying lightness from lighter to darker\n const lightCharts = [\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.15, 0.95), c, h }),\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.05, 0.9), c, h }),\n formatOklch({ mode: 'oklch', l, c, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.3), c: c * 0.9, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.15, 0.25), c: c * 0.8, h }),\n ];\n\n // Dark mode: adjust for better visibility\n const darkCharts = [\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.4), c, h }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.1, 0.7),\n c: c * 0.8,\n h: (h + 30) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.15, 0.75),\n c: c * 0.9,\n h: (h - 30 + 360) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l, 0.6),\n c: c * 1.1,\n h: (h + 60) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l + 0.05, 0.62),\n c: c * 1.05,\n h: (h - 60 + 360) % 360,\n }),\n ];\n\n return { light: lightCharts, dark: darkCharts };\n}\n\n/**\n * Build theme CSS variables from config.\n * Merges base color with primary color derived from user hex.\n */\nexport function buildTheme(config: ThemeConfig): ThemeVars {\n const baseColorName = config.baseColor ?? 'zinc';\n const base = getBaseColor(baseColorName);\n\n if (!base) {\n throw new Error(`Base color \"${baseColorName}\" not found`);\n }\n\n // Start with base color vars\n const lightVars = { ...base.cssVars.light };\n const darkVars = { ...base.cssVars.dark };\n\n // Convert user hex to OKLCH\n const primaryOklch = toOklch(config.color);\n\n if (primaryOklch) {\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode primary: use user color as-is or slightly adjusted\n lightVars.primary = formatOklch({ mode: 'oklch', l, c, h });\n\n // Light mode foreground: ALWAYS white for primary buttons\n lightVars['primary-foreground'] = 'oklch(0.985 0 0)';\n\n // Dark mode primary: increase lightness for visibility on dark bg\n const darkL = Math.min(l + 0.2, 0.9);\n darkVars.primary = formatOklch({ mode: 'oklch', l: darkL, c, h });\n\n // Dark mode foreground: check contrast for lightened primary\n // Since we lighten the primary in dark mode, we may need dark text\n const darkPrimaryLightness = darkL;\n const contrastDark =\n darkPrimaryLightness > 0.6 ? 'oklch(0.145 0 0)' : 'oklch(0.985 0 0)';\n darkVars['primary-foreground'] = contrastDark;\n\n // Sidebar primary (same as primary)\n lightVars['sidebar-primary'] = lightVars.primary;\n lightVars['sidebar-primary-foreground'] = lightVars['primary-foreground'];\n darkVars['sidebar-primary'] = darkVars.primary;\n darkVars['sidebar-primary-foreground'] = darkVars['primary-foreground'];\n\n // Generate chart colors\n const charts = generateChartColors(primaryOklch);\n for (let i = 0; i < 5; i++) {\n lightVars[`chart-${i + 1}`] = charts.light[i];\n darkVars[`chart-${i + 1}`] = charts.dark[i];\n }\n }\n\n // Apply radius override\n if (config.radius && config.radius !== 'default') {\n const radius = getRadius(config.radius);\n if (radius?.value) {\n lightVars.radius = radius.value;\n darkVars.radius = radius.value;\n }\n }\n\n return { light: lightVars, dark: darkVars };\n}\n","/**\n * Base color definitions ported from shadcn/ui.\n * Each base color provides full semantic tokens for neutral tones.\n */\n\nexport type BaseColorTheme = {\n name: string;\n title: string;\n cssVars: {\n light: Record<string, string>;\n dark: Record<string, string>;\n };\n};\n\nexport const BASE_COLORS: BaseColorTheme[] = [\n {\n name: 'neutral',\n title: 'Neutral',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.145 0 0)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.145 0 0)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.145 0 0)',\n primary: 'oklch(0.205 0 0)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.97 0 0)',\n 'secondary-foreground': 'oklch(0.205 0 0)',\n muted: 'oklch(0.97 0 0)',\n 'muted-foreground': 'oklch(0.556 0 0)',\n accent: 'oklch(0.97 0 0)',\n 'accent-foreground': 'oklch(0.205 0 0)',\n destructive: 'oklch(0.58 0.22 27)',\n border: 'oklch(0.922 0 0)',\n input: 'oklch(0.922 0 0)',\n ring: 'oklch(0.708 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.145 0 0)',\n 'sidebar-primary': 'oklch(0.205 0 0)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.97 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.205 0 0)',\n 'sidebar-border': 'oklch(0.922 0 0)',\n 'sidebar-ring': 'oklch(0.708 0 0)',\n },\n dark: {\n background: 'oklch(0.145 0 0)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.205 0 0)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.205 0 0)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.87 0.00 0)',\n 'primary-foreground': 'oklch(0.205 0 0)',\n secondary: 'oklch(0.269 0 0)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.269 0 0)',\n 'muted-foreground': 'oklch(0.708 0 0)',\n accent: 'oklch(0.371 0 0)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.556 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n sidebar: 'oklch(0.205 0 0)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.269 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.556 0 0)',\n },\n },\n },\n {\n name: 'stone',\n title: 'Stone',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.147 0.004 49.25)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.147 0.004 49.25)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.147 0.004 49.25)',\n primary: 'oklch(0.216 0.006 56.043)',\n 'primary-foreground': 'oklch(0.985 0.001 106.423)',\n secondary: 'oklch(0.97 0.001 106.424)',\n 'secondary-foreground': 'oklch(0.216 0.006 56.043)',\n muted: 'oklch(0.97 0.001 106.424)',\n 'muted-foreground': 'oklch(0.553 0.013 58.071)',\n accent: 'oklch(0.97 0.001 106.424)',\n 'accent-foreground': 'oklch(0.216 0.006 56.043)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.923 0.003 48.717)',\n input: 'oklch(0.923 0.003 48.717)',\n ring: 'oklch(0.709 0.01 56.259)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.001 106.423)',\n 'sidebar-foreground': 'oklch(0.147 0.004 49.25)',\n 'sidebar-primary': 'oklch(0.216 0.006 56.043)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.97 0.001 106.424)',\n 'sidebar-accent-foreground': 'oklch(0.216 0.006 56.043)',\n 'sidebar-border': 'oklch(0.923 0.003 48.717)',\n 'sidebar-ring': 'oklch(0.709 0.01 56.259)',\n },\n dark: {\n background: 'oklch(0.147 0.004 49.25)',\n foreground: 'oklch(0.985 0.001 106.423)',\n card: 'oklch(0.216 0.006 56.043)',\n 'card-foreground': 'oklch(0.985 0.001 106.423)',\n popover: 'oklch(0.216 0.006 56.043)',\n 'popover-foreground': 'oklch(0.985 0.001 106.423)',\n primary: 'oklch(0.923 0.003 48.717)',\n 'primary-foreground': 'oklch(0.216 0.006 56.043)',\n secondary: 'oklch(0.268 0.007 34.298)',\n 'secondary-foreground': 'oklch(0.985 0.001 106.423)',\n muted: 'oklch(0.268 0.007 34.298)',\n 'muted-foreground': 'oklch(0.709 0.01 56.259)',\n accent: 'oklch(0.268 0.007 34.298)',\n 'accent-foreground': 'oklch(0.985 0.001 106.423)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.553 0.013 58.071)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.216 0.006 56.043)',\n 'sidebar-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.268 0.007 34.298)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.553 0.013 58.071)',\n },\n },\n },\n {\n name: 'zinc',\n title: 'Zinc',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.141 0.005 285.823)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.141 0.005 285.823)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.141 0.005 285.823)',\n primary: 'oklch(0.21 0.006 285.885)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.967 0.001 286.375)',\n 'secondary-foreground': 'oklch(0.21 0.006 285.885)',\n muted: 'oklch(0.967 0.001 286.375)',\n 'muted-foreground': 'oklch(0.552 0.016 285.938)',\n accent: 'oklch(0.967 0.001 286.375)',\n 'accent-foreground': 'oklch(0.21 0.006 285.885)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.92 0.004 286.32)',\n input: 'oklch(0.92 0.004 286.32)',\n ring: 'oklch(0.705 0.015 286.067)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.141 0.005 285.823)',\n 'sidebar-primary': 'oklch(0.21 0.006 285.885)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.967 0.001 286.375)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.006 285.885)',\n 'sidebar-border': 'oklch(0.92 0.004 286.32)',\n 'sidebar-ring': 'oklch(0.705 0.015 286.067)',\n },\n dark: {\n background: 'oklch(0.141 0.005 285.823)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.21 0.006 285.885)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.21 0.006 285.885)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.92 0.004 286.32)',\n 'primary-foreground': 'oklch(0.21 0.006 285.885)',\n secondary: 'oklch(0.274 0.006 286.033)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.274 0.006 286.033)',\n 'muted-foreground': 'oklch(0.705 0.015 286.067)',\n accent: 'oklch(0.274 0.006 286.033)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.552 0.016 285.938)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.006 285.885)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.274 0.006 286.033)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.552 0.016 285.938)',\n },\n },\n },\n {\n name: 'gray',\n title: 'Gray',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.13 0.028 261.692)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.13 0.028 261.692)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.13 0.028 261.692)',\n primary: 'oklch(0.21 0.034 264.665)',\n 'primary-foreground': 'oklch(0.985 0.002 247.839)',\n secondary: 'oklch(0.967 0.003 264.542)',\n 'secondary-foreground': 'oklch(0.21 0.034 264.665)',\n muted: 'oklch(0.967 0.003 264.542)',\n 'muted-foreground': 'oklch(0.551 0.027 264.364)',\n accent: 'oklch(0.967 0.003 264.542)',\n 'accent-foreground': 'oklch(0.21 0.034 264.665)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.928 0.006 264.531)',\n input: 'oklch(0.928 0.006 264.531)',\n ring: 'oklch(0.707 0.022 261.325)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.002 247.839)',\n 'sidebar-foreground': 'oklch(0.13 0.028 261.692)',\n 'sidebar-primary': 'oklch(0.21 0.034 264.665)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.967 0.003 264.542)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.034 264.665)',\n 'sidebar-border': 'oklch(0.928 0.006 264.531)',\n 'sidebar-ring': 'oklch(0.707 0.022 261.325)',\n },\n dark: {\n background: 'oklch(0.13 0.028 261.692)',\n foreground: 'oklch(0.985 0.002 247.839)',\n card: 'oklch(0.21 0.034 264.665)',\n 'card-foreground': 'oklch(0.985 0.002 247.839)',\n popover: 'oklch(0.21 0.034 264.665)',\n 'popover-foreground': 'oklch(0.985 0.002 247.839)',\n primary: 'oklch(0.928 0.006 264.531)',\n 'primary-foreground': 'oklch(0.21 0.034 264.665)',\n secondary: 'oklch(0.278 0.033 256.848)',\n 'secondary-foreground': 'oklch(0.985 0.002 247.839)',\n muted: 'oklch(0.278 0.033 256.848)',\n 'muted-foreground': 'oklch(0.707 0.022 261.325)',\n accent: 'oklch(0.278 0.033 256.848)',\n 'accent-foreground': 'oklch(0.985 0.002 247.839)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.551 0.027 264.364)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.034 264.665)',\n 'sidebar-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.278 0.033 256.848)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.551 0.027 264.364)',\n },\n },\n },\n];\n\nexport type RadiusOption = {\n name: 'default' | 'none' | 'small' | 'medium' | 'large';\n label: string;\n value: string;\n};\n\nexport const RADII: RadiusOption[] = [\n { name: 'default', label: 'Default', value: '' },\n { name: 'none', label: 'None', value: '0' },\n { name: 'small', label: 'Small', value: '0.45rem' },\n { name: 'medium', label: 'Medium', value: '0.625rem' },\n { name: 'large', label: 'Large', value: '0.875rem' },\n];\n\nexport function getBaseColor(name: string): BaseColorTheme | undefined {\n return BASE_COLORS.find((c) => c.name === name);\n}\n\nexport function getRadius(name: string): RadiusOption | undefined {\n return RADII.find((r) => r.name === name);\n}\n","/**\n * Canonical theme variable names aligned with shadcn/ui semantic tokens.\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nexport const THEME_VAR_NAMES = [\n '--background',\n '--foreground',\n '--card',\n '--card-foreground',\n '--popover',\n '--popover-foreground',\n '--primary',\n '--primary-foreground',\n '--secondary',\n '--secondary-foreground',\n '--muted',\n '--muted-foreground',\n '--accent',\n '--accent-foreground',\n '--destructive',\n '--destructive-foreground',\n '--border',\n '--input',\n '--ring',\n '--chart-1',\n '--chart-2',\n '--chart-3',\n '--chart-4',\n '--chart-5',\n '--radius',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-border',\n '--sidebar-ring',\n '--sidebar-active', // mesob extension\n '--overlay', // mesob extension\n] as const;\n\nexport type ThemeVarName = (typeof THEME_VAR_NAMES)[number];\n\nconst THEME_VAR_SET = new Set<string>(THEME_VAR_NAMES);\n\n/** Vars that buildTheme provides (minimal required set). */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--background',\n '--foreground',\n '--primary',\n '--primary-foreground',\n '--radius',\n];\n\nexport type ThemeValidation = {\n valid: boolean;\n unknown: string[];\n missing: string[];\n};\n\n/**\n * Validates a theme object against the consumer theme contract.\n * - unknown: keys not in THEME_VAR_NAMES (typos / unsupported).\n * - missing: required vars absent (for full theme override).\n */\nexport function validateTheme(theme: Record<string, string>): ThemeValidation {\n const keys = new Set(Object.keys(theme));\n const unknown: string[] = [];\n const missing: string[] = [];\n\n for (const key of keys) {\n if (!THEME_VAR_SET.has(key)) {\n unknown.push(key);\n }\n }\n for (const key of REQUIRED_THEME_VARS) {\n if (!keys.has(key)) {\n missing.push(key);\n }\n }\n\n return {\n valid: unknown.length === 0 && missing.length === 0,\n unknown,\n missing,\n };\n}\n\n/** Shared component size scale (xs–xl) aligned with Mantine */\nexport type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Shared component radius scale aligned with Mantine */\nexport type ComponentRadius = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** Order of Input.Wrapper elements (Mantine-like) */\nexport type InputWrapperOrder = ('label' | 'input' | 'description' | 'error')[];\n\n/** Shared component color (theme key) */\nexport type ComponentColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'destructive'\n | string;\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/locale.ts","../src/lib/theme-config.ts","../src/lib/themes.ts","../src/lib/theme-schema.ts","../src/lib/utils.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [Key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\n/** Fallback when MesobProvider does not receive defaultLanguage/supportedLanguages */\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\n/** Fallback when MesobProvider does not receive supportedLanguages */\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nconst localeRecord = z.record(z.string(), z.string());\nexport const LOCALE_INPUT_DEFAULT: Locale = {};\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(\n (o) => Object.keys(o).length > 0,\n { message: 'At least one locale required' },\n);\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = localeRecord;\n\nexport function getLocaleInputDefault(\n supportedLanguages: SupportedLanguage[],\n): Record<string, string> {\n return Object.fromEntries(supportedLanguages.map(({ value }) => [value, '']));\n}\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultLanguage: string,\n supportedLanguages: SupportedLanguage[],\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === defaultLanguage ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n supportedLanguages: SupportedLanguage[],\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of supportedLanguages) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n","/**\n * Theme configuration and building logic.\n * Converts user config (hex color + base color) into CSS variables.\n */\n\nimport { converter, wcagContrast } from 'culori';\nimport { getBaseColor, getRadius } from './themes';\n\nconst toOklch = converter('oklch');\n\nexport type StyleName = 'vega' | 'nova' | 'maia' | 'lyra' | 'mira';\n\nexport type ThemeConfig = {\n color: string; // hex like '#1199ee'\n baseColor?: 'neutral' | 'zinc' | 'stone' | 'gray'; // default 'zinc'\n style?: StyleName;\n radius?: 'default' | 'none' | 'small' | 'medium' | 'large';\n};\n\nexport type ThemeVars = {\n light: Record<string, string>;\n dark: Record<string, string>;\n};\n\n/**\n * Formats OKLCH color to CSS string format.\n * Input: { mode: 'oklch', l: 0.5, c: 0.1, h: 200 }\n * Output: 'oklch(0.5 0.1 200)'\n */\nfunction formatOklch(color: ReturnType<typeof toOklch>): string {\n if (!color) {\n return 'oklch(0 0 0)';\n }\n const l = color.l ?? 0;\n const c = color.c ?? 0;\n const h = color.h ?? 0;\n return `oklch(${l.toFixed(3)} ${c.toFixed(3)} ${h.toFixed(3)})`;\n}\n\n/**\n * Calculate contrast color (light or dark text) for a given background.\n * Returns either light or dark OKLCH based on WCAG contrast.\n */\nfunction _getContrastColor(bgHex: string): { light: string; dark: string } {\n const bgColor = toOklch(bgHex);\n if (!bgColor) {\n return {\n light: 'oklch(0.985 0 0)',\n dark: 'oklch(0.145 0 0)',\n };\n }\n\n const white = 'oklch(0.985 0 0)'; // near-white\n const black = 'oklch(0.145 0 0)'; // near-black\n\n // Check contrast with white and black\n const contrastWithWhite = wcagContrast(bgHex, '#fafafa') ?? 0;\n\n // Use the foreground color with better contrast (WCAG AA requires 4.5:1)\n // Use white text if contrast is good enough, otherwise use black\n const lightModeFg = contrastWithWhite >= 4.5 ? white : black;\n\n return {\n light: lightModeFg,\n dark: lightModeFg,\n };\n}\n\n/**\n * Generate 5 chart colors by adjusting lightness/chroma of primary.\n */\nfunction generateChartColors(primaryOklch: ReturnType<typeof toOklch>): {\n light: string[];\n dark: string[];\n} {\n if (!primaryOklch) {\n return {\n light: [\n 'oklch(0.646 0.222 41.116)',\n 'oklch(0.6 0.118 184.704)',\n 'oklch(0.398 0.07 227.392)',\n 'oklch(0.828 0.189 84.429)',\n 'oklch(0.769 0.188 70.08)',\n ],\n dark: [\n 'oklch(0.488 0.243 264.376)',\n 'oklch(0.696 0.17 162.48)',\n 'oklch(0.769 0.188 70.08)',\n 'oklch(0.627 0.265 303.9)',\n 'oklch(0.645 0.246 16.439)',\n ],\n };\n }\n\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode: varying lightness from lighter to darker\n const lightCharts = [\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.15, 0.95), c, h }),\n formatOklch({ mode: 'oklch', l: Math.min(l + 0.05, 0.9), c, h }),\n formatOklch({ mode: 'oklch', l, c, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.3), c: c * 0.9, h }),\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.15, 0.25), c: c * 0.8, h }),\n ];\n\n // Dark mode: adjust for better visibility\n const darkCharts = [\n formatOklch({ mode: 'oklch', l: Math.max(l - 0.1, 0.4), c, h }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.1, 0.7),\n c: c * 0.8,\n h: (h + 30) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.min(l + 0.15, 0.75),\n c: c * 0.9,\n h: (h - 30 + 360) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l, 0.6),\n c: c * 1.1,\n h: (h + 60) % 360,\n }),\n formatOklch({\n mode: 'oklch',\n l: Math.max(l + 0.05, 0.62),\n c: c * 1.05,\n h: (h - 60 + 360) % 360,\n }),\n ];\n\n return { light: lightCharts, dark: darkCharts };\n}\n\n/**\n * Build theme CSS variables from config.\n * Merges base color with primary color derived from user hex.\n */\nexport function buildTheme(config: ThemeConfig): ThemeVars {\n const baseColorName = config.baseColor ?? 'zinc';\n const base = getBaseColor(baseColorName);\n\n if (!base) {\n throw new Error(`Base color \"${baseColorName}\" not found`);\n }\n\n // Start with base color vars\n const lightVars = { ...base.cssVars.light };\n const darkVars = { ...base.cssVars.dark };\n\n // Convert user hex to OKLCH\n const primaryOklch = toOklch(config.color);\n\n if (primaryOklch) {\n const { l = 0.5, c = 0.1, h = 200 } = primaryOklch;\n\n // Light mode primary: use user color as-is or slightly adjusted\n lightVars.primary = formatOklch({ mode: 'oklch', l, c, h });\n\n // Light mode foreground: ALWAYS white for primary buttons\n lightVars['primary-foreground'] = 'oklch(0.985 0 0)';\n\n // Dark mode primary: increase lightness for visibility on dark bg\n const darkL = Math.min(l + 0.2, 0.9);\n darkVars.primary = formatOklch({ mode: 'oklch', l: darkL, c, h });\n\n // Dark mode foreground: check contrast for lightened primary\n // Since we lighten the primary in dark mode, we may need dark text\n const darkPrimaryLightness = darkL;\n const contrastDark =\n darkPrimaryLightness > 0.6 ? 'oklch(0.145 0 0)' : 'oklch(0.985 0 0)';\n darkVars['primary-foreground'] = contrastDark;\n\n // Sidebar primary (same as primary)\n lightVars['sidebar-primary'] = lightVars.primary;\n lightVars['sidebar-primary-foreground'] = lightVars['primary-foreground'];\n darkVars['sidebar-primary'] = darkVars.primary;\n darkVars['sidebar-primary-foreground'] = darkVars['primary-foreground'];\n\n // Generate chart colors\n const charts = generateChartColors(primaryOklch);\n for (let i = 0; i < 5; i++) {\n lightVars[`chart-${i + 1}`] = charts.light[i];\n darkVars[`chart-${i + 1}`] = charts.dark[i];\n }\n }\n\n // Apply radius override\n if (config.radius && config.radius !== 'default') {\n const radius = getRadius(config.radius);\n if (radius?.value) {\n lightVars.radius = radius.value;\n darkVars.radius = radius.value;\n }\n }\n\n return { light: lightVars, dark: darkVars };\n}\n","/**\n * Base color definitions ported from shadcn/ui.\n * Each base color provides full semantic tokens for neutral tones.\n */\n\nexport type BaseColorTheme = {\n name: string;\n title: string;\n cssVars: {\n light: Record<string, string>;\n dark: Record<string, string>;\n };\n};\n\nexport const BASE_COLORS: BaseColorTheme[] = [\n {\n name: 'neutral',\n title: 'Neutral',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.145 0 0)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.145 0 0)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.145 0 0)',\n primary: 'oklch(0.205 0 0)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.97 0 0)',\n 'secondary-foreground': 'oklch(0.205 0 0)',\n muted: 'oklch(0.97 0 0)',\n 'muted-foreground': 'oklch(0.556 0 0)',\n accent: 'oklch(0.97 0 0)',\n 'accent-foreground': 'oklch(0.205 0 0)',\n destructive: 'oklch(0.58 0.22 27)',\n border: 'oklch(0.922 0 0)',\n input: 'oklch(0.922 0 0)',\n ring: 'oklch(0.708 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.145 0 0)',\n 'sidebar-primary': 'oklch(0.205 0 0)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.97 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.205 0 0)',\n 'sidebar-border': 'oklch(0.922 0 0)',\n 'sidebar-ring': 'oklch(0.708 0 0)',\n },\n dark: {\n background: 'oklch(0.145 0 0)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.205 0 0)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.205 0 0)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.87 0.00 0)',\n 'primary-foreground': 'oklch(0.205 0 0)',\n secondary: 'oklch(0.269 0 0)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.269 0 0)',\n 'muted-foreground': 'oklch(0.708 0 0)',\n accent: 'oklch(0.371 0 0)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.556 0 0)',\n 'chart-1': 'oklch(0.809 0.105 251.813)',\n 'chart-2': 'oklch(0.623 0.214 259.815)',\n 'chart-3': 'oklch(0.546 0.245 262.881)',\n 'chart-4': 'oklch(0.488 0.243 264.376)',\n 'chart-5': 'oklch(0.424 0.199 265.638)',\n sidebar: 'oklch(0.205 0 0)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.269 0 0)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.556 0 0)',\n },\n },\n },\n {\n name: 'stone',\n title: 'Stone',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.147 0.004 49.25)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.147 0.004 49.25)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.147 0.004 49.25)',\n primary: 'oklch(0.216 0.006 56.043)',\n 'primary-foreground': 'oklch(0.985 0.001 106.423)',\n secondary: 'oklch(0.97 0.001 106.424)',\n 'secondary-foreground': 'oklch(0.216 0.006 56.043)',\n muted: 'oklch(0.97 0.001 106.424)',\n 'muted-foreground': 'oklch(0.553 0.013 58.071)',\n accent: 'oklch(0.97 0.001 106.424)',\n 'accent-foreground': 'oklch(0.216 0.006 56.043)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.923 0.003 48.717)',\n input: 'oklch(0.923 0.003 48.717)',\n ring: 'oklch(0.709 0.01 56.259)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.001 106.423)',\n 'sidebar-foreground': 'oklch(0.147 0.004 49.25)',\n 'sidebar-primary': 'oklch(0.216 0.006 56.043)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.97 0.001 106.424)',\n 'sidebar-accent-foreground': 'oklch(0.216 0.006 56.043)',\n 'sidebar-border': 'oklch(0.923 0.003 48.717)',\n 'sidebar-ring': 'oklch(0.709 0.01 56.259)',\n },\n dark: {\n background: 'oklch(0.147 0.004 49.25)',\n foreground: 'oklch(0.985 0.001 106.423)',\n card: 'oklch(0.216 0.006 56.043)',\n 'card-foreground': 'oklch(0.985 0.001 106.423)',\n popover: 'oklch(0.216 0.006 56.043)',\n 'popover-foreground': 'oklch(0.985 0.001 106.423)',\n primary: 'oklch(0.923 0.003 48.717)',\n 'primary-foreground': 'oklch(0.216 0.006 56.043)',\n secondary: 'oklch(0.268 0.007 34.298)',\n 'secondary-foreground': 'oklch(0.985 0.001 106.423)',\n muted: 'oklch(0.268 0.007 34.298)',\n 'muted-foreground': 'oklch(0.709 0.01 56.259)',\n accent: 'oklch(0.268 0.007 34.298)',\n 'accent-foreground': 'oklch(0.985 0.001 106.423)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.553 0.013 58.071)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.216 0.006 56.043)',\n 'sidebar-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-accent': 'oklch(0.268 0.007 34.298)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.001 106.423)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.553 0.013 58.071)',\n },\n },\n },\n {\n name: 'zinc',\n title: 'Zinc',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.141 0.005 285.823)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.141 0.005 285.823)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.141 0.005 285.823)',\n primary: 'oklch(0.21 0.006 285.885)',\n 'primary-foreground': 'oklch(0.985 0 0)',\n secondary: 'oklch(0.967 0.001 286.375)',\n 'secondary-foreground': 'oklch(0.21 0.006 285.885)',\n muted: 'oklch(0.967 0.001 286.375)',\n 'muted-foreground': 'oklch(0.552 0.016 285.938)',\n accent: 'oklch(0.967 0.001 286.375)',\n 'accent-foreground': 'oklch(0.21 0.006 285.885)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.92 0.004 286.32)',\n input: 'oklch(0.92 0.004 286.32)',\n ring: 'oklch(0.705 0.015 286.067)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0 0)',\n 'sidebar-foreground': 'oklch(0.141 0.005 285.823)',\n 'sidebar-primary': 'oklch(0.21 0.006 285.885)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.967 0.001 286.375)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.006 285.885)',\n 'sidebar-border': 'oklch(0.92 0.004 286.32)',\n 'sidebar-ring': 'oklch(0.705 0.015 286.067)',\n },\n dark: {\n background: 'oklch(0.141 0.005 285.823)',\n foreground: 'oklch(0.985 0 0)',\n card: 'oklch(0.21 0.006 285.885)',\n 'card-foreground': 'oklch(0.985 0 0)',\n popover: 'oklch(0.21 0.006 285.885)',\n 'popover-foreground': 'oklch(0.985 0 0)',\n primary: 'oklch(0.92 0.004 286.32)',\n 'primary-foreground': 'oklch(0.21 0.006 285.885)',\n secondary: 'oklch(0.274 0.006 286.033)',\n 'secondary-foreground': 'oklch(0.985 0 0)',\n muted: 'oklch(0.274 0.006 286.033)',\n 'muted-foreground': 'oklch(0.705 0.015 286.067)',\n accent: 'oklch(0.274 0.006 286.033)',\n 'accent-foreground': 'oklch(0.985 0 0)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.552 0.016 285.938)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.006 285.885)',\n 'sidebar-foreground': 'oklch(0.985 0 0)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0 0)',\n 'sidebar-accent': 'oklch(0.274 0.006 286.033)',\n 'sidebar-accent-foreground': 'oklch(0.985 0 0)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.552 0.016 285.938)',\n },\n },\n },\n {\n name: 'gray',\n title: 'Gray',\n cssVars: {\n light: {\n background: 'oklch(1 0 0)',\n foreground: 'oklch(0.13 0.028 261.692)',\n card: 'oklch(1 0 0)',\n 'card-foreground': 'oklch(0.13 0.028 261.692)',\n popover: 'oklch(1 0 0)',\n 'popover-foreground': 'oklch(0.13 0.028 261.692)',\n primary: 'oklch(0.21 0.034 264.665)',\n 'primary-foreground': 'oklch(0.985 0.002 247.839)',\n secondary: 'oklch(0.967 0.003 264.542)',\n 'secondary-foreground': 'oklch(0.21 0.034 264.665)',\n muted: 'oklch(0.967 0.003 264.542)',\n 'muted-foreground': 'oklch(0.551 0.027 264.364)',\n accent: 'oklch(0.967 0.003 264.542)',\n 'accent-foreground': 'oklch(0.21 0.034 264.665)',\n destructive: 'oklch(0.577 0.245 27.325)',\n border: 'oklch(0.928 0.006 264.531)',\n input: 'oklch(0.928 0.006 264.531)',\n ring: 'oklch(0.707 0.022 261.325)',\n 'chart-1': 'oklch(0.646 0.222 41.116)',\n 'chart-2': 'oklch(0.6 0.118 184.704)',\n 'chart-3': 'oklch(0.398 0.07 227.392)',\n 'chart-4': 'oklch(0.828 0.189 84.429)',\n 'chart-5': 'oklch(0.769 0.188 70.08)',\n radius: '0.625rem',\n sidebar: 'oklch(0.985 0.002 247.839)',\n 'sidebar-foreground': 'oklch(0.13 0.028 261.692)',\n 'sidebar-primary': 'oklch(0.21 0.034 264.665)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.967 0.003 264.542)',\n 'sidebar-accent-foreground': 'oklch(0.21 0.034 264.665)',\n 'sidebar-border': 'oklch(0.928 0.006 264.531)',\n 'sidebar-ring': 'oklch(0.707 0.022 261.325)',\n },\n dark: {\n background: 'oklch(0.13 0.028 261.692)',\n foreground: 'oklch(0.985 0.002 247.839)',\n card: 'oklch(0.21 0.034 264.665)',\n 'card-foreground': 'oklch(0.985 0.002 247.839)',\n popover: 'oklch(0.21 0.034 264.665)',\n 'popover-foreground': 'oklch(0.985 0.002 247.839)',\n primary: 'oklch(0.928 0.006 264.531)',\n 'primary-foreground': 'oklch(0.21 0.034 264.665)',\n secondary: 'oklch(0.278 0.033 256.848)',\n 'secondary-foreground': 'oklch(0.985 0.002 247.839)',\n muted: 'oklch(0.278 0.033 256.848)',\n 'muted-foreground': 'oklch(0.707 0.022 261.325)',\n accent: 'oklch(0.278 0.033 256.848)',\n 'accent-foreground': 'oklch(0.985 0.002 247.839)',\n destructive: 'oklch(0.704 0.191 22.216)',\n border: 'oklch(1 0 0 / 10%)',\n input: 'oklch(1 0 0 / 15%)',\n ring: 'oklch(0.551 0.027 264.364)',\n 'chart-1': 'oklch(0.488 0.243 264.376)',\n 'chart-2': 'oklch(0.696 0.17 162.48)',\n 'chart-3': 'oklch(0.769 0.188 70.08)',\n 'chart-4': 'oklch(0.627 0.265 303.9)',\n 'chart-5': 'oklch(0.645 0.246 16.439)',\n sidebar: 'oklch(0.21 0.034 264.665)',\n 'sidebar-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-primary': 'oklch(0.488 0.243 264.376)',\n 'sidebar-primary-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-accent': 'oklch(0.278 0.033 256.848)',\n 'sidebar-accent-foreground': 'oklch(0.985 0.002 247.839)',\n 'sidebar-border': 'oklch(1 0 0 / 10%)',\n 'sidebar-ring': 'oklch(0.551 0.027 264.364)',\n },\n },\n },\n];\n\nexport type RadiusOption = {\n name: 'default' | 'none' | 'small' | 'medium' | 'large';\n label: string;\n value: string;\n};\n\nexport const RADII: RadiusOption[] = [\n { name: 'default', label: 'Default', value: '' },\n { name: 'none', label: 'None', value: '0' },\n { name: 'small', label: 'Small', value: '0.45rem' },\n { name: 'medium', label: 'Medium', value: '0.625rem' },\n { name: 'large', label: 'Large', value: '0.875rem' },\n];\n\nexport function getBaseColor(name: string): BaseColorTheme | undefined {\n return BASE_COLORS.find((c) => c.name === name);\n}\n\nexport function getRadius(name: string): RadiusOption | undefined {\n return RADII.find((r) => r.name === name);\n}\n","/**\n * Canonical theme variable names aligned with shadcn/ui semantic tokens.\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nexport const THEME_VAR_NAMES = [\n '--background',\n '--foreground',\n '--card',\n '--card-foreground',\n '--popover',\n '--popover-foreground',\n '--primary',\n '--primary-foreground',\n '--secondary',\n '--secondary-foreground',\n '--muted',\n '--muted-foreground',\n '--accent',\n '--accent-foreground',\n '--destructive',\n '--destructive-foreground',\n '--border',\n '--input',\n '--ring',\n '--chart-1',\n '--chart-2',\n '--chart-3',\n '--chart-4',\n '--chart-5',\n '--radius',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-border',\n '--sidebar-ring',\n '--sidebar-active', // mesob extension\n '--overlay', // mesob extension\n] as const;\n\nexport type ThemeVarName = (typeof THEME_VAR_NAMES)[number];\n\nconst THEME_VAR_SET = new Set<string>(THEME_VAR_NAMES);\n\n/** Vars that buildTheme provides (minimal required set). */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--background',\n '--foreground',\n '--primary',\n '--primary-foreground',\n '--radius',\n];\n\nexport type ThemeValidation = {\n valid: boolean;\n unknown: string[];\n missing: string[];\n};\n\n/**\n * Validates a theme object against the consumer theme contract.\n * - unknown: keys not in THEME_VAR_NAMES (typos / unsupported).\n * - missing: required vars absent (for full theme override).\n */\nexport function validateTheme(theme: Record<string, string>): ThemeValidation {\n const keys = new Set(Object.keys(theme));\n const unknown: string[] = [];\n const missing: string[] = [];\n\n for (const key of keys) {\n if (!THEME_VAR_SET.has(key)) {\n unknown.push(key);\n }\n }\n for (const key of REQUIRED_THEME_VARS) {\n if (!keys.has(key)) {\n missing.push(key);\n }\n }\n\n return {\n valid: unknown.length === 0 && missing.length === 0,\n unknown,\n missing,\n };\n}\n\n/** Shared component size scale (xs–xl) aligned with Mantine */\nexport type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Shared component radius scale aligned with Mantine */\nexport type ComponentRadius = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** Order of Input.Wrapper elements (Mantine-like) */\nexport type InputWrapperOrder = ('label' | 'input' | 'description' | 'error')[];\n\n/** Shared component color (theme key) */\nexport type ComponentColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'destructive'\n | string;\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"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","names":[]}
|
package/dist/lib/locale.d.ts
CHANGED
|
@@ -2,37 +2,26 @@ import { z } from 'zod';
|
|
|
2
2
|
|
|
3
3
|
type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';
|
|
4
4
|
type Locale = {
|
|
5
|
-
[
|
|
5
|
+
[Key in LocaleKey | string]?: string;
|
|
6
6
|
};
|
|
7
7
|
type Translation = (key: string) => string;
|
|
8
|
+
/** Fallback when MesobProvider does not receive defaultLanguage/supportedLanguages */
|
|
8
9
|
declare const DEFAULT_LANGUAGE = "en";
|
|
9
10
|
type SupportedLanguage = {
|
|
10
11
|
value: string;
|
|
11
12
|
label: string;
|
|
12
13
|
key: string;
|
|
13
14
|
};
|
|
15
|
+
/** Fallback when MesobProvider does not receive supportedLanguages */
|
|
14
16
|
declare const SUPPORTED_LANGUAGES: SupportedLanguage[];
|
|
15
|
-
declare const LOCALE_INPUT_DEFAULT:
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
declare const LOCALE_INPUT_DEFAULT: Locale;
|
|
18
|
+
declare const LOCALE_REQUIRED_INPUT_SCHEMA: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
19
|
+
declare const LOCALE_OPTIONAL_INPUT_SCHEMA: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
20
|
+
declare function getLocaleInputDefault(supportedLanguages: SupportedLanguage[]): Record<string, string>;
|
|
18
21
|
type SchemaAccumulator = {
|
|
19
22
|
[key: string]: z.ZodTypeAny;
|
|
20
23
|
};
|
|
21
|
-
declare function createLocalInputSchema(defaultValidation: z.ZodTypeAny, otherValidation: z.ZodTypeAny): z.ZodObject<SchemaAccumulator>;
|
|
22
|
-
declare function createLocalRequiredInputSchema(validation: z.ZodTypeAny): z.ZodEffects<z.ZodObject<SchemaAccumulator>>;
|
|
23
|
-
declare const LOCALE_REQUIRED_INPUT_SCHEMA: z.ZodEffects<z.ZodObject<SchemaAccumulator, z.UnknownKeysParam, z.ZodTypeAny, {
|
|
24
|
-
[x: string]: any;
|
|
25
|
-
}, {
|
|
26
|
-
[x: string]: any;
|
|
27
|
-
}>, {
|
|
28
|
-
[x: string]: any;
|
|
29
|
-
}, {
|
|
30
|
-
[x: string]: any;
|
|
31
|
-
}>;
|
|
32
|
-
declare const LOCALE_OPTIONAL_INPUT_SCHEMA: z.ZodObject<SchemaAccumulator, z.UnknownKeysParam, z.ZodTypeAny, {
|
|
33
|
-
[x: string]: any;
|
|
34
|
-
}, {
|
|
35
|
-
[x: string]: any;
|
|
36
|
-
}>;
|
|
24
|
+
declare function createLocalInputSchema(defaultLanguage: string, supportedLanguages: SupportedLanguage[], defaultValidation: z.ZodTypeAny, otherValidation: z.ZodTypeAny): z.ZodObject<SchemaAccumulator>;
|
|
25
|
+
declare function createLocalRequiredInputSchema(supportedLanguages: SupportedLanguage[], validation: z.ZodTypeAny): z.ZodEffects<z.ZodObject<SchemaAccumulator>>;
|
|
37
26
|
|
|
38
|
-
export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, type Locale, type LocaleKey, SUPPORTED_LANGUAGES, type SupportedLanguage, type Translation, createLocalInputSchema, createLocalRequiredInputSchema };
|
|
27
|
+
export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, type Locale, type LocaleKey, SUPPORTED_LANGUAGES, type SupportedLanguage, type Translation, createLocalInputSchema, createLocalRequiredInputSchema, getLocaleInputDefault };
|
package/dist/lib/locale.js
CHANGED
|
@@ -5,18 +5,25 @@ var SUPPORTED_LANGUAGES = [
|
|
|
5
5
|
{ value: "en", label: "English", key: "En" },
|
|
6
6
|
{ value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" }
|
|
7
7
|
];
|
|
8
|
-
var
|
|
9
|
-
|
|
8
|
+
var localeRecord = z.record(z.string(), z.string());
|
|
9
|
+
var LOCALE_INPUT_DEFAULT = {};
|
|
10
|
+
var LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(
|
|
11
|
+
(o) => Object.keys(o).length > 0,
|
|
12
|
+
{ message: "At least one locale required" }
|
|
10
13
|
);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
var LOCALE_OPTIONAL_INPUT_SCHEMA = localeRecord;
|
|
15
|
+
function getLocaleInputDefault(supportedLanguages) {
|
|
16
|
+
return Object.fromEntries(supportedLanguages.map(({ value }) => [value, ""]));
|
|
17
|
+
}
|
|
18
|
+
function createLocalInputSchema(defaultLanguage, supportedLanguages, defaultValidation, otherValidation) {
|
|
19
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
20
|
+
acc[value] = value === defaultLanguage ? defaultValidation : otherValidation;
|
|
14
21
|
return acc;
|
|
15
22
|
}, {});
|
|
16
23
|
return z.object(schemaDefinition);
|
|
17
24
|
}
|
|
18
|
-
function createLocalRequiredInputSchema(validation) {
|
|
19
|
-
const schemaDefinition =
|
|
25
|
+
function createLocalRequiredInputSchema(supportedLanguages, validation) {
|
|
26
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
20
27
|
acc[value] = validation;
|
|
21
28
|
return acc;
|
|
22
29
|
}, {});
|
|
@@ -25,7 +32,7 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
25
32
|
(value) => typeof value === "string" && value.trim().length > 0
|
|
26
33
|
);
|
|
27
34
|
if (!hasValue) {
|
|
28
|
-
for (const { value } of
|
|
35
|
+
for (const { value } of supportedLanguages) {
|
|
29
36
|
ctx.addIssue({
|
|
30
37
|
code: z.ZodIssueCode.custom,
|
|
31
38
|
message: "field is required",
|
|
@@ -35,13 +42,6 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
35
42
|
}
|
|
36
43
|
});
|
|
37
44
|
}
|
|
38
|
-
var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
|
|
39
|
-
z.string().optional()
|
|
40
|
-
);
|
|
41
|
-
var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
|
|
42
|
-
z.string().optional(),
|
|
43
|
-
z.string().optional()
|
|
44
|
-
);
|
|
45
45
|
export {
|
|
46
46
|
DEFAULT_LANGUAGE,
|
|
47
47
|
LOCALE_INPUT_DEFAULT,
|
|
@@ -49,6 +49,7 @@ export {
|
|
|
49
49
|
LOCALE_REQUIRED_INPUT_SCHEMA,
|
|
50
50
|
SUPPORTED_LANGUAGES,
|
|
51
51
|
createLocalInputSchema,
|
|
52
|
-
createLocalRequiredInputSchema
|
|
52
|
+
createLocalRequiredInputSchema,
|
|
53
|
+
getLocaleInputDefault
|
|
53
54
|
};
|
|
54
55
|
//# sourceMappingURL=locale.js.map
|
package/dist/lib/locale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/locale.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [
|
|
1
|
+
{"version":3,"sources":["../../src/lib/locale.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [Key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\n/** Fallback when MesobProvider does not receive defaultLanguage/supportedLanguages */\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\n/** Fallback when MesobProvider does not receive supportedLanguages */\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nconst localeRecord = z.record(z.string(), z.string());\nexport const LOCALE_INPUT_DEFAULT: Locale = {};\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(\n (o) => Object.keys(o).length > 0,\n { message: 'At least one locale required' },\n);\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = localeRecord;\n\nexport function getLocaleInputDefault(\n supportedLanguages: SupportedLanguage[],\n): Record<string, string> {\n return Object.fromEntries(supportedLanguages.map(({ value }) => [value, '']));\n}\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultLanguage: string,\n supportedLanguages: SupportedLanguage[],\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === defaultLanguage ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n supportedLanguages: SupportedLanguage[],\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of supportedLanguages) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAWX,IAAM,mBAAmB;AAKzB,IAAM,sBAA2C;AAAA,EACtD,EAAE,OAAO,MAAM,OAAO,WAAW,KAAK,KAAK;AAAA,EAC3C,EAAE,OAAO,MAAM,OAAO,4BAAQ,KAAK,eAAK;AAC1C;AAEA,IAAM,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAC7C,IAAM,uBAA+B,CAAC;AACtC,IAAM,+BAA+B,aAAa;AAAA,EACvD,CAAC,MAAM,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EAC/B,EAAE,SAAS,+BAA+B;AAC5C;AACO,IAAM,+BAA+B;AAErC,SAAS,sBACd,oBACwB;AACxB,SAAO,OAAO,YAAY,mBAAmB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E;AAMO,SAAS,uBACd,iBACA,oBACA,mBACA,iBACgC;AAChC,QAAM,mBACJ,mBAAmB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAC/D,QAAI,KAAK,IACP,UAAU,kBAAkB,oBAAoB;AAClD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB;AAClC;AAEO,SAAS,+BACd,oBACA,YAC8C;AAC9C,QAAM,mBACJ,mBAAmB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAC/D,QAAI,KAAK,IAAI;AACb,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC3D,UAAM,WAAW,OAAO,OAAO,IAAI,EAAE;AAAA,MACnC,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA,IAChE;AAEA,QAAI,CAAC,UAAU;AACb,iBAAW,EAAE,MAAM,KAAK,oBAAoB;AAC1C,YAAI,SAAS;AAAA,UACX,MAAM,EAAE,aAAa;AAAA,UACrB,SAAS;AAAA,UACT,MAAM,CAAC,KAAK;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/dist/providers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { createNavigation } from 'next-intl/navigation';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
|
-
import { SupportedLanguage } from './lib/locale.js';
|
|
4
|
+
import { SupportedLanguage, createLocalRequiredInputSchema, createLocalInputSchema } from './lib/locale.js';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
|
7
7
|
type Navigation = ReturnType<typeof createNavigation>;
|
|
@@ -29,5 +29,10 @@ declare function useLocaleConfig(): {
|
|
|
29
29
|
defaultLanguage: string;
|
|
30
30
|
supportedLanguages: SupportedLanguage[];
|
|
31
31
|
};
|
|
32
|
+
declare function useLocaleSchemas(): {
|
|
33
|
+
localeInputDefault: Record<string, string>;
|
|
34
|
+
requiredSchema: ReturnType<typeof createLocalRequiredInputSchema>;
|
|
35
|
+
optionalSchema: ReturnType<typeof createLocalInputSchema>;
|
|
36
|
+
};
|
|
32
37
|
|
|
33
|
-
export { MesobProvider, type MesobProviderProps, useLocaleConfig, useMesob };
|
|
38
|
+
export { MesobProvider, type MesobProviderProps, useLocaleConfig, useLocaleSchemas, useMesob };
|
package/dist/providers.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { useLocale } from "next-intl";
|
|
3
3
|
import { createNavigation } from "next-intl/navigation";
|
|
4
4
|
import { createContext, useContext, useMemo } from "react";
|
|
5
|
+
import { z as z2 } from "zod";
|
|
5
6
|
|
|
6
7
|
// src/components/ui/tooltip.tsx
|
|
7
8
|
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
@@ -33,18 +34,23 @@ var SUPPORTED_LANGUAGES = [
|
|
|
33
34
|
{ value: "en", label: "English", key: "En" },
|
|
34
35
|
{ value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" }
|
|
35
36
|
];
|
|
36
|
-
var
|
|
37
|
-
|
|
37
|
+
var localeRecord = z.record(z.string(), z.string());
|
|
38
|
+
var LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(
|
|
39
|
+
(o) => Object.keys(o).length > 0,
|
|
40
|
+
{ message: "At least one locale required" }
|
|
38
41
|
);
|
|
39
|
-
function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
function getLocaleInputDefault(supportedLanguages) {
|
|
43
|
+
return Object.fromEntries(supportedLanguages.map(({ value }) => [value, ""]));
|
|
44
|
+
}
|
|
45
|
+
function createLocalInputSchema(defaultLanguage, supportedLanguages, defaultValidation, otherValidation) {
|
|
46
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
47
|
+
acc[value] = value === defaultLanguage ? defaultValidation : otherValidation;
|
|
42
48
|
return acc;
|
|
43
49
|
}, {});
|
|
44
50
|
return z.object(schemaDefinition);
|
|
45
51
|
}
|
|
46
|
-
function createLocalRequiredInputSchema(validation) {
|
|
47
|
-
const schemaDefinition =
|
|
52
|
+
function createLocalRequiredInputSchema(supportedLanguages, validation) {
|
|
53
|
+
const schemaDefinition = supportedLanguages.reduce((acc, { value }) => {
|
|
48
54
|
acc[value] = validation;
|
|
49
55
|
return acc;
|
|
50
56
|
}, {});
|
|
@@ -53,7 +59,7 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
53
59
|
(value) => typeof value === "string" && value.trim().length > 0
|
|
54
60
|
);
|
|
55
61
|
if (!hasValue) {
|
|
56
|
-
for (const { value } of
|
|
62
|
+
for (const { value } of supportedLanguages) {
|
|
57
63
|
ctx.addIssue({
|
|
58
64
|
code: z.ZodIssueCode.custom,
|
|
59
65
|
message: "field is required",
|
|
@@ -63,13 +69,6 @@ function createLocalRequiredInputSchema(validation) {
|
|
|
63
69
|
}
|
|
64
70
|
});
|
|
65
71
|
}
|
|
66
|
-
var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
|
|
67
|
-
z.string().optional()
|
|
68
|
-
);
|
|
69
|
-
var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
|
|
70
|
-
z.string().optional(),
|
|
71
|
-
z.string().optional()
|
|
72
|
-
);
|
|
73
72
|
|
|
74
73
|
// src/provider/mesob-provider.tsx
|
|
75
74
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
@@ -127,9 +126,29 @@ function useLocaleConfig() {
|
|
|
127
126
|
supportedLanguages: mesob?.supportedLanguages ?? SUPPORTED_LANGUAGES
|
|
128
127
|
};
|
|
129
128
|
}
|
|
129
|
+
function useLocaleSchemas() {
|
|
130
|
+
const { defaultLanguage, supportedLanguages } = useLocaleConfig();
|
|
131
|
+
return useMemo(
|
|
132
|
+
() => ({
|
|
133
|
+
localeInputDefault: getLocaleInputDefault(supportedLanguages),
|
|
134
|
+
requiredSchema: createLocalRequiredInputSchema(
|
|
135
|
+
supportedLanguages,
|
|
136
|
+
z2.string().optional()
|
|
137
|
+
),
|
|
138
|
+
optionalSchema: createLocalInputSchema(
|
|
139
|
+
defaultLanguage,
|
|
140
|
+
supportedLanguages,
|
|
141
|
+
z2.string().optional(),
|
|
142
|
+
z2.string().optional()
|
|
143
|
+
)
|
|
144
|
+
}),
|
|
145
|
+
[defaultLanguage, supportedLanguages]
|
|
146
|
+
);
|
|
147
|
+
}
|
|
130
148
|
export {
|
|
131
149
|
MesobProvider,
|
|
132
150
|
useLocaleConfig,
|
|
151
|
+
useLocaleSchemas,
|
|
133
152
|
useMesob
|
|
134
153
|
};
|
|
135
154
|
//# sourceMappingURL=providers.js.map
|
package/dist/providers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider/mesob-provider.tsx","../src/components/ui/tooltip.tsx","../src/lib/utils.ts","../src/lib/locale.ts"],"sourcesContent":["'use client';\n\nimport { useLocale } from 'next-intl';\nimport { createNavigation } from 'next-intl/navigation';\nimport { createContext, type ReactNode, useContext, useMemo } from 'react';\nimport { TooltipProvider } from '../components/ui/tooltip';\nimport {\n DEFAULT_LANGUAGE,\n SUPPORTED_LANGUAGES,\n type SupportedLanguage,\n} from '../lib/locale';\n\ntype Navigation = ReturnType<typeof createNavigation>;\n\ntype MesobContextValue = {\n navigation: Navigation;\n linkComponent: Navigation['Link'];\n goBack: () => void;\n navigate: (href: string) => void;\n pathname: string;\n locale: string;\n defaultLanguage: string;\n supportedLanguages: SupportedLanguage[];\n t?: (key: string, params?: Record<string, string | number>) => string;\n};\n\nconst MesobContext = createContext<MesobContextValue | null>(null);\n\nconst MESOB_ERR = '[MesobProvider]';\n\nexport type MesobProviderProps = {\n children: ReactNode;\n routing: Parameters<typeof createNavigation>[0];\n linkComponent?: Navigation['Link'];\n defaultLanguage?: string;\n supportedLanguages?: SupportedLanguage[];\n};\n\nexport function MesobProvider({\n children,\n routing,\n linkComponent: linkComponentProp,\n defaultLanguage = DEFAULT_LANGUAGE,\n supportedLanguages = SUPPORTED_LANGUAGES,\n}: MesobProviderProps) {\n if (!routing) {\n throw new Error(`${MESOB_ERR} routing is required`);\n }\n\n const locale = useLocale();\n const navigation = useMemo(() => createNavigation(routing), [routing]);\n const router = navigation.useRouter();\n const pathname = navigation.usePathname();\n\n const value = useMemo(() => {\n const linkComponent = linkComponentProp ?? navigation?.Link;\n if (!linkComponent) {\n throw new Error(\n `${MESOB_ERR} linkComponent or valid createNavigation required`,\n );\n }\n return {\n navigation,\n linkComponent,\n goBack: () => router.back(),\n navigate: (href: string) => router.push(href),\n pathname,\n locale,\n defaultLanguage,\n supportedLanguages,\n };\n }, [\n navigation,\n linkComponentProp,\n router,\n pathname,\n locale,\n defaultLanguage,\n supportedLanguages,\n ]);\n\n return (\n <MesobContext.Provider value={value}>\n <TooltipProvider delay={0}>{children}</TooltipProvider>\n </MesobContext.Provider>\n );\n}\n\nexport function useMesob(): MesobContextValue | null {\n return useContext(MesobContext);\n}\n\nexport function useLocaleConfig(): {\n defaultLanguage: string;\n supportedLanguages: SupportedLanguage[];\n} {\n const mesob = useMesob();\n return {\n defaultLanguage: mesob?.defaultLanguage ?? DEFAULT_LANGUAGE,\n supportedLanguages: mesob?.supportedLanguages ?? SUPPORTED_LANGUAGES,\n };\n}\n","'use client';\n\nimport { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';\n\nimport { cn } from '../../lib/utils';\n\nfunction TooltipProvider({\n delay = 0,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n side = 'top',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n >) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n 'cn-tooltip-content cn-tooltip-content-logical bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin)',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"cn-tooltip-arrow cn-tooltip-arrow-logical bg-foreground fill-foreground z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nexport const LOCALE_INPUT_DEFAULT = Object.fromEntries(\n SUPPORTED_LANGUAGES.map(({ value }) => [value, '']),\n);\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n SUPPORTED_LANGUAGES.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of SUPPORTED_LANGUAGES) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(\n z.string().optional(),\n);\n\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(\n z.string().optional(),\n z.string().optional(),\n);\n"],"mappings":"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","names":["jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/mesob-provider.tsx","../src/components/ui/tooltip.tsx","../src/lib/utils.ts","../src/lib/locale.ts"],"sourcesContent":["'use client';\n\nimport { useLocale } from 'next-intl';\nimport { createNavigation } from 'next-intl/navigation';\nimport { createContext, type ReactNode, useContext, useMemo } from 'react';\nimport { z } from 'zod';\nimport { TooltipProvider } from '../components/ui/tooltip';\nimport {\n createLocalInputSchema,\n createLocalRequiredInputSchema,\n DEFAULT_LANGUAGE,\n getLocaleInputDefault,\n SUPPORTED_LANGUAGES,\n type SupportedLanguage,\n} from '../lib/locale';\n\ntype Navigation = ReturnType<typeof createNavigation>;\n\ntype MesobContextValue = {\n navigation: Navigation;\n linkComponent: Navigation['Link'];\n goBack: () => void;\n navigate: (href: string) => void;\n pathname: string;\n locale: string;\n defaultLanguage: string;\n supportedLanguages: SupportedLanguage[];\n t?: (key: string, params?: Record<string, string | number>) => string;\n};\n\nconst MesobContext = createContext<MesobContextValue | null>(null);\n\nconst MESOB_ERR = '[MesobProvider]';\n\nexport type MesobProviderProps = {\n children: ReactNode;\n routing: Parameters<typeof createNavigation>[0];\n linkComponent?: Navigation['Link'];\n defaultLanguage?: string;\n supportedLanguages?: SupportedLanguage[];\n};\n\nexport function MesobProvider({\n children,\n routing,\n linkComponent: linkComponentProp,\n defaultLanguage = DEFAULT_LANGUAGE,\n supportedLanguages = SUPPORTED_LANGUAGES,\n}: MesobProviderProps) {\n if (!routing) {\n throw new Error(`${MESOB_ERR} routing is required`);\n }\n\n const locale = useLocale();\n const navigation = useMemo(() => createNavigation(routing), [routing]);\n const router = navigation.useRouter();\n const pathname = navigation.usePathname();\n\n const value = useMemo(() => {\n const linkComponent = linkComponentProp ?? navigation?.Link;\n if (!linkComponent) {\n throw new Error(\n `${MESOB_ERR} linkComponent or valid createNavigation required`,\n );\n }\n return {\n navigation,\n linkComponent,\n goBack: () => router.back(),\n navigate: (href: string) => router.push(href),\n pathname,\n locale,\n defaultLanguage,\n supportedLanguages,\n };\n }, [\n navigation,\n linkComponentProp,\n router,\n pathname,\n locale,\n defaultLanguage,\n supportedLanguages,\n ]);\n\n return (\n <MesobContext.Provider value={value}>\n <TooltipProvider delay={0}>{children}</TooltipProvider>\n </MesobContext.Provider>\n );\n}\n\nexport function useMesob(): MesobContextValue | null {\n return useContext(MesobContext);\n}\n\nexport function useLocaleConfig(): {\n defaultLanguage: string;\n supportedLanguages: SupportedLanguage[];\n} {\n const mesob = useMesob();\n return {\n defaultLanguage: mesob?.defaultLanguage ?? DEFAULT_LANGUAGE,\n supportedLanguages: mesob?.supportedLanguages ?? SUPPORTED_LANGUAGES,\n };\n}\n\nexport function useLocaleSchemas(): {\n localeInputDefault: Record<string, string>;\n requiredSchema: ReturnType<typeof createLocalRequiredInputSchema>;\n optionalSchema: ReturnType<typeof createLocalInputSchema>;\n} {\n const { defaultLanguage, supportedLanguages } = useLocaleConfig();\n return useMemo(\n () => ({\n localeInputDefault: getLocaleInputDefault(supportedLanguages),\n requiredSchema: createLocalRequiredInputSchema(\n supportedLanguages,\n z.string().optional(),\n ),\n optionalSchema: createLocalInputSchema(\n defaultLanguage,\n supportedLanguages,\n z.string().optional(),\n z.string().optional(),\n ),\n }),\n [defaultLanguage, supportedLanguages],\n );\n}\n","'use client';\n\nimport { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';\n\nimport { cn } from '../../lib/utils';\n\nfunction TooltipProvider({\n delay = 0,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n side = 'top',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n >) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n 'cn-tooltip-content cn-tooltip-content-logical bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin)',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"cn-tooltip-arrow cn-tooltip-arrow-logical bg-foreground fill-foreground z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { z } from 'zod';\n\nexport type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';\n\nexport type Locale = {\n [Key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\n/** Fallback when MesobProvider does not receive defaultLanguage/supportedLanguages */\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport type SupportedLanguage = { value: string; label: string; key: string };\n\n/** Fallback when MesobProvider does not receive supportedLanguages */\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n];\n\nconst localeRecord = z.record(z.string(), z.string());\nexport const LOCALE_INPUT_DEFAULT: Locale = {};\nexport const LOCALE_REQUIRED_INPUT_SCHEMA = localeRecord.refine(\n (o) => Object.keys(o).length > 0,\n { message: 'At least one locale required' },\n);\nexport const LOCALE_OPTIONAL_INPUT_SCHEMA = localeRecord;\n\nexport function getLocaleInputDefault(\n supportedLanguages: SupportedLanguage[],\n): Record<string, string> {\n return Object.fromEntries(supportedLanguages.map(({ value }) => [value, '']));\n}\n\ntype SchemaAccumulator = {\n [key: string]: z.ZodTypeAny;\n};\n\nexport function createLocalInputSchema(\n defaultLanguage: string,\n supportedLanguages: SupportedLanguage[],\n defaultValidation: z.ZodTypeAny,\n otherValidation: z.ZodTypeAny,\n): z.ZodObject<SchemaAccumulator> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] =\n value === defaultLanguage ? defaultValidation : otherValidation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition);\n}\n\nexport function createLocalRequiredInputSchema(\n supportedLanguages: SupportedLanguage[],\n validation: z.ZodTypeAny,\n): z.ZodEffects<z.ZodObject<SchemaAccumulator>> {\n const schemaDefinition: { [key: string]: z.ZodTypeAny } =\n supportedLanguages.reduce((acc: SchemaAccumulator, { value }) => {\n acc[value] = validation;\n return acc;\n }, {});\n\n return z.object(schemaDefinition).superRefine((data, ctx) => {\n const hasValue = Object.values(data).some(\n (value) => typeof value === 'string' && value.trim().length > 0,\n );\n\n if (!hasValue) {\n for (const { value } of supportedLanguages) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'field is required',\n path: [value],\n });\n }\n }\n });\n}\n"],"mappings":";AAEA,SAAS,iBAAiB;AAC1B,SAAS,wBAAwB;AACjC,SAAS,eAA+B,YAAY,eAAe;AACnE,SAAS,KAAAA,UAAS;;;ACHlB,SAAS,WAAW,wBAAwB;;;ACF5C,SAA0B,YAAY;AACtC,SAAS,eAAe;;;ADUpB,cAsCI,YAtCJ;AALJ,SAAS,gBAAgB;AAAA,EACvB,QAAQ;AAAA,EACR,GAAG;AACL,GAAoC;AAClC,SACE;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AEjBA,SAAS,SAAS;AAWX,IAAM,mBAAmB;AAKzB,IAAM,sBAA2C;AAAA,EACtD,EAAE,OAAO,MAAM,OAAO,WAAW,KAAK,KAAK;AAAA,EAC3C,EAAE,OAAO,MAAM,OAAO,4BAAQ,KAAK,eAAK;AAC1C;AAEA,IAAM,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAE7C,IAAM,+BAA+B,aAAa;AAAA,EACvD,CAAC,MAAM,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EAC/B,EAAE,SAAS,+BAA+B;AAC5C;AAGO,SAAS,sBACd,oBACwB;AACxB,SAAO,OAAO,YAAY,mBAAmB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E;AAMO,SAAS,uBACd,iBACA,oBACA,mBACA,iBACgC;AAChC,QAAM,mBACJ,mBAAmB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAC/D,QAAI,KAAK,IACP,UAAU,kBAAkB,oBAAoB;AAClD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB;AAClC;AAEO,SAAS,+BACd,oBACA,YAC8C;AAC9C,QAAM,mBACJ,mBAAmB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAC/D,QAAI,KAAK,IAAI;AACb,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC3D,UAAM,WAAW,OAAO,OAAO,IAAI,EAAE;AAAA,MACnC,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA,IAChE;AAEA,QAAI,CAAC,UAAU;AACb,iBAAW,EAAE,MAAM,KAAK,oBAAoB;AAC1C,YAAI,SAAS;AAAA,UACX,MAAM,EAAE,aAAa;AAAA,UACrB,SAAS;AAAA,UACT,MAAM,CAAC,KAAK;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AHOM,gBAAAC,YAAA;AAzDN,IAAM,eAAe,cAAwC,IAAI;AAEjE,IAAM,YAAY;AAUX,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,qBAAqB;AACvB,GAAuB;AACrB,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,GAAG,SAAS,sBAAsB;AAAA,EACpD;AAEA,QAAM,SAAS,UAAU;AACzB,QAAM,aAAa,QAAQ,MAAM,iBAAiB,OAAO,GAAG,CAAC,OAAO,CAAC;AACrE,QAAM,SAAS,WAAW,UAAU;AACpC,QAAM,WAAW,WAAW,YAAY;AAExC,QAAM,QAAQ,QAAQ,MAAM;AAC1B,UAAM,gBAAgB,qBAAqB,YAAY;AACvD,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI;AAAA,QACR,GAAG,SAAS;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,MAAM,OAAO,KAAK;AAAA,MAC1B,UAAU,CAAC,SAAiB,OAAO,KAAK,IAAI;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAA,KAAC,aAAa,UAAb,EAAsB,OACrB,0BAAAA,KAAC,mBAAgB,OAAO,GAAI,UAAS,GACvC;AAEJ;AAEO,SAAS,WAAqC;AACnD,SAAO,WAAW,YAAY;AAChC;AAEO,SAAS,kBAGd;AACA,QAAM,QAAQ,SAAS;AACvB,SAAO;AAAA,IACL,iBAAiB,OAAO,mBAAmB;AAAA,IAC3C,oBAAoB,OAAO,sBAAsB;AAAA,EACnD;AACF;AAEO,SAAS,mBAId;AACA,QAAM,EAAE,iBAAiB,mBAAmB,IAAI,gBAAgB;AAChE,SAAO;AAAA,IACL,OAAO;AAAA,MACL,oBAAoB,sBAAsB,kBAAkB;AAAA,MAC5D,gBAAgB;AAAA,QACd;AAAA,QACAC,GAAE,OAAO,EAAE,SAAS;AAAA,MACtB;AAAA,MACA,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACAA,GAAE,OAAO,EAAE,SAAS;AAAA,QACpBA,GAAE,OAAO,EAAE,SAAS;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,kBAAkB;AAAA,EACtC;AACF;","names":["z","jsx","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesob/ui",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"motion": "^12.23.25",
|
|
72
72
|
"next-themes": "^0.4.6",
|
|
73
73
|
"react-day-picker": "^9.11.2",
|
|
74
|
+
"react-easy-crop": "^5.5.3",
|
|
74
75
|
"react-hook-form": "^7.66.1",
|
|
75
76
|
"react-resizable-panels": "^3.0.6",
|
|
76
77
|
"react-use": "^17.6.0",
|