react-native-divkit 0.1.0-alpha.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/LICENSE +176 -0
- package/README.md +340 -0
- package/dist/DivKit.d.ts +68 -0
- package/dist/DivKit.d.ts.map +1 -0
- package/dist/DivKit.js +400 -0
- package/dist/DivKit.js.map +1 -0
- package/dist/actions/array.d.ts +8 -0
- package/dist/actions/array.d.ts.map +1 -0
- package/dist/actions/array.js +139 -0
- package/dist/actions/array.js.map +1 -0
- package/dist/actions/copyToClipboard.d.ts +22 -0
- package/dist/actions/copyToClipboard.d.ts.map +1 -0
- package/dist/actions/copyToClipboard.js +63 -0
- package/dist/actions/copyToClipboard.js.map +1 -0
- package/dist/actions/dict.d.ts +6 -0
- package/dist/actions/dict.d.ts.map +1 -0
- package/dist/actions/dict.js +58 -0
- package/dist/actions/dict.js.map +1 -0
- package/dist/actions/index.d.ts +11 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +11 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/updateStructure.d.ts +6 -0
- package/dist/actions/updateStructure.d.ts.map +1 -0
- package/dist/actions/updateStructure.js +116 -0
- package/dist/actions/updateStructure.js.map +1 -0
- package/dist/components/DivComponent.d.ts +29 -0
- package/dist/components/DivComponent.d.ts.map +1 -0
- package/dist/components/DivComponent.js +62 -0
- package/dist/components/DivComponent.js.map +1 -0
- package/dist/components/container/DivContainer.d.ts +26 -0
- package/dist/components/container/DivContainer.d.ts.map +1 -0
- package/dist/components/container/DivContainer.js +172 -0
- package/dist/components/container/DivContainer.js.map +1 -0
- package/dist/components/container/index.d.ts +3 -0
- package/dist/components/container/index.d.ts.map +1 -0
- package/dist/components/container/index.js +2 -0
- package/dist/components/container/index.js.map +1 -0
- package/dist/components/image/DivImage.d.ts +29 -0
- package/dist/components/image/DivImage.d.ts.map +1 -0
- package/dist/components/image/DivImage.js +122 -0
- package/dist/components/image/DivImage.js.map +1 -0
- package/dist/components/image/index.d.ts +3 -0
- package/dist/components/image/index.d.ts.map +1 -0
- package/dist/components/image/index.js +2 -0
- package/dist/components/image/index.js.map +1 -0
- package/dist/components/index.d.ts +14 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +11 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/state/DivState.d.ts +26 -0
- package/dist/components/state/DivState.d.ts.map +1 -0
- package/dist/components/state/DivState.js +121 -0
- package/dist/components/state/DivState.js.map +1 -0
- package/dist/components/state/index.d.ts +3 -0
- package/dist/components/state/index.d.ts.map +1 -0
- package/dist/components/state/index.js +2 -0
- package/dist/components/state/index.js.map +1 -0
- package/dist/components/text/DivText.d.ts +28 -0
- package/dist/components/text/DivText.d.ts.map +1 -0
- package/dist/components/text/DivText.js +143 -0
- package/dist/components/text/DivText.js.map +1 -0
- package/dist/components/text/index.d.ts +3 -0
- package/dist/components/text/index.d.ts.map +1 -0
- package/dist/components/text/index.js +2 -0
- package/dist/components/text/index.js.map +1 -0
- package/dist/components/utilities/Outer.d.ts +17 -0
- package/dist/components/utilities/Outer.d.ts.map +1 -0
- package/dist/components/utilities/Outer.js +210 -0
- package/dist/components/utilities/Outer.js.map +1 -0
- package/dist/components/utilities/Unknown.d.ts +11 -0
- package/dist/components/utilities/Unknown.d.ts.map +1 -0
- package/dist/components/utilities/Unknown.js +50 -0
- package/dist/components/utilities/Unknown.js.map +1 -0
- package/dist/components/utilities/index.d.ts +5 -0
- package/dist/components/utilities/index.d.ts.map +1 -0
- package/dist/components/utilities/index.js +3 -0
- package/dist/components/utilities/index.js.map +1 -0
- package/dist/context/ActionContext.d.ts +25 -0
- package/dist/context/ActionContext.d.ts.map +1 -0
- package/dist/context/ActionContext.js +20 -0
- package/dist/context/ActionContext.js.map +1 -0
- package/dist/context/DivKitContext.d.ts +33 -0
- package/dist/context/DivKitContext.d.ts.map +1 -0
- package/dist/context/DivKitContext.js +14 -0
- package/dist/context/DivKitContext.js.map +1 -0
- package/dist/context/EnabledContext.d.ts +31 -0
- package/dist/context/EnabledContext.d.ts.map +1 -0
- package/dist/context/EnabledContext.js +31 -0
- package/dist/context/EnabledContext.js.map +1 -0
- package/dist/context/StateContext.d.ts +57 -0
- package/dist/context/StateContext.d.ts.map +1 -0
- package/dist/context/StateContext.js +20 -0
- package/dist/context/StateContext.js.map +1 -0
- package/dist/context/index.d.ts +9 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +9 -0
- package/dist/context/index.js.map +1 -0
- package/dist/expressions/bigint.d.ts +8 -0
- package/dist/expressions/bigint.d.ts.map +1 -0
- package/dist/expressions/bigint.js +31 -0
- package/dist/expressions/bigint.js.map +1 -0
- package/dist/expressions/const.d.ts +15 -0
- package/dist/expressions/const.d.ts.map +1 -0
- package/dist/expressions/const.js +15 -0
- package/dist/expressions/const.js.map +1 -0
- package/dist/expressions/eval.d.ts +77 -0
- package/dist/expressions/eval.d.ts.map +1 -0
- package/dist/expressions/eval.js +459 -0
- package/dist/expressions/eval.js.map +1 -0
- package/dist/expressions/expressions.d.ts +7 -0
- package/dist/expressions/expressions.d.ts.map +1 -0
- package/dist/expressions/expressions.js +3191 -0
- package/dist/expressions/expressions.js.map +1 -0
- package/dist/expressions/funcs/array.d.ts +2 -0
- package/dist/expressions/funcs/array.d.ts.map +1 -0
- package/dist/expressions/funcs/array.js +381 -0
- package/dist/expressions/funcs/array.js.map +1 -0
- package/dist/expressions/funcs/colors.d.ts +2 -0
- package/dist/expressions/funcs/colors.d.ts.map +1 -0
- package/dist/expressions/funcs/colors.js +75 -0
- package/dist/expressions/funcs/colors.js.map +1 -0
- package/dist/expressions/funcs/customFuncs.d.ts +8 -0
- package/dist/expressions/funcs/customFuncs.d.ts.map +1 -0
- package/dist/expressions/funcs/customFuncs.js +114 -0
- package/dist/expressions/funcs/customFuncs.js.map +1 -0
- package/dist/expressions/funcs/datetime.d.ts +2 -0
- package/dist/expressions/funcs/datetime.d.ts.map +1 -0
- package/dist/expressions/funcs/datetime.js +182 -0
- package/dist/expressions/funcs/datetime.js.map +1 -0
- package/dist/expressions/funcs/dict.d.ts +2 -0
- package/dist/expressions/funcs/dict.d.ts.map +1 -0
- package/dist/expressions/funcs/dict.js +170 -0
- package/dist/expressions/funcs/dict.js.map +1 -0
- package/dist/expressions/funcs/funcs.d.ts +80 -0
- package/dist/expressions/funcs/funcs.d.ts.map +1 -0
- package/dist/expressions/funcs/funcs.js +146 -0
- package/dist/expressions/funcs/funcs.js.map +1 -0
- package/dist/expressions/funcs/index.d.ts +2 -0
- package/dist/expressions/funcs/index.d.ts.map +1 -0
- package/dist/expressions/funcs/index.js +23 -0
- package/dist/expressions/funcs/index.js.map +1 -0
- package/dist/expressions/funcs/interval.d.ts +2 -0
- package/dist/expressions/funcs/interval.d.ts.map +1 -0
- package/dist/expressions/funcs/interval.js +61 -0
- package/dist/expressions/funcs/interval.js.map +1 -0
- package/dist/expressions/funcs/math.d.ts +2 -0
- package/dist/expressions/funcs/math.d.ts.map +1 -0
- package/dist/expressions/funcs/math.js +324 -0
- package/dist/expressions/funcs/math.js.map +1 -0
- package/dist/expressions/funcs/std.d.ts +2 -0
- package/dist/expressions/funcs/std.d.ts.map +1 -0
- package/dist/expressions/funcs/std.js +293 -0
- package/dist/expressions/funcs/std.js.map +1 -0
- package/dist/expressions/funcs/stored.d.ts +4 -0
- package/dist/expressions/funcs/stored.d.ts.map +1 -0
- package/dist/expressions/funcs/stored.js +62 -0
- package/dist/expressions/funcs/stored.js.map +1 -0
- package/dist/expressions/funcs/strings.d.ts +2 -0
- package/dist/expressions/funcs/strings.d.ts.map +1 -0
- package/dist/expressions/funcs/strings.js +158 -0
- package/dist/expressions/funcs/strings.js.map +1 -0
- package/dist/expressions/funcs/trigonometry.d.ts +2 -0
- package/dist/expressions/funcs/trigonometry.d.ts.map +1 -0
- package/dist/expressions/funcs/trigonometry.js +92 -0
- package/dist/expressions/funcs/trigonometry.js.map +1 -0
- package/dist/expressions/json.d.ts +18 -0
- package/dist/expressions/json.d.ts.map +1 -0
- package/dist/expressions/json.js +271 -0
- package/dist/expressions/json.js.map +1 -0
- package/dist/expressions/parserCache.d.ts +4 -0
- package/dist/expressions/parserCache.d.ts.map +1 -0
- package/dist/expressions/parserCache.js +23 -0
- package/dist/expressions/parserCache.js.map +1 -0
- package/dist/expressions/simpleUnescapeString.d.ts +2 -0
- package/dist/expressions/simpleUnescapeString.d.ts.map +1 -0
- package/dist/expressions/simpleUnescapeString.js +61 -0
- package/dist/expressions/simpleUnescapeString.js.map +1 -0
- package/dist/expressions/utils.d.ts +29 -0
- package/dist/expressions/utils.d.ts.map +1 -0
- package/dist/expressions/utils.js +236 -0
- package/dist/expressions/utils.js.map +1 -0
- package/dist/expressions/variable.d.ts +82 -0
- package/dist/expressions/variable.d.ts.map +1 -0
- package/dist/expressions/variable.js +337 -0
- package/dist/expressions/variable.js.map +1 -0
- package/dist/expressions/walk.d.ts +7 -0
- package/dist/expressions/walk.d.ts.map +1 -0
- package/dist/expressions/walk.js +39 -0
- package/dist/expressions/walk.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +11 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAction.d.ts +102 -0
- package/dist/hooks/useAction.d.ts.map +1 -0
- package/dist/hooks/useAction.js +116 -0
- package/dist/hooks/useAction.js.map +1 -0
- package/dist/hooks/useDerivedFromVars.d.ts +72 -0
- package/dist/hooks/useDerivedFromVars.d.ts.map +1 -0
- package/dist/hooks/useDerivedFromVars.js +100 -0
- package/dist/hooks/useDerivedFromVars.js.map +1 -0
- package/dist/hooks/useVariable.d.ts +86 -0
- package/dist/hooks/useVariable.d.ts.map +1 -0
- package/dist/hooks/useVariable.js +130 -0
- package/dist/hooks/useVariable.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/stores/createObservable.d.ts +38 -0
- package/dist/stores/createObservable.d.ts.map +1 -0
- package/dist/stores/createObservable.js +49 -0
- package/dist/stores/createObservable.js.map +1 -0
- package/dist/utils/applyTemplate.d.ts +8 -0
- package/dist/utils/applyTemplate.d.ts.map +1 -0
- package/dist/utils/applyTemplate.js +94 -0
- package/dist/utils/applyTemplate.js.map +1 -0
- package/dist/utils/correctColor.d.ts +18 -0
- package/dist/utils/correctColor.d.ts.map +1 -0
- package/dist/utils/correctColor.js +79 -0
- package/dist/utils/correctColor.js.map +1 -0
- package/dist/utils/escapeRegExp.d.ts +2 -0
- package/dist/utils/escapeRegExp.d.ts.map +1 -0
- package/dist/utils/escapeRegExp.js +4 -0
- package/dist/utils/escapeRegExp.js.map +1 -0
- package/dist/utils/formatDate.d.ts +6 -0
- package/dist/utils/formatDate.d.ts.map +1 -0
- package/dist/utils/formatDate.js +325 -0
- package/dist/utils/formatDate.js.map +1 -0
- package/dist/utils/padLeft.d.ts +2 -0
- package/dist/utils/padLeft.d.ts.map +1 -0
- package/dist/utils/padLeft.js +7 -0
- package/dist/utils/padLeft.js.map +1 -0
- package/dist/utils/uniq.d.ts +2 -0
- package/dist/utils/uniq.d.ts.map +1 -0
- package/dist/utils/uniq.js +4 -0
- package/dist/utils/uniq.js.map +1 -0
- package/dist/utils/wrapError.d.ts +10 -0
- package/dist/utils/wrapError.d.ts.map +1 -0
- package/dist/utils/wrapError.js +9 -0
- package/dist/utils/wrapError.js.map +1 -0
- package/package.json +58 -0
- package/src/DivKit.tsx +542 -0
- package/src/actions/array.ts +170 -0
- package/src/actions/copyToClipboard.ts +82 -0
- package/src/actions/dict.ts +71 -0
- package/src/actions/index.ts +11 -0
- package/src/actions/updateStructure.ts +134 -0
- package/src/components/DivComponent.tsx +75 -0
- package/src/components/README.md +230 -0
- package/src/components/container/DivContainer.tsx +222 -0
- package/src/components/container/index.ts +2 -0
- package/src/components/image/DivImage.tsx +172 -0
- package/src/components/image/index.ts +2 -0
- package/src/components/index.ts +20 -0
- package/src/components/state/DivState.tsx +146 -0
- package/src/components/state/index.ts +2 -0
- package/src/components/text/DivText.tsx +186 -0
- package/src/components/text/index.ts +2 -0
- package/src/components/utilities/Outer.tsx +239 -0
- package/src/components/utilities/README.md +175 -0
- package/src/components/utilities/Unknown.tsx +60 -0
- package/src/components/utilities/index.ts +4 -0
- package/src/context/ActionContext.tsx +37 -0
- package/src/context/DivKitContext.tsx +54 -0
- package/src/context/EnabledContext.tsx +50 -0
- package/src/context/StateContext.tsx +75 -0
- package/src/context/index.ts +33 -0
- package/src/expressions/ast.d.ts +101 -0
- package/src/expressions/bigint.ts +38 -0
- package/src/expressions/const.ts +16 -0
- package/src/expressions/eval.ts +669 -0
- package/src/expressions/expressions.peggy +235 -0
- package/src/expressions/expressions.ts +2854 -0
- package/src/expressions/funcs/array.ts +412 -0
- package/src/expressions/funcs/colors.ts +100 -0
- package/src/expressions/funcs/customFuncs.ts +139 -0
- package/src/expressions/funcs/datetime.ts +232 -0
- package/src/expressions/funcs/dict.ts +207 -0
- package/src/expressions/funcs/funcs.ts +323 -0
- package/src/expressions/funcs/index.ts +23 -0
- package/src/expressions/funcs/interval.ts +76 -0
- package/src/expressions/funcs/math.ts +395 -0
- package/src/expressions/funcs/std.ts +392 -0
- package/src/expressions/funcs/stored.ts +62 -0
- package/src/expressions/funcs/strings.ts +200 -0
- package/src/expressions/funcs/trigonometry.ts +108 -0
- package/src/expressions/json.ts +367 -0
- package/src/expressions/parserCache.ts +32 -0
- package/src/expressions/simpleUnescapeString.ts +57 -0
- package/src/expressions/utils.ts +271 -0
- package/src/expressions/variable.ts +429 -0
- package/src/expressions/walk.ts +43 -0
- package/src/hooks/README.md +265 -0
- package/src/hooks/index.ts +28 -0
- package/src/hooks/useAction.ts +152 -0
- package/src/hooks/useDerivedFromVars.ts +187 -0
- package/src/hooks/useVariable.ts +157 -0
- package/src/index.ts +97 -0
- package/src/stores/createObservable.ts +64 -0
- package/src/types/alignment.d.ts +13 -0
- package/src/types/background.d.ts +71 -0
- package/src/types/base.d.ts +224 -0
- package/src/types/border.d.ts +46 -0
- package/src/types/componentContext.d.ts +98 -0
- package/src/types/container.d.ts +40 -0
- package/src/types/edgeInserts.d.ts +9 -0
- package/src/types/general.d.ts +3 -0
- package/src/types/image.d.ts +33 -0
- package/src/types/imageScale.d.ts +1 -0
- package/src/types/layoutParams.d.ts +27 -0
- package/src/types/sizes.d.ts +37 -0
- package/src/types/state.d.ts +19 -0
- package/src/types/text.d.ts +126 -0
- package/src/utils/applyTemplate.ts +145 -0
- package/src/utils/correctColor.ts +102 -0
- package/src/utils/escapeRegExp.ts +3 -0
- package/src/utils/formatDate.ts +385 -0
- package/src/utils/padLeft.ts +6 -0
- package/src/utils/uniq.ts +3 -0
- package/src/utils/wrapError.ts +21 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for reactive variable substitution in JSON props
|
|
3
|
+
* Replaces Svelte's $: reactive statements with React hooks
|
|
4
|
+
*
|
|
5
|
+
* Based on getDerivedFromVars pattern from Web Root.svelte
|
|
6
|
+
*/
|
|
7
|
+
import type { MaybeMissing } from '../expressions/json';
|
|
8
|
+
import type { Variable } from '../expressions/variable';
|
|
9
|
+
import type { VariablesMap } from '../expressions/eval';
|
|
10
|
+
import type { Store } from '../../typings/store';
|
|
11
|
+
import type { CustomFunctions } from '../expressions/funcs/customFuncs';
|
|
12
|
+
export interface UseDerivedFromVarsOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Variables map (from DivKitContext)
|
|
15
|
+
*/
|
|
16
|
+
variables: VariablesMap;
|
|
17
|
+
/**
|
|
18
|
+
* Additional variables (optional, for local context)
|
|
19
|
+
*/
|
|
20
|
+
additionalVars?: Map<string, Variable>;
|
|
21
|
+
/**
|
|
22
|
+
* Keep complex types (dict, array) as objects instead of stringifying
|
|
23
|
+
* Default: false
|
|
24
|
+
*/
|
|
25
|
+
keepComplex?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Maximum depth for expression processing
|
|
28
|
+
* Default: 10
|
|
29
|
+
*/
|
|
30
|
+
maxDepth?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Custom functions for expressions
|
|
33
|
+
*/
|
|
34
|
+
customFunctions?: CustomFunctions;
|
|
35
|
+
/**
|
|
36
|
+
* Store context (for advanced features)
|
|
37
|
+
*/
|
|
38
|
+
store?: Store;
|
|
39
|
+
/**
|
|
40
|
+
* Week start day (0 = Sunday, 1 = Monday)
|
|
41
|
+
* Default: 0
|
|
42
|
+
*/
|
|
43
|
+
weekStartDay?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Error logger
|
|
46
|
+
*/
|
|
47
|
+
logError?: (error: Error) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Hook that subscribes to variables used in JSON expressions and re-evaluates when they change
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* const text = useDerivedFromVars(
|
|
55
|
+
* json.text, // "Hello @{userName}"
|
|
56
|
+
* { variables }
|
|
57
|
+
* );
|
|
58
|
+
* // text = "Hello Alice"
|
|
59
|
+
* // When userName variable changes, text automatically updates
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function useDerivedFromVars<T>(jsonProp: T, options: UseDerivedFromVarsOptions): MaybeMissing<T>;
|
|
63
|
+
/**
|
|
64
|
+
* Simplified version that only takes variables map (most common use case)
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```tsx
|
|
68
|
+
* const text = useDerivedFromVarsSimple(json.text, variables);
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function useDerivedFromVarsSimple<T>(jsonProp: T, variables: VariablesMap): MaybeMissing<T>;
|
|
72
|
+
//# sourceMappingURL=useDerivedFromVars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDerivedFromVars.d.ts","sourceRoot":"","sources":["../../src/hooks/useDerivedFromVars.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,SAAS,EAAE,YAAY,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEvC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,yBAAyB,GACnC,YAAY,CAAC,CAAC,CAAC,CA8FjB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,YAAY,GACxB,YAAY,CAAC,CAAC,CAAC,CAEjB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for reactive variable substitution in JSON props
|
|
3
|
+
* Replaces Svelte's $: reactive statements with React hooks
|
|
4
|
+
*
|
|
5
|
+
* Based on getDerivedFromVars pattern from Web Root.svelte
|
|
6
|
+
*/
|
|
7
|
+
import { useEffect, useState, useMemo, useRef } from 'react';
|
|
8
|
+
import { prepareVars } from '../expressions/json';
|
|
9
|
+
/**
|
|
10
|
+
* Hook that subscribes to variables used in JSON expressions and re-evaluates when they change
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* const text = useDerivedFromVars(
|
|
15
|
+
* json.text, // "Hello @{userName}"
|
|
16
|
+
* { variables }
|
|
17
|
+
* );
|
|
18
|
+
* // text = "Hello Alice"
|
|
19
|
+
* // When userName variable changes, text automatically updates
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function useDerivedFromVars(jsonProp, options) {
|
|
23
|
+
const { variables, additionalVars, keepComplex = false, maxDepth = 10, customFunctions, store, weekStartDay = 0, logError = console.error } = options;
|
|
24
|
+
// Merge variables maps
|
|
25
|
+
const allVariables = useMemo(() => {
|
|
26
|
+
if (!additionalVars || additionalVars.size === 0) {
|
|
27
|
+
return variables;
|
|
28
|
+
}
|
|
29
|
+
const merged = new Map(variables);
|
|
30
|
+
additionalVars.forEach((value, key) => {
|
|
31
|
+
merged.set(key, value);
|
|
32
|
+
});
|
|
33
|
+
return merged;
|
|
34
|
+
}, [variables, additionalVars]);
|
|
35
|
+
// Prepare expressions once (parse and analyze JSON for @{} expressions)
|
|
36
|
+
const prepared = useMemo(() => {
|
|
37
|
+
return prepareVars(jsonProp, logError, store, weekStartDay, maxDepth);
|
|
38
|
+
}, [jsonProp, logError, store, weekStartDay, maxDepth]);
|
|
39
|
+
// Apply variables and get initial value
|
|
40
|
+
const getComputedValue = () => {
|
|
41
|
+
const { result, usedVars } = prepared.applyVars(allVariables, customFunctions, keepComplex);
|
|
42
|
+
return { result, usedVars };
|
|
43
|
+
};
|
|
44
|
+
// State for the computed value
|
|
45
|
+
const [value, setValue] = useState(() => getComputedValue().result);
|
|
46
|
+
// Track used variables for subscription
|
|
47
|
+
const usedVarsRef = useRef();
|
|
48
|
+
// Subscribe to used variables and update when they change
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
// If no expressions, no need to subscribe
|
|
51
|
+
if (!prepared.hasExpression) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Compute initial value and get used variables
|
|
55
|
+
const { result, usedVars } = getComputedValue();
|
|
56
|
+
setValue(result);
|
|
57
|
+
usedVarsRef.current = usedVars;
|
|
58
|
+
// Subscribe to all used variables
|
|
59
|
+
const unsubscribers = [];
|
|
60
|
+
if (usedVars) {
|
|
61
|
+
usedVars.forEach(variable => {
|
|
62
|
+
const unsubscribe = variable.subscribe(() => {
|
|
63
|
+
// Variable changed - recompute value
|
|
64
|
+
const { result: newResult, usedVars: newUsedVars } = getComputedValue();
|
|
65
|
+
setValue(newResult);
|
|
66
|
+
// If used variables changed, we need to re-subscribe
|
|
67
|
+
// This happens if expression result depends on conditional logic
|
|
68
|
+
if (newUsedVars && newUsedVars !== usedVarsRef.current) {
|
|
69
|
+
const hasChanged = newUsedVars.size !== usedVarsRef.current?.size ||
|
|
70
|
+
Array.from(newUsedVars).some(v => !usedVarsRef.current?.has(v));
|
|
71
|
+
if (hasChanged) {
|
|
72
|
+
// usedVars changed - trigger re-render to re-subscribe
|
|
73
|
+
usedVarsRef.current = newUsedVars;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
unsubscribers.push(unsubscribe);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return () => {
|
|
81
|
+
unsubscribers.forEach(unsub => unsub());
|
|
82
|
+
};
|
|
83
|
+
}, [prepared, allVariables, customFunctions, keepComplex]);
|
|
84
|
+
if (!prepared.hasExpression) {
|
|
85
|
+
return getComputedValue().result;
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Simplified version that only takes variables map (most common use case)
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```tsx
|
|
94
|
+
* const text = useDerivedFromVarsSimple(json.text, variables);
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export function useDerivedFromVarsSimple(jsonProp, variables) {
|
|
98
|
+
return useDerivedFromVars(jsonProp, { variables });
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=useDerivedFromVars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDerivedFromVars.js","sourceRoot":"","sources":["../../src/hooks/useDerivedFromVars.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoDlD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAC9B,QAAW,EACX,OAAkC;IAElC,MAAM,EACF,SAAS,EACT,cAAc,EACd,WAAW,GAAG,KAAK,EACnB,QAAQ,GAAG,EAAE,EACb,eAAe,EACf,KAAK,EACL,YAAY,GAAG,CAAC,EAChB,QAAQ,GAAG,OAAO,CAAC,KAAK,EAC3B,GAAG,OAAO,CAAC;IAEZ,uBAAuB;IACvB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAClC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAEhC,wEAAwE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,OAAO,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExD,wCAAwC;IACxC,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,SAAS,CAC3C,YAAY,EACZ,eAAe,EACf,WAAW,CACd,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;IAErF,wCAAwC;IACxC,MAAM,WAAW,GAAG,MAAM,EAAiB,CAAC;IAE5C,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE;QACX,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,+CAA+C;QAC/C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAChD,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QAE/B,kCAAkC;QAClC,MAAM,aAAa,GAAmB,EAAE,CAAC;QAEzC,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;oBACxC,qCAAqC;oBACrC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;oBACxE,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAEpB,qDAAqD;oBACrD,iEAAiE;oBACjE,IAAI,WAAW,IAAI,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;wBACrD,MAAM,UAAU,GACZ,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,IAAI;4BAC9C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEpE,IAAI,UAAU,EAAE,CAAC;4BACb,uDAAuD;4BACvD,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC;wBACtC,CAAC;oBACL,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,GAAG,EAAE;YACR,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC1B,OAAO,gBAAgB,EAAE,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACpC,QAAW,EACX,SAAuB;IAEvB,OAAO,kBAAkB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for subscribing to a specific DivKit variable
|
|
3
|
+
* Automatically updates component when variable value changes
|
|
4
|
+
*/
|
|
5
|
+
import type { Variable, VariableValue } from '../expressions/variable';
|
|
6
|
+
/**
|
|
7
|
+
* Subscribe to a variable by name and get its current value
|
|
8
|
+
*
|
|
9
|
+
* @param variableName Name of the variable to subscribe to
|
|
10
|
+
* @returns Current value of the variable, or undefined if not found
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* function MyComponent() {
|
|
15
|
+
* const userName = useVariable('userName');
|
|
16
|
+
* return <Text>Hello {userName}</Text>;
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function useVariable(variableName: string): VariableValue | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Subscribe to a Variable instance directly (for advanced use cases)
|
|
23
|
+
*
|
|
24
|
+
* @param variable Variable instance to subscribe to
|
|
25
|
+
* @returns Current value of the variable
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* function MyComponent({ variable }: { variable: Variable }) {
|
|
30
|
+
* const value = useVariableInstance(variable);
|
|
31
|
+
* return <Text>{String(value)}</Text>;
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function useVariableInstance<T extends VariableValue>(variable: Variable<T> | undefined): T | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Get variable setter function
|
|
38
|
+
* Returns a function that updates the variable value
|
|
39
|
+
*
|
|
40
|
+
* @param variableName Name of the variable
|
|
41
|
+
* @returns Setter function, or undefined if variable not found
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* function MyComponent() {
|
|
46
|
+
* const userName = useVariable('userName');
|
|
47
|
+
* const setUserName = useVariableSetter('userName');
|
|
48
|
+
*
|
|
49
|
+
* return (
|
|
50
|
+
* <View>
|
|
51
|
+
* <Text>Hello {userName}</Text>
|
|
52
|
+
* <Button
|
|
53
|
+
* title="Change name"
|
|
54
|
+
* onPress={() => setUserName?.('Bob')}
|
|
55
|
+
* />
|
|
56
|
+
* </View>
|
|
57
|
+
* );
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function useVariableSetter(variableName: string): ((value: VariableValue) => void) | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Combined hook that returns both value and setter
|
|
64
|
+
*
|
|
65
|
+
* @param variableName Name of the variable
|
|
66
|
+
* @returns Tuple of [value, setter]
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* function MyComponent() {
|
|
71
|
+
* const [userName, setUserName] = useVariableState('userName');
|
|
72
|
+
*
|
|
73
|
+
* return (
|
|
74
|
+
* <View>
|
|
75
|
+
* <Text>Hello {userName}</Text>
|
|
76
|
+
* <Button
|
|
77
|
+
* title="Change name"
|
|
78
|
+
* onPress={() => setUserName('Bob')}
|
|
79
|
+
* />
|
|
80
|
+
* </View>
|
|
81
|
+
* );
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function useVariableState(variableName: string): [VariableValue | undefined, (value: VariableValue) => void];
|
|
86
|
+
//# sourceMappingURL=useVariable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVariable.d.ts","sourceRoot":"","sources":["../../src/hooks/useVariable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGvE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAuB3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,aAAa,EACvD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,GAClC,CAAC,GAAG,SAAS,CAoBf;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,MAAM,GACrB,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAO9C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC5B,YAAY,EAAE,MAAM,GACrB,CAAC,aAAa,GAAG,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,CAS7D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook for subscribing to a specific DivKit variable
|
|
3
|
+
* Automatically updates component when variable value changes
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
import { useDivKitContext } from '../context/DivKitContext';
|
|
7
|
+
/**
|
|
8
|
+
* Subscribe to a variable by name and get its current value
|
|
9
|
+
*
|
|
10
|
+
* @param variableName Name of the variable to subscribe to
|
|
11
|
+
* @returns Current value of the variable, or undefined if not found
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* function MyComponent() {
|
|
16
|
+
* const userName = useVariable('userName');
|
|
17
|
+
* return <Text>Hello {userName}</Text>;
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function useVariable(variableName) {
|
|
22
|
+
const { getVariable } = useDivKitContext();
|
|
23
|
+
const variable = getVariable(variableName);
|
|
24
|
+
const [value, setValue] = useState(() => variable ? variable.getValue() : undefined);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!variable) {
|
|
27
|
+
setValue(undefined);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// Subscribe to variable changes
|
|
31
|
+
const unsubscribe = variable.subscribe((newValue) => {
|
|
32
|
+
setValue(newValue);
|
|
33
|
+
});
|
|
34
|
+
return unsubscribe;
|
|
35
|
+
}, [variable]);
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Subscribe to a Variable instance directly (for advanced use cases)
|
|
40
|
+
*
|
|
41
|
+
* @param variable Variable instance to subscribe to
|
|
42
|
+
* @returns Current value of the variable
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* function MyComponent({ variable }: { variable: Variable }) {
|
|
47
|
+
* const value = useVariableInstance(variable);
|
|
48
|
+
* return <Text>{String(value)}</Text>;
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function useVariableInstance(variable) {
|
|
53
|
+
const [value, setValue] = useState(() => variable ? variable.getValue() : undefined);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (!variable) {
|
|
56
|
+
setValue(undefined);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Subscribe to variable changes
|
|
60
|
+
const unsubscribe = variable.subscribe((newValue) => {
|
|
61
|
+
setValue(newValue);
|
|
62
|
+
});
|
|
63
|
+
return unsubscribe;
|
|
64
|
+
}, [variable]);
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get variable setter function
|
|
69
|
+
* Returns a function that updates the variable value
|
|
70
|
+
*
|
|
71
|
+
* @param variableName Name of the variable
|
|
72
|
+
* @returns Setter function, or undefined if variable not found
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* function MyComponent() {
|
|
77
|
+
* const userName = useVariable('userName');
|
|
78
|
+
* const setUserName = useVariableSetter('userName');
|
|
79
|
+
*
|
|
80
|
+
* return (
|
|
81
|
+
* <View>
|
|
82
|
+
* <Text>Hello {userName}</Text>
|
|
83
|
+
* <Button
|
|
84
|
+
* title="Change name"
|
|
85
|
+
* onPress={() => setUserName?.('Bob')}
|
|
86
|
+
* />
|
|
87
|
+
* </View>
|
|
88
|
+
* );
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function useVariableSetter(variableName) {
|
|
93
|
+
const { setVariable } = useDivKitContext();
|
|
94
|
+
// Return stable function reference
|
|
95
|
+
return (value) => {
|
|
96
|
+
setVariable(variableName, value);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Combined hook that returns both value and setter
|
|
101
|
+
*
|
|
102
|
+
* @param variableName Name of the variable
|
|
103
|
+
* @returns Tuple of [value, setter]
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```tsx
|
|
107
|
+
* function MyComponent() {
|
|
108
|
+
* const [userName, setUserName] = useVariableState('userName');
|
|
109
|
+
*
|
|
110
|
+
* return (
|
|
111
|
+
* <View>
|
|
112
|
+
* <Text>Hello {userName}</Text>
|
|
113
|
+
* <Button
|
|
114
|
+
* title="Change name"
|
|
115
|
+
* onPress={() => setUserName('Bob')}
|
|
116
|
+
* />
|
|
117
|
+
* </View>
|
|
118
|
+
* );
|
|
119
|
+
* }
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export function useVariableState(variableName) {
|
|
123
|
+
const value = useVariable(variableName);
|
|
124
|
+
const { setVariable } = useDivKitContext();
|
|
125
|
+
const setter = (newValue) => {
|
|
126
|
+
setVariable(variableName, newValue);
|
|
127
|
+
};
|
|
128
|
+
return [value, setter];
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=useVariable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVariable.js","sourceRoot":"","sources":["../../src/hooks/useVariable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,YAAoB;IAC5C,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA4B,GAAG,EAAE,CAC/D,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7C,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QAED,gCAAgC;QAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACvB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAC/B,QAAiC;IAEjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,GAAG,EAAE,CACnD,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7C,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QAED,gCAAgC;QAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACvB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,iBAAiB,CAC7B,YAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE3C,mCAAmC;IACnC,OAAO,CAAC,KAAoB,EAAE,EAAE;QAC5B,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAC5B,YAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE3C,MAAM,MAAM,GAAG,CAAC,QAAuB,EAAE,EAAE;QACvC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* react-native-divkit
|
|
3
|
+
*
|
|
4
|
+
* React Native implementation of DivKit
|
|
5
|
+
* Based on Web (TypeScript + Svelte) implementation
|
|
6
|
+
*
|
|
7
|
+
* MVP Scope:
|
|
8
|
+
* - 4 basic components: Text, Container, Image, State
|
|
9
|
+
* - Expression engine with variable system
|
|
10
|
+
* - Action execution
|
|
11
|
+
* - Template resolution
|
|
12
|
+
*
|
|
13
|
+
* @see https://github.com/divkit/divkit
|
|
14
|
+
*/
|
|
15
|
+
export { DivKit } from './DivKit';
|
|
16
|
+
export type { DivKitProps, StatCallback, CustomActionCallback, ErrorCallback } from './DivKit';
|
|
17
|
+
export type { Action, DivJson, DivBase, DivVariable, Direction, TemplateContext, BooleanInt } from '../typings/common';
|
|
18
|
+
export type { DivBaseData } from './types/base';
|
|
19
|
+
export type { ComponentContext } from './types/componentContext';
|
|
20
|
+
export { createVariable, Variable, StringVariable, IntegerVariable, NumberVariable, BooleanVariable, ColorVariable, UrlVariable, DictVariable, ArrayVariable } from './expressions/variable';
|
|
21
|
+
export type { VariableType, VariableValue } from './expressions/variable';
|
|
22
|
+
export { useDivKitContext, DivKitContext } from './context/DivKitContext';
|
|
23
|
+
export type { DivKitContextValue } from './context/DivKitContext';
|
|
24
|
+
export { useDerivedFromVars, useDerivedFromVarsSimple } from './hooks/useDerivedFromVars';
|
|
25
|
+
export { useVariable, useVariableInstance, useVariableSetter, useVariableState } from './hooks/useVariable';
|
|
26
|
+
export { useAction, useActions, useActionHandler, useHasActions } from './hooks/useAction';
|
|
27
|
+
export { wrapError } from './utils/wrapError';
|
|
28
|
+
export type { WrappedError } from './utils/wrapError';
|
|
29
|
+
export { correctColor } from './utils/correctColor';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EACR,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,aAAa,EAChB,MAAM,UAAU,CAAC;AAGlB,YAAY,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACb,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACR,WAAW,EACd,MAAM,cAAc,CAAC;AAEtB,YAAY,EACR,gBAAgB,EACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACH,cAAc,EACd,QAAQ,EACR,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACR,YAAY,EACZ,aAAa,EAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACH,gBAAgB,EAChB,aAAa,EAChB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACR,kBAAkB,EACrB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACH,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* react-native-divkit
|
|
3
|
+
*
|
|
4
|
+
* React Native implementation of DivKit
|
|
5
|
+
* Based on Web (TypeScript + Svelte) implementation
|
|
6
|
+
*
|
|
7
|
+
* MVP Scope:
|
|
8
|
+
* - 4 basic components: Text, Container, Image, State
|
|
9
|
+
* - Expression engine with variable system
|
|
10
|
+
* - Action execution
|
|
11
|
+
* - Template resolution
|
|
12
|
+
*
|
|
13
|
+
* @see https://github.com/divkit/divkit
|
|
14
|
+
*/
|
|
15
|
+
// Main component
|
|
16
|
+
export { DivKit } from './DivKit';
|
|
17
|
+
// Variables
|
|
18
|
+
export { createVariable, Variable, StringVariable, IntegerVariable, NumberVariable, BooleanVariable, ColorVariable, UrlVariable, DictVariable, ArrayVariable } from './expressions/variable';
|
|
19
|
+
// Context hooks (for advanced usage)
|
|
20
|
+
export { useDivKitContext, DivKitContext } from './context/DivKitContext';
|
|
21
|
+
// Hooks (for custom components)
|
|
22
|
+
export { useDerivedFromVars, useDerivedFromVarsSimple } from './hooks/useDerivedFromVars';
|
|
23
|
+
export { useVariable, useVariableInstance, useVariableSetter, useVariableState } from './hooks/useVariable';
|
|
24
|
+
export { useAction, useActions, useActionHandler, useHasActions } from './hooks/useAction';
|
|
25
|
+
// Utils (for advanced usage)
|
|
26
|
+
export { wrapError } from './utils/wrapError';
|
|
27
|
+
export { correctColor } from './utils/correctColor';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iBAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA2BlC,YAAY;AACZ,OAAO,EACH,cAAc,EACd,QAAQ,EACR,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,wBAAwB,CAAC;AAOhC,qCAAqC;AACrC,OAAO,EACH,gBAAgB,EAChB,aAAa,EAChB,MAAM,yBAAyB,CAAC;AAMjC,gCAAgC;AAChC,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACH,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAE3B,6BAA6B;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observable implementation to replace Svelte stores for React Native
|
|
3
|
+
* Provides subscribe/set pattern compatible with Svelte store interface
|
|
4
|
+
*/
|
|
5
|
+
export type Subscriber<T> = (value: T) => void;
|
|
6
|
+
export type Unsubscriber = () => void;
|
|
7
|
+
export declare class Observable<T> {
|
|
8
|
+
private value;
|
|
9
|
+
private subscribers;
|
|
10
|
+
constructor(initialValue: T);
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to value changes
|
|
13
|
+
* @param callback Function called immediately with current value and on each change
|
|
14
|
+
* @returns Unsubscribe function
|
|
15
|
+
*/
|
|
16
|
+
subscribe(callback: Subscriber<T>): Unsubscriber;
|
|
17
|
+
/**
|
|
18
|
+
* Update the value and notify all subscribers
|
|
19
|
+
* @param newValue New value to set
|
|
20
|
+
*/
|
|
21
|
+
set(newValue: T): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get current value without subscribing
|
|
24
|
+
* @returns Current value
|
|
25
|
+
*/
|
|
26
|
+
get(): T;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a writable observable (compatible with Svelte's writable store)
|
|
30
|
+
* @param initialValue Initial value
|
|
31
|
+
* @returns Observable instance
|
|
32
|
+
*/
|
|
33
|
+
export declare function writable<T>(initialValue: T): Observable<T>;
|
|
34
|
+
/**
|
|
35
|
+
* TypeScript type compatibility with Svelte stores
|
|
36
|
+
*/
|
|
37
|
+
export type Writable<T> = Observable<T>;
|
|
38
|
+
//# sourceMappingURL=createObservable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createObservable.d.ts","sourceRoot":"","sources":["../../src/stores/createObservable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC;AAEtC,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,WAAW,CAA4B;gBAEnC,YAAY,EAAE,CAAC;IAI3B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY;IAUhD;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI;IAOtB;;;OAGG;IACH,GAAG,IAAI,CAAC;CAGT;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAE1D;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observable implementation to replace Svelte stores for React Native
|
|
3
|
+
* Provides subscribe/set pattern compatible with Svelte store interface
|
|
4
|
+
*/
|
|
5
|
+
export class Observable {
|
|
6
|
+
constructor(initialValue) {
|
|
7
|
+
this.subscribers = new Set();
|
|
8
|
+
this.value = initialValue;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Subscribe to value changes
|
|
12
|
+
* @param callback Function called immediately with current value and on each change
|
|
13
|
+
* @returns Unsubscribe function
|
|
14
|
+
*/
|
|
15
|
+
subscribe(callback) {
|
|
16
|
+
this.subscribers.add(callback);
|
|
17
|
+
// Immediately call with current value (Svelte store behavior)
|
|
18
|
+
callback(this.value);
|
|
19
|
+
return () => {
|
|
20
|
+
this.subscribers.delete(callback);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update the value and notify all subscribers
|
|
25
|
+
* @param newValue New value to set
|
|
26
|
+
*/
|
|
27
|
+
set(newValue) {
|
|
28
|
+
if (this.value !== newValue) {
|
|
29
|
+
this.value = newValue;
|
|
30
|
+
this.subscribers.forEach(cb => cb(newValue));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get current value without subscribing
|
|
35
|
+
* @returns Current value
|
|
36
|
+
*/
|
|
37
|
+
get() {
|
|
38
|
+
return this.value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a writable observable (compatible with Svelte's writable store)
|
|
43
|
+
* @param initialValue Initial value
|
|
44
|
+
* @returns Observable instance
|
|
45
|
+
*/
|
|
46
|
+
export function writable(initialValue) {
|
|
47
|
+
return new Observable(initialValue);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=createObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createObservable.js","sourceRoot":"","sources":["../../src/stores/createObservable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,OAAO,UAAU;IAIrB,YAAY,YAAe;QAFnB,gBAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;QAG7C,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAuB;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,8DAA8D;QAC9D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,QAAW;QACb,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,GAAG;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAI,YAAe;IACzC,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WrappedError } from "./wrapError";
|
|
2
|
+
import type { DivBase, TemplateContext } from "../../typings/common";
|
|
3
|
+
export declare function applyTemplate<T extends DivBase>(json: T, templateContext: TemplateContext, templates: Record<string, unknown>, _logError: (error: WrappedError) => void): {
|
|
4
|
+
json: T;
|
|
5
|
+
templateContext: TemplateContext;
|
|
6
|
+
};
|
|
7
|
+
export declare function applyTemplatesRecursively(json: any, templates: Record<string, unknown>, logError: (error: WrappedError) => void): any;
|
|
8
|
+
//# sourceMappingURL=applyTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyTemplate.d.ts","sourceRoot":"","sources":["../../src/utils/applyTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGrE,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAC7C,IAAI,EAAE,CAAC,EACP,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACvC;IACD,IAAI,EAAE,CAAC,CAAC;IACR,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAuFF,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACtC,GAAG,CAyCL"}
|