@zag-js/avatar 0.70.0 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +19 -57
- package/dist/index.mjs +8 -21
- package/package.json +7 -8
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/src/avatar.anatomy.ts +0 -5
- package/src/avatar.connect.ts +0 -54
- package/src/avatar.dom.ts +0 -11
- package/src/avatar.machine.ts +0 -108
- package/src/avatar.props.ts +0 -6
- package/src/avatar.types.ts +0 -78
- package/src/index.ts +0 -12
package/dist/index.js
CHANGED
|
@@ -1,41 +1,15 @@
|
|
|
1
|
-
|
|
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);
|
|
1
|
+
'use strict';
|
|
19
2
|
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
machine: () => machine,
|
|
26
|
-
props: () => props,
|
|
27
|
-
splitProps: () => splitProps
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(src_exports);
|
|
3
|
+
var anatomy$1 = require('@zag-js/anatomy');
|
|
4
|
+
var domQuery = require('@zag-js/dom-query');
|
|
5
|
+
var core = require('@zag-js/core');
|
|
6
|
+
var utils = require('@zag-js/utils');
|
|
7
|
+
var types = require('@zag-js/types');
|
|
30
8
|
|
|
31
9
|
// src/avatar.anatomy.ts
|
|
32
|
-
var
|
|
33
|
-
var anatomy = (0, import_anatomy.createAnatomy)("avatar").parts("root", "image", "fallback");
|
|
10
|
+
var anatomy = anatomy$1.createAnatomy("avatar").parts("root", "image", "fallback");
|
|
34
11
|
var parts = anatomy.build();
|
|
35
|
-
|
|
36
|
-
// src/avatar.dom.ts
|
|
37
|
-
var import_dom_query = require("@zag-js/dom-query");
|
|
38
|
-
var dom = (0, import_dom_query.createScope)({
|
|
12
|
+
var dom = domQuery.createScope({
|
|
39
13
|
getRootId: (ctx) => ctx.ids?.root ?? `avatar:${ctx.id}`,
|
|
40
14
|
getImageId: (ctx) => ctx.ids?.image ?? `avatar:${ctx.id}:image`,
|
|
41
15
|
getFallbackId: (ctx) => ctx.ids?.fallback ?? `avatar:${ctx.id}:fallback`,
|
|
@@ -90,14 +64,9 @@ function connect(state, send, normalize) {
|
|
|
90
64
|
}
|
|
91
65
|
};
|
|
92
66
|
}
|
|
93
|
-
|
|
94
|
-
// src/avatar.machine.ts
|
|
95
|
-
var import_core = require("@zag-js/core");
|
|
96
|
-
var import_dom_query2 = require("@zag-js/dom-query");
|
|
97
|
-
var import_utils = require("@zag-js/utils");
|
|
98
67
|
function machine(userContext) {
|
|
99
|
-
const ctx =
|
|
100
|
-
return
|
|
68
|
+
const ctx = utils.compact(userContext);
|
|
69
|
+
return core.createMachine(
|
|
101
70
|
{
|
|
102
71
|
id: "avatar",
|
|
103
72
|
initial: "loading",
|
|
@@ -150,7 +119,7 @@ function machine(userContext) {
|
|
|
150
119
|
activities: {
|
|
151
120
|
trackSrcChange(ctx2, _evt, { send }) {
|
|
152
121
|
const imageEl = dom.getImageEl(ctx2);
|
|
153
|
-
return
|
|
122
|
+
return domQuery.observeAttributes(imageEl, {
|
|
154
123
|
attributes: ["src", "srcset"],
|
|
155
124
|
callback() {
|
|
156
125
|
send({ type: "SRC.CHANGE" });
|
|
@@ -159,7 +128,7 @@ function machine(userContext) {
|
|
|
159
128
|
},
|
|
160
129
|
trackImageRemoval(ctx2, _evt, { send }) {
|
|
161
130
|
const rootEl = dom.getRootEl(ctx2);
|
|
162
|
-
return
|
|
131
|
+
return domQuery.observeChildren(rootEl, {
|
|
163
132
|
callback(records) {
|
|
164
133
|
const removedNodes = Array.from(records[0].removedNodes);
|
|
165
134
|
const removed = removedNodes.find(
|
|
@@ -193,18 +162,11 @@ function machine(userContext) {
|
|
|
193
162
|
function hasLoaded(image) {
|
|
194
163
|
return image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0;
|
|
195
164
|
}
|
|
165
|
+
var props = types.createProps()(["dir", "id", "ids", "onStatusChange", "getRootNode"]);
|
|
166
|
+
var splitProps = utils.createSplitProps(props);
|
|
196
167
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
203
|
-
0 && (module.exports = {
|
|
204
|
-
anatomy,
|
|
205
|
-
connect,
|
|
206
|
-
machine,
|
|
207
|
-
props,
|
|
208
|
-
splitProps
|
|
209
|
-
});
|
|
210
|
-
//# sourceMappingURL=index.js.map
|
|
168
|
+
exports.anatomy = anatomy;
|
|
169
|
+
exports.connect = connect;
|
|
170
|
+
exports.machine = machine;
|
|
171
|
+
exports.props = props;
|
|
172
|
+
exports.splitProps = splitProps;
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { createAnatomy } from '@zag-js/anatomy';
|
|
2
|
+
import { createScope, observeAttributes, observeChildren } from '@zag-js/dom-query';
|
|
3
|
+
import { createMachine } from '@zag-js/core';
|
|
4
|
+
import { createSplitProps, compact } from '@zag-js/utils';
|
|
5
|
+
import { createProps } from '@zag-js/types';
|
|
6
|
+
|
|
1
7
|
// src/avatar.anatomy.ts
|
|
2
|
-
import { createAnatomy } from "@zag-js/anatomy";
|
|
3
8
|
var anatomy = createAnatomy("avatar").parts("root", "image", "fallback");
|
|
4
9
|
var parts = anatomy.build();
|
|
5
|
-
|
|
6
|
-
// src/avatar.dom.ts
|
|
7
|
-
import { createScope } from "@zag-js/dom-query";
|
|
8
10
|
var dom = createScope({
|
|
9
11
|
getRootId: (ctx) => ctx.ids?.root ?? `avatar:${ctx.id}`,
|
|
10
12
|
getImageId: (ctx) => ctx.ids?.image ?? `avatar:${ctx.id}:image`,
|
|
@@ -60,11 +62,6 @@ function connect(state, send, normalize) {
|
|
|
60
62
|
}
|
|
61
63
|
};
|
|
62
64
|
}
|
|
63
|
-
|
|
64
|
-
// src/avatar.machine.ts
|
|
65
|
-
import { createMachine } from "@zag-js/core";
|
|
66
|
-
import { observeAttributes, observeChildren } from "@zag-js/dom-query";
|
|
67
|
-
import { compact } from "@zag-js/utils";
|
|
68
65
|
function machine(userContext) {
|
|
69
66
|
const ctx = compact(userContext);
|
|
70
67
|
return createMachine(
|
|
@@ -163,17 +160,7 @@ function machine(userContext) {
|
|
|
163
160
|
function hasLoaded(image) {
|
|
164
161
|
return image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0;
|
|
165
162
|
}
|
|
166
|
-
|
|
167
|
-
// src/avatar.props.ts
|
|
168
|
-
import { createProps } from "@zag-js/types";
|
|
169
|
-
import { createSplitProps } from "@zag-js/utils";
|
|
170
163
|
var props = createProps()(["dir", "id", "ids", "onStatusChange", "getRootNode"]);
|
|
171
164
|
var splitProps = createSplitProps(props);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
connect,
|
|
175
|
-
machine,
|
|
176
|
-
props,
|
|
177
|
-
splitProps
|
|
178
|
-
};
|
|
179
|
-
//# sourceMappingURL=index.mjs.map
|
|
165
|
+
|
|
166
|
+
export { anatomy, connect, machine, props, splitProps };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/avatar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"description": "Core logic for the avatar widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
"repository": "https://github.com/chakra-ui/zag/tree/main/packages/avatar",
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"files": [
|
|
21
|
-
"dist"
|
|
22
|
-
"src"
|
|
21
|
+
"dist"
|
|
23
22
|
],
|
|
24
23
|
"publishConfig": {
|
|
25
24
|
"access": "public"
|
|
@@ -28,11 +27,11 @@
|
|
|
28
27
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
29
28
|
},
|
|
30
29
|
"dependencies": {
|
|
31
|
-
"@zag-js/anatomy": "0.
|
|
32
|
-
"@zag-js/core": "0.
|
|
33
|
-
"@zag-js/dom-query": "0.
|
|
34
|
-
"@zag-js/utils": "0.
|
|
35
|
-
"@zag-js/types": "0.
|
|
30
|
+
"@zag-js/anatomy": "0.71.0",
|
|
31
|
+
"@zag-js/core": "0.71.0",
|
|
32
|
+
"@zag-js/dom-query": "0.71.0",
|
|
33
|
+
"@zag-js/utils": "0.71.0",
|
|
34
|
+
"@zag-js/types": "0.71.0"
|
|
36
35
|
},
|
|
37
36
|
"devDependencies": {
|
|
38
37
|
"clean-package": "2.2.0"
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/avatar.anatomy.ts","../src/avatar.dom.ts","../src/avatar.connect.ts","../src/avatar.machine.ts","../src/avatar.props.ts"],"sourcesContent":["export { anatomy } from \"./avatar.anatomy\"\nexport { connect } from \"./avatar.connect\"\nexport { machine } from \"./avatar.machine\"\nexport * from \"./avatar.props\"\nexport type {\n MachineApi as Api,\n UserDefinedContext as Context,\n ElementIds,\n LoadStatus,\n StatusChangeDetails,\n Service,\n} 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 { createScope } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./avatar.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `avatar:${ctx.id}`,\n getImageId: (ctx: Ctx) => ctx.ids?.image ?? `avatar:${ctx.id}:image`,\n getFallbackId: (ctx: Ctx) => ctx.ids?.fallback ?? `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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./avatar.anatomy\"\nimport { dom } from \"./avatar.dom\"\nimport type { MachineApi, Send, State } from \"./avatar.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const loaded = state.matches(\"loaded\")\n return {\n loaded,\n setSrc(src) {\n send({ type: \"SRC.SET\", src })\n },\n setLoaded() {\n send({ type: \"IMG.LOADED\", src: \"api\" })\n },\n setError() {\n send({ type: \"IMG.ERROR\", src: \"api\" })\n },\n\n getRootProps() {\n return normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n })\n },\n\n getImageProps() {\n return normalize.img({\n ...parts.image.attrs,\n hidden: !loaded,\n dir: state.context.dir,\n id: dom.getImageId(state.context),\n \"data-state\": loaded ? \"visible\" : \"hidden\",\n onLoad() {\n send({ type: \"IMG.LOADED\", src: \"element\" })\n },\n onError() {\n send({ type: \"IMG.ERROR\", src: \"element\" })\n },\n })\n },\n\n getFallbackProps() {\n return normalize.element({\n ...parts.fallback.attrs,\n dir: state.context.dir,\n id: dom.getFallbackId(state.context),\n hidden: loaded,\n \"data-state\": loaded ? \"hidden\" : \"visible\",\n })\n },\n }\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { observeAttributes, observeChildren } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./avatar.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./avatar.types\"\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: [\"checkImageStatus\"],\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 imageEl = dom.getImageEl(ctx)\n return observeAttributes(imageEl, {\n attributes: [\"src\", \"srcset\"],\n callback() {\n send({ type: \"SRC.CHANGE\" })\n },\n })\n },\n trackImageRemoval(ctx, _evt, { send }) {\n const rootEl = dom.getRootEl(ctx)\n return observeChildren(rootEl, {\n callback(records) {\n const removedNodes = Array.from(records[0].removedNodes) as HTMLElement[]\n const removed = removedNodes.find(\n (node) => node.nodeType === Node.ELEMENT_NODE && node.matches(\"[data-scope=avatar][data-part=image]\"),\n )\n if (removed) {\n send({ type: \"IMG.UNMOUNT\" })\n }\n },\n })\n },\n },\n actions: {\n invokeOnLoad(ctx) {\n ctx.onStatusChange?.({ status: \"loaded\" })\n },\n invokeOnError(ctx) {\n ctx.onStatusChange?.({ status: \"error\" })\n },\n checkImageStatus(ctx, _evt, { send }) {\n const imageEl = dom.getImageEl(ctx)\n if (imageEl?.complete) {\n const type = hasLoaded(imageEl) ? \"IMG.LOADED\" : \"IMG.ERROR\"\n send({ type, src: \"ssr\" })\n }\n },\n },\n },\n )\n}\n\nfunction hasLoaded(image: HTMLImageElement) {\n return image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { UserDefinedContext } from \"./avatar.types\"\n\nexport const props = createProps<UserDefinedContext>()([\"dir\", \"id\", \"ids\", \"onStatusChange\", \"getRootNode\"])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n"],"mappings":"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","names":["import_dom_query","ctx","import_utils"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/avatar.anatomy.ts","../src/avatar.dom.ts","../src/avatar.connect.ts","../src/avatar.machine.ts","../src/avatar.props.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 { createScope } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./avatar.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `avatar:${ctx.id}`,\n getImageId: (ctx: Ctx) => ctx.ids?.image ?? `avatar:${ctx.id}:image`,\n getFallbackId: (ctx: Ctx) => ctx.ids?.fallback ?? `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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./avatar.anatomy\"\nimport { dom } from \"./avatar.dom\"\nimport type { MachineApi, Send, State } from \"./avatar.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {\n const loaded = state.matches(\"loaded\")\n return {\n loaded,\n setSrc(src) {\n send({ type: \"SRC.SET\", src })\n },\n setLoaded() {\n send({ type: \"IMG.LOADED\", src: \"api\" })\n },\n setError() {\n send({ type: \"IMG.ERROR\", src: \"api\" })\n },\n\n getRootProps() {\n return normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n })\n },\n\n getImageProps() {\n return normalize.img({\n ...parts.image.attrs,\n hidden: !loaded,\n dir: state.context.dir,\n id: dom.getImageId(state.context),\n \"data-state\": loaded ? \"visible\" : \"hidden\",\n onLoad() {\n send({ type: \"IMG.LOADED\", src: \"element\" })\n },\n onError() {\n send({ type: \"IMG.ERROR\", src: \"element\" })\n },\n })\n },\n\n getFallbackProps() {\n return normalize.element({\n ...parts.fallback.attrs,\n dir: state.context.dir,\n id: dom.getFallbackId(state.context),\n hidden: loaded,\n \"data-state\": loaded ? \"hidden\" : \"visible\",\n })\n },\n }\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { observeAttributes, observeChildren } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./avatar.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./avatar.types\"\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: [\"checkImageStatus\"],\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 imageEl = dom.getImageEl(ctx)\n return observeAttributes(imageEl, {\n attributes: [\"src\", \"srcset\"],\n callback() {\n send({ type: \"SRC.CHANGE\" })\n },\n })\n },\n trackImageRemoval(ctx, _evt, { send }) {\n const rootEl = dom.getRootEl(ctx)\n return observeChildren(rootEl, {\n callback(records) {\n const removedNodes = Array.from(records[0].removedNodes) as HTMLElement[]\n const removed = removedNodes.find(\n (node) => node.nodeType === Node.ELEMENT_NODE && node.matches(\"[data-scope=avatar][data-part=image]\"),\n )\n if (removed) {\n send({ type: \"IMG.UNMOUNT\" })\n }\n },\n })\n },\n },\n actions: {\n invokeOnLoad(ctx) {\n ctx.onStatusChange?.({ status: \"loaded\" })\n },\n invokeOnError(ctx) {\n ctx.onStatusChange?.({ status: \"error\" })\n },\n checkImageStatus(ctx, _evt, { send }) {\n const imageEl = dom.getImageEl(ctx)\n if (imageEl?.complete) {\n const type = hasLoaded(imageEl) ? \"IMG.LOADED\" : \"IMG.ERROR\"\n send({ type, src: \"ssr\" })\n }\n },\n },\n },\n )\n}\n\nfunction hasLoaded(image: HTMLImageElement) {\n return image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0\n}\n","import { createProps } from \"@zag-js/types\"\nimport { createSplitProps } from \"@zag-js/utils\"\nimport type { UserDefinedContext } from \"./avatar.types\"\n\nexport const props = createProps<UserDefinedContext>()([\"dir\", \"id\", \"ids\", \"onStatusChange\", \"getRootNode\"])\nexport const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)\n"],"mappings":";AAAA,SAAS,qBAAqB;AAEvB,IAAM,UAAU,cAAc,QAAQ,EAAE,MAAM,QAAQ,SAAS,UAAU;AAEzE,IAAM,QAAQ,QAAQ,MAAM;;;ACJnC,SAAS,mBAAmB;AAGrB,IAAM,MAAM,YAAY;AAAA,EAC7B,WAAW,CAAC,QAAa,IAAI,KAAK,QAAQ,UAAU,IAAI,EAAE;AAAA,EAC1D,YAAY,CAAC,QAAa,IAAI,KAAK,SAAS,UAAU,IAAI,EAAE;AAAA,EAC5D,eAAe,CAAC,QAAa,IAAI,KAAK,YAAY,UAAU,IAAI,EAAE;AAAA,EAElE,WAAW,CAAC,QAAa,IAAI,QAAQ,KAAK,IAAI,UAAU,GAAG,CAAC;AAAA,EAC5D,YAAY,CAAC,QAAa,IAAI,QAA0B,KAAK,IAAI,WAAW,GAAG,CAAC;AAClF,CAAC;;;ACLM,SAAS,QAA6B,OAAc,MAAY,WAA6C;AAClH,QAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,SAAO;AAAA,IACL;AAAA,IACA,OAAO,KAAK;AACV,WAAK,EAAE,MAAM,WAAW,IAAI,CAAC;AAAA,IAC/B;AAAA,IACA,YAAY;AACV,WAAK,EAAE,MAAM,cAAc,KAAK,MAAM,CAAC;AAAA,IACzC;AAAA,IACA,WAAW;AACT,WAAK,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC;AAAA,IACxC;AAAA,IAEA,eAAe;AACb,aAAO,UAAU,QAAQ;AAAA,QACvB,GAAG,MAAM,KAAK;AAAA,QACd,KAAK,MAAM,QAAQ;AAAA,QACnB,IAAI,IAAI,UAAU,MAAM,OAAO;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB;AACd,aAAO,UAAU,IAAI;AAAA,QACnB,GAAG,MAAM,MAAM;AAAA,QACf,QAAQ,CAAC;AAAA,QACT,KAAK,MAAM,QAAQ;AAAA,QACnB,IAAI,IAAI,WAAW,MAAM,OAAO;AAAA,QAChC,cAAc,SAAS,YAAY;AAAA,QACnC,SAAS;AACP,eAAK,EAAE,MAAM,cAAc,KAAK,UAAU,CAAC;AAAA,QAC7C;AAAA,QACA,UAAU;AACR,eAAK,EAAE,MAAM,aAAa,KAAK,UAAU,CAAC;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB;AACjB,aAAO,UAAU,QAAQ;AAAA,QACvB,GAAG,MAAM,SAAS;AAAA,QAClB,KAAK,MAAM,QAAQ;AAAA,QACnB,IAAI,IAAI,cAAc,MAAM,OAAO;AAAA,QACnC,QAAQ;AAAA,QACR,cAAc,SAAS,WAAW;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACrDA,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB,uBAAuB;AACnD,SAAS,eAAe;AAIjB,SAAS,QAAQ,aAAiC;AACvD,QAAM,MAAM,QAAQ,WAAW;AAC/B,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,YAAY,CAAC,mBAAmB;AAAA,MAEhC,SAAS;AAAA,MAET,IAAI;AAAA,QACF,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,QACA,eAAe;AAAA,UACb,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MAEA,QAAQ;AAAA,QACN,SAAS;AAAA,UACP,YAAY,CAAC,gBAAgB;AAAA,UAC7B,OAAO,CAAC,kBAAkB;AAAA,UAC1B,IAAI;AAAA,YACF,cAAc;AAAA,cACZ,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc;AAAA,YAC1B;AAAA,YACA,aAAa;AAAA,cACX,QAAQ;AAAA,cACR,SAAS,CAAC,eAAe;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,YAAY,CAAC,gBAAgB;AAAA,UAC7B,IAAI;AAAA,YACF,cAAc;AAAA,cACZ,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,YAAY,CAAC,gBAAgB;AAAA,UAC7B,IAAI;AAAA,YACF,aAAa;AAAA,cACX,QAAQ;AAAA,cACR,SAAS,CAAC,eAAe;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,YAAY;AAAA,QACV,eAAeA,MAAK,MAAM,EAAE,KAAK,GAAG;AAClC,gBAAM,UAAU,IAAI,WAAWA,IAAG;AAClC,iBAAO,kBAAkB,SAAS;AAAA,YAChC,YAAY,CAAC,OAAO,QAAQ;AAAA,YAC5B,WAAW;AACT,mBAAK,EAAE,MAAM,aAAa,CAAC;AAAA,YAC7B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,kBAAkBA,MAAK,MAAM,EAAE,KAAK,GAAG;AACrC,gBAAM,SAAS,IAAI,UAAUA,IAAG;AAChC,iBAAO,gBAAgB,QAAQ;AAAA,YAC7B,SAAS,SAAS;AAChB,oBAAM,eAAe,MAAM,KAAK,QAAQ,CAAC,EAAE,YAAY;AACvD,oBAAM,UAAU,aAAa;AAAA,gBAC3B,CAAC,SAAS,KAAK,aAAa,KAAK,gBAAgB,KAAK,QAAQ,sCAAsC;AAAA,cACtG;AACA,kBAAI,SAAS;AACX,qBAAK,EAAE,MAAM,cAAc,CAAC;AAAA,cAC9B;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,aAAaA,MAAK;AAChB,UAAAA,KAAI,iBAAiB,EAAE,QAAQ,SAAS,CAAC;AAAA,QAC3C;AAAA,QACA,cAAcA,MAAK;AACjB,UAAAA,KAAI,iBAAiB,EAAE,QAAQ,QAAQ,CAAC;AAAA,QAC1C;AAAA,QACA,iBAAiBA,MAAK,MAAM,EAAE,KAAK,GAAG;AACpC,gBAAM,UAAU,IAAI,WAAWA,IAAG;AAClC,cAAI,SAAS,UAAU;AACrB,kBAAM,OAAO,UAAU,OAAO,IAAI,eAAe;AACjD,iBAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UAAU,OAAyB;AAC1C,SAAO,MAAM,YAAY,MAAM,iBAAiB,KAAK,MAAM,kBAAkB;AAC/E;;;AC3GA,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAG1B,IAAM,QAAQ,YAAgC,EAAE,CAAC,OAAO,MAAM,OAAO,kBAAkB,aAAa,CAAC;AACrG,IAAM,aAAa,iBAA8C,KAAK;","names":["ctx"]}
|
package/src/avatar.anatomy.ts
DELETED
package/src/avatar.connect.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { NormalizeProps, PropTypes } from "@zag-js/types"
|
|
2
|
-
import { parts } from "./avatar.anatomy"
|
|
3
|
-
import { dom } from "./avatar.dom"
|
|
4
|
-
import type { MachineApi, Send, State } from "./avatar.types"
|
|
5
|
-
|
|
6
|
-
export function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<T> {
|
|
7
|
-
const loaded = state.matches("loaded")
|
|
8
|
-
return {
|
|
9
|
-
loaded,
|
|
10
|
-
setSrc(src) {
|
|
11
|
-
send({ type: "SRC.SET", src })
|
|
12
|
-
},
|
|
13
|
-
setLoaded() {
|
|
14
|
-
send({ type: "IMG.LOADED", src: "api" })
|
|
15
|
-
},
|
|
16
|
-
setError() {
|
|
17
|
-
send({ type: "IMG.ERROR", src: "api" })
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
getRootProps() {
|
|
21
|
-
return normalize.element({
|
|
22
|
-
...parts.root.attrs,
|
|
23
|
-
dir: state.context.dir,
|
|
24
|
-
id: dom.getRootId(state.context),
|
|
25
|
-
})
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
getImageProps() {
|
|
29
|
-
return normalize.img({
|
|
30
|
-
...parts.image.attrs,
|
|
31
|
-
hidden: !loaded,
|
|
32
|
-
dir: state.context.dir,
|
|
33
|
-
id: dom.getImageId(state.context),
|
|
34
|
-
"data-state": loaded ? "visible" : "hidden",
|
|
35
|
-
onLoad() {
|
|
36
|
-
send({ type: "IMG.LOADED", src: "element" })
|
|
37
|
-
},
|
|
38
|
-
onError() {
|
|
39
|
-
send({ type: "IMG.ERROR", src: "element" })
|
|
40
|
-
},
|
|
41
|
-
})
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
getFallbackProps() {
|
|
45
|
-
return normalize.element({
|
|
46
|
-
...parts.fallback.attrs,
|
|
47
|
-
dir: state.context.dir,
|
|
48
|
-
id: dom.getFallbackId(state.context),
|
|
49
|
-
hidden: loaded,
|
|
50
|
-
"data-state": loaded ? "hidden" : "visible",
|
|
51
|
-
})
|
|
52
|
-
},
|
|
53
|
-
}
|
|
54
|
-
}
|
package/src/avatar.dom.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createScope } from "@zag-js/dom-query"
|
|
2
|
-
import type { MachineContext as Ctx } from "./avatar.types"
|
|
3
|
-
|
|
4
|
-
export const dom = createScope({
|
|
5
|
-
getRootId: (ctx: Ctx) => ctx.ids?.root ?? `avatar:${ctx.id}`,
|
|
6
|
-
getImageId: (ctx: Ctx) => ctx.ids?.image ?? `avatar:${ctx.id}:image`,
|
|
7
|
-
getFallbackId: (ctx: Ctx) => ctx.ids?.fallback ?? `avatar:${ctx.id}:fallback`,
|
|
8
|
-
|
|
9
|
-
getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),
|
|
10
|
-
getImageEl: (ctx: Ctx) => dom.getById<HTMLImageElement>(ctx, dom.getImageId(ctx)),
|
|
11
|
-
})
|
package/src/avatar.machine.ts
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { createMachine } from "@zag-js/core"
|
|
2
|
-
import { observeAttributes, observeChildren } from "@zag-js/dom-query"
|
|
3
|
-
import { compact } from "@zag-js/utils"
|
|
4
|
-
import { dom } from "./avatar.dom"
|
|
5
|
-
import type { MachineContext, MachineState, UserDefinedContext } from "./avatar.types"
|
|
6
|
-
|
|
7
|
-
export function machine(userContext: UserDefinedContext) {
|
|
8
|
-
const ctx = compact(userContext)
|
|
9
|
-
return createMachine<MachineContext, MachineState>(
|
|
10
|
-
{
|
|
11
|
-
id: "avatar",
|
|
12
|
-
initial: "loading",
|
|
13
|
-
activities: ["trackImageRemoval"],
|
|
14
|
-
|
|
15
|
-
context: ctx,
|
|
16
|
-
|
|
17
|
-
on: {
|
|
18
|
-
"SRC.CHANGE": {
|
|
19
|
-
target: "loading",
|
|
20
|
-
},
|
|
21
|
-
"IMG.UNMOUNT": {
|
|
22
|
-
target: "error",
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
states: {
|
|
27
|
-
loading: {
|
|
28
|
-
activities: ["trackSrcChange"],
|
|
29
|
-
entry: ["checkImageStatus"],
|
|
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(ctx, _evt, { send }) {
|
|
64
|
-
const imageEl = dom.getImageEl(ctx)
|
|
65
|
-
return observeAttributes(imageEl, {
|
|
66
|
-
attributes: ["src", "srcset"],
|
|
67
|
-
callback() {
|
|
68
|
-
send({ type: "SRC.CHANGE" })
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
},
|
|
72
|
-
trackImageRemoval(ctx, _evt, { send }) {
|
|
73
|
-
const rootEl = dom.getRootEl(ctx)
|
|
74
|
-
return observeChildren(rootEl, {
|
|
75
|
-
callback(records) {
|
|
76
|
-
const removedNodes = Array.from(records[0].removedNodes) as HTMLElement[]
|
|
77
|
-
const removed = removedNodes.find(
|
|
78
|
-
(node) => node.nodeType === Node.ELEMENT_NODE && node.matches("[data-scope=avatar][data-part=image]"),
|
|
79
|
-
)
|
|
80
|
-
if (removed) {
|
|
81
|
-
send({ type: "IMG.UNMOUNT" })
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
})
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
actions: {
|
|
88
|
-
invokeOnLoad(ctx) {
|
|
89
|
-
ctx.onStatusChange?.({ status: "loaded" })
|
|
90
|
-
},
|
|
91
|
-
invokeOnError(ctx) {
|
|
92
|
-
ctx.onStatusChange?.({ status: "error" })
|
|
93
|
-
},
|
|
94
|
-
checkImageStatus(ctx, _evt, { send }) {
|
|
95
|
-
const imageEl = dom.getImageEl(ctx)
|
|
96
|
-
if (imageEl?.complete) {
|
|
97
|
-
const type = hasLoaded(imageEl) ? "IMG.LOADED" : "IMG.ERROR"
|
|
98
|
-
send({ type, src: "ssr" })
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function hasLoaded(image: HTMLImageElement) {
|
|
107
|
-
return image.complete && image.naturalWidth !== 0 && image.naturalHeight !== 0
|
|
108
|
-
}
|
package/src/avatar.props.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createProps } from "@zag-js/types"
|
|
2
|
-
import { createSplitProps } from "@zag-js/utils"
|
|
3
|
-
import type { UserDefinedContext } from "./avatar.types"
|
|
4
|
-
|
|
5
|
-
export const props = createProps<UserDefinedContext>()(["dir", "id", "ids", "onStatusChange", "getRootNode"])
|
|
6
|
-
export const splitProps = createSplitProps<Partial<UserDefinedContext>>(props)
|
package/src/avatar.types.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import type { Machine, StateMachine as S } from "@zag-js/core"
|
|
2
|
-
import type { CommonProperties, DirectionProperty, PropTypes, RequiredBy } from "@zag-js/types"
|
|
3
|
-
|
|
4
|
-
/* -----------------------------------------------------------------------------
|
|
5
|
-
* Callback details
|
|
6
|
-
* -----------------------------------------------------------------------------*/
|
|
7
|
-
|
|
8
|
-
export type LoadStatus = "error" | "loaded"
|
|
9
|
-
|
|
10
|
-
export interface StatusChangeDetails {
|
|
11
|
-
status: LoadStatus
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type ElementIds = Partial<{
|
|
15
|
-
root: string
|
|
16
|
-
image: string
|
|
17
|
-
fallback: string
|
|
18
|
-
}>
|
|
19
|
-
|
|
20
|
-
/* -----------------------------------------------------------------------------
|
|
21
|
-
* Machine context
|
|
22
|
-
* -----------------------------------------------------------------------------*/
|
|
23
|
-
|
|
24
|
-
interface PublicContext extends CommonProperties, DirectionProperty {
|
|
25
|
-
/**
|
|
26
|
-
* Functional called when the image loading status changes.
|
|
27
|
-
*/
|
|
28
|
-
onStatusChange?: (details: StatusChangeDetails) => void
|
|
29
|
-
/**
|
|
30
|
-
* The ids of the elements in the avatar. Useful for composition.
|
|
31
|
-
*/
|
|
32
|
-
ids?: ElementIds
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
interface PrivateContext {}
|
|
36
|
-
|
|
37
|
-
type ComputedContext = Readonly<{}>
|
|
38
|
-
|
|
39
|
-
export type UserDefinedContext = RequiredBy<PublicContext, "id">
|
|
40
|
-
|
|
41
|
-
export interface MachineContext extends PublicContext, PrivateContext, ComputedContext {}
|
|
42
|
-
|
|
43
|
-
export interface MachineState {
|
|
44
|
-
value: "loading" | "error" | "loaded"
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export type State = S.State<MachineContext, MachineState>
|
|
48
|
-
|
|
49
|
-
export type Send = S.Send<S.AnyEventObject>
|
|
50
|
-
|
|
51
|
-
export type Service = Machine<MachineContext, MachineState, S.AnyEventObject>
|
|
52
|
-
|
|
53
|
-
/* -----------------------------------------------------------------------------
|
|
54
|
-
* Component API
|
|
55
|
-
* -----------------------------------------------------------------------------*/
|
|
56
|
-
|
|
57
|
-
export interface MachineApi<T extends PropTypes = PropTypes> {
|
|
58
|
-
/**
|
|
59
|
-
* Whether the image is loaded.
|
|
60
|
-
*/
|
|
61
|
-
loaded: boolean
|
|
62
|
-
/**
|
|
63
|
-
* Function to set new src.
|
|
64
|
-
*/
|
|
65
|
-
setSrc(src: string): void
|
|
66
|
-
/**
|
|
67
|
-
* Function to set loaded state.
|
|
68
|
-
*/
|
|
69
|
-
setLoaded(): void
|
|
70
|
-
/**
|
|
71
|
-
* Function to set error state.
|
|
72
|
-
*/
|
|
73
|
-
setError(): void
|
|
74
|
-
|
|
75
|
-
getRootProps(): T["element"]
|
|
76
|
-
getImageProps(): T["img"]
|
|
77
|
-
getFallbackProps(): T["element"]
|
|
78
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export { anatomy } from "./avatar.anatomy"
|
|
2
|
-
export { connect } from "./avatar.connect"
|
|
3
|
-
export { machine } from "./avatar.machine"
|
|
4
|
-
export * from "./avatar.props"
|
|
5
|
-
export type {
|
|
6
|
-
MachineApi as Api,
|
|
7
|
-
UserDefinedContext as Context,
|
|
8
|
-
ElementIds,
|
|
9
|
-
LoadStatus,
|
|
10
|
-
StatusChangeDetails,
|
|
11
|
-
Service,
|
|
12
|
-
} from "./avatar.types"
|