@figma-vars/hooks 1.5.0 → 2.0.0-beta.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/README.md +8 -8
- package/dist/api/fetcher.d.ts +2 -1
- package/dist/api/fetcher.d.ts.map +1 -0
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/mutator.d.ts +2 -1
- package/dist/api/mutator.d.ts.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/contexts/FigmaTokenContext.d.ts +3 -0
- package/dist/contexts/FigmaTokenContext.d.ts.map +1 -0
- package/dist/contexts/FigmaVarsProvider.d.ts +3 -33
- package/dist/contexts/FigmaVarsProvider.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +4 -1
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/contexts/useFigmaTokenContext.d.ts +3 -0
- package/dist/contexts/useFigmaTokenContext.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useBulkUpdateVariables.d.ts +10 -25
- package/dist/hooks/useBulkUpdateVariables.d.ts.map +1 -0
- package/dist/hooks/useCreateVariable.d.ts +8 -25
- package/dist/hooks/useCreateVariable.d.ts.map +1 -0
- package/dist/hooks/useDeleteVariable.d.ts +9 -17
- package/dist/hooks/useDeleteVariable.d.ts.map +1 -0
- package/dist/hooks/useFigmaToken.d.ts +1 -0
- package/dist/hooks/useFigmaToken.d.ts.map +1 -0
- package/dist/hooks/useMutation.d.ts +1 -52
- package/dist/hooks/useMutation.d.ts.map +1 -0
- package/dist/hooks/useUpdateVariable.d.ts +14 -25
- package/dist/hooks/useUpdateVariable.d.ts.map +1 -0
- package/dist/hooks/useVariableCollections.d.ts +1 -0
- package/dist/hooks/useVariableCollections.d.ts.map +1 -0
- package/dist/hooks/useVariableModes.d.ts +1 -0
- package/dist/hooks/useVariableModes.d.ts.map +1 -0
- package/dist/hooks/useVariables.d.ts +7 -25
- package/dist/hooks/useVariables.d.ts.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +81 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +118 -755
- package/dist/types/contexts.d.ts +11 -0
- package/dist/types/contexts.d.ts.map +1 -0
- package/dist/types/figma.d.ts +4 -3
- package/dist/types/figma.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +1 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/mutations.d.ts +4 -3
- package/dist/types/mutations.d.ts.map +1 -0
- package/dist/utils/filterVariables.d.ts +1 -0
- package/dist/utils/filterVariables.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +43 -15
- package/dist/index.js +0 -17
package/dist/types/contexts.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
+
import { LocalVariablesResponse } from 'types';
|
|
2
3
|
/**
|
|
3
4
|
* Central context shape for FigmaVars—provides authentication and file context to all hooks and consumers in the tree.
|
|
4
5
|
*
|
|
@@ -36,6 +37,11 @@ export interface FigmaTokenContextType {
|
|
|
36
37
|
* The file key is the string after '/file/' in a Figma file URL (e.g., https://www.figma.com/file/<fileKey>/...).
|
|
37
38
|
*/
|
|
38
39
|
fileKey: string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Optional fallback variable JSON file for offline or static use cases.
|
|
42
|
+
* Allows FigmaVars to function without a live API request.
|
|
43
|
+
*/
|
|
44
|
+
fallbackFile?: LocalVariablesResponse | string;
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
47
|
* Props for the FigmaVarsProvider component, which injects Figma API authentication and file scoping for all descendant hooks and utilities.
|
|
@@ -74,4 +80,9 @@ export interface FigmaVarsProviderProps {
|
|
|
74
80
|
* The file key is found in the Figma file URL, after `/file/` and before the next `/` (e.g., https://www.figma.com/file/<fileKey>/...).
|
|
75
81
|
*/
|
|
76
82
|
fileKey: string | null;
|
|
83
|
+
/**
|
|
84
|
+
* Optional fallback variable JSON file used when the API is unavailable or skipped.
|
|
85
|
+
*/
|
|
86
|
+
fallbackFile?: LocalVariablesResponse | string;
|
|
77
87
|
}
|
|
88
|
+
//# sourceMappingURL=contexts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexts.d.ts","sourceRoot":"","sources":["../../src/types/contexts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;CAChD"}
|
package/dist/types/figma.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @public
|
|
13
13
|
*/
|
|
14
|
-
export type ResolvedType =
|
|
14
|
+
export type ResolvedType = "BOOLEAN" | "FLOAT" | "STRING" | "COLOR";
|
|
15
15
|
/**
|
|
16
16
|
* Enum of all valid Figma variable scopes.
|
|
17
17
|
*
|
|
@@ -26,7 +26,7 @@ export type ResolvedType = 'BOOLEAN' | 'FLOAT' | 'STRING' | 'COLOR';
|
|
|
26
26
|
*
|
|
27
27
|
* @public
|
|
28
28
|
*/
|
|
29
|
-
export type VariableScope =
|
|
29
|
+
export type VariableScope = "ALL_SCOPES" | "TEXT_CONTENT" | "CORNER_RADIUS" | "WIDTH_HEIGHT" | "GAP" | "STROKE_FLOAT" | "OPACITY" | "EFFECT_FLOAT" | "FONT_WEIGHT" | "FONT_SIZE" | "LINE_HEIGHT" | "LETTER_SPACING" | "PARAGRAPH_SPACING" | "PARAGRAPH_INDENT" | "FONT_FAMILY" | "FONT_STYLE" | "FONT_VARIATIONS" | "ALL_FILLS" | "FRAME_FILL" | "SHAPE_FILL" | "TEXT_FILL" | "STROKE_COLOR" | "EFFECT_COLOR";
|
|
30
30
|
/**
|
|
31
31
|
* RGBA color value used by Figma variables of type COLOR.
|
|
32
32
|
*
|
|
@@ -66,7 +66,7 @@ export interface Color {
|
|
|
66
66
|
*/
|
|
67
67
|
export interface VariableAlias {
|
|
68
68
|
/** Type identifier for variable alias objects. Always 'VARIABLE_ALIAS'. */
|
|
69
|
-
type:
|
|
69
|
+
type: "VARIABLE_ALIAS";
|
|
70
70
|
/** The referenced variable's Figma variable ID. */
|
|
71
71
|
id: string;
|
|
72
72
|
}
|
|
@@ -242,3 +242,4 @@ export interface FigmaError {
|
|
|
242
242
|
/** Human-readable error message describing the failure. */
|
|
243
243
|
message: string;
|
|
244
244
|
}
|
|
245
|
+
//# sourceMappingURL=figma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma.d.ts","sourceRoot":"","sources":["../../src/types/figma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,cAAc,GACd,KAAK,GACL,cAAc,GACd,SAAS,GACT,cAAc,GACd,aAAa,GACb,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,cAAc,GACd,cAAc,CAAC;AAEnB;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,KAAK;IACpB,uBAAuB;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,IAAI,EAAE,gBAAgB,CAAC;IACvB,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,wDAAwD;QACxD,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,oDAAoD;QACpD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;KAC1C,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types/hooks.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,sEAAsE;IACtE,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACpD,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|
|
@@ -80,7 +80,7 @@ export interface UpdateVariablePayload {
|
|
|
80
80
|
*
|
|
81
81
|
* @public
|
|
82
82
|
*/
|
|
83
|
-
export type VariableAction =
|
|
83
|
+
export type VariableAction = "CREATE" | "UPDATE" | "DELETE";
|
|
84
84
|
/**
|
|
85
85
|
* Represents a change operation on a Figma variable collection.
|
|
86
86
|
*
|
|
@@ -288,7 +288,7 @@ export interface BulkUpdateResponse {
|
|
|
288
288
|
* @public
|
|
289
289
|
*/
|
|
290
290
|
export interface MutationState<TData> {
|
|
291
|
-
status:
|
|
291
|
+
status: "idle" | "loading" | "success" | "error";
|
|
292
292
|
data: TData | null;
|
|
293
293
|
error: Error | null;
|
|
294
294
|
}
|
|
@@ -305,10 +305,11 @@ export interface MutationState<TData> {
|
|
|
305
305
|
*/
|
|
306
306
|
export interface MutationResult<TData, TPayload> {
|
|
307
307
|
mutate: (payload: TPayload) => Promise<TData | undefined>;
|
|
308
|
-
status:
|
|
308
|
+
status: "idle" | "loading" | "success" | "error";
|
|
309
309
|
data: TData | null;
|
|
310
310
|
error: Error | null;
|
|
311
311
|
isLoading: boolean;
|
|
312
312
|
isSuccess: boolean;
|
|
313
313
|
isError: boolean;
|
|
314
314
|
}
|
|
315
|
+
//# sourceMappingURL=mutations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../src/types/mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterVariables.d.ts","sourceRoot":"","sources":["../../src/utils/filterVariables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,aAAa,EAAE,EAC1B,QAAQ,EAAE;IAAE,YAAY,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,aAAa,EAAE,CAOjB"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@figma-vars/hooks",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"description": "Typed React hooks for managing Figma Variables, modes, tokens, and bindings via API.",
|
|
5
5
|
"author": "Mark Learst",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "dist/index.
|
|
8
|
+
"main": "dist/index.cjs",
|
|
9
9
|
"module": "dist/index.mjs",
|
|
10
|
-
"types": "dist/index.d.ts",
|
|
11
10
|
"files": [
|
|
12
11
|
"dist"
|
|
13
12
|
],
|
|
@@ -33,37 +32,52 @@
|
|
|
33
32
|
},
|
|
34
33
|
"homepage": "https://github.com/marklearst/figma-vars-hooks#readme",
|
|
35
34
|
"engines": {
|
|
36
|
-
"node": ">=
|
|
35
|
+
"node": ">=20.0.0"
|
|
37
36
|
},
|
|
38
37
|
"peerDependencies": {
|
|
39
|
-
"react": "
|
|
40
|
-
"react-dom": "
|
|
38
|
+
"react": "^18.3.1 || ^19.0.0",
|
|
39
|
+
"react-dom": "^18.3.1 || ^19.0.0"
|
|
41
40
|
},
|
|
42
41
|
"sideEffects": false,
|
|
43
42
|
"exports": {
|
|
44
43
|
".": {
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
"import": {
|
|
45
|
+
"types": "./dist/index.d.ts",
|
|
46
|
+
"default": "./dist/index.mjs"
|
|
47
|
+
},
|
|
48
|
+
"require": {
|
|
49
|
+
"types": "./dist/index.d.cts",
|
|
50
|
+
"default": "./dist/index.cjs"
|
|
51
|
+
},
|
|
52
|
+
"default": "./dist/index.mjs"
|
|
48
53
|
}
|
|
49
54
|
},
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public",
|
|
57
|
+
"provenance": true
|
|
58
|
+
},
|
|
50
59
|
"funding": {
|
|
51
60
|
"type": "github",
|
|
52
61
|
"url": "https://github.com/sponsors/marklearst"
|
|
53
62
|
},
|
|
54
63
|
"devDependencies": {
|
|
64
|
+
"@arethetypeswrong/cli": "^0.17.0",
|
|
65
|
+
"@biomejs/biome": "^1.9.4",
|
|
66
|
+
"@size-limit/preset-small-lib": "^11.1.5",
|
|
55
67
|
"@testing-library/jest-dom": "^6.6.3",
|
|
56
68
|
"@testing-library/react": "^16.3.0",
|
|
57
69
|
"@types/node": "^24.0.3",
|
|
58
|
-
"@types/react": "^
|
|
59
|
-
"@types/react-dom": "^
|
|
70
|
+
"@types/react": "^19.0.0",
|
|
71
|
+
"@types/react-dom": "^19.0.0",
|
|
60
72
|
"@vitejs/plugin-react": "^4.5.2",
|
|
61
73
|
"@vitest/coverage-v8": "^2.0.5",
|
|
62
74
|
"@vitest/ui": "2.1.9",
|
|
63
75
|
"dotenv": "^16.5.0",
|
|
64
76
|
"jsdom": "^26.1.0",
|
|
65
|
-
"
|
|
66
|
-
"react
|
|
77
|
+
"publint": "^0.3.1",
|
|
78
|
+
"react": "^19.0.0",
|
|
79
|
+
"react-dom": "^19.0.0",
|
|
80
|
+
"size-limit": "^11.1.5",
|
|
67
81
|
"typescript": "~5.8.3",
|
|
68
82
|
"vite": "^6.3.5",
|
|
69
83
|
"vite-plugin-dts": "^4.5.4",
|
|
@@ -76,16 +90,30 @@
|
|
|
76
90
|
"dependencies": {
|
|
77
91
|
"swr": "^2.3.3"
|
|
78
92
|
},
|
|
93
|
+
"size-limit": [
|
|
94
|
+
{
|
|
95
|
+
"name": "modern ESM entry",
|
|
96
|
+
"path": "dist/index.mjs",
|
|
97
|
+
"import": "{ useVariables }",
|
|
98
|
+
"limit": "10 kB"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
79
101
|
"scripts": {
|
|
80
102
|
"dev": "vite",
|
|
81
103
|
"build": "tsc && vite build",
|
|
82
|
-
"
|
|
104
|
+
"postbuild": "cp dist/index.d.ts dist/index.d.cts || copy dist/index.d.ts dist/index.d.cts",
|
|
105
|
+
"lint": "biome format --write .",
|
|
106
|
+
"format": "biome format --write .",
|
|
83
107
|
"preview": "vite preview",
|
|
84
108
|
"test": "vitest",
|
|
85
109
|
"test:ui": "vitest --ui",
|
|
86
110
|
"test:coverage": "vitest run --coverage",
|
|
87
111
|
"test:watch": "vitest watch",
|
|
88
112
|
"postversion": "git push && git push --tags",
|
|
89
|
-
"create:docs": "npx typedoc src/index.ts --out docs-site/api"
|
|
113
|
+
"create:docs": "npx typedoc src/index.ts --out docs-site/api",
|
|
114
|
+
"check:publint": "publint",
|
|
115
|
+
"check:attw": "attw --pack .",
|
|
116
|
+
"check:size": "size-limit",
|
|
117
|
+
"check:release": "pnpm run build && pnpm run check:publint && pnpm run check:attw && pnpm run check:size"
|
|
90
118
|
}
|
|
91
119
|
}
|
package/dist/index.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const pt=require("react/jsx-runtime"),m=require("react"),Xe=m.createContext(void 0),mt=({children:e,token:t,fileKey:n})=>pt.jsx(Xe.Provider,{value:{token:t,fileKey:n},children:e}),te=()=>{const e=m.useContext(Xe);if(e===void 0)throw new Error("useFigmaTokenContext must be used within a FigmaVarsProvider");return e};var ie={exports:{}},pe={};/**
|
|
2
|
-
* @license React
|
|
3
|
-
* use-sync-external-store-shim.production.js
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
-
*
|
|
7
|
-
* This source code is licensed under the MIT license found in the
|
|
8
|
-
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var We;function ht(){if(We)return pe;We=1;var e=m;function t(l,E){return l===E&&(l!==0||1/l===1/E)||l!==l&&E!==E}var n=typeof Object.is=="function"?Object.is:t,r=e.useState,s=e.useEffect,c=e.useLayoutEffect,o=e.useDebugValue;function u(l,E){var a=E(),p=r({inst:{value:a,getSnapshot:E}}),f=p[0].inst,I=p[1];return c(function(){f.value=a,f.getSnapshot=E,h(f)&&I({inst:f})},[l,a,E]),s(function(){return h(f)&&I({inst:f}),l(function(){h(f)&&I({inst:f})})},[l]),o(a),a}function h(l){var E=l.getSnapshot;l=l.value;try{var a=E();return!n(l,a)}catch{return!0}}function y(l,E){return E()}var v=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:u;return pe.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:v,pe}var me={};/**
|
|
10
|
-
* @license React
|
|
11
|
-
* use-sync-external-store-shim.development.js
|
|
12
|
-
*
|
|
13
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the MIT license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var ke;function St(){return ke||(ke=1,process.env.NODE_ENV!=="production"&&function(){function e(a,p){return a===p&&(a!==0||1/a===1/p)||a!==a&&p!==p}function t(a,p){v||s.startTransition===void 0||(v=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var f=p();if(!l){var I=p();c(f,I)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),l=!0)}I=o({inst:{value:f,getSnapshot:p}});var i=I[0].inst,U=I[1];return h(function(){i.value=f,i.getSnapshot=p,n(i)&&U({inst:i})},[a,f,p]),u(function(){return n(i)&&U({inst:i}),a(function(){n(i)&&U({inst:i})})},[a]),y(f),f}function n(a){var p=a.getSnapshot;a=a.value;try{var f=p();return!c(a,f)}catch{return!0}}function r(a,p){return p()}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var s=m,c=typeof Object.is=="function"?Object.is:e,o=s.useState,u=s.useEffect,h=s.useLayoutEffect,y=s.useDebugValue,v=!1,l=!1,E=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?r:t;me.useSyncExternalStore=s.useSyncExternalStore!==void 0?s.useSyncExternalStore:E,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),me}var $e;function _t(){return $e||($e=1,process.env.NODE_ENV==="production"?ie.exports=ht():ie.exports=St()),ie.exports}var Ot=_t();const Qe=0,Ze=1,et=2,He=3;var Ke=Object.prototype.hasOwnProperty;function we(e,t){var n,r;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((r=e.length)===t.length)for(;r--&&we(e[r],t[r]););return r===-1}if(!n||typeof e=="object"){r=0;for(n in e)if(Ke.call(e,n)&&++r&&!Ke.call(t,n)||!(n in t)||!we(e[n],t[n]))return!1;return Object.keys(t).length===r}}return e!==e&&t!==t}const j=new WeakMap,q=()=>{},C=q(),ge=Object,d=e=>e===C,F=e=>typeof e=="function",B=(e,t)=>({...e,...t}),tt=e=>F(e.then),he={},ae={},be="undefined",ne=typeof window!=be,Te=typeof document!=be,vt=ne&&"Deno"in window,Rt=()=>ne&&typeof window.requestAnimationFrame!=be,nt=(e,t)=>{const n=j.get(e);return[()=>!d(t)&&e.get(t)||he,r=>{if(!d(t)){const s=e.get(t);t in ae||(ae[t]=s),n[5](t,B(s,r),s||he)}},n[6],()=>!d(t)&&t in ae?ae[t]:!d(t)&&e.get(t)||he]};let ye=!0;const wt=()=>ye,[Ae,De]=ne&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[q,q],gt=()=>{const e=Te&&document.visibilityState;return d(e)||e!=="hidden"},Tt=e=>(Te&&document.addEventListener("visibilitychange",e),Ae("focus",e),()=>{Te&&document.removeEventListener("visibilitychange",e),De("focus",e)}),yt=e=>{const t=()=>{ye=!0,e()},n=()=>{ye=!1};return Ae("online",t),Ae("offline",n),()=>{De("online",t),De("offline",n)}},At={isOnline:wt,isVisible:gt},Dt={initFocus:Tt,initReconnect:yt},Je=!m.useId,ee=!ne||vt,Ct=e=>Rt()?window.requestAnimationFrame(e):setTimeout(e,1),Se=ee?m.useEffect:m.useLayoutEffect,_e=typeof navigator<"u"&&navigator.connection,Ye=!ee&&_e&&(["slow-2g","2g"].includes(_e.effectiveType)||_e.saveData),ce=new WeakMap,It=e=>ge.prototype.toString.call(e),Oe=(e,t)=>e===`[object ${t}]`;let bt=0;const Ce=e=>{const t=typeof e,n=It(e),r=Oe(n,"Date"),s=Oe(n,"RegExp"),c=Oe(n,"Object");let o,u;if(ge(e)===e&&!r&&!s){if(o=ce.get(e),o)return o;if(o=++bt+"~",ce.set(e,o),Array.isArray(e)){for(o="@",u=0;u<e.length;u++)o+=Ce(e[u])+",";ce.set(e,o)}if(c){o="#";const h=ge.keys(e).sort();for(;!d(u=h.pop());)d(e[u])||(o+=u+":"+Ce(e[u])+",");ce.set(e,o)}}else o=r?e.toJSON():t=="symbol"?e.toString():t=="string"?JSON.stringify(e):""+e;return o},Le=e=>{if(F(e))try{e=e()}catch{e=""}const t=e;return e=typeof e=="string"?e:(Array.isArray(e)?e.length:e)?Ce(e):"",[e,t]};let Lt=0;const Ie=()=>++Lt;async function rt(...e){const[t,n,r,s]=e,c=B({populateCache:!0,throwOnError:!0},typeof s=="boolean"?{revalidate:s}:s||{});let o=c.populateCache;const u=c.rollbackOnError;let h=c.optimisticData;const y=E=>typeof u=="function"?u(E):u!==!1,v=c.throwOnError;if(F(n)){const E=n,a=[],p=t.keys();for(const f of p)!/^\$(inf|sub)\$/.test(f)&&E(t.get(f)._k)&&a.push(f);return Promise.all(a.map(l))}return l(n);async function l(E){const[a]=Le(E);if(!a)return;const[p,f]=nt(t,a),[I,i,U,X]=j.get(t),G=()=>{const A=I[a];return(F(c.revalidate)?c.revalidate(p().data,E):c.revalidate!==!1)&&(delete U[a],delete X[a],A&&A[0])?A[0](et).then(()=>p().data):p().data};if(e.length<3)return G();let g=r,M,V=!1;const O=Ie();i[a]=[O,0];const $=!d(h),N=p(),H=N.data,re=N._c,W=d(re)?H:re;if($&&(h=F(h)?h(W,H):h,f({data:h,_c:W})),F(g))try{g=g(W)}catch(A){M=A,V=!0}if(g&&tt(g))if(g=await g.catch(A=>{M=A,V=!0}),O!==i[a][0]){if(V)throw M;return g}else V&&$&&y(M)&&(o=!0,f({data:W,_c:C}));if(o&&!V)if(F(o)){const A=o(g,W);f({data:A,error:C,_c:C})}else f({data:g,error:C,_c:C});if(i[a][1]=Ie(),Promise.resolve(G()).then(()=>{f({_c:C})}),V){if(v)throw M;return}return g}}const ze=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},Vt=(e,t)=>{if(!j.has(e)){const n=B(Dt,t),r=Object.create(null),s=rt.bind(C,e);let c=q;const o=Object.create(null),u=(v,l)=>{const E=o[v]||[];return o[v]=E,E.push(l),()=>E.splice(E.indexOf(l),1)},h=(v,l,E)=>{e.set(v,l);const a=o[v];if(a)for(const p of a)p(l,E)},y=()=>{if(!j.has(e)&&(j.set(e,[r,Object.create(null),Object.create(null),Object.create(null),s,h,u]),!ee)){const v=n.initFocus(setTimeout.bind(C,ze.bind(C,r,Qe))),l=n.initReconnect(setTimeout.bind(C,ze.bind(C,r,Ze)));c=()=>{v&&v(),l&&l(),j.delete(e)}}};return y(),[e,s,y,c]}return[e,j.get(e)[4]]},Nt=(e,t,n,r,s)=>{const c=n.errorRetryCount,o=s.retryCount,u=~~((Math.random()+.5)*(1<<(o<8?o:8)))*n.errorRetryInterval;!d(c)&&o>c||setTimeout(r,u,s)},Ft=we,[ot,Mt]=Vt(new Map),xt=B({onLoadingSlow:q,onSuccess:q,onError:q,onErrorRetry:Nt,onDiscarded:q,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:Ye?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:Ye?5e3:3e3,compare:Ft,isPaused:()=>!1,cache:ot,mutate:Mt,fallback:{}},At),Pt=(e,t)=>{const n=B(e,t);if(t){const{use:r,fallback:s}=e,{use:c,fallback:o}=t;r&&c&&(n.use=r.concat(c)),s&&o&&(n.fallback=B(s,o))}return n},jt=m.createContext({}),Ut="$inf$",st=ne&&window.__SWR_DEVTOOLS_USE__,Gt=st?window.__SWR_DEVTOOLS_USE__:[],qt=()=>{st&&(window.__SWR_DEVTOOLS_REACT__=m)},Bt=e=>F(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}],Wt=()=>B(xt,m.useContext(jt)),kt=e=>(t,n,r)=>e(t,n&&((...c)=>{const[o]=Le(t),[,,,u]=j.get(ot);if(o.startsWith(Ut))return n(...c);const h=u[o];return d(h)?n(...c):(delete u[o],h)}),r),$t=Gt.concat(kt),Ht=e=>function(...n){const r=Wt(),[s,c,o]=Bt(n),u=Pt(r,o);let h=e;const{use:y}=u,v=(y||[]).concat($t);for(let l=v.length;l--;)h=v[l](h);return h(s,c||u.fetcher||null,u)},Kt=(e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const s=r.indexOf(n);s>=0&&(r[s]=r[r.length-1],r.pop())}};qt();const ve=m.use||(e=>{switch(e.status){case"pending":throw e;case"fulfilled":return e.value;case"rejected":throw e.reason;default:throw e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{e.status="rejected",e.reason=t}),e}}),Re={dedupe:!0},Jt=(e,t,n)=>{const{cache:r,compare:s,suspense:c,fallbackData:o,revalidateOnMount:u,revalidateIfStale:h,refreshInterval:y,refreshWhenHidden:v,refreshWhenOffline:l,keepPreviousData:E}=n,[a,p,f,I]=j.get(r),[i,U]=Le(e),X=m.useRef(!1),G=m.useRef(!1),g=m.useRef(i),M=m.useRef(t),V=m.useRef(n),O=()=>V.current,$=()=>O().isVisible()&&O().isOnline(),[N,H,re,W]=nt(r,i),A=m.useRef({}).current,Q=d(o)?d(n.fallback)?C:n.fallback[i]:o,Fe=(_,S)=>{for(const T in A){const R=T;if(R==="data"){if(!s(_[R],S[R])&&(!d(_[R])||!s(se,S[R])))return!1}else if(S[R]!==_[R])return!1}return!0},Me=m.useMemo(()=>{const _=!i||!t?!1:d(u)?O().isPaused()||c?!1:h!==!1:u,S=D=>{const x=B(D);return delete x._k,_?{isValidating:!0,isLoading:!0,...x}:x},T=N(),R=W(),L=S(T),Y=T===R?L:S(R);let w=L;return[()=>{const D=S(N());return Fe(D,w)?(w.data=D.data,w.isLoading=D.isLoading,w.isValidating=D.isValidating,w.error=D.error,w):(w=D,D)},()=>Y]},[r,i]),K=Ot.useSyncExternalStore(m.useCallback(_=>re(i,(S,T)=>{Fe(T,S)||_()}),[r,i]),Me[0],Me[1]),xe=!X.current,lt=a[i]&&a[i].length>0,J=K.data,k=d(J)?Q&&tt(Q)?ve(Q):Q:J,oe=K.error,fe=m.useRef(k),se=E?d(J)?d(fe.current)?k:fe.current:J:k,Pe=lt&&!d(oe)?!1:xe&&!d(u)?u:O().isPaused()?!1:c?d(k)?!1:h:d(k)||h,je=!!(i&&t&&xe&&Pe),ft=d(K.isValidating)?je:K.isValidating,dt=d(K.isLoading)?je:K.isLoading,Z=m.useCallback(async _=>{const S=M.current;if(!i||!S||G.current||O().isPaused())return!1;let T,R,L=!0;const Y=_||{},w=!f[i]||!Y.dedupe,D=()=>Je?!G.current&&i===g.current&&X.current:i===g.current,x={isValidating:!1,isLoading:!1},Ge=()=>{H(x)},qe=()=>{const b=f[i];b&&b[1]===R&&delete f[i]},Be={isValidating:!0};d(N().data)&&(Be.isLoading=!0);try{if(w&&(H(Be),n.loadingTimeout&&d(N().data)&&setTimeout(()=>{L&&D()&&O().onLoadingSlow(i,n)},n.loadingTimeout),f[i]=[S(U),Ie()]),[T,R]=f[i],T=await T,w&&setTimeout(qe,n.dedupingInterval),!f[i]||f[i][1]!==R)return w&&D()&&O().onDiscarded(i),!1;x.error=C;const b=p[i];if(!d(b)&&(R<=b[0]||R<=b[1]||b[1]===0))return Ge(),w&&D()&&O().onDiscarded(i),!1;const P=N().data;x.data=s(P,T)?P:T,w&&D()&&O().onSuccess(T,i,n)}catch(b){qe();const P=O(),{shouldRetryOnError:de}=P;P.isPaused()||(x.error=b,w&&D()&&(P.onError(b,i,P),(de===!0||F(de)&&de(b))&&(!O().revalidateOnFocus||!O().revalidateOnReconnect||$())&&P.onErrorRetry(b,i,P,Et=>{const Ee=a[i];Ee&&Ee[0]&&Ee[0](He,Et)},{retryCount:(Y.retryCount||0)+1,dedupe:!0})))}return L=!1,Ge(),!0},[i,r]),Ue=m.useCallback((..._)=>rt(r,g.current,..._),[]);if(Se(()=>{M.current=t,V.current=n,d(J)||(fe.current=J)}),Se(()=>{if(!i)return;const _=Z.bind(C,Re);let S=0;O().revalidateOnFocus&&(S=Date.now()+O().focusThrottleInterval);const R=Kt(i,a,(L,Y={})=>{if(L==Qe){const w=Date.now();O().revalidateOnFocus&&w>S&&$()&&(S=w+O().focusThrottleInterval,_())}else if(L==Ze)O().revalidateOnReconnect&&$()&&_();else{if(L==et)return Z();if(L==He)return Z(Y)}});return G.current=!1,g.current=i,X.current=!0,H({_k:U}),Pe&&(f[i]||(d(k)||ee?_():Ct(_))),()=>{G.current=!0,R()}},[i]),Se(()=>{let _;function S(){const R=F(y)?y(N().data):y;R&&_!==-1&&(_=setTimeout(T,R))}function T(){!N().error&&(v||O().isVisible())&&(l||O().isOnline())?Z(Re).then(S):S()}return S(),()=>{_&&(clearTimeout(_),_=-1)}},[y,v,l,i]),m.useDebugValue(se),c&&d(k)&&i){if(!Je&&ee)throw new Error("Fallback data is required when using Suspense in SSR.");M.current=t,V.current=n,G.current=!1;const _=I[i];if(!d(_)){const S=Ue(_);ve(S)}if(d(oe)){const S=Z(Re);d(se)||(S.status="fulfilled",S.value=!0),ve(S)}else throw oe}return{mutate:Ue,get data(){return A.data=!0,se},get error(){return A.error=!0,oe},get isValidating(){return A.isValidating=!0,ft},get isLoading(){return A.isLoading=!0,dt}}},Yt=Ht(Jt),Ve="https://api.figma.com",zt=`${Ve}/v1/files`,it=`${Ve}/v1/variables`,at=it,ct=e=>`${it}/${e}`,Xt=e=>`${zt}/${e}/variables/local`,Qt="application/json",ut="X-FIGMA-TOKEN",z="A Figma API token is required.",Zt="An error occurred while fetching data from the Figma API.";async function en(e,t){if(!t)throw new Error(z);const n=await fetch(e,{method:"GET",headers:{[ut]:t,"Content-Type":Qt}});if(!n.ok){let r=Zt;try{const s=await n.json();s!=null&&s.message&&(r=s.message)}catch{}throw new Error(r)}return n.json()}const Ne=()=>{const{token:e,fileKey:t}=te(),n=t?Xt(t):null,{data:r,error:s,isLoading:c,isValidating:o,mutate:u}=Yt(e&&n?[n,e]:null,en);return{data:r,isLoading:c,isValidating:o,error:s,mutate:u}},tn=()=>{const{data:e}=Ne(),t=m.useMemo(()=>e!=null&&e.meta?Object.values(e.meta.variableCollections):[],[e]),n=m.useMemo(()=>e!=null&&e.meta?e.meta.variableCollections:{},[e]);return{collections:t,collectionsById:n}},nn=()=>{const{data:e}=Ne();return m.useMemo(()=>{const t=[],n={},r={};if(e!=null&&e.meta)for(const s of Object.values(e.meta.variableCollections)){t.push(...s.modes),n[s.id]=s.modes;for(const c of s.modes)r[c.modeId]=c}return{modes:t,modesByCollectionId:n,modesById:r}},[e])};function rn(e,t){switch(t.type){case"loading":return{...e,status:"loading",error:null};case"success":return{...e,status:"success",data:t.payload};case"error":return{...e,status:"error",error:t.payload};default:return e}}const ue=e=>{const t={status:"idle",data:null,error:null},[n,r]=m.useReducer(rn,t);return{mutate:m.useCallback(async c=>{r({type:"loading"});try{const o=await e(c);return r({type:"success",payload:o}),o}catch(o){r({type:"error",payload:o});return}},[e]),...n,isLoading:n.status==="loading",isSuccess:n.status==="success",isError:n.status==="error"}};async function le(e,t,n,r){if(!t)throw new Error(z);const c={CREATE:"POST",UPDATE:"PUT",DELETE:"DELETE"}[n],o=await fetch(`${Ve}${e}`,{method:c,headers:{"Content-Type":"application/json",[ut]:t},body:r?JSON.stringify(r):void 0});if(!o.ok){const u=await o.json().catch(()=>({}));throw new Error(u.err||u.message||"An API error occurred")}return o.status===204||!o.body?{}:o.json()}const on=()=>{const{token:e}=te();return ue(async n=>{if(!e)throw new Error(z);return await le(at,e,"CREATE",n)})},sn=()=>{const{token:e}=te();return ue(async({variableId:n,payload:r})=>{if(!e)throw new Error(z);const s=ct(n);return await le(s,e,"UPDATE",r)})},an=()=>{const{token:e}=te();return ue(async n=>{if(!e)throw new Error(z);return await le(ct(n),e,"DELETE",void 0)})},cn=()=>{const{token:e}=te();return ue(async n=>{if(!e)throw new Error(z);return await le(at,e,"CREATE",n)})};function un(e,t){return e.filter(n=>{let r=!0;return t.resolvedType&&(r=r&&n.resolvedType===t.resolvedType),t.name&&(r=r&&n.name.includes(t.name)),r})}exports.FigmaVarsProvider=mt;exports.filterVariables=un;exports.useBulkUpdateVariables=cn;exports.useCreateVariable=on;exports.useDeleteVariable=an;exports.useUpdateVariable=sn;exports.useVariableCollections=tn;exports.useVariableModes=nn;exports.useVariables=Ne;
|