@dloizides/ui-motion 1.1.0 → 1.2.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.
@@ -0,0 +1,142 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var reactNative = require('react-native');
5
+ var hairline = require('@lucasmarkes/hairline');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ // src/hairline/components/HairlineFigure.web.tsx
9
+
10
+ // src/hairline/constants.ts
11
+ var HAIRLINE_TEST_ID = "motion-hairline-figure";
12
+ var HAIRLINE_ASPECT_RATIO = 5 / 4;
13
+ var DEFAULT_HAIRLINE_INTENSITY = 0.5;
14
+
15
+ // src/hairline/HairlineFigureName.ts
16
+ var HairlineFigureName = /* @__PURE__ */ ((HairlineFigureName2) => {
17
+ HairlineFigureName2["Basket"] = "basket";
18
+ HairlineFigureName2["Branches"] = "branches";
19
+ HairlineFigureName2["Cabinet"] = "cabinet";
20
+ HairlineFigureName2["Dish"] = "dish";
21
+ HairlineFigureName2["Drawer"] = "drawer";
22
+ HairlineFigureName2["Elevator"] = "elevator";
23
+ HairlineFigureName2["Exploded"] = "exploded";
24
+ HairlineFigureName2["Keyboard"] = "keyboard";
25
+ HairlineFigureName2["Laptop"] = "laptop";
26
+ HairlineFigureName2["Lockers"] = "lockers";
27
+ HairlineFigureName2["Loupe"] = "loupe";
28
+ HairlineFigureName2["Padlock"] = "padlock";
29
+ HairlineFigureName2["Patch"] = "patch";
30
+ HairlineFigureName2["Phone"] = "phone";
31
+ HairlineFigureName2["Phosphor"] = "phosphor";
32
+ HairlineFigureName2["Plot"] = "plot";
33
+ HairlineFigureName2["Plug"] = "plug";
34
+ HairlineFigureName2["Query"] = "query";
35
+ HairlineFigureName2["Rail"] = "rail";
36
+ HairlineFigureName2["Riffle"] = "riffle";
37
+ HairlineFigureName2["Router"] = "router";
38
+ HairlineFigureName2["Sieve"] = "sieve";
39
+ HairlineFigureName2["Slow"] = "slow";
40
+ HairlineFigureName2["Terminal"] = "terminal";
41
+ HairlineFigureName2["Terrain"] = "terrain";
42
+ HairlineFigureName2["Turntable"] = "turntable";
43
+ HairlineFigureName2["Vault"] = "vault";
44
+ return HairlineFigureName2;
45
+ })(HairlineFigureName || {});
46
+
47
+ // src/hairline/data/figureRegistry.ts
48
+ var FIGURE_REGISTRY = {
49
+ ["basket" /* Basket */]: hairline.basket,
50
+ ["branches" /* Branches */]: hairline.branches,
51
+ ["cabinet" /* Cabinet */]: hairline.cabinet,
52
+ ["dish" /* Dish */]: hairline.dish,
53
+ ["drawer" /* Drawer */]: hairline.drawer,
54
+ ["elevator" /* Elevator */]: hairline.elevator,
55
+ ["exploded" /* Exploded */]: hairline.exploded,
56
+ ["keyboard" /* Keyboard */]: hairline.keyboard,
57
+ ["laptop" /* Laptop */]: hairline.laptop,
58
+ ["lockers" /* Lockers */]: hairline.lockers,
59
+ ["loupe" /* Loupe */]: hairline.loupe,
60
+ ["padlock" /* Padlock */]: hairline.padlock,
61
+ ["patch" /* Patch */]: hairline.patch,
62
+ ["phone" /* Phone */]: hairline.phone,
63
+ ["phosphor" /* Phosphor */]: hairline.phosphor,
64
+ ["plot" /* Plot */]: hairline.plot,
65
+ ["plug" /* Plug */]: hairline.plug,
66
+ ["query" /* Query */]: hairline.query,
67
+ ["rail" /* Rail */]: hairline.rail,
68
+ ["riffle" /* Riffle */]: hairline.riffle,
69
+ ["router" /* Router */]: hairline.router,
70
+ ["sieve" /* Sieve */]: hairline.sieve,
71
+ ["slow" /* Slow */]: hairline.slow,
72
+ ["terminal" /* Terminal */]: hairline.terminal,
73
+ ["terrain" /* Terrain */]: hairline.terrain,
74
+ ["turntable" /* Turntable */]: hairline.turntable,
75
+ ["vault" /* Vault */]: hairline.vault
76
+ };
77
+
78
+ // src/hairline/HairlineVarName.ts
79
+ var HairlineVarName = /* @__PURE__ */ ((HairlineVarName2) => {
80
+ HairlineVarName2["Plate"] = "--hairline-plate";
81
+ HairlineVarName2["Hi"] = "--hairline-hi";
82
+ HairlineVarName2["Edge"] = "--hairline-edge";
83
+ HairlineVarName2["Mid"] = "--hairline-mid";
84
+ HairlineVarName2["Lo"] = "--hairline-lo";
85
+ return HairlineVarName2;
86
+ })(HairlineVarName || {});
87
+
88
+ // src/hairline/utils/hairlineVars.ts
89
+ var hairlineVars = (colors) => ({
90
+ ["--hairline-plate" /* Plate */]: colors.background,
91
+ ["--hairline-hi" /* Hi */]: colors.text,
92
+ ["--hairline-edge" /* Edge */]: colors.textSecondary,
93
+ ["--hairline-mid" /* Mid */]: colors.textTertiary !== void 0 ? colors.textTertiary : colors.border,
94
+ ["--hairline-lo" /* Lo */]: colors.divider
95
+ });
96
+ var styles = reactNative.StyleSheet.create({
97
+ host: { width: "100%", aspectRatio: HAIRLINE_ASPECT_RATIO }
98
+ });
99
+ var toElement = (view) => view;
100
+ var HairlineFigure = ({
101
+ figure,
102
+ colors,
103
+ intensity = DEFAULT_HAIRLINE_INTENSITY,
104
+ label,
105
+ testID = HAIRLINE_TEST_ID
106
+ }) => {
107
+ const hostRef = react.useRef(null);
108
+ const figureRef = react.useRef(null);
109
+ const optionsRef = react.useRef({ intensity, label });
110
+ optionsRef.current = { intensity, label };
111
+ react.useEffect(() => {
112
+ const el = toElement(hostRef.current);
113
+ if (el === null) return void 0;
114
+ const vars = Object.entries(hairlineVars(colors));
115
+ vars.forEach(([name, value]) => el.style.setProperty(name, value));
116
+ return () => vars.forEach(([name]) => el.style.removeProperty(name));
117
+ }, [colors]);
118
+ react.useEffect(() => {
119
+ const el = toElement(hostRef.current);
120
+ if (el === null) return void 0;
121
+ const mounted = FIGURE_REGISTRY[figure](el, optionsRef.current);
122
+ figureRef.current = mounted;
123
+ return () => {
124
+ mounted.destroy();
125
+ figureRef.current = null;
126
+ };
127
+ }, [figure]);
128
+ react.useEffect(() => {
129
+ figureRef.current?.update({ intensity, label });
130
+ }, [intensity, label]);
131
+ return /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { ref: hostRef, style: styles.host, testID });
132
+ };
133
+
134
+ exports.DEFAULT_HAIRLINE_INTENSITY = DEFAULT_HAIRLINE_INTENSITY;
135
+ exports.HAIRLINE_ASPECT_RATIO = HAIRLINE_ASPECT_RATIO;
136
+ exports.HAIRLINE_TEST_ID = HAIRLINE_TEST_ID;
137
+ exports.HairlineFigure = HairlineFigure;
138
+ exports.HairlineFigureName = HairlineFigureName;
139
+ exports.HairlineVarName = HairlineVarName;
140
+ exports.hairlineVars = hairlineVars;
141
+ //# sourceMappingURL=web.js.map
142
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hairline/constants.ts","../../src/hairline/HairlineFigureName.ts","../../src/hairline/data/figureRegistry.ts","../../src/hairline/HairlineVarName.ts","../../src/hairline/utils/hairlineVars.ts","../../src/hairline/components/HairlineFigure.web.tsx"],"names":["HairlineFigureName","basket","branches","cabinet","dish","drawer","elevator","exploded","keyboard","laptop","lockers","loupe","padlock","patch","phone","phosphor","plot","plug","query","rail","riffle","router","sieve","slow","terminal","terrain","turntable","vault","HairlineVarName","StyleSheet","useRef","useEffect","View"],"mappings":"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","file":"web.js","sourcesContent":["export const HAIRLINE_TEST_ID = 'motion-hairline-figure';\nexport const HAIRLINE_ASPECT_RATIO = 5 / 4;\nexport const DEFAULT_HAIRLINE_INTENSITY = 0.5;\nexport const HAIRLINE_HANDLE_GLOBAL = '__dloizidesHairline';\n","export const enum HairlineFigureName {\n Basket = 'basket',\n Branches = 'branches',\n Cabinet = 'cabinet',\n Dish = 'dish',\n Drawer = 'drawer',\n Elevator = 'elevator',\n Exploded = 'exploded',\n Keyboard = 'keyboard',\n Laptop = 'laptop',\n Lockers = 'lockers',\n Loupe = 'loupe',\n Padlock = 'padlock',\n Patch = 'patch',\n Phone = 'phone',\n Phosphor = 'phosphor',\n Plot = 'plot',\n Plug = 'plug',\n Query = 'query',\n Rail = 'rail',\n Riffle = 'riffle',\n Router = 'router',\n Sieve = 'sieve',\n Slow = 'slow',\n Terminal = 'terminal',\n Terrain = 'terrain',\n Turntable = 'turntable',\n Vault = 'vault',\n}\n","import {\n basket, branches, cabinet, dish, drawer, elevator, exploded, keyboard, laptop,\n lockers, loupe, padlock, patch, phone, phosphor, plot, plug, query, rail,\n riffle, router, sieve, slow, terminal, terrain, turntable, vault,\n type Figure, type HairlineOptions,\n} from '@lucasmarkes/hairline';\n\nimport { HairlineFigureName } from '../HairlineFigureName';\n\nexport type MountFigure = (el: HTMLElement, options?: HairlineOptions) => Figure;\n\nexport const FIGURE_REGISTRY: Record<HairlineFigureName, MountFigure> = {\n [HairlineFigureName.Basket]: basket,\n [HairlineFigureName.Branches]: branches,\n [HairlineFigureName.Cabinet]: cabinet,\n [HairlineFigureName.Dish]: dish,\n [HairlineFigureName.Drawer]: drawer,\n [HairlineFigureName.Elevator]: elevator,\n [HairlineFigureName.Exploded]: exploded,\n [HairlineFigureName.Keyboard]: keyboard,\n [HairlineFigureName.Laptop]: laptop,\n [HairlineFigureName.Lockers]: lockers,\n [HairlineFigureName.Loupe]: loupe,\n [HairlineFigureName.Padlock]: padlock,\n [HairlineFigureName.Patch]: patch,\n [HairlineFigureName.Phone]: phone,\n [HairlineFigureName.Phosphor]: phosphor,\n [HairlineFigureName.Plot]: plot,\n [HairlineFigureName.Plug]: plug,\n [HairlineFigureName.Query]: query,\n [HairlineFigureName.Rail]: rail,\n [HairlineFigureName.Riffle]: riffle,\n [HairlineFigureName.Router]: router,\n [HairlineFigureName.Sieve]: sieve,\n [HairlineFigureName.Slow]: slow,\n [HairlineFigureName.Terminal]: terminal,\n [HairlineFigureName.Terrain]: terrain,\n [HairlineFigureName.Turntable]: turntable,\n [HairlineFigureName.Vault]: vault,\n};\n","export const enum HairlineVarName {\n Plate = '--hairline-plate',\n Hi = '--hairline-hi',\n Edge = '--hairline-edge',\n Mid = '--hairline-mid',\n Lo = '--hairline-lo',\n}\n","import type { ModeColors } from '@dloizides/design-tokens';\n\nimport { HairlineVarName } from '../HairlineVarName';\nimport type { HairlineVars } from '../types';\n\n/** Maps one theme mode's colour tokens onto the hairline palette vars (stroke width stays upstream). */\nexport const hairlineVars = (colors: ModeColors): HairlineVars => ({\n [HairlineVarName.Plate]: colors.background,\n [HairlineVarName.Hi]: colors.text,\n [HairlineVarName.Edge]: colors.textSecondary,\n [HairlineVarName.Mid]: colors.textTertiary !== undefined ? colors.textTertiary : colors.border,\n [HairlineVarName.Lo]: colors.divider,\n});\n","import React, { useEffect, useRef } from 'react';\n\nimport { StyleSheet, View } from 'react-native';\n\nimport type { Figure } from '@lucasmarkes/hairline';\n\nimport { DEFAULT_HAIRLINE_INTENSITY, HAIRLINE_ASPECT_RATIO, HAIRLINE_TEST_ID } from '../constants';\nimport { FIGURE_REGISTRY } from '../data/figureRegistry';\nimport type { HairlineFigureProps } from '../types';\nimport { hairlineVars } from '../utils/hairlineVars';\n\nconst styles = StyleSheet.create({\n host: { width: '100%', aspectRatio: HAIRLINE_ASPECT_RATIO },\n});\n\nconst toElement = (view: View | null): HTMLElement | null => view as unknown as HTMLElement | null;\n\n/** Mounts a hairline figure on the host View's DOM node (RN-web); destroyed on unmount. */\nexport const HairlineFigure = ({\n figure,\n colors,\n intensity = DEFAULT_HAIRLINE_INTENSITY,\n label,\n testID = HAIRLINE_TEST_ID,\n}: HairlineFigureProps): React.ReactElement => {\n const hostRef = useRef<View>(null);\n const figureRef = useRef<Figure | null>(null);\n const optionsRef = useRef({ intensity, label });\n optionsRef.current = { intensity, label };\n\n useEffect(() => {\n const el = toElement(hostRef.current);\n if (el === null) return undefined;\n const vars = Object.entries(hairlineVars(colors));\n vars.forEach(([name, value]) => el.style.setProperty(name, value));\n return () => vars.forEach(([name]) => el.style.removeProperty(name));\n }, [colors]);\n\n useEffect(() => {\n const el = toElement(hostRef.current);\n if (el === null) return undefined;\n const mounted = FIGURE_REGISTRY[figure](el, optionsRef.current);\n figureRef.current = mounted;\n return () => {\n mounted.destroy();\n figureRef.current = null;\n };\n }, [figure]);\n\n useEffect(() => {\n figureRef.current?.update({ intensity, label });\n }, [intensity, label]);\n\n return <View ref={hostRef} style={styles.host} testID={testID} />;\n};\n"]}
@@ -0,0 +1,134 @@
1
+ import { useRef, useEffect } from 'react';
2
+ import { StyleSheet, View } from 'react-native';
3
+ import { vault, turntable, terrain, terminal, slow, sieve, router, riffle, rail, query, plug, plot, phosphor, phone, patch, padlock, loupe, lockers, laptop, keyboard, exploded, elevator, drawer, dish, cabinet, branches, basket } from '@lucasmarkes/hairline';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ // src/hairline/components/HairlineFigure.web.tsx
7
+
8
+ // src/hairline/constants.ts
9
+ var HAIRLINE_TEST_ID = "motion-hairline-figure";
10
+ var HAIRLINE_ASPECT_RATIO = 5 / 4;
11
+ var DEFAULT_HAIRLINE_INTENSITY = 0.5;
12
+
13
+ // src/hairline/HairlineFigureName.ts
14
+ var HairlineFigureName = /* @__PURE__ */ ((HairlineFigureName2) => {
15
+ HairlineFigureName2["Basket"] = "basket";
16
+ HairlineFigureName2["Branches"] = "branches";
17
+ HairlineFigureName2["Cabinet"] = "cabinet";
18
+ HairlineFigureName2["Dish"] = "dish";
19
+ HairlineFigureName2["Drawer"] = "drawer";
20
+ HairlineFigureName2["Elevator"] = "elevator";
21
+ HairlineFigureName2["Exploded"] = "exploded";
22
+ HairlineFigureName2["Keyboard"] = "keyboard";
23
+ HairlineFigureName2["Laptop"] = "laptop";
24
+ HairlineFigureName2["Lockers"] = "lockers";
25
+ HairlineFigureName2["Loupe"] = "loupe";
26
+ HairlineFigureName2["Padlock"] = "padlock";
27
+ HairlineFigureName2["Patch"] = "patch";
28
+ HairlineFigureName2["Phone"] = "phone";
29
+ HairlineFigureName2["Phosphor"] = "phosphor";
30
+ HairlineFigureName2["Plot"] = "plot";
31
+ HairlineFigureName2["Plug"] = "plug";
32
+ HairlineFigureName2["Query"] = "query";
33
+ HairlineFigureName2["Rail"] = "rail";
34
+ HairlineFigureName2["Riffle"] = "riffle";
35
+ HairlineFigureName2["Router"] = "router";
36
+ HairlineFigureName2["Sieve"] = "sieve";
37
+ HairlineFigureName2["Slow"] = "slow";
38
+ HairlineFigureName2["Terminal"] = "terminal";
39
+ HairlineFigureName2["Terrain"] = "terrain";
40
+ HairlineFigureName2["Turntable"] = "turntable";
41
+ HairlineFigureName2["Vault"] = "vault";
42
+ return HairlineFigureName2;
43
+ })(HairlineFigureName || {});
44
+
45
+ // src/hairline/data/figureRegistry.ts
46
+ var FIGURE_REGISTRY = {
47
+ ["basket" /* Basket */]: basket,
48
+ ["branches" /* Branches */]: branches,
49
+ ["cabinet" /* Cabinet */]: cabinet,
50
+ ["dish" /* Dish */]: dish,
51
+ ["drawer" /* Drawer */]: drawer,
52
+ ["elevator" /* Elevator */]: elevator,
53
+ ["exploded" /* Exploded */]: exploded,
54
+ ["keyboard" /* Keyboard */]: keyboard,
55
+ ["laptop" /* Laptop */]: laptop,
56
+ ["lockers" /* Lockers */]: lockers,
57
+ ["loupe" /* Loupe */]: loupe,
58
+ ["padlock" /* Padlock */]: padlock,
59
+ ["patch" /* Patch */]: patch,
60
+ ["phone" /* Phone */]: phone,
61
+ ["phosphor" /* Phosphor */]: phosphor,
62
+ ["plot" /* Plot */]: plot,
63
+ ["plug" /* Plug */]: plug,
64
+ ["query" /* Query */]: query,
65
+ ["rail" /* Rail */]: rail,
66
+ ["riffle" /* Riffle */]: riffle,
67
+ ["router" /* Router */]: router,
68
+ ["sieve" /* Sieve */]: sieve,
69
+ ["slow" /* Slow */]: slow,
70
+ ["terminal" /* Terminal */]: terminal,
71
+ ["terrain" /* Terrain */]: terrain,
72
+ ["turntable" /* Turntable */]: turntable,
73
+ ["vault" /* Vault */]: vault
74
+ };
75
+
76
+ // src/hairline/HairlineVarName.ts
77
+ var HairlineVarName = /* @__PURE__ */ ((HairlineVarName2) => {
78
+ HairlineVarName2["Plate"] = "--hairline-plate";
79
+ HairlineVarName2["Hi"] = "--hairline-hi";
80
+ HairlineVarName2["Edge"] = "--hairline-edge";
81
+ HairlineVarName2["Mid"] = "--hairline-mid";
82
+ HairlineVarName2["Lo"] = "--hairline-lo";
83
+ return HairlineVarName2;
84
+ })(HairlineVarName || {});
85
+
86
+ // src/hairline/utils/hairlineVars.ts
87
+ var hairlineVars = (colors) => ({
88
+ ["--hairline-plate" /* Plate */]: colors.background,
89
+ ["--hairline-hi" /* Hi */]: colors.text,
90
+ ["--hairline-edge" /* Edge */]: colors.textSecondary,
91
+ ["--hairline-mid" /* Mid */]: colors.textTertiary !== void 0 ? colors.textTertiary : colors.border,
92
+ ["--hairline-lo" /* Lo */]: colors.divider
93
+ });
94
+ var styles = StyleSheet.create({
95
+ host: { width: "100%", aspectRatio: HAIRLINE_ASPECT_RATIO }
96
+ });
97
+ var toElement = (view) => view;
98
+ var HairlineFigure = ({
99
+ figure,
100
+ colors,
101
+ intensity = DEFAULT_HAIRLINE_INTENSITY,
102
+ label,
103
+ testID = HAIRLINE_TEST_ID
104
+ }) => {
105
+ const hostRef = useRef(null);
106
+ const figureRef = useRef(null);
107
+ const optionsRef = useRef({ intensity, label });
108
+ optionsRef.current = { intensity, label };
109
+ useEffect(() => {
110
+ const el = toElement(hostRef.current);
111
+ if (el === null) return void 0;
112
+ const vars = Object.entries(hairlineVars(colors));
113
+ vars.forEach(([name, value]) => el.style.setProperty(name, value));
114
+ return () => vars.forEach(([name]) => el.style.removeProperty(name));
115
+ }, [colors]);
116
+ useEffect(() => {
117
+ const el = toElement(hostRef.current);
118
+ if (el === null) return void 0;
119
+ const mounted = FIGURE_REGISTRY[figure](el, optionsRef.current);
120
+ figureRef.current = mounted;
121
+ return () => {
122
+ mounted.destroy();
123
+ figureRef.current = null;
124
+ };
125
+ }, [figure]);
126
+ useEffect(() => {
127
+ figureRef.current?.update({ intensity, label });
128
+ }, [intensity, label]);
129
+ return /* @__PURE__ */ jsx(View, { ref: hostRef, style: styles.host, testID });
130
+ };
131
+
132
+ export { DEFAULT_HAIRLINE_INTENSITY, HAIRLINE_ASPECT_RATIO, HAIRLINE_TEST_ID, HairlineFigure, HairlineFigureName, HairlineVarName, hairlineVars };
133
+ //# sourceMappingURL=web.mjs.map
134
+ //# sourceMappingURL=web.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hairline/constants.ts","../../src/hairline/HairlineFigureName.ts","../../src/hairline/data/figureRegistry.ts","../../src/hairline/HairlineVarName.ts","../../src/hairline/utils/hairlineVars.ts","../../src/hairline/components/HairlineFigure.web.tsx"],"names":["HairlineFigureName","HairlineVarName"],"mappings":";;;;;;;;AAAO,IAAM,gBAAA,GAAmB;AACzB,IAAM,wBAAwB,CAAA,GAAI;AAClC,IAAM,0BAAA,GAA6B;;;ACFnC,IAAW,kBAAA,qBAAAA,mBAAAA,KAAX;AACL,EAAAA,oBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,oBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,oBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,oBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,oBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,oBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,oBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,oBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AA3BQ,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;;;ACWX,IAAM,eAAA,GAA2D;AAAA,EACtE,yBAA6B,MAAA;AAAA,EAC7B,6BAA+B,QAAA;AAAA,EAC/B,2BAA8B,OAAA;AAAA,EAC9B,qBAA2B,IAAA;AAAA,EAC3B,yBAA6B,MAAA;AAAA,EAC7B,6BAA+B,QAAA;AAAA,EAC/B,6BAA+B,QAAA;AAAA,EAC/B,6BAA+B,QAAA;AAAA,EAC/B,yBAA6B,MAAA;AAAA,EAC7B,2BAA8B,OAAA;AAAA,EAC9B,uBAA4B,KAAA;AAAA,EAC5B,2BAA8B,OAAA;AAAA,EAC9B,uBAA4B,KAAA;AAAA,EAC5B,uBAA4B,KAAA;AAAA,EAC5B,6BAA+B,QAAA;AAAA,EAC/B,qBAA2B,IAAA;AAAA,EAC3B,qBAA2B,IAAA;AAAA,EAC3B,uBAA4B,KAAA;AAAA,EAC5B,qBAA2B,IAAA;AAAA,EAC3B,yBAA6B,MAAA;AAAA,EAC7B,yBAA6B,MAAA;AAAA,EAC7B,uBAA4B,KAAA;AAAA,EAC5B,qBAA2B,IAAA;AAAA,EAC3B,6BAA+B,QAAA;AAAA,EAC/B,2BAA8B,OAAA;AAAA,EAC9B,+BAAgC,SAAA;AAAA,EAChC,uBAA4B;AAC9B,CAAA;;;ACvCO,IAAW,eAAA,qBAAAC,gBAAAA,KAAX;AACL,EAAAA,iBAAA,OAAA,CAAA,GAAQ,kBAAA;AACR,EAAAA,iBAAA,IAAA,CAAA,GAAK,eAAA;AACL,EAAAA,iBAAA,MAAA,CAAA,GAAO,iBAAA;AACP,EAAAA,iBAAA,KAAA,CAAA,GAAM,gBAAA;AACN,EAAAA,iBAAA,IAAA,CAAA,GAAK,eAAA;AALW,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;;;ACMX,IAAM,YAAA,GAAe,CAAC,MAAA,MAAsC;AAAA,EACjE,CAAA,kBAAA,eAAyB,MAAA,CAAO,UAAA;AAAA,EAChC,CAAA,eAAA,YAAsB,MAAA,CAAO,IAAA;AAAA,EAC7B,CAAA,iBAAA,cAAwB,MAAA,CAAO,aAAA;AAAA,EAC/B,8BAAuB,MAAA,CAAO,iBAAiB,MAAA,GAAY,MAAA,CAAO,eAAe,MAAA,CAAO,MAAA;AAAA,EACxF,CAAA,eAAA,YAAsB,MAAA,CAAO;AAC/B,CAAA;ACDA,IAAM,MAAA,GAAS,WAAW,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,aAAa,qBAAA;AACtC,CAAC,CAAA;AAED,IAAM,SAAA,GAAY,CAAC,IAAA,KAA0C,IAAA;AAGtD,IAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,0BAAA;AAAA,EACZ,KAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,KAA+C;AAC7C,EAAA,MAAM,OAAA,GAAU,OAAa,IAAI,CAAA;AACjC,EAAA,MAAM,SAAA,GAAY,OAAsB,IAAI,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,EAAE,SAAA,EAAW,OAAO,CAAA;AAC9C,EAAA,UAAA,CAAW,OAAA,GAAU,EAAE,SAAA,EAAW,KAAA,EAAM;AAExC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AACpC,IAAA,IAAI,EAAA,KAAO,MAAM,OAAO,MAAA;AACxB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM,EAAA,CAAG,KAAA,CAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAC,CAAA;AACjE,IAAA,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,IAAI,CAAA,KAAM,EAAA,CAAG,KAAA,CAAM,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AACpC,IAAA,IAAI,EAAA,KAAO,MAAM,OAAO,MAAA;AACxB,IAAA,MAAM,UAAU,eAAA,CAAgB,MAAM,CAAA,CAAE,EAAA,EAAI,WAAW,OAAO,CAAA;AAC9D,IAAA,SAAA,CAAU,OAAA,GAAU,OAAA;AACpB,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAChB,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,EAAS,MAAA,CAAO,EAAE,SAAA,EAAW,OAAO,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,SAAA,EAAW,KAAK,CAAC,CAAA;AAErB,EAAA,2BAAQ,IAAA,EAAA,EAAK,GAAA,EAAK,SAAS,KAAA,EAAO,MAAA,CAAO,MAAM,MAAA,EAAgB,CAAA;AACjE","file":"web.mjs","sourcesContent":["export const HAIRLINE_TEST_ID = 'motion-hairline-figure';\nexport const HAIRLINE_ASPECT_RATIO = 5 / 4;\nexport const DEFAULT_HAIRLINE_INTENSITY = 0.5;\nexport const HAIRLINE_HANDLE_GLOBAL = '__dloizidesHairline';\n","export const enum HairlineFigureName {\n Basket = 'basket',\n Branches = 'branches',\n Cabinet = 'cabinet',\n Dish = 'dish',\n Drawer = 'drawer',\n Elevator = 'elevator',\n Exploded = 'exploded',\n Keyboard = 'keyboard',\n Laptop = 'laptop',\n Lockers = 'lockers',\n Loupe = 'loupe',\n Padlock = 'padlock',\n Patch = 'patch',\n Phone = 'phone',\n Phosphor = 'phosphor',\n Plot = 'plot',\n Plug = 'plug',\n Query = 'query',\n Rail = 'rail',\n Riffle = 'riffle',\n Router = 'router',\n Sieve = 'sieve',\n Slow = 'slow',\n Terminal = 'terminal',\n Terrain = 'terrain',\n Turntable = 'turntable',\n Vault = 'vault',\n}\n","import {\n basket, branches, cabinet, dish, drawer, elevator, exploded, keyboard, laptop,\n lockers, loupe, padlock, patch, phone, phosphor, plot, plug, query, rail,\n riffle, router, sieve, slow, terminal, terrain, turntable, vault,\n type Figure, type HairlineOptions,\n} from '@lucasmarkes/hairline';\n\nimport { HairlineFigureName } from '../HairlineFigureName';\n\nexport type MountFigure = (el: HTMLElement, options?: HairlineOptions) => Figure;\n\nexport const FIGURE_REGISTRY: Record<HairlineFigureName, MountFigure> = {\n [HairlineFigureName.Basket]: basket,\n [HairlineFigureName.Branches]: branches,\n [HairlineFigureName.Cabinet]: cabinet,\n [HairlineFigureName.Dish]: dish,\n [HairlineFigureName.Drawer]: drawer,\n [HairlineFigureName.Elevator]: elevator,\n [HairlineFigureName.Exploded]: exploded,\n [HairlineFigureName.Keyboard]: keyboard,\n [HairlineFigureName.Laptop]: laptop,\n [HairlineFigureName.Lockers]: lockers,\n [HairlineFigureName.Loupe]: loupe,\n [HairlineFigureName.Padlock]: padlock,\n [HairlineFigureName.Patch]: patch,\n [HairlineFigureName.Phone]: phone,\n [HairlineFigureName.Phosphor]: phosphor,\n [HairlineFigureName.Plot]: plot,\n [HairlineFigureName.Plug]: plug,\n [HairlineFigureName.Query]: query,\n [HairlineFigureName.Rail]: rail,\n [HairlineFigureName.Riffle]: riffle,\n [HairlineFigureName.Router]: router,\n [HairlineFigureName.Sieve]: sieve,\n [HairlineFigureName.Slow]: slow,\n [HairlineFigureName.Terminal]: terminal,\n [HairlineFigureName.Terrain]: terrain,\n [HairlineFigureName.Turntable]: turntable,\n [HairlineFigureName.Vault]: vault,\n};\n","export const enum HairlineVarName {\n Plate = '--hairline-plate',\n Hi = '--hairline-hi',\n Edge = '--hairline-edge',\n Mid = '--hairline-mid',\n Lo = '--hairline-lo',\n}\n","import type { ModeColors } from '@dloizides/design-tokens';\n\nimport { HairlineVarName } from '../HairlineVarName';\nimport type { HairlineVars } from '../types';\n\n/** Maps one theme mode's colour tokens onto the hairline palette vars (stroke width stays upstream). */\nexport const hairlineVars = (colors: ModeColors): HairlineVars => ({\n [HairlineVarName.Plate]: colors.background,\n [HairlineVarName.Hi]: colors.text,\n [HairlineVarName.Edge]: colors.textSecondary,\n [HairlineVarName.Mid]: colors.textTertiary !== undefined ? colors.textTertiary : colors.border,\n [HairlineVarName.Lo]: colors.divider,\n});\n","import React, { useEffect, useRef } from 'react';\n\nimport { StyleSheet, View } from 'react-native';\n\nimport type { Figure } from '@lucasmarkes/hairline';\n\nimport { DEFAULT_HAIRLINE_INTENSITY, HAIRLINE_ASPECT_RATIO, HAIRLINE_TEST_ID } from '../constants';\nimport { FIGURE_REGISTRY } from '../data/figureRegistry';\nimport type { HairlineFigureProps } from '../types';\nimport { hairlineVars } from '../utils/hairlineVars';\n\nconst styles = StyleSheet.create({\n host: { width: '100%', aspectRatio: HAIRLINE_ASPECT_RATIO },\n});\n\nconst toElement = (view: View | null): HTMLElement | null => view as unknown as HTMLElement | null;\n\n/** Mounts a hairline figure on the host View's DOM node (RN-web); destroyed on unmount. */\nexport const HairlineFigure = ({\n figure,\n colors,\n intensity = DEFAULT_HAIRLINE_INTENSITY,\n label,\n testID = HAIRLINE_TEST_ID,\n}: HairlineFigureProps): React.ReactElement => {\n const hostRef = useRef<View>(null);\n const figureRef = useRef<Figure | null>(null);\n const optionsRef = useRef({ intensity, label });\n optionsRef.current = { intensity, label };\n\n useEffect(() => {\n const el = toElement(hostRef.current);\n if (el === null) return undefined;\n const vars = Object.entries(hairlineVars(colors));\n vars.forEach(([name, value]) => el.style.setProperty(name, value));\n return () => vars.forEach(([name]) => el.style.removeProperty(name));\n }, [colors]);\n\n useEffect(() => {\n const el = toElement(hostRef.current);\n if (el === null) return undefined;\n const mounted = FIGURE_REGISTRY[figure](el, optionsRef.current);\n figureRef.current = mounted;\n return () => {\n mounted.destroy();\n figureRef.current = null;\n };\n }, [figure]);\n\n useEffect(() => {\n figureRef.current?.update({ intensity, label });\n }, [intensity, label]);\n\n return <View ref={hostRef} style={styles.host} testID={testID} />;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dloizides/ui-motion",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Themable, brand-agnostic React Native (RN-web) motion primitives — useEnterExit, FadeIn, Collapse, PressableScale, Skeleton — built on RN Animated, driven by @dloizides/design-tokens motion tokens, and gated on @dloizides/rn-web-hooks useReducedMotion (every animation collapses to instant under reduced-motion). Part of the dloizides.com shared UI kit.",
5
5
  "keywords": [
6
6
  "react",
@@ -48,6 +48,28 @@
48
48
  "types": "./dist/index.d.ts",
49
49
  "default": "./dist/index.js"
50
50
  }
51
+ },
52
+ "./hairline": {
53
+ "react-native": {
54
+ "types": "./dist/hairline/native.d.ts",
55
+ "default": "./dist/hairline/native.js"
56
+ },
57
+ "browser": {
58
+ "types": "./dist/hairline/web.d.ts",
59
+ "default": "./dist/hairline/web.js"
60
+ },
61
+ "require": {
62
+ "types": "./dist/hairline/web.d.ts",
63
+ "default": "./dist/hairline/web.js"
64
+ },
65
+ "import": {
66
+ "types": "./dist/hairline/web.d.mts",
67
+ "default": "./dist/hairline/web.mjs"
68
+ },
69
+ "default": {
70
+ "types": "./dist/hairline/web.d.ts",
71
+ "default": "./dist/hairline/web.js"
72
+ }
51
73
  }
52
74
  },
53
75
  "files": [
@@ -60,7 +82,7 @@
60
82
  "node": ">=18.0.0"
61
83
  },
62
84
  "scripts": {
63
- "build": "rimraf dist && tsup",
85
+ "build": "rimraf dist && npm run generate:hairline && tsup",
64
86
  "build:watch": "tsup --watch",
65
87
  "test": "jest",
66
88
  "test:watch": "jest --watch",
@@ -71,19 +93,22 @@
71
93
  "clean": "rimraf dist",
72
94
  "security:audit": "npm audit --audit-level=high",
73
95
  "deps:outdated": "npm outdated || exit 0",
74
- "deps:unused": "npx depcheck --ignores \"@types/jest,@types/node,@types/react,@types/react-dom,rimraf,react-native\"",
96
+ "deps:unused": "npx depcheck --ignores \"@types/jest,@types/node,@types/react,@types/react-dom,rimraf,react-native,react-native-webview\"",
75
97
  "deps:licenses": "npx license-checker --onlyAllow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0\"",
76
98
  "deps:health": "npm run deps:outdated && npm run deps:unused",
77
99
  "prepublishOnly": "npm run clean && npm run build && npm run test",
78
- "version": "npm run build"
100
+ "version": "npm run build",
101
+ "generate:hairline": "node scripts/generate-hairline-bundle.mjs"
79
102
  },
80
103
  "dependencies": {
81
104
  "@dloizides/design-tokens": "^1.7.0",
82
- "@dloizides/rn-web-hooks": "^1.1.0"
105
+ "@dloizides/rn-web-hooks": "^1.1.0",
106
+ "@lucasmarkes/hairline": "0.3.0"
83
107
  },
84
108
  "peerDependencies": {
85
109
  "react": ">=18.0.0",
86
- "react-native": ">=0.74.0"
110
+ "react-native": ">=0.74.0",
111
+ "react-native-webview": ">=13.0.0"
87
112
  },
88
113
  "devDependencies": {
89
114
  "@dloizides/design-tokens": "file:../design-tokens",
@@ -105,9 +130,15 @@
105
130
  "react-dom": "^19.2.4",
106
131
  "react-native": "0.81.5",
107
132
  "react-native-web": "^0.21.0",
133
+ "react-native-webview": "^13.15.0",
108
134
  "rimraf": "^5.0.0",
109
135
  "ts-jest": "^29.1.0",
110
136
  "tsup": "^8.0.0",
111
137
  "typescript": "^5.4.0"
138
+ },
139
+ "peerDependenciesMeta": {
140
+ "react-native-webview": {
141
+ "optional": true
142
+ }
112
143
  }
113
144
  }