@matterdev/credit 0.0.0-stage → 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.
package/dist/index.cjs ADDED
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/core/index.ts
21
+ var core_exports = {};
22
+ __export(core_exports, {
23
+ BRAND_NAME: () => BRAND_NAME,
24
+ CREDIT_CSS: () => CREDIT_CSS,
25
+ LOCALES: () => LOCALES,
26
+ MATTER_ORGANIZATION: () => MATTER_ORGANIZATION,
27
+ MATTER_URL: () => MATTER_URL,
28
+ buildCreditUrl: () => buildCreditUrl,
29
+ creatorJsonLd: () => creatorJsonLd,
30
+ creatorJsonLdScript: () => creatorJsonLdScript,
31
+ normalizeSource: () => normalizeSource,
32
+ renderCreditHTML: () => renderCreditHTML,
33
+ renderCreditMarkup: () => renderCreditMarkup,
34
+ resolveCredit: () => resolveCredit,
35
+ serializeJsonLd: () => serializeJsonLd
36
+ });
37
+ module.exports = __toCommonJS(core_exports);
38
+
39
+ // src/core/labels.ts
40
+ var BRAND_NAME = "Matter Development";
41
+ var LOCALES = {
42
+ en: { label: "Developed by", newTab: "opens in a new tab", opensBrowser: "opens in your browser", dir: "ltr" },
43
+ fr: { label: "D\xE9velopp\xE9 par", newTab: "s\u2019ouvre dans un nouvel onglet", opensBrowser: "s\u2019ouvre dans votre navigateur", dir: "ltr" },
44
+ ar: { label: "\u062A\u0645 \u0627\u0644\u062A\u0637\u0648\u064A\u0631 \u0628\u0648\u0627\u0633\u0637\u0629", newTab: "\u064A\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629", opensBrowser: "\u064A\u0641\u062A\u062D \u0641\u064A \u0627\u0644\u0645\u062A\u0635\u0641\u062D", dir: "rtl" }
45
+ };
46
+ function localeStrings(locale) {
47
+ return LOCALES[locale ?? "en"] ?? LOCALES.en;
48
+ }
49
+
50
+ // src/core/url.ts
51
+ var MATTER_URL = "https://matterdevelopment.com/";
52
+ function normalizeSource(source) {
53
+ return source.trim().toLowerCase().replace(/^www\./, "").replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 100);
54
+ }
55
+ function safeUrl(href) {
56
+ try {
57
+ const url = new URL(href);
58
+ if (url.protocol === "https:" || url.protocol === "http:") return url;
59
+ } catch {
60
+ }
61
+ return new URL(MATTER_URL);
62
+ }
63
+ function buildCreditUrl(options = {}) {
64
+ const { source, utm = {}, variant, defaultMedium = "credit_badge", href = MATTER_URL } = options;
65
+ const { medium, campaign, content, ...extra } = utm;
66
+ const url = safeUrl(href);
67
+ const set = (key, value) => {
68
+ if (value) url.searchParams.set(key, value);
69
+ };
70
+ set("utm_source", source ? normalizeSource(source) : void 0);
71
+ set("utm_medium", medium ?? defaultMedium);
72
+ set("utm_campaign", campaign ?? "developed_by");
73
+ set("utm_content", content ?? variant);
74
+ for (const [key, value] of Object.entries(extra)) set(key, value);
75
+ return url.toString();
76
+ }
77
+
78
+ // src/core/metrics.generated.ts
79
+ var WORDMARK_RATIO = 4.2755;
80
+ var MARK_RATIO = 1.3726;
81
+
82
+ // src/core/model.ts
83
+ var LOGO_HEIGHT = {
84
+ stacked: { sm: 20, md: 28, lg: 36 },
85
+ inline: { sm: 16, md: 20, lg: 26 },
86
+ mark: { sm: 18, md: 24, lg: 32 }
87
+ };
88
+ var LABEL_SIZE = {
89
+ stacked: { sm: 10, md: 11, lg: 13 },
90
+ inline: { sm: 11, md: 12, lg: 14 },
91
+ mark: { sm: 11, md: 12, lg: 14 }
92
+ };
93
+ var round = (n) => Math.round(n * 100) / 100;
94
+ function sizes(variant, size) {
95
+ if (typeof size === "number" && size > 0) {
96
+ return { height: size, label: Math.min(16, Math.max(10, Math.round(size * 0.42))) };
97
+ }
98
+ const key = size === "sm" || size === "lg" ? size : "md";
99
+ return { height: LOGO_HEIGHT[variant][key], label: LABEL_SIZE[variant][key] };
100
+ }
101
+ function resolveCredit(options = {}, platform = "web") {
102
+ const variant = options.variant ?? "stacked";
103
+ const theme = options.theme ?? "inherit";
104
+ const strings = localeStrings(options.locale);
105
+ const label = options.label?.trim() || strings.label;
106
+ const { height, label: labelSize } = sizes(variant, options.size);
107
+ const ratio = variant === "mark" ? MARK_RATIO : WORDMARK_RATIO;
108
+ return {
109
+ variant,
110
+ theme,
111
+ href: buildCreditUrl({
112
+ source: options.source,
113
+ utm: options.utm,
114
+ variant,
115
+ defaultMedium: platform === "native" ? "app_credit" : "credit_badge",
116
+ href: options.href
117
+ }),
118
+ rel: options.nofollow ? "noopener nofollow" : "noopener",
119
+ dir: strings.dir,
120
+ label: variant === "mark" ? null : label,
121
+ ariaLabel: `${label} ${BRAND_NAME} (${platform === "native" ? strings.opensBrowser : strings.newTab})`,
122
+ title: variant === "mark" ? `${label} ${BRAND_NAME}` : void 0,
123
+ className: [
124
+ "mdc",
125
+ `mdc--${variant}`,
126
+ `mdc--${theme}`,
127
+ options.animate === false ? null : "mdc--animate"
128
+ ].filter(Boolean).join(" "),
129
+ logo: {
130
+ kind: variant === "mark" ? "mark" : "wordmark",
131
+ width: round(height * ratio),
132
+ height
133
+ },
134
+ labelSize,
135
+ iconSize: Math.max(10, Math.round(variant === "stacked" ? height * 0.46 : labelSize))
136
+ };
137
+ }
138
+
139
+ // src/core/assets.generated.ts
140
+ var WORDMARK_MASK = "data:image/webp;base64,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";
141
+ var MARK_MASK = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODIuNzIgMzUxLjY4Ij48cGF0aCBkPSJNNzYuNTQsMzQ5LjY3YzIuMzktLjcyLDQuMTUtMS40NSw1Ljg1LTIuMTcsNS4xNC0yLjE2LDEzLjAxLTUuNTQsMjAuMjgtMTIuODMsNC45My00Ljk0LDcuODQtOS45Miw5LjQ3LTEyLjc1LDAsMCwxLjcyLTIuOTksMy4yMS02LjMxLDE0LjAyLTMxLjMyLDExLjQtNzQuNjksMTEuNC03NC42OS0xLjc1LTI0LjUyLTYuNTktNDYuNTQtMTUuOTgtNzIuNTYtNC45My0xMy42Ni00LjctMTMuMTYtMTkuOTYtNDUuMjItNC44OS0xMC4zMS04LjI3LTE3LjYtMTAuNDEtMjIuNjItMS42Ni0zLjg5LTUuNC0xNC4zOS03LjU0LTIxLjE4LS41LTEuNTgtLjk5LTMuMzQtMS40Ni01LjY1LS45Ny00Ljc5LTEuMDMtOC4yNy0xLjA5LTE0LjA0LS4xLTkuMjksLjc0LTEyLjQ1LDEuMjktMTQuMjIsLjE5LS42MSwuNTktMS44NiwxLjI3LTMuMzMsNi4yMS0xMy40OSwxNC44LTE4LjA5LDI5LjIyLTE1LjYsNy44NSwxLjM1LDEyLDMuMTEsMjAuNzMsOC43OCwxMy40Nyw4Ljc3LDMwLjQ5LDI4LjQ1LDQ0Ljk0LDUyLjA1LDIuNzksNC41Niw0Ljc5LDguMDYsNi4xMiwxMC41NywyLjgsNS4yOSw0LjQ2LDkuMTQsNy42MywxNi41NSw0LjU2LDEwLjY1LDYuODQsMTUuOTcsOC4xNiwyMC40NSwuOTIsMy4xMSwyLjI3LDYuOTUsNC45OCwxNC42MiwuMTEsLjMyLC41MywxLjMxLDEuMzgsMy4yOCwxLjA3LDIuNSwxLjMxLDIuOTcsMS44LDMuMTgsMS4yLC41MSwyLjg0LS45Myw0LjM0LTIuMjMsMy4wNi0yLjYzLDYuMzEtNS4wNSw5LjMyLTcuNzMsNS41OC00Ljk3LDYuNDEtNS41Miw2Ljc4LTcuMjEsLjQyLTEuODktLjE4LTMuMTctMS45OC04LjAxLTIuODctNy43Mi0yLjM1LTYuMi0zLjU1LTEwLjAzLTQuNjMtMTQuODctMjIuNDMtNDguOC0zNS4yOS02Ny4zLTYuNS05LjM2LTEzLjgtMTcuODYtMjEuNTEtMjUuMDJDMTM2LjQxLDEwLjI1LDEyNC4wNSwzLjU0LDEwNC44OSwuNzJjLTExLjY3LTEuNzMtMjIuNTMtLjM2LTMzLjM5LDQuMi0xMC4yLDQuMjctMTYuMDgsOS44OS0yMS4yNywyMC4zNC04LjU0LDE3LjI2LTguOCwzNy4xMS0uOCw2MS43OSw0Ljk1LDE1LjMsNi43MSwxOS41OSwxNC4xNiwzNC42NywxMS42MiwyMy41OSwxNS4xMywzMS44MiwyMS4zNyw1MC40MSwyLjYxLDcuNzgsNS4xOSwxNi4yNiw1Ljc0LDE4Ljg1czIuMDYsOS4zNywzLjM1LDE1LjA4YzQuNjksMjAuNjUsNi4zOCwzNS4zNSw2LjI5LDU0LjY1LS4xMiwyNC41Ny0yLjUxLDM2LjU5LTkuNzUsNDkuMTMtMi4xOSwzLjc5LTQuNTEsNi40OS01LjEsNy4xMi00LjU5LDQuOTMtOS4yMiw2LjkzLTEwLjE0LDcuMzItLjU5LC4yNS0yLjU1LDEuMDUtNS4yNSwxLjYxLS43NywuMTYtMy41NywuNjMtNy42NiwuNi04LjczLS4wNS0xMy4wOS0xLjkyLTIwLjAxLTguNjEtOS41NS05LjIzLTEzLjI1LTIxLjUxLTE1Ljc5LTUyLjQ1LTIuMTEtMjUuNTksMy4zNS01OS4zOCwxMy41Ny04My45MSw2LjM1LTE1LjIyLDEyLjM1LTI4LjI5LDE0LjAxLTMwLjQ3LC45Ny0xLjI3LDEuNS0yLjMxLDEuNTctMy40LC4wNy0xLjE3LS4yNi0yLjE5LTMuMDItNi4yMy0yLjU0LTMuNzItMi4xNC0yLjctNS4yNC02Ljk2LTEuNjEtMi4yMS0xLjkyLTIuNzYtMi42OC0yLjg4LTEuODMtLjI4LTMuNjMsMi4zNS01Ljk2LDUuODQtNC45MSw3LjM2LTcuMzcsMTEuMDQtNy4zOCwxMS4wNy0xMC4wMywxNC45MS0xOSwzMi45OC0yMi45OCw0Ni4yNkMxLjY5LDIxNy42MSwuMTgsMjI4LjQ3LDAsMjU1LjQ2Yy0uMTcsMjkuMTksMi40Niw0NC4wMywxMS4xLDYyLjc0LDQuMDYsOC43Nyw4LjgyLDE1LjQ0LDE0Ljg3LDIwLjU1LDcuMTMsNi4wMiwxNC4xMiw4LjQ4LDE3LjcxLDkuNyw0LjAyLDEuMzYsMTcuNjQsNS43OCwzMi44NSwxLjIyWiIvPjxwYXRoIGQ9Ik0yNTcuMjQsMzI2LjU0YzcuMDItMi40NCwxNy40My04LjY1LDIxLjUxLTEyLjg1LDkuNTEtOS43NSwxNi45NS0yNS41MiwxOS44NS00Mi4wNCwyLjQ3LTE0LjIsMS41NC0zNi42My0yLjMtNTQuMjgtNC4yOS0xOS43NC0xMS42Ni0zOS42LTE3LjI5LTM5LjEtLjg1LC4wOC0xLjE2LC41Ny01LjY5LDQuMDEtMy42MiwyLjc0LTYuNjEsNC44NC04LjUsNi4xNC0xLjA2LDEuMDItMi4xMiwyLjA1LTMuMTgsMy4wNywxLjQ3LDQuMDcsMi45NCw4LjE0LDQuNDEsMTIuMjEsMy41NiwxMC43Miw0LjkxLDE1Ljc0LDcuNjYsMjguMjYsLjUyLDIuMzMsLjk5LDEwLjE5LDEuMDQsMTcuNDMsLjA5LDEwLjk2LS4yOCwxNC42My0yLjA4LDIxLjY3LTUuMTUsMTkuOTctMTEuOTEsMjguNTktMjYuMjIsMzMuMzktMTUuNjUsNS4yNy0yOS45NS0uNTUtMzcuMDktMTUuMDgtNi43NC0xMy44LTUuNC00NC43OSwyLjg0LTY0LjQyLDEwLjY0LTI1LjMyLDI3LjQ0LTQ4LjAxLDQ0LjQzLTU5Ljk1LDIuODUtMi4wMSw3LjUyLTUuMzMsMTAuMzgtNy40LDIwLjQ2LTE0Ljg1LDQ4LjQ0LTI0LjE2LDc2LjA3LTI1LjI4LDcuNDItLjI5LDEyLjgxLS45MiwxMy4zMi0xLjU0LC40NS0uNTcsMS4wNC01LjAxLDEuMy05Ljg3LC42Ni0xMS45MywuMjEtMTIuMzYtMTIuMjQtMTIuMzYtOS42MywwLTIyLjksMS4yNi0zMC44NywyLjk0LTguMDIsMS42OC0xMi44MywzLjI1LTMwLjE0LDkuODYtNy41NiwyLjg3LTI0LjI0LDExLjA3LTMzLjkzLDE2LjY3LTIwLjUxLDExLjg1LTM5Ljc5LDMwLjk5LTUzLjg4LDUzLjUyLTQuMDUsNi40My0xMi41NCwyMy43My0xMi41NCwyNS40OSwwLC41NS0uNjIsMi4zMy0xLjM4LDMuOTgtMi41Niw1LjUyLTQuNDMsMTMuNTQtNS40LDIzLjIyLS4yOSwyLjk0LS4zNSw1Ljk2LS40NywxMS45OS0uMDcsMy40NC0uMTMsNi45NSwwLDExLjU3LC4yMiw3LjQ1LC40LDEyLjcyLDIuMDUsMTkuNSwuNTksMi40NCwxLjE2LDQuMjEsMS41OCw1LjQ4LDIuNDEsNy40Miw0LjY0LDE0LjMsMTAuMzYsMjAuNjMsMy45OSw0LjQyLDguMTcsNi45LDEwLjE3LDguMDcsMy43LDIuMTYsNi45OCwzLjM3LDEwLjkxLDQuODEsMy40OSwxLjI5LDYuMjUsMS45Nyw2Ljk2LDIuMTQsLjQzLC4xLC43OSwuMTksMS4wNiwuMjUsNy44OCwxLjc2LDE0LjEzLDEuNTEsMTguMywxLjMyLDYuODktLjMyLDExLjg1LTEuNDYsMTMuMzgtMS44MywwLDAsMi45My0uNjgsNS42My0xLjYyWiIvPjxwYXRoIGQ9Ik00NDEuMzIsMzQ0Ljg3YzEzLjM4LTUuODgsMTguODMtMTAuMjIsMjYuMTUtMjAuOCw1LjU5LTguMDgsOC44Mi0xNC45OSwxMS40NS0yNC41LDQuODEtMTcuNDMsNS4xMi02MC41OSwuNTktODEuMjktNC4wNS0xOC40Ny0xMS45OC0zOS4zMi0yMC40MS01My42Ni0uOTItMS41Ni0zLjM5LTUuODEtNS41Mi05LjQyLTcuNTctMTIuODYtOS4xNC0xNy41OS0xMS44Ni0xNy40My0xLjU1LC4wOS0xLjYxLDEuNjMtNi44MSw4LjQtNC4xMiw1LjM2LTUuMTgsNS44Mi01LjgsOC4wNi0uNjgsMi40OC0uNzMsNS4wMywzLjA4LDExLjcxLDUuNzksMTAuMTcsOS43NSwxOC4wNSwxMS45NywyMy44MywxLjA1LDIuNzUsMi4yOCw1Ljg1LDIuNzEsNi44OCw0LjE1LDkuNzksOC40NywzMS40NCw5LjY1LDQ4LjMzLDIuODIsNDAuMzYtNS42LDY4LjA2LTIyLjk1LDc1LjU5LTYuODEsMi45Ni0xNy4yMiwzLjYtMjIuOTEsMS40NC0zLjU2LTEuMzUtNS45OC0yLjg2LTguMTgtNC4zOS0yLjItMS41My0xMy41NS05LjcyLTE3LjE4LTI0LjgxLS4zNy0xLjUyLS41Ni0yLjk3LS45Ni01Ljg3LTEuMTUtOC40MS0uODYtMTQuNzYtLjg2LTIyLjkxLDAtMjIuMzksLjQ1LTI2LjI5LDUuNjktNDguNTIsMi45NC0xMi40OSw5LjQ2LTMzLjE5LDEzLjUyLTQyLjg3LDEuNjMtMy44OSwzLjMtOC4xMywzLjc1LTkuNDIsLjQzLTEuMywxLjYzLTQuMDUsMi42Ni02LjEyLDcuMzctMTQuOCwxOC40LTQ0LjQxLDE5LjU4LTUyLjU0LC4zMS0yLjIsMS4yNS02LjU1LDIuMDYtOS42NSwyLjIzLTguNTgsMi4wOS00Mi4yMS0uMjEtNDkuOTQtNC44Mi0xNi4yNy0xMi41OS0yNy4xLTI0LjA3LTMzLjYyLTcuODktNC40OC0xMy43Ny01Ljg0LTI1LjQ2LTUuOS0yNC4zMS0uMTQtNDQuMTgsOS4yNS02NC4xNiwzMC4zLTE3LjA3LDE3Ljk4LTI2LjQ0LDMxLjMtMzYuNDIsNTEuNzQtNi45OSwxNC4zLTEwLDIyLjUtOS40OSwyNS45NywuMjQsMS43MywuODYsMi4xNCwzLjEzLDIuMDksNC43Mi0uMTIsMTcuNzMtMy4yMywyMC42OC00Ljk2LDIuNzctMS41OSw5Ljg3LTExLjMzLDE1LjYzLTIxLjM5LDYuMzUtMTEuMSwxNC44Ny0yMi43NywyNC4yNC0zMy4xNyw3LjA0LTcuODIsMjEuMjktMTkuMiwyNy42Ny0yMi4xLDUuMzYtMi40NCwxNC40NC0zLjg3LDIxLjA2LTMuMzQsMi45LC4yMyw1LjM4LC44Nyw3LjYxLDIuMDMsMS45OCwxLjAzLDUuMzksMy4yMSw4LjY5LDguNzksNi40OSwxMC45NSw2LjU0LDI0LjY0LDYuNDksMjguNDYtLjE3LDEzLjE2LTIuOTcsMjIuOTUtNS4zOCwzMS4xNC0zLjUsMTEuOTEtOC40LDIzLjAzLTE4LjMsNDUuMjItMy44Niw4LjY1LTYuNCwxNC45NC0xMS4zNiwyOC4yNy0uNjcsMS44Mi0yLjE2LDYuNDctMy4yOSwxMC4zNi0xLjEyLDMuODctMi42MSw4Ljk4LTMuMzIsMTEuMzEtLjY3LDIuMzItMS45Miw3LjQyLTIuNzMsMTEuMzEtLjgsMy44Ny0xLjg1LDguNTQtMi4zNSwxMC4zNi0uNSwxLjgyLTEuODMsMTAuOTMtMi45NiwyMC4yNS0zLjEsMjUuNjYtMS43OCw0NS4zNiw0LjMyLDY0LjA5LDEuNjIsNC45OCwzLjY1LDkuNDEsMy42NSw5LjQxLC4zNiwuNzMsMS4wOSwyLjEzLDIuMjEsMy45OSwyLjU1LDQuMjEsNy4yMSwxMS45MSwxNS43OSwxOS4xMSwyLjA3LDEuNzQsNS4yMSw0LjMsOS44Nyw2Ljc4LDIuNTIsMS4zNCw1LjE0LDIuNCw4LjQ5LDMuNTUsMy41NywxLjIyLDYuMzUsMS44MSw2Ljg5LDEuOTMsNS41MywxLjE4LDkuNjUsMS4wOSwxNi4yOCwuOTYsOC4xNS0uMTcsMTEuNTQtMS4wMiwxMy42My0xLjY2LDEuNTItLjQ3LDIuNjItLjg4LDMuNzItMS4zNloiLz48L3N2Zz4=";
142
+
143
+ // src/core/css.ts
144
+ var LIGHT_INK = "#1F2A3B";
145
+ var DARK_INK = "#F3F5F7";
146
+ var CREDIT_CSS = `
147
+ .mdc.mdc{color:var(--matter-credit-color);text-decoration:none;font-family:var(--matter-credit-font,ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace)}
148
+ .mdc.mdc--light{color:var(--matter-credit-color,${LIGHT_INK})}
149
+ .mdc.mdc--dark{color:var(--matter-credit-color,${DARK_INK})}
150
+ .mdc.mdc--auto{color:var(--matter-credit-color,${LIGHT_INK})}
151
+ @media (prefers-color-scheme:dark){.mdc.mdc--auto{color:var(--matter-credit-color,${DARK_INK})}}
152
+ .mdc{display:inline-flex;align-items:center;gap:.6em;vertical-align:middle;line-height:1;border-radius:6px;-webkit-tap-highlight-color:transparent}
153
+ .mdc--stacked{flex-direction:column}
154
+ .mdc--mark{gap:.35em}
155
+ .mdc:focus-visible{outline:2px solid currentColor;outline-offset:4px}
156
+ .mdc__label{font-size:var(--mdc-label-size,11px);font-weight:400;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;opacity:.7;color:var(--matter-credit-label-color)}
157
+ .mdc--stacked .mdc__label{margin-inline-end:-.14em}
158
+ .mdc[dir=rtl] .mdc__label{letter-spacing:0;margin-inline-end:0;text-transform:none;font-family:var(--matter-credit-font-rtl,system-ui,sans-serif)}
159
+ .mdc__row{display:inline-flex;align-items:center;gap:6px}
160
+ .mdc__logo--wordmark{--mdc-logo:url("${WORDMARK_MASK}")}
161
+ .mdc__logo--mark{--mdc-logo:url("${MARK_MASK}")}
162
+ .mdc__logo{display:block;flex:none;background-color:currentColor;opacity:.85;transition:opacity .2s ease;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-mask-image:var(--mdc-logo);mask-image:var(--mdc-logo);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}
163
+ .mdc:hover .mdc__logo,.mdc:focus-visible .mdc__logo{opacity:1}
164
+ .mdc__ext{display:block;flex:none;opacity:.6;transition:transform .25s ease,opacity .2s ease}
165
+ .mdc:hover .mdc__ext{opacity:.9}
166
+ .mdc[dir=rtl] .mdc__ext{transform:scaleX(-1)}
167
+ @media (prefers-reduced-motion:no-preference){
168
+ .mdc--animate .mdc__logo{-webkit-mask-image:var(--mdc-logo),linear-gradient(105deg,#000 40%,rgba(0,0,0,.3) 50%,#000 60%);mask-image:var(--mdc-logo),linear-gradient(105deg,#000 40%,rgba(0,0,0,.3) 50%,#000 60%);-webkit-mask-size:100% 100%,300% 100%;mask-size:100% 100%,300% 100%;-webkit-mask-position:0 0,100% 0;mask-position:0 0,100% 0;-webkit-mask-composite:source-in;mask-composite:intersect}
169
+ .mdc--animate:hover .mdc__logo{-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;transition:opacity .2s ease,-webkit-mask-position .9s ease,mask-position .9s ease}
170
+ .mdc--animate:hover .mdc__ext{transform:translate(2px,-2px)}
171
+ .mdc--animate[dir=rtl]:hover .mdc__ext{transform:scaleX(-1) translate(2px,-2px)}
172
+ }
173
+ @media (forced-colors:active){.mdc__logo{forced-color-adjust:none;background-color:LinkText}}
174
+ `.trim();
175
+ var EXTERNAL_ICON_PATHS = [
176
+ "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",
177
+ "M15 3h6v6M10 14 21 3"
178
+ ];
179
+
180
+ // src/core/html.ts
181
+ var ESCAPES = {
182
+ "&": "&",
183
+ "<": "&lt;",
184
+ ">": "&gt;",
185
+ '"': "&quot;",
186
+ "'": "&#39;"
187
+ };
188
+ function escapeHtml(value) {
189
+ return value.replace(/[&<>"']/g, (c) => ESCAPES[c]);
190
+ }
191
+ function externalIconSvg(size) {
192
+ const paths = EXTERNAL_ICON_PATHS.map((d) => `<path d="${d}"/>`).join("");
193
+ return `<svg class="mdc__ext" width="${size}" height="${size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${paths}</svg>`;
194
+ }
195
+ function renderCreditMarkup(model) {
196
+ const attrs = [
197
+ `class="${model.className}"`,
198
+ `href="${escapeHtml(model.href)}"`,
199
+ `target="_blank"`,
200
+ `rel="${model.rel}"`,
201
+ `dir="${model.dir}"`,
202
+ `aria-label="${escapeHtml(model.ariaLabel)}"`,
203
+ model.title ? `title="${escapeHtml(model.title)}"` : null,
204
+ `style="--mdc-label-size:${model.labelSize}px"`,
205
+ `data-matter-credit=""`
206
+ ].filter(Boolean).join(" ");
207
+ const label = model.label ? `<span class="mdc__label" aria-hidden="true">${escapeHtml(model.label)}</span>` : "";
208
+ const logo = `<span class="mdc__logo mdc__logo--${model.logo.kind}" aria-hidden="true" style="width:${model.logo.width}px;height:${model.logo.height}px"></span>`;
209
+ return `<a ${attrs}>${label}<span class="mdc__row">${logo}${externalIconSvg(model.iconSize)}</span></a>`;
210
+ }
211
+ function renderCreditHTML(options) {
212
+ return `<style data-matter-credit>${CREDIT_CSS}</style>${renderCreditMarkup(resolveCredit(options))}`;
213
+ }
214
+
215
+ // src/core/jsonld.ts
216
+ var MATTER_ORGANIZATION = {
217
+ "@type": "Organization",
218
+ name: BRAND_NAME,
219
+ url: MATTER_URL
220
+ };
221
+ function creatorJsonLd({ name, url, type = "WebSite" }) {
222
+ return {
223
+ "@context": "https://schema.org",
224
+ "@type": type,
225
+ name,
226
+ url,
227
+ creator: MATTER_ORGANIZATION
228
+ };
229
+ }
230
+ function serializeJsonLd(data) {
231
+ return JSON.stringify(data).replace(/</g, "\\u003c").replace(new RegExp("\\u2028", "g"), "\\u2028").replace(new RegExp("\\u2029", "g"), "\\u2029");
232
+ }
233
+ function creatorJsonLdScript(options) {
234
+ return `<script type="application/ld+json">${serializeJsonLd(creatorJsonLd(options))}</script>`;
235
+ }
236
+ // Annotate the CommonJS export names for ESM import in node:
237
+ 0 && (module.exports = {
238
+ BRAND_NAME,
239
+ CREDIT_CSS,
240
+ LOCALES,
241
+ MATTER_ORGANIZATION,
242
+ MATTER_URL,
243
+ buildCreditUrl,
244
+ creatorJsonLd,
245
+ creatorJsonLdScript,
246
+ normalizeSource,
247
+ renderCreditHTML,
248
+ renderCreditMarkup,
249
+ resolveCredit,
250
+ serializeJsonLd
251
+ });
@@ -0,0 +1,93 @@
1
+ import { C as CreditLocale, a as CreditVariant, b as CreditTheme, c as CreditOptions } from './url-DWglt3C7.cjs';
2
+ export { B as BuildCreditUrlOptions, d as CreditSize, e as CreditUtm, M as MATTER_URL, f as buildCreditUrl, n as normalizeSource } from './url-DWglt3C7.cjs';
3
+
4
+ declare const BRAND_NAME = "Matter Development";
5
+ interface LocaleStrings {
6
+ label: string;
7
+ /** Appended to the accessible name: the link opens a new tab. */
8
+ newTab: string;
9
+ /** Same, for apps: the link leaves the app for the browser. */
10
+ opensBrowser: string;
11
+ dir: "ltr" | "rtl";
12
+ }
13
+ declare const LOCALES: Record<CreditLocale, LocaleStrings>;
14
+
15
+ /** Everything a renderer needs, resolved once so React, HTML and the custom element can't drift. */
16
+ interface CreditModel {
17
+ variant: CreditVariant;
18
+ theme: CreditTheme;
19
+ href: string;
20
+ rel: string;
21
+ dir: "ltr" | "rtl";
22
+ /** Visible text; `null` for the `mark` variant, which shows it as a tooltip instead. */
23
+ label: string | null;
24
+ ariaLabel: string;
25
+ title: string | undefined;
26
+ className: string;
27
+ logo: {
28
+ kind: "wordmark" | "mark";
29
+ width: number;
30
+ height: number;
31
+ };
32
+ labelSize: number;
33
+ iconSize: number;
34
+ }
35
+ /** `native` switches the default `utm_medium` to `app_credit` and the a11y hint to "opens in your browser". */
36
+ type CreditPlatform = "web" | "native";
37
+ declare function resolveCredit(options?: CreditOptions, platform?: CreditPlatform): CreditModel;
38
+
39
+ /**
40
+ * One stylesheet for every web renderer. Notes on the less obvious rules:
41
+ *
42
+ * - `.mdc.mdc` doubles specificity so host rules like `.footer a { color }`
43
+ * (0,1,1) don't recolour, underline or re-font the badge.
44
+ * - `color: var(--matter-credit-color)` with no fallback is invalid at
45
+ * computed-value time when unset, which makes `color` inherit — exactly the
46
+ * `inherit` theme, while still beating the UA's blue link colour.
47
+ * - The logo is a mask painted with `currentColor`, so one asset fits any theme.
48
+ * The hover sheen is a second, moving gradient mask intersected with the logo,
49
+ * which dims a band of the logo whatever its ink colour.
50
+ * - Arabic is a joined script: letter-spacing and monospace both break it.
51
+ */
52
+ declare const CREDIT_CSS: string;
53
+
54
+ /** The badge's `<a>` element only — no styles. Pair with `CREDIT_CSS`. */
55
+ declare function renderCreditMarkup(model: CreditModel): string;
56
+ /**
57
+ * The complete badge as an HTML string with its styles: zero JavaScript, made for
58
+ * server rendering. In Astro: `<Fragment set:html={renderCreditHTML({ source: "optimo" })} />`.
59
+ */
60
+ declare function renderCreditHTML(options: CreditOptions & {
61
+ source: string;
62
+ }): string;
63
+
64
+ /** schema.org node for Matter. Add it as `creator` to a JSON-LD block the site already has. */
65
+ declare const MATTER_ORGANIZATION: {
66
+ readonly "@type": "Organization";
67
+ readonly name: "Matter Development";
68
+ readonly url: "https://matterdevelopment.com/";
69
+ };
70
+ interface CreatorJsonLdOptions {
71
+ /** The client site or app name, e.g. "Optimo". */
72
+ name: string;
73
+ /** Its canonical URL. */
74
+ url: string;
75
+ type?: "WebSite" | "WebApplication" | "SoftwareApplication";
76
+ }
77
+ /** A standalone JSON-LD node saying Matter Development built this site. */
78
+ declare function creatorJsonLd({ name, url, type }: CreatorJsonLdOptions): {
79
+ "@context": string;
80
+ "@type": "WebSite" | "WebApplication" | "SoftwareApplication";
81
+ name: string;
82
+ url: string;
83
+ creator: {
84
+ readonly "@type": "Organization";
85
+ readonly name: "Matter Development";
86
+ readonly url: "https://matterdevelopment.com/";
87
+ };
88
+ };
89
+ /** `JSON.stringify` that is safe inside a `<script>`: no `</script>` breakout. */
90
+ declare function serializeJsonLd(data: unknown): string;
91
+ declare function creatorJsonLdScript(options: CreatorJsonLdOptions): string;
92
+
93
+ export { BRAND_NAME, CREDIT_CSS, type CreatorJsonLdOptions, CreditLocale, type CreditModel, CreditOptions, type CreditPlatform, CreditTheme, CreditVariant, LOCALES, MATTER_ORGANIZATION, creatorJsonLd, creatorJsonLdScript, renderCreditHTML, renderCreditMarkup, resolveCredit, serializeJsonLd };
@@ -0,0 +1,93 @@
1
+ import { C as CreditLocale, a as CreditVariant, b as CreditTheme, c as CreditOptions } from './url-DWglt3C7.js';
2
+ export { B as BuildCreditUrlOptions, d as CreditSize, e as CreditUtm, M as MATTER_URL, f as buildCreditUrl, n as normalizeSource } from './url-DWglt3C7.js';
3
+
4
+ declare const BRAND_NAME = "Matter Development";
5
+ interface LocaleStrings {
6
+ label: string;
7
+ /** Appended to the accessible name: the link opens a new tab. */
8
+ newTab: string;
9
+ /** Same, for apps: the link leaves the app for the browser. */
10
+ opensBrowser: string;
11
+ dir: "ltr" | "rtl";
12
+ }
13
+ declare const LOCALES: Record<CreditLocale, LocaleStrings>;
14
+
15
+ /** Everything a renderer needs, resolved once so React, HTML and the custom element can't drift. */
16
+ interface CreditModel {
17
+ variant: CreditVariant;
18
+ theme: CreditTheme;
19
+ href: string;
20
+ rel: string;
21
+ dir: "ltr" | "rtl";
22
+ /** Visible text; `null` for the `mark` variant, which shows it as a tooltip instead. */
23
+ label: string | null;
24
+ ariaLabel: string;
25
+ title: string | undefined;
26
+ className: string;
27
+ logo: {
28
+ kind: "wordmark" | "mark";
29
+ width: number;
30
+ height: number;
31
+ };
32
+ labelSize: number;
33
+ iconSize: number;
34
+ }
35
+ /** `native` switches the default `utm_medium` to `app_credit` and the a11y hint to "opens in your browser". */
36
+ type CreditPlatform = "web" | "native";
37
+ declare function resolveCredit(options?: CreditOptions, platform?: CreditPlatform): CreditModel;
38
+
39
+ /**
40
+ * One stylesheet for every web renderer. Notes on the less obvious rules:
41
+ *
42
+ * - `.mdc.mdc` doubles specificity so host rules like `.footer a { color }`
43
+ * (0,1,1) don't recolour, underline or re-font the badge.
44
+ * - `color: var(--matter-credit-color)` with no fallback is invalid at
45
+ * computed-value time when unset, which makes `color` inherit — exactly the
46
+ * `inherit` theme, while still beating the UA's blue link colour.
47
+ * - The logo is a mask painted with `currentColor`, so one asset fits any theme.
48
+ * The hover sheen is a second, moving gradient mask intersected with the logo,
49
+ * which dims a band of the logo whatever its ink colour.
50
+ * - Arabic is a joined script: letter-spacing and monospace both break it.
51
+ */
52
+ declare const CREDIT_CSS: string;
53
+
54
+ /** The badge's `<a>` element only — no styles. Pair with `CREDIT_CSS`. */
55
+ declare function renderCreditMarkup(model: CreditModel): string;
56
+ /**
57
+ * The complete badge as an HTML string with its styles: zero JavaScript, made for
58
+ * server rendering. In Astro: `<Fragment set:html={renderCreditHTML({ source: "optimo" })} />`.
59
+ */
60
+ declare function renderCreditHTML(options: CreditOptions & {
61
+ source: string;
62
+ }): string;
63
+
64
+ /** schema.org node for Matter. Add it as `creator` to a JSON-LD block the site already has. */
65
+ declare const MATTER_ORGANIZATION: {
66
+ readonly "@type": "Organization";
67
+ readonly name: "Matter Development";
68
+ readonly url: "https://matterdevelopment.com/";
69
+ };
70
+ interface CreatorJsonLdOptions {
71
+ /** The client site or app name, e.g. "Optimo". */
72
+ name: string;
73
+ /** Its canonical URL. */
74
+ url: string;
75
+ type?: "WebSite" | "WebApplication" | "SoftwareApplication";
76
+ }
77
+ /** A standalone JSON-LD node saying Matter Development built this site. */
78
+ declare function creatorJsonLd({ name, url, type }: CreatorJsonLdOptions): {
79
+ "@context": string;
80
+ "@type": "WebSite" | "WebApplication" | "SoftwareApplication";
81
+ name: string;
82
+ url: string;
83
+ creator: {
84
+ readonly "@type": "Organization";
85
+ readonly name: "Matter Development";
86
+ readonly url: "https://matterdevelopment.com/";
87
+ };
88
+ };
89
+ /** `JSON.stringify` that is safe inside a `<script>`: no `</script>` breakout. */
90
+ declare function serializeJsonLd(data: unknown): string;
91
+ declare function creatorJsonLdScript(options: CreatorJsonLdOptions): string;
92
+
93
+ export { BRAND_NAME, CREDIT_CSS, type CreatorJsonLdOptions, CreditLocale, type CreditModel, CreditOptions, type CreditPlatform, CreditTheme, CreditVariant, LOCALES, MATTER_ORGANIZATION, creatorJsonLd, creatorJsonLdScript, renderCreditHTML, renderCreditMarkup, resolveCredit, serializeJsonLd };
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ import {
2
+ CREDIT_CSS,
3
+ renderCreditHTML,
4
+ renderCreditMarkup
5
+ } from "./chunk-HMYCJLA7.js";
6
+ import {
7
+ BRAND_NAME,
8
+ LOCALES,
9
+ MATTER_URL,
10
+ buildCreditUrl,
11
+ normalizeSource,
12
+ resolveCredit
13
+ } from "./chunk-GSANMFZ3.js";
14
+
15
+ // src/core/jsonld.ts
16
+ var MATTER_ORGANIZATION = {
17
+ "@type": "Organization",
18
+ name: BRAND_NAME,
19
+ url: MATTER_URL
20
+ };
21
+ function creatorJsonLd({ name, url, type = "WebSite" }) {
22
+ return {
23
+ "@context": "https://schema.org",
24
+ "@type": type,
25
+ name,
26
+ url,
27
+ creator: MATTER_ORGANIZATION
28
+ };
29
+ }
30
+ function serializeJsonLd(data) {
31
+ return JSON.stringify(data).replace(/</g, "\\u003c").replace(new RegExp("\\u2028", "g"), "\\u2028").replace(new RegExp("\\u2029", "g"), "\\u2029");
32
+ }
33
+ function creatorJsonLdScript(options) {
34
+ return `<script type="application/ld+json">${serializeJsonLd(creatorJsonLd(options))}</script>`;
35
+ }
36
+ export {
37
+ BRAND_NAME,
38
+ CREDIT_CSS,
39
+ LOCALES,
40
+ MATTER_ORGANIZATION,
41
+ MATTER_URL,
42
+ buildCreditUrl,
43
+ creatorJsonLd,
44
+ creatorJsonLdScript,
45
+ normalizeSource,
46
+ renderCreditHTML,
47
+ renderCreditMarkup,
48
+ resolveCredit,
49
+ serializeJsonLd
50
+ };