@redvars/peacock 3.9.0 → 3.9.1

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 (83) hide show
  1. package/dist/code-highlighter.js +1 -4
  2. package/dist/code-highlighter.js.map +1 -1
  3. package/dist/custom-elements-jsdocs.json +39 -223
  4. package/dist/custom-elements.json +391 -2205
  5. package/dist/elevation.js +55 -2
  6. package/dist/elevation.js.map +1 -1
  7. package/dist/flow.js +762 -0
  8. package/dist/flow.js.map +1 -0
  9. package/dist/index.js +1 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/loader.js +2 -9
  12. package/dist/loader.js.map +1 -1
  13. package/dist/menu-item.js +144 -63
  14. package/dist/menu-item.js.map +1 -1
  15. package/dist/menu.js +161 -73
  16. package/dist/menu.js.map +1 -1
  17. package/dist/src/flow/flow.d.ts +102 -0
  18. package/dist/src/flow/index.d.ts +2 -0
  19. package/dist/src/index.d.ts +2 -4
  20. package/dist/src/menu/menu/menu.d.ts +10 -9
  21. package/dist/src/menu/menu-item/menu-item.d.ts +1 -3
  22. package/dist/src/timeline/timeline.d.ts +0 -1
  23. package/dist/sub-menu.js +28 -1
  24. package/dist/sub-menu.js.map +1 -1
  25. package/dist/timeline-item.js +22 -34
  26. package/dist/timeline-item.js.map +1 -1
  27. package/dist/timeline.js +1 -18
  28. package/dist/timeline.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +3 -2
  31. package/readme.md +2 -2
  32. package/src/code-highlighter/code-highlighter.scss +1 -7
  33. package/src/elevation/demo/index.html +52 -0
  34. package/src/elevation/elevation.scss +52 -5
  35. package/src/elevation/elevation.ts +8 -1
  36. package/src/flow/flow.scss +195 -0
  37. package/src/flow/flow.ts +683 -0
  38. package/src/flow/index.ts +2 -0
  39. package/src/index.ts +2 -16
  40. package/src/loader.ts +2 -9
  41. package/src/menu/menu/copy-component-files.mjs +47 -0
  42. package/src/menu/menu/menu.scss +55 -17
  43. package/src/menu/menu/menu.ts +155 -84
  44. package/src/menu/menu-item/menu-item-colors.scss +3 -3
  45. package/src/menu/menu-item/menu-item.scss +118 -24
  46. package/src/menu/menu-item/menu-item.ts +61 -55
  47. package/src/menu/sub-menu/sub-menu.scss +30 -1
  48. package/src/timeline/timeline-item.scss +21 -31
  49. package/src/timeline/timeline-item.ts +2 -1
  50. package/src/timeline/timeline.scss +0 -10
  51. package/src/timeline/timeline.ts +0 -2
  52. package/dist/canvas.js +0 -385
  53. package/dist/canvas.js.map +0 -1
  54. package/dist/flow-designer-node-CGSm6cUH.js +0 -553
  55. package/dist/flow-designer-node-CGSm6cUH.js.map +0 -1
  56. package/dist/flow-designer-node.js +0 -4
  57. package/dist/flow-designer-node.js.map +0 -1
  58. package/dist/flow-designer.js +0 -1417
  59. package/dist/flow-designer.js.map +0 -1
  60. package/dist/src/canvas/canvas.d.ts +0 -92
  61. package/dist/src/canvas/index.d.ts +0 -2
  62. package/dist/src/flow-designer/commands.d.ts +0 -66
  63. package/dist/src/flow-designer/flow-designer-node.d.ts +0 -46
  64. package/dist/src/flow-designer/flow-designer.d.ts +0 -133
  65. package/dist/src/flow-designer/index.d.ts +0 -7
  66. package/dist/src/flow-designer/layout.d.ts +0 -30
  67. package/dist/src/flow-designer/types.d.ts +0 -142
  68. package/dist/src/flow-designer/validation.d.ts +0 -43
  69. package/dist/src/flow-designer/workflow-utils.d.ts +0 -40
  70. package/src/canvas/canvas.scss +0 -72
  71. package/src/canvas/canvas.ts +0 -413
  72. package/src/canvas/index.ts +0 -2
  73. package/src/flow-designer/DEMO.md +0 -239
  74. package/src/flow-designer/commands.ts +0 -278
  75. package/src/flow-designer/flow-designer-node.ts +0 -172
  76. package/src/flow-designer/flow-designer.scss +0 -457
  77. package/src/flow-designer/flow-designer.ts +0 -611
  78. package/src/flow-designer/index.ts +0 -41
  79. package/src/flow-designer/layout.ts +0 -357
  80. package/src/flow-designer/types.ts +0 -166
  81. package/src/flow-designer/validation.ts +0 -284
  82. package/src/flow-designer/workflow-utils.ts +0 -282
  83. /package/dist/test/{flow-designer.test.d.ts → elevation.test.d.ts} +0 -0
@@ -6,10 +6,13 @@
6
6
  outline: none;
7
7
  position: relative;
8
8
 
9
- --menu-item-container-shape-start-start: var(--shape-corner-extra-small);
10
- --menu-item-container-shape-start-end: var(--shape-corner-extra-small);
11
- --menu-item-container-shape-end-start: var(--shape-corner-extra-small);
12
- --menu-item-container-shape-end-end: var(--shape-corner-extra-small);
9
+ --menu-item-backdrop-container-shape-start-start: none;
10
+ --menu-item-backdrop-container-shape-start-end: none;
11
+ --menu-item-backdrop-container-shape-end-start: none;
12
+ --menu-item-backdrop-container-shape-end-end: none;
13
+
14
+ --menu-item-backdrop-elevation-level-block-start: none;
15
+ --menu-item-backdrop-elevation-level-block-end: none;
13
16
  }
14
17
 
15
18
  /*
@@ -29,10 +32,50 @@
29
32
  padding-top: 2px;
30
33
  padding-inline: var(--spacing-050);
31
34
 
32
- .menu-item-background {
35
+ .menu-item-backdrop-background {
33
36
  background-color: var(--menu-item-container-color);
34
37
  position: absolute;
35
38
  inset: 0px;
39
+ border-start-start-radius: var(
40
+ --menu-item-backdrop-container-shape-start-start
41
+ );
42
+ border-start-end-radius: var(
43
+ --menu-item-backdrop-container-shape-start-end
44
+ );
45
+ border-end-start-radius: var(
46
+ --menu-item-backdrop-container-shape-end-start
47
+ );
48
+ border-end-end-radius: var(--menu-item-backdrop-container-shape-end-end);
49
+ }
50
+
51
+ .menu-item-backdrop-elevation {
52
+ --elevation-container-shape-start-start: var(
53
+ --menu-item-backdrop-container-shape-start-start
54
+ );
55
+ --elevation-container-shape-start-end: var(
56
+ --menu-item-backdrop-container-shape-start-end
57
+ );
58
+ --elevation-container-shape-end-start: var(
59
+ --menu-item-backdrop-container-shape-end-start
60
+ );
61
+ --elevation-container-shape-end-end: var(
62
+ --menu-item-backdrop-container-shape-end-end
63
+ );
64
+
65
+ --elevation-level-block-start: var(
66
+ --menu-item-backdrop-elevation-level-block-start
67
+ );
68
+ --elevation-level-block-end: var(
69
+ --menu-item-backdrop-elevation-level-block-end
70
+ );
71
+ --elevation-level-inline-start: var(
72
+ --menu-item-backdrop-elevation-level-inline-start,
73
+ 1
74
+ );
75
+ --elevation-level-inline-end: var(
76
+ --menu-item-backdrop-elevation-level-inline-end,
77
+ 1
78
+ );
36
79
  }
37
80
 
38
81
  .menu-item-content {
@@ -57,24 +100,37 @@
57
100
  --item-label-line-height: var(--typography-label-large-line-height);
58
101
  --item-label-letter-spacing: var(--typography-label-large-letter-spacing);
59
102
 
60
- --item-label-text-color: var(--menu-item-label-color);
61
- --item-leading-trailing-color: var(--menu-item-label-color);
62
- --item-supporting-text-color: var(--menu-item-label-color);
63
- --item-container-selected-color: var(--menu-item-container-selected-color);
64
- --item-label-text-selected-color: var(--menu-item-label-selected-color);
65
- --item-icon-size: var(--button-icon-size, var(--_button-icon-size));
103
+ --item-label-text-color: var(--private-item-label-text-color);
104
+ --item-leading-trailing-color: var(--private-item-label-text-color);
105
+ --item-supporting-text-color: var(--private-item-label-text-color);
106
+ --item-icon-size: var(--menu-item-icon-size, var(--private-item-icon-size));
66
107
 
67
108
  .background {
68
- background-color: var(--menu-item-container-color);
109
+ background-color: var(--private-item-container-color);
69
110
  opacity: var(--_container-opacity, 1);
70
111
  border-radius: var(--shape-corner-medium);
112
+
113
+ border-start-start-radius: var(
114
+ --private-item-container-shape-start-start
115
+ );
116
+ border-start-end-radius: var(--private-item-container-shape-start-end);
117
+ border-end-start-radius: var(--private-item-container-shape-end-start);
118
+ border-end-end-radius: var(--private-item-container-shape-end-end);
71
119
  }
72
120
 
73
121
  .focus-ring {
74
- --focus-ring-container-shape-start-start: var(--shape-corner-medium);
75
- --focus-ring-container-shape-start-end: var(--shape-corner-medium);
76
- --focus-ring-container-shape-end-start: var(--shape-corner-medium);
77
- --focus-ring-container-shape-end-end: var(--shape-corner-medium);
122
+ --focus-ring-container-shape-start-start: var(
123
+ --private-item-container-shape-start-start
124
+ );
125
+ --focus-ring-container-shape-start-end: var(
126
+ --private-item-container-shape-start-start
127
+ );
128
+ --focus-ring-container-shape-end-start: var(
129
+ --private-item-container-shape-start-start
130
+ );
131
+ --focus-ring-container-shape-end-end: var(
132
+ --private-item-container-shape-start-start
133
+ );
78
134
  z-index: 2;
79
135
  --focus-ring-inset: 0px;
80
136
  }
@@ -88,17 +144,55 @@
88
144
  .skeleton {
89
145
  z-index: 2;
90
146
 
91
- --skeleton-container-shape-start-start: var(--shape-corner-medium);
92
- --skeleton-container-shape-start-end: var(--shape-corner-medium);
93
- --skeleton-container-shape-end-start: var(--shape-corner-medium);
94
- --skeleton-container-shape-end-end: var(--shape-corner-medium);
147
+ --skeleton-container-shape-start-start: var(
148
+ --private-item-container-shape-start-start
149
+ );
150
+ --skeleton-container-shape-start-end: var(
151
+ --private-item-container-shape-start-end
152
+ );
153
+ --skeleton-container-shape-end-start: var(
154
+ --private-item-container-shape-end-start
155
+ );
156
+ --skeleton-container-shape-end-end: var(
157
+ --private-item-container-shape-end-end
158
+ );
95
159
  }
96
160
  }
97
161
  }
98
162
 
163
+ :host {
164
+ --private-item-container-color: var(--menu-item-container-color);
165
+ --private-item-label-text-color: var(--menu-item-label-color);
166
+ --private-item-container-shape-start-start: var(--shape-corner-medium);
167
+ --private-item-container-shape-start-end: var(--shape-corner-medium);
168
+ --private-item-container-shape-end-start: var(--shape-corner-medium);
169
+ --private-item-container-shape-end-end: var(--shape-corner-medium);
170
+ }
171
+
99
172
  :host([selected]) {
100
- --menu-item-container-shape-start-start: var(--shape-corner-large);
101
- --menu-item-container-shape-start-end: var(--shape-corner-large);
102
- --menu-item-container-shape-end-start: var(--shape-corner-large);
103
- --menu-item-container-shape-end-end: var(--shape-corner-large);
173
+ --private-item-container-color: var(--menu-item-container-selected-color);
174
+ --private-item-label-text-color: var(--menu-item-label-selected-color);
175
+ --private-item-container-shape-start-start: var(--shape-corner-large);
176
+ --private-item-container-shape-start-end: var(--shape-corner-large);
177
+ --private-item-container-shape-end-start: var(--shape-corner-large);
178
+ --private-item-container-shape-end-end: var(--shape-corner-large);
179
+ }
180
+
181
+ :host([disabled]),
182
+ :host([soft-disabled]) {
183
+ cursor: not-allowed;
184
+ --private-item-label-text-color: var(--color-on-surface);
185
+ --_container-opacity: 0.12;
186
+
187
+ .ripple {
188
+ display: none;
189
+ }
190
+ }
191
+
192
+ :host-context([variant='standard']) {
193
+ --menu-item-container-color: var(--color-surface-container);
194
+ }
195
+
196
+ :host-context([variant='vibrant']) {
197
+ --menu-item-container-color: var(--color-tertiary-container);
104
198
  }
@@ -1,13 +1,13 @@
1
- import { html, LitElement, nothing } from 'lit';
2
- import { property, query } from 'lit/decorators.js';
3
- import { ifDefined } from 'lit/directives/if-defined.js';
4
- import styles from './menu-item.scss';
5
- import colorStyles from './menu-item-colors.scss';
6
- import NativeButtonMixin from '@/__internal/mixins/NativeButtonMixin.js';
7
- import NativeHyperlinkMixin from '@/__internal/mixins/NativeHyperlinkMixin.js';
8
- import { isLink } from '@/__internal/utils/is-link.js';
9
- import IndividualComponent from '@/IndividualComponent.js';
10
- import { classMap } from 'lit/directives/class-map.js';
1
+ import { html, LitElement, nothing } from "lit";
2
+ import { property, query } from "lit/decorators.js";
3
+ import { ifDefined } from "lit/directives/if-defined.js";
4
+ import styles from "./menu-item.scss";
5
+ import colorStyles from "./menu-item-colors.scss";
6
+ import NativeButtonMixin from "@/__internal/mixins/NativeButtonMixin.js";
7
+ import NativeHyperlinkMixin from "@/__internal/mixins/NativeHyperlinkMixin.js";
8
+ import { isLink } from "@/__internal/utils/is-link.js";
9
+ import IndividualComponent from "@/IndividualComponent.js";
10
+ import { classMap } from "lit/directives/class-map.js";
11
11
 
12
12
  /**
13
13
  * @label Menu Item
@@ -32,27 +32,29 @@ export class MenuItem extends NativeButtonMixin(
32
32
  // ── Properties ───────────────────────────────────────────────────────────
33
33
 
34
34
  /** The value associated with this menu item, used to identify it on selection. */
35
- @property({ type: String }) value = '';
35
+ @property({ type: String })
36
+ value = "";
36
37
 
37
38
  /** Whether this menu item is currently selected/highlighted. */
38
- @property({ type: Boolean, reflect: true }) selected = false;
39
+ @property({ type: Boolean, reflect: true })
40
+ selected = false;
39
41
 
40
42
  /** When true, the menu stays open after this item is activated. */
41
- @property({ type: Boolean, attribute: 'keep-open' }) keepOpen = false;
43
+ @property({ type: Boolean, attribute: "keep-open" })
44
+ keepOpen = false;
42
45
 
43
46
  /** When true, indicates this item has an associated submenu. */
44
- @property({ type: Boolean, attribute: 'has-submenu' }) hasSubmenu = false;
47
+ @property({ type: Boolean, attribute: "has-submenu" })
48
+ hasSubmenu = false;
45
49
 
46
50
  /** Whether the associated submenu is currently open. */
47
- @property({ type: Boolean, attribute: 'submenu-open' }) submenuOpen = false;
48
-
49
- /** Visual variant of the menu item. */
50
- @property({ type: String, reflect: true }) variant: 'standard' | 'vibrant' =
51
- 'standard';
51
+ @property({ type: Boolean, attribute: "submenu-open" })
52
+ submenuOpen = false;
52
53
 
53
54
  // ── Queries ───────────────────────────────────────────────────────────────
54
55
 
55
- @query('#menu-item') readonly itemElement!: HTMLElement | null;
56
+ @query("#menu-item")
57
+ readonly itemElement!: HTMLElement | null;
56
58
 
57
59
  // ── Private fields ────────────────────────────────────────────────────────
58
60
 
@@ -72,7 +74,7 @@ export class MenuItem extends NativeButtonMixin(
72
74
  childList: true,
73
75
  characterData: true,
74
76
  attributes: true,
75
- attributeFilter: ['slot'],
77
+ attributeFilter: ["slot"],
76
78
  });
77
79
  }
78
80
 
@@ -99,56 +101,58 @@ export class MenuItem extends NativeButtonMixin(
99
101
  }
100
102
 
101
103
  private _hasNamedSlot(...names: string[]) {
102
- return names.some(name =>
104
+ return names.some((name) =>
103
105
  Array.from(this.children).some(
104
- child => child.getAttribute('slot') === name,
105
- ),
106
+ (child) => child.getAttribute("slot") === name,
107
+ )
106
108
  );
107
109
  }
108
110
 
109
111
  private _hasDefaultSlot() {
110
- return Array.from(this.childNodes).some(node => {
112
+ return Array.from(this.childNodes).some((node) => {
111
113
  if (node.nodeType === Node.TEXT_NODE) {
112
114
  return Boolean(node.textContent?.trim());
113
115
  }
114
116
 
115
117
  return (
116
118
  node.nodeType === Node.ELEMENT_NODE &&
117
- !(node as Element).hasAttribute('slot')
119
+ !(node as Element).hasAttribute("slot")
118
120
  );
119
121
  });
120
122
  }
121
123
 
122
124
  render() {
123
125
  const isElementLink = isLink(this);
124
- const controls = this.getAttribute('aria-controls');
126
+ const controls = this.getAttribute("aria-controls");
125
127
 
126
128
  const cssClasses = {
127
- 'menu-item': true,
128
- 'native-button': !isElementLink,
129
- 'native-link': isElementLink,
129
+ "menu-item": true,
130
+ "native-button": !isElementLink,
131
+ "native-link": isElementLink,
130
132
  };
131
133
 
132
134
  if (isElementLink) {
133
135
  return html`
134
136
  <a
135
137
  id="menu-item"
136
- class=${classMap(cssClasses)}
138
+ class="${classMap(cssClasses)}"
137
139
  role="menuitem"
138
- href=${ifDefined(this.href)}
139
- target=${this.target}
140
- ?rel=${this.rel}
141
- ?download=${this.download}
142
- tabindex=${this.disabled ? '-1' : String(this.tabIndex)}
143
- ?selected=${this.selected}
144
- aria-disabled=${this.disabled || this.softDisabled ? 'true' : nothing}
145
- aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
146
- aria-controls=${ifDefined(
140
+ href="${ifDefined(this.href)}"
141
+ target="${this.target}"
142
+ ?rel="${this.rel}"
143
+ ?download="${this.download}"
144
+ tabindex="${this.disabled ? "-1" : String(this.tabIndex)}"
145
+ ?selected="${this.selected}"
146
+ aria-disabled="${this.disabled || this.softDisabled
147
+ ? "true"
148
+ : nothing}"
149
+ aria-haspopup="${this.hasSubmenu ? "menu" : nothing}"
150
+ aria-controls="${ifDefined(
147
151
  this.hasSubmenu && controls ? controls : undefined,
148
- )}
149
- aria-expanded=${ifDefined(
152
+ )}"
153
+ aria-expanded="${ifDefined(
150
154
  this.hasSubmenu ? String(this.submenuOpen) : undefined,
151
- )}
155
+ )}"
152
156
  >
153
157
  ${this.renderContent()}
154
158
  </a>
@@ -158,20 +162,20 @@ export class MenuItem extends NativeButtonMixin(
158
162
  return html`
159
163
  <button
160
164
  id="menu-item"
161
- class=${classMap(cssClasses)}
165
+ class="${classMap(cssClasses)}"
162
166
  role="menuitem"
163
- type=${this.htmlType}
164
- ?disabled=${this.disabled}
165
- tabindex=${String(this.tabIndex)}
166
- ?selected=${this.selected}
167
- aria-disabled=${this.softDisabled ? 'true' : nothing}
168
- aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
169
- aria-controls=${ifDefined(
167
+ type="${this.htmlType}"
168
+ ?disabled="${this.disabled}"
169
+ tabindex="${String(this.tabIndex)}"
170
+ ?selected="${this.selected}"
171
+ aria-disabled="${this.softDisabled ? "true" : nothing}"
172
+ aria-haspopup="${this.hasSubmenu ? "menu" : nothing}"
173
+ aria-controls="${ifDefined(
170
174
  this.hasSubmenu && controls ? controls : undefined,
171
- )}
172
- aria-expanded=${ifDefined(
175
+ )}"
176
+ aria-expanded="${ifDefined(
173
177
  this.hasSubmenu ? String(this.submenuOpen) : undefined,
174
- )}
178
+ )}"
175
179
  >
176
180
  ${this.renderContent()}
177
181
  </button>
@@ -180,7 +184,9 @@ export class MenuItem extends NativeButtonMixin(
180
184
 
181
185
  renderContent() {
182
186
  return html`
183
- <div class="menu-item-background"></div>
187
+ <div class="menu-item-backdrop-background"></div>
188
+ <wc-elevation class="menu-item-backdrop-elevation"></wc-elevation>
189
+
184
190
  <wc-item class="menu-item-content">
185
191
  <wc-focus-ring
186
192
  class="focus-ring"
@@ -4,8 +4,37 @@
4
4
 
5
5
  :host {
6
6
  display: contents;
7
+ --sub-menu-item-backdrop-container-shape-start-start: none;
8
+ --sub-menu-item-backdrop-container-shape-start-end: none;
9
+ --sub-menu-item-backdrop-container-shape-end-start: none;
10
+ --sub-menu-item-backdrop-container-shape-end-end: none;
11
+
12
+ --sub-menu-item-backdrop-elevation-level-block-start: none;
13
+ --sub-menu-item-backdrop-elevation-level-block-end: none;
14
+ }
15
+
16
+ slot[name='item']::slotted(wc-menu-item) {
17
+ --menu-item-backdrop-container-shape-start-start: var(
18
+ --sub-menu-item-backdrop-container-shape-start-start
19
+ );
20
+ --menu-item-backdrop-container-shape-start-end: var(
21
+ --sub-menu-item-backdrop-container-shape-start-end
22
+ );
23
+ --menu-item-backdrop-container-shape-end-start: var(
24
+ --sub-menu-item-backdrop-container-shape-end-start
25
+ );
26
+ --menu-item-backdrop-container-shape-end-end: var(
27
+ --sub-menu-item-backdrop-container-shape-end-end
28
+ );
29
+
30
+ --menu-item-backdrop-elevation-level-block-start: var(
31
+ --sub-menu-item-backdrop-elevation-level-block-start
32
+ );
33
+ --menu-item-backdrop-elevation-level-block-end: var(
34
+ --sub-menu-item-backdrop-elevation-level-block-end
35
+ );
7
36
  }
8
37
 
9
- slot::slotted(wc-menu) {
38
+ slot[name='menu']::slotted(wc-menu) {
10
39
  display: contents;
11
40
  }
@@ -9,14 +9,6 @@
9
9
  align-items: stretch;
10
10
  }
11
11
 
12
- :host-context([orientation='horizontal']) .timeline-item {
13
- display: grid;
14
- grid-template-rows: auto 1fr;
15
- grid-template-columns: 1fr;
16
- gap: 0.75rem;
17
- align-items: stretch;
18
- min-height: auto;
19
- }
20
12
 
21
13
  .marker-column {
22
14
  display: flex;
@@ -25,13 +17,6 @@
25
17
  width: var(--timeline-dot-size, 2rem);
26
18
  }
27
19
 
28
- :host-context([orientation='horizontal']) .marker-column {
29
- display: flex;
30
- flex-direction: row;
31
- align-items: center;
32
- width: auto;
33
- height: var(--timeline-dot-size, 2rem);
34
- }
35
20
 
36
21
  .marker {
37
22
  position: relative;
@@ -65,42 +50,47 @@
65
50
  --progress-height: calc(var(--timeline-dot-size, 2rem) * 0.6);
66
51
  }
67
52
 
68
- /* Flexible connector line that stretches to fill remaining height */
53
+ /* Flexible connector line that stretches to fill remaining height/width */
69
54
  .connector {
70
- flex: 1;
71
- min-height: 2rem;
72
55
  width: 2px;
73
56
  background: var(--timeline-line-color, var(--color-outline));
74
- margin: auto;
75
- margin-block: .25rem;
57
+ margin-inline: auto;
76
58
  }
77
59
 
78
- :host(:last-child) .connector {
79
- display: none;
60
+ .connector--top {
61
+ height: var(--timeline-connector-top-height, 0.75rem);
62
+ flex-shrink: 0;
80
63
  }
81
64
 
82
- /* Horizontal orientation connector */
83
- :host-context([orientation='horizontal']) .connector {
65
+ .connector--bottom {
84
66
  flex: 1;
85
- min-width: 2rem;
86
- width: auto;
87
- height: 2px;
88
- background: var(--timeline-line-color, var(--color-outline));
89
- margin: auto;
90
- margin-inline: .25rem;
67
+ min-height: 1.5rem;
91
68
  }
92
69
 
93
- :host-context([orientation='horizontal']):last-child .connector {
70
+ :host(:first-child) .connector--top {
71
+ visibility: hidden;
72
+ }
73
+
74
+ :host(:last-child) .connector--bottom {
94
75
  display: none;
95
76
  }
96
77
 
97
78
 
79
+
98
80
  .content {
99
81
  display: flex;
100
82
  flex-direction: column;
101
83
  gap: 0.25rem;
102
84
  }
103
85
 
86
+ .headline {
87
+ padding-top: var(--timeline-connector-top-height, 0.75rem);
88
+ min-height: calc(var(--timeline-dot-size, 2rem) + var(--timeline-connector-top-height, 0.75rem));
89
+ display: flex;
90
+ align-items: center;
91
+ box-sizing: border-box;
92
+ }
93
+
104
94
 
105
95
  .description {
106
96
  color: var(--timeline-description-color, var(--color-on-surface-variant));
@@ -36,6 +36,7 @@ export class TimelineItem extends LitElement {
36
36
  return html`
37
37
  <div class="timeline-item">
38
38
  <div class="marker-column">
39
+ <div class="connector connector--top"></div>
39
40
  <div class="marker">
40
41
  <div class="marker-dot">
41
42
  ${this.loading
@@ -47,7 +48,7 @@ export class TimelineItem extends LitElement {
47
48
  : html`<slot name="dot"></slot>`}
48
49
  </div>
49
50
  </div>
50
- <div class="connector"></div>
51
+ <div class="connector connector--bottom"></div>
51
52
  </div>
52
53
 
53
54
  <div class="content">
@@ -9,13 +9,3 @@
9
9
  padding-left: calc(var(--timeline-dot-size, 2rem) / 2);
10
10
  }
11
11
 
12
- :host([orientation='horizontal']) .timeline {
13
- display: grid;
14
- gap: 0;
15
- position: relative;
16
- padding-left: 0;
17
- padding-top: calc(var(--timeline-dot-size, 2rem) / 2);
18
- grid-auto-flow: column;
19
- grid-template-rows: 1fr;
20
- }
21
-
@@ -28,8 +28,6 @@ export class Timeline extends LitElement {
28
28
 
29
29
  static Item = TimelineItem;
30
30
 
31
- @property({ type: String, reflect: true }) orientation: 'vertical' | 'horizontal' = 'vertical';
32
-
33
31
  connectedCallback() {
34
32
  super.connectedCallback();
35
33
  if (!this.hasAttribute('role')) {