@meoslabs/save-in-meos 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.
package/package.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "@meoslabs/save-in-meos",
3
+ "version": "0.0.1",
4
+ "description": "meos deeplink protocol (MDP) codec and save-in-meos embed widget for third-party sites",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/meoslabs/save-in-meos.git"
8
+ },
9
+ "homepage": "https://github.com/meoslabs/save-in-meos#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/meoslabs/save-in-meos/issues"
12
+ },
13
+ "type": "module",
14
+ "main": "dist/index.js",
15
+ "types": "dist/index.d.ts",
16
+ "unpkg": "dist/widget.iife.js",
17
+ "jsdelivr": "dist/widget.iife.js",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js",
22
+ "require": "./dist/index.js",
23
+ "default": "./dist/index.js"
24
+ },
25
+ "./fonts.css": "./src/widget/fonts.css",
26
+ "./widget.css": "./src/widget/widget.css",
27
+ "./widget": {
28
+ "types": "./dist/widget/index.d.ts",
29
+ "import": "./dist/widget/index.js",
30
+ "default": "./dist/widget/index.js"
31
+ },
32
+ "./browser": {
33
+ "default": "./dist/widget.iife.js"
34
+ },
35
+ "./widget.iife.js": "./dist/widget.iife.js",
36
+ "./save-in-meos.min.js": "./dist/save-in-meos.min.js",
37
+ "./widget.iife.css": "./dist/widget.iife.css"
38
+ },
39
+ "files": [
40
+ "dist/index.js",
41
+ "dist/index.d.ts",
42
+ "dist/import-intent-v1.js",
43
+ "dist/import-intent-v1.d.ts",
44
+ "dist/widget/",
45
+ "dist/widget.iife.js",
46
+ "dist/widget.iife.js.map",
47
+ "dist/widget.iife.css",
48
+ "dist/save-in-meos.min.js",
49
+ "src/widget/fonts.css",
50
+ "src/widget/widget.css",
51
+ "assets/fonts/",
52
+ "LICENSE",
53
+ "README.md"
54
+ ],
55
+ "scripts": {
56
+ "build": "tsc",
57
+ "build:widget": "tsx scripts/build-widget.ts",
58
+ "demo": "npm run build:widget && cd examples && npx --yes serve . -p 4173",
59
+ "typecheck": "tsc --noEmit",
60
+ "test": "vitest run",
61
+ "test:watch": "vitest",
62
+ "check:mdp-contract": "tsx scripts/check-mdp-contract.ts",
63
+ "check:widget-branding": "tsx scripts/check-widget-branding.ts",
64
+ "check:mdp": "npm run check:mdp-contract && npm run check:widget-branding",
65
+ "check:public-scrub": "tsx scripts/check-public-scrub.ts",
66
+ "check:ci": "tsx scripts/check-ci-workflows.ts",
67
+ "prepublishOnly": "npm run build && npm run build:widget && npm run check:mdp && npm run check:public-scrub",
68
+ "prepare": "husky"
69
+ },
70
+ "keywords": [
71
+ "meos",
72
+ "mdp",
73
+ "deeplink",
74
+ "widget",
75
+ "import"
76
+ ],
77
+ "author": {
78
+ "name": "meoslabs",
79
+ "email": "founders@usemeos.com",
80
+ "url": "https://meos.do"
81
+ },
82
+ "license": "MIT",
83
+ "publishConfig": {
84
+ "access": "public",
85
+ "provenance": true
86
+ },
87
+ "devDependencies": {
88
+ "@types/node": "^22.15.0",
89
+ "@types/pako": "^2.0.4",
90
+ "esbuild": "^0.28.0",
91
+ "husky": "^9.1.7",
92
+ "tsx": "^4.19.4",
93
+ "typescript": "^5.8.3",
94
+ "vitest": "^4.1.8"
95
+ },
96
+ "engines": {
97
+ "node": ">=20"
98
+ },
99
+ "dependencies": {
100
+ "pako": "^2.1.0"
101
+ }
102
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * WHY: Integrators must not load Inconsolata from Google Fonts CDN.
3
+ * This file ships bundled woff2 (OFL-1.1) matching meos product typography.
4
+ * WHAT: @font-face declarations for widget + demo surfaces.
5
+ * WHERE: import '@meoslabs/save-in-meos/fonts.css'
6
+ */
7
+
8
+ @font-face {
9
+ font-family: "Inconsolata";
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ font-display: swap;
13
+ src: url("../../assets/fonts/inconsolata/Inconsolata-Regular.woff2") format("woff2");
14
+ }
15
+
16
+ @font-face {
17
+ font-family: "Inconsolata";
18
+ font-style: normal;
19
+ font-weight: 500;
20
+ font-display: swap;
21
+ src: url("../../assets/fonts/inconsolata/Inconsolata-Medium.woff2") format("woff2");
22
+ }
23
+
24
+ :root {
25
+ --meos-font: "Inconsolata", ui-monospace, monospace;
26
+ --meos-radius: 0;
27
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * WHY: Canonical branded save chip — social-share row size, meos B/W ghost style.
3
+ * WHAT: Scoped `meos-save-` classes; theme via data-meos-theme + bounded CSS vars.
4
+ * WHERE: import '@meoslabs/save-in-meos/widget.css' (pairs with fonts.css).
5
+ * GUARDED: check-widget-branding enforces selectors, theme tokens, and allowed host vars.
6
+ */
7
+
8
+ .meos-save-chip,
9
+ .meos-save-chip[data-meos-theme="auto"] {
10
+ --meos-save-fg: #000000;
11
+ --meos-save-border: rgba(0, 0, 0, 0.24);
12
+ --meos-save-hover-bg: rgba(0, 0, 0, 0.06);
13
+ --meos-save-hover-border: rgba(0, 0, 0, 0.42);
14
+ }
15
+
16
+ .meos-save-chip[data-meos-theme="light"] {
17
+ --meos-save-fg: #000000;
18
+ --meos-save-border: rgba(0, 0, 0, 0.24);
19
+ --meos-save-hover-bg: rgba(0, 0, 0, 0.06);
20
+ --meos-save-hover-border: rgba(0, 0, 0, 0.42);
21
+ }
22
+
23
+ .meos-save-chip[data-meos-theme="dark"] {
24
+ --meos-save-fg: #ffffff;
25
+ --meos-save-border: rgba(255, 255, 255, 0.3);
26
+ --meos-save-hover-bg: rgba(255, 255, 255, 0.08);
27
+ --meos-save-hover-border: rgba(255, 255, 255, 0.46);
28
+ }
29
+
30
+ @media (prefers-color-scheme: dark) {
31
+ .meos-save-chip[data-meos-theme="auto"] {
32
+ --meos-save-fg: #ffffff;
33
+ --meos-save-border: rgba(255, 255, 255, 0.3);
34
+ --meos-save-hover-bg: rgba(255, 255, 255, 0.08);
35
+ --meos-save-hover-border: rgba(255, 255, 255, 0.46);
36
+ }
37
+ }
38
+
39
+ .meos-save-chip {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ gap: var(--meos-save-chip-gap, 0.3125rem);
44
+ min-height: calc(var(--meos-save-chip-height, 31px) - 1px);
45
+ max-height: calc(var(--meos-save-chip-height, 31px) + 1px);
46
+ height: var(--meos-save-chip-height, 31px);
47
+ padding: 0 var(--meos-save-chip-padding-x, 0.625rem);
48
+ margin: 0;
49
+ font-family: var(--meos-font, "Inconsolata", ui-monospace, monospace);
50
+ font-size: 11px;
51
+ font-weight: 500;
52
+ line-height: 1;
53
+ letter-spacing: 0.02em;
54
+ text-transform: lowercase;
55
+ color: var(--meos-save-fg, #000000);
56
+ background: transparent;
57
+ border: 1px solid var(--meos-save-border, rgba(0, 0, 0, 0.24));
58
+ border-radius: var(--meos-save-chip-radius, var(--meos-radius, 2px));
59
+ cursor: pointer;
60
+ box-sizing: border-box;
61
+ -webkit-tap-highlight-color: transparent;
62
+ pointer-events: auto;
63
+ user-select: none;
64
+ transition:
65
+ background 0.12s ease,
66
+ border-color 0.12s ease,
67
+ opacity 0.12s ease,
68
+ transform 0.08s ease;
69
+ appearance: none;
70
+ vertical-align: middle;
71
+ }
72
+
73
+ .meos-save-chip:hover {
74
+ background: var(--meos-save-hover-bg, rgba(0, 0, 0, 0.06));
75
+ border-color: var(--meos-save-hover-border, rgba(0, 0, 0, 0.42));
76
+ }
77
+
78
+ .meos-save-chip:focus-visible {
79
+ outline: 2px solid currentColor;
80
+ outline-offset: 2px;
81
+ }
82
+
83
+ .meos-save-chip:active {
84
+ opacity: 0.9;
85
+ transform: scale(0.98);
86
+ }
87
+
88
+ .meos-save-chip__icon {
89
+ width: calc(var(--meos-save-icon-size, 16px) * 27.275015 / 30.362297);
90
+ height: var(--meos-save-icon-size, 16px);
91
+ flex-shrink: 0;
92
+ display: block;
93
+ pointer-events: none;
94
+ shape-rendering: geometricPrecision;
95
+ overflow: visible;
96
+ }
97
+
98
+ .meos-save-chip__label {
99
+ white-space: nowrap;
100
+ pointer-events: none;
101
+ }