@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.
Files changed (119) hide show
  1. package/LICENSE +21 -2
  2. package/README.md +42 -57
  3. package/dist/_virtual/_commonjsHelpers.js +7 -0
  4. package/dist/_virtual/prism-java.js +3 -0
  5. package/dist/_virtual/prism-java2.js +3 -0
  6. package/dist/_virtual/prism-python.js +3 -0
  7. package/dist/_virtual/prism-python2.js +3 -0
  8. package/dist/_virtual/prism-typescript.js +3 -0
  9. package/dist/_virtual/prism-typescript2.js +3 -0
  10. package/dist/_virtual/prism.js +7 -0
  11. package/dist/_virtual/prism2.js +3 -0
  12. package/dist/generated/locales/be.d.ts +10 -0
  13. package/dist/generated/locales/be.d.ts.map +1 -1
  14. package/dist/generated/locales/de.d.ts +10 -0
  15. package/dist/generated/locales/de.d.ts.map +1 -1
  16. package/dist/generated/locales/en.d.ts +10 -0
  17. package/dist/generated/locales/en.d.ts.map +1 -1
  18. package/dist/index.d.ts +8 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +9 -0
  21. package/dist/locales/be.js +11 -1
  22. package/dist/locales/de.js +11 -1
  23. package/dist/locales/en.js +11 -1
  24. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js +235 -0
  25. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-java.js +135 -0
  26. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js +27 -0
  27. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.js +415 -0
  28. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-python.js +76 -0
  29. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-sql.js +32 -0
  30. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js +71 -0
  31. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-yaml.js +83 -0
  32. package/dist/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js +1959 -0
  33. package/dist/pd-box-view/PdBoxView.d.ts +9 -0
  34. package/dist/pd-box-view/PdBoxView.d.ts.map +1 -1
  35. package/dist/pd-box-view/pd-box-view.stories.d.ts +41 -8
  36. package/dist/pd-box-view/pd-box-view.stories.d.ts.map +1 -1
  37. package/dist/pd-code-snippet/PdCodeSnippet.d.ts +105 -0
  38. package/dist/pd-code-snippet/PdCodeSnippet.d.ts.map +1 -0
  39. package/dist/pd-code-snippet/PdCodeSnippet.js +504 -0
  40. package/dist/pd-code-snippet/pd-code-snippet.d.ts +4 -0
  41. package/dist/pd-code-snippet/pd-code-snippet.d.ts.map +1 -0
  42. package/dist/pd-code-snippet/pd-code-snippet.js +5 -0
  43. package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts +55 -0
  44. package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts.map +1 -0
  45. package/dist/pd-collapse/PdCollapse.d.ts +31 -7
  46. package/dist/pd-collapse/PdCollapse.d.ts.map +1 -1
  47. package/dist/pd-collapse/PdCollapse.js +73 -18
  48. package/dist/pd-collapse/pd-collapse.stories.d.ts +49 -21
  49. package/dist/pd-collapse/pd-collapse.stories.d.ts.map +1 -1
  50. package/dist/pd-collapse-group/PdCollapseGroup.d.ts +8 -7
  51. package/dist/pd-collapse-group/PdCollapseGroup.d.ts.map +1 -1
  52. package/dist/pd-collapse-group/PdCollapseGroup.js +7 -6
  53. package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts +39 -4
  54. package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts.map +1 -1
  55. package/dist/pd-edit-content/PdEditContent.d.ts +13 -0
  56. package/dist/pd-edit-content/PdEditContent.d.ts.map +1 -1
  57. package/dist/pd-edit-content/PdEditContent.js +33 -10
  58. package/dist/pd-edit-content/pd-edit-content.stories.d.ts +54 -10
  59. package/dist/pd-edit-content/pd-edit-content.stories.d.ts.map +1 -1
  60. package/dist/pd-loading-state/PdLoadingState.d.ts +64 -0
  61. package/dist/pd-loading-state/PdLoadingState.d.ts.map +1 -0
  62. package/dist/pd-loading-state/PdLoadingState.js +219 -0
  63. package/dist/pd-loading-state/pd-loading-state.d.ts +6 -0
  64. package/dist/pd-loading-state/pd-loading-state.d.ts.map +1 -0
  65. package/dist/pd-loading-state/pd-loading-state.stories.d.ts +48 -0
  66. package/dist/pd-loading-state/pd-loading-state.stories.d.ts.map +1 -0
  67. package/dist/pd-loading-state.d.ts +2 -0
  68. package/dist/pd-loading-state.js +1 -0
  69. package/dist/pd-more-info/PdMoreInfo.d.ts +6 -2
  70. package/dist/pd-more-info/PdMoreInfo.d.ts.map +1 -1
  71. package/dist/pd-more-info/PdMoreInfo.js +30 -4
  72. package/dist/pd-more-info/pd-more-info.stories.d.ts +41 -5
  73. package/dist/pd-more-info/pd-more-info.stories.d.ts.map +1 -1
  74. package/dist/pd-notice-box/PdNoticeBox.d.ts +88 -0
  75. package/dist/pd-notice-box/PdNoticeBox.d.ts.map +1 -0
  76. package/dist/pd-notice-box/PdNoticeBox.js +224 -0
  77. package/dist/pd-notice-box/pd-notice-box.d.ts +3 -0
  78. package/dist/pd-notice-box/pd-notice-box.d.ts.map +1 -0
  79. package/dist/pd-notice-box/pd-notice-box.js +8 -0
  80. package/dist/pd-notice-box/pd-notice-box.stories.d.ts +58 -0
  81. package/dist/pd-notice-box/pd-notice-box.stories.d.ts.map +1 -0
  82. package/dist/pd-panel-viewer/PdPanel.d.ts +5 -0
  83. package/dist/pd-panel-viewer/PdPanel.d.ts.map +1 -1
  84. package/dist/pd-panel-viewer/PdPanelViewer.d.ts +53 -2
  85. package/dist/pd-panel-viewer/PdPanelViewer.d.ts.map +1 -1
  86. package/dist/pd-panel-viewer/PdPanelViewer.js +188 -33
  87. package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts +46 -0
  88. package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts.map +1 -0
  89. package/dist/pd-resize-content/PdResizeContent.d.ts +12 -10
  90. package/dist/pd-resize-content/PdResizeContent.d.ts.map +1 -1
  91. package/dist/pd-resize-content/PdResizeContent.js +19 -9
  92. package/dist/pd-resize-content/pd-resize-content.stories.d.ts +36 -4
  93. package/dist/pd-resize-content/pd-resize-content.stories.d.ts.map +1 -1
  94. package/dist/pd-tab/PdTab.d.ts +35 -2
  95. package/dist/pd-tab/PdTab.d.ts.map +1 -1
  96. package/dist/pd-tab/PdTab.js +181 -71
  97. package/dist/pd-tab/pd-tab.stories.d.ts +51 -21
  98. package/dist/pd-tab/pd-tab.stories.d.ts.map +1 -1
  99. package/dist/pd-timeline/PdTimeline.d.ts +50 -0
  100. package/dist/pd-timeline/PdTimeline.d.ts.map +1 -0
  101. package/dist/pd-timeline/PdTimeline.js +315 -0
  102. package/dist/pd-timeline/pd-timeline.d.ts +3 -0
  103. package/dist/pd-timeline/pd-timeline.d.ts.map +1 -0
  104. package/dist/pd-timeline/pd-timeline.stories.d.ts +56 -0
  105. package/dist/pd-timeline/pd-timeline.stories.d.ts.map +1 -0
  106. package/dist/pd-timeline-wizard/PdTimelineWizard.d.ts +39 -0
  107. package/dist/pd-timeline-wizard/PdTimelineWizard.d.ts.map +1 -0
  108. package/dist/pd-timeline-wizard/PdTimelineWizard.js +150 -0
  109. package/dist/pd-timeline-wizard/pd-timeline-wizard.d.ts +3 -0
  110. package/dist/pd-timeline-wizard/pd-timeline-wizard.d.ts.map +1 -0
  111. package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts +54 -0
  112. package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts.map +1 -0
  113. package/dist/pd-timeline-wizard.d.ts +2 -0
  114. package/dist/pd-timeline-wizard.js +8 -0
  115. package/dist/pd-timeline.d.ts +2 -0
  116. package/dist/pd-timeline.js +8 -0
  117. package/dist/types.d.ts +25 -0
  118. package/dist/types.d.ts.map +1 -1
  119. 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 { PdColorStyles, PdFontStyles } from '@progressive-development/pd-shared-styles';
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
- ` : null}
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
- ` : null}
170
+ ` : nothing}
166
171
  <slot></slot>
167
172
  <div class="link-row">
168
173
  ${!this.editDisabled ? html`
169
- <a @click="${this._editContent}">
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} Bewerk ${this.contentTitle}
181
+ ${editIcon} ${msg("Edit", { id: "pd.edit.content.edit" })}
182
+ ${this.contentTitle}
172
183
  </div>
173
184
  </a>
174
- ` : null}
185
+ ` : nothing}
175
186
  ${this.editLinks.map(
176
187
  (link) => html`
177
- <a data-link="${link.key}" @click="${this._editContent}">
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, StoryFn } from '@storybook/web-components';
2
- declare const _default: Meta;
3
- export default _default;
4
- export declare const Default: StoryFn<any>;
5
- export declare const WithEditLinks: StoryFn<any>;
6
- export declare const EditDisabled: StoryFn<any>;
7
- export declare const WithoutStepNumber: StoryFn<any>;
8
- export declare const CustomSlotContent: StoryFn<any>;
9
- export declare const EditContent: () => import('lit').TemplateResult<1>;
10
- export declare const NumberEditContent: () => import('lit').TemplateResult<1>;
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":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAI/D,OAAO,sBAAsB,CAAC;wBASzB,IAAI;AAPT,wBAOU;AA+FV,eAAO,MAAM,OAAO,cAAoB,CAAC;AASzC,eAAO,MAAM,aAAa,cAAoB,CAAC;AAS/C,eAAO,MAAM,YAAY,cAAoB,CAAC;AAS9C,eAAO,MAAM,iBAAiB,cAAoB,CAAC;AAQnD,eAAO,MAAM,iBAAiB,cAAoB,CAAC;AAenD,eAAO,MAAM,WAAW,uCAsDvB,CAAC;AAGF,eAAO,MAAM,iBAAiB,uCA0B7B,CAAC"}
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,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 PD Progressive Development UG. All rights reserved.
4
+ */
5
+ export { PdLoadingState, type LoadingState, type LoadingSubTask, } from './PdLoadingState.js';
6
+ //# sourceMappingURL=pd-loading-state.d.ts.map
@@ -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,2 @@
1
+ export * from './pd-loading-state/pd-loading-state'
2
+ export {}
@@ -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 - Der kompakte Textblock für die erste Ansicht
9
- * @slot large-view - Der erweiterte Textblock nach Klick auf "Mehr Informationen"
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;AAM5D;;;;;;;;;;;;;;;GAeG;AACH,qBACa,UAAW,SAAQ,UAAU;IAExC,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAgB,MAAM,EAAE,cAAc,CAuBpC;IAEO,MAAM;IAoBf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAWtB"}
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 @click=${this._showMoreInfo}>
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 @click=${this._showLessInfo}>
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([