@zag-js/avatar 0.10.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ import * as _zag_js_anatomy from '@zag-js/anatomy';
2
+ import { RequiredBy, CommonProperties, Context, PropTypes, NormalizeProps } from '@zag-js/types';
3
+ import * as _zag_js_core from '@zag-js/core';
4
+ import { StateMachine } from '@zag-js/core';
5
+
6
+ declare const anatomy: _zag_js_anatomy.AnatomyInstance<"root" | "image" | "fallback">;
7
+
8
+ type PublicContext = CommonProperties & {
9
+ onLoad?: () => void;
10
+ onError?: () => void;
11
+ };
12
+ type PrivateContext = Context<{}>;
13
+ type ComputedContext = Readonly<{}>;
14
+ type UserDefinedContext = RequiredBy<PublicContext, "id">;
15
+ type MachineContext = PublicContext & PrivateContext & ComputedContext;
16
+ type MachineState = {
17
+ value: "loading" | "error" | "loaded";
18
+ };
19
+ type State = StateMachine.State<MachineContext, MachineState>;
20
+ type Send = StateMachine.Send<StateMachine.AnyEventObject>;
21
+
22
+ declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): {
23
+ /**
24
+ * Whether the image is loaded.
25
+ */
26
+ isLoaded: boolean;
27
+ /**
28
+ * Whether the fallback is shown.
29
+ */
30
+ showFallback: boolean;
31
+ /**
32
+ * Function to set new src.
33
+ */
34
+ setSrc(src: string): void;
35
+ /**
36
+ * Function to set loaded state.
37
+ */
38
+ setLoaded(): void;
39
+ /**
40
+ * Function to set error state.
41
+ */
42
+ setError(): void;
43
+ rootProps: T["element"];
44
+ imageProps: T["img"];
45
+ fallbackProps: T["element"];
46
+ };
47
+
48
+ declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
49
+
50
+ export { UserDefinedContext as Context, anatomy, connect, machine };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,50 @@
1
- export { anatomy } from "./avatar.anatomy";
2
- export { connect } from "./avatar.connect";
3
- export { machine } from "./avatar.machine";
4
- export type { UserDefinedContext as Context } from "./avatar.types";
1
+ import * as _zag_js_anatomy from '@zag-js/anatomy';
2
+ import { RequiredBy, CommonProperties, Context, PropTypes, NormalizeProps } from '@zag-js/types';
3
+ import * as _zag_js_core from '@zag-js/core';
4
+ import { StateMachine } from '@zag-js/core';
5
+
6
+ declare const anatomy: _zag_js_anatomy.AnatomyInstance<"root" | "image" | "fallback">;
7
+
8
+ type PublicContext = CommonProperties & {
9
+ onLoad?: () => void;
10
+ onError?: () => void;
11
+ };
12
+ type PrivateContext = Context<{}>;
13
+ type ComputedContext = Readonly<{}>;
14
+ type UserDefinedContext = RequiredBy<PublicContext, "id">;
15
+ type MachineContext = PublicContext & PrivateContext & ComputedContext;
16
+ type MachineState = {
17
+ value: "loading" | "error" | "loaded";
18
+ };
19
+ type State = StateMachine.State<MachineContext, MachineState>;
20
+ type Send = StateMachine.Send<StateMachine.AnyEventObject>;
21
+
22
+ declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): {
23
+ /**
24
+ * Whether the image is loaded.
25
+ */
26
+ isLoaded: boolean;
27
+ /**
28
+ * Whether the fallback is shown.
29
+ */
30
+ showFallback: boolean;
31
+ /**
32
+ * Function to set new src.
33
+ */
34
+ setSrc(src: string): void;
35
+ /**
36
+ * Function to set loaded state.
37
+ */
38
+ setLoaded(): void;
39
+ /**
40
+ * Function to set error state.
41
+ */
42
+ setError(): void;
43
+ rootProps: T["element"];
44
+ imageProps: T["img"];
45
+ fallbackProps: T["element"];
46
+ };
47
+
48
+ declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
49
+
50
+ export { UserDefinedContext as Context, anatomy, connect, machine };
package/dist/index.js CHANGED
@@ -1,13 +1,210 @@
1
- 'use strict';
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
2
19
 
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ anatomy: () => anatomy,
24
+ connect: () => connect,
25
+ machine: () => machine
26
+ });
27
+ module.exports = __toCommonJS(src_exports);
4
28
 
5
- const avatar_anatomy = require('./avatar.anatomy.js');
6
- const avatar_connect = require('./avatar.connect.js');
7
- const avatar_machine = require('./avatar.machine.js');
29
+ // src/avatar.anatomy.ts
30
+ var import_anatomy = require("@zag-js/anatomy");
31
+ var anatomy = (0, import_anatomy.createAnatomy)("avatar").parts("root", "image", "fallback");
32
+ var parts = anatomy.build();
8
33
 
34
+ // src/avatar.connect.ts
35
+ var import_dom_query2 = require("@zag-js/dom-query");
9
36
 
37
+ // src/avatar.dom.ts
38
+ var import_dom_query = require("@zag-js/dom-query");
39
+ var dom = (0, import_dom_query.createScope)({
40
+ getRootId: (ctx) => `avatar:${ctx.id}`,
41
+ getImageId: (ctx) => `avatar:${ctx.id}:image`,
42
+ getFallbackId: (ctx) => `avatar:${ctx.id}:fallback`,
43
+ getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
44
+ getImageEl: (ctx) => dom.getById(ctx, dom.getImageId(ctx))
45
+ });
10
46
 
11
- exports.anatomy = avatar_anatomy.anatomy;
12
- exports.connect = avatar_connect.connect;
13
- exports.machine = avatar_machine.machine;
47
+ // src/avatar.connect.ts
48
+ function connect(state, send, normalize) {
49
+ const isLoaded = state.matches("loaded");
50
+ const showFallback = !isLoaded;
51
+ return {
52
+ /**
53
+ * Whether the image is loaded.
54
+ */
55
+ isLoaded,
56
+ /**
57
+ * Whether the fallback is shown.
58
+ */
59
+ showFallback,
60
+ /**
61
+ * Function to set new src.
62
+ */
63
+ setSrc(src) {
64
+ send({ type: "SRC.SET", src });
65
+ },
66
+ /**
67
+ * Function to set loaded state.
68
+ */
69
+ setLoaded() {
70
+ send({ type: "IMG.LOADED", src: "api" });
71
+ },
72
+ /**
73
+ * Function to set error state.
74
+ */
75
+ setError() {
76
+ send({ type: "IMG.ERROR", src: "api" });
77
+ },
78
+ rootProps: normalize.element({
79
+ ...parts.root.attrs,
80
+ id: dom.getRootId(state.context),
81
+ style: {
82
+ display: "grid",
83
+ gridTemplateRows: "1fr 1fr",
84
+ overflow: "hidden"
85
+ }
86
+ }),
87
+ imageProps: normalize.img({
88
+ ...parts.image.attrs,
89
+ id: dom.getImageId(state.context),
90
+ "data-loaded": (0, import_dom_query2.dataAttr)(isLoaded),
91
+ onLoad() {
92
+ send({ type: "IMG.LOADED", src: "element" });
93
+ },
94
+ onError() {
95
+ send({ type: "IMG.ERROR", src: "element" });
96
+ },
97
+ style: {
98
+ gridArea: "1 / 1 / 2 / 2",
99
+ visibility: !isLoaded ? "hidden" : void 0
100
+ }
101
+ }),
102
+ fallbackProps: normalize.element({
103
+ ...parts.fallback.attrs,
104
+ id: dom.getFallbackId(state.context),
105
+ hidden: !showFallback,
106
+ style: {
107
+ gridArea: "1 / 1 / 2 / 2"
108
+ }
109
+ })
110
+ };
111
+ }
112
+
113
+ // src/avatar.machine.ts
114
+ var import_core = require("@zag-js/core");
115
+ var import_utils = require("@zag-js/utils");
116
+ var import_mutation_observer = require("@zag-js/mutation-observer");
117
+ function machine(userContext) {
118
+ const ctx = (0, import_utils.compact)(userContext);
119
+ return (0, import_core.createMachine)(
120
+ {
121
+ id: "avatar",
122
+ initial: "loading",
123
+ activities: ["trackImageRemoval"],
124
+ context: ctx,
125
+ on: {
126
+ "SRC.CHANGE": {
127
+ target: "loading"
128
+ },
129
+ "IMG.UNMOUNT": {
130
+ target: "error"
131
+ }
132
+ },
133
+ states: {
134
+ loading: {
135
+ activities: ["trackSrcChange"],
136
+ entry: ["checkImgStatus"],
137
+ on: {
138
+ "IMG.LOADED": {
139
+ target: "loaded",
140
+ actions: ["invokeOnLoad"]
141
+ },
142
+ "IMG.ERROR": {
143
+ target: "error",
144
+ actions: ["invokeOnError"]
145
+ }
146
+ }
147
+ },
148
+ error: {
149
+ activities: ["trackSrcChange"],
150
+ on: {
151
+ "IMG.LOADED": {
152
+ target: "loaded",
153
+ actions: ["invokeOnLoad"]
154
+ }
155
+ }
156
+ },
157
+ loaded: {
158
+ activities: ["trackSrcChange"],
159
+ on: {
160
+ "IMG.ERROR": {
161
+ target: "error",
162
+ actions: ["invokeOnError"]
163
+ }
164
+ }
165
+ }
166
+ }
167
+ },
168
+ {
169
+ activities: {
170
+ trackSrcChange(ctx2, _evt, { send }) {
171
+ const img = dom.getImageEl(ctx2);
172
+ return (0, import_mutation_observer.observeAttributes)(img, ["src", "srcset"], () => {
173
+ send({ type: "SRC.CHANGE" });
174
+ });
175
+ },
176
+ trackImageRemoval(ctx2, _evt, { send }) {
177
+ const rootEl = dom.getRootEl(ctx2);
178
+ return (0, import_mutation_observer.observeChildren)(rootEl, (records) => {
179
+ const removedNodes = Array.from(records[0].removedNodes);
180
+ const removed = removedNodes.find((node) => node.matches("[data-scope=avatar][data-part=image]"));
181
+ if (removed) {
182
+ send({ type: "IMG.UNMOUNT" });
183
+ }
184
+ });
185
+ }
186
+ },
187
+ actions: {
188
+ invokeOnLoad(ctx2) {
189
+ ctx2.onLoad?.();
190
+ },
191
+ invokeOnError(ctx2) {
192
+ ctx2.onError?.();
193
+ },
194
+ checkImgStatus(ctx2, _evt, { send }) {
195
+ const img = dom.getImageEl(ctx2);
196
+ if (img?.complete) {
197
+ send({ type: "IMG.LOADED", src: "ssr" });
198
+ }
199
+ }
200
+ }
201
+ }
202
+ );
203
+ }
204
+ // Annotate the CommonJS export names for ESM import in node:
205
+ 0 && (module.exports = {
206
+ anatomy,
207
+ connect,
208
+ machine
209
+ });
210
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/avatar.anatomy.ts","../src/avatar.connect.ts","../src/avatar.dom.ts","../src/avatar.machine.ts"],"sourcesContent":["export { anatomy } from \"./avatar.anatomy\"\nexport { connect } from \"./avatar.connect\"\nexport { machine } from \"./avatar.machine\"\nexport type { UserDefinedContext as Context } from \"./avatar.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"avatar\").parts(\"root\", \"image\", \"fallback\")\n\nexport const parts = anatomy.build()\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport { NormalizeProps, type PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./avatar.anatomy\"\nimport { dom } from \"./avatar.dom\"\nimport { Send, State } from \"./avatar.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isLoaded = state.matches(\"loaded\")\n const showFallback = !isLoaded\n\n return {\n /**\n * Whether the image is loaded.\n */\n isLoaded,\n /**\n * Whether the fallback is shown.\n */\n showFallback,\n /**\n * Function to set new src.\n */\n setSrc(src: string) {\n send({ type: \"SRC.SET\", src })\n },\n /**\n * Function to set loaded state.\n */\n setLoaded() {\n send({ type: \"IMG.LOADED\", src: \"api\" })\n },\n /**\n * Function to set error state.\n */\n setError() {\n send({ type: \"IMG.ERROR\", src: \"api\" })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n id: dom.getRootId(state.context),\n style: {\n display: \"grid\",\n gridTemplateRows: \"1fr 1fr\",\n overflow: \"hidden\",\n },\n }),\n\n imageProps: normalize.img({\n ...parts.image.attrs,\n id: dom.getImageId(state.context),\n \"data-loaded\": dataAttr(isLoaded),\n onLoad() {\n send({ type: \"IMG.LOADED\", src: \"element\" })\n },\n onError() {\n send({ type: \"IMG.ERROR\", src: \"element\" })\n },\n style: {\n gridArea: \"1 / 1 / 2 / 2\",\n visibility: !isLoaded ? \"hidden\" : undefined,\n },\n }),\n\n fallbackProps: normalize.element({\n ...parts.fallback.attrs,\n id: dom.getFallbackId(state.context),\n hidden: !showFallback,\n style: {\n gridArea: \"1 / 1 / 2 / 2\",\n },\n }),\n }\n}\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./avatar.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => `avatar:${ctx.id}`,\n getImageId: (ctx: Ctx) => `avatar:${ctx.id}:image`,\n getFallbackId: (ctx: Ctx) => `avatar:${ctx.id}:fallback`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getImageEl: (ctx: Ctx) => dom.getById<HTMLImageElement>(ctx, dom.getImageId(ctx)),\n})\n","import { createMachine } from \"@zag-js/core\"\nimport { compact } from \"@zag-js/utils\"\nimport { observeAttributes, observeChildren } from \"@zag-js/mutation-observer\"\nimport { MachineContext, MachineState, UserDefinedContext } from \"./avatar.types\"\nimport { dom } from \"./avatar.dom\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"avatar\",\n initial: \"loading\",\n activities: [\"trackImageRemoval\"],\n\n context: ctx,\n\n on: {\n \"SRC.CHANGE\": {\n target: \"loading\",\n },\n \"IMG.UNMOUNT\": {\n target: \"error\",\n },\n },\n\n states: {\n loading: {\n activities: [\"trackSrcChange\"],\n entry: [\"checkImgStatus\"],\n on: {\n \"IMG.LOADED\": {\n target: \"loaded\",\n actions: [\"invokeOnLoad\"],\n },\n \"IMG.ERROR\": {\n target: \"error\",\n actions: [\"invokeOnError\"],\n },\n },\n },\n error: {\n activities: [\"trackSrcChange\"],\n on: {\n \"IMG.LOADED\": {\n target: \"loaded\",\n actions: [\"invokeOnLoad\"],\n },\n },\n },\n loaded: {\n activities: [\"trackSrcChange\"],\n on: {\n \"IMG.ERROR\": {\n target: \"error\",\n actions: [\"invokeOnError\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackSrcChange(ctx, _evt, { send }) {\n const img = dom.getImageEl(ctx)\n return observeAttributes(img, [\"src\", \"srcset\"], () => {\n send({ type: \"SRC.CHANGE\" })\n })\n },\n trackImageRemoval(ctx, _evt, { send }) {\n const rootEl = dom.getRootEl(ctx)\n return observeChildren(rootEl, (records) => {\n const removedNodes = Array.from(records[0].removedNodes) as HTMLElement[]\n const removed = removedNodes.find((node) => node.matches(\"[data-scope=avatar][data-part=image]\"))\n if (removed) {\n send({ type: \"IMG.UNMOUNT\" })\n }\n })\n },\n },\n actions: {\n invokeOnLoad(ctx) {\n ctx.onLoad?.()\n },\n invokeOnError(ctx) {\n ctx.onError?.()\n },\n checkImgStatus(ctx, _evt, { send }) {\n const img = dom.getImageEl(ctx)\n if (img?.complete) {\n send({ type: \"IMG.LOADED\", src: \"ssr\" })\n }\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["import_dom_query","ctx"]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,181 @@
1
- export { anatomy } from './avatar.anatomy.mjs';
2
- export { connect } from './avatar.connect.mjs';
3
- export { machine } from './avatar.machine.mjs';
1
+ // src/avatar.anatomy.ts
2
+ import { createAnatomy } from "@zag-js/anatomy";
3
+ var anatomy = createAnatomy("avatar").parts("root", "image", "fallback");
4
+ var parts = anatomy.build();
5
+
6
+ // src/avatar.connect.ts
7
+ import { dataAttr } from "@zag-js/dom-query";
8
+
9
+ // src/avatar.dom.ts
10
+ import { createScope } from "@zag-js/dom-query";
11
+ var dom = createScope({
12
+ getRootId: (ctx) => `avatar:${ctx.id}`,
13
+ getImageId: (ctx) => `avatar:${ctx.id}:image`,
14
+ getFallbackId: (ctx) => `avatar:${ctx.id}:fallback`,
15
+ getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
16
+ getImageEl: (ctx) => dom.getById(ctx, dom.getImageId(ctx))
17
+ });
18
+
19
+ // src/avatar.connect.ts
20
+ function connect(state, send, normalize) {
21
+ const isLoaded = state.matches("loaded");
22
+ const showFallback = !isLoaded;
23
+ return {
24
+ /**
25
+ * Whether the image is loaded.
26
+ */
27
+ isLoaded,
28
+ /**
29
+ * Whether the fallback is shown.
30
+ */
31
+ showFallback,
32
+ /**
33
+ * Function to set new src.
34
+ */
35
+ setSrc(src) {
36
+ send({ type: "SRC.SET", src });
37
+ },
38
+ /**
39
+ * Function to set loaded state.
40
+ */
41
+ setLoaded() {
42
+ send({ type: "IMG.LOADED", src: "api" });
43
+ },
44
+ /**
45
+ * Function to set error state.
46
+ */
47
+ setError() {
48
+ send({ type: "IMG.ERROR", src: "api" });
49
+ },
50
+ rootProps: normalize.element({
51
+ ...parts.root.attrs,
52
+ id: dom.getRootId(state.context),
53
+ style: {
54
+ display: "grid",
55
+ gridTemplateRows: "1fr 1fr",
56
+ overflow: "hidden"
57
+ }
58
+ }),
59
+ imageProps: normalize.img({
60
+ ...parts.image.attrs,
61
+ id: dom.getImageId(state.context),
62
+ "data-loaded": dataAttr(isLoaded),
63
+ onLoad() {
64
+ send({ type: "IMG.LOADED", src: "element" });
65
+ },
66
+ onError() {
67
+ send({ type: "IMG.ERROR", src: "element" });
68
+ },
69
+ style: {
70
+ gridArea: "1 / 1 / 2 / 2",
71
+ visibility: !isLoaded ? "hidden" : void 0
72
+ }
73
+ }),
74
+ fallbackProps: normalize.element({
75
+ ...parts.fallback.attrs,
76
+ id: dom.getFallbackId(state.context),
77
+ hidden: !showFallback,
78
+ style: {
79
+ gridArea: "1 / 1 / 2 / 2"
80
+ }
81
+ })
82
+ };
83
+ }
84
+
85
+ // src/avatar.machine.ts
86
+ import { createMachine } from "@zag-js/core";
87
+ import { compact } from "@zag-js/utils";
88
+ import { observeAttributes, observeChildren } from "@zag-js/mutation-observer";
89
+ function machine(userContext) {
90
+ const ctx = compact(userContext);
91
+ return createMachine(
92
+ {
93
+ id: "avatar",
94
+ initial: "loading",
95
+ activities: ["trackImageRemoval"],
96
+ context: ctx,
97
+ on: {
98
+ "SRC.CHANGE": {
99
+ target: "loading"
100
+ },
101
+ "IMG.UNMOUNT": {
102
+ target: "error"
103
+ }
104
+ },
105
+ states: {
106
+ loading: {
107
+ activities: ["trackSrcChange"],
108
+ entry: ["checkImgStatus"],
109
+ on: {
110
+ "IMG.LOADED": {
111
+ target: "loaded",
112
+ actions: ["invokeOnLoad"]
113
+ },
114
+ "IMG.ERROR": {
115
+ target: "error",
116
+ actions: ["invokeOnError"]
117
+ }
118
+ }
119
+ },
120
+ error: {
121
+ activities: ["trackSrcChange"],
122
+ on: {
123
+ "IMG.LOADED": {
124
+ target: "loaded",
125
+ actions: ["invokeOnLoad"]
126
+ }
127
+ }
128
+ },
129
+ loaded: {
130
+ activities: ["trackSrcChange"],
131
+ on: {
132
+ "IMG.ERROR": {
133
+ target: "error",
134
+ actions: ["invokeOnError"]
135
+ }
136
+ }
137
+ }
138
+ }
139
+ },
140
+ {
141
+ activities: {
142
+ trackSrcChange(ctx2, _evt, { send }) {
143
+ const img = dom.getImageEl(ctx2);
144
+ return observeAttributes(img, ["src", "srcset"], () => {
145
+ send({ type: "SRC.CHANGE" });
146
+ });
147
+ },
148
+ trackImageRemoval(ctx2, _evt, { send }) {
149
+ const rootEl = dom.getRootEl(ctx2);
150
+ return observeChildren(rootEl, (records) => {
151
+ const removedNodes = Array.from(records[0].removedNodes);
152
+ const removed = removedNodes.find((node) => node.matches("[data-scope=avatar][data-part=image]"));
153
+ if (removed) {
154
+ send({ type: "IMG.UNMOUNT" });
155
+ }
156
+ });
157
+ }
158
+ },
159
+ actions: {
160
+ invokeOnLoad(ctx2) {
161
+ ctx2.onLoad?.();
162
+ },
163
+ invokeOnError(ctx2) {
164
+ ctx2.onError?.();
165
+ },
166
+ checkImgStatus(ctx2, _evt, { send }) {
167
+ const img = dom.getImageEl(ctx2);
168
+ if (img?.complete) {
169
+ send({ type: "IMG.LOADED", src: "ssr" });
170
+ }
171
+ }
172
+ }
173
+ }
174
+ );
175
+ }
176
+ export {
177
+ anatomy,
178
+ connect,
179
+ machine
180
+ };
181
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/avatar.anatomy.ts","../src/avatar.connect.ts","../src/avatar.dom.ts","../src/avatar.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"avatar\").parts(\"root\", \"image\", \"fallback\")\n\nexport const parts = anatomy.build()\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport { NormalizeProps, type PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./avatar.anatomy\"\nimport { dom } from \"./avatar.dom\"\nimport { Send, State } from \"./avatar.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isLoaded = state.matches(\"loaded\")\n const showFallback = !isLoaded\n\n return {\n /**\n * Whether the image is loaded.\n */\n isLoaded,\n /**\n * Whether the fallback is shown.\n */\n showFallback,\n /**\n * Function to set new src.\n */\n setSrc(src: string) {\n send({ type: \"SRC.SET\", src })\n },\n /**\n * Function to set loaded state.\n */\n setLoaded() {\n send({ type: \"IMG.LOADED\", src: \"api\" })\n },\n /**\n * Function to set error state.\n */\n setError() {\n send({ type: \"IMG.ERROR\", src: \"api\" })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n id: dom.getRootId(state.context),\n style: {\n display: \"grid\",\n gridTemplateRows: \"1fr 1fr\",\n overflow: \"hidden\",\n },\n }),\n\n imageProps: normalize.img({\n ...parts.image.attrs,\n id: dom.getImageId(state.context),\n \"data-loaded\": dataAttr(isLoaded),\n onLoad() {\n send({ type: \"IMG.LOADED\", src: \"element\" })\n },\n onError() {\n send({ type: \"IMG.ERROR\", src: \"element\" })\n },\n style: {\n gridArea: \"1 / 1 / 2 / 2\",\n visibility: !isLoaded ? \"hidden\" : undefined,\n },\n }),\n\n fallbackProps: normalize.element({\n ...parts.fallback.attrs,\n id: dom.getFallbackId(state.context),\n hidden: !showFallback,\n style: {\n gridArea: \"1 / 1 / 2 / 2\",\n },\n }),\n }\n}\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./avatar.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => `avatar:${ctx.id}`,\n getImageId: (ctx: Ctx) => `avatar:${ctx.id}:image`,\n getFallbackId: (ctx: Ctx) => `avatar:${ctx.id}:fallback`,\n\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\n getImageEl: (ctx: Ctx) => dom.getById<HTMLImageElement>(ctx, dom.getImageId(ctx)),\n})\n","import { createMachine } from \"@zag-js/core\"\nimport { compact } from \"@zag-js/utils\"\nimport { observeAttributes, observeChildren } from \"@zag-js/mutation-observer\"\nimport { MachineContext, MachineState, UserDefinedContext } from \"./avatar.types\"\nimport { dom } from \"./avatar.dom\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"avatar\",\n initial: \"loading\",\n activities: [\"trackImageRemoval\"],\n\n context: ctx,\n\n on: {\n \"SRC.CHANGE\": {\n target: \"loading\",\n },\n \"IMG.UNMOUNT\": {\n target: \"error\",\n },\n },\n\n states: {\n loading: {\n activities: [\"trackSrcChange\"],\n entry: [\"checkImgStatus\"],\n on: {\n \"IMG.LOADED\": {\n target: \"loaded\",\n actions: [\"invokeOnLoad\"],\n },\n \"IMG.ERROR\": {\n target: \"error\",\n actions: [\"invokeOnError\"],\n },\n },\n },\n error: {\n activities: [\"trackSrcChange\"],\n on: {\n \"IMG.LOADED\": {\n target: \"loaded\",\n actions: [\"invokeOnLoad\"],\n },\n },\n },\n loaded: {\n activities: [\"trackSrcChange\"],\n on: {\n \"IMG.ERROR\": {\n target: \"error\",\n actions: [\"invokeOnError\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackSrcChange(ctx, _evt, { send }) {\n const img = dom.getImageEl(ctx)\n return observeAttributes(img, [\"src\", \"srcset\"], () => {\n send({ type: \"SRC.CHANGE\" })\n })\n },\n trackImageRemoval(ctx, _evt, { send }) {\n const rootEl = dom.getRootEl(ctx)\n return observeChildren(rootEl, (records) => {\n const removedNodes = Array.from(records[0].removedNodes) as HTMLElement[]\n const removed = removedNodes.find((node) => node.matches(\"[data-scope=avatar][data-part=image]\"))\n if (removed) {\n send({ type: \"IMG.UNMOUNT\" })\n }\n })\n },\n },\n actions: {\n invokeOnLoad(ctx) {\n ctx.onLoad?.()\n },\n invokeOnError(ctx) {\n ctx.onError?.()\n },\n checkImgStatus(ctx, _evt, { send }) {\n const img = dom.getImageEl(ctx)\n if (img?.complete) {\n send({ type: \"IMG.LOADED\", src: \"ssr\" })\n }\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["ctx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/avatar",
3
- "version": "0.10.4",
3
+ "version": "0.11.0",
4
4
  "description": "Core logic for the avatar widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -28,12 +28,12 @@
28
28
  "url": "https://github.com/chakra-ui/zag/issues"
29
29
  },
30
30
  "dependencies": {
31
- "@zag-js/anatomy": "0.10.4",
32
- "@zag-js/mutation-observer": "0.10.4",
33
- "@zag-js/core": "0.10.4",
34
- "@zag-js/dom-query": "0.10.4",
35
- "@zag-js/utils": "0.10.4",
36
- "@zag-js/types": "0.10.4"
31
+ "@zag-js/anatomy": "0.11.0",
32
+ "@zag-js/mutation-observer": "0.11.0",
33
+ "@zag-js/core": "0.11.0",
34
+ "@zag-js/dom-query": "0.11.0",
35
+ "@zag-js/utils": "0.11.0",
36
+ "@zag-js/types": "0.11.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "clean-package": "2.2.0"
@@ -50,7 +50,7 @@
50
50
  "./package.json": "./package.json"
51
51
  },
52
52
  "scripts": {
53
- "build": "vite build -c ../../../vite.config.ts",
53
+ "build": "tsup",
54
54
  "lint": "eslint src --ext .ts,.tsx",
55
55
  "typecheck": "tsc --noEmit"
56
56
  }
@@ -1,3 +0,0 @@
1
- import { AnatomyInstance, AnatomyPart } from '@zag-js/anatomy';
2
- export declare const anatomy: AnatomyInstance<"root" | "image" | "fallback">;
3
- export declare const parts: Record<"root" | "image" | "fallback", AnatomyPart>;
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const anatomy$1 = require('@zag-js/anatomy');
6
-
7
- const anatomy = anatomy$1.createAnatomy("avatar").parts("root", "image", "fallback");
8
- const parts = anatomy.build();
9
-
10
- exports.anatomy = anatomy;
11
- exports.parts = parts;
@@ -1,6 +0,0 @@
1
- import { createAnatomy } from '@zag-js/anatomy';
2
-
3
- const anatomy = createAnatomy("avatar").parts("root", "image", "fallback");
4
- const parts = anatomy.build();
5
-
6
- export { anatomy, parts };
@@ -1,27 +0,0 @@
1
- import { NormalizeProps, type PropTypes } from "@zag-js/types";
2
- import { Send, State } from "./avatar.types";
3
- export declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): {
4
- /**
5
- * Whether the image is loaded.
6
- */
7
- isLoaded: boolean;
8
- /**
9
- * Whether the fallback is shown.
10
- */
11
- showFallback: boolean;
12
- /**
13
- * Function to set new src.
14
- */
15
- setSrc(src: string): void;
16
- /**
17
- * Function to set loaded state.
18
- */
19
- setLoaded(): void;
20
- /**
21
- * Function to set error state.
22
- */
23
- setError(): void;
24
- rootProps: T["element"];
25
- imageProps: T["img"];
26
- fallbackProps: T["element"];
27
- };
@@ -1,74 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const domQuery = require('@zag-js/dom-query');
6
- const avatar_anatomy = require('./avatar.anatomy.js');
7
- const avatar_dom = require('./avatar.dom.js');
8
-
9
- function connect(state, send, normalize) {
10
- const isLoaded = state.matches("loaded");
11
- const showFallback = !isLoaded;
12
- return {
13
- /**
14
- * Whether the image is loaded.
15
- */
16
- isLoaded,
17
- /**
18
- * Whether the fallback is shown.
19
- */
20
- showFallback,
21
- /**
22
- * Function to set new src.
23
- */
24
- setSrc(src) {
25
- send({ type: "SRC.SET", src });
26
- },
27
- /**
28
- * Function to set loaded state.
29
- */
30
- setLoaded() {
31
- send({ type: "IMG.LOADED", src: "api" });
32
- },
33
- /**
34
- * Function to set error state.
35
- */
36
- setError() {
37
- send({ type: "IMG.ERROR", src: "api" });
38
- },
39
- rootProps: normalize.element({
40
- ...avatar_anatomy.parts.root.attrs,
41
- id: avatar_dom.dom.getRootId(state.context),
42
- style: {
43
- display: "grid",
44
- gridTemplateRows: "1fr 1fr",
45
- overflow: "hidden"
46
- }
47
- }),
48
- imageProps: normalize.img({
49
- ...avatar_anatomy.parts.image.attrs,
50
- id: avatar_dom.dom.getImageId(state.context),
51
- "data-loaded": domQuery.dataAttr(isLoaded),
52
- onLoad() {
53
- send({ type: "IMG.LOADED", src: "element" });
54
- },
55
- onError() {
56
- send({ type: "IMG.ERROR", src: "element" });
57
- },
58
- style: {
59
- gridArea: "1 / 1 / 2 / 2",
60
- visibility: !isLoaded ? "hidden" : void 0
61
- }
62
- }),
63
- fallbackProps: normalize.element({
64
- ...avatar_anatomy.parts.fallback.attrs,
65
- id: avatar_dom.dom.getFallbackId(state.context),
66
- hidden: !showFallback,
67
- style: {
68
- gridArea: "1 / 1 / 2 / 2"
69
- }
70
- })
71
- };
72
- }
73
-
74
- exports.connect = connect;
@@ -1,70 +0,0 @@
1
- import { dataAttr } from '@zag-js/dom-query';
2
- import { parts } from './avatar.anatomy.mjs';
3
- import { dom } from './avatar.dom.mjs';
4
-
5
- function connect(state, send, normalize) {
6
- const isLoaded = state.matches("loaded");
7
- const showFallback = !isLoaded;
8
- return {
9
- /**
10
- * Whether the image is loaded.
11
- */
12
- isLoaded,
13
- /**
14
- * Whether the fallback is shown.
15
- */
16
- showFallback,
17
- /**
18
- * Function to set new src.
19
- */
20
- setSrc(src) {
21
- send({ type: "SRC.SET", src });
22
- },
23
- /**
24
- * Function to set loaded state.
25
- */
26
- setLoaded() {
27
- send({ type: "IMG.LOADED", src: "api" });
28
- },
29
- /**
30
- * Function to set error state.
31
- */
32
- setError() {
33
- send({ type: "IMG.ERROR", src: "api" });
34
- },
35
- rootProps: normalize.element({
36
- ...parts.root.attrs,
37
- id: dom.getRootId(state.context),
38
- style: {
39
- display: "grid",
40
- gridTemplateRows: "1fr 1fr",
41
- overflow: "hidden"
42
- }
43
- }),
44
- imageProps: normalize.img({
45
- ...parts.image.attrs,
46
- id: dom.getImageId(state.context),
47
- "data-loaded": dataAttr(isLoaded),
48
- onLoad() {
49
- send({ type: "IMG.LOADED", src: "element" });
50
- },
51
- onError() {
52
- send({ type: "IMG.ERROR", src: "element" });
53
- },
54
- style: {
55
- gridArea: "1 / 1 / 2 / 2",
56
- visibility: !isLoaded ? "hidden" : void 0
57
- }
58
- }),
59
- fallbackProps: normalize.element({
60
- ...parts.fallback.attrs,
61
- id: dom.getFallbackId(state.context),
62
- hidden: !showFallback,
63
- style: {
64
- gridArea: "1 / 1 / 2 / 2"
65
- }
66
- })
67
- };
68
- }
69
-
70
- export { connect };
@@ -1,27 +0,0 @@
1
- import type { MachineContext as Ctx } from "./avatar.types";
2
- export declare const dom: {
3
- getRootNode: (ctx: {
4
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
5
- }) => Document | ShadowRoot;
6
- getDoc: (ctx: {
7
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
8
- }) => Document;
9
- getWin: (ctx: {
10
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
11
- }) => Window & typeof globalThis;
12
- getActiveElement: (ctx: {
13
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
14
- }) => HTMLElement | null;
15
- getById: <T extends HTMLElement = HTMLElement>(ctx: {
16
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
17
- }, id: string) => T | null;
18
- queryById: <T_1 extends HTMLElement = HTMLElement>(ctx: {
19
- getRootNode?: (() => Node | Document | ShadowRoot) | undefined;
20
- }, id: string) => T_1;
21
- } & {
22
- getRootId: (ctx: Ctx) => string;
23
- getImageId: (ctx: Ctx) => string;
24
- getFallbackId: (ctx: Ctx) => string;
25
- getRootEl: (ctx: Ctx) => HTMLElement | null;
26
- getImageEl: (ctx: Ctx) => HTMLImageElement | null;
27
- };
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const domQuery = require('@zag-js/dom-query');
6
-
7
- const dom = domQuery.createScope({
8
- getRootId: (ctx) => `avatar:${ctx.id}`,
9
- getImageId: (ctx) => `avatar:${ctx.id}:image`,
10
- getFallbackId: (ctx) => `avatar:${ctx.id}:fallback`,
11
- getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
12
- getImageEl: (ctx) => dom.getById(ctx, dom.getImageId(ctx))
13
- });
14
-
15
- exports.dom = dom;
@@ -1,11 +0,0 @@
1
- import { createScope } from '@zag-js/dom-query';
2
-
3
- const dom = createScope({
4
- getRootId: (ctx) => `avatar:${ctx.id}`,
5
- getImageId: (ctx) => `avatar:${ctx.id}:image`,
6
- getFallbackId: (ctx) => `avatar:${ctx.id}:fallback`,
7
- getRootEl: (ctx) => dom.getById(ctx, dom.getRootId(ctx)),
8
- getImageEl: (ctx) => dom.getById(ctx, dom.getImageId(ctx))
9
- });
10
-
11
- export { dom };
@@ -1,3 +0,0 @@
1
- import { Machine, StateMachine } from '@zag-js/core';
2
- import { MachineContext, MachineState, UserDefinedContext } from "./avatar.types";
3
- export declare function machine(userContext: UserDefinedContext): Machine<MachineContext, MachineState, StateMachine.AnyEventObject>;
@@ -1,98 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const core = require('@zag-js/core');
6
- const utils = require('@zag-js/utils');
7
- const mutationObserver = require('@zag-js/mutation-observer');
8
- const avatar_dom = require('./avatar.dom.js');
9
-
10
- function machine(userContext) {
11
- const ctx = utils.compact(userContext);
12
- return core.createMachine(
13
- {
14
- id: "avatar",
15
- initial: "loading",
16
- activities: ["trackImageRemoval"],
17
- context: ctx,
18
- on: {
19
- "SRC.CHANGE": {
20
- target: "loading"
21
- },
22
- "IMG.UNMOUNT": {
23
- target: "error"
24
- }
25
- },
26
- states: {
27
- loading: {
28
- activities: ["trackSrcChange"],
29
- entry: ["checkImgStatus"],
30
- on: {
31
- "IMG.LOADED": {
32
- target: "loaded",
33
- actions: ["invokeOnLoad"]
34
- },
35
- "IMG.ERROR": {
36
- target: "error",
37
- actions: ["invokeOnError"]
38
- }
39
- }
40
- },
41
- error: {
42
- activities: ["trackSrcChange"],
43
- on: {
44
- "IMG.LOADED": {
45
- target: "loaded",
46
- actions: ["invokeOnLoad"]
47
- }
48
- }
49
- },
50
- loaded: {
51
- activities: ["trackSrcChange"],
52
- on: {
53
- "IMG.ERROR": {
54
- target: "error",
55
- actions: ["invokeOnError"]
56
- }
57
- }
58
- }
59
- }
60
- },
61
- {
62
- activities: {
63
- trackSrcChange(ctx2, _evt, { send }) {
64
- const img = avatar_dom.dom.getImageEl(ctx2);
65
- return mutationObserver.observeAttributes(img, ["src", "srcset"], () => {
66
- send({ type: "SRC.CHANGE" });
67
- });
68
- },
69
- trackImageRemoval(ctx2, _evt, { send }) {
70
- const rootEl = avatar_dom.dom.getRootEl(ctx2);
71
- return mutationObserver.observeChildren(rootEl, (records) => {
72
- const removedNodes = Array.from(records[0].removedNodes);
73
- const removed = removedNodes.find((node) => node.matches("[data-scope=avatar][data-part=image]"));
74
- if (removed) {
75
- send({ type: "IMG.UNMOUNT" });
76
- }
77
- });
78
- }
79
- },
80
- actions: {
81
- invokeOnLoad(ctx2) {
82
- ctx2.onLoad?.();
83
- },
84
- invokeOnError(ctx2) {
85
- ctx2.onError?.();
86
- },
87
- checkImgStatus(ctx2, _evt, { send }) {
88
- const img = avatar_dom.dom.getImageEl(ctx2);
89
- if (img?.complete) {
90
- send({ type: "IMG.LOADED", src: "ssr" });
91
- }
92
- }
93
- }
94
- }
95
- );
96
- }
97
-
98
- exports.machine = machine;
@@ -1,94 +0,0 @@
1
- import { createMachine } from '@zag-js/core';
2
- import { compact } from '@zag-js/utils';
3
- import { observeAttributes, observeChildren } from '@zag-js/mutation-observer';
4
- import { dom } from './avatar.dom.mjs';
5
-
6
- function machine(userContext) {
7
- const ctx = compact(userContext);
8
- return createMachine(
9
- {
10
- id: "avatar",
11
- initial: "loading",
12
- activities: ["trackImageRemoval"],
13
- context: ctx,
14
- on: {
15
- "SRC.CHANGE": {
16
- target: "loading"
17
- },
18
- "IMG.UNMOUNT": {
19
- target: "error"
20
- }
21
- },
22
- states: {
23
- loading: {
24
- activities: ["trackSrcChange"],
25
- entry: ["checkImgStatus"],
26
- on: {
27
- "IMG.LOADED": {
28
- target: "loaded",
29
- actions: ["invokeOnLoad"]
30
- },
31
- "IMG.ERROR": {
32
- target: "error",
33
- actions: ["invokeOnError"]
34
- }
35
- }
36
- },
37
- error: {
38
- activities: ["trackSrcChange"],
39
- on: {
40
- "IMG.LOADED": {
41
- target: "loaded",
42
- actions: ["invokeOnLoad"]
43
- }
44
- }
45
- },
46
- loaded: {
47
- activities: ["trackSrcChange"],
48
- on: {
49
- "IMG.ERROR": {
50
- target: "error",
51
- actions: ["invokeOnError"]
52
- }
53
- }
54
- }
55
- }
56
- },
57
- {
58
- activities: {
59
- trackSrcChange(ctx2, _evt, { send }) {
60
- const img = dom.getImageEl(ctx2);
61
- return observeAttributes(img, ["src", "srcset"], () => {
62
- send({ type: "SRC.CHANGE" });
63
- });
64
- },
65
- trackImageRemoval(ctx2, _evt, { send }) {
66
- const rootEl = dom.getRootEl(ctx2);
67
- return observeChildren(rootEl, (records) => {
68
- const removedNodes = Array.from(records[0].removedNodes);
69
- const removed = removedNodes.find((node) => node.matches("[data-scope=avatar][data-part=image]"));
70
- if (removed) {
71
- send({ type: "IMG.UNMOUNT" });
72
- }
73
- });
74
- }
75
- },
76
- actions: {
77
- invokeOnLoad(ctx2) {
78
- ctx2.onLoad?.();
79
- },
80
- invokeOnError(ctx2) {
81
- ctx2.onError?.();
82
- },
83
- checkImgStatus(ctx2, _evt, { send }) {
84
- const img = dom.getImageEl(ctx2);
85
- if (img?.complete) {
86
- send({ type: "IMG.LOADED", src: "ssr" });
87
- }
88
- }
89
- }
90
- }
91
- );
92
- }
93
-
94
- export { machine };
@@ -1,16 +0,0 @@
1
- import type { StateMachine as S } from "@zag-js/core";
2
- import type { CommonProperties, Context, RequiredBy } from "@zag-js/types";
3
- type PublicContext = CommonProperties & {
4
- onLoad?: () => void;
5
- onError?: () => void;
6
- };
7
- type PrivateContext = Context<{}>;
8
- type ComputedContext = Readonly<{}>;
9
- export type UserDefinedContext = RequiredBy<PublicContext, "id">;
10
- export type MachineContext = PublicContext & PrivateContext & ComputedContext;
11
- export type MachineState = {
12
- value: "loading" | "error" | "loaded";
13
- };
14
- export type State = S.State<MachineContext, MachineState>;
15
- export type Send = S.Send<S.AnyEventObject>;
16
- export {};