@api-client/ui 0.5.39 → 0.5.40
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/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/.aiexclude +0 -3
- package/.cursor/rules/html-and-css-best-practices.mdc +0 -63
- package/.cursor/rules/lit-best-practices.mdc +0 -89
- package/.editorconfig +0 -29
- package/.github/CONTRIBUTING.md +0 -24
- package/.github/instructions/html-and-css-best-practices.instructions.md +0 -70
- package/.github/instructions/lit-best-practices.instructions.md +0 -90
- package/.github/release.yml +0 -14
- package/.github/stale.yml +0 -23
- package/.github/workflows/auto-release.yml +0 -182
- package/.github/workflows/release.yml +0 -82
- package/.prettierrc.js +0 -14
- package/.vscode/settings.json +0 -18
- package/RELEASE.md +0 -163
- package/RELEASE_SETUP.md +0 -235
- package/build/src/demo/DemoPage.d.ts +0 -81
- package/build/src/demo/DemoPage.d.ts.map +0 -1
- package/build/src/demo/DemoPage.js +0 -175
- package/build/src/demo/DemoPage.js.map +0 -1
- package/build/src/demo/DemoStyles.d.ts +0 -3
- package/build/src/demo/DemoStyles.d.ts.map +0 -1
- package/build/src/demo/DemoStyles.js +0 -60
- package/build/src/demo/DemoStyles.js.map +0 -1
- package/build/test/elements/navigation/Navigation.test.d.ts +0 -3
- package/build/test/elements/navigation/Navigation.test.d.ts.map +0 -1
- package/build/test/elements/navigation/Navigation.test.js +0 -113
- package/build/test/elements/navigation/Navigation.test.js.map +0 -1
- package/commitlint.config.cjs +0 -2
- package/demo/elements/authorization/AuthPlugin.js +0 -57
- package/demo/elements/authorization/AuthProxy.js +0 -215
- package/demo/elements/authorization/api-key.html +0 -27
- package/demo/elements/authorization/api-key.ts +0 -44
- package/demo/elements/authorization/basic.html +0 -27
- package/demo/elements/authorization/basic.ts +0 -43
- package/demo/elements/authorization/bearer.html +0 -27
- package/demo/elements/authorization/bearer.ts +0 -43
- package/demo/elements/authorization/env.js +0 -8
- package/demo/elements/authorization/index.html +0 -44
- package/demo/elements/authorization/ntlm.html +0 -27
- package/demo/elements/authorization/ntlm.ts +0 -43
- package/demo/elements/authorization/oauth-authorize.html +0 -75
- package/demo/elements/authorization/oauth-authorize.ts +0 -40
- package/demo/elements/authorization/oauth-error.html +0 -18
- package/demo/elements/authorization/oauth-error.ts +0 -10
- package/demo/elements/authorization/oauth-popup.html +0 -36
- package/demo/elements/authorization/oauth2.html +0 -27
- package/demo/elements/authorization/oauth2.ts +0 -100
- package/demo/elements/authorization/oidc.html +0 -27
- package/demo/elements/authorization/oidc.ts +0 -139
- package/demo/elements/authorization/private.crt +0 -31
- package/demo/elements/authorization/private.csr +0 -28
- package/demo/elements/authorization/private.key +0 -51
- package/demo/elements/authorization/private.pem +0 -31
- package/demo/elements/authorization/redirect.html +0 -20
- package/demo/elements/authorization/ssl-commands.sh +0 -30
- package/demo/elements/authorization/ssl.conf +0 -24
- package/demo/elements/autocomplete/index.html +0 -64
- package/demo/elements/autocomplete/index.ts +0 -171
- package/demo/elements/code-editor/CodeEditorDemo.ts +0 -173
- package/demo/elements/code-editor/index.html +0 -19
- package/demo/elements/context-menu/DemoIcons.ts +0 -21
- package/demo/elements/context-menu/basic.html +0 -25
- package/demo/elements/context-menu/basic.ts +0 -119
- package/demo/elements/context-menu/custom-data.html +0 -25
- package/demo/elements/context-menu/custom-data.ts +0 -62
- package/demo/elements/context-menu/demo.css +0 -28
- package/demo/elements/context-menu/enabled-state.html +0 -25
- package/demo/elements/context-menu/enabled-state.ts +0 -73
- package/demo/elements/context-menu/icons.html +0 -25
- package/demo/elements/context-menu/icons.ts +0 -64
- package/demo/elements/context-menu/index.html +0 -43
- package/demo/elements/context-menu/nested.html +0 -25
- package/demo/elements/context-menu/nestedt.ts +0 -152
- package/demo/elements/context-menu/no-execute.html +0 -25
- package/demo/elements/context-menu/no-execute.ts +0 -134
- package/demo/elements/context-menu/radio-menu.html +0 -25
- package/demo/elements/context-menu/radio-menu.ts +0 -83
- package/demo/elements/context-menu/separators.html +0 -25
- package/demo/elements/context-menu/separators.ts +0 -172
- package/demo/elements/currency/index.html +0 -91
- package/demo/elements/currency/index.ts +0 -352
- package/demo/elements/environment/environment-editor.html +0 -20
- package/demo/elements/environment/environment-editor.ts +0 -49
- package/demo/elements/environment/index.html +0 -33
- package/demo/elements/environment/server-editor.html +0 -20
- package/demo/elements/environment/server-editor.ts +0 -67
- package/demo/elements/environment/variables-editor.html +0 -20
- package/demo/elements/environment/variables-editor.ts +0 -94
- package/demo/elements/har/har-viewer.html +0 -20
- package/demo/elements/har/har-viewer.ts +0 -76
- package/demo/elements/har/har1.har +0 -3044
- package/demo/elements/har/har2.json +0 -439
- package/demo/elements/har/index.html +0 -26
- package/demo/elements/highlight/example.md +0 -27
- package/demo/elements/highlight/index.html +0 -31
- package/demo/elements/highlight/marked-highlight.html +0 -132
- package/demo/elements/highlight/marked-highlight.ts +0 -22
- package/demo/elements/highlight/prism-highlight.html +0 -62
- package/demo/elements/highlight/prism-highlight.ts +0 -17
- package/demo/elements/http/body-editor.html +0 -17
- package/demo/elements/http/body-editor.ts +0 -115
- package/demo/elements/http/headers.html +0 -17
- package/demo/elements/http/headers.ts +0 -59
- package/demo/elements/http/http-assertions.html +0 -20
- package/demo/elements/http/http-assertions.ts +0 -89
- package/demo/elements/http/http-flows.html +0 -23
- package/demo/elements/http/http-flows.ts +0 -89
- package/demo/elements/http/index.html +0 -45
- package/demo/elements/http/request-editor.html +0 -26
- package/demo/elements/http/request-editor.ts +0 -197
- package/demo/elements/http/request-log.html +0 -16
- package/demo/elements/http/request-log.ts +0 -136
- package/demo/elements/http/url-editing.html +0 -17
- package/demo/elements/http/url-editing.ts +0 -112
- package/demo/elements/icons/index.html +0 -81
- package/demo/elements/icons/index.ts +0 -52
- package/demo/elements/index.html +0 -72
- package/demo/elements/mention-textarea/index.html +0 -19
- package/demo/elements/mention-textarea/index.ts +0 -205
- package/demo/elements/navigation/navigation-item.html +0 -49
- package/demo/elements/navigation/navigation-item.ts +0 -131
- package/demo/elements/navigation/navigation.html +0 -20
- package/demo/elements/navigation/navigation.ts +0 -45
- package/demo/elements/project/index.html +0 -29
- package/demo/elements/project/project-run-report.html +0 -20
- package/demo/elements/project/project-run-report.ts +0 -132
- package/demo/elements/project/request-editor.html +0 -23
- package/demo/elements/project/request-editor.ts +0 -232
- package/demo/elements/user/user-avatar.html +0 -17
- package/demo/elements/user/user-avatar.ts +0 -60
- package/demo/env.js +0 -4
- package/demo/index.html +0 -34
- package/demo/layout/index.html +0 -94
- package/demo/layout/index.ts +0 -190
- package/demo/md/DemoStyles.ts +0 -61
- package/demo/md/UiDemoPage.ts +0 -6
- package/demo/md/buttons/button.html +0 -121
- package/demo/md/buttons/button.ts +0 -246
- package/demo/md/buttons/group.html +0 -36
- package/demo/md/buttons/group.ts +0 -171
- package/demo/md/checkbox/index.html +0 -39
- package/demo/md/checkbox/index.ts +0 -220
- package/demo/md/chip/chip.html +0 -70
- package/demo/md/chip/chip.ts +0 -219
- package/demo/md/chip/pawel6c9a.jpg +0 -0
- package/demo/md/collapse/CustomDetail.ts +0 -89
- package/demo/md/collapse/collapse.html +0 -21
- package/demo/md/collapse/collapse.ts +0 -78
- package/demo/md/date-picker/date-picker.ts +0 -336
- package/demo/md/date-picker/index.html +0 -171
- package/demo/md/dialog/confirm-dialog.html +0 -49
- package/demo/md/dialog/confirm-dialog.ts +0 -121
- package/demo/md/dialog/dialog.html +0 -25
- package/demo/md/dialog/dialog.ts +0 -468
- package/demo/md/dropdown-list/index.html +0 -31
- package/demo/md/dropdown-list/index.ts +0 -158
- package/demo/md/icon-button/index.html +0 -122
- package/demo/md/icon-button/index.ts +0 -132
- package/demo/md/index.html +0 -73
- package/demo/md/inputs/input.html +0 -73
- package/demo/md/inputs/input.ts +0 -278
- package/demo/md/inputs/radio.html +0 -39
- package/demo/md/inputs/radio.ts +0 -156
- package/demo/md/inputs/switch.html +0 -45
- package/demo/md/inputs/switch.ts +0 -144
- package/demo/md/list/list.html +0 -65
- package/demo/md/list/list.ts +0 -204
- package/demo/md/listbox/listbox.html +0 -31
- package/demo/md/listbox/listbox.ts +0 -27
- package/demo/md/menu/index.html +0 -19
- package/demo/md/menu/index.ts +0 -514
- package/demo/md/notification/snack.html +0 -21
- package/demo/md/notification/snack.ts +0 -70
- package/demo/md/progress/progress.html +0 -46
- package/demo/md/progress/progress.ts +0 -161
- package/demo/md/segmented-button/index.html +0 -21
- package/demo/md/segmented-button/index.ts +0 -55
- package/demo/md/select/index.html +0 -16
- package/demo/md/select/index.ts +0 -217
- package/demo/md/tabs/tabs.html +0 -40
- package/demo/md/tabs/tabs.ts +0 -214
- package/demo/oauth-popup.html +0 -36
- package/demo/page.css +0 -8
- package/demo/resources/calendar-month.png +0 -0
- package/demo/resources/favorite.png +0 -0
- package/demo/resources/fingerprint.png +0 -0
- package/demo/resources/home-work.png +0 -0
- package/demo/resources/mood.png +0 -0
- package/demo/resources/print.png +0 -0
- package/demo/resources/stars.png +0 -0
- package/demo/resources/theaters.png +0 -0
- package/demo/tsconfig.json +0 -4
- package/eslint.config.js +0 -97
- package/scripts/copy-assets.js +0 -21
- package/scripts/release.js +0 -66
- package/src/demo/DemoPage.ts +0 -169
- package/src/demo/DemoStyles.ts +0 -60
- package/test/README.md +0 -375
- package/test/contextual-menu/ContextMenu.test.ts +0 -760
- package/test/contextual-menu/ContextMenuElement.test.ts +0 -569
- package/test/core/activity.spec.ts +0 -413
- package/test/core/activity_manager.spec.ts +0 -544
- package/test/core/application.spec.ts +0 -218
- package/test/core/fragment.spec.ts +0 -565
- package/test/core/fragment_manager.spec.ts +0 -404
- package/test/core/live_data.spec.ts +0 -558
- package/test/core/renderer.spec.ts +0 -113
- package/test/dom-assertions.test.ts +0 -182
- package/test/elements/MonacoSetup.ts +0 -65
- package/test/elements/authorization/basic-method.test.ts +0 -177
- package/test/elements/authorization/bearer-method.test.ts +0 -143
- package/test/elements/authorization/ntlm-method.test.ts +0 -219
- package/test/elements/authorization/oauth2-client-credentials-method.test.ts +0 -334
- package/test/elements/authorization/oauth2-code-method.test.ts +0 -320
- package/test/elements/authorization/oauth2-custom-grant-method.test.ts +0 -255
- package/test/elements/authorization/oauth2-device-code-method.test.ts +0 -371
- package/test/elements/authorization/oauth2-implicit-method.test.ts +0 -407
- package/test/elements/authorization/oauth2-jwt-method.test.ts +0 -217
- package/test/elements/authorization/oauth2-password-method.test.ts +0 -275
- package/test/elements/authorization/openid-method.test.ts +0 -591
- package/test/elements/autocomplete/autocomplete-input.spec.ts +0 -646
- package/test/elements/code-editor/code-editor.accessibility.test.ts +0 -298
- package/test/elements/code-editor/code-editor.test.ts +0 -574
- package/test/elements/currency/CurrencyPicker.accessibility.test.ts +0 -328
- package/test/elements/currency/CurrencyPicker.core.test.ts +0 -318
- package/test/elements/currency/CurrencyPicker.integration.test.ts +0 -482
- package/test/elements/currency/CurrencyPicker.test.ts +0 -486
- package/test/elements/data-table/DataTable.browser.test.ts +0 -649
- package/test/elements/har/HarUtils.test.ts +0 -45
- package/test/elements/har/HarViewerElement.test.ts +0 -687
- package/test/elements/har/test-data/har1.har +0 -3044
- package/test/elements/highlight/MarkedHighlightElement.test.ts +0 -452
- package/test/elements/highlight/PrismHighlightElement.test.ts +0 -79
- package/test/elements/highlight/PrismHighlighter.test.ts +0 -94
- package/test/elements/highlight/remoteSanitization.md +0 -1
- package/test/elements/highlight/test.md +0 -3
- package/test/elements/highlight/test1.md +0 -3
- package/test/elements/highlight/test2.md +0 -1
- package/test/elements/http/BodyFormdataEditorElement.test.ts +0 -482
- package/test/elements/http/BodyMultipartEditorElement.test.ts +0 -658
- package/test/elements/http/BodyRawEditorElement.test.ts +0 -90
- package/test/elements/http/CertificateAdd.test.ts +0 -457
- package/test/elements/http/HttpAssertions.test.ts +0 -994
- package/test/elements/http/HttpFlows.test.ts +0 -502
- package/test/elements/http/UrlEncodeUtils.test.ts +0 -202
- package/test/elements/layout/SplitItem.test.ts +0 -440
- package/test/elements/layout/SplitLayoutManager.test.ts +0 -1501
- package/test/elements/layout/SplitPanel.test.ts +0 -1109
- package/test/elements/mention-textarea/MentionTextArea.basic.test.ts +0 -114
- package/test/elements/mention-textarea/MentionTextArea.test.ts +0 -613
- package/test/elements/navigation/Navigation.test.ts +0 -120
- package/test/env.ts +0 -15
- package/test/events/EventTypes.test.ts +0 -363
- package/test/events/EventsTestHelpers.ts +0 -16
- package/test/helpers/TestUtils.ts +0 -243
- package/test/helpers/UiMock.ts +0 -185
- package/test/lib/Dom.test.ts +0 -231
- package/test/md/button/UiButton.test.ts +0 -347
- package/test/md/button/UiIconButton.test.ts +0 -155
- package/test/md/chip/UiChip.test.ts +0 -219
- package/test/md/collapse/UiCollapse.test.ts +0 -250
- package/test/md/collapse/flex-layout.test.ts +0 -105
- package/test/md/date-time/DateTime.test.ts +0 -348
- package/test/md/dialog/UiConfirmDialog.test.ts +0 -131
- package/test/md/dialog/UiDialog.test.ts +0 -759
- package/test/md/menu/Menu.test.ts +0 -855
- package/test/md/menu/MenuIntegration.test.ts +0 -426
- package/test/md/menu/MenuItem.test.ts +0 -652
- package/test/md/menu/SubMenu.test.ts +0 -410
- package/test/md/progress/UiCircularProgressElement.test.ts +0 -481
- package/test/md/progress/UiProgressElement.test.ts +0 -117
- package/test/md/progress/UiRangeElement.test.ts +0 -156
- package/test/md/select/Select.test.ts +0 -925
- package/test/plugins/takeScreenshotPlugin.js +0 -35
- package/test/setup.test.ts +0 -217
- package/test/setup.ts +0 -117
- package/test/tsconfig.json +0 -7
- package/web-dev-server.config.js +0 -21
- package/web-test-runner.config.js +0 -90
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { html } from 'lit';
|
|
3
|
-
import { RenderableMixin } from '../mixins/RenderableMixin.js';
|
|
4
|
-
import reactive from '../decorators/reactive.js';
|
|
5
|
-
import styles from './DemoStyles.js';
|
|
6
|
-
import { RouteMixin } from '../mixins/RouteMixin.js';
|
|
7
|
-
import * as MonacoLoader from '../monaco/loader.js';
|
|
8
|
-
import typography from '../styles/m3/typography.module.js';
|
|
9
|
-
import surface from '../styles/m3/surface.module.js';
|
|
10
|
-
import { adaptStatic } from '../decorators/styles.js';
|
|
11
|
-
import '../md/icons/ui-icon.js';
|
|
12
|
-
import '../md/button/ui-button.js';
|
|
13
|
-
const Base = RenderableMixin(RouteMixin(EventTarget));
|
|
14
|
-
/**
|
|
15
|
-
* A base class for demo pages in the API Client ecosystem.
|
|
16
|
-
*/
|
|
17
|
-
let DemoPage = (() => {
|
|
18
|
-
let _classSuper = Base;
|
|
19
|
-
let _staticExtraInitializers = [];
|
|
20
|
-
let _static_get_styles_decorators;
|
|
21
|
-
let _componentName_decorators;
|
|
22
|
-
let _componentName_initializers = [];
|
|
23
|
-
let _componentName_extraInitializers = [];
|
|
24
|
-
let _darkThemeActive_decorators;
|
|
25
|
-
let _darkThemeActive_initializers = [];
|
|
26
|
-
let _darkThemeActive_extraInitializers = [];
|
|
27
|
-
return class DemoPage extends _classSuper {
|
|
28
|
-
static {
|
|
29
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
30
|
-
_static_get_styles_decorators = [adaptStatic];
|
|
31
|
-
_componentName_decorators = [reactive()];
|
|
32
|
-
_darkThemeActive_decorators = [reactive()];
|
|
33
|
-
__esDecorate(this, null, _static_get_styles_decorators, { kind: "getter", name: "styles", static: true, private: false, access: { has: obj => "styles" in obj, get: obj => obj.styles }, metadata: _metadata }, null, _staticExtraInitializers);
|
|
34
|
-
__esDecorate(this, null, _componentName_decorators, { kind: "accessor", name: "componentName", static: false, private: false, access: { has: obj => "componentName" in obj, get: obj => obj.componentName, set: (obj, value) => { obj.componentName = value; } }, metadata: _metadata }, _componentName_initializers, _componentName_extraInitializers);
|
|
35
|
-
__esDecorate(this, null, _darkThemeActive_decorators, { kind: "accessor", name: "darkThemeActive", static: false, private: false, access: { has: obj => "darkThemeActive" in obj, get: obj => obj.darkThemeActive, set: (obj, value) => { obj.darkThemeActive = value; } }, metadata: _metadata }, _darkThemeActive_initializers, _darkThemeActive_extraInitializers);
|
|
36
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
37
|
-
__runInitializers(this, _staticExtraInitializers);
|
|
38
|
-
}
|
|
39
|
-
static get styles() {
|
|
40
|
-
return [typography, styles, surface];
|
|
41
|
-
}
|
|
42
|
-
#componentName_accessor_storage = __runInitializers(this, _componentName_initializers, ''
|
|
43
|
-
/**
|
|
44
|
-
* Determines whether the initial render had run and the `firstRender()`
|
|
45
|
-
* function was called.
|
|
46
|
-
*/
|
|
47
|
-
);
|
|
48
|
-
/**
|
|
49
|
-
* Component name rendered in the header section.
|
|
50
|
-
*/
|
|
51
|
-
get componentName() { return this.#componentName_accessor_storage; }
|
|
52
|
-
set componentName(value) { this.#componentName_accessor_storage = value; }
|
|
53
|
-
#firstRendered_accessor_storage = (__runInitializers(this, _componentName_extraInitializers), false);
|
|
54
|
-
/**
|
|
55
|
-
* Determines whether the initial render had run and the `firstRender()`
|
|
56
|
-
* function was called.
|
|
57
|
-
*/
|
|
58
|
-
get firstRendered() { return this.#firstRendered_accessor_storage; }
|
|
59
|
-
set firstRendered(value) { this.#firstRendered_accessor_storage = value; }
|
|
60
|
-
#darkThemeActive_accessor_storage = __runInitializers(this, _darkThemeActive_initializers, false
|
|
61
|
-
/**
|
|
62
|
-
* For some demo pages, whether the user is authenticated in the store.
|
|
63
|
-
*/
|
|
64
|
-
);
|
|
65
|
-
/**
|
|
66
|
-
* Whether or not the dark theme is active
|
|
67
|
-
*/
|
|
68
|
-
get darkThemeActive() { return this.#darkThemeActive_accessor_storage; }
|
|
69
|
-
set darkThemeActive(value) { this.#darkThemeActive_accessor_storage = value; }
|
|
70
|
-
/**
|
|
71
|
-
* For some demo pages, whether the user is authenticated in the store.
|
|
72
|
-
*/
|
|
73
|
-
authenticated = (__runInitializers(this, _darkThemeActive_extraInitializers), false);
|
|
74
|
-
constructor() {
|
|
75
|
-
super();
|
|
76
|
-
this.handleMediaQuery = this.handleMediaQuery.bind(this);
|
|
77
|
-
this.initMediaQueries();
|
|
78
|
-
document.body.classList.add('demo');
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Initializes media queries and observers.
|
|
82
|
-
*/
|
|
83
|
-
initMediaQueries() {
|
|
84
|
-
const matcher = window.matchMedia('(prefers-color-scheme: dark)');
|
|
85
|
-
if (matcher.matches) {
|
|
86
|
-
this.darkThemeActive = true;
|
|
87
|
-
}
|
|
88
|
-
this.themeActiveCallback();
|
|
89
|
-
matcher.addEventListener('change', this.handleMediaQuery);
|
|
90
|
-
}
|
|
91
|
-
handleMediaQuery(e) {
|
|
92
|
-
this.darkThemeActive = e.matches;
|
|
93
|
-
this.themeActiveCallback();
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* The callback is called when the `darkThemeActive` property change.
|
|
97
|
-
* Overwrite this function to change the theme of the demo page.
|
|
98
|
-
*
|
|
99
|
-
* Note, this is not called by the `darkThemeActive` setter. This is called during the
|
|
100
|
-
* initialization and then when the media query event is dispatched.
|
|
101
|
-
* Call this manually when changing this value in the child page.
|
|
102
|
-
*/
|
|
103
|
-
themeActiveCallback() {
|
|
104
|
-
const { darkThemeActive } = this;
|
|
105
|
-
if (darkThemeActive) {
|
|
106
|
-
this.activateTheme('dark');
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.activateTheme('light');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
activateTheme(type) {
|
|
113
|
-
const root = document.querySelector('html');
|
|
114
|
-
if (!root) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const { classList } = root;
|
|
118
|
-
// clear all themes
|
|
119
|
-
classList.forEach((value) => {
|
|
120
|
-
if (value.startsWith('theme-')) {
|
|
121
|
-
classList.remove(value);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
const name = `theme-${type}`;
|
|
125
|
-
classList.add(name);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* A handler for the `change` event for an element that has `checked` and `name` properties.
|
|
129
|
-
* This can be used with `ui-switch`, `ui-checkbox`, and `checkbox` elements.
|
|
130
|
-
*
|
|
131
|
-
* The `name` should correspond to a variable name to be set. The set value is the value
|
|
132
|
-
* of `checked` property read from the event's target.
|
|
133
|
-
*/
|
|
134
|
-
_toggleBooleanOption(e) {
|
|
135
|
-
const { name, checked } = e.target;
|
|
136
|
-
this[name] = checked;
|
|
137
|
-
}
|
|
138
|
-
async loadMonaco() {
|
|
139
|
-
const base = new URL('/node_modules/monaco-editor/', window.location.href).toString();
|
|
140
|
-
MonacoLoader.createEnvironment(base);
|
|
141
|
-
await MonacoLoader.loadMonaco(base);
|
|
142
|
-
await MonacoLoader.monacoReady();
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* The page render function. Usually you don't need to use it.
|
|
146
|
-
* It renders the header template, main section, and the content.
|
|
147
|
-
*/
|
|
148
|
-
pageTemplate() {
|
|
149
|
-
return html ` ${this.headerTemplate()} ${this.navigationTemplate()}
|
|
150
|
-
<main>${this.contentTemplate()}</main>`;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Call this on the top of the `render()` method to render demo navigation
|
|
154
|
-
* @returns HTML template for demo header
|
|
155
|
-
*/
|
|
156
|
-
headerTemplate() {
|
|
157
|
-
const { componentName } = this;
|
|
158
|
-
return html ` <header>${componentName ? html `<h1 class="api-title">${componentName}</h1>` : ''}</header>`;
|
|
159
|
-
}
|
|
160
|
-
navigationTemplate() {
|
|
161
|
-
return html ``;
|
|
162
|
-
}
|
|
163
|
-
handleAuthenticate() {
|
|
164
|
-
// ...
|
|
165
|
-
}
|
|
166
|
-
authenticateTemplate() {
|
|
167
|
-
return html `
|
|
168
|
-
<p>Store authorization required.</p>
|
|
169
|
-
<ui-button color="filled" @click="${this.handleAuthenticate}">Authenticate</ui-button>
|
|
170
|
-
`;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
})();
|
|
174
|
-
export { DemoPage };
|
|
175
|
-
//# sourceMappingURL=DemoPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DemoPage.js","sourceRoot":"","sources":["../../../src/demo/DemoPage.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult } from 'lit'\nimport { RenderableMixin } from '../mixins/RenderableMixin.js'\nimport reactive from '../decorators/reactive.js'\nimport styles from './DemoStyles.js'\nimport { RouteMixin } from '../mixins/RouteMixin.js'\nimport * as MonacoLoader from '../monaco/loader.js'\nimport typography from '../styles/m3/typography.module.js'\nimport surface from '../styles/m3/surface.module.js'\nimport type CheckboxElement from '../md/checkbox/internals/CheckboxElement.js'\nimport { adaptStatic } from '../decorators/styles.js'\n\nimport '../md/icons/ui-icon.js'\nimport '../md/button/ui-button.js'\n\nconst Base = RenderableMixin(RouteMixin(EventTarget))\n\n/**\n * A base class for demo pages in the API Client ecosystem.\n */\nexport abstract class DemoPage extends Base {\n @adaptStatic\n static get styles(): CSSResult[] {\n return [typography, styles, surface]\n }\n\n /**\n * Component name rendered in the header section.\n */\n @reactive() accessor componentName = ''\n\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n */\n override accessor firstRendered = false\n\n /**\n * Whether or not the dark theme is active\n */\n @reactive() accessor darkThemeActive = false\n\n /**\n * For some demo pages, whether the user is authenticated in the store.\n */\n authenticated = false\n\n constructor() {\n super()\n this.handleMediaQuery = this.handleMediaQuery.bind(this)\n this.initMediaQueries()\n\n document.body.classList.add('demo')\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const matcher = window.matchMedia('(prefers-color-scheme: dark)')\n if (matcher.matches) {\n this.darkThemeActive = true\n }\n this.themeActiveCallback()\n matcher.addEventListener('change', this.handleMediaQuery)\n }\n\n protected handleMediaQuery(e: MediaQueryListEvent): void {\n this.darkThemeActive = e.matches\n this.themeActiveCallback()\n }\n\n /**\n * The callback is called when the `darkThemeActive` property change.\n * Overwrite this function to change the theme of the demo page.\n *\n * Note, this is not called by the `darkThemeActive` setter. This is called during the\n * initialization and then when the media query event is dispatched.\n * Call this manually when changing this value in the child page.\n */\n protected themeActiveCallback(): void {\n const { darkThemeActive } = this\n if (darkThemeActive) {\n this.activateTheme('dark')\n } else {\n this.activateTheme('light')\n }\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html')\n if (!root) {\n return\n }\n const { classList } = root\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value)\n }\n })\n const name = `theme-${type}`\n classList.add(name)\n }\n\n /**\n * A handler for the `change` event for an element that has `checked` and `name` properties.\n * This can be used with `ui-switch`, `ui-checkbox`, and `checkbox` elements.\n *\n * The `name` should correspond to a variable name to be set. The set value is the value\n * of `checked` property read from the event's target.\n */\n protected _toggleBooleanOption(e: Event): void {\n const { name, checked } = e.target as CheckboxElement\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(this as any)[name as string] = checked\n }\n\n async loadMonaco(): Promise<void> {\n const base = new URL('/node_modules/monaco-editor/', window.location.href).toString()\n MonacoLoader.createEnvironment(base)\n await MonacoLoader.loadMonaco(base)\n await MonacoLoader.monacoReady()\n }\n\n /**\n * The page render function. Usually you don't need to use it.\n * It renders the header template, main section, and the content.\n */\n override pageTemplate(): TemplateResult {\n return html` ${this.headerTemplate()} ${this.navigationTemplate()}\n <main>${this.contentTemplate()}</main>`\n }\n\n /**\n * Call this on the top of the `render()` method to render demo navigation\n * @returns HTML template for demo header\n */\n headerTemplate(): TemplateResult {\n const { componentName } = this\n return html` <header>${componentName ? html`<h1 class=\"api-title\">${componentName}</h1>` : ''}</header>`\n }\n\n navigationTemplate(): TemplateResult {\n return html``\n }\n\n /**\n * Abstract method. When not overriding `render()` method you can use\n * this function to render content inside the standard API components layout.\n *\n * ```\n * contentTemplate() {\n * return html`<p>Demo content</p>`;\n * }\n * ```\n */\n abstract contentTemplate(): TemplateResult\n\n handleAuthenticate(): void {\n // ...\n }\n\n authenticateTemplate(): TemplateResult {\n return html`\n <p>Store authorization required.</p>\n <ui-button color=\"filled\" @click=\"${this.handleAuthenticate}\">Authenticate</ui-button>\n `\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DemoStyles.d.ts","sourceRoot":"","sources":["../../../src/demo/DemoStyles.ts"],"names":[],"mappings":";AAEA,wBAyDC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { css } from 'lit';
|
|
2
|
-
export default css `
|
|
3
|
-
:root {
|
|
4
|
-
--dot-size: 1px;
|
|
5
|
-
--dot-space: 7px;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
html,
|
|
9
|
-
body {
|
|
10
|
-
margin: 0;
|
|
11
|
-
font-family: 'Roboto', 'Noto', sans-serif;
|
|
12
|
-
background-color: var(--md-sys-color-surface);
|
|
13
|
-
color: var(--md-sys-color-on-surface);
|
|
14
|
-
background-image: radial-gradient(var(--md-sys-color-inverse-on-surface) 1px, transparent 0);
|
|
15
|
-
background-size: var(--dot-space) var(--dot-space);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.demo {
|
|
19
|
-
margin: 0;
|
|
20
|
-
padding: 0;
|
|
21
|
-
min-height: 100vh;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
header {
|
|
25
|
-
background-color: var(--md-sys-color-surface-variant);
|
|
26
|
-
color: var(--md-sys-color-on-surface-variant);
|
|
27
|
-
display: flex;
|
|
28
|
-
align-items: center;
|
|
29
|
-
|
|
30
|
-
max-width: 1440px;
|
|
31
|
-
margin: 20px 40px;
|
|
32
|
-
padding: 0 24px;
|
|
33
|
-
border-radius: 40px;
|
|
34
|
-
|
|
35
|
-
font-family: var(--md-sys-typescale-title-large-font);
|
|
36
|
-
font-weight: var(--md-sys-typescale-title-large-weight);
|
|
37
|
-
font-size: var(--md-sys-typescale-title-large-size);
|
|
38
|
-
letter-spacing: var(--md-sys-typescale-title-large-tracking);
|
|
39
|
-
line-height: var(--md-sys-typescale-title-large-height);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#app {
|
|
43
|
-
height: 100%;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
main {
|
|
47
|
-
/* max-width: 900px;
|
|
48
|
-
margin: 40px auto; */
|
|
49
|
-
border-radius: 40px;
|
|
50
|
-
padding: 24px;
|
|
51
|
-
|
|
52
|
-
/* background-color: var(--md-sys-color-primary-container);
|
|
53
|
-
color: var(--md-sys-color-on-primary-container); */
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.demo-section {
|
|
57
|
-
margin: 60px 0;
|
|
58
|
-
}
|
|
59
|
-
`;
|
|
60
|
-
//# sourceMappingURL=DemoStyles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DemoStyles.js","sourceRoot":"","sources":["../../../src/demo/DemoStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :root {\n --dot-size: 1px;\n --dot-space: 7px;\n }\n\n html,\n body {\n margin: 0;\n font-family: 'Roboto', 'Noto', sans-serif;\n background-color: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n background-image: radial-gradient(var(--md-sys-color-inverse-on-surface) 1px, transparent 0);\n background-size: var(--dot-space) var(--dot-space);\n }\n\n .demo {\n margin: 0;\n padding: 0;\n min-height: 100vh;\n }\n\n header {\n background-color: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface-variant);\n display: flex;\n align-items: center;\n\n max-width: 1440px;\n margin: 20px 40px;\n padding: 0 24px;\n border-radius: 40px;\n\n font-family: var(--md-sys-typescale-title-large-font);\n font-weight: var(--md-sys-typescale-title-large-weight);\n font-size: var(--md-sys-typescale-title-large-size);\n letter-spacing: var(--md-sys-typescale-title-large-tracking);\n line-height: var(--md-sys-typescale-title-large-height);\n }\n\n #app {\n height: 100%;\n }\n\n main {\n /* max-width: 900px;\n margin: 40px auto; */\n border-radius: 40px;\n padding: 24px;\n\n /* background-color: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container); */\n }\n\n .demo-section {\n margin: 60px 0;\n }\n`\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.test.d.ts","sourceRoot":"","sources":["../../../../test/elements/navigation/Navigation.test.ts"],"names":[],"mappings":"AAEA,OAAO,mDAAmD,CAAA;AAC1D,OAAO,wDAAwD,CAAA"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { html, fixture, assert, oneEvent, aTimeout } from '@open-wc/testing';
|
|
2
|
-
import '../../../src/elements/navigation/ui-navigation.js';
|
|
3
|
-
import '../../../src/elements/navigation/ui-navigation-item.js';
|
|
4
|
-
describe('Navigation', () => {
|
|
5
|
-
it('renders with slot content', async () => {
|
|
6
|
-
const el = await fixture(html `
|
|
7
|
-
<ui-navigation aria-label="Main navigation">
|
|
8
|
-
<ui-navigation-item selected aria-current="page">Home</ui-navigation-item>
|
|
9
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
10
|
-
<ui-navigation-item>Files</ui-navigation-item>
|
|
11
|
-
</ui-navigation>
|
|
12
|
-
`);
|
|
13
|
-
const nav = el.shadowRoot.querySelector('nav');
|
|
14
|
-
assert.ok(nav, 'nav element is rendered');
|
|
15
|
-
assert.equal(nav?.getAttribute('aria-label'), 'Main navigation');
|
|
16
|
-
const items = el._items;
|
|
17
|
-
assert.equal(items.length, 3);
|
|
18
|
-
assert.isTrue(items[0].selected);
|
|
19
|
-
assert.equal(items[0].getAttribute('aria-current'), 'page');
|
|
20
|
-
});
|
|
21
|
-
it('sets correct tabindex for items', async () => {
|
|
22
|
-
const el = await fixture(html `
|
|
23
|
-
<ui-navigation>
|
|
24
|
-
<ui-navigation-item selected>Home</ui-navigation-item>
|
|
25
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
26
|
-
</ui-navigation>
|
|
27
|
-
`);
|
|
28
|
-
const items = el._items;
|
|
29
|
-
assert.equal(items[0].getAttribute('tabindex'), '0');
|
|
30
|
-
assert.equal(items[1].getAttribute('tabindex'), '-1');
|
|
31
|
-
});
|
|
32
|
-
it('selects item on click and fires select event', async () => {
|
|
33
|
-
const el = await fixture(html `
|
|
34
|
-
<ui-navigation>
|
|
35
|
-
<ui-navigation-item>Home</ui-navigation-item>
|
|
36
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
37
|
-
</ui-navigation>
|
|
38
|
-
`);
|
|
39
|
-
const items = el._items;
|
|
40
|
-
setTimeout(() => items[1].click());
|
|
41
|
-
const ev = await oneEvent(el, 'select');
|
|
42
|
-
assert.equal(ev.detail.item, items[1]);
|
|
43
|
-
assert.isTrue(items[1].selected);
|
|
44
|
-
assert.equal(items[1].getAttribute('tabindex'), '0');
|
|
45
|
-
assert.isFalse(items[0].selected);
|
|
46
|
-
assert.equal(items[0].getAttribute('tabindex'), '-1');
|
|
47
|
-
});
|
|
48
|
-
it('handles keyboard navigation (vertical)', async () => {
|
|
49
|
-
const el = await fixture(html `
|
|
50
|
-
<ui-navigation>
|
|
51
|
-
<ui-navigation-item>Home</ui-navigation-item>
|
|
52
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
53
|
-
<ui-navigation-item>Files</ui-navigation-item>
|
|
54
|
-
</ui-navigation>
|
|
55
|
-
`);
|
|
56
|
-
const items = el._items;
|
|
57
|
-
items[0].focus();
|
|
58
|
-
// ArrowDown moves to next
|
|
59
|
-
items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
|
|
60
|
-
await aTimeout(0);
|
|
61
|
-
assert.dom.equal(document.activeElement, items[1]);
|
|
62
|
-
// ArrowUp wraps to last
|
|
63
|
-
items[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }));
|
|
64
|
-
await aTimeout(0);
|
|
65
|
-
assert.dom.equal(document.activeElement, items[0]);
|
|
66
|
-
});
|
|
67
|
-
it('handles keyboard navigation (horizontal)', async () => {
|
|
68
|
-
const el = await fixture(html `
|
|
69
|
-
<ui-navigation orientation="horizontal">
|
|
70
|
-
<ui-navigation-item>Home</ui-navigation-item>
|
|
71
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
72
|
-
</ui-navigation>
|
|
73
|
-
`);
|
|
74
|
-
const items = el._items;
|
|
75
|
-
items[0].focus();
|
|
76
|
-
items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
|
|
77
|
-
await aTimeout(0);
|
|
78
|
-
assert.dom.equal(document.activeElement, items[1]);
|
|
79
|
-
items[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
|
|
80
|
-
await aTimeout(0);
|
|
81
|
-
assert.dom.equal(document.activeElement, items[0]);
|
|
82
|
-
});
|
|
83
|
-
it('skips disabled items in navigation', async () => {
|
|
84
|
-
const el = await fixture(html `
|
|
85
|
-
<ui-navigation>
|
|
86
|
-
<ui-navigation-item>Home</ui-navigation-item>
|
|
87
|
-
<ui-navigation-item disabled>Search</ui-navigation-item>
|
|
88
|
-
<ui-navigation-item>Files</ui-navigation-item>
|
|
89
|
-
</ui-navigation>
|
|
90
|
-
`);
|
|
91
|
-
const items = el._items;
|
|
92
|
-
items[0].focus();
|
|
93
|
-
items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
|
|
94
|
-
await aTimeout(0);
|
|
95
|
-
// Should skip disabled and go to Files
|
|
96
|
-
assert.dom.equal(document.activeElement, items[2]);
|
|
97
|
-
});
|
|
98
|
-
it('sets aria-current on selected item if current is set', async () => {
|
|
99
|
-
const el = await fixture(html `
|
|
100
|
-
<ui-navigation current="page">
|
|
101
|
-
<ui-navigation-item>Home</ui-navigation-item>
|
|
102
|
-
<ui-navigation-item>Search</ui-navigation-item>
|
|
103
|
-
</ui-navigation>
|
|
104
|
-
`);
|
|
105
|
-
const items = el._items;
|
|
106
|
-
// Simulate user selection by clicking the item (public API)
|
|
107
|
-
items[1].click();
|
|
108
|
-
await aTimeout(0);
|
|
109
|
-
assert.equal(items[1].getAttribute('aria-current'), 'page');
|
|
110
|
-
assert.isFalse(items[0].hasAttribute('aria-current'));
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=Navigation.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.test.js","sourceRoot":"","sources":["../../../../test/elements/navigation/Navigation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE5E,OAAO,mDAAmD,CAAA;AAC1D,OAAO,wDAAwD,CAAA;AAE/D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;;KAMxC,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;KAKxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;KAKxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAClC,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAA;QACpD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;;KAMxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAChB,0BAA0B;QAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACzF,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,wBAAwB;QACxB,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvF,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;KAKxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAChB,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1F,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACzF,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;;KAMxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAChB,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACzF,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,uCAAuC;QACvC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAa,IAAI,CAAA;;;;;KAKxC,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAA;QACvB,4DAA4D;QAC5D,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAChB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;QAC3D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { html, fixture, assert, oneEvent, aTimeout } from '@open-wc/testing'\nimport type Navigation from '../../../src/elements/navigation/internals/Navigation.js'\nimport '../../../src/elements/navigation/ui-navigation.js'\nimport '../../../src/elements/navigation/ui-navigation-item.js'\n\ndescribe('Navigation', () => {\n it('renders with slot content', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation aria-label=\"Main navigation\">\n <ui-navigation-item selected aria-current=\"page\">Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n <ui-navigation-item>Files</ui-navigation-item>\n </ui-navigation>\n `)\n const nav = el.shadowRoot!.querySelector('nav')\n assert.ok(nav, 'nav element is rendered')\n assert.equal(nav?.getAttribute('aria-label'), 'Main navigation')\n const items = el._items\n assert.equal(items.length, 3)\n assert.isTrue(items[0].selected)\n assert.equal(items[0].getAttribute('aria-current'), 'page')\n })\n\n it('sets correct tabindex for items', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation>\n <ui-navigation-item selected>Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n assert.equal(items[0].getAttribute('tabindex'), '0')\n assert.equal(items[1].getAttribute('tabindex'), '-1')\n })\n\n it('selects item on click and fires select event', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation>\n <ui-navigation-item>Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n setTimeout(() => items[1].click())\n const ev = await oneEvent(el, 'select')\n assert.equal(ev.detail.item, items[1])\n assert.isTrue(items[1].selected)\n assert.equal(items[1].getAttribute('tabindex'), '0')\n assert.isFalse(items[0].selected)\n assert.equal(items[0].getAttribute('tabindex'), '-1')\n })\n\n it('handles keyboard navigation (vertical)', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation>\n <ui-navigation-item>Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n <ui-navigation-item>Files</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n items[0].focus()\n // ArrowDown moves to next\n items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))\n await aTimeout(0)\n assert.dom.equal(document.activeElement, items[1])\n // ArrowUp wraps to last\n items[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))\n await aTimeout(0)\n assert.dom.equal(document.activeElement, items[0])\n })\n\n it('handles keyboard navigation (horizontal)', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation orientation=\"horizontal\">\n <ui-navigation-item>Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n items[0].focus()\n items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))\n await aTimeout(0)\n assert.dom.equal(document.activeElement, items[1])\n items[1].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }))\n await aTimeout(0)\n assert.dom.equal(document.activeElement, items[0])\n })\n\n it('skips disabled items in navigation', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation>\n <ui-navigation-item>Home</ui-navigation-item>\n <ui-navigation-item disabled>Search</ui-navigation-item>\n <ui-navigation-item>Files</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n items[0].focus()\n items[0].dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))\n await aTimeout(0)\n // Should skip disabled and go to Files\n assert.dom.equal(document.activeElement, items[2])\n })\n\n it('sets aria-current on selected item if current is set', async () => {\n const el = await fixture<Navigation>(html`\n <ui-navigation current=\"page\">\n <ui-navigation-item>Home</ui-navigation-item>\n <ui-navigation-item>Search</ui-navigation-item>\n </ui-navigation>\n `)\n const items = el._items\n // Simulate user selection by clicking the item (public API)\n items[1].click()\n await aTimeout(0)\n assert.equal(items[1].getAttribute('aria-current'), 'page')\n assert.isFalse(items[0].hasAttribute('aria-current'))\n })\n})\n"]}
|
package/commitlint.config.cjs
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { OAuth2Server } from 'oauth2-mock-server'
|
|
2
|
-
import proxy from 'koa-proxies'
|
|
3
|
-
// Using the core library here slows down loading time signoficantly
|
|
4
|
-
import getPort, { portNumbers } from 'get-port'
|
|
5
|
-
import { AuthProxy } from './AuthProxy.js'
|
|
6
|
-
|
|
7
|
-
/** @typedef {import('@web/dev-server-core').Plugin} Plugin */
|
|
8
|
-
/** @typedef {import('@web/dev-server-core').ServerStartParams} ServerStartParams */
|
|
9
|
-
|
|
10
|
-
const oauth2server = new OAuth2Server()
|
|
11
|
-
const authProxy = new AuthProxy()
|
|
12
|
-
let oauth2env
|
|
13
|
-
|
|
14
|
-
export default /** @type Plugin */ ({
|
|
15
|
-
name: 'auth',
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @param {ServerStartParams} args
|
|
19
|
-
*/
|
|
20
|
-
async serverStart(args) {
|
|
21
|
-
const port = await getPort({ port: portNumbers(8000, 8100) })
|
|
22
|
-
const proxyPort = await getPort({ port: portNumbers(8000, 8100) })
|
|
23
|
-
args.app.use(
|
|
24
|
-
proxy('/auth', {
|
|
25
|
-
target: `http://localhost:${port}`,
|
|
26
|
-
// logs: true,
|
|
27
|
-
rewrite: (path) => path.replace('/auth', ''),
|
|
28
|
-
})
|
|
29
|
-
)
|
|
30
|
-
const jwtKey = await oauth2server.issuer.keys.generate('RS256')
|
|
31
|
-
await oauth2server.start(port, 'localhost')
|
|
32
|
-
await authProxy.start(proxyPort)
|
|
33
|
-
|
|
34
|
-
oauth2env = {
|
|
35
|
-
port,
|
|
36
|
-
root: '/auth',
|
|
37
|
-
jwtKey,
|
|
38
|
-
issuer: oauth2server.issuer.url,
|
|
39
|
-
tokenProxy: `http://localhost:${proxyPort}/proxy?u=`,
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
async serverStop() {
|
|
44
|
-
await oauth2server.stop()
|
|
45
|
-
await authProxy.stop()
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
serve(context) {
|
|
49
|
-
if (context.path === '/demo/elements/authorization/env.js') {
|
|
50
|
-
const data = {
|
|
51
|
-
oauth2: oauth2env,
|
|
52
|
-
}
|
|
53
|
-
return `export default ${JSON.stringify(data)}`
|
|
54
|
-
}
|
|
55
|
-
return undefined
|
|
56
|
-
},
|
|
57
|
-
})
|