@kashi-ui/elements 0.0.0-stage → 0.25.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/README.md +45 -2
- package/dist/base.d.ts +47 -0
- package/dist/base.js +148 -0
- package/dist/calendar.d.ts +86 -0
- package/dist/calendar.js +439 -0
- package/dist/cdn/base-Cmq7zeIG.js +1 -0
- package/dist/cdn/calendar-Dm3fq2bs.js +16 -0
- package/dist/cdn/charts-DNOWi4sJ.js +1 -0
- package/dist/cdn/combobox-ZGrZ5okg.js +1 -0
- package/dist/cdn/controls-K-OZcjg4.js +1 -0
- package/dist/cdn/digits-DE1YGT94.js +1 -0
- package/dist/cdn/display-C975tS7j.js +1 -0
- package/dist/cdn/dist-D670Gw0K.js +1 -0
- package/dist/cdn/fields-BUTaSN8m.js +1 -0
- package/dist/cdn/forms-C-effPKn.js +1 -0
- package/dist/cdn/inputs-BjOddAM7.js +1 -0
- package/dist/cdn/jalali-BiM5Kfep.js +1 -0
- package/dist/cdn/kashi-elements.js +1 -0
- package/dist/cdn/map-BHuusa4t.js +12 -0
- package/dist/cdn/menu-DhrqyLgy.js +1 -0
- package/dist/cdn/nav-D_w5BV_K.js +1 -0
- package/dist/cdn/overlay-DX9un2xm.js +1 -0
- package/dist/cdn/pickers-BFLpUruK.js +1 -0
- package/dist/cdn/table-DPQfDMs-.js +1 -0
- package/dist/cdn/text-D1U32D6K.js +1 -0
- package/dist/cdn/words-9OdzG7y6.js +1 -0
- package/dist/cdn.d.ts +3 -0
- package/dist/cdn.js +44 -0
- package/dist/charts.d.ts +106 -0
- package/dist/charts.js +436 -0
- package/dist/combobox.d.ts +106 -0
- package/dist/combobox.js +439 -0
- package/dist/controls.d.ts +82 -0
- package/dist/controls.js +425 -0
- package/dist/display.d.ts +41 -0
- package/dist/display.js +144 -0
- package/dist/fields.d.ts +24 -0
- package/dist/fields.js +103 -0
- package/dist/forms.d.ts +186 -0
- package/dist/forms.js +902 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +32 -0
- package/dist/inputs.d.ts +107 -0
- package/dist/inputs.js +371 -0
- package/dist/iranMapData.d.ts +6 -0
- package/dist/iranMapData.js +37 -0
- package/dist/map.d.ts +64 -0
- package/dist/map.js +416 -0
- package/dist/menu.d.ts +45 -0
- package/dist/menu.js +281 -0
- package/dist/nav.d.ts +163 -0
- package/dist/nav.js +918 -0
- package/dist/overlay.d.ts +79 -0
- package/dist/overlay.js +420 -0
- package/dist/pickers.d.ts +108 -0
- package/dist/pickers.js +655 -0
- package/dist/table.d.ts +53 -0
- package/dist/table.js +267 -0
- package/dist/toast.d.ts +45 -0
- package/dist/toast.js +141 -0
- package/package.json +63 -4
package/dist/menu.js
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { HTMLBase, afterParse, define, emit, esc, uid } from "./base.js";
|
|
2
|
+
const CHECK = '<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m5 10.5 3.2 3L15 7"/></svg>';
|
|
3
|
+
const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex="-1"])';
|
|
4
|
+
const items = (menu) => [...menu.querySelectorAll('[role^="menuitem"]:not([aria-disabled="true"])')];
|
|
5
|
+
/**
|
|
6
|
+
* منوی کشویی با الگوی Menu Button در WAI-ARIA. اولین فرزند دکمهٔ بازکننده است و بقیه گزینهها:
|
|
7
|
+
* <button> (با data-value، data-shortcut، data-tone="danger"، data-checked، disabled)، <a href>، <hr> برای جداکننده
|
|
8
|
+
* و هر عنصر data-label برای عنوان گروه. ↑↓ حرکت، Home/End، پرش با حرف اول، Esc بستن.
|
|
9
|
+
*/
|
|
10
|
+
export class KashiDropdownMenu extends HTMLBase {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.menu = null;
|
|
14
|
+
this.trigger = null;
|
|
15
|
+
this.key = uid("kashi-menu");
|
|
16
|
+
this.onOutside = (e) => {
|
|
17
|
+
if (!this.contains(e.target))
|
|
18
|
+
this.close(false);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
connectedCallback() {
|
|
22
|
+
afterParse(() => this.isConnected && !this.menu && this.build());
|
|
23
|
+
}
|
|
24
|
+
disconnectedCallback() {
|
|
25
|
+
document.removeEventListener("pointerdown", this.onOutside);
|
|
26
|
+
}
|
|
27
|
+
attributeChangedCallback() {
|
|
28
|
+
if (this.menu)
|
|
29
|
+
this.decorate();
|
|
30
|
+
}
|
|
31
|
+
get open() {
|
|
32
|
+
return !!this.menu && !this.menu.hidden;
|
|
33
|
+
}
|
|
34
|
+
build() {
|
|
35
|
+
const [trigger, ...rest] = [...this.children];
|
|
36
|
+
if (!trigger)
|
|
37
|
+
return;
|
|
38
|
+
this.classList.add("k-menu-anchor");
|
|
39
|
+
this.trigger = trigger;
|
|
40
|
+
trigger.id || (trigger.id = `${this.key}-trigger`);
|
|
41
|
+
trigger.setAttribute("aria-haspopup", "menu");
|
|
42
|
+
trigger.setAttribute("aria-expanded", "false");
|
|
43
|
+
const menu = document.createElement("ul");
|
|
44
|
+
menu.id = `${this.key}-menu`;
|
|
45
|
+
menu.setAttribute("role", "menu");
|
|
46
|
+
menu.hidden = true;
|
|
47
|
+
for (const el of rest) {
|
|
48
|
+
const li = document.createElement("li");
|
|
49
|
+
if (el.tagName === "HR") {
|
|
50
|
+
li.setAttribute("role", "separator");
|
|
51
|
+
li.className = "k-menu__separator";
|
|
52
|
+
el.remove();
|
|
53
|
+
}
|
|
54
|
+
else if (el.hasAttribute("data-label")) {
|
|
55
|
+
li.setAttribute("role", "presentation");
|
|
56
|
+
li.className = "k-menu__label";
|
|
57
|
+
li.textContent = el.textContent;
|
|
58
|
+
el.remove();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
li.setAttribute("role", "none");
|
|
62
|
+
const checkable = el.hasAttribute("data-checked");
|
|
63
|
+
el.setAttribute("role", checkable ? "menuitemcheckbox" : "menuitem");
|
|
64
|
+
el.tabIndex = -1;
|
|
65
|
+
el.classList.add("k-menu__item");
|
|
66
|
+
if (el.dataset.tone === "danger")
|
|
67
|
+
el.classList.add("k-menu__item--danger");
|
|
68
|
+
if (el instanceof HTMLButtonElement) {
|
|
69
|
+
el.type = "button";
|
|
70
|
+
// دکمهٔ غیرفعال فوکوسپذیر میماند تا صفحهخوان آن را بخواند
|
|
71
|
+
if (el.disabled) {
|
|
72
|
+
el.disabled = false;
|
|
73
|
+
el.setAttribute("aria-disabled", "true");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const text = el.innerHTML;
|
|
77
|
+
el.innerHTML = `${checkable ? `<span class="k-menu__check" aria-hidden="true"></span>` : ""}<span>${text}</span>${el.dataset.shortcut ? `<span class="k-menu__shortcut" aria-hidden="true">${esc(el.dataset.shortcut)}</span>` : ""}`;
|
|
78
|
+
if (checkable)
|
|
79
|
+
this.paintCheck(el);
|
|
80
|
+
li.append(el);
|
|
81
|
+
}
|
|
82
|
+
menu.append(li);
|
|
83
|
+
}
|
|
84
|
+
this.append(menu);
|
|
85
|
+
this.menu = menu;
|
|
86
|
+
this.decorate();
|
|
87
|
+
trigger.addEventListener("click", () => (this.open ? this.close(false) : this.show("first")));
|
|
88
|
+
trigger.addEventListener("keydown", (e) => {
|
|
89
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
this.show(e.key === "ArrowUp" ? "last" : "first");
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
menu.addEventListener("keydown", (e) => this.onKey(e));
|
|
95
|
+
menu.addEventListener("click", (e) => {
|
|
96
|
+
const item = e.target.closest('[role^="menuitem"]');
|
|
97
|
+
if (!item || item.getAttribute("aria-disabled") === "true")
|
|
98
|
+
return;
|
|
99
|
+
if (item.getAttribute("role") === "menuitemcheckbox") {
|
|
100
|
+
item.dataset.checked = String(item.dataset.checked !== "true");
|
|
101
|
+
this.paintCheck(item);
|
|
102
|
+
}
|
|
103
|
+
emit(this, "kashi-select", { value: item.dataset.value ?? item.textContent?.trim() ?? "", checked: item.dataset.checked === undefined ? undefined : item.dataset.checked === "true" });
|
|
104
|
+
if (item.getAttribute("role") === "menuitem")
|
|
105
|
+
this.close(item.tagName !== "A");
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
paintCheck(el) {
|
|
109
|
+
const on = el.dataset.checked === "true";
|
|
110
|
+
el.setAttribute("aria-checked", String(on));
|
|
111
|
+
el.querySelector(".k-menu__check").innerHTML = on ? CHECK : "";
|
|
112
|
+
}
|
|
113
|
+
decorate() {
|
|
114
|
+
const label = this.getAttribute("label");
|
|
115
|
+
this.menu.className = `k-menu${this.getAttribute("align") === "end" ? " k-menu--end" : ""}`;
|
|
116
|
+
if (label) {
|
|
117
|
+
this.menu.setAttribute("aria-label", label);
|
|
118
|
+
this.menu.removeAttribute("aria-labelledby");
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.menu.setAttribute("aria-labelledby", this.trigger.id);
|
|
122
|
+
this.menu.removeAttribute("aria-label");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** باز کردن منو و فوکوس روی اولین یا آخرین گزینه */
|
|
126
|
+
show(focus = "first") {
|
|
127
|
+
if (!this.menu)
|
|
128
|
+
return;
|
|
129
|
+
this.menu.hidden = false;
|
|
130
|
+
this.trigger.setAttribute("aria-expanded", "true");
|
|
131
|
+
this.trigger.setAttribute("aria-controls", this.menu.id);
|
|
132
|
+
const list = items(this.menu);
|
|
133
|
+
(focus === "last" ? list.at(-1) : list[0])?.focus();
|
|
134
|
+
document.addEventListener("pointerdown", this.onOutside);
|
|
135
|
+
}
|
|
136
|
+
/** بستن منو؛ با focusTrigger فوکوس به دکمهٔ بازکننده برمیگردد */
|
|
137
|
+
close(focusTrigger = true) {
|
|
138
|
+
if (!this.menu || this.menu.hidden)
|
|
139
|
+
return;
|
|
140
|
+
this.menu.hidden = true;
|
|
141
|
+
this.trigger.setAttribute("aria-expanded", "false");
|
|
142
|
+
this.trigger.removeAttribute("aria-controls");
|
|
143
|
+
document.removeEventListener("pointerdown", this.onOutside);
|
|
144
|
+
if (focusTrigger)
|
|
145
|
+
this.trigger.focus();
|
|
146
|
+
}
|
|
147
|
+
onKey(e) {
|
|
148
|
+
const list = items(this.menu);
|
|
149
|
+
const i = list.indexOf(document.activeElement);
|
|
150
|
+
const go = (j) => list[(j + list.length) % list.length]?.focus();
|
|
151
|
+
if (e.key === "ArrowDown")
|
|
152
|
+
go(i + 1);
|
|
153
|
+
else if (e.key === "ArrowUp")
|
|
154
|
+
go(i - 1);
|
|
155
|
+
else if (e.key === "Home")
|
|
156
|
+
go(0);
|
|
157
|
+
else if (e.key === "End")
|
|
158
|
+
go(list.length - 1);
|
|
159
|
+
else if (e.key === "Escape")
|
|
160
|
+
this.close();
|
|
161
|
+
else if (e.key === "Tab")
|
|
162
|
+
return this.close(false);
|
|
163
|
+
else if (e.key.length === 1 && /\S/.test(e.key)) {
|
|
164
|
+
// پرش با حرف اول
|
|
165
|
+
const k = e.key.toLowerCase();
|
|
166
|
+
const rest = [...list.slice(i + 1), ...list.slice(0, i + 1)];
|
|
167
|
+
rest.find((el) => el.textContent?.trim().toLowerCase().startsWith(k))?.focus();
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
return;
|
|
171
|
+
e.preventDefault();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
KashiDropdownMenu.observedAttributes = ["label", "align"];
|
|
175
|
+
/**
|
|
176
|
+
* پنجرهٔ کوچک غیرمدال کنار یک دکمه؛ اولین فرزند دکمهٔ بازکننده است و بقیه محتوای پنجره.
|
|
177
|
+
* فوکوس به اولین عنصر قابل فوکوس داخل آن میرود، Esc میبندد و فوکوس را به دکمه برمیگرداند.
|
|
178
|
+
*/
|
|
179
|
+
export class KashiPopover extends HTMLBase {
|
|
180
|
+
constructor() {
|
|
181
|
+
super(...arguments);
|
|
182
|
+
this.panel = null;
|
|
183
|
+
this.trigger = null;
|
|
184
|
+
this.key = uid("kashi-pop");
|
|
185
|
+
this.onOutside = (e) => {
|
|
186
|
+
if (!this.contains(e.target))
|
|
187
|
+
this.close(false);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
connectedCallback() {
|
|
191
|
+
afterParse(() => this.isConnected && !this.panel && this.build());
|
|
192
|
+
}
|
|
193
|
+
disconnectedCallback() {
|
|
194
|
+
document.removeEventListener("pointerdown", this.onOutside);
|
|
195
|
+
}
|
|
196
|
+
attributeChangedCallback() {
|
|
197
|
+
if (this.panel)
|
|
198
|
+
this.decorate();
|
|
199
|
+
}
|
|
200
|
+
get open() {
|
|
201
|
+
return !!this.panel && !this.panel.hidden;
|
|
202
|
+
}
|
|
203
|
+
set open(v) {
|
|
204
|
+
if (v)
|
|
205
|
+
this.show();
|
|
206
|
+
else
|
|
207
|
+
this.close(false);
|
|
208
|
+
}
|
|
209
|
+
build() {
|
|
210
|
+
const [trigger, ...rest] = [...this.childNodes].filter((n) => n.nodeType === 1 || n.textContent?.trim());
|
|
211
|
+
if (!trigger)
|
|
212
|
+
return;
|
|
213
|
+
this.classList.add("k-popover-anchor");
|
|
214
|
+
this.trigger = trigger;
|
|
215
|
+
trigger.setAttribute("aria-haspopup", "dialog");
|
|
216
|
+
trigger.setAttribute("aria-expanded", "false");
|
|
217
|
+
const panel = document.createElement("div");
|
|
218
|
+
panel.id = `${this.key}-panel`;
|
|
219
|
+
panel.setAttribute("role", "dialog");
|
|
220
|
+
panel.tabIndex = -1;
|
|
221
|
+
panel.hidden = true;
|
|
222
|
+
panel.innerHTML = `<p class="k-popover__title" id="${this.key}-title"></p><div class="k-popover__body"></div>`;
|
|
223
|
+
panel.querySelector(".k-popover__body").append(...rest);
|
|
224
|
+
this.append(panel);
|
|
225
|
+
this.panel = panel;
|
|
226
|
+
this.decorate();
|
|
227
|
+
trigger.addEventListener("click", () => (this.open ? this.close(false) : this.show()));
|
|
228
|
+
panel.addEventListener("keydown", (e) => {
|
|
229
|
+
if (e.key === "Escape") {
|
|
230
|
+
e.stopPropagation();
|
|
231
|
+
this.close(true);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
panel.addEventListener("focusout", (e) => {
|
|
235
|
+
const next = e.relatedTarget;
|
|
236
|
+
if (next && !this.contains(next))
|
|
237
|
+
this.close(false);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
decorate() {
|
|
241
|
+
const p = this.panel;
|
|
242
|
+
const [side, align] = (this.getAttribute("placement") ?? "bottom-start").split("-");
|
|
243
|
+
p.className = ["k-popover", side === "top" && "k-popover--top", align === "end" && "k-popover--end"].filter(Boolean).join(" ");
|
|
244
|
+
const heading = this.getAttribute("heading");
|
|
245
|
+
const title = p.querySelector(".k-popover__title");
|
|
246
|
+
title.textContent = heading ?? "";
|
|
247
|
+
title.hidden = !heading;
|
|
248
|
+
if (heading) {
|
|
249
|
+
p.setAttribute("aria-labelledby", title.id);
|
|
250
|
+
p.removeAttribute("aria-label");
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
p.removeAttribute("aria-labelledby");
|
|
254
|
+
p.setAttribute("aria-label", this.getAttribute("label") ?? "");
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
show() {
|
|
258
|
+
if (!this.panel || this.open)
|
|
259
|
+
return;
|
|
260
|
+
this.panel.hidden = false;
|
|
261
|
+
this.trigger.setAttribute("aria-expanded", "true");
|
|
262
|
+
this.trigger.setAttribute("aria-controls", this.panel.id);
|
|
263
|
+
(this.panel.querySelector(`.k-popover__body :is(${FOCUSABLE})`) ?? this.panel).focus();
|
|
264
|
+
document.addEventListener("pointerdown", this.onOutside);
|
|
265
|
+
emit(this, "kashi-open", {});
|
|
266
|
+
}
|
|
267
|
+
close(focusTrigger = true) {
|
|
268
|
+
if (!this.panel || this.panel.hidden)
|
|
269
|
+
return;
|
|
270
|
+
this.panel.hidden = true;
|
|
271
|
+
this.trigger.setAttribute("aria-expanded", "false");
|
|
272
|
+
this.trigger.removeAttribute("aria-controls");
|
|
273
|
+
document.removeEventListener("pointerdown", this.onOutside);
|
|
274
|
+
if (focusTrigger)
|
|
275
|
+
this.trigger.focus();
|
|
276
|
+
emit(this, "kashi-close", {});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
KashiPopover.observedAttributes = ["heading", "placement", "label"];
|
|
280
|
+
define("kashi-dropdown-menu", KashiDropdownMenu);
|
|
281
|
+
define("kashi-popover", KashiPopover);
|
package/dist/nav.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { HTMLBase } from "./base.js";
|
|
2
|
+
export interface CommandItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
group?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
shortcut?: string;
|
|
8
|
+
keywords?: string[];
|
|
9
|
+
href?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* پالت فرمان با Ctrl+K یا ⌘K: جستجو بین دستورها و صفحهها با ↑↓ و Enter.
|
|
13
|
+
* دستورها از فرزندان <a href> یا <button data-value> (با data-group، data-description، data-shortcut، data-keywords)
|
|
14
|
+
* یا element.items؛ انتخاب هر دستور بدون href رویداد kashi-select میفرستد.
|
|
15
|
+
*/
|
|
16
|
+
export declare class KashiCommandPalette extends HTMLBase {
|
|
17
|
+
static observedAttributes: string[];
|
|
18
|
+
private list;
|
|
19
|
+
private dialog;
|
|
20
|
+
private query;
|
|
21
|
+
private active;
|
|
22
|
+
private opener;
|
|
23
|
+
private key;
|
|
24
|
+
connectedCallback(): void;
|
|
25
|
+
disconnectedCallback(): void;
|
|
26
|
+
get items(): CommandItem[];
|
|
27
|
+
set items(v: CommandItem[]);
|
|
28
|
+
private readItems;
|
|
29
|
+
private onShortcut;
|
|
30
|
+
private build;
|
|
31
|
+
private filtered;
|
|
32
|
+
/** باز کردن پالت */
|
|
33
|
+
show(): void;
|
|
34
|
+
close(): void;
|
|
35
|
+
private run;
|
|
36
|
+
private paint;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* منوی راستکلیک: محتوای عنصر ناحیهٔ کلیک است و گزینهها داخل یک <div data-menu> (همان گزینههای kashi-dropdown-menu).
|
|
40
|
+
* با راستکلیک، کلید ContextMenu یا Shift+F10 باز میشود؛ انتخاب گزینه رویداد kashi-select میفرستد.
|
|
41
|
+
*/
|
|
42
|
+
export declare class KashiContextMenu extends HTMLBase {
|
|
43
|
+
static observedAttributes: string[];
|
|
44
|
+
private menu;
|
|
45
|
+
private returnTo;
|
|
46
|
+
private key;
|
|
47
|
+
connectedCallback(): void;
|
|
48
|
+
disconnectedCallback(): void;
|
|
49
|
+
private build;
|
|
50
|
+
private openAt;
|
|
51
|
+
close(focusBack?: boolean): void;
|
|
52
|
+
private onOutside;
|
|
53
|
+
private onScroll;
|
|
54
|
+
private onMenuKey;
|
|
55
|
+
}
|
|
56
|
+
/** اسلایدر محتوا با اسکرول بومی: هر فرزند یک اسلاید؛ per-view تعداد اسلاید در هر نما، کلیدهای جهت و نقطهها */
|
|
57
|
+
export declare class KashiCarousel extends HTMLBase {
|
|
58
|
+
static observedAttributes: string[];
|
|
59
|
+
private track;
|
|
60
|
+
private index;
|
|
61
|
+
private io;
|
|
62
|
+
private key;
|
|
63
|
+
connectedCallback(): void;
|
|
64
|
+
disconnectedCallback(): void;
|
|
65
|
+
private get perView();
|
|
66
|
+
private get slides();
|
|
67
|
+
private get pages();
|
|
68
|
+
private build;
|
|
69
|
+
/** رفتن به اسلاید n (از صفر) */
|
|
70
|
+
go(n: number): void;
|
|
71
|
+
private setIndex;
|
|
72
|
+
}
|
|
73
|
+
export interface TreeNode {
|
|
74
|
+
id: string;
|
|
75
|
+
label: string;
|
|
76
|
+
meta?: string;
|
|
77
|
+
disabled?: boolean;
|
|
78
|
+
children?: TreeNode[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* نمای درختی با الگوی Tree در WAI-ARIA. ساختار از یک فهرست تودرتوی معمولی (<ul><li data-id>…<ul>…</ul></li></ul>)
|
|
82
|
+
* یا element.items؛ ↑↓ حرکت، جهت داخل باز کردن (در RTL فلش چپ)، Enter انتخاب.
|
|
83
|
+
*/
|
|
84
|
+
export declare class KashiTreeView extends HTMLBase {
|
|
85
|
+
static observedAttributes: string[];
|
|
86
|
+
private nodes;
|
|
87
|
+
private open;
|
|
88
|
+
private sel;
|
|
89
|
+
private focusId;
|
|
90
|
+
private built;
|
|
91
|
+
connectedCallback(): void;
|
|
92
|
+
attributeChangedCallback(name: string, old: string | null, next: string | null): void;
|
|
93
|
+
get items(): TreeNode[];
|
|
94
|
+
set items(v: TreeNode[]);
|
|
95
|
+
/** شناسهٔ گرهٔ انتخابشده */
|
|
96
|
+
get value(): string;
|
|
97
|
+
private parse;
|
|
98
|
+
private visible;
|
|
99
|
+
private render;
|
|
100
|
+
private find;
|
|
101
|
+
private toggle;
|
|
102
|
+
private choose;
|
|
103
|
+
private onKey;
|
|
104
|
+
}
|
|
105
|
+
export interface TourStep {
|
|
106
|
+
target: string;
|
|
107
|
+
title: string;
|
|
108
|
+
content: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* تور معرفی: کارت راهنما کنار هر بخش صفحه با برجسته کردن آن. مراحل از فرزندان <div data-target="#id" data-title="…">متن</div>
|
|
112
|
+
* یا element.steps؛ با element.start() یا دکمهای با data-kashi-tour="شناسهٔ تور" شروع میشود.
|
|
113
|
+
*/
|
|
114
|
+
export declare class KashiTour extends HTMLBase {
|
|
115
|
+
private list;
|
|
116
|
+
private i;
|
|
117
|
+
private spot;
|
|
118
|
+
private card;
|
|
119
|
+
private returnTo;
|
|
120
|
+
private key;
|
|
121
|
+
connectedCallback(): void;
|
|
122
|
+
disconnectedCallback(): void;
|
|
123
|
+
get steps(): TourStep[];
|
|
124
|
+
set steps(v: TourStep[]);
|
|
125
|
+
/** شروع تور از مرحلهٔ اول */
|
|
126
|
+
start(): void;
|
|
127
|
+
/** پایان تور */
|
|
128
|
+
stop(focusBack?: boolean): void;
|
|
129
|
+
private show;
|
|
130
|
+
private step;
|
|
131
|
+
private place;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* دو پنل با جداکنندهٔ قابل کشیدن: دو فرزند اول پنلها هستند؛ با کیبورد ←→ (یا ↑↓ در حالت vertical) و دوبار کلیک برای اندازهٔ اولیه.
|
|
135
|
+
*/
|
|
136
|
+
export declare class KashiSplitter extends HTMLBase {
|
|
137
|
+
static observedAttributes: string[];
|
|
138
|
+
private current;
|
|
139
|
+
private built;
|
|
140
|
+
private dragging;
|
|
141
|
+
connectedCallback(): void;
|
|
142
|
+
attributeChangedCallback(name: string, old: string | null, next: string | null): void;
|
|
143
|
+
/** اندازهٔ پنل اول به درصد */
|
|
144
|
+
get value(): number;
|
|
145
|
+
set value(v: number);
|
|
146
|
+
private num;
|
|
147
|
+
private get vertical();
|
|
148
|
+
private build;
|
|
149
|
+
private decorate;
|
|
150
|
+
private set;
|
|
151
|
+
private paint;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* منوی کناری: همان HTML منوی کناری کاشی (تب HTML صفحهٔ آن) را داخلش بگذارید؛ زیرمنوها
|
|
155
|
+
* (دکمه با aria-controls) با کلیک باز و بسته میشوند و با collapsed فقط آیکونها میمانند.
|
|
156
|
+
*/
|
|
157
|
+
export declare class KashiSideNav extends HTMLBase {
|
|
158
|
+
static observedAttributes: string[];
|
|
159
|
+
private built;
|
|
160
|
+
connectedCallback(): void;
|
|
161
|
+
attributeChangedCallback(): void;
|
|
162
|
+
private decorate;
|
|
163
|
+
}
|