@progressive-development/pd-content 0.9.2 → 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 -15
  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 -7
  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 -2
  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 -68
  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 +16 -7
@@ -1,5 +1,5 @@
1
- import { LitElement, css, html } from 'lit';
2
- import { property } from 'lit/decorators.js';
1
+ import { LitElement, css, nothing, html } from 'lit';
2
+ import { property, state, query } from 'lit/decorators.js';
3
3
  import '@progressive-development/pd-icon/pd-icon';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -15,91 +15,108 @@ class PdTab extends LitElement {
15
15
  constructor() {
16
16
  super(...arguments);
17
17
  this.tabs = [];
18
+ this._resizeObserver = null;
18
19
  }
19
20
  static {
20
21
  this.styles = [
21
22
  css`
22
23
  :host {
23
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);
24
33
  }
25
34
 
26
35
  .header-container {
27
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);
28
40
  }
29
41
 
42
+ /* --- Tab header --- */
30
43
  .tab-header {
31
- padding: var(--pd-tab-header-padding, 0.8em 1.5em);
32
- background-color: var(--pd-tab-bg-col, var(--pd-default-light-col));
44
+ padding: var(--pd-tab-header-padding, 0.5em 1em);
33
45
  font-family: var(--pd-default-font-title-family);
34
46
  color: var(--pd-tab-text-col, var(--pd-default-font-title-col));
35
47
  cursor: pointer;
36
- border: 2px solid var(--pd-tab-border-col, #ccc); /* Dünner Rahmen */
37
- border-bottom: none; /* Tabs sollen nahtlos an den Inhalt anschließen */
38
- border-radius: 8px 8px 0 0; /* Abgerundete obere Ecken */
39
- display: inline-block; /* Tabs nebeneinander anzeigen */
40
- margin-right: 5px; /* Abstand zwischen Tabs */
41
- box-shadow: var(
42
- --pd-tab-shadow,
43
- 0 2px 4px rgba(0, 0, 0, 0.1)
44
- ); /* 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;
45
53
  transition:
46
- background-color 0.3s,
47
- 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;
48
61
  }
49
62
 
50
63
  .tab-header:hover {
51
- background-color: var(
52
- --pd-tab-bg-hover-col,
53
- var(--pd-default-hover-col)
54
- );
55
- box-shadow: var(
56
- --pd-tab-shadow-hover,
57
- 0 4px 8px rgba(0, 0, 0, 0.2)
58
- ); /* Schattenintensität bei Hover erhöhen */
64
+ background-color: var(--pd-tab-hover-bg-col, rgba(0, 0, 0, 0.04));
59
65
  }
60
66
 
61
67
  .tab-header.active-header {
62
- background-color: var(--pd-tab-bg-active-col, var(--pd-default-col));
63
- border-bottom: 2px solid
64
- var(--pd-tab-border-active-col, var(--pd-default-col));
65
- color: var(
66
- --pd-tab-active-text-col,
67
- var(--pd-default-bg-col)
68
- ); /* Textfarbe für aktiven Tab */
69
- 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;
70
71
  }
71
72
 
72
73
  .tab-header.disabled-header {
73
- background-color: var(--pd-tab-bg-active-col, var(--pd-default-col));
74
- border-bottom: 2px solid
75
- var(--pd-tab-border-active-col, var(--pd-default-col));
74
+ pointer-events: none;
76
75
  color: var(
77
- --pd-tab-active-text-col,
78
- var(--pd-default-bg-col)
79
- ); /* Textfarbe für aktiven Tab */
80
- 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;
81
81
  }
82
82
 
83
- .tab-header.disabled-header {
84
- pointer-events: none; /* Deaktiviert die Klickbarkeit */
85
- background-color: var(
86
- --pd-tab-disabled-bg-col,
87
- #f0f0f0
88
- ); /* Hellere Farbe für deaktivierte Tabs */
89
- color: var(--pd-tab-disabled-text-col, #999); /* Hellere Textfarbe */
90
- border-color: var(
91
- --pd-tab-disabled-border-col,
92
- #ddd
93
- ); /* Angepasste Rahmenfarbe */
94
- cursor: not-allowed; /* Zeigt an, dass der Tab nicht interaktiv ist */
95
- opacity: 0.6; /* Reduziert die Sichtbarkeit für einen "deaktivierten" Look */
83
+ .tab-header:focus {
84
+ outline: none;
96
85
  }
97
86
 
98
- .tab-header:focus {
99
- outline: none; /* Entfernt den Standardfokusrahmen */
100
- 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;
101
107
  }
102
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 --- */
103
120
  .slot-container {
104
121
  display: none;
105
122
  }
@@ -107,33 +124,60 @@ class PdTab extends LitElement {
107
124
  .active-slot {
108
125
  padding: var(--pd-tab-content-padding, 1em);
109
126
  display: block;
110
- border: var(--pd-tab-content-border, 1px solid var(--pd-default-col));
111
- border-top: var(
112
- --pd-tab-content-border-top,
113
- 3px solid var(--pd-default-col)
127
+ border: var(
128
+ --pd-tab-content-border,
129
+ 1px solid var(--pd-default-disabled-light-col, #e5e7eb)
114
130
  );
131
+ border-top: none;
115
132
  }
116
133
  `
117
134
  ];
118
135
  }
119
- update(changedProperties) {
136
+ willUpdate(changedProperties) {
120
137
  if (changedProperties.has("defaultTab") && this.defaultTab) {
121
- console.log("PdTab: Set active from default selection", this.defaultTab);
122
138
  this._activeTab = this.defaultTab;
123
139
  }
124
- 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
+ }
125
156
  }
126
157
  render() {
127
158
  return html`
128
- <div class="header-container">
159
+ <div
160
+ id="hc"
161
+ class="header-container"
162
+ role="tablist"
163
+ @keydown=${this._onKeyDown}
164
+ >
129
165
  ${this.tabs.map(
130
166
  (t) => html`
131
167
  <div
132
168
  class="tab-header ${this._activeTab === t.key ? "active-header" : ""} ${t.disabled ? "disabled-header" : ""}"
133
169
  data-key="${t.key}"
134
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}"
135
177
  >
136
- ${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>
137
181
  </div>
138
182
  `
139
183
  )}
@@ -141,7 +185,9 @@ class PdTab extends LitElement {
141
185
  ${this.tabs.map(
142
186
  (t) => html`
143
187
  <div
144
- id="${`slot${t.key}`}"
188
+ id="${`panel-${t.key}`}"
189
+ role="tabpanel"
190
+ aria-labelledby="${`tab-${t.key}`}"
145
191
  class="slot-container ${this._activeTab === t.key ? "active-slot" : ""}"
146
192
  >
147
193
  <slot name="${t.key}"></slot>
@@ -153,12 +199,76 @@ class PdTab extends LitElement {
153
199
  reset() {
154
200
  this._activeTab = this.defaultTab;
155
201
  }
156
- // 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
+ }
157
262
  _tabSelected(e) {
158
- 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;
159
267
  this.dispatchEvent(
160
268
  new CustomEvent("tab-selected", {
161
- detail: this._activeTab
269
+ detail: this._activeTab,
270
+ bubbles: true,
271
+ composed: true
162
272
  })
163
273
  );
164
274
  }
@@ -170,7 +280,10 @@ __decorateClass([
170
280
  property({ type: String })
171
281
  ], PdTab.prototype, "defaultTab");
172
282
  __decorateClass([
173
- property({ type: String, state: true })
283
+ state()
174
284
  ], PdTab.prototype, "_activeTab");
285
+ __decorateClass([
286
+ query("#hc")
287
+ ], PdTab.prototype, "_headerContainer");
175
288
 
176
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"}