@prioticket/design-system-web 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 (93) hide show
  1. package/COMPONENT-DOCUMENTATION.md +608 -0
  2. package/README.md +229 -0
  3. package/component-documentation.json +1681 -0
  4. package/dist/components/pd-button.cjs.js +99 -0
  5. package/dist/components/pd-button.es.js +156 -0
  6. package/dist/components/pd-card.cjs.js +59 -0
  7. package/dist/components/pd-card.es.js +93 -0
  8. package/dist/components/pd-checkbox.cjs.js +85 -0
  9. package/dist/components/pd-checkbox.es.js +154 -0
  10. package/dist/components/pd-chip.cjs.js +118 -0
  11. package/dist/components/pd-chip.es.js +220 -0
  12. package/dist/components/pd-dialog.cjs.js +195 -0
  13. package/dist/components/pd-dialog.es.js +285 -0
  14. package/dist/components/pd-expandable-card.cjs.js +134 -0
  15. package/dist/components/pd-expandable-card.es.js +205 -0
  16. package/dist/components/pd-fab.cjs.js +119 -0
  17. package/dist/components/pd-fab.es.js +179 -0
  18. package/dist/components/pd-icon-button.cjs.js +159 -0
  19. package/dist/components/pd-icon-button.es.js +268 -0
  20. package/dist/components/pd-icon.cjs.js +71 -0
  21. package/dist/components/pd-icon.es.js +102 -0
  22. package/dist/components/pd-list.cjs.js +108 -0
  23. package/dist/components/pd-list.es.js +229 -0
  24. package/dist/components/pd-menu-item.cjs.js +85 -0
  25. package/dist/components/pd-menu-item.es.js +156 -0
  26. package/dist/components/pd-menu.cjs.js +42 -0
  27. package/dist/components/pd-menu.es.js +122 -0
  28. package/dist/components/pd-progress.cjs.js +72 -0
  29. package/dist/components/pd-progress.es.js +119 -0
  30. package/dist/components/pd-radio.cjs.js +38 -0
  31. package/dist/components/pd-radio.es.js +153 -0
  32. package/dist/components/pd-segmented-button.cjs.js +135 -0
  33. package/dist/components/pd-segmented-button.es.js +234 -0
  34. package/dist/components/pd-segmented-stepper.cjs.js +191 -0
  35. package/dist/components/pd-segmented-stepper.es.js +333 -0
  36. package/dist/components/pd-select.cjs.js +59 -0
  37. package/dist/components/pd-select.es.js +136 -0
  38. package/dist/components/pd-slider.cjs.js +42 -0
  39. package/dist/components/pd-slider.es.js +123 -0
  40. package/dist/components/pd-stepper.cjs.js +279 -0
  41. package/dist/components/pd-stepper.es.js +375 -0
  42. package/dist/components/pd-switch.cjs.js +57 -0
  43. package/dist/components/pd-switch.es.js +126 -0
  44. package/dist/components/pd-tabs.cjs.js +32 -0
  45. package/dist/components/pd-tabs.es.js +139 -0
  46. package/dist/components/pd-text-field.cjs.js +86 -0
  47. package/dist/components/pd-text-field.es.js +202 -0
  48. package/dist/design-system-web.css +1 -0
  49. package/dist/fonts/ProximaNova-Bold.woff2 +0 -0
  50. package/dist/fonts/ProximaNova-Extrabld.woff2 +0 -0
  51. package/dist/fonts/ProximaNova-Light.woff2 +0 -0
  52. package/dist/fonts/ProximaNova-Medium.woff2 +0 -0
  53. package/dist/fonts/ProximaNova-Regular.woff2 +0 -0
  54. package/dist/fonts/ProximaNova-Semibold.woff2 +0 -0
  55. package/dist/fonts/ProximaNovaCond-Semibold.woff2 +0 -0
  56. package/dist/fonts-only.css +59 -0
  57. package/dist/fonts.cjs.js +1 -0
  58. package/dist/fonts.es.js +1 -0
  59. package/dist/prioticket-design-system-web.cjs.js +1 -0
  60. package/dist/prioticket-design-system-web.es.js +52 -0
  61. package/dist/theme-only.css +311 -0
  62. package/dist/theme-with-fonts.cjs.js +1 -0
  63. package/dist/theme-with-fonts.css +372 -0
  64. package/dist/theme-with-fonts.es.js +2 -0
  65. package/dist/theme.cjs.js +1 -0
  66. package/dist/theme.es.js +1 -0
  67. package/dist/types/components/pd-button.d.ts +30 -0
  68. package/dist/types/components/pd-card.d.ts +8 -0
  69. package/dist/types/components/pd-checkbox.d.ts +16 -0
  70. package/dist/types/components/pd-chip.d.ts +26 -0
  71. package/dist/types/components/pd-dialog.d.ts +49 -0
  72. package/dist/types/components/pd-expandable-card.d.ts +39 -0
  73. package/dist/types/components/pd-fab.d.ts +17 -0
  74. package/dist/types/components/pd-icon-button.d.ts +24 -0
  75. package/dist/types/components/pd-icon.d.ts +9 -0
  76. package/dist/types/components/pd-list.d.ts +36 -0
  77. package/dist/types/components/pd-menu-item.d.ts +38 -0
  78. package/dist/types/components/pd-menu.d.ts +58 -0
  79. package/dist/types/components/pd-progress.d.ts +30 -0
  80. package/dist/types/components/pd-radio.d.ts +54 -0
  81. package/dist/types/components/pd-segmented-button.d.ts +53 -0
  82. package/dist/types/components/pd-segmented-stepper.d.ts +65 -0
  83. package/dist/types/components/pd-select.d.ts +46 -0
  84. package/dist/types/components/pd-slider.d.ts +43 -0
  85. package/dist/types/components/pd-stepper.d.ts +47 -0
  86. package/dist/types/components/pd-switch.d.ts +37 -0
  87. package/dist/types/components/pd-tabs.d.ts +54 -0
  88. package/dist/types/components/pd-text-field.d.ts +30 -0
  89. package/dist/types/fonts.d.ts +1 -0
  90. package/dist/types/index.d.ts +22 -0
  91. package/dist/types/theme-with-fonts.d.ts +2 -0
  92. package/dist/types/theme.d.ts +1 -0
  93. package/package.json +93 -0
@@ -0,0 +1,229 @@
1
+ import { css as h, LitElement as y, html as i, nothing as u } from "lit";
2
+ import { property as e, customElement as g } from "lit/decorators.js";
3
+ import "@material/web/list/list.js";
4
+ import "@material/web/list/list-item.js";
5
+ import "@material/web/divider/divider.js";
6
+ import "@material/web/icon/icon.js";
7
+ var v = Object.defineProperty, b = Object.getOwnPropertyDescriptor, t = (r, a, d, n) => {
8
+ for (var o = n > 1 ? void 0 : n ? b(a, d) : a, l = r.length - 1, c; l >= 0; l--)
9
+ (c = r[l]) && (o = (n ? c(a, d, o) : c(o)) || o);
10
+ return n && o && v(a, d, o), o;
11
+ };
12
+ let m = class extends y {
13
+ constructor() {
14
+ super(...arguments), this.role = "list", this.tabindex = -1;
15
+ }
16
+ render() {
17
+ return i`
18
+ <md-list
19
+ role=${this.role}
20
+ tabindex=${this.tabindex}
21
+ >
22
+ <slot></slot>
23
+ </md-list>
24
+ `;
25
+ }
26
+ };
27
+ m.styles = h`
28
+ :host {
29
+ display: block;
30
+ --md-list-container-color: var(--md-sys-color-surface);
31
+ }
32
+
33
+ md-list {
34
+ background-color: var(--md-sys-color-surface);
35
+ border-radius: var(--md-sys-shape-corner-small);
36
+ overflow: hidden;
37
+ }
38
+ `;
39
+ t([
40
+ e({ type: String })
41
+ ], m.prototype, "role", 2);
42
+ t([
43
+ e({ type: Number })
44
+ ], m.prototype, "tabindex", 2);
45
+ m = t([
46
+ g("pd-list")
47
+ ], m);
48
+ let s = class extends y {
49
+ constructor() {
50
+ super(...arguments), this.type = "text", this.headline = "", this.supportingText = "", this.trailingSupportingText = "", this.href = "", this.target = "", this.disabled = !1, this.icon = "", this.trailingIcon = "", this.avatar = "", this.image = "";
51
+ }
52
+ getListItemTemplate() {
53
+ const r = this.headline ? i`<div slot="headline">${this.headline}</div>` : i`<slot name="headline" slot="headline"></slot>`, a = this.supportingText ? i`<div slot="supporting-text">${this.supportingText}</div>` : i`<slot name="supporting-text" slot="supporting-text"></slot>`, d = this.trailingSupportingText ? i`<div slot="trailing-supporting-text">${this.trailingSupportingText}</div>` : i`<slot name="trailing-supporting-text" slot="trailing-supporting-text"></slot>`, n = this.icon ? i`<md-icon slot="start">${this.icon}</md-icon>` : this.avatar ? i`<img slot="start" src="${this.avatar}" class="avatar" alt="" />` : this.image ? i`<img slot="start" src="${this.image}" class="image" alt="" />` : i`<slot name="start" slot="start"></slot>`, o = this.trailingIcon ? i`<md-icon slot="end">${this.trailingIcon}</md-icon>` : i`<slot name="end" slot="end"></slot>`, l = {
54
+ disabled: this.disabled,
55
+ tabindex: this.tabindex,
56
+ href: this.href || u,
57
+ target: this.target || u
58
+ };
59
+ return i`
60
+ <md-list-item
61
+ .type=${this.type}
62
+ ?disabled=${l.disabled}
63
+ .tabindex=${l.tabindex}
64
+ .href=${l.href}
65
+ .target=${l.target}
66
+ @click=${this._handleClick}
67
+ @keydown=${this._handleKeydown}
68
+ >
69
+ ${n}
70
+ ${r}
71
+ ${a}
72
+ ${d}
73
+ ${o}
74
+ </md-list-item>
75
+ `;
76
+ }
77
+ render() {
78
+ return this.getListItemTemplate();
79
+ }
80
+ _handleClick(r) {
81
+ this.disabled || this.dispatchEvent(new CustomEvent("list-item-click", {
82
+ detail: {
83
+ type: this.type,
84
+ headline: this.headline,
85
+ href: this.href
86
+ },
87
+ bubbles: !0
88
+ }));
89
+ }
90
+ _handleKeydown(r) {
91
+ this.disabled || (r.key === "Enter" || r.key === " ") && (r.preventDefault(), this._handleClick(r));
92
+ }
93
+ };
94
+ s.styles = h`
95
+ :host {
96
+ display: block;
97
+ --md-list-item-list-item-container-color: var(--md-sys-color-surface);
98
+ --md-list-item-list-item-label-text-color: var(--md-sys-color-on-surface);
99
+ --md-list-item-list-item-supporting-text-color: var(--md-sys-color-on-surface-variant);
100
+ --md-list-item-list-item-trailing-supporting-text-color: var(--md-sys-color-on-surface-variant);
101
+ --md-list-item-list-item-leading-icon-color: var(--md-sys-color-on-surface-variant);
102
+ --md-list-item-list-item-trailing-icon-color: var(--md-sys-color-on-surface-variant);
103
+ --md-list-item-list-item-container-shape: var(--md-sys-shape-corner-none);
104
+ }
105
+
106
+ md-list-item {
107
+ --md-list-item-label-text-font: var(--md-sys-typescale-body-large-font);
108
+ --md-list-item-label-text-size: var(--md-sys-typescale-body-large-size);
109
+ --md-list-item-label-text-weight: var(--md-sys-typescale-body-large-weight);
110
+ --md-list-item-label-text-line-height: var(--md-sys-typescale-body-large-line-height);
111
+ --md-list-item-supporting-text-font: var(--md-sys-typescale-body-medium-font);
112
+ --md-list-item-supporting-text-size: var(--md-sys-typescale-body-medium-size);
113
+ --md-list-item-supporting-text-weight: var(--md-sys-typescale-body-medium-weight);
114
+ --md-list-item-supporting-text-line-height: var(--md-sys-typescale-body-medium-line-height);
115
+ --md-list-item-trailing-supporting-text-font: var(--md-sys-typescale-label-small-font);
116
+ --md-list-item-trailing-supporting-text-size: var(--md-sys-typescale-label-small-size);
117
+ --md-list-item-trailing-supporting-text-weight: var(--md-sys-typescale-label-small-weight);
118
+ --md-list-item-trailing-supporting-text-line-height: var(--md-sys-typescale-label-small-line-height);
119
+ transition: background-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0.0, 0, 1.0));
120
+ }
121
+
122
+ md-list-item:hover {
123
+ --md-list-item-list-item-container-color: var(--md-sys-color-surface-container-hover, var(--md-sys-color-surface-variant));
124
+ }
125
+
126
+ md-list-item:focus {
127
+ --md-list-item-list-item-container-color: var(--md-sys-color-surface-container-focus, var(--md-sys-color-surface-variant));
128
+ }
129
+
130
+ .avatar {
131
+ width: 40px;
132
+ height: 40px;
133
+ border-radius: var(--md-sys-shape-corner-full);
134
+ object-fit: cover;
135
+ }
136
+
137
+ .image {
138
+ width: 56px;
139
+ height: 56px;
140
+ border-radius: var(--md-sys-shape-corner-small);
141
+ object-fit: cover;
142
+ }
143
+
144
+ :host([disabled]) md-list-item {
145
+ --md-list-item-list-item-label-text-color: var(--md-sys-color-on-surface);
146
+ --md-list-item-list-item-supporting-text-color: var(--md-sys-color-on-surface);
147
+ --md-list-item-list-item-leading-icon-color: var(--md-sys-color-on-surface);
148
+ --md-list-item-list-item-trailing-icon-color: var(--md-sys-color-on-surface);
149
+ opacity: var(--md-sys-state-disabled-content-opacity, 0.38);
150
+ cursor: not-allowed;
151
+ }
152
+ `;
153
+ t([
154
+ e({ type: String })
155
+ ], s.prototype, "type", 2);
156
+ t([
157
+ e({ type: String })
158
+ ], s.prototype, "headline", 2);
159
+ t([
160
+ e({ type: String, attribute: "supporting-text" })
161
+ ], s.prototype, "supportingText", 2);
162
+ t([
163
+ e({ type: String, attribute: "trailing-supporting-text" })
164
+ ], s.prototype, "trailingSupportingText", 2);
165
+ t([
166
+ e({ type: String })
167
+ ], s.prototype, "href", 2);
168
+ t([
169
+ e({ type: String })
170
+ ], s.prototype, "target", 2);
171
+ t([
172
+ e({ type: Boolean })
173
+ ], s.prototype, "disabled", 2);
174
+ t([
175
+ e({ type: String })
176
+ ], s.prototype, "icon", 2);
177
+ t([
178
+ e({ type: String, attribute: "trailing-icon" })
179
+ ], s.prototype, "trailingIcon", 2);
180
+ t([
181
+ e({ type: String })
182
+ ], s.prototype, "avatar", 2);
183
+ t([
184
+ e({ type: String })
185
+ ], s.prototype, "image", 2);
186
+ t([
187
+ e({ type: Number })
188
+ ], s.prototype, "tabindex", 2);
189
+ s = t([
190
+ g("pd-list-item")
191
+ ], s);
192
+ let p = class extends y {
193
+ constructor() {
194
+ super(...arguments), this.inset = !1, this.role = "separator";
195
+ }
196
+ render() {
197
+ return i`
198
+ <md-divider
199
+ ?inset=${this.inset}
200
+ role=${this.role}
201
+ ></md-divider>
202
+ `;
203
+ }
204
+ };
205
+ p.styles = h`
206
+ :host {
207
+ display: block;
208
+ --md-divider-color: var(--md-sys-color-outline-variant);
209
+ --md-divider-thickness: 1px;
210
+ }
211
+
212
+ md-divider {
213
+ margin: var(--md-sys-spacing-100, 4px) 0;
214
+ }
215
+ `;
216
+ t([
217
+ e({ type: Boolean })
218
+ ], p.prototype, "inset", 2);
219
+ t([
220
+ e({ type: String })
221
+ ], p.prototype, "role", 2);
222
+ p = t([
223
+ g("pd-list-divider")
224
+ ], p);
225
+ export {
226
+ m as PdList,
227
+ p as PdListDivider,
228
+ s as PdListItem
229
+ };
@@ -0,0 +1,85 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("lit"),e=require("lit/decorators.js");require("@material/web/menu/menu-item.js");require("@material/web/icon/icon.js");var l=Object.defineProperty,p=Object.getOwnPropertyDescriptor,t=(m,r,n,o)=>{for(var i=o>1?void 0:o?p(r,n):r,a=m.length-1,d;a>=0;a--)(d=m[a])&&(i=(o?d(r,n,i):d(i))||i);return o&&i&&l(r,n,i),i};exports.PdMenuItemM=class extends s.LitElement{constructor(){super(...arguments),this.disabled=!1,this.type="menuitem",this.href="",this.target="",this.keepOpen=!1,this.selected=!1,this.leadingIcon="",this.trailingIcon="",this.text="",this.supportingText=""}_handleClick(r){if(this.disabled){r.preventDefault(),r.stopPropagation();return}this.href||(this.keepOpen||this.dispatchEvent(new CustomEvent("close-menu",{bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("menu-item-selected",{detail:{text:this.text,value:this.getAttribute("value")||this.text},bubbles:!0,composed:!0})))}render(){const r=this.leadingIcon?s.html`<md-icon slot="start">${this.leadingIcon}</md-icon>`:s.html`<slot name="start" slot="start"></slot>`,n=this.trailingIcon?s.html`<md-icon slot="end">${this.trailingIcon}</md-icon>`:s.html`<slot name="end" slot="end"></slot>`,o=this.text?s.html`
2
+ <div slot="headline">${this.text}</div>
3
+ ${this.supportingText?s.html`<div slot="supporting-text">${this.supportingText}</div>`:""}
4
+ `:s.html`<slot></slot>`;return s.html`
5
+ <md-menu-item
6
+ ?disabled=${this.disabled}
7
+ type=${this.type}
8
+ href=${this.href||""}
9
+ target=${this.target||""}
10
+ ?keep-open=${this.keepOpen}
11
+ ?selected=${this.selected}
12
+ @click=${this._handleClick}
13
+ >
14
+ ${r}
15
+ ${o}
16
+ ${n}
17
+ </md-menu-item>
18
+ `}};exports.PdMenuItemM.styles=s.css`
19
+ :host {
20
+ display: contents;
21
+ }
22
+
23
+ md-menu-item {
24
+ /* Apply Prioticket design system styling */
25
+ --md-menu-item-container-color: var(--md-sys-color-surface-container, transparent);
26
+ --md-menu-item-label-text-color: var(--md-sys-color-on-surface, #000000);
27
+ --md-menu-item-supporting-text-color: var(--md-sys-color-on-surface-variant, #666666);
28
+ --md-menu-item-icon-color: var(--md-sys-color-on-surface-variant, #666666);
29
+
30
+ /* Selected state */
31
+ --md-menu-item-selected-container-color: var(--md-sys-color-secondary-container, #e8def8);
32
+ --md-menu-item-selected-label-text-color: var(--md-sys-color-on-secondary-container, #1d192b);
33
+ --md-menu-item-selected-icon-color: var(--md-sys-color-on-secondary-container, #1d192b);
34
+
35
+ /* Hover state */
36
+ --md-menu-item-hover-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.08));
37
+ --md-menu-item-pressed-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.12));
38
+
39
+ /* Focus state */
40
+ --md-menu-item-focus-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.12));
41
+
42
+ /* Disabled state */
43
+ --md-menu-item-disabled-label-text-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.38));
44
+ --md-menu-item-disabled-icon-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.38));
45
+
46
+ /* Typography */
47
+ --md-menu-item-label-text-font: var(--md-sys-typescale-body-large-font, inherit);
48
+ --md-menu-item-label-text-size: var(--md-sys-typescale-body-large-size, 1rem);
49
+ --md-menu-item-label-text-line-height: var(--md-sys-typescale-body-large-line-height, 1.5);
50
+ --md-menu-item-label-text-weight: var(--md-sys-typescale-body-large-weight, 400);
51
+
52
+ --md-menu-item-supporting-text-font: var(--md-sys-typescale-body-medium-font, inherit);
53
+ --md-menu-item-supporting-text-size: var(--md-sys-typescale-body-medium-size, 0.875rem);
54
+ --md-menu-item-supporting-text-line-height: var(--md-sys-typescale-body-medium-line-height, 1.25);
55
+ --md-menu-item-supporting-text-weight: var(--md-sys-typescale-body-medium-weight, 400);
56
+
57
+ /* Shape */
58
+ --md-menu-item-container-shape: var(--md-sys-shape-corner-none, 0px);
59
+
60
+ /* Spacing */
61
+ --md-menu-item-top-space: var(--md-sys-spacing-200, 8px);
62
+ --md-menu-item-bottom-space: var(--md-sys-spacing-200, 8px);
63
+ --md-menu-item-leading-space: var(--md-sys-spacing-300, 12px);
64
+ --md-menu-item-trailing-space: var(--md-sys-spacing-300, 12px);
65
+ }
66
+
67
+ /* Icon styling within menu items */
68
+ md-icon {
69
+ font-size: 24px;
70
+ width: 24px;
71
+ height: 24px;
72
+ }
73
+
74
+ /* Smooth transitions */
75
+ md-menu-item {
76
+ transition: all var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, ease);
77
+ }
78
+
79
+ /* Accessibility - respect reduced motion */
80
+ @media (prefers-reduced-motion: reduce) {
81
+ md-menu-item {
82
+ transition: none;
83
+ }
84
+ }
85
+ `;t([e.property({type:Boolean})],exports.PdMenuItemM.prototype,"disabled",2);t([e.property({type:String})],exports.PdMenuItemM.prototype,"type",2);t([e.property({type:String})],exports.PdMenuItemM.prototype,"href",2);t([e.property({type:String})],exports.PdMenuItemM.prototype,"target",2);t([e.property({type:Boolean,attribute:"keep-open"})],exports.PdMenuItemM.prototype,"keepOpen",2);t([e.property({type:Boolean})],exports.PdMenuItemM.prototype,"selected",2);t([e.property({type:String,attribute:"leading-icon"})],exports.PdMenuItemM.prototype,"leadingIcon",2);t([e.property({type:String,attribute:"trailing-icon"})],exports.PdMenuItemM.prototype,"trailingIcon",2);t([e.property({type:String})],exports.PdMenuItemM.prototype,"text",2);t([e.property({type:String,attribute:"supporting-text"})],exports.PdMenuItemM.prototype,"supportingText",2);exports.PdMenuItemM=t([e.customElement("pd-menu-item")],exports.PdMenuItemM);
@@ -0,0 +1,156 @@
1
+ import { css as p, LitElement as c, html as i } from "lit";
2
+ import { property as s, customElement as u } from "lit/decorators.js";
3
+ import "@material/web/menu/menu-item.js";
4
+ import "@material/web/icon/icon.js";
5
+ var y = Object.defineProperty, h = Object.getOwnPropertyDescriptor, t = (o, r, m, a) => {
6
+ for (var n = a > 1 ? void 0 : a ? h(r, m) : r, d = o.length - 1, l; d >= 0; d--)
7
+ (l = o[d]) && (n = (a ? l(r, m, n) : l(n)) || n);
8
+ return a && n && y(r, m, n), n;
9
+ };
10
+ let e = class extends c {
11
+ constructor() {
12
+ super(...arguments), this.disabled = !1, this.type = "menuitem", this.href = "", this.target = "", this.keepOpen = !1, this.selected = !1, this.leadingIcon = "", this.trailingIcon = "", this.text = "", this.supportingText = "";
13
+ }
14
+ _handleClick(o) {
15
+ if (this.disabled) {
16
+ o.preventDefault(), o.stopPropagation();
17
+ return;
18
+ }
19
+ this.href || (this.keepOpen || this.dispatchEvent(new CustomEvent("close-menu", {
20
+ bubbles: !0,
21
+ composed: !0
22
+ })), this.dispatchEvent(new CustomEvent("menu-item-selected", {
23
+ detail: {
24
+ text: this.text,
25
+ value: this.getAttribute("value") || this.text
26
+ },
27
+ bubbles: !0,
28
+ composed: !0
29
+ })));
30
+ }
31
+ render() {
32
+ const o = this.leadingIcon ? i`<md-icon slot="start">${this.leadingIcon}</md-icon>` : i`<slot name="start" slot="start"></slot>`, r = this.trailingIcon ? i`<md-icon slot="end">${this.trailingIcon}</md-icon>` : i`<slot name="end" slot="end"></slot>`, m = this.text ? i`
33
+ <div slot="headline">${this.text}</div>
34
+ ${this.supportingText ? i`<div slot="supporting-text">${this.supportingText}</div>` : ""}
35
+ ` : i`<slot></slot>`;
36
+ return i`
37
+ <md-menu-item
38
+ ?disabled=${this.disabled}
39
+ type=${this.type}
40
+ href=${this.href || ""}
41
+ target=${this.target || ""}
42
+ ?keep-open=${this.keepOpen}
43
+ ?selected=${this.selected}
44
+ @click=${this._handleClick}
45
+ >
46
+ ${o}
47
+ ${m}
48
+ ${r}
49
+ </md-menu-item>
50
+ `;
51
+ }
52
+ };
53
+ e.styles = p`
54
+ :host {
55
+ display: contents;
56
+ }
57
+
58
+ md-menu-item {
59
+ /* Apply Prioticket design system styling */
60
+ --md-menu-item-container-color: var(--md-sys-color-surface-container, transparent);
61
+ --md-menu-item-label-text-color: var(--md-sys-color-on-surface, #000000);
62
+ --md-menu-item-supporting-text-color: var(--md-sys-color-on-surface-variant, #666666);
63
+ --md-menu-item-icon-color: var(--md-sys-color-on-surface-variant, #666666);
64
+
65
+ /* Selected state */
66
+ --md-menu-item-selected-container-color: var(--md-sys-color-secondary-container, #e8def8);
67
+ --md-menu-item-selected-label-text-color: var(--md-sys-color-on-secondary-container, #1d192b);
68
+ --md-menu-item-selected-icon-color: var(--md-sys-color-on-secondary-container, #1d192b);
69
+
70
+ /* Hover state */
71
+ --md-menu-item-hover-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.08));
72
+ --md-menu-item-pressed-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.12));
73
+
74
+ /* Focus state */
75
+ --md-menu-item-focus-state-layer-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.12));
76
+
77
+ /* Disabled state */
78
+ --md-menu-item-disabled-label-text-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.38));
79
+ --md-menu-item-disabled-icon-color: var(--md-sys-color-on-surface, rgba(0, 0, 0, 0.38));
80
+
81
+ /* Typography */
82
+ --md-menu-item-label-text-font: var(--md-sys-typescale-body-large-font, inherit);
83
+ --md-menu-item-label-text-size: var(--md-sys-typescale-body-large-size, 1rem);
84
+ --md-menu-item-label-text-line-height: var(--md-sys-typescale-body-large-line-height, 1.5);
85
+ --md-menu-item-label-text-weight: var(--md-sys-typescale-body-large-weight, 400);
86
+
87
+ --md-menu-item-supporting-text-font: var(--md-sys-typescale-body-medium-font, inherit);
88
+ --md-menu-item-supporting-text-size: var(--md-sys-typescale-body-medium-size, 0.875rem);
89
+ --md-menu-item-supporting-text-line-height: var(--md-sys-typescale-body-medium-line-height, 1.25);
90
+ --md-menu-item-supporting-text-weight: var(--md-sys-typescale-body-medium-weight, 400);
91
+
92
+ /* Shape */
93
+ --md-menu-item-container-shape: var(--md-sys-shape-corner-none, 0px);
94
+
95
+ /* Spacing */
96
+ --md-menu-item-top-space: var(--md-sys-spacing-200, 8px);
97
+ --md-menu-item-bottom-space: var(--md-sys-spacing-200, 8px);
98
+ --md-menu-item-leading-space: var(--md-sys-spacing-300, 12px);
99
+ --md-menu-item-trailing-space: var(--md-sys-spacing-300, 12px);
100
+ }
101
+
102
+ /* Icon styling within menu items */
103
+ md-icon {
104
+ font-size: 24px;
105
+ width: 24px;
106
+ height: 24px;
107
+ }
108
+
109
+ /* Smooth transitions */
110
+ md-menu-item {
111
+ transition: all var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, ease);
112
+ }
113
+
114
+ /* Accessibility - respect reduced motion */
115
+ @media (prefers-reduced-motion: reduce) {
116
+ md-menu-item {
117
+ transition: none;
118
+ }
119
+ }
120
+ `;
121
+ t([
122
+ s({ type: Boolean })
123
+ ], e.prototype, "disabled", 2);
124
+ t([
125
+ s({ type: String })
126
+ ], e.prototype, "type", 2);
127
+ t([
128
+ s({ type: String })
129
+ ], e.prototype, "href", 2);
130
+ t([
131
+ s({ type: String })
132
+ ], e.prototype, "target", 2);
133
+ t([
134
+ s({ type: Boolean, attribute: "keep-open" })
135
+ ], e.prototype, "keepOpen", 2);
136
+ t([
137
+ s({ type: Boolean })
138
+ ], e.prototype, "selected", 2);
139
+ t([
140
+ s({ type: String, attribute: "leading-icon" })
141
+ ], e.prototype, "leadingIcon", 2);
142
+ t([
143
+ s({ type: String, attribute: "trailing-icon" })
144
+ ], e.prototype, "trailingIcon", 2);
145
+ t([
146
+ s({ type: String })
147
+ ], e.prototype, "text", 2);
148
+ t([
149
+ s({ type: String, attribute: "supporting-text" })
150
+ ], e.prototype, "supportingText", 2);
151
+ e = t([
152
+ u("pd-menu-item")
153
+ ], e);
154
+ export {
155
+ e as PdMenuItemM
156
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("lit"),e=require("lit/decorators.js");require("@material/web/menu/menu.js");require("@material/web/menu/menu-item.js");var c=Object.defineProperty,y=Object.getOwnPropertyDescriptor,t=(p,r,s,n)=>{for(var o=n>1?void 0:n?y(r,s):r,i=p.length-1,u;i>=0;i--)(u=p[i])&&(o=(n?u(r,s,o):u(o))||o);return n&&o&&c(r,s,o),o};exports.PdMenu=class extends a.LitElement{constructor(){super(...arguments),this.anchor="",this.open=!1,this.positioning="popover",this.anchorCorner="start-start",this.menuCorner="start-start",this.quick=!1,this.hasOverflow=!1,this.xOffset=0,this.yOffset=0,this.defaultFocus="list-root",this.stayOpenOnFocusout=!1,this.stayOpenOnOutsideClick=!1,this.skipRestoreFocus=!1}updated(r){if(r.has("anchor")&&this.anchor){const s=this.getRootNode();s&&(this.anchorElement=s.getElementById(this.anchor)??void 0)}}render(){return a.html`
2
+ <md-menu
3
+ .anchorElement=${this.anchorElement}
4
+ ?open=${this.open}
5
+ positioning=${this.positioning}
6
+ anchor-corner=${this.anchorCorner}
7
+ menu-corner=${this.menuCorner}
8
+ ?quick=${this.quick}
9
+ ?has-overflow=${this.hasOverflow}
10
+ x-offset=${this.xOffset}
11
+ y-offset=${this.yOffset}
12
+ default-focus=${this.defaultFocus}
13
+ ?stay-open-on-focusout=${this.stayOpenOnFocusout}
14
+ ?stay-open-on-outside-click=${this.stayOpenOnOutsideClick}
15
+ ?skip-restore-focus=${this.skipRestoreFocus}
16
+ @closed=${()=>this.open=!1}
17
+ >
18
+ <slot></slot>
19
+ </md-menu>
20
+ `}};exports.PdMenu.styles=a.css`
21
+ :host {
22
+ /* Allows the menu to be positioned relative to its anchor without this wrapper interfering. */
23
+ display: contents;
24
+ }
25
+
26
+ md-menu {
27
+ /* Apply Prioticket design system tokens */
28
+ --md-menu-container-shape: var(--pd-sys-shape-corner-medium, 12px);
29
+ --md-menu-container-color: var(--pd-sys-color-surface-container, #f0f0f0);
30
+ --md-menu-container-elevation: var(--pd-sys-elevation-2);
31
+ }
32
+
33
+ /* Override the ugly background from Material Web .items class */
34
+ md-menu::part(items) {
35
+ background-color: transparent !important;
36
+ }
37
+
38
+ /* Fallback: target the items container directly */
39
+ md-menu .items {
40
+ background-color: transparent !important;
41
+ }
42
+ `;t([e.query("md-menu")],exports.PdMenu.prototype,"menu",2);t([e.property({type:String})],exports.PdMenu.prototype,"anchor",2);t([e.property({type:Object,attribute:!1})],exports.PdMenu.prototype,"anchorElement",2);t([e.property({type:Boolean,reflect:!0})],exports.PdMenu.prototype,"open",2);t([e.property({type:String})],exports.PdMenu.prototype,"positioning",2);t([e.property({type:String,attribute:"anchor-corner"})],exports.PdMenu.prototype,"anchorCorner",2);t([e.property({type:String,attribute:"menu-corner"})],exports.PdMenu.prototype,"menuCorner",2);t([e.property({type:Boolean})],exports.PdMenu.prototype,"quick",2);t([e.property({type:Boolean,attribute:"has-overflow"})],exports.PdMenu.prototype,"hasOverflow",2);t([e.property({type:Number,attribute:"x-offset"})],exports.PdMenu.prototype,"xOffset",2);t([e.property({type:Number,attribute:"y-offset"})],exports.PdMenu.prototype,"yOffset",2);t([e.property({type:String,attribute:"default-focus"})],exports.PdMenu.prototype,"defaultFocus",2);t([e.property({type:Boolean,attribute:"stay-open-on-focusout"})],exports.PdMenu.prototype,"stayOpenOnFocusout",2);t([e.property({type:Boolean,attribute:"stay-open-on-outside-click"})],exports.PdMenu.prototype,"stayOpenOnOutsideClick",2);t([e.property({type:Boolean,attribute:"skip-restore-focus"})],exports.PdMenu.prototype,"skipRestoreFocus",2);exports.PdMenu=t([e.customElement("pd-menu")],exports.PdMenu);
@@ -0,0 +1,122 @@
1
+ import { css as c, LitElement as l, html as h } from "lit";
2
+ import { query as f, property as o, customElement as y } from "lit/decorators.js";
3
+ import "@material/web/menu/menu.js";
4
+ import "@material/web/menu/menu-item.js";
5
+ var m = Object.defineProperty, d = Object.getOwnPropertyDescriptor, e = (n, r, p, i) => {
6
+ for (var s = i > 1 ? void 0 : i ? d(r, p) : r, a = n.length - 1, u; a >= 0; a--)
7
+ (u = n[a]) && (s = (i ? u(r, p, s) : u(s)) || s);
8
+ return i && s && m(r, p, s), s;
9
+ };
10
+ let t = class extends l {
11
+ constructor() {
12
+ super(...arguments), this.anchor = "", this.open = !1, this.positioning = "popover", this.anchorCorner = "start-start", this.menuCorner = "start-start", this.quick = !1, this.hasOverflow = !1, this.xOffset = 0, this.yOffset = 0, this.defaultFocus = "list-root", this.stayOpenOnFocusout = !1, this.stayOpenOnOutsideClick = !1, this.skipRestoreFocus = !1;
13
+ }
14
+ /**
15
+ * FIX: This is the crucial change.
16
+ * Instead of `firstUpdated`, we use `updated` to react to property changes.
17
+ * We search for the anchor element within the component's root node,
18
+ * which correctly handles Shadow DOM boundaries.
19
+ */
20
+ updated(n) {
21
+ if (n.has("anchor") && this.anchor) {
22
+ const r = this.getRootNode();
23
+ r && (this.anchorElement = r.getElementById(this.anchor) ?? void 0);
24
+ }
25
+ }
26
+ render() {
27
+ return h`
28
+ <md-menu
29
+ .anchorElement=${this.anchorElement}
30
+ ?open=${this.open}
31
+ positioning=${this.positioning}
32
+ anchor-corner=${this.anchorCorner}
33
+ menu-corner=${this.menuCorner}
34
+ ?quick=${this.quick}
35
+ ?has-overflow=${this.hasOverflow}
36
+ x-offset=${this.xOffset}
37
+ y-offset=${this.yOffset}
38
+ default-focus=${this.defaultFocus}
39
+ ?stay-open-on-focusout=${this.stayOpenOnFocusout}
40
+ ?stay-open-on-outside-click=${this.stayOpenOnOutsideClick}
41
+ ?skip-restore-focus=${this.skipRestoreFocus}
42
+ @closed=${() => this.open = !1}
43
+ >
44
+ <slot></slot>
45
+ </md-menu>
46
+ `;
47
+ }
48
+ };
49
+ t.styles = c`
50
+ :host {
51
+ /* Allows the menu to be positioned relative to its anchor without this wrapper interfering. */
52
+ display: contents;
53
+ }
54
+
55
+ md-menu {
56
+ /* Apply Prioticket design system tokens */
57
+ --md-menu-container-shape: var(--pd-sys-shape-corner-medium, 12px);
58
+ --md-menu-container-color: var(--pd-sys-color-surface-container, #f0f0f0);
59
+ --md-menu-container-elevation: var(--pd-sys-elevation-2);
60
+ }
61
+
62
+ /* Override the ugly background from Material Web .items class */
63
+ md-menu::part(items) {
64
+ background-color: transparent !important;
65
+ }
66
+
67
+ /* Fallback: target the items container directly */
68
+ md-menu .items {
69
+ background-color: transparent !important;
70
+ }
71
+ `;
72
+ e([
73
+ f("md-menu")
74
+ ], t.prototype, "menu", 2);
75
+ e([
76
+ o({ type: String })
77
+ ], t.prototype, "anchor", 2);
78
+ e([
79
+ o({ type: Object, attribute: !1 })
80
+ ], t.prototype, "anchorElement", 2);
81
+ e([
82
+ o({ type: Boolean, reflect: !0 })
83
+ ], t.prototype, "open", 2);
84
+ e([
85
+ o({ type: String })
86
+ ], t.prototype, "positioning", 2);
87
+ e([
88
+ o({ type: String, attribute: "anchor-corner" })
89
+ ], t.prototype, "anchorCorner", 2);
90
+ e([
91
+ o({ type: String, attribute: "menu-corner" })
92
+ ], t.prototype, "menuCorner", 2);
93
+ e([
94
+ o({ type: Boolean })
95
+ ], t.prototype, "quick", 2);
96
+ e([
97
+ o({ type: Boolean, attribute: "has-overflow" })
98
+ ], t.prototype, "hasOverflow", 2);
99
+ e([
100
+ o({ type: Number, attribute: "x-offset" })
101
+ ], t.prototype, "xOffset", 2);
102
+ e([
103
+ o({ type: Number, attribute: "y-offset" })
104
+ ], t.prototype, "yOffset", 2);
105
+ e([
106
+ o({ type: String, attribute: "default-focus" })
107
+ ], t.prototype, "defaultFocus", 2);
108
+ e([
109
+ o({ type: Boolean, attribute: "stay-open-on-focusout" })
110
+ ], t.prototype, "stayOpenOnFocusout", 2);
111
+ e([
112
+ o({ type: Boolean, attribute: "stay-open-on-outside-click" })
113
+ ], t.prototype, "stayOpenOnOutsideClick", 2);
114
+ e([
115
+ o({ type: Boolean, attribute: "skip-restore-focus" })
116
+ ], t.prototype, "skipRestoreFocus", 2);
117
+ t = e([
118
+ y("pd-menu")
119
+ ], t);
120
+ export {
121
+ t as PdMenu
122
+ };