@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,5 @@
1
- import { LitElement, css, html } from 'lit';
2
- import { property } from 'lit/decorators.js';
3
- import { PdColorStyles, PdFontStyles } from '@progressive-development/pd-shared-styles';
1
+ import { LitElement, css, nothing, html } from 'lit';
2
+ import { property, state, query } from 'lit/decorators.js';
4
3
  import '@progressive-development/pd-icon/pd-icon';
5
4
 
6
5
  var __defProp = Object.defineProperty;
@@ -16,93 +15,108 @@ class PdTab extends LitElement {
16
15
  constructor() {
17
16
  super(...arguments);
18
17
  this.tabs = [];
18
+ this._resizeObserver = null;
19
19
  }
20
20
  static {
21
21
  this.styles = [
22
- PdColorStyles,
23
- PdFontStyles,
24
22
  css`
25
23
  :host {
26
24
  display: block;
25
+ --_font-size: var(--pd-tab-font-size, 0.875rem);
26
+ --_font-size-compact: var(--pd-tab-font-size-compact, 0.8rem);
27
+ --_active-col: var(
28
+ --pd-tab-active-indicator-col,
29
+ var(--pd-default-col)
30
+ );
31
+ --_active-height: var(--pd-tab-active-indicator-height, 2px);
32
+ --_icon-size: var(--pd-tab-icon-size, 1.125em);
27
33
  }
28
34
 
29
35
  .header-container {
30
36
  display: flex;
37
+ flex-wrap: nowrap;
38
+ border-bottom: 1px solid var(--pd-default-disabled-light-col, #e5e7eb);
39
+ font-size: var(--_font-size);
31
40
  }
32
41
 
42
+ /* --- Tab header --- */
33
43
  .tab-header {
34
- padding: var(--pd-tab-header-padding, 0.8em 1.5em);
35
- background-color: var(--pd-tab-bg-col, var(--pd-default-light-col));
44
+ padding: var(--pd-tab-header-padding, 0.5em 1em);
36
45
  font-family: var(--pd-default-font-title-family);
37
46
  color: var(--pd-tab-text-col, var(--pd-default-font-title-col));
38
47
  cursor: pointer;
39
- border: 2px solid var(--pd-tab-border-col, #ccc); /* Dünner Rahmen */
40
- border-bottom: none; /* Tabs sollen nahtlos an den Inhalt anschließen */
41
- border-radius: 8px 8px 0 0; /* Abgerundete obere Ecken */
42
- display: inline-block; /* Tabs nebeneinander anzeigen */
43
- margin-right: 5px; /* Abstand zwischen Tabs */
44
- box-shadow: var(
45
- --pd-tab-shadow,
46
- 0 2px 4px rgba(0, 0, 0, 0.1)
47
- ); /* Leichter Schatten für Tiefe */
48
+ background: transparent;
49
+ border: none;
50
+ border-bottom: var(--_active-height) solid transparent;
51
+ margin-bottom: calc(-1 * var(--_active-height) + 1px);
52
+ white-space: nowrap;
48
53
  transition:
49
- background-color 0.3s,
50
- box-shadow 0.3s; /* Weiche Übergänge bei Hover */
54
+ color 0.2s,
55
+ border-color 0.2s,
56
+ background-color 0.2s;
57
+ display: inline-flex;
58
+ align-items: center;
59
+ gap: var(--pd-tab-icon-gap, 0.35em);
60
+ flex-shrink: 0;
51
61
  }
52
62
 
53
63
  .tab-header:hover {
54
- background-color: var(
55
- --pd-tab-bg-hover-col,
56
- var(--pd-default-hover-col)
57
- );
58
- box-shadow: var(
59
- --pd-tab-shadow-hover,
60
- 0 4px 8px rgba(0, 0, 0, 0.2)
61
- ); /* Schattenintensität bei Hover erhöhen */
64
+ background-color: var(--pd-tab-hover-bg-col, rgba(0, 0, 0, 0.04));
62
65
  }
63
66
 
64
67
  .tab-header.active-header {
65
- background-color: var(--pd-tab-bg-active-col, var(--pd-default-col));
66
- border-bottom: 2px solid
67
- var(--pd-tab-border-active-col, var(--pd-default-col));
68
- color: var(
69
- --pd-tab-active-text-col,
70
- var(--pd-default-bg-col)
71
- ); /* Textfarbe für aktiven Tab */
72
- box-shadow: none; /* Schatten entfernen, wenn Tab aktiv ist */
68
+ color: var(--pd-tab-active-text-col, var(--_active-col));
69
+ border-bottom-color: var(--_active-col);
70
+ font-weight: 500;
73
71
  }
74
72
 
75
73
  .tab-header.disabled-header {
76
- background-color: var(--pd-tab-bg-active-col, var(--pd-default-col));
77
- border-bottom: 2px solid
78
- var(--pd-tab-border-active-col, var(--pd-default-col));
74
+ pointer-events: none;
79
75
  color: var(
80
- --pd-tab-active-text-col,
81
- var(--pd-default-bg-col)
82
- ); /* Textfarbe für aktiven Tab */
83
- box-shadow: none; /* Schatten entfernen, wenn Tab aktiv ist */
76
+ --pd-tab-disabled-text-col,
77
+ var(--pd-default-disabled-text-col)
78
+ );
79
+ opacity: 0.5;
80
+ cursor: not-allowed;
84
81
  }
85
82
 
86
- .tab-header.disabled-header {
87
- pointer-events: none; /* Deaktiviert die Klickbarkeit */
88
- background-color: var(
89
- --pd-tab-disabled-bg-col,
90
- #f0f0f0
91
- ); /* Hellere Farbe für deaktivierte Tabs */
92
- color: var(--pd-tab-disabled-text-col, #999); /* Hellere Textfarbe */
93
- border-color: var(
94
- --pd-tab-disabled-border-col,
95
- #ddd
96
- ); /* Angepasste Rahmenfarbe */
97
- cursor: not-allowed; /* Zeigt an, dass der Tab nicht interaktiv ist */
98
- opacity: 0.6; /* Reduziert die Sichtbarkeit für einen "deaktivierten" Look */
83
+ .tab-header:focus {
84
+ outline: none;
99
85
  }
100
86
 
101
- .tab-header:focus {
102
- outline: none; /* Entfernt den Standardfokusrahmen */
103
- box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.5); /* Fokusring für Tastaturnavigation */
87
+ .tab-header:focus-visible {
88
+ outline: 2px solid var(--pd-focus-ring-col);
89
+ outline-offset: -2px;
90
+ }
91
+
92
+ /* --- Compact mode (short labels) --- */
93
+ :host([data-compact]) .header-container {
94
+ font-size: var(--_font-size-compact);
95
+ }
96
+
97
+ .full-label {
98
+ display: inline;
99
+ }
100
+
101
+ .short-label {
102
+ display: none;
103
+ }
104
+
105
+ :host([data-compact]) .full-label {
106
+ display: none;
104
107
  }
105
108
 
109
+ :host([data-compact]) .short-label {
110
+ display: inline;
111
+ }
112
+
113
+ /* --- Icon --- */
114
+ .tab-icon {
115
+ --pd-icon-size: var(--_icon-size);
116
+ flex-shrink: 0;
117
+ }
118
+
119
+ /* --- Content panels --- */
106
120
  .slot-container {
107
121
  display: none;
108
122
  }
@@ -110,33 +124,60 @@ class PdTab extends LitElement {
110
124
  .active-slot {
111
125
  padding: var(--pd-tab-content-padding, 1em);
112
126
  display: block;
113
- border: var(--pd-tab-content-border, 1px solid var(--pd-default-col));
114
- border-top: var(
115
- --pd-tab-content-border-top,
116
- 3px solid var(--pd-default-col)
127
+ border: var(
128
+ --pd-tab-content-border,
129
+ 1px solid var(--pd-default-disabled-light-col, #e5e7eb)
117
130
  );
131
+ border-top: none;
118
132
  }
119
133
  `
120
134
  ];
121
135
  }
122
- update(changedProperties) {
136
+ willUpdate(changedProperties) {
123
137
  if (changedProperties.has("defaultTab") && this.defaultTab) {
124
- console.log("PdTab: Set active from default selection", this.defaultTab);
125
138
  this._activeTab = this.defaultTab;
126
139
  }
127
- super.update(changedProperties);
140
+ }
141
+ updated(changedProperties) {
142
+ if (changedProperties.has("tabs")) {
143
+ this._checkOverflow();
144
+ }
145
+ }
146
+ firstUpdated() {
147
+ this._resizeObserver = new ResizeObserver(() => this._checkOverflow());
148
+ this._resizeObserver.observe(this._headerContainer);
149
+ }
150
+ disconnectedCallback() {
151
+ super.disconnectedCallback();
152
+ if (this._resizeObserver) {
153
+ this._resizeObserver.disconnect();
154
+ this._resizeObserver = null;
155
+ }
128
156
  }
129
157
  render() {
130
158
  return html`
131
- <div class="header-container">
159
+ <div
160
+ id="hc"
161
+ class="header-container"
162
+ role="tablist"
163
+ @keydown=${this._onKeyDown}
164
+ >
132
165
  ${this.tabs.map(
133
166
  (t) => html`
134
167
  <div
135
168
  class="tab-header ${this._activeTab === t.key ? "active-header" : ""} ${t.disabled ? "disabled-header" : ""}"
136
169
  data-key="${t.key}"
137
170
  @click="${this._tabSelected}"
171
+ role="tab"
172
+ id="${`tab-${t.key}`}"
173
+ aria-selected="${this._activeTab === t.key}"
174
+ aria-controls="${`panel-${t.key}`}"
175
+ aria-disabled="${t.disabled || false}"
176
+ tabindex="${this._activeTab === t.key && !t.disabled ? 0 : -1}"
138
177
  >
139
- ${t.name}
178
+ ${t.pdIcon ? html`<pd-icon class="tab-icon" .icon="${t.pdIcon}"></pd-icon>` : nothing}
179
+ <span class="full-label">${t.name}</span>
180
+ <span class="short-label">${t.shortLabel ?? t.name}</span>
140
181
  </div>
141
182
  `
142
183
  )}
@@ -144,7 +185,9 @@ class PdTab extends LitElement {
144
185
  ${this.tabs.map(
145
186
  (t) => html`
146
187
  <div
147
- id="${`slot${t.key}`}"
188
+ id="${`panel-${t.key}`}"
189
+ role="tabpanel"
190
+ aria-labelledby="${`tab-${t.key}`}"
148
191
  class="slot-container ${this._activeTab === t.key ? "active-slot" : ""}"
149
192
  >
150
193
  <slot name="${t.key}"></slot>
@@ -156,12 +199,76 @@ class PdTab extends LitElement {
156
199
  reset() {
157
200
  this._activeTab = this.defaultTab;
158
201
  }
159
- // eslint-disable-next-line class-methods-use-this
202
+ // ---------------------------------------------------------------------------
203
+ // Overflow detection (compact mode)
204
+ // ---------------------------------------------------------------------------
205
+ _checkOverflow() {
206
+ this.removeAttribute("data-compact");
207
+ const c = this._headerContainer;
208
+ if (c.scrollWidth > c.clientWidth + 1 && this.tabs.some((t) => t.shortLabel)) {
209
+ this.setAttribute("data-compact", "");
210
+ }
211
+ }
212
+ // ---------------------------------------------------------------------------
213
+ // Tab selection & keyboard navigation
214
+ // ---------------------------------------------------------------------------
215
+ _onKeyDown(event) {
216
+ const enabledTabs = this.tabs.filter((t) => !t.disabled);
217
+ if (enabledTabs.length === 0) return;
218
+ const currentIndex = enabledTabs.findIndex(
219
+ (t) => t.key === this._activeTab
220
+ );
221
+ let nextIndex = -1;
222
+ switch (event.key) {
223
+ case "ArrowRight":
224
+ case "ArrowDown":
225
+ event.preventDefault();
226
+ nextIndex = currentIndex < enabledTabs.length - 1 ? currentIndex + 1 : 0;
227
+ break;
228
+ case "ArrowLeft":
229
+ case "ArrowUp":
230
+ event.preventDefault();
231
+ nextIndex = currentIndex > 0 ? currentIndex - 1 : enabledTabs.length - 1;
232
+ break;
233
+ case "Home":
234
+ event.preventDefault();
235
+ nextIndex = 0;
236
+ break;
237
+ case "End":
238
+ event.preventDefault();
239
+ nextIndex = enabledTabs.length - 1;
240
+ break;
241
+ default:
242
+ return;
243
+ }
244
+ if (nextIndex >= 0 && nextIndex < enabledTabs.length) {
245
+ const nextTab = enabledTabs[nextIndex];
246
+ this._activeTab = nextTab.key;
247
+ this.dispatchEvent(
248
+ new CustomEvent("tab-selected", {
249
+ detail: this._activeTab,
250
+ bubbles: true,
251
+ composed: true
252
+ })
253
+ );
254
+ this.updateComplete.then(() => {
255
+ const tabElement = this.shadowRoot?.querySelector(
256
+ `[data-key="${nextTab.key}"]`
257
+ );
258
+ tabElement?.focus();
259
+ });
260
+ }
261
+ }
160
262
  _tabSelected(e) {
161
- this._activeTab = e.target?.dataset?.key;
263
+ const target = e.target;
264
+ const key = target.closest("[data-key]")?.dataset?.key;
265
+ if (!key) return;
266
+ this._activeTab = key;
162
267
  this.dispatchEvent(
163
268
  new CustomEvent("tab-selected", {
164
- detail: this._activeTab
269
+ detail: this._activeTab,
270
+ bubbles: true,
271
+ composed: true
165
272
  })
166
273
  );
167
274
  }
@@ -173,7 +280,10 @@ __decorateClass([
173
280
  property({ type: String })
174
281
  ], PdTab.prototype, "defaultTab");
175
282
  __decorateClass([
176
- property({ type: String, state: true })
283
+ state()
177
284
  ], PdTab.prototype, "_activeTab");
285
+ __decorateClass([
286
+ query("#hc")
287
+ ], PdTab.prototype, "_headerContainer");
178
288
 
179
289
  export { PdTab };
@@ -1,23 +1,53 @@
1
- import { StoryObj } from '@storybook/web-components';
2
- declare const meta: {
3
- title: string;
4
- render: (args: import('@storybook/web-components').Args) => import('lit').TemplateResult<1>;
5
- argTypes: {
6
- backgroundColor: {
7
- control: "color";
8
- };
9
- onClick: {
10
- action: string;
11
- };
12
- size: {
13
- control: {
14
- type: "select";
15
- };
16
- options: string[];
17
- };
18
- };
19
- };
1
+ import { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ import { TabHeader } from '../types.js';
3
+ /**
4
+ * Story arguments interface for pd-tab component.
5
+ * Maps to the component's public API.
6
+ */
7
+ interface PdTabArgs {
8
+ /** Array of tab header definitions */
9
+ tabs: TabHeader[];
10
+ /** Key of the initially active tab */
11
+ defaultTab: string;
12
+ }
13
+ /**
14
+ * ## pd-tab
15
+ *
16
+ * A tab navigation component with header tabs and named content slots.
17
+ *
18
+ * ### Features
19
+ * - Dynamic tabs configured via the `tabs` property (array of TabHeader)
20
+ * - Responsive label switching: full label -> short label when space is limited
21
+ * - Optional icon per tab header via `pdIcon`
22
+ * - Disabled state for individual tabs
23
+ * - Named slots for each tab's content, matched by tab key
24
+ * - Full WAI-ARIA tabs pattern with keyboard navigation
25
+ *
26
+ * ### Accessibility
27
+ * - Tab container uses `role="tablist"`
28
+ * - Tab headers use `role="tab"` with `aria-selected` and `aria-controls`
29
+ * - Tab panels use `role="tabpanel"` with `aria-labelledby`
30
+ * - `aria-disabled` on disabled tabs
31
+ * - Arrow keys (horizontal + vertical), Home, and End for tab navigation
32
+ * - Disabled tabs are skipped during keyboard navigation
33
+ * - Visible focus indicator via `:focus-visible`
34
+ */
35
+ declare const meta: Meta<PdTabArgs>;
20
36
  export default meta;
21
- type Story = StoryObj;
22
- export declare const TabDefault: Story;
37
+ type Story = StoryObj<PdTabArgs>;
38
+ /** Default tab component with three tabs. Interactive via Controls panel. */
39
+ export declare const Default: Story;
40
+ /** Overview of different tab configurations: default, disabled, short labels, and minimal. */
41
+ export declare const AllStates: Story;
42
+ /**
43
+ * Resizable container to test responsive label switching.
44
+ * Drag the right edge to resize and watch: Full Label -> Short Label.
45
+ */
46
+ export declare const ResponsiveCascade: Story;
47
+ /** Behavior with six tabs in the navigation bar. */
48
+ export declare const ManyTabs: Story;
49
+ /** Tabs with rich content including lists and tables. */
50
+ export declare const WithRichContent: Story;
51
+ /** CSS Custom Properties -- Branded and Redesigned variants. */
52
+ export declare const CustomStyling: Story;
23
53
  //# sourceMappingURL=pd-tab.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pd-tab.stories.d.ts","sourceRoot":"","sources":["../../src/pd-tab/pd-tab.stories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,aAAa,CAAC;AAGrB,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;CAqBM,CAAC;AAEjB,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,UAAU,EAAE,KAiBxB,CAAC"}
1
+ {"version":3,"file":"pd-tab.stories.d.ts","sourceRoot":"","sources":["../../src/pd-tab/pd-tab.stories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;GAGG;AACH,UAAU,SAAS;IACjB,sCAAsC;IACtC,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAqCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CA4DzB,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAMjC,6EAA6E;AAC7E,eAAO,MAAM,OAAO,EAAE,KAiBrB,CAAC;AAMF,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,KAkDvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KA0B/B,CAAC;AAMF,oDAAoD;AACpD,eAAO,MAAM,QAAQ,EAAE,KAuBtB,CAAC;AAMF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,KAyE7B,CAAC;AAMF,gEAAgE;AAChE,eAAO,MAAM,aAAa,EAAE,KAkF3B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { LitElement } from 'lit';
2
+ import { Orientation, PointItem } from '../types';
3
+ /**
4
+ * Timeline/stepper component for displaying sequential steps or progress.
5
+ *
6
+ * @tagname pd-timeline
7
+ * @summary Timeline stepper for sequential steps or progress display.
8
+ *
9
+ * @event step-click - Fired when a clickable point is clicked. Emits `{index, id}`.
10
+ *
11
+ * @slot label-[index] - Named slots for custom label content at each point.
12
+ *
13
+ * @csspart label - The label container element for each timeline point.
14
+ *
15
+ * @cssprop --pd-timeline-line-color - Connecting line color.
16
+ * @cssprop --pd-timeline-line-width - Connecting line width.
17
+ * @cssprop --pd-timeline-line-style - Connecting line style.
18
+ * @cssprop --pd-timeline-point-size - Point circle size.
19
+ * @cssprop --pd-timeline-point-bg - Point background color.
20
+ * @cssprop --pd-timeline-point-color - Point text color.
21
+ * @cssprop --pd-timeline-point-border-color - Point border color.
22
+ * @cssprop --pd-timeline-point-border-width - Point border width.
23
+ * @cssprop --pd-timeline-point-font-size - Point text size.
24
+ * @cssprop --pd-timeline-label-gap - Gap between point and label.
25
+ * @cssprop --pd-timeline-label-max-width - Maximum label width.
26
+ * @cssprop --pd-timeline-vertical-row-gap - Vertical layout row gap.
27
+ * @cssprop --pd-timeline-vertical-block-size - Vertical layout height.
28
+ * @cssprop --pd-timeline-color-active - Active state color.
29
+ * @cssprop --pd-timeline-color-done - Done state color.
30
+ * @cssprop --pd-timeline-color-error - Error state color.
31
+ */
32
+ export declare class PdTimeline extends LitElement {
33
+ /** Layout direction: 'horizontal' or 'vertical'. */
34
+ orientation: Orientation;
35
+ /** Array of point definitions for the timeline. */
36
+ points: PointItem[];
37
+ /** Index of the currently active step. */
38
+ activeIndex?: number;
39
+ /** Whether points are clickable. */
40
+ clickable: boolean;
41
+ static styles: import('lit').CSSResult;
42
+ protected updated(): void;
43
+ private _labelClass;
44
+ private _stateClass;
45
+ private _onClick;
46
+ private _onKeyDown;
47
+ private _renderDotContent;
48
+ protected render(): import('lit').TemplateResult<1>;
49
+ }
50
+ //# sourceMappingURL=PdTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdTimeline.d.ts","sourceRoot":"","sources":["../../src/pd-timeline/PdTimeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAyB,MAAM,UAAU,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,oDAAoD;IAEpD,WAAW,EAAE,WAAW,CAAgB;IAExC,mDAAmD;IAEnD,MAAM,EAAE,SAAS,EAAE,CAAM;IAEzB,0CAA0C;IAE1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oCAAoC;IAEpC,SAAS,UAAS;IAElB,MAAM,CAAC,MAAM,0BA+LX;IAEF,SAAS,CAAC,OAAO,IAAI,IAAI;IAKzB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,iBAAiB;IAWzB,SAAS,CAAC,MAAM;CAoDjB"}