@replicated/portal-components 0.0.1

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,36 @@
1
+ type DeepPartial<T> = {
2
+ [Key in keyof T]?: T[Key] extends Record<string, unknown> ? DeepPartial<T[Key]> : T[Key];
3
+ };
4
+ interface PortalThemeTokens {
5
+ colors: {
6
+ background: string;
7
+ foreground: string;
8
+ surfaceMuted: string;
9
+ primary: string;
10
+ onPrimary: string;
11
+ secondary: string;
12
+ onSecondary: string;
13
+ success: string;
14
+ warning: string;
15
+ danger: string;
16
+ };
17
+ radii: {
18
+ lg: string;
19
+ md: string;
20
+ sm: string;
21
+ };
22
+ spacing: Record<"xs" | "sm" | "md" | "lg" | "xl", string>;
23
+ typography: {
24
+ fontFamily: string;
25
+ monoFamily: string;
26
+ lineHeight: Record<"tight" | "normal" | "relaxed", string>;
27
+ };
28
+ shadows: {
29
+ focus: string;
30
+ overlay: string;
31
+ };
32
+ }
33
+ declare const portalThemeTokens: PortalThemeTokens;
34
+ declare const createPortalTheme: (overrides?: DeepPartial<PortalThemeTokens>) => PortalThemeTokens;
35
+
36
+ export { type DeepPartial as PortalThemeOverrides, type PortalThemeTokens, createPortalTheme, portalThemeTokens };
@@ -0,0 +1,36 @@
1
+ type DeepPartial<T> = {
2
+ [Key in keyof T]?: T[Key] extends Record<string, unknown> ? DeepPartial<T[Key]> : T[Key];
3
+ };
4
+ interface PortalThemeTokens {
5
+ colors: {
6
+ background: string;
7
+ foreground: string;
8
+ surfaceMuted: string;
9
+ primary: string;
10
+ onPrimary: string;
11
+ secondary: string;
12
+ onSecondary: string;
13
+ success: string;
14
+ warning: string;
15
+ danger: string;
16
+ };
17
+ radii: {
18
+ lg: string;
19
+ md: string;
20
+ sm: string;
21
+ };
22
+ spacing: Record<"xs" | "sm" | "md" | "lg" | "xl", string>;
23
+ typography: {
24
+ fontFamily: string;
25
+ monoFamily: string;
26
+ lineHeight: Record<"tight" | "normal" | "relaxed", string>;
27
+ };
28
+ shadows: {
29
+ focus: string;
30
+ overlay: string;
31
+ };
32
+ }
33
+ declare const portalThemeTokens: PortalThemeTokens;
34
+ declare const createPortalTheme: (overrides?: DeepPartial<PortalThemeTokens>) => PortalThemeTokens;
35
+
36
+ export { type DeepPartial as PortalThemeOverrides, type PortalThemeTokens, createPortalTheme, portalThemeTokens };
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Enterprise Portal Components
5
+ * This file is generated by tsup. Do not edit manually.
6
+ */
7
+
8
+ // src/tokens/index.ts
9
+ var baseTokens = {
10
+ colors: {
11
+ background: "#0b0d12",
12
+ foreground: "#f4f6fb",
13
+ surfaceMuted: "#1b1f2a",
14
+ primary: "#0d6efd",
15
+ onPrimary: "#ffffff",
16
+ secondary: "#6c757d",
17
+ onSecondary: "#ffffff",
18
+ success: "#22c55e",
19
+ warning: "#fbbf24",
20
+ danger: "#ef4444"
21
+ },
22
+ radii: {
23
+ lg: "16px",
24
+ md: "10px",
25
+ sm: "6px"
26
+ },
27
+ spacing: {
28
+ xs: "0.25rem",
29
+ sm: "0.5rem",
30
+ md: "0.75rem",
31
+ lg: "1rem",
32
+ xl: "1.5rem"
33
+ },
34
+ typography: {
35
+ fontFamily: "Inter, 'SF Pro Display', 'Segoe UI', system-ui, -apple-system, sans-serif",
36
+ monoFamily: "'JetBrains Mono', 'SFMono-Regular', Consolas, monospace",
37
+ lineHeight: {
38
+ tight: "1.2",
39
+ normal: "1.5",
40
+ relaxed: "1.75"
41
+ }
42
+ },
43
+ shadows: {
44
+ focus: "0 0 0 3px color-mix(in srgb, #0d6efd 35%, transparent)",
45
+ overlay: "0px 20px 55px rgba(5, 7, 11, 0.5)"
46
+ }
47
+ };
48
+ var mergeTokens = (base, overrides) => {
49
+ if (!overrides) {
50
+ return base;
51
+ }
52
+ const clone = structuredClone(base);
53
+ const apply = (target, source) => {
54
+ Object.entries(source).forEach(([key, value]) => {
55
+ if (value && typeof value === "object" && !Array.isArray(value) && typeof target[key] === "object") {
56
+ apply(target[key], value);
57
+ return;
58
+ }
59
+ target[key] = value;
60
+ });
61
+ };
62
+ apply(clone, overrides);
63
+ return clone;
64
+ };
65
+ var portalThemeTokens = mergeTokens(baseTokens);
66
+ var createPortalTheme = (overrides) => mergeTokens(baseTokens, overrides);
67
+
68
+ exports.createPortalTheme = createPortalTheme;
69
+ exports.portalThemeTokens = portalThemeTokens;
70
+ //# sourceMappingURL=index.js.map
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokens/index.ts"],"names":[],"mappings":";;;;;;;;AAoCA,IAAM,UAAA,GAAgC;AAAA,EACpC,MAAA,EAAQ;AAAA,IACN,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,YAAA,EAAc,SAAA;AAAA,IACd,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,SAAA;AAAA,IACX,SAAA,EAAW,SAAA;AAAA,IACX,WAAA,EAAa,SAAA;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,UAAA,EAAY;AAAA,IACV,UAAA,EACE,2EAAA;AAAA,IACF,UAAA,EAAY,yDAAA;AAAA,IACZ,UAAA,EAAY;AAAA,MACV,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,wDAAA;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAA;AAEA,IAAM,WAAA,GAAc,CAClB,IAAA,EACA,SAAA,KACsB;AACtB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,gBAAgB,IAAI,CAAA;AAElC,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,EAA6B,MAAA,KAAgC;AAC1E,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,MAAA,IACE,KAAA,IACA,OAAO,KAAA,KAAU,QAAA,IACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,OAAO,MAAA,CAAO,GAAG,MAAM,QAAA,EACvB;AACA,QAAA,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA,EAAG,KAAK,CAAA;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,KAAA,CAAM,OAA8B,SAAgC,CAAA;AACpE,EAAA,OAAO,KAAA;AACT,CAAA;AAEO,IAAM,iBAAA,GACX,YAAY,UAAU;AAEjB,IAAM,iBAAA,GAAoB,CAC/B,SAAA,KACG,WAAA,CAAY,YAAY,SAAS","file":"index.js","sourcesContent":["type DeepPartial<T> = {\n [Key in keyof T]?: T[Key] extends Record<string, unknown>\n ? DeepPartial<T[Key]>\n : T[Key];\n};\n\nexport interface PortalThemeTokens {\n colors: {\n background: string;\n foreground: string;\n surfaceMuted: string;\n primary: string;\n onPrimary: string;\n secondary: string;\n onSecondary: string;\n success: string;\n warning: string;\n danger: string;\n };\n radii: {\n lg: string;\n md: string;\n sm: string;\n };\n spacing: Record<\"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\", string>;\n typography: {\n fontFamily: string;\n monoFamily: string;\n lineHeight: Record<\"tight\" | \"normal\" | \"relaxed\", string>;\n };\n shadows: {\n focus: string;\n overlay: string;\n };\n}\n\nconst baseTokens: PortalThemeTokens = {\n colors: {\n background: \"#0b0d12\",\n foreground: \"#f4f6fb\",\n surfaceMuted: \"#1b1f2a\",\n primary: \"#0d6efd\",\n onPrimary: \"#ffffff\",\n secondary: \"#6c757d\",\n onSecondary: \"#ffffff\",\n success: \"#22c55e\",\n warning: \"#fbbf24\",\n danger: \"#ef4444\"\n },\n radii: {\n lg: \"16px\",\n md: \"10px\",\n sm: \"6px\"\n },\n spacing: {\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\"\n },\n typography: {\n fontFamily:\n \"Inter, 'SF Pro Display', 'Segoe UI', system-ui, -apple-system, sans-serif\",\n monoFamily: \"'JetBrains Mono', 'SFMono-Regular', Consolas, monospace\",\n lineHeight: {\n tight: \"1.2\",\n normal: \"1.5\",\n relaxed: \"1.75\"\n }\n },\n shadows: {\n focus: \"0 0 0 3px color-mix(in srgb, #0d6efd 35%, transparent)\",\n overlay: \"0px 20px 55px rgba(5, 7, 11, 0.5)\"\n }\n};\n\nconst mergeTokens = (\n base: PortalThemeTokens,\n overrides?: DeepPartial<PortalThemeTokens>\n): PortalThemeTokens => {\n if (!overrides) {\n return base;\n }\n\n const clone = structuredClone(base);\n\n const apply = (target: Record<string, any>, source: Record<string, any>) => {\n Object.entries(source).forEach(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n typeof target[key] === \"object\"\n ) {\n apply(target[key], value);\n return;\n }\n\n target[key] = value;\n });\n };\n\n apply(clone as Record<string, any>, overrides as Record<string, any>);\n return clone;\n};\n\nexport const portalThemeTokens: PortalThemeTokens =\n mergeTokens(baseTokens);\n\nexport const createPortalTheme = (\n overrides?: DeepPartial<PortalThemeTokens>\n) => mergeTokens(baseTokens, overrides);\n\nexport type { DeepPartial as PortalThemeOverrides };\n"]}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@replicated/portal-components",
3
+ "version": "0.0.1",
4
+ "description": "Opinionated component library for Replicated enterprise portals",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/replicatedhq/enterprise-portal-components.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/replicatedhq/enterprise-portal-components/issues"
12
+ },
13
+ "homepage": "https://github.com/replicatedhq/enterprise-portal-components#readme",
14
+ "main": "dist/index.js",
15
+ "module": "dist/esm/index.js",
16
+ "types": "dist/index.d.ts",
17
+ "style": "dist/styles.css",
18
+ "files": [
19
+ "dist",
20
+ "components/metadata"
21
+ ],
22
+ "sideEffects": [
23
+ "*.css",
24
+ "*.scss"
25
+ ],
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/esm/index.js",
30
+ "require": "./dist/index.js"
31
+ },
32
+ "./tokens": {
33
+ "types": "./dist/tokens/index.d.ts",
34
+ "import": "./dist/esm/tokens/index.js",
35
+ "require": "./dist/tokens/index.js"
36
+ },
37
+ "./actions": {
38
+ "types": "./dist/actions/index.d.ts",
39
+ "import": "./dist/esm/actions/index.js",
40
+ "require": "./dist/actions/index.js"
41
+ },
42
+ "./styles.css": "./dist/styles.css",
43
+ "./metadata/registry.json": "./components/metadata/registry.json"
44
+ },
45
+ "scripts": {
46
+ "clean": "rimraf dist",
47
+ "build": "npm run clean && npm run registry:generate && npm run build:css && tsup",
48
+ "build:css": "tailwindcss -i ./src/styles.css -o ./dist/styles.css --config tailwind.config.ts",
49
+ "dev": "tsup --watch",
50
+ "typecheck": "tsc --noEmit",
51
+ "registry:generate": "tsx scripts/generate-registry.ts",
52
+ "size": "size-limit",
53
+ "release": "changeset"
54
+ },
55
+ "peerDependencies": {
56
+ "react": "^19.0.0",
57
+ "react-dom": "^19.0.0"
58
+ },
59
+ "devDependencies": {
60
+ "@changesets/cli": "^2.27.8",
61
+ "@size-limit/preset-big-lib": "^9.0.0",
62
+ "@types/node": "^22.10.1",
63
+ "@types/react": "^19.0.4",
64
+ "@types/react-dom": "^19.0.3",
65
+ "autoprefixer": "^10.4.20",
66
+ "postcss": "^8.4.49",
67
+ "react": "19.0.0",
68
+ "react-dom": "19.0.0",
69
+ "rimraf": "^6.0.1",
70
+ "size-limit": "^9.0.0",
71
+ "tailwindcss": "^3.4.17",
72
+ "tslib": "^2.7.0",
73
+ "tsup": "^8.3.5",
74
+ "tsx": "^4.19.2",
75
+ "typescript": "^5.6.3"
76
+ },
77
+ "engines": {
78
+ "node": ">=20"
79
+ },
80
+ "packageManager": "npm@10",
81
+ "size-limit": [
82
+ {
83
+ "name": "core entry",
84
+ "path": "dist/esm/index.js",
85
+ "import": "{ Login }",
86
+ "limit": "35 KB",
87
+ "gzip": true
88
+ }
89
+ ]
90
+ }