@krollins/blueprint 0.1.12 → 0.1.14

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 (109) hide show
  1. package/README.md +9 -3
  2. package/README.npm.md +9 -3
  3. package/dist/components/accordion.js +393 -0
  4. package/dist/components/accordion.js.map +1 -0
  5. package/dist/components/alert.js +213 -0
  6. package/dist/components/alert.js.map +1 -0
  7. package/dist/components/avatar.js +237 -0
  8. package/dist/components/avatar.js.map +1 -0
  9. package/dist/components/badge/badge.d.ts.map +1 -1
  10. package/dist/components/badge.js +144 -0
  11. package/dist/components/badge.js.map +1 -0
  12. package/dist/components/breadcrumb.js +481 -0
  13. package/dist/components/breadcrumb.js.map +1 -0
  14. package/dist/components/button.js +192 -0
  15. package/dist/components/button.js.map +1 -0
  16. package/dist/components/card.js +223 -0
  17. package/dist/components/card.js.map +1 -0
  18. package/dist/components/checkbox.js +336 -0
  19. package/dist/components/checkbox.js.map +1 -0
  20. package/dist/components/code-block/code-block.d.ts +143 -0
  21. package/dist/components/code-block/code-block.d.ts.map +1 -0
  22. package/dist/components/code-block/code-block.style.d.ts +2 -0
  23. package/dist/components/code-block/code-block.style.d.ts.map +1 -0
  24. package/dist/components/code-block.js +587 -0
  25. package/dist/components/code-block.js.map +1 -0
  26. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  27. package/dist/components/color-picker.js +1660 -0
  28. package/dist/components/color-picker.js.map +1 -0
  29. package/dist/components/combobox.js +595 -0
  30. package/dist/components/combobox.js.map +1 -0
  31. package/dist/components/date-picker.js +726 -0
  32. package/dist/components/date-picker.js.map +1 -0
  33. package/dist/components/divider.js +214 -0
  34. package/dist/components/divider.js.map +1 -0
  35. package/dist/components/drawer.js +568 -0
  36. package/dist/components/drawer.js.map +1 -0
  37. package/dist/components/dropdown.js +377 -0
  38. package/dist/components/dropdown.js.map +1 -0
  39. package/dist/components/file-upload.js +669 -0
  40. package/dist/components/file-upload.js.map +1 -0
  41. package/dist/components/heading.js +161 -0
  42. package/dist/components/heading.js.map +1 -0
  43. package/dist/components/icon.js +599 -0
  44. package/dist/components/icon.js.map +1 -0
  45. package/dist/components/index.d.ts +3 -0
  46. package/dist/components/index.d.ts.map +1 -1
  47. package/dist/components/input.js +363 -0
  48. package/dist/components/input.js.map +1 -0
  49. package/dist/components/link.js +178 -0
  50. package/dist/components/link.js.map +1 -0
  51. package/dist/components/menu.js +331 -0
  52. package/dist/components/menu.js.map +1 -0
  53. package/dist/components/modal.js +317 -0
  54. package/dist/components/modal.js.map +1 -0
  55. package/dist/components/multi-select.js +642 -0
  56. package/dist/components/multi-select.js.map +1 -0
  57. package/dist/components/notification.js +429 -0
  58. package/dist/components/notification.js.map +1 -0
  59. package/dist/components/number-input.js +556 -0
  60. package/dist/components/number-input.js.map +1 -0
  61. package/dist/components/pagination.js +320 -0
  62. package/dist/components/pagination.js.map +1 -0
  63. package/dist/components/popover.js +597 -0
  64. package/dist/components/popover.js.map +1 -0
  65. package/dist/components/progress.js +219 -0
  66. package/dist/components/progress.js.map +1 -0
  67. package/dist/components/radio.js +321 -0
  68. package/dist/components/radio.js.map +1 -0
  69. package/dist/components/select.js +498 -0
  70. package/dist/components/select.js.map +1 -0
  71. package/dist/components/skeleton.js +240 -0
  72. package/dist/components/skeleton.js.map +1 -0
  73. package/dist/components/slider.js +9 -0
  74. package/dist/components/slider.js.map +1 -0
  75. package/dist/components/spinner.js +133 -0
  76. package/dist/components/spinner.js.map +1 -0
  77. package/dist/components/stepper.js +812 -0
  78. package/dist/components/stepper.js.map +1 -0
  79. package/dist/components/switch.js +379 -0
  80. package/dist/components/switch.js.map +1 -0
  81. package/dist/components/table.js +642 -0
  82. package/dist/components/table.js.map +1 -0
  83. package/dist/components/tabs.js +547 -0
  84. package/dist/components/tabs.js.map +1 -0
  85. package/dist/components/tag/tag.d.ts.map +1 -1
  86. package/dist/components/tag.js +291 -0
  87. package/dist/components/tag.js.map +1 -0
  88. package/dist/components/text.js +278 -0
  89. package/dist/components/text.js.map +1 -0
  90. package/dist/components/textarea.js +380 -0
  91. package/dist/components/textarea.js.map +1 -0
  92. package/dist/components/time-picker.js +457 -0
  93. package/dist/components/time-picker.js.map +1 -0
  94. package/dist/components/tooltip.js +239 -0
  95. package/dist/components/tooltip.js.map +1 -0
  96. package/dist/components/tree.js +582 -0
  97. package/dist/components/tree.js.map +1 -0
  98. package/dist/index.js +96 -17799
  99. package/dist/index.js.map +1 -1
  100. package/dist/shared/boolean-converter-XDGfS9LC.js +12 -0
  101. package/dist/shared/boolean-converter-XDGfS9LC.js.map +1 -0
  102. package/dist/shared/debounce-BckY30Sf.js +23 -0
  103. package/dist/shared/debounce-BckY30Sf.js.map +1 -0
  104. package/dist/shared/memoize-DlOFy-92.js +16 -0
  105. package/dist/shared/memoize-DlOFy-92.js.map +1 -0
  106. package/dist/shared/slider-BNt5TITl.js +484 -0
  107. package/dist/shared/slider-BNt5TITl.js.map +1 -0
  108. package/dist/utilities/memoize.d.ts.map +1 -1
  109. package/package.json +44 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.js","sources":["../../source/components/alert/alert.style.ts","../../source/components/alert/alert.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const alertStyles = css`\n /* Base styles */\n :host {\n display: block;\n animation: slideIn var(--bp-transition-base) ease-out;\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(calc(-1 * var(--bp-spacing-md)));\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .alert {\n position: relative;\n display: flex;\n align-items: flex-start;\n gap: var(--bp-spacing-md);\n padding: var(--bp-spacing-sm) var(--bp-spacing-md);\n font-family: var(--bp-font-family);\n font-size: var(--bp-font-size-base);\n line-height: var(--bp-line-height-relaxed);\n border-radius: var(--bp-border-radius-md);\n border-width: var(--bp-border-width);\n border-style: solid;\n }\n\n @media (min-width: var(--bp-breakpoint-sm)) {\n .alert {\n padding: var(--bp-spacing-md) var(--bp-spacing-lg);\n }\n }\n\n .alert-content {\n display: flex;\n align-items: flex-start;\n gap: var(--bp-spacing-md);\n flex: 1;\n }\n\n .alert-icon {\n display: flex;\n align-items: flex-start;\n padding-top: var(--bp-spacing-0-5);\n flex-shrink: 0;\n }\n\n .alert-icon svg {\n width: var(--bp-spacing-5);\n height: var(--bp-spacing-5);\n flex-shrink: 0;\n }\n\n .alert-message {\n flex: 1;\n }\n\n ::slotted([slot='title']) {\n display: block;\n font-weight: var(--bp-font-weight-semibold);\n line-height: var(--bp-line-height-tight);\n margin-bottom: var(--bp-spacing-xs);\n }\n\n .alert-close {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--bp-spacing-2xs);\n border-radius: var(--bp-border-radius-sm);\n color: inherit;\n opacity: 0.8;\n transition: all var(--bp-transition-fast);\n flex-shrink: 0;\n }\n\n .alert-close:hover {\n opacity: 1;\n background-color: currentColor;\n opacity: 0.1;\n }\n\n .alert-close:active {\n opacity: 0.15;\n }\n\n .alert-close:focus-visible {\n outline: var(--bp-focus-ring);\n outline-offset: var(--bp-focus-offset);\n }\n\n /* Variants */\n .alert--info {\n background-color: var(--bp-color-surface-elevated);\n border-color: var(--bp-color-info);\n border-left-width: var(--bp-spacing-1);\n color: var(--bp-color-text);\n }\n\n .alert--success {\n background-color: var(--bp-color-surface-elevated);\n border-color: var(--bp-color-success);\n border-left-width: var(--bp-spacing-1);\n color: var(--bp-color-text);\n }\n\n .alert--warning {\n background-color: var(--bp-color-surface-elevated);\n border-color: var(--bp-color-warning);\n border-left-width: var(--bp-spacing-1);\n color: var(--bp-color-text);\n box-shadow: var(--bp-shadow-sm);\n }\n\n .alert--error {\n background-color: var(--bp-color-surface-elevated);\n border-color: var(--bp-color-error);\n border-left-width: var(--bp-spacing-1);\n color: var(--bp-color-text);\n box-shadow: var(--bp-shadow-sm);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { alertStyles } from './alert.style.js';\nimport { type IconName } from '../icon/icons/registry.generated.js';\nimport '../icon/icon.js';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\ninterface IconMap {\n info: IconName;\n success: IconName;\n warning: IconName;\n error: IconName;\n}\n\n/**\n * An alert component for displaying notification messages to users.\n *\n * @slot - Message content\n * @slot title - Optional title/heading for the alert\n * @slot icon - Optional custom icon (replaces default icon)\n *\n * @fires bp-close - Fired when the alert is dismissed (cancelable)\n */\n@customElement('bp-alert')\nexport class BpAlert extends LitElement {\n /**\n * Visual variant indicating the type of alert\n */\n @property({ type: String, reflect: true }) declare variant: AlertVariant;\n\n /**\n * Whether the alert can be dismissed by the user\n */\n @property({ type: Boolean, reflect: true }) declare dismissible: boolean;\n\n /**\n * Whether to show a default icon for the variant\n */\n @property({ type: Boolean, reflect: true }) declare showIcon: boolean;\n\n static styles = [alertStyles];\n\n constructor() {\n super();\n this.variant = 'info';\n this.dismissible = false;\n this.showIcon = false;\n }\n\n private handleClose() {\n const event = new CustomEvent('bp-close', {\n detail: {\n variant: this.variant,\n timestamp: Date.now(),\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n\n this.dispatchEvent(event);\n\n // Only remove if event wasn't prevented\n if (!event.defaultPrevented) {\n this.remove();\n }\n }\n\n private getIconName(): IconName {\n const iconMap: IconMap = {\n info: 'info-circle',\n success: 'check-circle',\n warning: 'warning-circle',\n error: 'cross-circle',\n };\n return iconMap[this.variant];\n }\n\n render() {\n return html`\n <div\n class=\"alert alert--${this.variant}\"\n part=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <div class=\"alert-content\">\n ${this.showIcon\n ? html`\n <div class=\"alert-icon\" part=\"icon\">\n <slot name=\"icon\">\n <bp-icon name=${this.getIconName()}></bp-icon>\n </slot>\n </div>\n `\n : null}\n <div class=\"alert-message\" part=\"message\">\n <slot name=\"title\"></slot>\n <slot></slot>\n </div>\n </div>\n ${this.dismissible\n ? html`\n <button\n class=\"alert-close\"\n part=\"close-button\"\n @click=${this.handleClose}\n aria-label=\"Close alert\"\n >\n <bp-icon name=\"cross\"></bp-icon>\n </button>\n `\n : null}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'bp-alert': BpAlert;\n }\n}\n"],"names":["alertStyles","css","BpAlert","LitElement","event","html","__decorateClass","property","customElement"],"mappings":";;AAEO,MAAMA,IAAcC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACsBpB,IAAMC,IAAN,cAAsBC,EAAW;AAAA,EAkBtC,cAAc;AACZ,UAAA,GACA,KAAK,UAAU,QACf,KAAK,cAAc,IACnB,KAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,cAAc;AACpB,UAAMC,IAAQ,IAAI,YAAY,YAAY;AAAA,MACxC,QAAQ;AAAA,QACN,SAAS,KAAK;AAAA,QACd,WAAW,KAAK,IAAA;AAAA,MAAI;AAAA,MAEtB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IAAA,CACb;AAED,SAAK,cAAcA,CAAK,GAGnBA,EAAM,oBACT,KAAK,OAAA;AAAA,EAET;AAAA,EAEQ,cAAwB;AAO9B,WANyB;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,EAEM,KAAK,OAAO;AAAA,EAC7B;AAAA,EAEA,SAAS;AACP,WAAOC;AAAA;AAAA,8BAEmB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAM9B,KAAK,WACHA;AAAA;AAAA;AAAA,oCAGsB,KAAK,aAAa;AAAA;AAAA;AAAA,kBAIxC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMR,KAAK,cACHA;AAAA;AAAA;AAAA;AAAA,yBAIa,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,gBAM7B,IAAI;AAAA;AAAA;AAAA,EAGd;AACF;AA5FaH,EAgBJ,SAAS,CAACF,CAAW;AAZuBM,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAJ9BL,EAIwC,WAAA,WAAA,CAAA;AAKCI,EAAA;AAAA,EAAnDC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAT/BL,EASyC,WAAA,eAAA,CAAA;AAKAI,EAAA;AAAA,EAAnDC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAd/BL,EAcyC,WAAA,YAAA,CAAA;AAdzCA,IAANI,EAAA;AAAA,EADNE,EAAc,UAAU;AAAA,GACZN,CAAA;"}
@@ -0,0 +1,237 @@
1
+ import { css as v, LitElement as h, html as l } from "lit";
2
+ import { property as r, state as b, customElement as f } from "lit/decorators.js";
3
+ const g = v`
4
+ /* Base styles */
5
+ :host {
6
+ display: inline-flex;
7
+ position: relative;
8
+ }
9
+
10
+ .avatar {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ overflow: hidden;
15
+ background: var(--bp-color-primary);
16
+ color: var(--bp-color-text-inverse);
17
+ font-family: var(--bp-font-family);
18
+ font-weight: var(--bp-font-weight-semibold);
19
+ user-select: none;
20
+ flex-shrink: 0;
21
+ box-shadow: var(--bp-shadow-sm);
22
+ position: relative;
23
+ }
24
+
25
+ /* Image avatars have different background */
26
+ .avatar:has(.avatar__image) {
27
+ background: var(--bp-color-surface);
28
+ color: var(--bp-color-text);
29
+ }
30
+
31
+ .avatar__image {
32
+ width: 100%;
33
+ height: 100%;
34
+ object-fit: cover;
35
+ display: block;
36
+ }
37
+
38
+ .avatar__initials {
39
+ text-transform: uppercase;
40
+ line-height: 1;
41
+ letter-spacing: 0.02em;
42
+ }
43
+
44
+ .avatar__fallback {
45
+ opacity: 0.8;
46
+ }
47
+
48
+ /* Shapes */
49
+ .avatar--circle {
50
+ border-radius: var(--bp-border-radius-full);
51
+ }
52
+
53
+ .avatar--square {
54
+ border-radius: var(--bp-border-radius-sm);
55
+ }
56
+
57
+ /* Sizes */
58
+ .avatar--xs {
59
+ width: var(--bp-spacing-6);
60
+ height: var(--bp-spacing-6);
61
+ }
62
+
63
+ .avatar--xs .avatar__initials {
64
+ font-size: var(--bp-font-size-xs);
65
+ }
66
+
67
+ .avatar--sm {
68
+ width: var(--bp-spacing-8);
69
+ height: var(--bp-spacing-8);
70
+ }
71
+
72
+ .avatar--sm .avatar__initials {
73
+ font-size: var(--bp-font-size-sm);
74
+ }
75
+
76
+ .avatar--md {
77
+ width: var(--bp-spacing-10);
78
+ height: var(--bp-spacing-10);
79
+ }
80
+
81
+ .avatar--md .avatar__initials {
82
+ font-size: var(--bp-font-size-base);
83
+ }
84
+
85
+ .avatar--lg {
86
+ width: var(--bp-spacing-12);
87
+ height: var(--bp-spacing-12);
88
+ }
89
+
90
+ .avatar--lg .avatar__initials {
91
+ font-size: var(--bp-font-size-lg);
92
+ }
93
+
94
+ .avatar--xl {
95
+ width: var(--bp-spacing-16);
96
+ height: var(--bp-spacing-16);
97
+ }
98
+
99
+ .avatar--xl .avatar__initials {
100
+ font-size: var(--bp-font-size-2xl);
101
+ }
102
+
103
+ /* States - Interactive */
104
+ :host([clickable]) .avatar {
105
+ cursor: pointer;
106
+ transition:
107
+ transform var(--bp-duration-fast),
108
+ box-shadow var(--bp-duration-fast);
109
+ }
110
+
111
+ :host([clickable]) .avatar:hover {
112
+ transform: translateY(calc(-1 * var(--bp-spacing-0-5)));
113
+ box-shadow: var(--bp-shadow-md);
114
+ }
115
+
116
+ :host([clickable]:focus-within) .avatar {
117
+ outline: var(--bp-focus-width) solid var(--bp-color-focus);
118
+ outline-offset: var(--bp-focus-offset);
119
+ }
120
+
121
+ /* Status indicator */
122
+ .avatar__status {
123
+ position: absolute;
124
+ bottom: 0;
125
+ right: 0;
126
+ width: 25%;
127
+ height: 25%;
128
+ min-width: var(--bp-spacing-2);
129
+ min-height: var(--bp-spacing-2);
130
+ border-radius: var(--bp-border-radius-full);
131
+ border: var(--bp-focus-width) solid var(--bp-color-surface-elevated);
132
+ }
133
+
134
+ .avatar__status--online {
135
+ background: var(--bp-color-success);
136
+ }
137
+
138
+ .avatar__status--offline {
139
+ background: var(--bp-color-border-strong);
140
+ }
141
+
142
+ .avatar__status--busy {
143
+ background: var(--bp-color-error);
144
+ }
145
+
146
+ .avatar__status--away {
147
+ background: var(--bp-color-warning);
148
+ }
149
+ `;
150
+ var u = Object.defineProperty, d = Object.getOwnPropertyDescriptor, t = (i, e, o, n) => {
151
+ for (var s = n > 1 ? void 0 : n ? d(e, o) : e, p = i.length - 1, c; p >= 0; p--)
152
+ (c = i[p]) && (s = (n ? c(e, o, s) : c(s)) || s);
153
+ return n && s && u(e, o, s), s;
154
+ };
155
+ let a = class extends h {
156
+ constructor() {
157
+ super(), this.imageError = !1, this.src = "", this.alt = "", this.initials = "", this.size = "md", this.shape = "circle", this.clickable = !1, this.name = "";
158
+ }
159
+ handleImageError() {
160
+ this.imageError = !0;
161
+ }
162
+ render() {
163
+ const i = this.src.length > 0 && !this.imageError, e = this.initials.length > 0, o = this.name || this.alt;
164
+ return l`
165
+ <div
166
+ class="avatar avatar--${this.size} avatar--${this.shape}"
167
+ part="avatar"
168
+ title="${o}"
169
+ >
170
+ ${i ? l`
171
+ <img
172
+ class="avatar__image"
173
+ src="${this.src}"
174
+ alt="${this.alt}"
175
+ @error="${this.handleImageError}"
176
+ part="image"
177
+ />
178
+ ` : e ? l`<span
179
+ class="avatar__initials"
180
+ part="initials"
181
+ role="img"
182
+ aria-label="${this.alt || "User avatar"}"
183
+ >${this.initials}</span
184
+ >` : l`<bp-icon
185
+ class="avatar__fallback"
186
+ name="users"
187
+ size="${this.size === "xs" ? "xs" : this.size === "xl" ? "lg" : this.size}"
188
+ part="fallback"
189
+ aria-label="User avatar"
190
+ ></bp-icon>`}
191
+ ${this.status ? l`<span
192
+ class="avatar__status avatar__status--${this.status}"
193
+ part="status"
194
+ aria-label="${this.status}"
195
+ ></span>` : ""}
196
+ </div>
197
+ `;
198
+ }
199
+ updated(i) {
200
+ i.has("src") && (this.imageError = !1);
201
+ }
202
+ };
203
+ a.styles = [g];
204
+ t([
205
+ r({ type: String, reflect: !0 })
206
+ ], a.prototype, "src", 2);
207
+ t([
208
+ r({ type: String, reflect: !0 })
209
+ ], a.prototype, "alt", 2);
210
+ t([
211
+ r({ type: String, reflect: !0 })
212
+ ], a.prototype, "initials", 2);
213
+ t([
214
+ r({ type: String, reflect: !0 })
215
+ ], a.prototype, "size", 2);
216
+ t([
217
+ r({ type: String, reflect: !0 })
218
+ ], a.prototype, "shape", 2);
219
+ t([
220
+ r({ type: String, reflect: !0 })
221
+ ], a.prototype, "status", 2);
222
+ t([
223
+ r({ type: Boolean, reflect: !0 })
224
+ ], a.prototype, "clickable", 2);
225
+ t([
226
+ r({ type: String })
227
+ ], a.prototype, "name", 2);
228
+ t([
229
+ b()
230
+ ], a.prototype, "imageError", 2);
231
+ a = t([
232
+ f("bp-avatar")
233
+ ], a);
234
+ export {
235
+ a as BpAvatar
236
+ };
237
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","sources":["../../source/components/avatar/avatar.style.ts","../../source/components/avatar/avatar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const avatarStyles = css`\n /* Base styles */\n :host {\n display: inline-flex;\n position: relative;\n }\n\n .avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n background: var(--bp-color-primary);\n color: var(--bp-color-text-inverse);\n font-family: var(--bp-font-family);\n font-weight: var(--bp-font-weight-semibold);\n user-select: none;\n flex-shrink: 0;\n box-shadow: var(--bp-shadow-sm);\n position: relative;\n }\n\n /* Image avatars have different background */\n .avatar:has(.avatar__image) {\n background: var(--bp-color-surface);\n color: var(--bp-color-text);\n }\n\n .avatar__image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n .avatar__initials {\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0.02em;\n }\n\n .avatar__fallback {\n opacity: 0.8;\n }\n\n /* Shapes */\n .avatar--circle {\n border-radius: var(--bp-border-radius-full);\n }\n\n .avatar--square {\n border-radius: var(--bp-border-radius-sm);\n }\n\n /* Sizes */\n .avatar--xs {\n width: var(--bp-spacing-6);\n height: var(--bp-spacing-6);\n }\n\n .avatar--xs .avatar__initials {\n font-size: var(--bp-font-size-xs);\n }\n\n .avatar--sm {\n width: var(--bp-spacing-8);\n height: var(--bp-spacing-8);\n }\n\n .avatar--sm .avatar__initials {\n font-size: var(--bp-font-size-sm);\n }\n\n .avatar--md {\n width: var(--bp-spacing-10);\n height: var(--bp-spacing-10);\n }\n\n .avatar--md .avatar__initials {\n font-size: var(--bp-font-size-base);\n }\n\n .avatar--lg {\n width: var(--bp-spacing-12);\n height: var(--bp-spacing-12);\n }\n\n .avatar--lg .avatar__initials {\n font-size: var(--bp-font-size-lg);\n }\n\n .avatar--xl {\n width: var(--bp-spacing-16);\n height: var(--bp-spacing-16);\n }\n\n .avatar--xl .avatar__initials {\n font-size: var(--bp-font-size-2xl);\n }\n\n /* States - Interactive */\n :host([clickable]) .avatar {\n cursor: pointer;\n transition:\n transform var(--bp-duration-fast),\n box-shadow var(--bp-duration-fast);\n }\n\n :host([clickable]) .avatar:hover {\n transform: translateY(calc(-1 * var(--bp-spacing-0-5)));\n box-shadow: var(--bp-shadow-md);\n }\n\n :host([clickable]:focus-within) .avatar {\n outline: var(--bp-focus-width) solid var(--bp-color-focus);\n outline-offset: var(--bp-focus-offset);\n }\n\n /* Status indicator */\n .avatar__status {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 25%;\n height: 25%;\n min-width: var(--bp-spacing-2);\n min-height: var(--bp-spacing-2);\n border-radius: var(--bp-border-radius-full);\n border: var(--bp-focus-width) solid var(--bp-color-surface-elevated);\n }\n\n .avatar__status--online {\n background: var(--bp-color-success);\n }\n\n .avatar__status--offline {\n background: var(--bp-color-border-strong);\n }\n\n .avatar__status--busy {\n background: var(--bp-color-error);\n }\n\n .avatar__status--away {\n background: var(--bp-color-warning);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { avatarStyles } from './avatar.style.js';\nimport '../icon/icon.js';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\n/**\n * An avatar component that displays user profile images with fallback to initials.\n * Supports multiple sizes, shapes, status indicators, and interactive states.\n */\n@customElement('bp-avatar')\nexport class BpAvatar extends LitElement {\n /**\n * Image source URL for the avatar.\n * @type {string}\n * @default ''\n */\n @property({ type: String, reflect: true }) declare src: string;\n\n /**\n * Alt text for the avatar image (accessibility).\n * @type {string}\n * @default ''\n */\n @property({ type: String, reflect: true }) declare alt: string;\n\n /**\n * Initials to display when no image is provided.\n * @type {string}\n * @default ''\n */\n @property({ type: String, reflect: true }) declare initials: string;\n\n /**\n * Size of the avatar.\n * @type {'xs' | 'sm' | 'md' | 'lg' | 'xl'}\n * @default 'md'\n */\n @property({ type: String, reflect: true }) declare size: AvatarSize;\n\n /**\n * Shape of the avatar.\n * @type {'circle' | 'square'}\n * @default 'circle'\n */\n @property({ type: String, reflect: true }) declare shape: AvatarShape;\n\n /**\n * Status indicator for the avatar.\n * @type {'online' | 'offline' | 'busy' | 'away' | undefined}\n * @default undefined\n */\n @property({ type: String, reflect: true }) declare status?: AvatarStatus;\n\n /**\n * Makes the avatar interactive with hover/focus states.\n * @type {boolean}\n * @default false\n */\n @property({ type: Boolean, reflect: true }) declare clickable: boolean;\n\n /**\n * Name for tooltip display on hover.\n * @type {string}\n * @default ''\n */\n @property({ type: String }) declare name: string;\n\n /**\n * Internal state to track if image failed to load.\n * @private\n */\n @state() private imageError = false;\n\n static styles = [avatarStyles];\n\n constructor() {\n super();\n this.src = '';\n this.alt = '';\n this.initials = '';\n this.size = 'md';\n this.shape = 'circle';\n this.clickable = false;\n this.name = '';\n }\n\n private handleImageError() {\n // Track image error state to show fallback\n this.imageError = true;\n }\n\n render() {\n const hasImage = this.src.length > 0 && !this.imageError;\n const hasInitials = this.initials.length > 0;\n const titleText = this.name || this.alt;\n\n return html`\n <div\n class=\"avatar avatar--${this.size} avatar--${this.shape}\"\n part=\"avatar\"\n title=\"${titleText}\"\n >\n ${hasImage\n ? html`\n <img\n class=\"avatar__image\"\n src=\"${this.src}\"\n alt=\"${this.alt}\"\n @error=\"${this.handleImageError}\"\n part=\"image\"\n />\n `\n : hasInitials\n ? html`<span\n class=\"avatar__initials\"\n part=\"initials\"\n role=\"img\"\n aria-label=\"${this.alt || 'User avatar'}\"\n >${this.initials}</span\n >`\n : html`<bp-icon\n class=\"avatar__fallback\"\n name=\"users\"\n size=\"${this.size === 'xs'\n ? 'xs'\n : this.size === 'xl'\n ? 'lg'\n : this.size}\"\n part=\"fallback\"\n aria-label=\"User avatar\"\n ></bp-icon>`}\n ${this.status\n ? html`<span\n class=\"avatar__status avatar__status--${this.status}\"\n part=\"status\"\n aria-label=\"${this.status}\"\n ></span>`\n : ''}\n </div>\n `;\n }\n\n updated(changedProperties: Map<string, unknown>) {\n // Reset image error state when src changes\n if (changedProperties.has('src')) {\n this.imageError = false;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'bp-avatar': BpAvatar;\n }\n}\n"],"names":["avatarStyles","css","BpAvatar","LitElement","hasImage","hasInitials","titleText","html","changedProperties","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../source/components/badge/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC;;;;;;;;;;;;;;;GAeG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC;;;;OAIG;IACgD,OAAO,EACtD,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAC;IAEd;;;;OAIG;IACgD,IAAI,EACnD,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;IAET;;;;OAIG;IACiD,GAAG,EAAE,OAAO,CAAC;IAEjE,MAAM,CAAC,MAAM,4BAAiB;;IAS9B,MAAM;CAiBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../source/components/badge/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC;;;;;;;;;;;;;;;GAeG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC;;;;OAIG;IACgD,OAAO,EACtD,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAC;IAEd;;;;OAIG;IACgD,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAE5E;;;;OAIG;IACiD,GAAG,EAAE,OAAO,CAAC;IAEjE,MAAM,CAAC,MAAM,4BAAiB;;IAS9B,MAAM;CAiBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
@@ -0,0 +1,144 @@
1
+ import { css as c, LitElement as g, html as d } from "lit";
2
+ import { property as n, customElement as l } from "lit/decorators.js";
3
+ import { classMap as v } from "lit/directives/class-map.js";
4
+ const h = c`
5
+ /* Base styles */
6
+ :host {
7
+ display: inline-block;
8
+ }
9
+
10
+ .badge {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ font-family: var(--bp-font-family);
15
+ font-weight: var(--bp-font-weight-medium);
16
+ line-height: 1;
17
+ border-radius: var(--bp-border-radius-full);
18
+ white-space: nowrap;
19
+ transition:
20
+ background-color var(--bp-transition-fast),
21
+ color var(--bp-transition-fast);
22
+ }
23
+
24
+ /* Variants */
25
+ .badge--primary {
26
+ background-color: var(--bp-color-primary);
27
+ color: var(--bp-color-text-inverse);
28
+ }
29
+
30
+ .badge--success {
31
+ background-color: var(--bp-color-success);
32
+ color: var(--bp-color-text-inverse);
33
+ }
34
+
35
+ .badge--error {
36
+ background-color: var(--bp-color-error);
37
+ color: var(--bp-color-text-inverse);
38
+ }
39
+
40
+ .badge--warning {
41
+ background-color: var(--bp-color-warning);
42
+ color: var(--bp-color-text-inverse);
43
+ }
44
+
45
+ .badge--info {
46
+ background-color: var(--bp-color-info);
47
+ color: var(--bp-color-text-inverse);
48
+ }
49
+
50
+ .badge--neutral {
51
+ background-color: var(--bp-color-border-strong);
52
+ color: var(--bp-color-text);
53
+ }
54
+
55
+ /* Sizes */
56
+ .badge--sm {
57
+ padding: var(--bp-spacing-xs) var(--bp-spacing-xs);
58
+ font-size: var(--bp-font-size-xs);
59
+ min-width: var(--bp-spacing-5);
60
+ height: var(--bp-spacing-5);
61
+ }
62
+
63
+ .badge--md {
64
+ padding: var(--bp-spacing-xs) var(--bp-spacing-sm);
65
+ font-size: var(--bp-font-size-sm);
66
+ min-width: var(--bp-spacing-6);
67
+ height: var(--bp-spacing-6);
68
+ }
69
+
70
+ .badge--lg {
71
+ padding: var(--bp-spacing-sm) var(--bp-spacing-md);
72
+ font-size: var(--bp-font-size-base);
73
+ min-width: var(--bp-spacing-8);
74
+ height: var(--bp-spacing-8);
75
+ }
76
+
77
+ /* Dot variant */
78
+ .badge--dot {
79
+ padding: 0;
80
+ border-radius: var(--bp-border-radius-full);
81
+ }
82
+
83
+ .badge--dot.badge--sm {
84
+ width: var(--bp-spacing-2);
85
+ height: var(--bp-spacing-2);
86
+ min-width: var(--bp-spacing-2);
87
+ }
88
+
89
+ .badge--dot.badge--md {
90
+ width: var(--bp-spacing-3);
91
+ height: var(--bp-spacing-3);
92
+ min-width: var(--bp-spacing-3);
93
+ }
94
+
95
+ .badge--dot.badge--lg {
96
+ width: var(--bp-spacing-4);
97
+ height: var(--bp-spacing-4);
98
+ min-width: var(--bp-spacing-4);
99
+ }
100
+ `;
101
+ var m = Object.defineProperty, f = Object.getOwnPropertyDescriptor, o = (b, e, i, t) => {
102
+ for (var r = t > 1 ? void 0 : t ? f(e, i) : e, s = b.length - 1, p; s >= 0; s--)
103
+ (p = b[s]) && (r = (t ? p(e, i, r) : p(r)) || r);
104
+ return t && r && m(e, i, r), r;
105
+ };
106
+ let a = class extends g {
107
+ constructor() {
108
+ super(), this.variant = "primary", this.size = "md", this.dot = !1;
109
+ }
110
+ render() {
111
+ return d`
112
+ <span
113
+ class=${v({
114
+ badge: !0,
115
+ [`badge--${this.variant}`]: !0,
116
+ [`badge--${this.size}`]: !0,
117
+ "badge--dot": this.dot
118
+ })}
119
+ part="badge"
120
+ role="status"
121
+ aria-live="polite"
122
+ >
123
+ <slot></slot>
124
+ </span>
125
+ `;
126
+ }
127
+ };
128
+ a.styles = [h];
129
+ o([
130
+ n({ type: String, reflect: !0 })
131
+ ], a.prototype, "variant", 2);
132
+ o([
133
+ n({ type: String, reflect: !0 })
134
+ ], a.prototype, "size", 2);
135
+ o([
136
+ n({ type: Boolean, reflect: !0 })
137
+ ], a.prototype, "dot", 2);
138
+ a = o([
139
+ l("bp-badge")
140
+ ], a);
141
+ export {
142
+ a as BpBadge
143
+ };
144
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sources":["../../source/components/badge/badge.style.ts","../../source/components/badge/badge.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const badgeStyles = css`\n /* Base styles */\n :host {\n display: inline-block;\n }\n\n .badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: var(--bp-font-family);\n font-weight: var(--bp-font-weight-medium);\n line-height: 1;\n border-radius: var(--bp-border-radius-full);\n white-space: nowrap;\n transition:\n background-color var(--bp-transition-fast),\n color var(--bp-transition-fast);\n }\n\n /* Variants */\n .badge--primary {\n background-color: var(--bp-color-primary);\n color: var(--bp-color-text-inverse);\n }\n\n .badge--success {\n background-color: var(--bp-color-success);\n color: var(--bp-color-text-inverse);\n }\n\n .badge--error {\n background-color: var(--bp-color-error);\n color: var(--bp-color-text-inverse);\n }\n\n .badge--warning {\n background-color: var(--bp-color-warning);\n color: var(--bp-color-text-inverse);\n }\n\n .badge--info {\n background-color: var(--bp-color-info);\n color: var(--bp-color-text-inverse);\n }\n\n .badge--neutral {\n background-color: var(--bp-color-border-strong);\n color: var(--bp-color-text);\n }\n\n /* Sizes */\n .badge--sm {\n padding: var(--bp-spacing-xs) var(--bp-spacing-xs);\n font-size: var(--bp-font-size-xs);\n min-width: var(--bp-spacing-5);\n height: var(--bp-spacing-5);\n }\n\n .badge--md {\n padding: var(--bp-spacing-xs) var(--bp-spacing-sm);\n font-size: var(--bp-font-size-sm);\n min-width: var(--bp-spacing-6);\n height: var(--bp-spacing-6);\n }\n\n .badge--lg {\n padding: var(--bp-spacing-sm) var(--bp-spacing-md);\n font-size: var(--bp-font-size-base);\n min-width: var(--bp-spacing-8);\n height: var(--bp-spacing-8);\n }\n\n /* Dot variant */\n .badge--dot {\n padding: 0;\n border-radius: var(--bp-border-radius-full);\n }\n\n .badge--dot.badge--sm {\n width: var(--bp-spacing-2);\n height: var(--bp-spacing-2);\n min-width: var(--bp-spacing-2);\n }\n\n .badge--dot.badge--md {\n width: var(--bp-spacing-3);\n height: var(--bp-spacing-3);\n min-width: var(--bp-spacing-3);\n }\n\n .badge--dot.badge--lg {\n width: var(--bp-spacing-4);\n height: var(--bp-spacing-4);\n min-width: var(--bp-spacing-4);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { badgeStyles } from './badge.style.js';\n\n/**\n * Badge component for displaying status indicators, counts, and labels.\n *\n * @element bp-badge\n *\n * @slot - Default slot for badge content (text or icons)\n *\n * @csspart badge - The badge container element\n *\n * @example\n * ```html\n * <bp-badge>New</bp-badge>\n * <bp-badge variant=\"success\">Active</bp-badge>\n * <bp-badge variant=\"error\" size=\"sm\">3</bp-badge>\n * ```\n */\n@customElement('bp-badge')\nexport class BpBadge extends LitElement {\n /**\n * Visual variant of the badge\n * @type {'primary' | 'success' | 'error' | 'warning' | 'info' | 'neutral'}\n * @default 'primary'\n */\n @property({ type: String, reflect: true }) declare variant:\n | 'primary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral';\n\n /**\n * Size of the badge\n * @type {'sm' | 'md' | 'lg'}\n * @default 'md'\n */\n @property({ type: String, reflect: true }) declare size: 'sm' | 'md' | 'lg';\n\n /**\n * Whether the badge is a dot/pill shape (for count indicators)\n * @type {boolean}\n * @default false\n */\n @property({ type: Boolean, reflect: true }) declare dot: boolean;\n\n static styles = [badgeStyles];\n\n constructor() {\n super();\n this.variant = 'primary';\n this.size = 'md';\n this.dot = false;\n }\n\n render() {\n return html`\n <span\n class=${classMap({\n badge: true,\n [`badge--${this.variant}`]: true,\n [`badge--${this.size}`]: true,\n 'badge--dot': this.dot,\n })}\n part=\"badge\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <slot></slot>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'bp-badge': BpBadge;\n }\n}\n"],"names":["badgeStyles","css","BpBadge","LitElement","html","classMap","__decorateClass","property","customElement"],"mappings":";;;AAEO,MAAMA,IAAcC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACoBpB,IAAMC,IAAN,cAAsBC,EAAW;AAAA,EA8BtC,cAAc;AACZ,UAAA,GACA,KAAK,UAAU,WACf,KAAK,OAAO,MACZ,KAAK,MAAM;AAAA,EACb;AAAA,EAEA,SAAS;AACP,WAAOC;AAAA;AAAA,gBAEKC,EAAS;AAAA,MACf,OAAO;AAAA,MACP,CAAC,UAAU,KAAK,OAAO,EAAE,GAAG;AAAA,MAC5B,CAAC,UAAU,KAAK,IAAI,EAAE,GAAG;AAAA,MACzB,cAAc,KAAK;AAAA,IAAA,CACpB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQR;AACF;AAtDaH,EA4BJ,SAAS,CAACF,CAAW;AAtBuBM,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAN9BL,EAMwC,WAAA,WAAA,CAAA;AAaAI,EAAA;AAAA,EAAlDC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAnB9BL,EAmBwC,WAAA,QAAA,CAAA;AAOCI,EAAA;AAAA,EAAnDC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GA1B/BL,EA0ByC,WAAA,OAAA,CAAA;AA1BzCA,IAANI,EAAA;AAAA,EADNE,EAAc,UAAU;AAAA,GACZN,CAAA;"}