@progressive-development/pd-content 0.9.1 → 1.0.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/LICENSE +21 -2
- package/README.md +42 -57
- package/dist/_virtual/_commonjsHelpers.js +7 -0
- package/dist/_virtual/prism-java.js +3 -0
- package/dist/_virtual/prism-java2.js +3 -0
- package/dist/_virtual/prism-python.js +3 -0
- package/dist/_virtual/prism-python2.js +3 -0
- package/dist/_virtual/prism-typescript.js +3 -0
- package/dist/_virtual/prism-typescript2.js +3 -0
- package/dist/_virtual/prism.js +7 -0
- package/dist/_virtual/prism2.js +3 -0
- package/dist/generated/locales/be.d.ts +10 -0
- package/dist/generated/locales/be.d.ts.map +1 -1
- package/dist/generated/locales/de.d.ts +10 -0
- package/dist/generated/locales/de.d.ts.map +1 -1
- package/dist/generated/locales/en.d.ts +10 -0
- package/dist/generated/locales/en.d.ts.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/locales/be.js +11 -1
- package/dist/locales/de.js +11 -1
- package/dist/locales/en.js +11 -1
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js +235 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-java.js +135 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js +27 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.js +415 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-python.js +76 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-sql.js +32 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js +71 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-yaml.js +83 -0
- package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js +1959 -0
- package/dist/pd-box-view/PdBoxView.d.ts +9 -0
- package/dist/pd-box-view/PdBoxView.d.ts.map +1 -1
- package/dist/pd-box-view/pd-box-view.stories.d.ts +41 -8
- package/dist/pd-box-view/pd-box-view.stories.d.ts.map +1 -1
- package/dist/pd-code-snippet/PdCodeSnippet.d.ts +105 -0
- package/dist/pd-code-snippet/PdCodeSnippet.d.ts.map +1 -0
- package/dist/pd-code-snippet/PdCodeSnippet.js +504 -0
- package/dist/pd-code-snippet/pd-code-snippet.d.ts +4 -0
- package/dist/pd-code-snippet/pd-code-snippet.d.ts.map +1 -0
- package/dist/pd-code-snippet/pd-code-snippet.js +5 -0
- package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts +55 -0
- package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts.map +1 -0
- package/dist/pd-collapse/PdCollapse.d.ts +31 -7
- package/dist/pd-collapse/PdCollapse.d.ts.map +1 -1
- package/dist/pd-collapse/PdCollapse.js +73 -18
- package/dist/pd-collapse/pd-collapse.stories.d.ts +49 -21
- package/dist/pd-collapse/pd-collapse.stories.d.ts.map +1 -1
- package/dist/pd-collapse-group/PdCollapseGroup.d.ts +8 -7
- package/dist/pd-collapse-group/PdCollapseGroup.d.ts.map +1 -1
- package/dist/pd-collapse-group/PdCollapseGroup.js +7 -6
- package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts +39 -4
- package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts.map +1 -1
- package/dist/pd-edit-content/PdEditContent.d.ts +13 -0
- package/dist/pd-edit-content/PdEditContent.d.ts.map +1 -1
- package/dist/pd-edit-content/PdEditContent.js +33 -10
- package/dist/pd-edit-content/pd-edit-content.stories.d.ts +54 -10
- package/dist/pd-edit-content/pd-edit-content.stories.d.ts.map +1 -1
- package/dist/pd-loading-state/PdLoadingState.d.ts +64 -0
- package/dist/pd-loading-state/PdLoadingState.d.ts.map +1 -0
- package/dist/pd-loading-state/PdLoadingState.js +219 -0
- package/dist/pd-loading-state/pd-loading-state.d.ts +6 -0
- package/dist/pd-loading-state/pd-loading-state.d.ts.map +1 -0
- package/dist/pd-loading-state/pd-loading-state.stories.d.ts +48 -0
- package/dist/pd-loading-state/pd-loading-state.stories.d.ts.map +1 -0
- package/dist/pd-loading-state.d.ts +2 -0
- package/dist/pd-loading-state.js +1 -0
- package/dist/pd-more-info/PdMoreInfo.d.ts +6 -2
- package/dist/pd-more-info/PdMoreInfo.d.ts.map +1 -1
- package/dist/pd-more-info/PdMoreInfo.js +30 -4
- package/dist/pd-more-info/pd-more-info.stories.d.ts +41 -5
- package/dist/pd-more-info/pd-more-info.stories.d.ts.map +1 -1
- package/dist/pd-notice-box/PdNoticeBox.d.ts +88 -0
- package/dist/pd-notice-box/PdNoticeBox.d.ts.map +1 -0
- package/dist/pd-notice-box/PdNoticeBox.js +224 -0
- package/dist/pd-notice-box/pd-notice-box.d.ts +3 -0
- package/dist/pd-notice-box/pd-notice-box.d.ts.map +1 -0
- package/dist/pd-notice-box/pd-notice-box.js +8 -0
- package/dist/pd-notice-box/pd-notice-box.stories.d.ts +58 -0
- package/dist/pd-notice-box/pd-notice-box.stories.d.ts.map +1 -0
- package/dist/pd-panel-viewer/PdPanel.d.ts +5 -0
- package/dist/pd-panel-viewer/PdPanel.d.ts.map +1 -1
- package/dist/pd-panel-viewer/PdPanelViewer.d.ts +53 -2
- package/dist/pd-panel-viewer/PdPanelViewer.d.ts.map +1 -1
- package/dist/pd-panel-viewer/PdPanelViewer.js +188 -33
- package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts +46 -0
- package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts.map +1 -0
- package/dist/pd-resize-content/PdResizeContent.d.ts +12 -10
- package/dist/pd-resize-content/PdResizeContent.d.ts.map +1 -1
- package/dist/pd-resize-content/PdResizeContent.js +19 -9
- package/dist/pd-resize-content/pd-resize-content.stories.d.ts +36 -4
- package/dist/pd-resize-content/pd-resize-content.stories.d.ts.map +1 -1
- package/dist/pd-tab/PdTab.d.ts +35 -2
- package/dist/pd-tab/PdTab.d.ts.map +1 -1
- package/dist/pd-tab/PdTab.js +181 -71
- package/dist/pd-tab/pd-tab.stories.d.ts +51 -21
- package/dist/pd-tab/pd-tab.stories.d.ts.map +1 -1
- package/dist/pd-timeline/PdTimeline.d.ts +50 -0
- package/dist/pd-timeline/PdTimeline.d.ts.map +1 -0
- package/dist/pd-timeline/PdTimeline.js +315 -0
- package/dist/pd-timeline/pd-timeline.d.ts +3 -0
- package/dist/pd-timeline/pd-timeline.d.ts.map +1 -0
- package/dist/pd-timeline/pd-timeline.stories.d.ts +56 -0
- package/dist/pd-timeline/pd-timeline.stories.d.ts.map +1 -0
- package/dist/pd-timeline-wizard/PdTimelineWizard.d.ts +39 -0
- package/dist/pd-timeline-wizard/PdTimelineWizard.d.ts.map +1 -0
- package/dist/pd-timeline-wizard/PdTimelineWizard.js +150 -0
- package/dist/pd-timeline-wizard/pd-timeline-wizard.d.ts +3 -0
- package/dist/pd-timeline-wizard/pd-timeline-wizard.d.ts.map +1 -0
- package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts +54 -0
- package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts.map +1 -0
- package/dist/pd-timeline-wizard.d.ts +2 -0
- package/dist/pd-timeline-wizard.js +8 -0
- package/dist/pd-timeline.d.ts +2 -0
- package/dist/pd-timeline.js +8 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { html, LitElement, css } from 'lit';
|
|
1
|
+
import { html, LitElement, css, nothing } from 'lit';
|
|
2
2
|
import { property } from 'lit/decorators.js';
|
|
3
|
-
import {
|
|
3
|
+
import { msg } from '@lit/localize';
|
|
4
4
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -15,6 +15,7 @@ const editIcon = html`<svg
|
|
|
15
15
|
class="edit"
|
|
16
16
|
viewBox="0 0 19 19"
|
|
17
17
|
xmlns="http://www.w3.org/2000/svg"
|
|
18
|
+
aria-hidden="true"
|
|
18
19
|
>
|
|
19
20
|
<g>
|
|
20
21
|
<path
|
|
@@ -41,8 +42,6 @@ const _PdEditContent = class _PdEditContent extends LitElement {
|
|
|
41
42
|
}
|
|
42
43
|
static {
|
|
43
44
|
this.styles = [
|
|
44
|
-
PdColorStyles,
|
|
45
|
-
PdFontStyles,
|
|
46
45
|
css`
|
|
47
46
|
:host {
|
|
48
47
|
display: block;
|
|
@@ -102,6 +101,12 @@ const _PdEditContent = class _PdEditContent extends LitElement {
|
|
|
102
101
|
--edit-fill-color: var(--pd-default-font-link-col-hover);
|
|
103
102
|
}
|
|
104
103
|
|
|
104
|
+
a:focus-visible {
|
|
105
|
+
outline: 2px solid var(--pd-focus-ring-col);
|
|
106
|
+
outline-offset: 2px;
|
|
107
|
+
border-radius: var(--pd-radius-sm, 2px);
|
|
108
|
+
}
|
|
109
|
+
|
|
105
110
|
.edit {
|
|
106
111
|
width: 1.1em;
|
|
107
112
|
}
|
|
@@ -149,7 +154,7 @@ const _PdEditContent = class _PdEditContent extends LitElement {
|
|
|
149
154
|
<div class="circle">
|
|
150
155
|
<span class="step-number">${this.stepNumber}</span>
|
|
151
156
|
</div>
|
|
152
|
-
` :
|
|
157
|
+
` : nothing}
|
|
153
158
|
<h4>${this.contentTitle}</h4>
|
|
154
159
|
</div>
|
|
155
160
|
<div>
|
|
@@ -162,19 +167,31 @@ const _PdEditContent = class _PdEditContent extends LitElement {
|
|
|
162
167
|
</div>`
|
|
163
168
|
)}
|
|
164
169
|
</div>
|
|
165
|
-
` :
|
|
170
|
+
` : nothing}
|
|
166
171
|
<slot></slot>
|
|
167
172
|
<div class="link-row">
|
|
168
173
|
${!this.editDisabled ? html`
|
|
169
|
-
<a
|
|
174
|
+
<a
|
|
175
|
+
@click="${this._editContent}"
|
|
176
|
+
@keydown="${this._onLinkKeyDown}"
|
|
177
|
+
role="button"
|
|
178
|
+
tabindex="0"
|
|
179
|
+
>
|
|
170
180
|
<div class="link-item">
|
|
171
|
-
${editIcon}
|
|
181
|
+
${editIcon} ${msg("Edit", { id: "pd.edit.content.edit" })}
|
|
182
|
+
${this.contentTitle}
|
|
172
183
|
</div>
|
|
173
184
|
</a>
|
|
174
|
-
` :
|
|
185
|
+
` : nothing}
|
|
175
186
|
${this.editLinks.map(
|
|
176
187
|
(link) => html`
|
|
177
|
-
<a
|
|
188
|
+
<a
|
|
189
|
+
data-link="${link.key}"
|
|
190
|
+
@click="${this._editContent}"
|
|
191
|
+
@keydown="${this._onLinkKeyDown}"
|
|
192
|
+
role="button"
|
|
193
|
+
tabindex="0"
|
|
194
|
+
>
|
|
178
195
|
<div class="link-item">
|
|
179
196
|
${_PdEditContent._getLinkLogo(link)} ${link.txt}
|
|
180
197
|
</div>
|
|
@@ -200,6 +217,12 @@ const _PdEditContent = class _PdEditContent extends LitElement {
|
|
|
200
217
|
})
|
|
201
218
|
);
|
|
202
219
|
}
|
|
220
|
+
_onLinkKeyDown(e) {
|
|
221
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
222
|
+
e.preventDefault();
|
|
223
|
+
this._editContent(e);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
203
226
|
};
|
|
204
227
|
__decorateClass([
|
|
205
228
|
property({ type: Number })
|
|
@@ -1,11 +1,55 @@
|
|
|
1
|
-
import { Meta,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import { PdEditContentDataEntry, PdEditLink } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Story arguments interface for pd-edit-content component.
|
|
5
|
+
* Maps to the component's public API.
|
|
6
|
+
*/
|
|
7
|
+
interface PdEditContentArgs {
|
|
8
|
+
/** Step number displayed in circle (optional) */
|
|
9
|
+
stepNumber?: number;
|
|
10
|
+
/** Title of the content section */
|
|
11
|
+
contentTitle: string;
|
|
12
|
+
/** Data entries to display as label-value pairs */
|
|
13
|
+
data: PdEditContentDataEntry[];
|
|
14
|
+
/** Edit links displayed below the content */
|
|
15
|
+
editLinks: PdEditLink[];
|
|
16
|
+
/** Whether the main edit button is disabled */
|
|
17
|
+
editDisabled: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* ## pd-edit-content
|
|
21
|
+
*
|
|
22
|
+
* A content card component for displaying editable data sections, commonly used in wizard flows.
|
|
23
|
+
*
|
|
24
|
+
* ### Features
|
|
25
|
+
* - Optional numbered step badge for wizard flows
|
|
26
|
+
* - Data display as label-value pairs from a data array
|
|
27
|
+
* - Configurable edit action links with icons
|
|
28
|
+
* - Default slot for custom additional content
|
|
29
|
+
* - Edit control: can disable all editing entirely
|
|
30
|
+
* - Localized "Edit" label via `@lit/localize`
|
|
31
|
+
*
|
|
32
|
+
* ### Accessibility
|
|
33
|
+
* - Edit links use `role="button"` with `tabindex="0"` and respond to Enter/Space
|
|
34
|
+
* - Focus-visible outline on focused interactive elements
|
|
35
|
+
* - Decorative edit icons have `aria-hidden="true"`
|
|
36
|
+
* - Step number badge provides visual context for wizard flows
|
|
37
|
+
*/
|
|
38
|
+
declare const meta: Meta<PdEditContentArgs>;
|
|
39
|
+
export default meta;
|
|
40
|
+
type Story = StoryObj<PdEditContentArgs>;
|
|
41
|
+
/** Default edit-content with step number and data. Interactive via Controls panel. */
|
|
42
|
+
export declare const Default: Story;
|
|
43
|
+
/** All edit-content configurations at a glance. */
|
|
44
|
+
export declare const AllVariants: Story;
|
|
45
|
+
/** Edit-content with additional action links below the data. */
|
|
46
|
+
export declare const WithEditLinks: Story;
|
|
47
|
+
/** Edit-content with custom HTML provided via the default slot. */
|
|
48
|
+
export declare const WithSlotContent: Story;
|
|
49
|
+
/** Multiple edit-content cards arranged in a pd-box-view grid. */
|
|
50
|
+
export declare const InGridLayout: Story;
|
|
51
|
+
/** Sequential numbered step cards for wizard flows. */
|
|
52
|
+
export declare const NumberedSteps: Story;
|
|
53
|
+
/** CSS Custom Properties -- Branded and Redesigned variants. */
|
|
54
|
+
export declare const CustomStyling: Story;
|
|
11
55
|
//# sourceMappingURL=pd-edit-content.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pd-edit-content.stories.d.ts","sourceRoot":"","sources":["../../src/pd-edit-content/pd-edit-content.stories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pd-edit-content.stories.d.ts","sourceRoot":"","sources":["../../src/pd-edit-content/pd-edit-content.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,sBAAsB,CAAC;AAC9B,OAAO,+BAA+B,CAAC;AAMvC;;;GAGG;AACH,UAAU,iBAAiB;IACzB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;CACvB;AAqBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAqFjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAMzC,sFAAsF;AACtF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAMF,mDAAmD;AACnD,eAAO,MAAM,WAAW,EAAE,KA2DzB,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAMF,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,KAqC7B,CAAC;AAMF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAgD1B,CAAC;AAMF,uDAAuD;AACvD,eAAO,MAAM,aAAa,EAAE,KA8B3B,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KA2E3B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { LitElement, CSSResultGroup } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* Sub-task item for loading state progress tracking.
|
|
4
|
+
*/
|
|
5
|
+
export interface LoadingSubTask {
|
|
6
|
+
/** Unique identifier for the sub-task */
|
|
7
|
+
actionKey: string;
|
|
8
|
+
/** Whether the sub-task is completed */
|
|
9
|
+
completed: boolean;
|
|
10
|
+
/** Display text for the sub-task */
|
|
11
|
+
loadingTxt: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Loading state configuration object.
|
|
15
|
+
*/
|
|
16
|
+
export interface LoadingState {
|
|
17
|
+
/** Timestamp when loading started */
|
|
18
|
+
creation?: Date;
|
|
19
|
+
/** Whether loading is active */
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
/** Unique identifier for the loading action */
|
|
22
|
+
actionKey: string;
|
|
23
|
+
/** Show as fullscreen modal overlay */
|
|
24
|
+
modal?: boolean;
|
|
25
|
+
/** Show as small background indicator (bottom-right corner) */
|
|
26
|
+
smallBackground?: boolean;
|
|
27
|
+
/** Custom loading message */
|
|
28
|
+
loadingTxt?: string;
|
|
29
|
+
/** Optional sub-tasks to display progress */
|
|
30
|
+
subTask?: LoadingSubTask[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Loading state indicator component with modal and background modes.
|
|
34
|
+
*
|
|
35
|
+
* @tagname pd-loading-state
|
|
36
|
+
* @summary Displays loading progress with optional modal overlay or background indicator.
|
|
37
|
+
*
|
|
38
|
+
* @slot - Default slot (unused, component renders based on loadingState property)
|
|
39
|
+
*
|
|
40
|
+
* @cssprop --pd-popup-modal-bg-rgba - Modal overlay background color. Default: `rgba(175, 193, 210, 0.8)`.
|
|
41
|
+
* @cssprop --pd-loading-state-background-bg - Background mode container color. Default: `white`.
|
|
42
|
+
* @cssprop --pd-loading-state-bg-col - Content box background. Default: `#edf7fd`.
|
|
43
|
+
* @cssprop --pd-loading-state-border-col - Content box border color. Default: `var(--pd-default-col)`.
|
|
44
|
+
* @cssprop --pd-loading-state-completed-col - Completed sub-task icon color. Default: `green`.
|
|
45
|
+
* @cssprop --pd-loading-state-loader-bg - Spinner background color. Default: `#0a3a48`.
|
|
46
|
+
* @cssprop --pd-loading-state-loader-fg - Spinner foreground (animated) color. Default: `#067394`.
|
|
47
|
+
* @cssprop --pd-loading-state-loading-col - In-progress sub-task icon color. Default: `orange`.
|
|
48
|
+
*/
|
|
49
|
+
export declare class PdLoadingState extends LitElement {
|
|
50
|
+
/**
|
|
51
|
+
* Loading state configuration object.
|
|
52
|
+
* Controls visibility, mode (modal/background), and content.
|
|
53
|
+
*/
|
|
54
|
+
loadingState?: LoadingState;
|
|
55
|
+
static styles: CSSResultGroup;
|
|
56
|
+
render(): import('lit').TemplateResult<1> | "";
|
|
57
|
+
private _renderContent;
|
|
58
|
+
}
|
|
59
|
+
declare global {
|
|
60
|
+
interface HTMLElementTagNameMap {
|
|
61
|
+
"pd-loading-state": PdLoadingState;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=PdLoadingState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdLoadingState.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/PdLoadingState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAK5D,OAAO,0CAA0C,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAEa,cAAe,SAAQ,UAAU;IAC5C;;;OAGG;IAEH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,OAAgB,MAAM,EAAE,cAAc,CAuHpC;IAEO,MAAM;IAsBf,OAAO,CAAC,cAAc;CAgEvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { css, LitElement, html } from 'lit';
|
|
2
|
+
import { property, customElement } from 'lit/decorators.js';
|
|
3
|
+
import { localized, msg } from '@lit/localize';
|
|
4
|
+
import { classMap } from 'lit/directives/class-map.js';
|
|
5
|
+
import '@progressive-development/pd-icon/pd-icon';
|
|
6
|
+
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
10
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
11
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12
|
+
if (decorator = decorators[i])
|
|
13
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14
|
+
if (kind && result) __defProp(target, key, result);
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
let PdLoadingState = class extends LitElement {
|
|
18
|
+
render() {
|
|
19
|
+
if (!this.loadingState) {
|
|
20
|
+
return "";
|
|
21
|
+
}
|
|
22
|
+
return this.loadingState.modal ? html`
|
|
23
|
+
<div
|
|
24
|
+
id="modalId"
|
|
25
|
+
class="modal"
|
|
26
|
+
role="dialog"
|
|
27
|
+
aria-modal="true"
|
|
28
|
+
aria-busy="true"
|
|
29
|
+
aria-label="${msg("Ladevorgang", {
|
|
30
|
+
id: "pdContent.loadingstate.ariaLabel"
|
|
31
|
+
})}"
|
|
32
|
+
>
|
|
33
|
+
${this._renderContent()}
|
|
34
|
+
</div>
|
|
35
|
+
` : this._renderContent();
|
|
36
|
+
}
|
|
37
|
+
_renderContent() {
|
|
38
|
+
if (!this.loadingState) {
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
return html`
|
|
42
|
+
<div
|
|
43
|
+
class="${classMap({
|
|
44
|
+
content: !this.loadingState.smallBackground,
|
|
45
|
+
"no-modal-content": this.loadingState.modal !== true && this.loadingState.smallBackground !== true,
|
|
46
|
+
"background-content": this.loadingState.smallBackground === true
|
|
47
|
+
})}"
|
|
48
|
+
role="status"
|
|
49
|
+
aria-live="polite"
|
|
50
|
+
>
|
|
51
|
+
<div
|
|
52
|
+
class="${this.loadingState.smallBackground ? "background-loader" : "loader"}"
|
|
53
|
+
role="progressbar"
|
|
54
|
+
aria-label="${msg("Laden", {
|
|
55
|
+
id: "pdContent.loadingstate.ariaLoading"
|
|
56
|
+
})}"
|
|
57
|
+
></div>
|
|
58
|
+
<p>
|
|
59
|
+
${this.loadingState.loadingTxt || (this.loadingState.smallBackground ? msg("Daten werden synchronisiert", {
|
|
60
|
+
id: "pdContent.loadingstate.syncState"
|
|
61
|
+
}) : msg("Bitte warten, Daten werden geladen", {
|
|
62
|
+
id: "pdContent.loadingstate.pleaseWait"
|
|
63
|
+
}))}
|
|
64
|
+
</p>
|
|
65
|
+
${this.loadingState.subTask && this.loadingState.subTask.length > 0 ? html`
|
|
66
|
+
<ul class="sub-ul">
|
|
67
|
+
${this.loadingState.subTask.map(
|
|
68
|
+
(task) => html`
|
|
69
|
+
<li>
|
|
70
|
+
<div class="sub-row">
|
|
71
|
+
${task.loadingTxt}
|
|
72
|
+
${task.completed ? html`<pd-icon
|
|
73
|
+
class="sub-icon completed"
|
|
74
|
+
icon="checkBox"
|
|
75
|
+
activeIcon
|
|
76
|
+
></pd-icon>` : html`<pd-icon
|
|
77
|
+
class="sub-icon loading"
|
|
78
|
+
icon="syncIcon"
|
|
79
|
+
activeIcon
|
|
80
|
+
></pd-icon>`}
|
|
81
|
+
</div>
|
|
82
|
+
</li>
|
|
83
|
+
`
|
|
84
|
+
)}
|
|
85
|
+
</ul>
|
|
86
|
+
` : ""}
|
|
87
|
+
</div>
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
PdLoadingState.styles = [
|
|
92
|
+
css`
|
|
93
|
+
:host {
|
|
94
|
+
display: block;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Modal overlay (fullscreen) */
|
|
98
|
+
.modal {
|
|
99
|
+
position: fixed;
|
|
100
|
+
left: 0;
|
|
101
|
+
top: 0;
|
|
102
|
+
z-index: 500;
|
|
103
|
+
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
|
|
108
|
+
width: 100%;
|
|
109
|
+
height: 100%;
|
|
110
|
+
overflow: auto;
|
|
111
|
+
background-color: var(
|
|
112
|
+
--pd-popup-modal-bg-rgba,
|
|
113
|
+
rgba(175, 193, 210, 0.8)
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* Centered content without modal */
|
|
118
|
+
.no-modal-content {
|
|
119
|
+
position: fixed;
|
|
120
|
+
left: 50%;
|
|
121
|
+
top: 50%;
|
|
122
|
+
transform: translate(-50%, -50%);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Main content box */
|
|
126
|
+
.content {
|
|
127
|
+
padding: 1em;
|
|
128
|
+
text-align: center;
|
|
129
|
+
background-color: var(--pd-loading-state-bg-col, #edf7fd);
|
|
130
|
+
border: 2px solid
|
|
131
|
+
var(--pd-loading-state-border-col, var(--pd-default-col, #067394));
|
|
132
|
+
z-index: 101;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Background mode (bottom-right corner) */
|
|
136
|
+
.background-content {
|
|
137
|
+
position: fixed;
|
|
138
|
+
right: 0em;
|
|
139
|
+
bottom: 0em;
|
|
140
|
+
|
|
141
|
+
padding: 1em;
|
|
142
|
+
z-index: 600;
|
|
143
|
+
|
|
144
|
+
display: flex;
|
|
145
|
+
gap: 0.5em;
|
|
146
|
+
align-items: center;
|
|
147
|
+
|
|
148
|
+
background-color: var(--pd-loading-state-background-bg, white);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Main spinner */
|
|
152
|
+
.loader {
|
|
153
|
+
border: 16px solid var(--pd-loading-state-loader-bg, #0a3a48);
|
|
154
|
+
border-top: 16px solid var(--pd-loading-state-loader-fg, #067394);
|
|
155
|
+
border-radius: 50%;
|
|
156
|
+
width: 30px;
|
|
157
|
+
height: 30px;
|
|
158
|
+
animation: spin 2s linear infinite;
|
|
159
|
+
|
|
160
|
+
margin-left: auto;
|
|
161
|
+
margin-right: auto;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Small spinner for background mode */
|
|
165
|
+
.background-loader {
|
|
166
|
+
border: 10px solid var(--pd-loading-state-loader-bg, #0a3a48);
|
|
167
|
+
border-top: 10px solid var(--pd-loading-state-loader-fg, #067394);
|
|
168
|
+
border-radius: 50%;
|
|
169
|
+
width: 10px;
|
|
170
|
+
height: 10px;
|
|
171
|
+
animation: spin 2s linear infinite;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* Sub-task list */
|
|
175
|
+
.sub-ul {
|
|
176
|
+
text-align: start;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.sub-row {
|
|
180
|
+
display: flex;
|
|
181
|
+
align-items: center;
|
|
182
|
+
justify-content: space-between;
|
|
183
|
+
padding-right: 10px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.sub-icon {
|
|
187
|
+
--pd-icon-size: 1rem;
|
|
188
|
+
padding: 0;
|
|
189
|
+
vertical-align: baseline;
|
|
190
|
+
margin: 0 0.25rem 0 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.completed {
|
|
194
|
+
--pd-icon-col-active: var(--pd-loading-state-completed-col, green);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.loading {
|
|
198
|
+
--pd-icon-col-active: var(--pd-loading-state-loading-col, orange);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@keyframes spin {
|
|
202
|
+
0% {
|
|
203
|
+
transform: rotate(0deg);
|
|
204
|
+
}
|
|
205
|
+
100% {
|
|
206
|
+
transform: rotate(360deg);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
`
|
|
210
|
+
];
|
|
211
|
+
__decorateClass([
|
|
212
|
+
property({ type: Object })
|
|
213
|
+
], PdLoadingState.prototype, "loadingState", 2);
|
|
214
|
+
PdLoadingState = __decorateClass([
|
|
215
|
+
localized(),
|
|
216
|
+
customElement("pd-loading-state")
|
|
217
|
+
], PdLoadingState);
|
|
218
|
+
|
|
219
|
+
export { PdLoadingState };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-loading-state.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/pd-loading-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import { LoadingState } from './PdLoadingState.js';
|
|
3
|
+
/**
|
|
4
|
+
* Story arguments interface for pd-loading-state component.
|
|
5
|
+
* Maps to the component's public API.
|
|
6
|
+
*/
|
|
7
|
+
interface PdLoadingStateArgs {
|
|
8
|
+
/** Loading state configuration */
|
|
9
|
+
loadingState: LoadingState;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* ## pd-loading-state
|
|
13
|
+
*
|
|
14
|
+
* A loading state indicator component with multiple display modes for different
|
|
15
|
+
* use cases: modal overlay, centered inline, and background sync.
|
|
16
|
+
*
|
|
17
|
+
* ### Features
|
|
18
|
+
* - Modal mode: fullscreen overlay blocking user interaction
|
|
19
|
+
* - Background mode: small indicator in bottom-right corner
|
|
20
|
+
* - Centered mode: centered without overlay for inline loading
|
|
21
|
+
* - Sub-task progress tracking with completion states
|
|
22
|
+
* - Custom loading messages
|
|
23
|
+
* - CSS Custom Properties for full theming
|
|
24
|
+
*
|
|
25
|
+
* ### Accessibility
|
|
26
|
+
* - Uses `role="dialog"` with `aria-modal` and `aria-busy` for modal mode
|
|
27
|
+
* - Content area uses `role="status"` with `aria-live="polite"` for announcements
|
|
28
|
+
* - Spinner uses `role="progressbar"` with `aria-label`
|
|
29
|
+
* - Screen readers announce loading messages and sub-task status changes
|
|
30
|
+
*/
|
|
31
|
+
declare const meta: Meta<PdLoadingStateArgs>;
|
|
32
|
+
export default meta;
|
|
33
|
+
type Story = StoryObj<PdLoadingStateArgs>;
|
|
34
|
+
/** Default modal loading state with fullscreen overlay. */
|
|
35
|
+
export declare const Default: Story;
|
|
36
|
+
/** Modal loading state with a custom message. */
|
|
37
|
+
export declare const WithCustomMessage: Story;
|
|
38
|
+
/** Centered loading without modal overlay, useful for inline loading areas. */
|
|
39
|
+
export declare const CenteredNoModal: Story;
|
|
40
|
+
/** Small background indicator in bottom-right corner for non-blocking sync operations. */
|
|
41
|
+
export declare const BackgroundMode: Story;
|
|
42
|
+
/** Loading state with sub-task progress tracking. */
|
|
43
|
+
export declare const WithSubTasks: Story;
|
|
44
|
+
/** All non-modal loading state variants side by side. Modal variant excluded as it covers the entire viewport. */
|
|
45
|
+
export declare const AllVariants: Story;
|
|
46
|
+
/** CSS Custom Properties -- Branded and Redesigned variants. */
|
|
47
|
+
export declare const CustomStyling: Story;
|
|
48
|
+
//# sourceMappingURL=pd-loading-state.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-loading-state.stories.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/pd-loading-state.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,kCAAkC;IAClC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CA+ClC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAM1C,2DAA2D;AAC3D,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAMF,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC;AAMF,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,KAwB7B,CAAC;AAMF,0FAA0F;AAC1F,eAAO,MAAM,cAAc,EAAE,KAkC5B,CAAC;AAMF,qDAAqD;AACrD,eAAO,MAAM,YAAY,EAAE,KAkD1B,CAAC;AAMF,kHAAkH;AAClH,eAAO,MAAM,WAAW,EAAE,KA6FzB,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KA0H3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PdLoadingState } from './pd-loading-state/PdLoadingState.js';
|
|
@@ -5,20 +5,24 @@ import { LitElement, CSSResultGroup } from 'lit';
|
|
|
5
5
|
* `pd-more-info` Komponente zeigt zuerst einen kompakten Text (Slot `small-view`)
|
|
6
6
|
* und erlaubt es dem Nutzer, bei Klick weitere Informationen (Slot `large-view`) einzublenden.
|
|
7
7
|
*
|
|
8
|
-
* @slot small-view -
|
|
9
|
-
* @slot large-view -
|
|
8
|
+
* @slot small-view - Compact text block shown in the initial collapsed view.
|
|
9
|
+
* @slot large-view - Extended text block revealed after clicking "More information".
|
|
10
10
|
*
|
|
11
11
|
* @cssprop --pd-default-font-content-col - Textfarbe
|
|
12
12
|
* @cssprop --pd-default-font-content-size - Textgröße
|
|
13
|
+
* @cssprop --pd-default-font-content-family - Schriftart für Content
|
|
14
|
+
* @cssprop --pd-default-font-content-line-height - Zeilenhöhe für Content
|
|
13
15
|
* @cssprop --pd-default-font-link-family - Schriftart für Link
|
|
14
16
|
* @cssprop --pd-default-font-link-size - Schriftgröße für Link
|
|
15
17
|
* @cssprop --pd-default-font-link-col - Linkfarbe
|
|
16
18
|
* @cssprop --pd-default-font-link-col-hover - Hoverfarbe für Link
|
|
17
19
|
*/
|
|
18
20
|
export declare class PdMoreInfo extends LitElement {
|
|
21
|
+
/** @ignore */
|
|
19
22
|
private _lessInfo;
|
|
20
23
|
static styles: CSSResultGroup;
|
|
21
24
|
render(): import('lit').TemplateResult<1>;
|
|
25
|
+
private _onKeyDown;
|
|
22
26
|
private _showMoreInfo;
|
|
23
27
|
private _showLessInfo;
|
|
24
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdMoreInfo.d.ts","sourceRoot":"","sources":["../../src/pd-more-info/PdMoreInfo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"PdMoreInfo.d.ts","sourceRoot":"","sources":["../../src/pd-more-info/PdMoreInfo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAI5D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC,cAAc;IAEd,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAgB,MAAM,EAAE,cAAc,CAkCpC;IAEO,MAAM;IA8Bf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { css, LitElement, html } from 'lit';
|
|
2
2
|
import { state } from 'lit/decorators.js';
|
|
3
3
|
import { localized, msg } from '@lit/localize';
|
|
4
|
-
import { PdFontStyles } from '@progressive-development/pd-shared-styles';
|
|
5
4
|
|
|
6
5
|
var __defProp = Object.defineProperty;
|
|
7
6
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -23,18 +22,34 @@ let PdMoreInfo = class extends LitElement {
|
|
|
23
22
|
<p>
|
|
24
23
|
${this._lessInfo ? html`
|
|
25
24
|
<slot name="small-view"></slot>
|
|
26
|
-
<a
|
|
25
|
+
<a
|
|
26
|
+
role="button"
|
|
27
|
+
tabindex="0"
|
|
28
|
+
@click=${this._showMoreInfo}
|
|
29
|
+
@keydown=${this._onKeyDown}
|
|
30
|
+
>
|
|
27
31
|
${msg("Mehr Informationen", { id: "pd.moreInfo.more" })}
|
|
28
32
|
</a>
|
|
29
33
|
` : html`
|
|
30
34
|
<slot name="large-view"></slot>
|
|
31
|
-
<a
|
|
35
|
+
<a
|
|
36
|
+
role="button"
|
|
37
|
+
tabindex="0"
|
|
38
|
+
@click=${this._showLessInfo}
|
|
39
|
+
@keydown=${this._onKeyDown}
|
|
40
|
+
>
|
|
32
41
|
${msg("Text ausblenden", { id: "pd.moreInfo.less" })}
|
|
33
42
|
</a>
|
|
34
43
|
`}
|
|
35
44
|
</p>
|
|
36
45
|
`;
|
|
37
46
|
}
|
|
47
|
+
_onKeyDown(e) {
|
|
48
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
e.currentTarget?.click();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
38
53
|
_showMoreInfo() {
|
|
39
54
|
this._lessInfo = false;
|
|
40
55
|
}
|
|
@@ -49,7 +64,6 @@ let PdMoreInfo = class extends LitElement {
|
|
|
49
64
|
}
|
|
50
65
|
};
|
|
51
66
|
PdMoreInfo.styles = [
|
|
52
|
-
PdFontStyles,
|
|
53
67
|
css`
|
|
54
68
|
:host {
|
|
55
69
|
display: block;
|
|
@@ -57,7 +71,9 @@ PdMoreInfo.styles = [
|
|
|
57
71
|
|
|
58
72
|
p {
|
|
59
73
|
color: var(--pd-default-font-content-col);
|
|
74
|
+
font-family: var(--pd-default-font-content-family);
|
|
60
75
|
font-size: var(--pd-default-font-content-size);
|
|
76
|
+
line-height: var(--pd-default-font-content-line-height, 1.4em);
|
|
61
77
|
}
|
|
62
78
|
|
|
63
79
|
a {
|
|
@@ -70,6 +86,16 @@ PdMoreInfo.styles = [
|
|
|
70
86
|
a:hover {
|
|
71
87
|
color: var(--pd-default-font-link-col-hover);
|
|
72
88
|
}
|
|
89
|
+
|
|
90
|
+
a:focus {
|
|
91
|
+
outline: none;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
a:focus-visible {
|
|
95
|
+
outline: 2px solid var(--pd-focus-ring-col);
|
|
96
|
+
outline-offset: 2px;
|
|
97
|
+
border-radius: 2px;
|
|
98
|
+
}
|
|
73
99
|
`
|
|
74
100
|
];
|
|
75
101
|
__decorateClass([
|