@progressive-development/pd-content 1.0.2 → 1.1.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 (78) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -1
  4. package/dist/pd-badge-order/DragController.d.ts +41 -0
  5. package/dist/pd-badge-order/DragController.d.ts.map +1 -0
  6. package/dist/pd-badge-order/DragController.js +239 -0
  7. package/dist/pd-badge-order/PdBadgeItem.d.ts +31 -0
  8. package/dist/pd-badge-order/PdBadgeItem.d.ts.map +1 -0
  9. package/dist/pd-badge-order/PdBadgeItem.js +320 -0
  10. package/dist/pd-badge-order/PdBadgeOrder.d.ts +68 -0
  11. package/dist/pd-badge-order/PdBadgeOrder.d.ts.map +1 -0
  12. package/dist/pd-badge-order/PdBadgeOrder.js +550 -0
  13. package/dist/pd-badge-order/flip-animator.d.ts +30 -0
  14. package/dist/pd-badge-order/flip-animator.d.ts.map +1 -0
  15. package/dist/pd-badge-order/flip-animator.js +39 -0
  16. package/dist/pd-badge-order/pd-badge-item.d.ts +3 -0
  17. package/dist/pd-badge-order/pd-badge-item.d.ts.map +1 -0
  18. package/dist/pd-badge-order/pd-badge-item.js +8 -0
  19. package/dist/pd-badge-order/pd-badge-order.d.ts +3 -0
  20. package/dist/pd-badge-order/pd-badge-order.d.ts.map +1 -0
  21. package/dist/pd-badge-order/types.d.ts +25 -0
  22. package/dist/pd-badge-order/types.d.ts.map +1 -0
  23. package/dist/pd-badge-order/types.js +3 -0
  24. package/dist/pd-badge-order.d.ts +2 -0
  25. package/dist/pd-badge-order.js +8 -0
  26. package/dist/pd-loading-state/PdLoadingState.d.ts +28 -9
  27. package/dist/pd-loading-state/PdLoadingState.d.ts.map +1 -1
  28. package/dist/pd-loading-state/PdLoadingState.js +228 -83
  29. package/dist/pd-loading-state/pd-loading-state.d.ts +1 -1
  30. package/dist/pd-loading-state/pd-loading-state.d.ts.map +1 -1
  31. package/dist/pd-loading-state/pd-logo-loader.d.ts +25 -0
  32. package/dist/pd-loading-state/pd-logo-loader.d.ts.map +1 -0
  33. package/dist/pd-loading-state/pd-logo-loader.js +63 -0
  34. package/dist/pd-loading-state/register-pd-logo-loader.d.ts +6 -0
  35. package/dist/pd-loading-state/register-pd-logo-loader.d.ts.map +1 -0
  36. package/dist/pd-loading-state/register-pd-logo-loader.js +6 -0
  37. package/dist/pd-loading-state.js +8 -1
  38. package/dist/pd-more-info/PdMoreInfo.d.ts +4 -0
  39. package/dist/pd-more-info/PdMoreInfo.d.ts.map +1 -1
  40. package/dist/pd-more-info/PdMoreInfo.js +14 -7
  41. package/dist/pd-notice-box/PdNoticeBox.d.ts +8 -1
  42. package/dist/pd-notice-box/PdNoticeBox.d.ts.map +1 -1
  43. package/dist/pd-notice-box/PdNoticeBox.js +40 -1
  44. package/dist/pd-panel-viewer/PdPanelViewer.d.ts +2 -0
  45. package/dist/pd-panel-viewer/PdPanelViewer.d.ts.map +1 -1
  46. package/dist/pd-panel-viewer/PdPanelViewer.js +18 -1
  47. package/dist/pd-tab/PdTab.d.ts +8 -5
  48. package/dist/pd-tab/PdTab.d.ts.map +1 -1
  49. package/dist/pd-tab/PdTab.js +110 -56
  50. package/dist/types.d.ts +3 -1
  51. package/dist/types.d.ts.map +1 -1
  52. package/package.json +7 -4
  53. package/dist/pd-box-view/pd-box-view.stories.d.ts +0 -43
  54. package/dist/pd-box-view/pd-box-view.stories.d.ts.map +0 -1
  55. package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts +0 -55
  56. package/dist/pd-code-snippet/pd-code-snippet.stories.d.ts.map +0 -1
  57. package/dist/pd-collapse/pd-collapse.stories.d.ts +0 -51
  58. package/dist/pd-collapse/pd-collapse.stories.d.ts.map +0 -1
  59. package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts +0 -40
  60. package/dist/pd-collapse-group/pd-collapse-group.stories.d.ts.map +0 -1
  61. package/dist/pd-edit-content/pd-edit-content.stories.d.ts +0 -55
  62. package/dist/pd-edit-content/pd-edit-content.stories.d.ts.map +0 -1
  63. package/dist/pd-loading-state/pd-loading-state.stories.d.ts +0 -48
  64. package/dist/pd-loading-state/pd-loading-state.stories.d.ts.map +0 -1
  65. package/dist/pd-more-info/pd-more-info.stories.d.ts +0 -42
  66. package/dist/pd-more-info/pd-more-info.stories.d.ts.map +0 -1
  67. package/dist/pd-notice-box/pd-notice-box.stories.d.ts +0 -58
  68. package/dist/pd-notice-box/pd-notice-box.stories.d.ts.map +0 -1
  69. package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts +0 -46
  70. package/dist/pd-panel-viewer/pd-panel-viewer.stories.d.ts.map +0 -1
  71. package/dist/pd-resize-content/pd-resize-content.stories.d.ts +0 -37
  72. package/dist/pd-resize-content/pd-resize-content.stories.d.ts.map +0 -1
  73. package/dist/pd-tab/pd-tab.stories.d.ts +0 -53
  74. package/dist/pd-tab/pd-tab.stories.d.ts.map +0 -1
  75. package/dist/pd-timeline/pd-timeline.stories.d.ts +0 -56
  76. package/dist/pd-timeline/pd-timeline.stories.d.ts.map +0 -1
  77. package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts +0 -54
  78. package/dist/pd-timeline-wizard/pd-timeline-wizard.stories.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-badge-item.d.ts","sourceRoot":"","sources":["../../src/pd-badge-order/pd-badge-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { PdBadgeItem } from './PdBadgeItem.js';
2
+
3
+ const tag = "pd-badge-item";
4
+ if (!customElements.get(tag)) {
5
+ customElements.define(tag, PdBadgeItem);
6
+ }
7
+
8
+ export { PdBadgeItem };
@@ -0,0 +1,3 @@
1
+ import { PdBadgeOrder } from './PdBadgeOrder.js';
2
+ export { PdBadgeOrder };
3
+ //# sourceMappingURL=pd-badge-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-badge-order.d.ts","sourceRoot":"","sources":["../../src/pd-badge-order/pd-badge-order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOjD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface PdBadge {
2
+ /** Unique badge ID */
3
+ id: string;
4
+ /** Display title (max TEXT_LIMIT_TITLE characters) */
5
+ title: string;
6
+ /** Optional description below title (max TEXT_LIMIT_DESC characters) */
7
+ description?: string;
8
+ /** Optional color (hex or CSS color name) */
9
+ color?: string;
10
+ /** Optional icon name from pd-icon library */
11
+ icon?: string;
12
+ /** Marks user-created badges (only these are deletable) */
13
+ custom?: boolean;
14
+ }
15
+ export interface PdBadgeChangeDetail {
16
+ value: string[];
17
+ badges: PdBadge[];
18
+ }
19
+ export interface PdBadgeReorderDetail {
20
+ value: string[];
21
+ }
22
+ export declare const TEXT_LIMIT_TITLE = 40;
23
+ export declare const TEXT_LIMIT_DESC = 100;
24
+ export declare const DEFAULT_BADGE_COLOR = "#9E9E9E";
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pd-badge-order/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ const DEFAULT_BADGE_COLOR = "#9E9E9E";
2
+
3
+ export { DEFAULT_BADGE_COLOR };
@@ -0,0 +1,2 @@
1
+ export * from './pd-badge-order/pd-badge-order'
2
+ export {}
@@ -0,0 +1,8 @@
1
+ import { PdBadgeOrder } from './pd-badge-order/PdBadgeOrder.js';
2
+
3
+ const tag = "pd-badge-order";
4
+ if (!customElements.get(tag)) {
5
+ customElements.define(tag, PdBadgeOrder);
6
+ }
7
+
8
+ export { PdBadgeOrder };
@@ -1,4 +1,4 @@
1
- import { LitElement, CSSResultGroup } from 'lit';
1
+ import { LitElement, CSSResultGroup, nothing } from 'lit';
2
2
  /**
3
3
  * Sub-task item for loading state progress tracking.
4
4
  */
@@ -13,6 +13,7 @@ export interface LoadingSubTask {
13
13
  /**
14
14
  * Loading state configuration object.
15
15
  */
16
+ export type LoaderStyle = "spinner" | "dots" | "pulse" | "logo";
16
17
  export interface LoadingState {
17
18
  /** Timestamp when loading started */
18
19
  creation?: Date;
@@ -28,6 +29,8 @@ export interface LoadingState {
28
29
  loadingTxt?: string;
29
30
  /** Optional sub-tasks to display progress */
30
31
  subTask?: LoadingSubTask[];
32
+ /** Override loader style for this specific action */
33
+ loaderStyle?: LoaderStyle;
31
34
  }
32
35
  /**
33
36
  * Loading state indicator component with modal and background modes.
@@ -38,13 +41,13 @@ export interface LoadingState {
38
41
  * @slot - Default slot (unused, component renders based on loadingState property)
39
42
  *
40
43
  * @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`.
44
+ * @cssprop --pd-loading-state-background-bg - Background mode container color. Default: `var(--pd-default-bg-col, #fff)`.
45
+ * @cssprop --pd-loading-state-bg-col - Content box background. Default: `var(--pd-default-bg-light-col, #f2f9fa)`.
46
+ * @cssprop --pd-loading-state-border-col - Content box border color. Default: `var(--pd-default-col, #067394)`.
47
+ * @cssprop --pd-loading-state-completed-col - Completed sub-task icon color. Default: `var(--pd-default-success-col, #348b11)`.
48
+ * @cssprop --pd-loading-state-loader-bg - Spinner background color. Default: `var(--pd-default-dark-col, #0a3a48)`.
49
+ * @cssprop --pd-loading-state-loader-fg - Spinner foreground (animated) color. Default: `var(--pd-default-col, #067394)`.
50
+ * @cssprop --pd-loading-state-loading-col - In-progress sub-task icon color. Default: `var(--pd-default-warning-col, #ffbf00)`.
48
51
  */
49
52
  export declare class PdLoadingState extends LitElement {
50
53
  /**
@@ -52,8 +55,24 @@ export declare class PdLoadingState extends LitElement {
52
55
  * Controls visibility, mode (modal/background), and content.
53
56
  */
54
57
  loadingState?: LoadingState;
58
+ /**
59
+ * Visual style of the loading indicator.
60
+ * - `spinner`: rotating border spinner (default)
61
+ * - `dots`: three pulsing dots
62
+ * - `pulse`: expanding ring
63
+ * - `logo`: animated PD logo symbol (stroke draw loop)
64
+ */
65
+ loaderStyle: LoaderStyle;
66
+ /**
67
+ * When true, the content box stays in normal document flow instead of
68
+ * using `position: fixed`. Useful for embedding multiple loaders on one page
69
+ * (e.g. in a grid or side-by-side comparison).
70
+ */
71
+ inline: boolean;
55
72
  static styles: CSSResultGroup;
56
- render(): import('lit').TemplateResult<1> | "";
73
+ render(): import('lit').TemplateResult<1> | typeof nothing;
74
+ private _renderLoader;
75
+ private _renderSubTasks;
57
76
  private _renderContent;
58
77
  }
59
78
  declare global {
@@ -1 +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"}
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,OAAO,EAAE,MAAM,KAAK,CAAC;AAKrE,OAAO,0CAA0C,CAAC;AAClD,OAAO,8BAA8B,CAAC;AAEtC;;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,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhE,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;IAC3B,qDAAqD;IACrD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C;;;OAGG;IAEH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;;;OAMG;IAEH,WAAW,EAAE,WAAW,CAAa;IAErC;;;;OAIG;IAEH,MAAM,UAAS;IAEf,OAAgB,MAAM,EAAE,cAAc,CA0MpC;IAEO,MAAM;IAsBf,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,cAAc;CA+CvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
@@ -1,8 +1,9 @@
1
- import { css, LitElement, html } from 'lit';
2
- import { property, customElement } from 'lit/decorators.js';
1
+ import { css, LitElement, nothing, html } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
3
  import { localized, msg } from '@lit/localize';
4
4
  import { classMap } from 'lit/directives/class-map.js';
5
5
  import '@progressive-development/pd-icon/pd-icon';
6
+ import './register-pd-logo-loader.js';
6
7
 
7
8
  var __defProp = Object.defineProperty;
8
9
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -15,9 +16,14 @@ var __decorateClass = (decorators, target, key, kind) => {
15
16
  return result;
16
17
  };
17
18
  let PdLoadingState = class extends LitElement {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.loaderStyle = "spinner";
22
+ this.inline = false;
23
+ }
18
24
  render() {
19
25
  if (!this.loadingState) {
20
- return "";
26
+ return nothing;
21
27
  }
22
28
  return this.loadingState.modal ? html`
23
29
  <div
@@ -34,56 +40,107 @@ let PdLoadingState = class extends LitElement {
34
40
  </div>
35
41
  ` : this._renderContent();
36
42
  }
43
+ _renderLoader() {
44
+ switch (this.loaderStyle) {
45
+ case "dots":
46
+ return html`<div
47
+ class="loader-dots"
48
+ role="progressbar"
49
+ aria-label="${msg("Laden", {
50
+ id: "pdContent.loadingstate.ariaLoading"
51
+ })}"
52
+ >
53
+ <span></span><span></span><span></span>
54
+ </div>`;
55
+ case "pulse":
56
+ return html`<div
57
+ class="loader-pulse"
58
+ role="progressbar"
59
+ aria-label="${msg("Laden", {
60
+ id: "pdContent.loadingstate.ariaLoading"
61
+ })}"
62
+ ></div>`;
63
+ case "logo":
64
+ return html`<pd-logo-loader
65
+ role="progressbar"
66
+ aria-label="${msg("Laden", {
67
+ id: "pdContent.loadingstate.ariaLoading"
68
+ })}"
69
+ ></pd-logo-loader>`;
70
+ default:
71
+ return html`<div
72
+ class="loader-spinner"
73
+ role="progressbar"
74
+ aria-label="${msg("Laden", {
75
+ id: "pdContent.loadingstate.ariaLoading"
76
+ })}"
77
+ ></div>`;
78
+ }
79
+ }
80
+ _renderSubTasks(subTasks) {
81
+ const completed = subTasks.filter((t) => t.completed).length;
82
+ return html`
83
+ <div class="sub-tasks">
84
+ <div class="sub-task-header">
85
+ ${completed} von ${subTasks.length} Schritten
86
+ </div>
87
+ ${subTasks.map(
88
+ (task) => html`
89
+ <div class="sub-task-row">
90
+ ${task.completed ? html`<pd-icon
91
+ class="sub-icon completed"
92
+ icon="checkBox"
93
+ activeIcon
94
+ ></pd-icon>` : html`<pd-icon
95
+ class="sub-icon loading"
96
+ icon="syncIcon"
97
+ activeIcon
98
+ ></pd-icon>`}
99
+ <span>${task.loadingTxt}</span>
100
+ </div>
101
+ `
102
+ )}
103
+ </div>
104
+ `;
105
+ }
37
106
  _renderContent() {
38
107
  if (!this.loadingState) {
39
- return "";
108
+ return nothing;
109
+ }
110
+ if (this.loadingState.smallBackground) {
111
+ return html`
112
+ <div class="background-content" role="status" aria-live="polite">
113
+ <div
114
+ class="background-loader"
115
+ role="progressbar"
116
+ aria-label="${msg("Laden", {
117
+ id: "pdContent.loadingstate.ariaLoading"
118
+ })}"
119
+ ></div>
120
+ <span>
121
+ ${this.loadingState.loadingTxt || msg("Daten werden synchronisiert", {
122
+ id: "pdContent.loadingstate.syncState"
123
+ })}
124
+ </span>
125
+ </div>
126
+ `;
40
127
  }
41
128
  return html`
42
129
  <div
43
130
  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
131
+ content: true,
132
+ "no-modal-content": this.loadingState.modal !== true && !this.inline
47
133
  })}"
48
134
  role="status"
49
135
  aria-live="polite"
50
136
  >
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>
137
+ ${this._renderLoader()}
58
138
  <p>
59
- ${this.loadingState.loadingTxt || (this.loadingState.smallBackground ? msg("Daten werden synchronisiert", {
60
- id: "pdContent.loadingstate.syncState"
61
- }) : msg("Bitte warten, Daten werden geladen", {
139
+ ${this.loadingState.loadingTxt || msg("Bitte warten, Daten werden geladen", {
62
140
  id: "pdContent.loadingstate.pleaseWait"
63
- }))}
141
+ })}
64
142
  </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
- ` : ""}
143
+ ${this.loadingState.subTask && this.loadingState.subTask.length > 0 ? this._renderSubTasks(this.loadingState.subTask) : nothing}
87
144
  </div>
88
145
  `;
89
146
  }
@@ -124,80 +181,139 @@ PdLoadingState.styles = [
124
181
 
125
182
  /* Main content box */
126
183
  .content {
127
- padding: 1em;
184
+ padding: var(--pd-spacing-lg, 2rem) var(--pd-spacing-lg, 2rem);
128
185
  text-align: center;
129
- background-color: var(--pd-loading-state-bg-col, #edf7fd);
130
- border: 2px solid
186
+ background-color: var(
187
+ --pd-loading-state-bg-col,
188
+ var(--pd-default-bg-light-col, #f2f9fa)
189
+ );
190
+ border: var(--pd-border-width, 1px) solid
131
191
  var(--pd-loading-state-border-col, var(--pd-default-col, #067394));
192
+ border-radius: var(--pd-radius-lg, 8px);
193
+ box-shadow: var(--pd-shadow-lg, 0 4px 8px rgba(0, 0, 0, 0.15));
194
+ min-width: 280px;
195
+ max-width: 420px;
132
196
  z-index: 101;
133
197
  }
134
198
 
135
- /* Background mode (bottom-right corner) */
199
+ /* Background mode (bottom-right pill/toast) */
136
200
  .background-content {
137
201
  position: fixed;
138
- right: 0em;
139
- bottom: 0em;
140
-
141
- padding: 1em;
202
+ right: var(--pd-spacing-md, 1rem);
203
+ bottom: var(--pd-spacing-md, 1rem);
204
+ padding: var(--pd-spacing-sm, 0.5rem) var(--pd-spacing-md, 1rem);
142
205
  z-index: 600;
143
-
144
206
  display: flex;
145
- gap: 0.5em;
207
+ gap: var(--pd-spacing-sm, 0.5rem);
146
208
  align-items: center;
147
-
148
- background-color: var(--pd-loading-state-background-bg, white);
209
+ background: var(
210
+ --pd-loading-state-background-bg,
211
+ var(--pd-default-bg-col, #fff)
212
+ );
213
+ border-radius: var(--pd-radius-lg, 8px);
214
+ box-shadow: var(--pd-shadow-lg, 0 4px 8px rgba(0, 0, 0, 0.15));
215
+ font-size: 0.8125rem;
216
+ color: var(--pd-default-font-content-col, #353738);
149
217
  }
150
218
 
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);
219
+ /* ====== Spinner loader ====== */
220
+ .loader-spinner {
221
+ border: 4px solid
222
+ var(--pd-loading-state-loader-bg, var(--pd-default-dark-col, #0a3a48));
223
+ border-top: 4px solid
224
+ var(--pd-loading-state-loader-fg, var(--pd-default-col, #067394));
155
225
  border-radius: 50%;
156
- width: 30px;
157
- height: 30px;
226
+ width: 40px;
227
+ height: 40px;
158
228
  animation: spin 2s linear infinite;
159
-
160
229
  margin-left: auto;
161
230
  margin-right: auto;
162
231
  }
163
232
 
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%;
233
+ /* ====== Dots loader ====== */
234
+ .loader-dots {
235
+ display: flex;
236
+ gap: 8px;
237
+ justify-content: center;
238
+ }
239
+ .loader-dots span {
169
240
  width: 10px;
170
241
  height: 10px;
171
- animation: spin 2s linear infinite;
242
+ border-radius: 50%;
243
+ background: var(
244
+ --pd-loading-state-loader-fg,
245
+ var(--pd-default-col, #067394)
246
+ );
247
+ animation: dot-pulse 1.4s ease-in-out infinite;
248
+ }
249
+ .loader-dots span:nth-child(2) {
250
+ animation-delay: 0.2s;
251
+ }
252
+ .loader-dots span:nth-child(3) {
253
+ animation-delay: 0.4s;
254
+ }
255
+
256
+ /* ====== Pulse loader ====== */
257
+ .loader-pulse {
258
+ width: 40px;
259
+ height: 40px;
260
+ border-radius: 50%;
261
+ margin: 0 auto;
262
+ border: 3px solid
263
+ var(--pd-loading-state-loader-fg, var(--pd-default-col, #067394));
264
+ animation: pulse-ring 1.5s ease-in-out infinite;
172
265
  }
173
266
 
174
- /* Sub-task list */
175
- .sub-ul {
176
- text-align: start;
267
+ /* ====== Background spinner (small) ====== */
268
+ .background-loader {
269
+ border: 2px solid
270
+ var(--pd-loading-state-loader-bg, var(--pd-default-dark-col, #0a3a48));
271
+ border-top: 2px solid
272
+ var(--pd-loading-state-loader-fg, var(--pd-default-col, #067394));
273
+ border-radius: 50%;
274
+ width: 16px;
275
+ height: 16px;
276
+ animation: spin 2s linear infinite;
277
+ flex-shrink: 0;
177
278
  }
178
279
 
179
- .sub-row {
280
+ /* ====== Sub-tasks ====== */
281
+ .sub-tasks {
282
+ margin-top: var(--pd-spacing-md, 1rem);
283
+ text-align: left;
284
+ }
285
+ .sub-task-header {
286
+ font-size: 0.75rem;
287
+ color: var(--pd-default-font-muted-col, #6b7280);
288
+ margin-bottom: var(--pd-spacing-sm, 0.5rem);
289
+ }
290
+ .sub-task-row {
180
291
  display: flex;
181
292
  align-items: center;
182
- justify-content: space-between;
183
- padding-right: 10px;
293
+ gap: var(--pd-spacing-sm, 0.5rem);
294
+ padding: var(--pd-spacing-xs, 0.25rem) 0;
184
295
  }
185
-
186
- .sub-icon {
296
+ .sub-task-row .sub-icon {
187
297
  --pd-icon-size: 1rem;
188
298
  padding: 0;
189
- vertical-align: baseline;
190
- margin: 0 0.25rem 0 0;
299
+ margin: 0;
300
+ flex-shrink: 0;
191
301
  }
192
-
193
- .completed {
194
- --pd-icon-col-active: var(--pd-loading-state-completed-col, green);
302
+ .sub-task-row .completed {
303
+ --pd-icon-col-active: var(
304
+ --pd-loading-state-completed-col,
305
+ var(--pd-default-success-col, #348b11)
306
+ );
195
307
  }
196
-
197
- .loading {
198
- --pd-icon-col-active: var(--pd-loading-state-loading-col, orange);
308
+ .sub-task-row .loading {
309
+ --pd-icon-col-active: var(
310
+ --pd-loading-state-loading-col,
311
+ var(--pd-default-warning-col, #ffbf00)
312
+ );
313
+ animation: spin 2s linear infinite;
199
314
  }
200
315
 
316
+ /* ====== Keyframes ====== */
201
317
  @keyframes spin {
202
318
  0% {
203
319
  transform: rotate(0deg);
@@ -206,14 +322,43 @@ PdLoadingState.styles = [
206
322
  transform: rotate(360deg);
207
323
  }
208
324
  }
325
+
326
+ @keyframes dot-pulse {
327
+ 0%,
328
+ 80%,
329
+ 100% {
330
+ opacity: 0.3;
331
+ transform: scale(0.8);
332
+ }
333
+ 40% {
334
+ opacity: 1;
335
+ transform: scale(1);
336
+ }
337
+ }
338
+
339
+ @keyframes pulse-ring {
340
+ 0% {
341
+ transform: scale(0.8);
342
+ opacity: 1;
343
+ }
344
+ 100% {
345
+ transform: scale(1.4);
346
+ opacity: 0;
347
+ }
348
+ }
209
349
  `
210
350
  ];
211
351
  __decorateClass([
212
352
  property({ type: Object })
213
353
  ], PdLoadingState.prototype, "loadingState", 2);
354
+ __decorateClass([
355
+ property({ type: String, reflect: true })
356
+ ], PdLoadingState.prototype, "loaderStyle", 2);
357
+ __decorateClass([
358
+ property({ type: Boolean, reflect: true })
359
+ ], PdLoadingState.prototype, "inline", 2);
214
360
  PdLoadingState = __decorateClass([
215
- localized(),
216
- customElement("pd-loading-state")
361
+ localized()
217
362
  ], PdLoadingState);
218
363
 
219
364
  export { PdLoadingState };
@@ -2,5 +2,5 @@
2
2
  * @license
3
3
  * Copyright (c) 2021 PD Progressive Development UG. All rights reserved.
4
4
  */
5
- export { PdLoadingState, type LoadingState, type LoadingSubTask, } from './PdLoadingState.js';
5
+ export { PdLoadingState, type LoaderStyle, type LoadingState, type LoadingSubTask, } from './PdLoadingState.js';
6
6
  //# sourceMappingURL=pd-loading-state.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"pd-loading-state.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/pd-loading-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Animated PD logo symbol used as a loading indicator.
4
+ *
5
+ * Renders only the intertwined P/D symbol (no company text) and loops
6
+ * the stroke-draw animation continuously: lines draw forward, then
7
+ * erase backward, creating a smooth "breathing" loading effect.
8
+ *
9
+ * @tagname pd-logo-loader
10
+ * @cssprop --pd-logo-loader-col - Stroke color. Default: `var(--pd-loading-state-loader-fg)`.
11
+ * @cssprop --pd-logo-loader-size - Width and height. Default: `56px`.
12
+ * @cssprop --pd-logo-loader-stroke-width - SVG stroke width. Default: `5`.
13
+ * @cssprop --pd-logo-loader-duration - Full draw+erase cycle. Default: `2.5s`.
14
+ */
15
+ export declare class PdLogoLoader extends LitElement {
16
+ static styles: import('lit').CSSResult;
17
+ firstUpdated(): void;
18
+ render(): import('lit').TemplateResult<2>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ "pd-logo-loader": PdLogoLoader;
23
+ }
24
+ }
25
+ //# sourceMappingURL=pd-logo-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pd-logo-loader.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/pd-logo-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAY,MAAM,KAAK,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,0BAsCpB;IAEO,YAAY,IAAI,IAAI;IAQpB,MAAM;CAShB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -0,0 +1,63 @@
1
+ import { LitElement, css, svg } from 'lit';
2
+
3
+ class PdLogoLoader extends LitElement {
4
+ static {
5
+ this.styles = css`
6
+ :host {
7
+ display: block;
8
+ width: var(--pd-logo-loader-size, 56px);
9
+ height: var(--pd-logo-loader-size, 56px);
10
+ margin: 0 auto;
11
+ }
12
+
13
+ svg {
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+
18
+ .pd-path {
19
+ stroke: var(
20
+ --pd-logo-loader-col,
21
+ var(--pd-loading-state-loader-fg, var(--pd-default-col, #067394))
22
+ );
23
+ stroke-width: var(--pd-logo-loader-stroke-width, 5);
24
+ stroke-linecap: round;
25
+ stroke-linejoin: round;
26
+ stroke-miterlimit: 10;
27
+ fill: none;
28
+ stroke-dasharray: var(--_path-len);
29
+ stroke-dashoffset: 0;
30
+ animation: logo-draw var(--pd-logo-loader-duration, 2.5s) ease-in-out
31
+ infinite alternate;
32
+ }
33
+
34
+ .pd-path-b {
35
+ animation-delay: 0.15s;
36
+ }
37
+
38
+ @keyframes logo-draw {
39
+ to {
40
+ stroke-dashoffset: var(--_path-len);
41
+ }
42
+ }
43
+ `;
44
+ }
45
+ firstUpdated() {
46
+ const path = this.shadowRoot?.querySelector(".pd-path");
47
+ if (path) {
48
+ const len = path.getTotalLength();
49
+ this.style.setProperty("--_path-len", `${len}`);
50
+ }
51
+ }
52
+ render() {
53
+ return svg`<svg viewBox="0 0 166.68 212.6" aria-hidden="true">
54
+ <path class="pd-path" d="M123.9,80.5l3.6,0.1c6.7,0,12.2-5.5,12.2-12.2s-5.5-12.2-12.2-12.2c-6.7,0-12.2,5.5-12.2,12.2v75.8
55
+ c0,15-12.2,27.2-27.2,27.2s-27.2-12.2-27.2-27.2c0-14.1,10.7-25.7,24.4-27.1V74.7c0-4.4-3.5-8-7.9-8c-4.4,0-8,3.6-8,8
56
+ c0,4.4,3.6,8,8,8"/>
57
+ <path class="pd-path pd-path-b" d="M91.7,132.1l-3.6-0.1c-6.7,0-12.2,5.5-12.2,12.2c0,6.7,5.5,12.2,12.2,12.2s12.2-5.5,12.2-12.2V68.4
58
+ c0-15,12.2-27.2,27.2-27.2s27.2,12.2,27.2,27.2c0,14.1-10.8,25.7-24.5,27.1v42.1c0,4.4,3.6,8,8,8c4.4,0,8-3.6,8-8s-3.6-8-8-8"/>
59
+ </svg>`;
60
+ }
61
+ }
62
+
63
+ export { PdLogoLoader };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2021 PD Progressive Development UG. All rights reserved.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=register-pd-logo-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-pd-logo-loader.d.ts","sourceRoot":"","sources":["../../src/pd-loading-state/register-pd-logo-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG"}