@formatica/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,69 @@
1
+ export interface ThemeConfig {
2
+ /** Unique theme identifier. */
3
+ name: string;
4
+ colors?: {
5
+ primary?: string;
6
+ primaryHover?: string;
7
+ error?: string;
8
+ errorHover?: string;
9
+ success?: string;
10
+ warning?: string;
11
+ info?: string;
12
+ text?: string;
13
+ textSecondary?: string;
14
+ textDisabled?: string;
15
+ background?: string;
16
+ backgroundDisabled?: string;
17
+ border?: string;
18
+ borderFocus?: string;
19
+ borderError?: string;
20
+ placeholder?: string;
21
+ };
22
+ typography?: {
23
+ fontFamily?: string;
24
+ fontSize?: string;
25
+ fontSizeSmall?: string;
26
+ fontSizeLarge?: string;
27
+ lineHeight?: string;
28
+ labelFontWeight?: string;
29
+ };
30
+ spacing?: {
31
+ fieldGap?: string;
32
+ rowGap?: string;
33
+ inputPaddingX?: string;
34
+ inputPaddingY?: string;
35
+ labelMarginBottom?: string;
36
+ };
37
+ borders?: {
38
+ radius?: string;
39
+ radiusSmall?: string;
40
+ radiusLarge?: string;
41
+ width?: string;
42
+ style?: string;
43
+ };
44
+ shadows?: {
45
+ focus?: string;
46
+ error?: string;
47
+ dropdown?: string;
48
+ };
49
+ transitions?: {
50
+ duration?: string;
51
+ timingFunction?: string;
52
+ };
53
+ components?: {
54
+ form?: string;
55
+ field?: string;
56
+ label?: string;
57
+ input?: string;
58
+ error?: string;
59
+ helpText?: string;
60
+ group?: string;
61
+ row?: string;
62
+ steps?: string;
63
+ tabs?: string;
64
+ button?: string;
65
+ [component: string]: string | undefined;
66
+ };
67
+ cssVars?: Record<string, string>;
68
+ }
69
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IACxB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAGF,UAAU,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAGF,WAAW,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IAGF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KAC3C,CAAC;IAGF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC"}
@@ -0,0 +1,26 @@
1
+ import type { FormContext } from "./schema";
2
+ export type BuiltInRuleName = "required" | "email" | "url" | "min" | "max" | "minLength" | "maxLength" | "pattern" | "numeric" | "integer" | "alpha" | "alphaNumeric" | "between" | "confirmed" | "date" | "before" | "after" | "in" | "notIn" | "mimeType" | "fileSize" | "maxFiles" | "unique" | "custom";
3
+ export type RuleFn = (value: unknown, params: Record<string, unknown>, ctx: FormContext) => boolean | string | Promise<boolean | string>;
4
+ export interface ValidationRule {
5
+ /** Name of a built-in rule or a custom identifier. */
6
+ name: BuiltInRuleName | (string & Record<never, never>);
7
+ /** Parameters forwarded to the rule function. */
8
+ params?: Record<string, unknown>;
9
+ /** Custom error message (may contain {field} / {param} placeholders). */
10
+ message?: string;
11
+ /** Custom rule function – takes precedence over name-based lookup. */
12
+ validator?: RuleFn;
13
+ /** When true the rule is only evaluated if the value is non-empty. */
14
+ optional?: boolean;
15
+ /** Abort remaining rules for this field on failure. */
16
+ bail?: boolean;
17
+ /** Debounce interval in ms (useful for async rules). */
18
+ debounce?: number;
19
+ }
20
+ export interface SchemaError {
21
+ field: string;
22
+ rule: string;
23
+ message: string;
24
+ params?: Record<string, unknown>;
25
+ }
26
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,MAAM,MAAM,eAAe,GACrB,UAAU,GACV,OAAO,GACP,KAAK,GACL,KAAK,GACL,KAAK,GACL,WAAW,GACX,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,cAAc,GACd,SAAS,GACT,WAAW,GACX,MAAM,GACN,QAAQ,GACR,OAAO,GACP,IAAI,GACJ,OAAO,GACP,UAAU,GACV,UAAU,GACV,UAAU,GACV,QAAQ,GACR,QAAQ,CAAC;AAMf,MAAM,MAAM,MAAM,GAAG,CACjB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,WAAW,KACf,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;AAMlD,MAAM,WAAW,cAAc;IAC3B,sDAAsD;IACtD,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,8 @@
1
+ type PlainObject = Record<string, unknown>;
2
+ /**
3
+ * Deep-merge two objects. Arrays are replaced (not concatenated).
4
+ * Returns a new object – neither source is mutated.
5
+ */
6
+ export declare function deepMerge<T extends PlainObject>(target: T, source: Partial<T>): T;
7
+ export {};
8
+ //# sourceMappingURL=deepMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQ3C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAejF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Strip `<script>` tags and inline event handlers (on*="...") from HTML strings.
3
+ * This is a lightweight sanitizer for use with the HtmlLayout node type.
4
+ */
5
+ export declare function sanitizeHtml(html: string): string;
6
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUjD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Convert camelCase, kebab-case, or snake_case field names to Title Case.
3
+ *
4
+ * @example
5
+ * titleCase('firstName') // "First Name"
6
+ * titleCase('last-name') // "Last Name"
7
+ * titleCase('email_address') // "Email Address"
8
+ */
9
+ export declare function titleCase(input: string): string;
10
+ //# sourceMappingURL=titleCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"titleCase.d.ts","sourceRoot":"","sources":["../../src/utils/titleCase.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW/C"}
@@ -0,0 +1,6 @@
1
+ import type { RuleFn } from "../types/validation";
2
+ export declare function registerRule(name: string, fn: RuleFn): void;
3
+ export declare function unregisterRule(name: string): void;
4
+ export declare function getRule(name: string): RuleFn | undefined;
5
+ export declare function hasRule(name: string): boolean;
6
+ //# sourceMappingURL=ruleRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruleRegistry.d.ts","sourceRoot":"","sources":["../../src/validation/ruleRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQlD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@formatica/core",
3
+ "version": "0.1.0",
4
+ "description": "Framework-agnostic schema-driven form engine — types, validation, parsing, conditions",
5
+ "type": "module",
6
+ "main": "./dist/formatica-core.umd.cjs",
7
+ "module": "./dist/formatica-core.es.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/formatica-core.es.js",
13
+ "require": "./dist/formatica-core.umd.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": ""
27
+ },
28
+ "homepage": "",
29
+ "bugs": {
30
+ "url": ""
31
+ },
32
+ "sideEffects": false,
33
+ "scripts": {
34
+ "build": "vite build && tsc --emitDeclarationOnly --declaration --declarationDir dist",
35
+ "typecheck": "tsc --noEmit",
36
+ "test": "vitest --run"
37
+ },
38
+ "peerDependencies": {
39
+ "libphonenumber-js": "^1.12.0"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "libphonenumber-js": {
43
+ "optional": true
44
+ }
45
+ },
46
+ "devDependencies": {
47
+ "typescript": "^5.4.0",
48
+ "vite": "^5.4.0",
49
+ "vitest": "^1.6.0"
50
+ },
51
+ "keywords": [
52
+ "form",
53
+ "schema",
54
+ "validation",
55
+ "typescript"
56
+ ],
57
+ "license": "MIT"
58
+ }