@studiometa/ui 1.0.0-rc.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AnchorScrollTo/AnchorScrollTo.d.ts +2 -2
- package/AnchorScrollTo/AnchorScrollTo.js +0 -1
- package/AnchorScrollTo/AnchorScrollTo.js.map +2 -2
- package/Button/Button.twig +12 -9
- package/Button/StyledButton.twig +40 -5
- package/Button/StyledButtonRounded.twig +12 -42
- package/Data/DataBind.js +1 -1
- package/Data/DataBind.js.map +2 -2
- package/Draggable/Draggable.js +7 -2
- package/Draggable/Draggable.js.map +2 -2
- package/Figure/Figure.d.ts +1 -0
- package/Figure/Figure.js.map +2 -2
- package/Frame/AbstractFrameTrigger.d.ts +43 -0
- package/Frame/AbstractFrameTrigger.js +72 -0
- package/Frame/AbstractFrameTrigger.js.map +7 -0
- package/Frame/Frame.d.ts +55 -27
- package/Frame/Frame.js +132 -138
- package/Frame/Frame.js.map +3 -3
- package/Frame/FrameAnchor.d.ts +7 -4
- package/Frame/FrameAnchor.js +8 -5
- package/Frame/FrameAnchor.js.map +2 -2
- package/Frame/FrameForm.d.ts +22 -4
- package/Frame/FrameForm.js +43 -6
- package/Frame/FrameForm.js.map +2 -2
- package/Frame/FrameLoader.d.ts +22 -0
- package/Frame/FrameLoader.js +22 -0
- package/Frame/FrameLoader.js.map +7 -0
- package/Frame/FrameTarget.d.ts +6 -17
- package/Frame/FrameTarget.js +25 -60
- package/Frame/FrameTarget.js.map +2 -2
- package/Frame/FrameTriggerLoader.d.ts +13 -0
- package/Frame/FrameTriggerLoader.js +13 -0
- package/Frame/FrameTriggerLoader.js.map +7 -0
- package/Frame/index.d.ts +4 -0
- package/Frame/index.js +4 -0
- package/Frame/index.js.map +2 -2
- package/Frame/types.d.ts +12 -0
- package/Frame/types.js +1 -0
- package/Frame/types.js.map +7 -0
- package/Frame/utils.d.ts +9 -0
- package/Frame/utils.js +13 -0
- package/Frame/utils.js.map +7 -0
- package/Slider/AbstractSliderChild.d.ts +5 -9
- package/Slider/AbstractSliderChild.js +0 -11
- package/Slider/AbstractSliderChild.js.map +2 -2
- package/Slider/Slider.d.ts +23 -30
- package/Slider/Slider.js +40 -100
- package/Slider/Slider.js.map +2 -2
- package/Slider/SliderBtn.d.ts +0 -3
- package/Slider/SliderBtn.js +3 -7
- package/Slider/SliderBtn.js.map +2 -2
- package/Slider/SliderCount.d.ts +0 -2
- package/Slider/SliderCount.js +4 -3
- package/Slider/SliderCount.js.map +2 -2
- package/Slider/SliderDots.d.ts +0 -3
- package/Slider/SliderDots.js +6 -7
- package/Slider/SliderDots.js.map +2 -2
- package/Slider/SliderDrag.d.ts +0 -2
- package/Slider/SliderDrag.js +0 -2
- package/Slider/SliderDrag.js.map +2 -2
- package/Slider/SliderItem.d.ts +10 -26
- package/Slider/SliderItem.js +9 -41
- package/Slider/SliderItem.js.map +2 -2
- package/decorators/withTransition.d.ts +4 -0
- package/decorators/withTransition.js +40 -45
- package/decorators/withTransition.js.map +2 -2
- package/package.json +4 -3
package/Frame/Frame.js
CHANGED
|
@@ -1,41 +1,46 @@
|
|
|
1
|
-
import { Base,
|
|
2
|
-
import {
|
|
1
|
+
import { Base, getClosestParent } from "@studiometa/js-toolkit";
|
|
2
|
+
import { domScheduler, historyPush } from "@studiometa/js-toolkit/utils";
|
|
3
3
|
import { FrameAnchor } from "./FrameAnchor.js";
|
|
4
4
|
import { FrameForm } from "./FrameForm.js";
|
|
5
5
|
import { FrameTarget } from "./FrameTarget.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
left: window.pageXOffset,
|
|
9
|
-
top: window.pageYOffset
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
const cache = /* @__PURE__ */ new Map();
|
|
6
|
+
import { FrameLoader } from "./FrameLoader.js";
|
|
7
|
+
import { EVENTS } from "./utils.js";
|
|
13
8
|
class Frame extends Base {
|
|
14
9
|
/**
|
|
15
10
|
* Config.
|
|
16
11
|
*/
|
|
17
12
|
static config = {
|
|
18
13
|
name: "Frame",
|
|
19
|
-
emits:
|
|
20
|
-
"before-fetch",
|
|
21
|
-
"after-fetch",
|
|
22
|
-
"before-leave",
|
|
23
|
-
"after-leave",
|
|
24
|
-
"before-content",
|
|
25
|
-
"after-content",
|
|
26
|
-
"before-enter",
|
|
27
|
-
"after-enter"
|
|
28
|
-
],
|
|
14
|
+
emits: Object.values(EVENTS),
|
|
29
15
|
components: {
|
|
30
16
|
FrameAnchor,
|
|
31
17
|
FrameForm,
|
|
32
18
|
FrameTarget,
|
|
33
|
-
|
|
19
|
+
FrameLoader
|
|
34
20
|
},
|
|
35
21
|
options: {
|
|
36
|
-
history: Boolean
|
|
22
|
+
history: Boolean,
|
|
23
|
+
requestInit: Object,
|
|
24
|
+
headers: Object
|
|
37
25
|
}
|
|
38
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* DOM Parser to parse the new content to be injected.
|
|
29
|
+
*/
|
|
30
|
+
domParser = new DOMParser();
|
|
31
|
+
/**
|
|
32
|
+
* Abort controller to prevent multiple simultaneous fetches.
|
|
33
|
+
*/
|
|
34
|
+
abortController = new AbortController();
|
|
35
|
+
/**
|
|
36
|
+
* Header names.
|
|
37
|
+
*/
|
|
38
|
+
headerNames = {
|
|
39
|
+
ACCEPT: "accept",
|
|
40
|
+
X_REQUESTED_BY: "x-requested-by",
|
|
41
|
+
X_TRIGGERED_BY: "x-triggered-by",
|
|
42
|
+
USER_AGENT: "user-agent"
|
|
43
|
+
};
|
|
39
44
|
/**
|
|
40
45
|
* Get uniq id.
|
|
41
46
|
*/
|
|
@@ -43,151 +48,140 @@ class Frame extends Base {
|
|
|
43
48
|
return this.$el.id;
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
46
|
-
*
|
|
51
|
+
* The client used for the fetch request.
|
|
47
52
|
*/
|
|
48
|
-
get
|
|
49
|
-
return
|
|
53
|
+
get client() {
|
|
54
|
+
return window.fetch.bind(window);
|
|
50
55
|
}
|
|
51
56
|
/**
|
|
52
|
-
*
|
|
57
|
+
* Default request init.
|
|
53
58
|
*/
|
|
54
|
-
|
|
55
|
-
const {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
get requestInit() {
|
|
60
|
+
const { headerNames } = this;
|
|
61
|
+
const { requestInit, headers } = this.$options;
|
|
62
|
+
const requestedBy = "@studiometa/ui/Frame";
|
|
63
|
+
return {
|
|
64
|
+
...requestInit,
|
|
65
|
+
headers: {
|
|
66
|
+
[headerNames.ACCEPT]: "text/*",
|
|
67
|
+
[headerNames.X_REQUESTED_BY]: requestedBy,
|
|
68
|
+
[headerNames.USER_AGENT]: `${navigator.userAgent} ${requestedBy}`,
|
|
69
|
+
...requestInit.headers,
|
|
70
|
+
...headers
|
|
71
|
+
}
|
|
72
|
+
};
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
|
-
*
|
|
75
|
+
* Get chidlren limited to the current instance.
|
|
69
76
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
77
|
+
getDirectChildren(name) {
|
|
78
|
+
const children = [];
|
|
79
|
+
for (const child of this.$children[name]) {
|
|
80
|
+
if (getClosestParent(child, this.constructor) === this) {
|
|
81
|
+
children.push(child);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return children;
|
|
72
85
|
}
|
|
73
86
|
/**
|
|
74
|
-
*
|
|
87
|
+
* Fetch new content on frame-trigger.
|
|
75
88
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this.$log("onAFrameClick", target, event);
|
|
81
|
-
event.preventDefault();
|
|
82
|
-
if (target.href === window.location.href) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
this.goTo(target.href);
|
|
89
|
+
onFrameAnchorFrameTrigger({ args: [url, requestInit] }) {
|
|
90
|
+
this.fetch(url, requestInit);
|
|
86
91
|
}
|
|
87
92
|
/**
|
|
88
|
-
*
|
|
93
|
+
* Fetch new content on frame-trigger.
|
|
89
94
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
this.$log("onFrameFormFrameSubmit", target, event);
|
|
95
|
-
event.preventDefault();
|
|
96
|
-
const url = new URL(target.action);
|
|
97
|
-
if (target.$el.method === "get") {
|
|
98
|
-
url.search = new URLSearchParams(new FormData(target.$el)).toString();
|
|
99
|
-
this.goTo(url.toString());
|
|
100
|
-
}
|
|
101
|
-
if (target.$el.method === "post") {
|
|
102
|
-
this.goTo(url.toString(), new FormData(target.$el));
|
|
103
|
-
}
|
|
95
|
+
onFrameFormFrameTrigger({ args: [url, requestInit] }) {
|
|
96
|
+
this.fetch(url, requestInit);
|
|
104
97
|
}
|
|
105
98
|
/**
|
|
106
|
-
*
|
|
99
|
+
* Update content on history back/forward navigation.
|
|
107
100
|
*/
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
onWindowPopstate() {
|
|
102
|
+
this.fetch(new URL(window.location.href), {
|
|
103
|
+
headers: {
|
|
104
|
+
[this.headerNames.X_TRIGGERED_BY]: "popstate"
|
|
105
|
+
}
|
|
106
|
+
});
|
|
110
107
|
}
|
|
111
108
|
/**
|
|
112
|
-
*
|
|
109
|
+
* Trigger FrameLoaders enter.
|
|
113
110
|
*/
|
|
114
|
-
|
|
115
|
-
this
|
|
116
|
-
|
|
117
|
-
if (parsedUrl.origin !== window.location.origin) {
|
|
118
|
-
throw new Error("Cross origin request are not allowed.");
|
|
119
|
-
}
|
|
120
|
-
this.$emit("before-fetch", url);
|
|
121
|
-
const content = await this.fetch(url, formData);
|
|
122
|
-
const doc = this.parseHTML(content);
|
|
123
|
-
const el = doc.querySelector(`#${this.id}`);
|
|
124
|
-
const newFrame = new Frame(el);
|
|
125
|
-
newFrame.__children.registerAll();
|
|
126
|
-
this.$emit("after-fetch", url, content);
|
|
127
|
-
this.$emit("before-leave");
|
|
128
|
-
await Promise.all(this.directChildrenFrameTarget.map((target) => target.leave()));
|
|
129
|
-
this.$emit("after-leave");
|
|
130
|
-
this.$emit("before-content");
|
|
131
|
-
this.directChildrenFrameTarget.map(
|
|
132
|
-
(target, index) => target.updateContent(newFrame.directChildrenFrameTarget[index])
|
|
133
|
-
);
|
|
134
|
-
if (this.$options.history && formData === null) {
|
|
135
|
-
document.title = doc.title;
|
|
136
|
-
historyPush({ path: parsedUrl.pathname, search: parsedUrl.searchParams });
|
|
111
|
+
onFrameFetchBefore() {
|
|
112
|
+
for (const loader of this.getDirectChildren("FrameLoader")) {
|
|
113
|
+
loader.enter();
|
|
137
114
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Trigger FrameLoaders leave.
|
|
118
|
+
*/
|
|
119
|
+
onFrameFetchAfter() {
|
|
120
|
+
for (const loader of this.getDirectChildren("FrameLoader")) {
|
|
121
|
+
loader.leave();
|
|
141
122
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.$emit("before-enter");
|
|
147
|
-
await Promise.all(this.directChildrenFrameTarget.map((target) => target.enter()));
|
|
148
|
-
this.$emit("after-enter");
|
|
123
|
+
}
|
|
124
|
+
emitSync(event, trigger = null, ...args) {
|
|
125
|
+
this.$emit(event, ...args);
|
|
126
|
+
trigger?.$emit(event, ...args);
|
|
149
127
|
}
|
|
150
128
|
/**
|
|
151
|
-
* Fetch
|
|
129
|
+
* Fetch given url.
|
|
152
130
|
*/
|
|
153
|
-
async fetch(url,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
131
|
+
async fetch(url, requestInit = {}) {
|
|
132
|
+
this.emitSync(EVENTS.FETCH_BEFORE, requestInit.trigger, url, requestInit);
|
|
133
|
+
this.abortController.abort();
|
|
134
|
+
this.abortController = new AbortController();
|
|
135
|
+
const init = {
|
|
136
|
+
...this.requestInit,
|
|
137
|
+
...requestInit,
|
|
138
|
+
headers: {
|
|
139
|
+
...this.requestInit.headers,
|
|
140
|
+
...requestInit.headers
|
|
141
|
+
},
|
|
142
|
+
signal: this.abortController.signal
|
|
143
|
+
};
|
|
144
|
+
this.$log("fetch", url, init);
|
|
145
|
+
this.emitSync(EVENTS.FETCH, init.trigger, url, init);
|
|
146
|
+
try {
|
|
147
|
+
const content = await this.client(url, init).then((response) => response.text());
|
|
148
|
+
this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, content);
|
|
149
|
+
this.content(url, init, content);
|
|
150
|
+
} catch (error) {
|
|
151
|
+
this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, error);
|
|
152
|
+
this.error(url, init, error);
|
|
161
153
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Dispatch the contents to update to their matching FrameTarget.
|
|
157
|
+
*/
|
|
158
|
+
async content(url, requestInit, content) {
|
|
159
|
+
this.$log("content", url, content);
|
|
160
|
+
this.emitSync(EVENTS.CONTENT, requestInit.trigger, url, requestInit, content);
|
|
161
|
+
const doc = this.domParser.parseFromString(content, "text/html");
|
|
162
|
+
const el = doc.querySelector(`#${this.id}`) ?? doc;
|
|
163
|
+
const promises = [];
|
|
164
|
+
if (this.$options.history) {
|
|
165
|
+
if (requestInit?.headers?.[this.headerNames.X_TRIGGERED_BY] !== "popstate") {
|
|
166
|
+
historyPush({ path: url.pathname, search: url.searchParams });
|
|
166
167
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const promise = fetch(url).then((response) => response.text());
|
|
170
|
-
try {
|
|
171
|
-
cache.set(url, {
|
|
172
|
-
promise,
|
|
173
|
-
status: "pending",
|
|
174
|
-
content: void 0
|
|
175
|
-
});
|
|
176
|
-
const content = await promise;
|
|
177
|
-
cache.set(url, {
|
|
178
|
-
promise,
|
|
179
|
-
status: "resolved",
|
|
180
|
-
content
|
|
181
|
-
});
|
|
182
|
-
return content;
|
|
183
|
-
} catch (err) {
|
|
184
|
-
cache.set(url, {
|
|
185
|
-
promise,
|
|
186
|
-
status: "error",
|
|
187
|
-
content: err
|
|
168
|
+
domScheduler.write(() => {
|
|
169
|
+
if (doc.title) document.title = doc.title;
|
|
188
170
|
});
|
|
189
|
-
return err;
|
|
190
171
|
}
|
|
172
|
+
for (const frameTarget of this.getDirectChildren("FrameTarget")) {
|
|
173
|
+
promises.push(frameTarget.updateContent(el.querySelector(`#${frameTarget.id}`)));
|
|
174
|
+
}
|
|
175
|
+
await Promise.all(promises);
|
|
176
|
+
this.emitSync(EVENTS.CONTENT_AFTER, requestInit.trigger, url, requestInit, content);
|
|
177
|
+
await this.$root.$update();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Handle errors.
|
|
181
|
+
*/
|
|
182
|
+
async error(url, requestInit, error) {
|
|
183
|
+
this.$log("error", url, requestInit, error);
|
|
184
|
+
this.emitSync(EVENTS.ERROR, requestInit.trigger, url, requestInit, error);
|
|
191
185
|
}
|
|
192
186
|
}
|
|
193
187
|
export {
|
package/Frame/Frame.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Frame/Frame.ts"],
|
|
4
|
-
"sourcesContent": ["import { Base,
|
|
5
|
-
"mappings": "AAAA,SAAS,MAAM,
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import { Base, getClosestParent } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { domScheduler, historyPush } from '@studiometa/js-toolkit/utils';\nimport { FrameAnchor } from './FrameAnchor.js';\nimport { FrameForm } from './FrameForm.js';\nimport { FrameTarget } from './FrameTarget.js';\nimport { FrameLoader } from './FrameLoader.js';\nimport type { FrameRequestInit, FrameTriggerEvent } from './types.js';\nimport { EVENTS } from './utils.js';\n\nexport interface FrameProps extends BaseProps {\n $children: {\n FrameAnchor: FrameAnchor[];\n FrameForm: FrameForm[];\n FrameTarget: FrameTarget[];\n FrameLoader: FrameLoader[];\n };\n $options: {\n history: boolean;\n requestInit: RequestInit;\n headers: Record<string, string>;\n };\n}\n\n/**\n * Frame class.\n * @see https://ui.studiometa.dev/-/components/Frame/\n */\nexport class Frame<T extends BaseProps = BaseProps> extends Base<T & FrameProps> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'Frame',\n emits: Object.values(EVENTS),\n components: {\n FrameAnchor,\n FrameForm,\n FrameTarget,\n FrameLoader,\n },\n options: {\n history: Boolean,\n requestInit: Object,\n headers: Object,\n },\n };\n\n /**\n * DOM Parser to parse the new content to be injected.\n */\n domParser = new DOMParser();\n\n /**\n * Abort controller to prevent multiple simultaneous fetches.\n */\n abortController = new AbortController();\n\n /**\n * Header names.\n */\n headerNames = {\n ACCEPT: 'accept',\n X_REQUESTED_BY: 'x-requested-by',\n X_TRIGGERED_BY: 'x-triggered-by',\n USER_AGENT: 'user-agent',\n } as const;\n\n /**\n * Get uniq id.\n */\n get id() {\n return this.$el.id;\n }\n\n /**\n * The client used for the fetch request.\n */\n get client(): typeof fetch {\n return window.fetch.bind(window);\n }\n\n /**\n * Default request init.\n */\n get requestInit(): RequestInit {\n const { headerNames } = this;\n const { requestInit, headers } = this.$options;\n const requestedBy = '@studiometa/ui/Frame';\n\n return {\n ...requestInit,\n headers: {\n [headerNames.ACCEPT]: 'text/*',\n [headerNames.X_REQUESTED_BY]: requestedBy,\n [headerNames.USER_AGENT]: `${navigator.userAgent} ${requestedBy}`,\n ...requestInit.headers,\n ...headers,\n },\n };\n }\n\n /**\n * Get chidlren limited to the current instance.\n */\n getDirectChildren(name: keyof FrameProps['$children']) {\n const children = [];\n for (const child of this.$children[name]) {\n if (getClosestParent(child, this.constructor) === this) {\n children.push(child);\n }\n }\n return children;\n }\n\n /**\n * Fetch new content on frame-trigger.\n */\n onFrameAnchorFrameTrigger({ args: [url, requestInit] }: { args: FrameTriggerEvent['detail'] }) {\n this.fetch(url, requestInit);\n }\n\n /**\n * Fetch new content on frame-trigger.\n */\n onFrameFormFrameTrigger({ args: [url, requestInit] }: { args: [URL, FrameRequestInit] }) {\n this.fetch(url, requestInit);\n }\n\n /**\n * Update content on history back/forward navigation.\n */\n onWindowPopstate() {\n this.fetch(new URL(window.location.href), {\n headers: {\n [this.headerNames.X_TRIGGERED_BY]: 'popstate',\n },\n });\n }\n\n /**\n * Trigger FrameLoaders enter.\n */\n onFrameFetchBefore() {\n for (const loader of this.getDirectChildren('FrameLoader')) {\n loader.enter();\n }\n }\n\n /**\n * Trigger FrameLoaders leave.\n */\n onFrameFetchAfter() {\n for (const loader of this.getDirectChildren('FrameLoader')) {\n loader.leave();\n }\n }\n\n emitSync(event: string, trigger: FrameForm | FrameAnchor = null, ...args: any[]) {\n this.$emit(event, ...args);\n trigger?.$emit(event, ...args);\n }\n\n /**\n * Fetch given url.\n */\n async fetch(url: URL, requestInit: FrameRequestInit = {}) {\n this.emitSync(EVENTS.FETCH_BEFORE, requestInit.trigger, url, requestInit);\n\n this.abortController.abort();\n this.abortController = new AbortController();\n const init = {\n ...this.requestInit,\n ...requestInit,\n headers: {\n ...this.requestInit.headers,\n ...requestInit.headers,\n },\n signal: this.abortController.signal,\n };\n\n this.$log('fetch', url, init);\n this.emitSync(EVENTS.FETCH, init.trigger, url, init);\n\n try {\n const content = await this.client(url, init).then((response) => response.text());\n this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, content);\n this.content(url, init, content);\n } catch (error) {\n this.emitSync(EVENTS.FETCH_AFTER, init.trigger, url, requestInit, error);\n this.error(url, init, error);\n }\n }\n\n /**\n * Dispatch the contents to update to their matching FrameTarget.\n */\n async content(url: URL, requestInit: FrameRequestInit, content: string) {\n this.$log('content', url, content);\n this.emitSync(EVENTS.CONTENT, requestInit.trigger, url, requestInit, content);\n\n const doc = this.domParser.parseFromString(content, 'text/html');\n const el = doc.querySelector(`#${this.id}`) ?? doc;\n const promises = [];\n\n // @todo inject styles and scripts from new <head>\n if (this.$options.history) {\n if (requestInit?.headers?.[this.headerNames.X_TRIGGERED_BY] !== 'popstate') {\n historyPush({ path: url.pathname, search: url.searchParams });\n }\n domScheduler.write(() => {\n if (doc.title) document.title = doc.title;\n });\n }\n\n for (const frameTarget of this.getDirectChildren('FrameTarget')) {\n promises.push(frameTarget.updateContent(el.querySelector(`#${frameTarget.id}`)));\n }\n\n await Promise.all(promises);\n\n this.emitSync(EVENTS.CONTENT_AFTER, requestInit.trigger, url, requestInit, content);\n\n // We need to update the root instance to make sure newly inserted\n // components are correctly detected and mounted. This avoid having\n // to declare all potentials component as children of the Frame component.\n await this.$root.$update();\n }\n\n /**\n * Handle errors.\n */\n async error(url: URL, requestInit: FrameRequestInit, error: Error) {\n this.$log('error', url, requestInit, error);\n this.emitSync(EVENTS.ERROR, requestInit.trigger, url, requestInit, error);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/Frame/FrameAnchor.d.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { Base } from '@studiometa/js-toolkit';
|
|
2
1
|
import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';
|
|
2
|
+
import { AbstractFrameTrigger } from './AbstractFrameTrigger.js';
|
|
3
3
|
export interface FrameAnchorProps extends BaseProps {
|
|
4
4
|
$el: HTMLAnchorElement;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* FrameAnchor class.
|
|
8
8
|
*/
|
|
9
|
-
export declare class FrameAnchor<T extends BaseProps = BaseProps> extends
|
|
9
|
+
export declare class FrameAnchor<T extends BaseProps = BaseProps> extends AbstractFrameTrigger<T & FrameAnchorProps> {
|
|
10
10
|
/**
|
|
11
11
|
* Config.
|
|
12
12
|
*/
|
|
13
13
|
static config: BaseConfig;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Prevent click.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
onClick({ event }: {
|
|
18
|
+
event: MouseEvent;
|
|
19
|
+
target: FrameAnchor;
|
|
20
|
+
}): void;
|
|
18
21
|
}
|
package/Frame/FrameAnchor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
class FrameAnchor extends
|
|
1
|
+
import { AbstractFrameTrigger } from "./AbstractFrameTrigger.js";
|
|
2
|
+
class FrameAnchor extends AbstractFrameTrigger {
|
|
3
3
|
/**
|
|
4
4
|
* Config.
|
|
5
5
|
*/
|
|
@@ -7,10 +7,13 @@ class FrameAnchor extends Base {
|
|
|
7
7
|
name: "FrameAnchor"
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Prevent click.
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
onClick({ event }) {
|
|
13
|
+
if (!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && event.button === 0 && this.$el.target !== "_blank") {
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
this.trigger();
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
export {
|
package/Frame/FrameAnchor.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Frame/FrameAnchor.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport { AbstractFrameTrigger } from './AbstractFrameTrigger.js';\n\nexport interface FrameAnchorProps extends BaseProps {\n $el: HTMLAnchorElement;\n}\n\n/**\n * FrameAnchor class.\n */\nexport class FrameAnchor<T extends BaseProps = BaseProps> extends AbstractFrameTrigger<\n T & FrameAnchorProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'FrameAnchor',\n };\n\n /**\n * Prevent click.\n */\n onClick({ event }: { event: MouseEvent; target: FrameAnchor }) {\n if (\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey &&\n !event.metaKey &&\n event.button === 0 &&\n this.$el.target !== '_blank'\n ) {\n event.preventDefault();\n this.trigger();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,4BAA4B;AAS9B,MAAM,oBAAqD,qBAEhE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,EAAE,MAAM,GAA+C;AAC7D,QACE,CAAC,MAAM,WACP,CAAC,MAAM,YACP,CAAC,MAAM,UACP,CAAC,MAAM,WACP,MAAM,WAAW,KACjB,KAAK,IAAI,WAAW,UACpB;AACA,YAAM,eAAe;AACrB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Frame/FrameForm.d.ts
CHANGED
|
@@ -1,18 +1,36 @@
|
|
|
1
|
-
import { Base } from '@studiometa/js-toolkit';
|
|
2
1
|
import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';
|
|
2
|
+
import { AbstractFrameTrigger } from './AbstractFrameTrigger.js';
|
|
3
3
|
export interface FrameFormProps extends BaseProps {
|
|
4
4
|
$el: HTMLFormElement;
|
|
5
|
+
$refs: {
|
|
6
|
+
headers: HTMLInputElement[];
|
|
7
|
+
};
|
|
5
8
|
}
|
|
6
9
|
/**
|
|
7
10
|
* FrameForm class.
|
|
8
11
|
*/
|
|
9
|
-
export declare class FrameForm<T extends BaseProps = BaseProps> extends
|
|
12
|
+
export declare class FrameForm<T extends BaseProps = BaseProps> extends AbstractFrameTrigger<T & FrameFormProps> {
|
|
10
13
|
/**
|
|
11
14
|
* Config.
|
|
12
15
|
*/
|
|
13
16
|
static config: BaseConfig;
|
|
14
17
|
/**
|
|
15
|
-
*
|
|
18
|
+
* Form submission method.
|
|
16
19
|
*/
|
|
17
|
-
get
|
|
20
|
+
get method(): "post" | "get";
|
|
21
|
+
/**
|
|
22
|
+
* Add params to the requested URL for GET submissions.
|
|
23
|
+
*/
|
|
24
|
+
get url(): URL;
|
|
25
|
+
/**
|
|
26
|
+
* Add body to the request for POST submissions.
|
|
27
|
+
*/
|
|
28
|
+
get requestInit(): RequestInit;
|
|
29
|
+
/**
|
|
30
|
+
* Prevent submit on forms.
|
|
31
|
+
*/
|
|
32
|
+
onSubmit({ event }: {
|
|
33
|
+
event: SubmitEvent;
|
|
34
|
+
target: FrameForm;
|
|
35
|
+
}): void;
|
|
18
36
|
}
|
package/Frame/FrameForm.js
CHANGED
|
@@ -1,16 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
class FrameForm extends
|
|
1
|
+
import { AbstractFrameTrigger } from "./AbstractFrameTrigger.js";
|
|
2
|
+
class FrameForm extends AbstractFrameTrigger {
|
|
3
3
|
/**
|
|
4
4
|
* Config.
|
|
5
5
|
*/
|
|
6
6
|
static config = {
|
|
7
|
-
name: "FrameForm"
|
|
7
|
+
name: "FrameForm",
|
|
8
|
+
refs: ["headers[]"]
|
|
8
9
|
};
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
+
* Form submission method.
|
|
11
12
|
*/
|
|
12
|
-
get
|
|
13
|
-
return this.$el.
|
|
13
|
+
get method() {
|
|
14
|
+
return this.$el.method.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Add params to the requested URL for GET submissions.
|
|
18
|
+
*/
|
|
19
|
+
get url() {
|
|
20
|
+
const url = new URL(this.$el.action);
|
|
21
|
+
if (this.method === "get") {
|
|
22
|
+
url.search = new URLSearchParams(new FormData(this.$el)).toString();
|
|
23
|
+
}
|
|
24
|
+
return url;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Add body to the request for POST submissions.
|
|
28
|
+
*/
|
|
29
|
+
get requestInit() {
|
|
30
|
+
const requestInit = { ...super.requestInit };
|
|
31
|
+
requestInit.headers ??= {};
|
|
32
|
+
for (const header of this.$refs.headers) {
|
|
33
|
+
if (header.dataset.name && header.value) {
|
|
34
|
+
requestInit.headers[header.dataset.name] = header.value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (this.method === "post") {
|
|
38
|
+
requestInit.method = this.method;
|
|
39
|
+
requestInit.body = new FormData(this.$el);
|
|
40
|
+
}
|
|
41
|
+
return requestInit;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Prevent submit on forms.
|
|
45
|
+
*/
|
|
46
|
+
onSubmit({ event }) {
|
|
47
|
+
if (this.$el.target !== "_blank") {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
this.trigger();
|
|
50
|
+
}
|
|
14
51
|
}
|
|
15
52
|
}
|
|
16
53
|
export {
|
package/Frame/FrameForm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Frame/FrameForm.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { AbstractFrameTrigger } from './AbstractFrameTrigger.js';\n\nexport interface FrameFormProps extends BaseProps {\n $el: HTMLFormElement;\n $refs: {\n headers: HTMLInputElement[];\n };\n}\n\n/**\n * FrameForm class.\n */\nexport class FrameForm<T extends BaseProps = BaseProps> extends AbstractFrameTrigger<\n T & FrameFormProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'FrameForm',\n refs: ['headers[]'],\n };\n\n /**\n * Form submission method.\n */\n get method() {\n return this.$el.method.toLowerCase() as 'post' | 'get';\n }\n\n /**\n * Add params to the requested URL for GET submissions.\n */\n get url(): URL {\n const url = new URL(this.$el.action);\n\n if (this.method === 'get') {\n // @ts-expect-error URLSearchParams accepts FormData as parameter in the browser.\n url.search = new URLSearchParams(new FormData(this.$el)).toString();\n }\n\n return url;\n }\n\n /**\n * Add body to the request for POST submissions.\n */\n get requestInit(): RequestInit {\n const requestInit = { ...super.requestInit };\n requestInit.headers ??= {};\n\n for (const header of this.$refs.headers) {\n if (header.dataset.name && header.value) {\n requestInit.headers[header.dataset.name] = header.value;\n }\n }\n\n if (this.method === 'post') {\n requestInit.method = this.method;\n requestInit.body = new FormData(this.$el);\n }\n\n return requestInit;\n }\n\n /**\n * Prevent submit on forms.\n */\n onSubmit({ event }: { event: SubmitEvent; target: FrameForm }) {\n if (this.$el.target !== '_blank') {\n event.preventDefault();\n this.trigger();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,4BAA4B;AAY9B,MAAM,kBAAmD,qBAE9D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,MAAM,CAAC,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAS;AACX,WAAO,KAAK,IAAI,OAAO,YAAY;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAW;AACb,UAAM,MAAM,IAAI,IAAI,KAAK,IAAI,MAAM;AAEnC,QAAI,KAAK,WAAW,OAAO;AAEzB,UAAI,SAAS,IAAI,gBAAgB,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,SAAS;AAAA,IACpE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAA2B;AAC7B,UAAM,cAAc,EAAE,GAAG,MAAM,YAAY;AAC3C,gBAAY,YAAY,CAAC;AAEzB,eAAW,UAAU,KAAK,MAAM,SAAS;AACvC,UAAI,OAAO,QAAQ,QAAQ,OAAO,OAAO;AACvC,oBAAY,QAAQ,OAAO,QAAQ,IAAI,IAAI,OAAO;AAAA,MACpD;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,QAAQ;AAC1B,kBAAY,SAAS,KAAK;AAC1B,kBAAY,OAAO,IAAI,SAAS,KAAK,GAAG;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,EAAE,MAAM,GAA8C;AAC7D,QAAI,KAAK,IAAI,WAAW,UAAU;AAChC,YAAM,eAAe;AACrB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';
|
|
2
|
+
import { Transition } from '../Transition/index.js';
|
|
3
|
+
import type { TransitionProps } from '../decorators/withTransition.js';
|
|
4
|
+
export interface FrameLoaderProps extends BaseProps {
|
|
5
|
+
$options: TransitionProps['$options'] & {
|
|
6
|
+
enterKeep: true;
|
|
7
|
+
leaveKeep: true;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Class.
|
|
12
|
+
*/
|
|
13
|
+
export declare class FrameLoader<T extends BaseProps = BaseProps> extends Transition<T & FrameLoaderProps> {
|
|
14
|
+
/**
|
|
15
|
+
* Config.
|
|
16
|
+
*/
|
|
17
|
+
static config: BaseConfig;
|
|
18
|
+
get $options(): import("@studiometa/js-toolkit").BaseOptions & (T & FrameLoaderProps & TransitionProps)["$options"] & {
|
|
19
|
+
enterKeep: boolean;
|
|
20
|
+
leaveKeep: boolean;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Transition } from "../Transition/index.js";
|
|
2
|
+
class FrameLoader extends Transition {
|
|
3
|
+
/**
|
|
4
|
+
* Config.
|
|
5
|
+
*/
|
|
6
|
+
static config = {
|
|
7
|
+
name: "FrameLoader"
|
|
8
|
+
};
|
|
9
|
+
// @ts-expect-error this is fine.
|
|
10
|
+
get $options() {
|
|
11
|
+
const options = super.$options;
|
|
12
|
+
return {
|
|
13
|
+
...options,
|
|
14
|
+
enterKeep: true,
|
|
15
|
+
leaveKeep: true
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
FrameLoader
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=FrameLoader.js.map
|