@staging-apiplus/essentials 0.0.0-stage → 0.0.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/dist/tab.js ADDED
@@ -0,0 +1,185 @@
1
+ import { t as e } from "./sync_selected_style_roles-CZFO6BaK.js";
2
+ import { n as t, t as n } from "./design_time-BeEBEFSF.js";
3
+ //#region src/tab/runtime/dom.ts
4
+ var r = "data-qp-logic-tabs", i = "qp-tabs-runtime-styles", a = `
5
+ [${r}] {
6
+ display: block;
7
+ width: 100%;
8
+ }
9
+
10
+ [${r}] .qp-tab-list {
11
+ display: flex;
12
+ flex-direction: row;
13
+ flex-wrap: nowrap;
14
+ gap: 0;
15
+ width: 100%;
16
+ }
17
+
18
+ [${r}] .qp-tab {
19
+ cursor: pointer;
20
+ user-select: none;
21
+ }
22
+
23
+ [${r}] .qp-panel-list {
24
+ display: block;
25
+ width: 100%;
26
+ }
27
+
28
+ [${r}] .qp-panel {
29
+ display: block;
30
+ width: 100%;
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ /* Publish critical CSS hides inactive panels by class with !important. */
35
+ [${r}] .qp-panel:not([hidden]) {
36
+ display: revert !important;
37
+ }
38
+
39
+ [${r}] .qp-panel[hidden] {
40
+ display: none !important;
41
+ }
42
+ `;
43
+ function o() {
44
+ if (typeof document > "u" || document.getElementById("qp-tabs-runtime-styles")) return;
45
+ let e = document.createElement("style");
46
+ e.id = i, e.textContent = a, document.head.appendChild(e);
47
+ }
48
+ function s(e, t) {
49
+ if (t instanceof HTMLElement) return t;
50
+ let n = e.querySelector(".qp-tab-list");
51
+ return n instanceof HTMLElement ? n : null;
52
+ }
53
+ function c(e, t) {
54
+ if (t instanceof HTMLElement) return t;
55
+ let n = e.querySelector(".qp-panel-list");
56
+ return n instanceof HTMLElement ? n : null;
57
+ }
58
+ function l(e) {
59
+ let t = Array.from(e.children).filter((e) => e instanceof HTMLElement && e.classList.contains("qp-tab"));
60
+ return t.length > 0 ? t : Array.from(e.children).filter((e) => e instanceof HTMLElement);
61
+ }
62
+ function u(e) {
63
+ let t = Array.from(e.children).filter((e) => e instanceof HTMLElement && e.classList.contains("qp-panel"));
64
+ return t.length > 0 ? t : Array.from(e.children).filter((e) => e instanceof HTMLElement);
65
+ }
66
+ function d(e, t, n) {
67
+ t.classList.contains("qp-tab-list") || t.classList.add("qp-tab-list"), n.classList.contains("qp-panel-list") || n.classList.add("qp-panel-list");
68
+ for (let e of l(t)) e.classList.contains("qp-tab") || e.classList.add("qp-tab");
69
+ for (let e of u(n)) e.classList.contains("qp-panel") || e.classList.add("qp-panel");
70
+ }
71
+ function f(e, t, n) {
72
+ if (t.length === 0) return;
73
+ let r = Math.max(0, Math.min(n, t.length - 1));
74
+ for (let e = 0; e < t.length; e += 1) {
75
+ let n = t[e];
76
+ e === r ? (n.style.removeProperty("display"), n.removeAttribute("hidden")) : (n.style.display = "none", n.setAttribute("hidden", ""));
77
+ }
78
+ for (let t = 0; t < e.length; t += 1) {
79
+ let n = e[t], i = t === r;
80
+ n.setAttribute("aria-selected", i ? "true" : "false"), n.tabIndex = i ? 0 : -1;
81
+ }
82
+ }
83
+ function p(e, t, n) {
84
+ e.setAttribute("role", "tablist");
85
+ for (let e = 0; e < t.length; e += 1) {
86
+ let r = t[e], i = n[e];
87
+ r.setAttribute("role", "tab"), i && (i.id ||= `qp-tab-panel-${e}`, r.setAttribute("aria-controls", i.id), i.setAttribute("role", "tabpanel"), i.setAttribute("aria-labelledby", r.id || `qp-tab-${e}`), r.id || (r.id = `qp-tab-${e}`, i.setAttribute("aria-labelledby", r.id)));
88
+ }
89
+ }
90
+ //#endregion
91
+ //#region src/tab/runtime/runtime.ts
92
+ function m(e) {
93
+ return e.scopeRoot instanceof HTMLElement ? e.scopeRoot : null;
94
+ }
95
+ function h(e) {
96
+ let t = m(e);
97
+ if (!t) return null;
98
+ let n = s(t, e.wiring.tabList), r = c(t, e.wiring.panelList);
99
+ return !n || !r ? null : {
100
+ tabs: t,
101
+ tabList: n,
102
+ panelList: r
103
+ };
104
+ }
105
+ function g(r, i) {
106
+ e({
107
+ spec: n,
108
+ activeIndex: i,
109
+ roleLists: { [t.Tab]: r }
110
+ });
111
+ }
112
+ function _(e, t) {
113
+ let r = e.editorState?.[n.activeIndexStateKey];
114
+ if (r !== void 0) {
115
+ let e = Number(r);
116
+ return Number.isFinite(e) ? e : t;
117
+ }
118
+ let i = e.props.defaultIndex;
119
+ if (i !== void 0) {
120
+ let e = Number(i);
121
+ if (Number.isFinite(e)) return e;
122
+ }
123
+ return t;
124
+ }
125
+ function v(e) {
126
+ let t = e, n = h(e);
127
+ if (!n) return;
128
+ o();
129
+ let i = _(e, 0), a = [], s = [], c = null, m = (e) => {
130
+ d(e.tabs, e.tabList, e.panelList), a = l(e.tabList), s = u(e.panelList), p(e.tabList, a, s);
131
+ }, v = (e, t) => {
132
+ let n = h(e);
133
+ n && (m(n), s.length !== 0 && (i = Math.max(0, Math.min(t, s.length - 1)), f(a, s, i), g(a, i)));
134
+ }, y = (e) => {
135
+ if (!h(t)) return;
136
+ let n = e.target;
137
+ if (n instanceof Node) {
138
+ for (let [r, i] of a.entries()) if (i === n || i.contains(n)) {
139
+ e.preventDefault(), v(t, r);
140
+ return;
141
+ }
142
+ }
143
+ }, b = (e) => {
144
+ if (a.length === 0) return;
145
+ let n = i;
146
+ switch (e.key) {
147
+ case "ArrowRight":
148
+ case "ArrowDown":
149
+ n = i + 1;
150
+ break;
151
+ case "ArrowLeft":
152
+ case "ArrowUp":
153
+ n = i - 1;
154
+ break;
155
+ case "Home":
156
+ n = 0;
157
+ break;
158
+ case "End":
159
+ n = a.length - 1;
160
+ break;
161
+ default: return;
162
+ }
163
+ e.preventDefault(), v(t, n), a[i]?.focus();
164
+ }, x = (e) => {
165
+ let t = h(e);
166
+ t && c !== t.tabList && (c?.removeEventListener("click", y), c?.removeEventListener("keydown", b), c = t.tabList, c.addEventListener("click", y), c.addEventListener("keydown", b));
167
+ }, S = (e) => {
168
+ t = e;
169
+ let n = h(e);
170
+ n && (n.tabs.setAttribute(r, ""), m(n), x(e), i = _(e, i), v(e, i));
171
+ };
172
+ return x(e), S(e), {
173
+ update: (e) => {
174
+ S(e);
175
+ },
176
+ destroy: () => {
177
+ c?.removeEventListener("click", y), c?.removeEventListener("keydown", b), c = null, n.tabs.removeAttribute(r);
178
+ }
179
+ };
180
+ }
181
+ var y = { mount(e) {
182
+ return v(e);
183
+ } };
184
+ //#endregion
185
+ export { y as default };
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://quickpage.dev/schemas/logic/v1",
3
+ "type": "object",
4
+ "properties": {
5
+ "defaultIndex": {
6
+ "type": "number",
7
+ "default": 0,
8
+ "minimum": 0,
9
+ "x-qp-control": "number",
10
+ "x-qp-label": "Starting tab for visitors"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://quickpage.dev/schemas/wiring/v1",
3
+ "type": "object",
4
+ "properties": {
5
+ "tabList": {
6
+ "type": "string",
7
+ "x-qp-wire-kind": "node",
8
+ "x-qp-label": "Tab list"
9
+ },
10
+ "panelList": {
11
+ "type": "string",
12
+ "x-qp-wire-kind": "node",
13
+ "x-qp-label": "Panel list"
14
+ }
15
+ }
16
+ }
package/package.json CHANGED
@@ -1,6 +1,69 @@
1
1
  {
2
2
  "name": "@staging-apiplus/essentials",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "qp dev --port 5179 --host --open",
7
+ "validate": "qp validate",
8
+ "build": "qp build",
9
+ "publish:npm": "qp publish",
10
+ "publish:dev": "qp publish:dev",
11
+ "test:unit": "pnpm --filter @packages/qp-code-host exec vitest run --config ./vitest.example-gallery.config.ts"
12
+ },
13
+ "dependencies": {
14
+ "swiper": "^12.1.2"
15
+ },
16
+ "devDependencies": {
17
+ "@packages/qp-cli": "workspace:@packages/qp-cli@^0.0.1",
18
+ "@packages/qp-sdk": "workspace:@packages/qp-sdk@^0.0.1",
19
+ "@sveltejs/vite-plugin-svelte": "catalog:dev",
20
+ "svelte": "catalog:dev",
21
+ "tsx": "catalog:dev",
22
+ "typescript": "catalog:dev",
23
+ "vite": "catalog:dev"
24
+ },
25
+ "exports": {
26
+ "./gallery": {
27
+ "import": "./dist/gallery.js",
28
+ "quickpage": "./dist/gallery/package.json",
29
+ "default": "./dist/gallery.js"
30
+ },
31
+ "./dist/gallery/package.json": "./dist/gallery/package.json",
32
+ "./slider": {
33
+ "import": "./dist/slider.js",
34
+ "quickpage": "./dist/slider/package.json",
35
+ "default": "./dist/slider.js"
36
+ },
37
+ "./dist/slider/package.json": "./dist/slider/package.json",
38
+ "./tab": {
39
+ "import": "./dist/tab.js",
40
+ "quickpage": "./dist/tab/package.json",
41
+ "default": "./dist/tab.js"
42
+ },
43
+ "./dist/tab/package.json": "./dist/tab/package.json"
44
+ },
45
+ "files": [
46
+ "dist"
47
+ ],
48
+ "quickpage": {
49
+ "kind": "code-package",
50
+ "engine": "^1.0.0",
51
+ "modules": [
52
+ {
53
+ "id": "gallery",
54
+ "kind": "component",
55
+ "export": "./gallery"
56
+ },
57
+ {
58
+ "id": "slider",
59
+ "kind": "logic",
60
+ "export": "./slider"
61
+ },
62
+ {
63
+ "id": "tab",
64
+ "kind": "logic",
65
+ "export": "./tab"
66
+ }
67
+ ]
68
+ }
69
+ }