@mesob/ui 0.2.4 → 0.2.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/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, Locale, LocaleKey, SUPPORTED_LANGUAGES, Translation, createLocalInputSchema, createLocalRequiredInputSchema } from './lib/locale.js';
1
2
  export { REQUIRED_THEME_VARS, THEME_VAR_NAMES, ThemeValidation, ThemeVarName, validateTheme } from './lib/theme-schema.js';
2
3
  export { cn } from './lib/utils.js';
4
+ import 'zod';
3
5
  import 'clsx';
package/dist/index.js CHANGED
@@ -1,3 +1,49 @@
1
+ // src/lib/locale.ts
2
+ import { z } from "zod";
3
+ var DEFAULT_LANGUAGE = "en";
4
+ var SUPPORTED_LANGUAGES = [
5
+ { value: "en", label: "English", key: "En" },
6
+ { value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" },
7
+ { value: "ar", label: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", key: "\u0627\u0644" }
8
+ ];
9
+ var LOCALE_INPUT_DEFAULT = Object.fromEntries(
10
+ SUPPORTED_LANGUAGES.map(({ value }) => [value, ""])
11
+ );
12
+ function createLocalInputSchema(defaultValidation, otherValidation) {
13
+ const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
14
+ acc[value] = value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;
15
+ return acc;
16
+ }, {});
17
+ return z.object(schemaDefinition);
18
+ }
19
+ function createLocalRequiredInputSchema(validation) {
20
+ const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
21
+ acc[value] = validation;
22
+ return acc;
23
+ }, {});
24
+ return z.object(schemaDefinition).superRefine((data, ctx) => {
25
+ const hasValue = Object.values(data).some(
26
+ (value) => typeof value === "string" && value.trim().length > 0
27
+ );
28
+ if (!hasValue) {
29
+ for (const { value } of SUPPORTED_LANGUAGES) {
30
+ ctx.addIssue({
31
+ code: z.ZodIssueCode.custom,
32
+ message: "field is required",
33
+ path: [value]
34
+ });
35
+ }
36
+ }
37
+ });
38
+ }
39
+ var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
40
+ z.string().optional()
41
+ );
42
+ var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
43
+ z.string().optional(),
44
+ z.string().optional()
45
+ );
46
+
1
47
  // src/lib/theme-schema.ts
2
48
  var SHADE_KEYS = [
3
49
  50,
@@ -95,9 +141,16 @@ function cn(...inputs) {
95
141
  return twMerge(clsx(inputs));
96
142
  }
97
143
  export {
144
+ DEFAULT_LANGUAGE,
145
+ LOCALE_INPUT_DEFAULT,
146
+ LOCALE_OPTIONAL_INPUT_SCHEMA,
147
+ LOCALE_REQUIRED_INPUT_SCHEMA,
98
148
  REQUIRED_THEME_VARS,
149
+ SUPPORTED_LANGUAGES,
99
150
  THEME_VAR_NAMES,
100
151
  cn,
152
+ createLocalInputSchema,
153
+ createLocalRequiredInputSchema,
101
154
  validateTheme
102
155
  };
103
156
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/theme-schema.ts","../src/lib/utils.ts"],"sourcesContent":["/**\n * Canonical theme variable names for consumer theme (theme.css or generateTheme).\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nconst SHADE_KEYS = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const;\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 ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--muted',\n '--muted-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 '--spacing',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-active',\n '--sidebar-border',\n '--sidebar-ring',\n '--overlay',\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 a minimal theme (e.g. generateTheme) should provide for primary/secondary/accent. */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--primary',\n '--primary-foreground',\n ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--radius',\n '--spacing',\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","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":";AAKA,IAAM,aAAa;AAAA,EACjB;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AACnD;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,aAAa,CAAC,EAAE;AAAA,EACzC;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,eAAe,CAAC,EAAE;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,YAAY,CAAC,EAAE;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,IAAM,gBAAgB,IAAI,IAAY,eAAe;AAG9C,IAAM,sBAAyC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,aAAa,CAAC,EAAE;AAAA,EACzC;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,eAAe,CAAC,EAAE;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,GAAG,WAAW,IAAI,CAAC,MAAM,YAAY,CAAC,EAAE;AAAA,EACxC;AAAA,EACA;AACF;AAaO,SAAS,cAAc,OAAgD;AAC5E,QAAM,OAAO,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AACvC,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAE3B,aAAW,OAAO,MAAM;AACtB,QAAI,CAAC,cAAc,IAAI,GAAG,GAAG;AAC3B,cAAQ,KAAK,GAAG;AAAA,IAClB;AAAA,EACF;AACA,aAAW,OAAO,qBAAqB;AACrC,QAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,cAAQ,KAAK,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ,WAAW,KAAK,QAAQ,WAAW;AAAA,IAClD;AAAA,IACA;AAAA,EACF;AACF;;;ACtGA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../src/lib/locale.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 const SUPPORTED_LANGUAGES = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n { value: 'ar', 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 * Canonical theme variable names for consumer theme (theme.css or generateTheme).\n * UI components depend on these CSS vars; consumer defines them.\n */\n\nconst SHADE_KEYS = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const;\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 ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--muted',\n '--muted-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 '--spacing',\n '--sidebar',\n '--sidebar-foreground',\n '--sidebar-primary',\n '--sidebar-primary-foreground',\n '--sidebar-accent',\n '--sidebar-accent-foreground',\n '--sidebar-active',\n '--sidebar-border',\n '--sidebar-ring',\n '--overlay',\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 a minimal theme (e.g. generateTheme) should provide for primary/secondary/accent. */\nexport const REQUIRED_THEME_VARS: readonly string[] = [\n '--primary',\n '--primary-foreground',\n ...SHADE_KEYS.map((s) => `--primary-${s}`),\n '--secondary',\n '--secondary-foreground',\n ...SHADE_KEYS.map((s) => `--secondary-${s}`),\n '--accent',\n '--accent-foreground',\n ...SHADE_KEYS.map((s) => `--accent-${s}`),\n '--radius',\n '--spacing',\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","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":[]}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+
3
+ type LocaleKey = 'am' | 'en' | 'om' | 'ti' | 'so' | 'sw' | 'fr' | 'ar';
4
+ type Locale = {
5
+ [key in LocaleKey | string]?: string;
6
+ };
7
+ type Translation = (key: string) => string;
8
+ declare const DEFAULT_LANGUAGE = "en";
9
+ declare const SUPPORTED_LANGUAGES: {
10
+ value: string;
11
+ label: string;
12
+ key: string;
13
+ }[];
14
+ declare const LOCALE_INPUT_DEFAULT: {
15
+ [k: string]: string;
16
+ };
17
+ type SchemaAccumulator = {
18
+ [key: string]: z.ZodTypeAny;
19
+ };
20
+ declare function createLocalInputSchema(defaultValidation: z.ZodTypeAny, otherValidation: z.ZodTypeAny): z.ZodObject<SchemaAccumulator>;
21
+ declare function createLocalRequiredInputSchema(validation: z.ZodTypeAny): z.ZodEffects<z.ZodObject<SchemaAccumulator>>;
22
+ declare const LOCALE_REQUIRED_INPUT_SCHEMA: z.ZodEffects<z.ZodObject<SchemaAccumulator, z.UnknownKeysParam, z.ZodTypeAny, {
23
+ [x: string]: any;
24
+ }, {
25
+ [x: string]: any;
26
+ }>, {
27
+ [x: string]: any;
28
+ }, {
29
+ [x: string]: any;
30
+ }>;
31
+ declare const LOCALE_OPTIONAL_INPUT_SCHEMA: z.ZodObject<SchemaAccumulator, z.UnknownKeysParam, z.ZodTypeAny, {
32
+ [x: string]: any;
33
+ }, {
34
+ [x: string]: any;
35
+ }>;
36
+
37
+ export { DEFAULT_LANGUAGE, LOCALE_INPUT_DEFAULT, LOCALE_OPTIONAL_INPUT_SCHEMA, LOCALE_REQUIRED_INPUT_SCHEMA, type Locale, type LocaleKey, SUPPORTED_LANGUAGES, type Translation, createLocalInputSchema, createLocalRequiredInputSchema };
@@ -0,0 +1,55 @@
1
+ // src/lib/locale.ts
2
+ import { z } from "zod";
3
+ var DEFAULT_LANGUAGE = "en";
4
+ var SUPPORTED_LANGUAGES = [
5
+ { value: "en", label: "English", key: "En" },
6
+ { value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" },
7
+ { value: "ar", label: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", key: "\u0627\u0644" }
8
+ ];
9
+ var LOCALE_INPUT_DEFAULT = Object.fromEntries(
10
+ SUPPORTED_LANGUAGES.map(({ value }) => [value, ""])
11
+ );
12
+ function createLocalInputSchema(defaultValidation, otherValidation) {
13
+ const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
14
+ acc[value] = value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;
15
+ return acc;
16
+ }, {});
17
+ return z.object(schemaDefinition);
18
+ }
19
+ function createLocalRequiredInputSchema(validation) {
20
+ const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
21
+ acc[value] = validation;
22
+ return acc;
23
+ }, {});
24
+ return z.object(schemaDefinition).superRefine((data, ctx) => {
25
+ const hasValue = Object.values(data).some(
26
+ (value) => typeof value === "string" && value.trim().length > 0
27
+ );
28
+ if (!hasValue) {
29
+ for (const { value } of SUPPORTED_LANGUAGES) {
30
+ ctx.addIssue({
31
+ code: z.ZodIssueCode.custom,
32
+ message: "field is required",
33
+ path: [value]
34
+ });
35
+ }
36
+ }
37
+ });
38
+ }
39
+ var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
40
+ z.string().optional()
41
+ );
42
+ var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
43
+ z.string().optional(),
44
+ z.string().optional()
45
+ );
46
+ export {
47
+ DEFAULT_LANGUAGE,
48
+ LOCALE_INPUT_DEFAULT,
49
+ LOCALE_OPTIONAL_INPUT_SCHEMA,
50
+ LOCALE_REQUIRED_INPUT_SCHEMA,
51
+ SUPPORTED_LANGUAGES,
52
+ createLocalInputSchema,
53
+ createLocalRequiredInputSchema
54
+ };
55
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +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 [key in LocaleKey | string]?: string;\n};\n\nexport type Translation = (key: string) => string;\n\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport const SUPPORTED_LANGUAGES = [\n { value: 'en', label: 'English', key: 'En' },\n { value: 'am', label: 'አማርኛ', key: 'አማ' },\n { value: 'ar', 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":";AAAA,SAAS,SAAS;AAUX,IAAM,mBAAmB;AAEzB,IAAM,sBAAsB;AAAA,EACjC,EAAE,OAAO,MAAM,OAAO,WAAW,KAAK,KAAK;AAAA,EAC3C,EAAE,OAAO,MAAM,OAAO,4BAAQ,KAAK,eAAK;AAAA,EACxC,EAAE,OAAO,MAAM,OAAO,8CAAW,KAAK,eAAK;AAC7C;AAEO,IAAM,uBAAuB,OAAO;AAAA,EACzC,oBAAoB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACpD;AAMO,SAAS,uBACd,mBACA,iBACgC;AAChC,QAAM,mBACJ,oBAAoB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAChE,QAAI,KAAK,IACP,UAAU,mBAAmB,oBAAoB;AACnD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,SAAO,EAAE,OAAO,gBAAgB;AAClC;AAEO,SAAS,+BACd,YAC8C;AAC9C,QAAM,mBACJ,oBAAoB,OAAO,CAAC,KAAwB,EAAE,MAAM,MAAM;AAChE,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,qBAAqB;AAC3C,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;AAEO,IAAM,+BAA+B;AAAA,EAC1C,EAAE,OAAO,EAAE,SAAS;AACtB;AAEO,IAAM,+BAA+B;AAAA,EAC1C,EAAE,OAAO,EAAE,SAAS;AAAA,EACpB,EAAE,OAAO,EAAE,SAAS;AACtB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mesob/ui",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -59,13 +59,33 @@
59
59
  "@radix-ui/react-toggle": "^1.1.10",
60
60
  "@radix-ui/react-toggle-group": "^1.1.11",
61
61
  "@radix-ui/react-tooltip": "^1.2.8",
62
+ "@radix-ui/react-visually-hidden": "^1.2.4",
62
63
  "@tabler/icons-react": "^3.35.0",
63
64
  "@tanstack/react-table": "^8.21.3",
65
+ "@tiptap/core": "^3.18.0",
66
+ "@tiptap/extension-hard-break": "^3.18.0",
67
+ "@tiptap/extension-heading": "^3.18.0",
68
+ "@tiptap/extension-highlight": "^3.18.0",
69
+ "@tiptap/extension-image": "^3.18.0",
70
+ "@tiptap/extension-link": "^3.18.0",
71
+ "@tiptap/extension-placeholder": "^3.18.0",
72
+ "@tiptap/extension-subscript": "^3.18.0",
73
+ "@tiptap/extension-superscript": "^3.18.0",
74
+ "@tiptap/extension-table": "^3.18.0",
75
+ "@tiptap/extension-table-cell": "^3.18.0",
76
+ "@tiptap/extension-table-header": "^3.18.0",
77
+ "@tiptap/extension-table-row": "^3.18.0",
78
+ "@tiptap/extension-text-align": "^3.18.0",
79
+ "@tiptap/extension-underline": "^3.18.0",
80
+ "@tiptap/extension-youtube": "^3.18.0",
81
+ "@tiptap/react": "^3.18.0",
82
+ "@tiptap/starter-kit": "^3.18.0",
64
83
  "class-variance-authority": "^0.7.1",
65
84
  "clsx": "^2.1.1",
66
85
  "cmdk": "^1.1.1",
67
86
  "date-fns": "^4.1.0",
68
87
  "embla-carousel-react": "^8.6.0",
88
+ "html-react-parser": "^5.2.16",
69
89
  "input-otp": "^1.4.2",
70
90
  "motion": "^12.23.25",
71
91
  "next-themes": "^0.4.6",