svelte-comp 1.3.3 → 1.3.6
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/LICENSE.md +21 -21
- package/README.md +101 -100
- package/dist/App.svelte +507 -507
- package/dist/Container.svelte +59 -59
- package/dist/app.css +234 -235
- package/dist/app.d.ts +10 -0
- package/dist/lib/Accordion.svelte +155 -155
- package/dist/lib/Badge.svelte +44 -44
- package/dist/lib/Button.svelte +185 -170
- package/dist/lib/Calendar.svelte +384 -384
- package/dist/lib/Card.svelte +103 -103
- package/dist/lib/Carousel.svelte +293 -293
- package/dist/lib/Carousel.svelte.d.ts +1 -1
- package/dist/lib/CheckBox.svelte +210 -210
- package/dist/lib/CodeView.svelte +308 -307
- package/dist/lib/ColorPicker.svelte +159 -159
- package/dist/lib/ContextMenu.svelte +328 -322
- package/dist/lib/DatePicker.svelte +246 -246
- package/dist/lib/Dialog.svelte +233 -233
- package/dist/lib/Field.svelte +299 -299
- package/dist/lib/FilePicker.svelte +295 -240
- package/dist/lib/FilePicker.svelte.d.ts +6 -1
- package/dist/lib/Form.svelte +438 -438
- package/dist/lib/Hamburger.svelte +217 -217
- package/dist/lib/InstallPWA.svelte +94 -94
- package/dist/lib/Menu.svelte +623 -623
- package/dist/lib/NoticeBase.svelte +140 -140
- package/dist/lib/PaginatedCard.svelte +73 -73
- package/dist/lib/Pagination.svelte +119 -119
- package/dist/lib/PrimaryColorSelect.svelte +111 -111
- package/dist/lib/ProgressBar.svelte +141 -141
- package/dist/lib/ProgressCircle.svelte +190 -190
- package/dist/lib/Radio.svelte +189 -189
- package/dist/lib/SearchInput.svelte +104 -104
- package/dist/lib/Select.svelte +524 -524
- package/dist/lib/Slider.svelte +253 -253
- package/dist/lib/Splitter.svelte +159 -150
- package/dist/lib/Switch.svelte +168 -167
- package/dist/lib/Table.svelte +299 -299
- package/dist/lib/Tabs.svelte +213 -213
- package/dist/lib/ThemeToggle.svelte +128 -127
- package/dist/lib/TimePicker.svelte +312 -312
- package/dist/lib/TimePickerNew.svelte +634 -0
- package/dist/lib/TimePickerNew.svelte.d.ts +49 -0
- package/dist/lib/Toast.svelte +123 -123
- package/dist/lib/Tooltip.svelte +110 -110
- package/dist/lib/Topbar.svelte +107 -107
- package/dist/lib/__tests__/Accordion.test.d.ts +1 -0
- package/dist/lib/__tests__/Accordion.test.js +171 -0
- package/dist/lib/__tests__/Badge.test.d.ts +1 -0
- package/dist/lib/__tests__/Badge.test.js +41 -0
- package/dist/lib/__tests__/Button.test.d.ts +1 -0
- package/dist/lib/__tests__/Button.test.js +269 -0
- package/dist/lib/__tests__/Calendar.test.d.ts +1 -0
- package/dist/lib/__tests__/Calendar.test.js +171 -0
- package/dist/lib/__tests__/Card.test.d.ts +1 -0
- package/dist/lib/__tests__/Card.test.js +148 -0
- package/dist/lib/__tests__/Carousel.test.d.ts +1 -0
- package/dist/lib/__tests__/Carousel.test.js +439 -0
- package/dist/lib/__tests__/CheckBox.test.d.ts +1 -0
- package/dist/lib/__tests__/CheckBox.test.js +152 -0
- package/dist/lib/__tests__/CodeView.test.d.ts +1 -0
- package/dist/lib/__tests__/CodeView.test.js +157 -0
- package/dist/lib/__tests__/ColorPicker.test.d.ts +1 -0
- package/dist/lib/__tests__/ColorPicker.test.js +93 -0
- package/dist/lib/__tests__/ContextMenu.test.d.ts +1 -0
- package/dist/lib/__tests__/ContextMenu.test.js +67 -0
- package/dist/lib/__tests__/DatePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/DatePicker.test.js +108 -0
- package/dist/lib/__tests__/Dialog.test.d.ts +1 -0
- package/dist/lib/__tests__/Dialog.test.js +183 -0
- package/dist/lib/__tests__/Field.test.d.ts +1 -0
- package/dist/lib/__tests__/Field.test.js +190 -0
- package/dist/lib/__tests__/FilePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/FilePicker.test.js +179 -0
- package/dist/lib/__tests__/Form.integration.test.d.ts +1 -0
- package/dist/lib/__tests__/Form.integration.test.js +158 -0
- package/dist/lib/__tests__/Form.test.d.ts +1 -0
- package/dist/lib/__tests__/Form.test.js +463 -0
- package/dist/lib/__tests__/Hamburger.test.d.ts +1 -0
- package/dist/lib/__tests__/Hamburger.test.js +161 -0
- package/dist/lib/__tests__/InstallPWA.test.d.ts +1 -0
- package/dist/lib/__tests__/InstallPWA.test.js +15 -0
- package/dist/lib/__tests__/Menu.test.d.ts +1 -0
- package/dist/lib/__tests__/Menu.test.js +285 -0
- package/dist/lib/__tests__/NoticeBase.test.d.ts +1 -0
- package/dist/lib/__tests__/NoticeBase.test.js +60 -0
- package/dist/lib/__tests__/PaginatedCard.test.d.ts +1 -0
- package/dist/lib/__tests__/PaginatedCard.test.js +89 -0
- package/dist/lib/__tests__/Pagination.test.d.ts +1 -0
- package/dist/lib/__tests__/Pagination.test.js +168 -0
- package/dist/lib/__tests__/PrimaryColorSelect.test.d.ts +1 -0
- package/dist/lib/__tests__/PrimaryColorSelect.test.js +92 -0
- package/dist/lib/__tests__/ProgressBar.test.d.ts +1 -0
- package/dist/lib/__tests__/ProgressBar.test.js +69 -0
- package/dist/lib/__tests__/ProgressCircle.test.d.ts +1 -0
- package/dist/lib/__tests__/ProgressCircle.test.js +71 -0
- package/dist/lib/__tests__/Radio.test.d.ts +1 -0
- package/dist/lib/__tests__/Radio.test.js +127 -0
- package/dist/lib/__tests__/SearchInput.test.d.ts +1 -0
- package/dist/lib/__tests__/SearchInput.test.js +80 -0
- package/dist/lib/__tests__/Select.test.d.ts +1 -0
- package/dist/lib/__tests__/Select.test.js +408 -0
- package/dist/lib/__tests__/Slider.test.d.ts +1 -0
- package/dist/lib/__tests__/Slider.test.js +213 -0
- package/dist/lib/__tests__/Splitter.test.d.ts +1 -0
- package/dist/lib/__tests__/Splitter.test.js +87 -0
- package/dist/lib/__tests__/Switch.test.d.ts +1 -0
- package/dist/lib/__tests__/Switch.test.js +97 -0
- package/dist/lib/__tests__/Table.test.d.ts +1 -0
- package/dist/lib/__tests__/Table.test.js +349 -0
- package/dist/lib/__tests__/Tabs.test.d.ts +1 -0
- package/dist/lib/__tests__/Tabs.test.js +262 -0
- package/dist/lib/__tests__/ThemeToggle.test.d.ts +1 -0
- package/dist/lib/__tests__/ThemeToggle.test.js +84 -0
- package/dist/lib/__tests__/TimePicker.test.d.ts +1 -0
- package/dist/lib/__tests__/TimePicker.test.js +146 -0
- package/dist/lib/__tests__/TimePickerNew.test.d.ts +1 -0
- package/dist/lib/__tests__/TimePickerNew.test.js +322 -0
- package/dist/lib/__tests__/Toast.test.d.ts +1 -0
- package/dist/lib/__tests__/Toast.test.js +135 -0
- package/dist/lib/__tests__/Tooltip.test.d.ts +1 -0
- package/dist/lib/__tests__/Tooltip.test.js +171 -0
- package/dist/lib/__tests__/Topbar.test.d.ts +1 -0
- package/dist/lib/__tests__/Topbar.test.js +25 -0
- package/dist/lib/__tests__/setupLangContext.d.ts +1 -0
- package/dist/lib/__tests__/setupLangContext.js +65 -0
- package/dist/lib/__tests__/storage.test.d.ts +1 -0
- package/dist/lib/__tests__/storage.test.js +124 -0
- package/dist/lib/__tests__/utils.test.d.ts +1 -0
- package/dist/lib/__tests__/utils.test.js +11 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/lib/lang.d.ts +4 -0
- package/dist/lib/lang.js +4 -0
- package/dist/styles.css +234 -232
- package/dist/utils/index.js +15 -4
- package/package.json +52 -52
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
// $lib/__tests__/CodeView.test.ts
|
|
38
|
+
import { fireEvent, render } from "@testing-library/svelte";
|
|
39
|
+
import { afterEach, describe, it, expect, vi } from "vitest";
|
|
40
|
+
import CodeView from "../CodeView.svelte";
|
|
41
|
+
afterEach(function () {
|
|
42
|
+
vi.unstubAllGlobals();
|
|
43
|
+
});
|
|
44
|
+
describe("CodeView", function () {
|
|
45
|
+
var sample = "<div>Hello</div>";
|
|
46
|
+
it("renders readonly view with title, code and line numbers", function () {
|
|
47
|
+
var _a = render(CodeView, {
|
|
48
|
+
props: {
|
|
49
|
+
title: "My Code",
|
|
50
|
+
code: "line1\nline2",
|
|
51
|
+
language: "txt",
|
|
52
|
+
showLineNumbers: true,
|
|
53
|
+
},
|
|
54
|
+
}), container = _a.container, getByText = _a.getByText;
|
|
55
|
+
expect(getByText("My Code")).toBeTruthy();
|
|
56
|
+
var gutterLines = container.querySelectorAll(".tabular-nums div");
|
|
57
|
+
expect(gutterLines).toHaveLength(2);
|
|
58
|
+
expect(Array.from(gutterLines).map(function (n) { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })).toEqual([
|
|
59
|
+
"1",
|
|
60
|
+
"2",
|
|
61
|
+
]);
|
|
62
|
+
var textarea = container.querySelector("textarea");
|
|
63
|
+
expect(textarea).toBeTruthy();
|
|
64
|
+
expect(textarea.readOnly).toBe(true);
|
|
65
|
+
expect(textarea.value).toBe("line1\nline2");
|
|
66
|
+
});
|
|
67
|
+
it("supports editable mode with active line highlight layer", function () {
|
|
68
|
+
var container = render(CodeView, {
|
|
69
|
+
props: {
|
|
70
|
+
code: sample,
|
|
71
|
+
language: "html",
|
|
72
|
+
editable: true,
|
|
73
|
+
activeLine: true,
|
|
74
|
+
showLineNumbers: true,
|
|
75
|
+
},
|
|
76
|
+
}).container;
|
|
77
|
+
var textarea = container.querySelector("textarea");
|
|
78
|
+
expect(textarea.readOnly).toBe(false);
|
|
79
|
+
expect(textarea.value).toBe(sample);
|
|
80
|
+
var highlight = container.querySelector(".cv-highlight");
|
|
81
|
+
expect(highlight).toBeTruthy();
|
|
82
|
+
});
|
|
83
|
+
it("does not render line numbers when showLineNumbers is false", function () {
|
|
84
|
+
var container = render(CodeView, {
|
|
85
|
+
props: { code: sample, language: "html", showLineNumbers: false },
|
|
86
|
+
}).container;
|
|
87
|
+
expect(container.querySelector(".tabular-nums")).toBeNull();
|
|
88
|
+
});
|
|
89
|
+
it("hides copy button when showCopyButton is false", function () {
|
|
90
|
+
var queryByText = render(CodeView, {
|
|
91
|
+
props: { code: sample, language: "html", showCopyButton: false },
|
|
92
|
+
}).queryByText;
|
|
93
|
+
expect(queryByText("Copy")).toBeNull();
|
|
94
|
+
});
|
|
95
|
+
it("does not throw when clipboard API is unavailable", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
96
|
+
var getByText;
|
|
97
|
+
return __generator(this, function (_a) {
|
|
98
|
+
switch (_a.label) {
|
|
99
|
+
case 0:
|
|
100
|
+
vi.stubGlobal("navigator", {});
|
|
101
|
+
getByText = render(CodeView, {
|
|
102
|
+
props: { code: sample, language: "html" },
|
|
103
|
+
}).getByText;
|
|
104
|
+
return [4 /*yield*/, expect(fireEvent.click(getByText("Copy"))).resolves.toBeTruthy()];
|
|
105
|
+
case 1:
|
|
106
|
+
_a.sent();
|
|
107
|
+
return [2 /*return*/];
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}); });
|
|
111
|
+
it("updates textarea when code prop changes", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
112
|
+
var _a, container, rerender, textarea;
|
|
113
|
+
return __generator(this, function (_b) {
|
|
114
|
+
switch (_b.label) {
|
|
115
|
+
case 0:
|
|
116
|
+
_a = render(CodeView, {
|
|
117
|
+
props: { code: "first", language: "txt" },
|
|
118
|
+
}), container = _a.container, rerender = _a.rerender;
|
|
119
|
+
textarea = container.querySelector("textarea");
|
|
120
|
+
expect(textarea.value).toBe("first");
|
|
121
|
+
return [4 /*yield*/, rerender({ code: "second", language: "txt" })];
|
|
122
|
+
case 1:
|
|
123
|
+
_b.sent();
|
|
124
|
+
expect(textarea.value).toBe("second");
|
|
125
|
+
return [2 /*return*/];
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}); });
|
|
129
|
+
it("applies active line class only when activeLine is true", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
+
var _a, container, rerender, highlight;
|
|
131
|
+
return __generator(this, function (_b) {
|
|
132
|
+
switch (_b.label) {
|
|
133
|
+
case 0:
|
|
134
|
+
_a = render(CodeView, {
|
|
135
|
+
props: {
|
|
136
|
+
code: sample,
|
|
137
|
+
language: "html",
|
|
138
|
+
editable: true,
|
|
139
|
+
activeLine: false,
|
|
140
|
+
},
|
|
141
|
+
}), container = _a.container, rerender = _a.rerender;
|
|
142
|
+
highlight = container.querySelector(".cv-highlight");
|
|
143
|
+
expect(highlight === null || highlight === void 0 ? void 0 : highlight.classList.contains("cv-active-line")).toBe(false);
|
|
144
|
+
return [4 /*yield*/, rerender({
|
|
145
|
+
code: sample,
|
|
146
|
+
language: "html",
|
|
147
|
+
editable: true,
|
|
148
|
+
activeLine: true,
|
|
149
|
+
})];
|
|
150
|
+
case 1:
|
|
151
|
+
_b.sent();
|
|
152
|
+
expect(highlight === null || highlight === void 0 ? void 0 : highlight.classList.contains("cv-active-line")).toBe(true);
|
|
153
|
+
return [2 /*return*/];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}); });
|
|
157
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./setupLangContext";
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
// $lib/__tests__/ColorPicker.test.ts
|
|
38
|
+
import "./setupLangContext";
|
|
39
|
+
import { fireEvent, render } from "@testing-library/svelte";
|
|
40
|
+
import { describe, it, expect, vi } from "vitest";
|
|
41
|
+
import ColorPicker from "../ColorPicker.svelte";
|
|
42
|
+
describe("ColorPicker", function () {
|
|
43
|
+
it("shows placeholder text when no color is selected", function () {
|
|
44
|
+
var getByText = render(ColorPicker, {
|
|
45
|
+
props: { placeholder: "Pick any color" },
|
|
46
|
+
}).getByText;
|
|
47
|
+
expect(getByText("Pick any color")).toBeTruthy();
|
|
48
|
+
});
|
|
49
|
+
it("syncs provided value to the native input", function () {
|
|
50
|
+
var container = render(ColorPicker, {
|
|
51
|
+
props: { value: "#123456" },
|
|
52
|
+
}).container;
|
|
53
|
+
var input = container.querySelector('input[type="color"]');
|
|
54
|
+
expect(input.value).toBe("#123456");
|
|
55
|
+
expect(container.textContent).toContain("#123456");
|
|
56
|
+
});
|
|
57
|
+
it("emits onChange when the color input changes", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
+
var handle, container, input;
|
|
59
|
+
return __generator(this, function (_a) {
|
|
60
|
+
switch (_a.label) {
|
|
61
|
+
case 0:
|
|
62
|
+
handle = vi.fn();
|
|
63
|
+
container = render(ColorPicker, {
|
|
64
|
+
props: { onChange: handle },
|
|
65
|
+
}).container;
|
|
66
|
+
input = container.querySelector('input[type="color"]');
|
|
67
|
+
return [4 /*yield*/, fireEvent.change(input, { target: { value: "#00ff00" } })];
|
|
68
|
+
case 1:
|
|
69
|
+
_a.sent();
|
|
70
|
+
expect(handle).toHaveBeenCalledWith("#00ff00");
|
|
71
|
+
return [2 /*return*/];
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}); });
|
|
75
|
+
it("clears the selection when clicking the clear button", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
+
var handle, _a, getByText, queryByText;
|
|
77
|
+
return __generator(this, function (_b) {
|
|
78
|
+
switch (_b.label) {
|
|
79
|
+
case 0:
|
|
80
|
+
handle = vi.fn();
|
|
81
|
+
_a = render(ColorPicker, {
|
|
82
|
+
props: { value: "#abcdef", onChange: handle },
|
|
83
|
+
}), getByText = _a.getByText, queryByText = _a.queryByText;
|
|
84
|
+
return [4 /*yield*/, fireEvent.click(getByText("Clear"))];
|
|
85
|
+
case 1:
|
|
86
|
+
_b.sent();
|
|
87
|
+
expect(handle).toHaveBeenCalledWith(null);
|
|
88
|
+
expect(queryByText("#abcdef")).toBeNull();
|
|
89
|
+
return [2 /*return*/];
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}); });
|
|
93
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { tick } from "svelte";
|
|
38
|
+
import { describe, expect, it, vi } from "vitest";
|
|
39
|
+
import { fireEvent, render } from "@testing-library/svelte";
|
|
40
|
+
import { TEXTS } from "../lang";
|
|
41
|
+
import ContextMenu from "../ContextMenu.svelte";
|
|
42
|
+
var context = new Map([["lang", { value: "en" }]]);
|
|
43
|
+
var L = TEXTS.en.components.contextMenu;
|
|
44
|
+
describe("ContextMenu", function () {
|
|
45
|
+
it("opens at the provided coordinates and triggers undo", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
46
|
+
var onUndo, _a, component, getByTitle;
|
|
47
|
+
return __generator(this, function (_b) {
|
|
48
|
+
switch (_b.label) {
|
|
49
|
+
case 0:
|
|
50
|
+
onUndo = vi.fn();
|
|
51
|
+
_a = render(ContextMenu, {
|
|
52
|
+
props: { onUndo: onUndo },
|
|
53
|
+
context: context,
|
|
54
|
+
}), component = _a.component, getByTitle = _a.getByTitle;
|
|
55
|
+
component.openAt(new MouseEvent("contextmenu", { clientX: 8, clientY: 12 }));
|
|
56
|
+
return [4 /*yield*/, tick()];
|
|
57
|
+
case 1:
|
|
58
|
+
_b.sent();
|
|
59
|
+
return [4 /*yield*/, fireEvent.click(getByTitle(L.hotkeys.undo))];
|
|
60
|
+
case 2:
|
|
61
|
+
_b.sent();
|
|
62
|
+
expect(onUndo).toHaveBeenCalledTimes(1);
|
|
63
|
+
return [2 /*return*/];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}); });
|
|
67
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./setupLangContext";
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
// $lib/__tests__/DatePicker.test.ts
|
|
38
|
+
import "./setupLangContext";
|
|
39
|
+
import { fireEvent, render } from "@testing-library/svelte";
|
|
40
|
+
import { describe, it, expect, vi } from "vitest";
|
|
41
|
+
import DatePicker from "../DatePicker.svelte";
|
|
42
|
+
var isoDate = "2025-05-20";
|
|
43
|
+
describe("DatePicker", function () {
|
|
44
|
+
it("renders placeholder text when no value is provided", function () {
|
|
45
|
+
var getByText = render(DatePicker, {
|
|
46
|
+
props: { placeholder: "Pick a day" },
|
|
47
|
+
}).getByText;
|
|
48
|
+
expect(getByText("Pick a day")).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
it("emits onChange when selecting a date", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
51
|
+
var handle, _a, getByText, getByRole, target;
|
|
52
|
+
return __generator(this, function (_b) {
|
|
53
|
+
switch (_b.label) {
|
|
54
|
+
case 0:
|
|
55
|
+
handle = vi.fn();
|
|
56
|
+
_a = render(DatePicker, {
|
|
57
|
+
props: { value: isoDate, onChange: handle, locale: "en-US" },
|
|
58
|
+
}), getByText = _a.getByText, getByRole = _a.getByRole;
|
|
59
|
+
return [4 /*yield*/, fireEvent.click(getByText("Date"))];
|
|
60
|
+
case 1:
|
|
61
|
+
_b.sent();
|
|
62
|
+
target = getByRole("button", { name: /May 21, 2025/i });
|
|
63
|
+
return [4 /*yield*/, fireEvent.click(target)];
|
|
64
|
+
case 2:
|
|
65
|
+
_b.sent();
|
|
66
|
+
expect(handle).toHaveBeenCalledWith("2025-05-21");
|
|
67
|
+
return [2 /*return*/];
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}); });
|
|
71
|
+
it("closes the panel on Escape", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
72
|
+
var _a, getByText, getByRole, queryByRole;
|
|
73
|
+
return __generator(this, function (_b) {
|
|
74
|
+
switch (_b.label) {
|
|
75
|
+
case 0:
|
|
76
|
+
_a = render(DatePicker, {
|
|
77
|
+
props: { value: isoDate, locale: "en-US" },
|
|
78
|
+
}), getByText = _a.getByText, getByRole = _a.getByRole, queryByRole = _a.queryByRole;
|
|
79
|
+
return [4 /*yield*/, fireEvent.click(getByText("Date"))];
|
|
80
|
+
case 1:
|
|
81
|
+
_b.sent();
|
|
82
|
+
expect(getByRole("dialog")).toBeTruthy();
|
|
83
|
+
return [4 /*yield*/, fireEvent.keyDown(window, { key: "Escape" })];
|
|
84
|
+
case 2:
|
|
85
|
+
_b.sent();
|
|
86
|
+
expect(queryByRole("dialog")).toBeNull();
|
|
87
|
+
return [2 /*return*/];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}); });
|
|
91
|
+
it("clears the value when clicking Clear", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
|
+
var handle, getByText;
|
|
93
|
+
return __generator(this, function (_a) {
|
|
94
|
+
switch (_a.label) {
|
|
95
|
+
case 0:
|
|
96
|
+
handle = vi.fn();
|
|
97
|
+
getByText = render(DatePicker, {
|
|
98
|
+
props: { value: isoDate, onChange: handle },
|
|
99
|
+
}).getByText;
|
|
100
|
+
return [4 /*yield*/, fireEvent.click(getByText("Clear"))];
|
|
101
|
+
case 1:
|
|
102
|
+
_a.sent();
|
|
103
|
+
expect(handle).toHaveBeenCalledWith(null);
|
|
104
|
+
return [2 /*return*/];
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}); });
|
|
108
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
// $lib/__tests__/Dialog.test.ts
|
|
38
|
+
import { render, fireEvent } from "@testing-library/svelte";
|
|
39
|
+
import { describe, it, expect, vi } from "vitest";
|
|
40
|
+
import Dialog from "../Dialog.svelte";
|
|
41
|
+
describe("Dialog", function () {
|
|
42
|
+
it("renders modal dialog when open=true", function () {
|
|
43
|
+
var _a = render(Dialog, {
|
|
44
|
+
props: {
|
|
45
|
+
open: true,
|
|
46
|
+
title: "Test Dialog",
|
|
47
|
+
message: "Test message",
|
|
48
|
+
},
|
|
49
|
+
}), getByRole = _a.getByRole, getByText = _a.getByText;
|
|
50
|
+
expect(getByRole("dialog")).toBeTruthy();
|
|
51
|
+
expect(getByText("Test Dialog")).toBeTruthy();
|
|
52
|
+
expect(getByText("Test message")).toBeTruthy();
|
|
53
|
+
expect(getByText("OK")).toBeTruthy();
|
|
54
|
+
expect(getByText("Cancel")).toBeTruthy();
|
|
55
|
+
});
|
|
56
|
+
it("does not render when open=false", function () {
|
|
57
|
+
var queryByRole = render(Dialog, {
|
|
58
|
+
props: { open: false },
|
|
59
|
+
}).queryByRole;
|
|
60
|
+
expect(queryByRole("dialog")).toBeNull();
|
|
61
|
+
});
|
|
62
|
+
it("calls onConfirm when OK button is clicked", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
63
|
+
var mockOnConfirm, mockOnClose, getByText;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
mockOnConfirm = vi.fn();
|
|
68
|
+
mockOnClose = vi.fn();
|
|
69
|
+
getByText = render(Dialog, {
|
|
70
|
+
props: {
|
|
71
|
+
open: true,
|
|
72
|
+
onConfirm: mockOnConfirm,
|
|
73
|
+
onClose: mockOnClose,
|
|
74
|
+
},
|
|
75
|
+
}).getByText;
|
|
76
|
+
return [4 /*yield*/, fireEvent.click(getByText("OK"))];
|
|
77
|
+
case 1:
|
|
78
|
+
_a.sent();
|
|
79
|
+
expect(mockOnConfirm).toHaveBeenCalled();
|
|
80
|
+
expect(mockOnClose).toHaveBeenCalled();
|
|
81
|
+
return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}); });
|
|
85
|
+
it("calls onCancel when Cancel button is clicked", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
86
|
+
var mockOnCancel, mockOnClose, getByText;
|
|
87
|
+
return __generator(this, function (_a) {
|
|
88
|
+
switch (_a.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
mockOnCancel = vi.fn();
|
|
91
|
+
mockOnClose = vi.fn();
|
|
92
|
+
getByText = render(Dialog, {
|
|
93
|
+
props: {
|
|
94
|
+
open: true,
|
|
95
|
+
onCancel: mockOnCancel,
|
|
96
|
+
onClose: mockOnClose,
|
|
97
|
+
},
|
|
98
|
+
}).getByText;
|
|
99
|
+
return [4 /*yield*/, fireEvent.click(getByText("Cancel"))];
|
|
100
|
+
case 1:
|
|
101
|
+
_a.sent();
|
|
102
|
+
expect(mockOnCancel).toHaveBeenCalled();
|
|
103
|
+
expect(mockOnClose).toHaveBeenCalled();
|
|
104
|
+
return [2 /*return*/];
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}); });
|
|
108
|
+
it("handles Escape key to cancel", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
109
|
+
var mockOnCancel, mockOnClose, container, dialog;
|
|
110
|
+
return __generator(this, function (_a) {
|
|
111
|
+
switch (_a.label) {
|
|
112
|
+
case 0:
|
|
113
|
+
mockOnCancel = vi.fn();
|
|
114
|
+
mockOnClose = vi.fn();
|
|
115
|
+
container = render(Dialog, {
|
|
116
|
+
props: {
|
|
117
|
+
open: true,
|
|
118
|
+
onCancel: mockOnCancel,
|
|
119
|
+
onClose: mockOnClose,
|
|
120
|
+
},
|
|
121
|
+
}).container;
|
|
122
|
+
dialog = container.querySelector('[role="dialog"]');
|
|
123
|
+
return [4 /*yield*/, fireEvent.keyDown(dialog, { key: "Escape" })];
|
|
124
|
+
case 1:
|
|
125
|
+
_a.sent();
|
|
126
|
+
expect(mockOnCancel).toHaveBeenCalled();
|
|
127
|
+
expect(mockOnClose).toHaveBeenCalled();
|
|
128
|
+
return [2 /*return*/];
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}); });
|
|
132
|
+
it("traps focus with Tab key", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
133
|
+
var getByText, okButton, cancelButton;
|
|
134
|
+
return __generator(this, function (_a) {
|
|
135
|
+
switch (_a.label) {
|
|
136
|
+
case 0:
|
|
137
|
+
getByText = render(Dialog, {
|
|
138
|
+
props: { open: true },
|
|
139
|
+
}).getByText;
|
|
140
|
+
okButton = getByText("OK");
|
|
141
|
+
cancelButton = getByText("Cancel");
|
|
142
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 50); })];
|
|
143
|
+
case 1:
|
|
144
|
+
_a.sent();
|
|
145
|
+
expect(okButton).toBeTruthy();
|
|
146
|
+
expect(cancelButton).toBeTruthy();
|
|
147
|
+
return [4 /*yield*/, fireEvent.keyDown(okButton, { key: "Tab" })];
|
|
148
|
+
case 2:
|
|
149
|
+
_a.sent();
|
|
150
|
+
return [4 /*yield*/, fireEvent.keyDown(cancelButton, { key: "Tab" })];
|
|
151
|
+
case 3:
|
|
152
|
+
_a.sent();
|
|
153
|
+
return [4 /*yield*/, fireEvent.keyDown(okButton, { key: "Tab", shiftKey: true })];
|
|
154
|
+
case 4:
|
|
155
|
+
_a.sent();
|
|
156
|
+
expect(true).toBe(true);
|
|
157
|
+
return [2 /*return*/];
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}); });
|
|
161
|
+
it("renders as non-modal when modal=false", function () {
|
|
162
|
+
var getByRole = render(Dialog, {
|
|
163
|
+
props: {
|
|
164
|
+
open: true,
|
|
165
|
+
modal: false,
|
|
166
|
+
},
|
|
167
|
+
}).getByRole;
|
|
168
|
+
var dialog = getByRole("dialog");
|
|
169
|
+
expect(dialog.getAttribute("aria-modal")).toBe("false");
|
|
170
|
+
expect(dialog.className).toContain("top-[var(--spacing-md)]");
|
|
171
|
+
expect(dialog.className).toContain("right-[var(--spacing-md)]");
|
|
172
|
+
});
|
|
173
|
+
it("applies correct aria-label", function () {
|
|
174
|
+
var getByRole = render(Dialog, {
|
|
175
|
+
props: {
|
|
176
|
+
open: true,
|
|
177
|
+
title: "Test Title",
|
|
178
|
+
},
|
|
179
|
+
}).getByRole;
|
|
180
|
+
var dialog = getByRole("dialog");
|
|
181
|
+
expect(dialog.getAttribute("aria-label")).toBe("Test Title");
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|