@orange-halo/components 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 (138) hide show
  1. package/custom-elements.json +186 -0
  2. package/dist/base.d.ts +30 -0
  3. package/dist/base.d.ts.map +1 -0
  4. package/dist/base.js +78 -0
  5. package/dist/base.js.map +1 -0
  6. package/dist/index.d.ts +83 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +72 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/oh-accordion.d.ts +47 -0
  11. package/dist/oh-accordion.d.ts.map +1 -0
  12. package/dist/oh-accordion.js +387 -0
  13. package/dist/oh-accordion.js.map +1 -0
  14. package/dist/oh-alert.d.ts +48 -0
  15. package/dist/oh-alert.d.ts.map +1 -0
  16. package/dist/oh-alert.js +343 -0
  17. package/dist/oh-alert.js.map +1 -0
  18. package/dist/oh-badge.d.ts +38 -0
  19. package/dist/oh-badge.d.ts.map +1 -0
  20. package/dist/oh-badge.js +176 -0
  21. package/dist/oh-badge.js.map +1 -0
  22. package/dist/oh-breadcrumb.d.ts +39 -0
  23. package/dist/oh-breadcrumb.d.ts.map +1 -0
  24. package/dist/oh-breadcrumb.js +277 -0
  25. package/dist/oh-breadcrumb.js.map +1 -0
  26. package/dist/oh-button.d.ts +62 -0
  27. package/dist/oh-button.d.ts.map +1 -0
  28. package/dist/oh-button.figma.d.ts +2 -0
  29. package/dist/oh-button.figma.d.ts.map +1 -0
  30. package/dist/oh-button.figma.js +20 -0
  31. package/dist/oh-button.figma.js.map +1 -0
  32. package/dist/oh-button.js +490 -0
  33. package/dist/oh-button.js.map +1 -0
  34. package/dist/oh-card.d.ts +44 -0
  35. package/dist/oh-card.d.ts.map +1 -0
  36. package/dist/oh-card.js +340 -0
  37. package/dist/oh-card.js.map +1 -0
  38. package/dist/oh-checkbox-group.d.ts +39 -0
  39. package/dist/oh-checkbox-group.d.ts.map +1 -0
  40. package/dist/oh-checkbox-group.figma.d.ts +2 -0
  41. package/dist/oh-checkbox-group.figma.d.ts.map +1 -0
  42. package/dist/oh-checkbox-group.figma.js +24 -0
  43. package/dist/oh-checkbox-group.figma.js.map +1 -0
  44. package/dist/oh-checkbox-group.js +309 -0
  45. package/dist/oh-checkbox-group.js.map +1 -0
  46. package/dist/oh-checkbox.d.ts +50 -0
  47. package/dist/oh-checkbox.d.ts.map +1 -0
  48. package/dist/oh-checkbox.js +315 -0
  49. package/dist/oh-checkbox.js.map +1 -0
  50. package/dist/oh-cluster.d.ts +38 -0
  51. package/dist/oh-cluster.d.ts.map +1 -0
  52. package/dist/oh-cluster.js +141 -0
  53. package/dist/oh-cluster.js.map +1 -0
  54. package/dist/oh-container.d.ts +38 -0
  55. package/dist/oh-container.d.ts.map +1 -0
  56. package/dist/oh-container.js +116 -0
  57. package/dist/oh-container.js.map +1 -0
  58. package/dist/oh-drawer.d.ts +66 -0
  59. package/dist/oh-drawer.d.ts.map +1 -0
  60. package/dist/oh-drawer.js +284 -0
  61. package/dist/oh-drawer.js.map +1 -0
  62. package/dist/oh-footer.d.ts +40 -0
  63. package/dist/oh-footer.d.ts.map +1 -0
  64. package/dist/oh-footer.js +112 -0
  65. package/dist/oh-footer.js.map +1 -0
  66. package/dist/oh-grid.d.ts +40 -0
  67. package/dist/oh-grid.d.ts.map +1 -0
  68. package/dist/oh-grid.js +168 -0
  69. package/dist/oh-grid.js.map +1 -0
  70. package/dist/oh-hero.d.ts +28 -0
  71. package/dist/oh-hero.d.ts.map +1 -0
  72. package/dist/oh-hero.js +242 -0
  73. package/dist/oh-hero.js.map +1 -0
  74. package/dist/oh-icon.d.ts +44 -0
  75. package/dist/oh-icon.d.ts.map +1 -0
  76. package/dist/oh-icon.js +321 -0
  77. package/dist/oh-icon.js.map +1 -0
  78. package/dist/oh-input.d.ts +56 -0
  79. package/dist/oh-input.d.ts.map +1 -0
  80. package/dist/oh-input.figma.d.ts +2 -0
  81. package/dist/oh-input.figma.d.ts.map +1 -0
  82. package/dist/oh-input.figma.js +36 -0
  83. package/dist/oh-input.figma.js.map +1 -0
  84. package/dist/oh-input.js +320 -0
  85. package/dist/oh-input.js.map +1 -0
  86. package/dist/oh-link.d.ts +45 -0
  87. package/dist/oh-link.d.ts.map +1 -0
  88. package/dist/oh-link.js +392 -0
  89. package/dist/oh-link.js.map +1 -0
  90. package/dist/oh-modal.d.ts +54 -0
  91. package/dist/oh-modal.d.ts.map +1 -0
  92. package/dist/oh-modal.js +450 -0
  93. package/dist/oh-modal.js.map +1 -0
  94. package/dist/oh-navbar.d.ts +49 -0
  95. package/dist/oh-navbar.d.ts.map +1 -0
  96. package/dist/oh-navbar.js +185 -0
  97. package/dist/oh-navbar.js.map +1 -0
  98. package/dist/oh-progress.d.ts +56 -0
  99. package/dist/oh-progress.d.ts.map +1 -0
  100. package/dist/oh-progress.js +299 -0
  101. package/dist/oh-progress.js.map +1 -0
  102. package/dist/oh-radio-group.d.ts +43 -0
  103. package/dist/oh-radio-group.d.ts.map +1 -0
  104. package/dist/oh-radio-group.figma.d.ts +2 -0
  105. package/dist/oh-radio-group.figma.d.ts.map +1 -0
  106. package/dist/oh-radio-group.figma.js +22 -0
  107. package/dist/oh-radio-group.figma.js.map +1 -0
  108. package/dist/oh-radio-group.js +324 -0
  109. package/dist/oh-radio-group.js.map +1 -0
  110. package/dist/oh-radio.d.ts +50 -0
  111. package/dist/oh-radio.d.ts.map +1 -0
  112. package/dist/oh-radio.js +314 -0
  113. package/dist/oh-radio.js.map +1 -0
  114. package/dist/oh-select.d.ts +82 -0
  115. package/dist/oh-select.d.ts.map +1 -0
  116. package/dist/oh-select.js +638 -0
  117. package/dist/oh-select.js.map +1 -0
  118. package/dist/oh-skip-link.d.ts +37 -0
  119. package/dist/oh-skip-link.d.ts.map +1 -0
  120. package/dist/oh-skip-link.js +145 -0
  121. package/dist/oh-skip-link.js.map +1 -0
  122. package/dist/oh-stack.d.ts +36 -0
  123. package/dist/oh-stack.d.ts.map +1 -0
  124. package/dist/oh-stack.js +112 -0
  125. package/dist/oh-stack.js.map +1 -0
  126. package/dist/oh-tabs.d.ts +85 -0
  127. package/dist/oh-tabs.d.ts.map +1 -0
  128. package/dist/oh-tabs.js +417 -0
  129. package/dist/oh-tabs.js.map +1 -0
  130. package/dist/oh-toggle.d.ts +51 -0
  131. package/dist/oh-toggle.d.ts.map +1 -0
  132. package/dist/oh-toggle.js +219 -0
  133. package/dist/oh-toggle.js.map +1 -0
  134. package/dist/styles/typography.d.ts +15 -0
  135. package/dist/styles/typography.d.ts.map +1 -0
  136. package/dist/styles/typography.js +235 -0
  137. package/dist/styles/typography.js.map +1 -0
  138. package/package.json +140 -0
@@ -0,0 +1,387 @@
1
+ /**
2
+ * oh-accordion
3
+ *
4
+ * Accessible accordion with two variants: subtle (inline) and standout (boxed).
5
+ *
6
+ * DESIGN DECISIONS:
7
+ * ─────────────────
8
+ * 1. TWO VARIANTS
9
+ * - Subtle: Minimal, blends with content, follows link styling rules
10
+ * - Standout: Chunky border, shadow, lifts on hover
11
+ *
12
+ * 2. CONSISTENT ICON
13
+ * - Chevron that rotates 90° when expanded
14
+ * - Same icon for both variants
15
+ *
16
+ * 3. ACCESSIBLE
17
+ * - Button trigger with aria-expanded
18
+ * - Content region with aria-hidden
19
+ * - Keyboard support (Enter/Space)
20
+ * - Focus state with underline
21
+ *
22
+ * @element oh-accordion
23
+ */
24
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
25
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
29
+ };
30
+ import { html, css, nothing } from "lit";
31
+ import { unsafeStatic, html as staticHtml } from "lit/static-html.js";
32
+ import { customElement, property, state } from "lit/decorators.js";
33
+ import { OhElement, baseStyles } from "./base.js";
34
+ let OhAccordion = class OhAccordion extends OhElement {
35
+ constructor() {
36
+ super(...arguments);
37
+ this.items = [];
38
+ this.variant = "subtle";
39
+ this.headingLevel = 3;
40
+ this._expandedItems = new Set();
41
+ }
42
+ static { this.styles = [
43
+ baseStyles,
44
+ css `
45
+ /* ═══════════════════════════════════════════════════════════════
46
+ ORANGE HALO ACCORDION
47
+ Subtle (inline) • Standout (boxed) • Accessible
48
+ ═══════════════════════════════════════════════════════════════ */
49
+
50
+ :host {
51
+ display: block;
52
+ font-family: var(--oh-font-family-sans);
53
+ font-size: var(--oh-font-size-base);
54
+ line-height: var(--oh-font-line-height-normal);
55
+ }
56
+
57
+ .accordion {
58
+ display: flex;
59
+ flex-direction: column;
60
+ }
61
+
62
+ /* ═══════════════════════════════════════════════════════════════
63
+ SUBTLE VARIANT — Inline, minimal, follows link rules
64
+ ═══════════════════════════════════════════════════════════════ */
65
+
66
+ .accordion--subtle {
67
+ gap: 0;
68
+ }
69
+
70
+ .accordion--subtle .accordion-item {
71
+ border-bottom: 1px solid var(--oh-color-border-subtle);
72
+ }
73
+
74
+ .accordion--subtle .accordion-item:last-child {
75
+ border-bottom: none;
76
+ }
77
+
78
+ /* Heading wrapper — reset default heading styles */
79
+ .accordion-heading {
80
+ margin: 0;
81
+ font-size: inherit;
82
+ font-weight: inherit;
83
+ }
84
+
85
+ .accordion--subtle .accordion-trigger {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: var(--oh-spacing-2);
89
+ width: 100%;
90
+ padding: var(--oh-spacing-3) 0;
91
+
92
+ background: transparent;
93
+ border: none;
94
+ cursor: pointer;
95
+ text-align: left;
96
+
97
+ font-family: var(--oh-font-family-sans);
98
+ font-size: var(--oh-font-size-base);
99
+ font-weight: var(--oh-font-weight-medium);
100
+ color: var(--oh-color-text-link);
101
+ }
102
+
103
+ .accordion--subtle .accordion-trigger:focus-visible {
104
+ outline: none;
105
+ }
106
+
107
+ /* Text span with dashed underline — follows link rules */
108
+ .accordion--subtle .accordion-text {
109
+ position: relative;
110
+ padding-bottom: 2px;
111
+ }
112
+
113
+ .accordion--subtle .accordion-text::after {
114
+ content: '';
115
+ position: absolute;
116
+ left: 0;
117
+ bottom: 0;
118
+ width: 100%;
119
+ height: 2px;
120
+ background-image: repeating-linear-gradient(
121
+ to right,
122
+ var(--oh-color-text-link) 0,
123
+ var(--oh-color-text-link) 4px,
124
+ transparent 4px,
125
+ transparent 8px
126
+ );
127
+ background-size: 100% 100%;
128
+ background-repeat: no-repeat;
129
+ transform-origin: right;
130
+ transition: transform var(--oh-motion-relaxed, 300ms) var(--oh-motion-ease-gentle, ease);
131
+ }
132
+
133
+ .accordion--subtle .accordion-trigger:hover .accordion-text::after {
134
+ transform: scaleX(0);
135
+ }
136
+
137
+ .accordion--subtle .accordion-trigger:focus-visible .accordion-text::after {
138
+ background-image: none;
139
+ background-color: var(--oh-color-brand-primary);
140
+ height: 2px;
141
+ transform: scaleX(1);
142
+ }
143
+
144
+ .accordion--subtle .accordion-content {
145
+ padding: 0 0 var(--oh-spacing-4) 0;
146
+ color: var(--oh-color-text-primary);
147
+ }
148
+
149
+ /* ═══════════════════════════════════════════════════════════════
150
+ STANDOUT VARIANT — Boxed, chunky, lifts on hover
151
+ ═══════════════════════════════════════════════════════════════ */
152
+
153
+ .accordion--standout {
154
+ gap: var(--oh-spacing-3);
155
+ }
156
+
157
+ .accordion--standout .accordion-item {
158
+ background-color: var(--oh-color-surface-raised);
159
+ border: var(--oh-input-base-border-width, 2.5px) solid var(--oh-color-border-emphasis);
160
+ border-radius: var(--oh-radius-md);
161
+ overflow: hidden;
162
+
163
+ /* Base shadow and lift animation */
164
+ box-shadow: 3px 3px 0 0 rgba(107, 93, 77, 0.15);
165
+ transition:
166
+ transform var(--oh-motion-snappy, 150ms) var(--oh-motion-ease-playful, cubic-bezier(0.34, 1.56, 0.64, 1)),
167
+ box-shadow var(--oh-motion-snappy, 150ms) var(--oh-motion-ease-playful, cubic-bezier(0.34, 1.56, 0.64, 1));
168
+ }
169
+
170
+ /* Lift whole accordion only when trigger is hovered */
171
+ .accordion--standout .accordion-item:has(.accordion-trigger:hover) {
172
+ transform: translate(-2px, -2px);
173
+ box-shadow: 5px 5px 0 0 rgba(107, 93, 77, 0.2);
174
+ }
175
+
176
+ .accordion--standout .accordion-item[data-expanded="true"] {
177
+ border-color: var(--oh-color-brand-primary);
178
+ }
179
+
180
+ .accordion--standout .accordion-trigger {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: var(--oh-spacing-3);
184
+ width: 100%;
185
+ padding: var(--oh-spacing-4);
186
+
187
+ background: transparent;
188
+ border: none;
189
+ cursor: pointer;
190
+ text-align: left;
191
+
192
+ font-family: var(--oh-font-family-sans);
193
+ font-size: var(--oh-font-size-base);
194
+ font-weight: var(--oh-font-weight-semibold);
195
+ color: var(--oh-color-text-primary);
196
+ }
197
+
198
+ .accordion--standout .accordion-trigger:focus-visible {
199
+ outline: none;
200
+ }
201
+
202
+ .accordion--standout .accordion-trigger:focus-visible .accordion-text {
203
+ text-decoration: underline;
204
+ text-underline-offset: 3px;
205
+ }
206
+
207
+ /* Text span for standout — dashed underline appears on hover */
208
+ .accordion--standout .accordion-text {
209
+ position: relative;
210
+ padding-bottom: 2px;
211
+ }
212
+
213
+ .accordion--standout .accordion-text::after {
214
+ content: '';
215
+ position: absolute;
216
+ left: 0;
217
+ bottom: 0;
218
+ width: 100%;
219
+ height: 2px;
220
+ background-image: repeating-linear-gradient(
221
+ to right,
222
+ var(--oh-color-text-primary) 0,
223
+ var(--oh-color-text-primary) 4px,
224
+ transparent 4px,
225
+ transparent 8px
226
+ );
227
+ background-size: 100% 100%;
228
+ background-repeat: no-repeat;
229
+ transform-origin: left;
230
+ transform: scaleX(0);
231
+ transition: transform var(--oh-motion-relaxed, 300ms) var(--oh-motion-ease-gentle, ease);
232
+ }
233
+
234
+ .accordion--standout .accordion-trigger:hover .accordion-text::after {
235
+ transform: scaleX(1);
236
+ }
237
+
238
+ .accordion--standout .accordion-content {
239
+ padding: var(--oh-spacing-4);
240
+ color: var(--oh-color-text-primary);
241
+ border-top: 1px solid var(--oh-color-border-subtle);
242
+ }
243
+
244
+ /* ═══════════════════════════════════════════════════════════════
245
+ ICON — Chevron, rotates on expand
246
+ ═══════════════════════════════════════════════════════════════ */
247
+
248
+ .accordion-icon {
249
+ flex-shrink: 0;
250
+ width: 1rem;
251
+ height: 1rem;
252
+ transition: transform var(--oh-motion-gentle, 200ms) var(--oh-motion-ease-gentle, ease);
253
+ }
254
+
255
+ .accordion--subtle .accordion-icon {
256
+ color: var(--oh-color-text-link);
257
+ }
258
+
259
+ .accordion--standout .accordion-icon {
260
+ color: var(--oh-color-text-secondary);
261
+ }
262
+
263
+ .accordion-trigger[aria-expanded="true"] .accordion-icon {
264
+ transform: rotate(90deg);
265
+ }
266
+
267
+ /* ═══════════════════════════════════════════════════════════════
268
+ CONTENT ANIMATION
269
+ ═══════════════════════════════════════════════════════════════ */
270
+
271
+ .accordion-panel {
272
+ display: grid;
273
+ grid-template-rows: 0fr;
274
+ transition: grid-template-rows var(--oh-motion-gentle, 200ms) ease;
275
+ }
276
+
277
+ .accordion-panel[data-expanded="true"] {
278
+ grid-template-rows: 1fr;
279
+ }
280
+
281
+ .accordion-panel-inner {
282
+ overflow: hidden;
283
+ }
284
+
285
+ /* ═══════════════════════════════════════════════════════════════
286
+ REDUCED MOTION
287
+ ═══════════════════════════════════════════════════════════════ */
288
+
289
+ @media (prefers-reduced-motion: reduce) {
290
+ .accordion--standout .accordion-item,
291
+ .accordion-icon,
292
+ .accordion-panel,
293
+ .accordion--subtle .accordion-text::after {
294
+ transition-duration: 0.01ms !important;
295
+ }
296
+
297
+ .accordion--standout .accordion-item:has(.accordion-trigger:hover) {
298
+ transform: none !important;
299
+ }
300
+ }
301
+ `,
302
+ ]; }
303
+ _toggleItem(index) {
304
+ if (this._expandedItems.has(index)) {
305
+ this._expandedItems.delete(index);
306
+ }
307
+ else {
308
+ this._expandedItems.add(index);
309
+ }
310
+ this._expandedItems = new Set(this._expandedItems);
311
+ }
312
+ _isExpanded(index) {
313
+ return this._expandedItems.has(index);
314
+ }
315
+ render() {
316
+ if (this.items.length === 0) {
317
+ return nothing;
318
+ }
319
+ const accordionClasses = this.classMap({
320
+ accordion: true,
321
+ [`accordion--${this.variant}`]: true,
322
+ });
323
+ return html `
324
+ <div class=${accordionClasses}>
325
+ ${this.items.map((item, index) => {
326
+ const isExpanded = this._isExpanded(index);
327
+ const triggerId = `accordion-trigger-${index}`;
328
+ const panelId = `accordion-panel-${index}`;
329
+ const headingTag = unsafeStatic(`h${this.headingLevel}`);
330
+ return staticHtml `
331
+ <div
332
+ class="accordion-item"
333
+ data-expanded=${isExpanded ? "true" : "false"}
334
+ >
335
+ <${headingTag} class="accordion-heading">
336
+ <button
337
+ id=${triggerId}
338
+ class="accordion-trigger"
339
+ type="button"
340
+ aria-expanded=${isExpanded ? "true" : "false"}
341
+ aria-controls=${panelId}
342
+ @click=${() => this._toggleItem(index)}
343
+ >
344
+ <svg class="accordion-icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
345
+ <path d="M6 4L10 8L6 12" />
346
+ </svg>
347
+ <span class="accordion-text">${item.heading}</span>
348
+ </button>
349
+ </${headingTag}>
350
+ <div
351
+ id=${panelId}
352
+ class="accordion-panel"
353
+ role="region"
354
+ aria-labelledby=${triggerId}
355
+ aria-hidden=${!isExpanded}
356
+ data-expanded=${isExpanded ? "true" : "false"}
357
+ >
358
+ <div class="accordion-panel-inner">
359
+ <div class="accordion-content">
360
+ ${item.content}
361
+ </div>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ `;
366
+ })}
367
+ </div>
368
+ `;
369
+ }
370
+ };
371
+ __decorate([
372
+ property({ type: Array })
373
+ ], OhAccordion.prototype, "items", void 0);
374
+ __decorate([
375
+ property({ type: String, reflect: true })
376
+ ], OhAccordion.prototype, "variant", void 0);
377
+ __decorate([
378
+ property({ type: Number, reflect: true, attribute: "heading-level" })
379
+ ], OhAccordion.prototype, "headingLevel", void 0);
380
+ __decorate([
381
+ state()
382
+ ], OhAccordion.prototype, "_expandedItems", void 0);
383
+ OhAccordion = __decorate([
384
+ customElement("oh-accordion")
385
+ ], OhAccordion);
386
+ export { OhAccordion };
387
+ //# sourceMappingURL=oh-accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-accordion.js","sourceRoot":"","sources":["../src/oh-accordion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * oh-alert
3
+ *
4
+ * A dismissible alert for feedback messages.
5
+ * Subtle backgrounds only, supports rich content including links.
6
+ *
7
+ * DESIGN DECISIONS:
8
+ * ─────────────────
9
+ * 1. SUBTLE ONLY
10
+ * - Muted backgrounds, not overwhelming
11
+ * - Matches badge subtle variants
12
+ *
13
+ * 2. DISMISSIBLE
14
+ * - Optional close button
15
+ * - Emits event on dismiss
16
+ *
17
+ * 3. RICH CONTENT
18
+ * - Supports text with links
19
+ * - Default slot for flexible content
20
+ *
21
+ * 4. ACCESSIBLE
22
+ * - role="alert" for important messages
23
+ * - Close button has accessible label
24
+ * - Links within inherit appropriate styling
25
+ *
26
+ * @element oh-alert
27
+ */
28
+ import { OhElement } from "./base.js";
29
+ export type AlertVariant = "success" | "error" | "warning" | "info";
30
+ export declare class OhAlert extends OhElement {
31
+ static styles: import("lit").CSSResult[];
32
+ variant: AlertVariant;
33
+ dismissible: boolean;
34
+ /**
35
+ * When true, adds role="alert" for screen reader announcement.
36
+ * Use for dynamically inserted alerts only, not for static page content.
37
+ */
38
+ live: boolean;
39
+ private _handleDismiss;
40
+ private _getIcon;
41
+ render(): import("lit").TemplateResult<1>;
42
+ }
43
+ declare global {
44
+ interface HTMLElementTagNameMap {
45
+ "oh-alert": OhAlert;
46
+ }
47
+ }
48
+ //# sourceMappingURL=oh-alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-alert.d.ts","sourceRoot":"","sources":["../src/oh-alert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpE,qBACa,OAAQ,SAAQ,SAAS;IACpC,OAAgB,MAAM,4BAwNpB;IAGF,OAAO,EAAE,YAAY,CAAU;IAG/B,WAAW,UAAS;IAEpB;;;OAGG;IAEH,IAAI,UAAS;IAEb,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,QAAQ;IA8BhB,MAAM;CAgCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}