@stilhq/core 0.5.0 → 0.6.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/README.md CHANGED
@@ -141,6 +141,67 @@ type ComponentMeta = {
141
141
  };
142
142
  ```
143
143
 
144
+ ## Text QA
145
+
146
+ ### Basic Usage
147
+
148
+ ```typescript
149
+ import { buildTextWithMeta, normalizeTextList } from "@stilhq/core";
150
+
151
+ // Load text snapshot from Figma Plugin
152
+ const snapshot = JSON.parse(fs.readFileSync(".stil/text/snapshots/textlist.json"));
153
+
154
+ // Build with QA validation and metadata
155
+ const { text, meta } = buildTextWithMeta(snapshot);
156
+
157
+ // textlist.dist.json - validated text items
158
+ fs.writeFileSync("textlist.dist.json", JSON.stringify(text, null, 2));
159
+
160
+ // textlist.meta.json - QA issues/warnings/stats
161
+ fs.writeFileSync("textlist.meta.json", JSON.stringify(meta, null, 2));
162
+ ```
163
+
164
+ ### QA Rules (v1)
165
+
166
+ Text items are validated with the following rules:
167
+ - **Empty text**: Text is empty or whitespace-only (Error)
168
+ - **Duplicates**: Same text appears in multiple locations (Info)
169
+ - **Too long**: Text exceeds 500 characters (Warning)
170
+ - **Too short**: Single character text (Info)
171
+ - **Invalid characters**: Contains control characters except tab/newline (Warning)
172
+
173
+ **QA issues** are:
174
+ - Recorded in `textlist.meta.json` with details
175
+ - Displayed in Storybook QA report
176
+ - Non-fatal: CI passes even with issues (v1 policy)
177
+
178
+ ### Text Metadata
179
+
180
+ ```typescript
181
+ type TextMeta = {
182
+ issues: {
183
+ emptyText: Array<{ nodeId: string; nodePath?: string }>;
184
+ duplicates: Array<{
185
+ text: string;
186
+ count: number;
187
+ locations: Array<{ nodeId: string; nodePath?: string }>;
188
+ }>;
189
+ tooLong: Array<{ nodeId: string; text: string; length: number }>;
190
+ tooShort: Array<{ nodeId: string; text: string }>;
191
+ invalidChars: Array<{ nodeId: string; text: string; issue: string }>;
192
+ };
193
+ warnings: string[];
194
+ stats: {
195
+ totalItems: number;
196
+ validItems: number;
197
+ itemsWithIssues: number;
198
+ uniqueTexts: number;
199
+ emptyCount: number;
200
+ duplicateCount: number;
201
+ };
202
+ };
203
+ ```
204
+
144
205
  ## Status
145
206
 
146
207
  0.x — API is not yet stable. Breaking changes may occur in minor versions.
@@ -112,6 +112,70 @@ export type ComponentMeta = {
112
112
  invalidVariants: number;
113
113
  };
114
114
  };
115
+ export type TextSnapshot = {
116
+ textList: {
117
+ scope: string;
118
+ generatedAt?: string;
119
+ stats?: {
120
+ processedNodes: number;
121
+ foundTextNodes: number;
122
+ elapsedMs?: number;
123
+ };
124
+ items: TextItem[];
125
+ };
126
+ };
127
+ export type TextItem = {
128
+ nodeId: string;
129
+ pageName?: string;
130
+ nodeName?: string;
131
+ text: string;
132
+ charCount?: number;
133
+ updatedAt?: string;
134
+ scopeKey?: string;
135
+ nodePath?: string;
136
+ };
137
+ export type TextMeta = {
138
+ issues: {
139
+ emptyText: Array<{
140
+ nodeId: string;
141
+ nodePath?: string;
142
+ }>;
143
+ duplicates: Array<{
144
+ text: string;
145
+ count: number;
146
+ locations: Array<{
147
+ nodeId: string;
148
+ nodePath?: string;
149
+ }>;
150
+ }>;
151
+ tooLong: Array<{
152
+ nodeId: string;
153
+ text: string;
154
+ length: number;
155
+ nodePath?: string;
156
+ }>;
157
+ tooShort: Array<{
158
+ nodeId: string;
159
+ text: string;
160
+ nodePath?: string;
161
+ }>;
162
+ invalidChars: Array<{
163
+ nodeId: string;
164
+ text: string;
165
+ issue: string;
166
+ nodePath?: string;
167
+ }>;
168
+ };
169
+ warnings: string[];
170
+ stats: {
171
+ totalItems: number;
172
+ validItems: number;
173
+ itemsWithIssues: number;
174
+ uniqueTexts: number;
175
+ emptyCount: number;
176
+ duplicateCount: number;
177
+ };
178
+ };
115
179
  export type Mapping = Record<string, string>;
116
180
  export type BuildOptions = {
117
181
  /** optional: theme.css を生成するか */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { TextItem, TextMeta } from "./schema";
2
+ export type NormalizedTextItem = TextItem;
3
+ export type NormalizedTextSnapshot = {
4
+ textList: {
5
+ scope: string;
6
+ generatedAt?: string;
7
+ stats?: {
8
+ processedNodes: number;
9
+ foundTextNodes: number;
10
+ elapsedMs?: number;
11
+ };
12
+ items: NormalizedTextItem[];
13
+ };
14
+ };
15
+ /**
16
+ * Normalize text snapshot from Figma Plugin
17
+ * Currently a pass-through, but reserves room for future transformations
18
+ */
19
+ export declare function normalizeTextList(snapshot: any): NormalizedTextSnapshot;
20
+ /**
21
+ * Validate text and perform QA checks
22
+ * QA Rules (v1):
23
+ * - Empty text check
24
+ * - Duplicate detection
25
+ * - Length check (too long: >500, too short: 1 char)
26
+ * - Invalid characters (control chars except tab/newline)
27
+ */
28
+ export declare function validateTextWithWarnings(normalized: NormalizedTextSnapshot): {
29
+ valid: NormalizedTextSnapshot;
30
+ meta: TextMeta;
31
+ };
32
+ /**
33
+ * Build text dist + meta from raw snapshot
34
+ * Returns both the valid text items (dist) and QA metadata (issues/warnings/stats)
35
+ */
36
+ export declare function buildTextWithMeta(snapshot: any): {
37
+ text: NormalizedTextSnapshot;
38
+ meta: TextMeta;
39
+ };
40
+ /**
41
+ * Simple normalize + validate without meta
42
+ * For cases where QA reports are not needed
43
+ */
44
+ export declare function buildTextList(snapshot: any): NormalizedTextSnapshot;
45
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAMjE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE;YACN,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;YACvB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,EAAE,kBAAkB,EAAE,CAAC;KAC7B,CAAC;CACH,CAAC;AAMF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,sBAAsB,CAgBvE;AAMD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,sBAAsB,GACjC;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAmJnD;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG;IAChD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;CAChB,CAWA;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,GAAG,sBAAsB,CAGnE"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ // text.ts - Text QA and validation
3
+ // Follows the same pattern as token/component processing: normalize → validate → build
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.normalizeTextList = normalizeTextList;
6
+ exports.validateTextWithWarnings = validateTextWithWarnings;
7
+ exports.buildTextWithMeta = buildTextWithMeta;
8
+ exports.buildTextList = buildTextList;
9
+ // ========================================
10
+ // Normalize
11
+ // ========================================
12
+ /**
13
+ * Normalize text snapshot from Figma Plugin
14
+ * Currently a pass-through, but reserves room for future transformations
15
+ */
16
+ function normalizeTextList(snapshot) {
17
+ // Validate input structure
18
+ if (!snapshot || typeof snapshot !== "object") {
19
+ throw new Error("Invalid text snapshot: must be an object");
20
+ }
21
+ if (!snapshot.textList) {
22
+ throw new Error("Invalid text snapshot: missing 'textList' property");
23
+ }
24
+ if (!Array.isArray(snapshot.textList.items)) {
25
+ throw new Error("Invalid text snapshot: textList.items must be an array");
26
+ }
27
+ // For v1, we just validate and pass through
28
+ return snapshot;
29
+ }
30
+ // ========================================
31
+ // QA Validation with Warnings
32
+ // ========================================
33
+ /**
34
+ * Validate text and perform QA checks
35
+ * QA Rules (v1):
36
+ * - Empty text check
37
+ * - Duplicate detection
38
+ * - Length check (too long: >500, too short: 1 char)
39
+ * - Invalid characters (control chars except tab/newline)
40
+ */
41
+ function validateTextWithWarnings(normalized) {
42
+ const warnings = [];
43
+ const emptyText = [];
44
+ const duplicates = [];
45
+ const tooLong = [];
46
+ const tooShort = [];
47
+ const invalidChars = [];
48
+ let totalItems = 0;
49
+ let validItems = 0;
50
+ let itemsWithIssues = 0;
51
+ // Track text occurrences for duplicate detection
52
+ const textOccurrences = new Map();
53
+ const validItemsList = [];
54
+ for (const item of normalized.textList.items) {
55
+ totalItems++;
56
+ let itemHasIssues = false;
57
+ // QA Check 1: Empty text
58
+ if (!item.text || item.text.trim() === "") {
59
+ itemHasIssues = true;
60
+ emptyText.push({
61
+ nodeId: item.nodeId,
62
+ nodePath: item.nodePath,
63
+ });
64
+ warnings.push(`Empty text found at ${item.nodePath || item.nodeId || "unknown"}`);
65
+ }
66
+ // QA Check 2: Track for duplicate detection (do after empty check)
67
+ if (item.text && item.text.trim() !== "") {
68
+ if (!textOccurrences.has(item.text)) {
69
+ textOccurrences.set(item.text, []);
70
+ }
71
+ textOccurrences.get(item.text).push({
72
+ nodeId: item.nodeId,
73
+ nodePath: item.nodePath,
74
+ });
75
+ }
76
+ // QA Check 3: Too long (>500 characters)
77
+ if (item.text && item.text.length > 500) {
78
+ itemHasIssues = true;
79
+ tooLong.push({
80
+ nodeId: item.nodeId,
81
+ text: item.text.substring(0, 100) + "...", // Truncate for display
82
+ length: item.text.length,
83
+ nodePath: item.nodePath,
84
+ });
85
+ warnings.push(`Text exceeds 500 characters (${item.text.length} chars) at ${item.nodePath || item.nodeId || "unknown"}`);
86
+ }
87
+ // QA Check 4: Too short (1 character, excluding intentional spaces)
88
+ if (item.text && item.text.length === 1 && item.text.trim().length === 1) {
89
+ // This is info-level, not an error
90
+ tooShort.push({
91
+ nodeId: item.nodeId,
92
+ text: item.text,
93
+ nodePath: item.nodePath,
94
+ });
95
+ warnings.push(`Single character text "${item.text}" at ${item.nodePath || item.nodeId || "unknown"}`);
96
+ }
97
+ // QA Check 5: Invalid control characters (except \t, \n, \r)
98
+ if (item.text) {
99
+ const invalidControlChars = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/;
100
+ if (invalidControlChars.test(item.text)) {
101
+ itemHasIssues = true;
102
+ invalidChars.push({
103
+ nodeId: item.nodeId,
104
+ text: item.text,
105
+ issue: "Contains invalid control characters (U+0000-U+001F except tab/newline)",
106
+ nodePath: item.nodePath,
107
+ });
108
+ warnings.push(`Invalid control characters in text at ${item.nodePath || item.nodeId || "unknown"}`);
109
+ }
110
+ }
111
+ // Count valid vs issues
112
+ if (itemHasIssues) {
113
+ itemsWithIssues++;
114
+ }
115
+ else {
116
+ validItems++;
117
+ }
118
+ // Include all items in valid list (v1 policy: warnings only, not filtering)
119
+ validItemsList.push(item);
120
+ }
121
+ // Process duplicates
122
+ let duplicateCount = 0;
123
+ for (const [text, locations] of textOccurrences.entries()) {
124
+ if (locations.length > 1) {
125
+ duplicateCount += locations.length;
126
+ duplicates.push({
127
+ text,
128
+ count: locations.length,
129
+ locations,
130
+ });
131
+ warnings.push(`Duplicate text "${text}" appears ${locations.length} times`);
132
+ }
133
+ }
134
+ const uniqueTexts = textOccurrences.size;
135
+ const validSnapshot = {
136
+ textList: {
137
+ ...normalized.textList,
138
+ items: validItemsList,
139
+ },
140
+ };
141
+ const meta = {
142
+ issues: {
143
+ emptyText,
144
+ duplicates,
145
+ tooLong,
146
+ tooShort,
147
+ invalidChars,
148
+ },
149
+ warnings,
150
+ stats: {
151
+ totalItems,
152
+ validItems,
153
+ itemsWithIssues,
154
+ uniqueTexts,
155
+ emptyCount: emptyText.length,
156
+ duplicateCount,
157
+ },
158
+ };
159
+ return { valid: validSnapshot, meta };
160
+ }
161
+ // ========================================
162
+ // Build with Meta
163
+ // ========================================
164
+ /**
165
+ * Build text dist + meta from raw snapshot
166
+ * Returns both the valid text items (dist) and QA metadata (issues/warnings/stats)
167
+ */
168
+ function buildTextWithMeta(snapshot) {
169
+ // Step 1: Normalize
170
+ const normalized = normalizeTextList(snapshot);
171
+ // Step 2: Validate and perform QA checks
172
+ const { valid, meta } = validateTextWithWarnings(normalized);
173
+ return {
174
+ text: valid,
175
+ meta,
176
+ };
177
+ }
178
+ // ========================================
179
+ // Convenience export (without meta)
180
+ // ========================================
181
+ /**
182
+ * Simple normalize + validate without meta
183
+ * For cases where QA reports are not needed
184
+ */
185
+ function buildTextList(snapshot) {
186
+ const { text } = buildTextWithMeta(snapshot);
187
+ return text;
188
+ }
189
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,9 +2,11 @@ export { buildThemeTokens, buildThemeTokensWithMeta, writeThemeTokens, } from ".
2
2
  export { normalize, normalizeWithWarnings, normalizeFromFigmaSemantics, normalizeFromFigmaPlugin, normalizeFromFigmaPluginMulti, detectInputFormat, } from "./core/normalize";
3
3
  export { validateMapping, formatValidationErrors, printValidationErrors, } from "./core/validate";
4
4
  export { normalizeComponents, validateComponentsWithWarnings, buildComponents, buildComponentsWithMeta, } from "./core/components";
5
+ export { normalizeTextList, validateTextWithWarnings, buildTextList, buildTextWithMeta, } from "./core/text";
5
6
  export { loadFigmaVariables, validateFigmaVariables } from "./adapters/figma";
6
7
  export type { ThemeTokens, TokenMeta, RawTokenTree, RawTokenNode, RawTokenLeaf, RawTokenType, RawTokenSource, FigmaVariableAlias, FigmaSemanticsJson, FigmaPluginJson, FigmaPluginMultiJson, TokenInputJson, Mapping, BuildOptions, ValidationIssue, ValidationResult, } from "./core/schema";
7
8
  export type { ComponentSnapshot, ComponentItem, ComponentVariant, ComponentMeta, } from "./core/schema";
9
+ export type { TextSnapshot, TextItem, TextMeta, } from "./core/schema";
8
10
  export type { InputFormat } from "./core/normalize";
9
11
  export type { MappingValidationError } from "./core/validate";
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // @stilhq/core - Main entry point
3
3
  // 公開APIはここからのみ提供(深いパスimport禁止)
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.validateFigmaVariables = exports.loadFigmaVariables = exports.buildComponentsWithMeta = exports.buildComponents = exports.validateComponentsWithWarnings = exports.normalizeComponents = exports.printValidationErrors = exports.formatValidationErrors = exports.validateMapping = exports.detectInputFormat = exports.normalizeFromFigmaPluginMulti = exports.normalizeFromFigmaPlugin = exports.normalizeFromFigmaSemantics = exports.normalizeWithWarnings = exports.normalize = exports.writeThemeTokens = exports.buildThemeTokensWithMeta = exports.buildThemeTokens = void 0;
5
+ exports.validateFigmaVariables = exports.loadFigmaVariables = exports.buildTextWithMeta = exports.buildTextList = exports.validateTextWithWarnings = exports.normalizeTextList = exports.buildComponentsWithMeta = exports.buildComponents = exports.validateComponentsWithWarnings = exports.normalizeComponents = exports.printValidationErrors = exports.formatValidationErrors = exports.validateMapping = exports.detectInputFormat = exports.normalizeFromFigmaPluginMulti = exports.normalizeFromFigmaPlugin = exports.normalizeFromFigmaSemantics = exports.normalizeWithWarnings = exports.normalize = exports.writeThemeTokens = exports.buildThemeTokensWithMeta = exports.buildThemeTokens = void 0;
6
6
  // Core functions - Tokens
7
7
  var build_1 = require("./core/build");
8
8
  Object.defineProperty(exports, "buildThemeTokens", { enumerable: true, get: function () { return build_1.buildThemeTokens; } });
@@ -25,6 +25,12 @@ Object.defineProperty(exports, "normalizeComponents", { enumerable: true, get: f
25
25
  Object.defineProperty(exports, "validateComponentsWithWarnings", { enumerable: true, get: function () { return components_1.validateComponentsWithWarnings; } });
26
26
  Object.defineProperty(exports, "buildComponents", { enumerable: true, get: function () { return components_1.buildComponents; } });
27
27
  Object.defineProperty(exports, "buildComponentsWithMeta", { enumerable: true, get: function () { return components_1.buildComponentsWithMeta; } });
28
+ // Core functions - Text
29
+ var text_1 = require("./core/text");
30
+ Object.defineProperty(exports, "normalizeTextList", { enumerable: true, get: function () { return text_1.normalizeTextList; } });
31
+ Object.defineProperty(exports, "validateTextWithWarnings", { enumerable: true, get: function () { return text_1.validateTextWithWarnings; } });
32
+ Object.defineProperty(exports, "buildTextList", { enumerable: true, get: function () { return text_1.buildTextList; } });
33
+ Object.defineProperty(exports, "buildTextWithMeta", { enumerable: true, get: function () { return text_1.buildTextWithMeta; } });
28
34
  // Adapters
29
35
  var figma_1 = require("./adapters/figma");
30
36
  Object.defineProperty(exports, "loadFigmaVariables", { enumerable: true, get: function () { return figma_1.loadFigmaVariables; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,+BAA+B;;;AAE/B,0BAA0B;AAC1B,sCAIsB;AAHpB,yGAAA,gBAAgB,OAAA;AAChB,iHAAA,wBAAwB,OAAA;AACxB,yGAAA,gBAAgB,OAAA;AAElB,8CAO0B;AANxB,sGAAA,SAAS,OAAA;AACT,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AAEnB,4CAIyB;AAHvB,2GAAA,eAAe,OAAA;AACf,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;AAGvB,8BAA8B;AAC9B,gDAK2B;AAJzB,iHAAA,mBAAmB,OAAA;AACnB,4HAAA,8BAA8B,OAAA;AAC9B,6GAAA,eAAe,OAAA;AACf,qHAAA,uBAAuB,OAAA;AAGzB,WAAW;AACX,0CAA8E;AAArE,2GAAA,kBAAkB,OAAA;AAAE,+GAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,+BAA+B;;;AAE/B,0BAA0B;AAC1B,sCAIsB;AAHpB,yGAAA,gBAAgB,OAAA;AAChB,iHAAA,wBAAwB,OAAA;AACxB,yGAAA,gBAAgB,OAAA;AAElB,8CAO0B;AANxB,sGAAA,SAAS,OAAA;AACT,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AAEnB,4CAIyB;AAHvB,2GAAA,eAAe,OAAA;AACf,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;AAGvB,8BAA8B;AAC9B,gDAK2B;AAJzB,iHAAA,mBAAmB,OAAA;AACnB,4HAAA,8BAA8B,OAAA;AAC9B,6GAAA,eAAe,OAAA;AACf,qHAAA,uBAAuB,OAAA;AAGzB,wBAAwB;AACxB,oCAKqB;AAJnB,yGAAA,iBAAiB,OAAA;AACjB,gHAAA,wBAAwB,OAAA;AACxB,qGAAA,aAAa,OAAA;AACb,yGAAA,iBAAiB,OAAA;AAGnB,WAAW;AACX,0CAA8E;AAArE,2GAAA,kBAAkB,OAAA;AAAE,+GAAA,sBAAsB,OAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stilhq/core",
3
- "version": "0.5.0",
4
- "description": "Design token and component pipeline for Stil",
3
+ "version": "0.6.0",
4
+ "description": "Design token, component, and text QA pipeline for Stil",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -19,7 +19,8 @@
19
19
  "keywords": [
20
20
  "design-tokens",
21
21
  "design-system",
22
- "components"
22
+ "components",
23
+ "text-qa"
23
24
  ],
24
25
  "author": "Tetsu",
25
26
  "license": "BUSL-1.1",