@reliability-design/web 1.0.2 → 1.0.6

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 (145) hide show
  1. package/dist/components/rel-accordion/README.md +132 -0
  2. package/dist/components/rel-accordion/rel-accordion.ts +61 -29
  3. package/dist/components/rel-alert/README.md +141 -0
  4. package/dist/components/rel-alert/rel-alert.ts +110 -67
  5. package/dist/components/rel-avatar/README.md +119 -0
  6. package/dist/components/rel-avatar/rel-avatar.ts +8 -15
  7. package/dist/components/rel-badge/README.md +86 -0
  8. package/dist/components/rel-badge/rel-badge.ts +28 -21
  9. package/dist/components/rel-breadcrumb/README.md +102 -0
  10. package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +24 -18
  11. package/dist/components/rel-button/README.md +130 -0
  12. package/dist/components/rel-button/rel-button.ts +39 -59
  13. package/dist/components/rel-calendar/README.md +109 -0
  14. package/dist/components/rel-calendar/index.ts +1 -0
  15. package/dist/components/rel-calendar/rel-calendar.ts +467 -0
  16. package/dist/components/rel-card/README.md +94 -0
  17. package/dist/components/rel-card/rel-card.ts +21 -11
  18. package/dist/components/rel-cardmedia/README.md +127 -0
  19. package/dist/components/rel-cardmedia/rel-cardmedia.ts +22 -18
  20. package/dist/components/rel-carousel/README.md +166 -0
  21. package/dist/components/rel-carousel/index.ts +1 -0
  22. package/dist/components/rel-carousel/rel-carousel.ts +469 -0
  23. package/dist/components/rel-chart/README.md +286 -0
  24. package/dist/components/rel-chart/index.ts +1 -0
  25. package/dist/components/rel-chart/rel-chart.ts +736 -0
  26. package/dist/components/rel-checkbox/README.md +77 -0
  27. package/dist/components/rel-checkbox/rel-checkbox.ts +36 -45
  28. package/dist/components/rel-chip/README.md +114 -0
  29. package/dist/components/rel-chip/rel-chip.ts +47 -122
  30. package/dist/components/rel-container/README.md +99 -0
  31. package/dist/components/rel-container/rel-container.ts +1 -6
  32. package/dist/components/rel-date-picker/README.md +253 -0
  33. package/dist/components/rel-date-picker/index.ts +1 -0
  34. package/dist/components/rel-date-picker/rel-date-picker.ts +916 -0
  35. package/dist/components/rel-divider/README.md +100 -0
  36. package/dist/components/rel-divider/rel-divider.ts +37 -37
  37. package/dist/components/rel-drawer/README.md +200 -0
  38. package/dist/components/rel-drawer/index.ts +1 -0
  39. package/dist/components/rel-drawer/rel-drawer.ts +621 -0
  40. package/dist/components/rel-kbd/README.md +151 -0
  41. package/dist/components/rel-kbd/rel-kbd.ts +118 -0
  42. package/dist/components/rel-layout/README.md +88 -0
  43. package/dist/components/rel-layout/rel-layout.ts +12 -14
  44. package/dist/components/rel-menu/README.md +151 -0
  45. package/dist/components/rel-menu/rel-menu.ts +18 -10
  46. package/dist/components/rel-menubar/README.md +329 -0
  47. package/dist/components/rel-menubar/index.ts +2 -0
  48. package/dist/components/rel-menubar/rel-menubar-menu.ts +16 -0
  49. package/dist/components/rel-menubar/rel-menubar.ts +576 -0
  50. package/dist/components/rel-nav-menu/README.md +289 -0
  51. package/dist/components/rel-nav-menu/index.ts +3 -0
  52. package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +143 -0
  53. package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +53 -0
  54. package/dist/components/rel-nav-menu/rel-nav-menu.ts +331 -0
  55. package/dist/components/rel-navbar/README.md +126 -0
  56. package/dist/components/rel-navbar/rel-navbar.ts +91 -0
  57. package/dist/components/rel-otp/README.md +440 -0
  58. package/dist/components/rel-otp/index.ts +1 -0
  59. package/dist/components/rel-otp/rel-otp.ts +504 -0
  60. package/dist/components/rel-pagination/README.md +410 -0
  61. package/dist/components/rel-pagination/index.ts +1 -0
  62. package/dist/components/rel-pagination/rel-pagination.ts +376 -0
  63. package/dist/components/rel-popover/README.md +568 -0
  64. package/dist/components/rel-popover/index.ts +2 -0
  65. package/dist/components/rel-popover/rel-popover-content.ts +55 -0
  66. package/dist/components/rel-popover/rel-popover.ts +327 -0
  67. package/dist/components/rel-progress/README.md +110 -0
  68. package/dist/components/rel-progress/rel-progress.ts +58 -20
  69. package/dist/components/rel-quote-page/README.md +166 -0
  70. package/dist/components/rel-quote-page/rel-quote-page.ts +816 -0
  71. package/dist/components/rel-radio/README.md +120 -0
  72. package/dist/components/rel-radio/rel-radio.ts +41 -73
  73. package/dist/components/rel-resizable/README.md +140 -0
  74. package/dist/components/rel-resizable/index.ts +3 -0
  75. package/dist/components/rel-resizable/rel-resizable-group.ts +374 -0
  76. package/dist/components/rel-resizable/rel-resizable-handle.ts +149 -0
  77. package/dist/components/rel-resizable/rel-resizable-panel.ts +47 -0
  78. package/dist/components/rel-segmented-button/README.md +141 -0
  79. package/dist/components/rel-segmented-button/rel-segmented-button.ts +18 -13
  80. package/dist/components/rel-select/README.md +107 -0
  81. package/dist/components/rel-select/rel-select.ts +14 -14
  82. package/dist/components/rel-sheet/README.md +224 -0
  83. package/dist/components/rel-sheet/rel-sheet.ts +683 -0
  84. package/dist/components/rel-sidebar/README.md +209 -0
  85. package/dist/components/rel-sidebar/rel-sidebar.ts +1158 -0
  86. package/dist/components/rel-slider/README.md +135 -0
  87. package/dist/components/rel-slider/rel-slider.ts +19 -7
  88. package/dist/components/rel-snackbar/README.md +134 -0
  89. package/dist/components/rel-snackbar/rel-snackbar.ts +73 -2
  90. package/dist/components/rel-stepper/README.md +160 -0
  91. package/dist/components/rel-stepper/rel-stepper.ts +29 -8
  92. package/dist/components/rel-switch/README.md +102 -0
  93. package/dist/components/rel-switch/rel-switch.ts +22 -11
  94. package/dist/components/rel-tab/README.md +163 -0
  95. package/dist/components/rel-tab/rel-tab.ts +46 -22
  96. package/dist/components/rel-table/README.md +178 -0
  97. package/dist/components/rel-table/rel-table-body.ts +16 -0
  98. package/dist/components/rel-table/rel-table-caption.ts +22 -0
  99. package/dist/components/rel-table/rel-table-cell.ts +49 -0
  100. package/dist/components/rel-table/rel-table-footer.ts +18 -0
  101. package/dist/components/rel-table/rel-table-head.ts +33 -0
  102. package/dist/components/rel-table/rel-table-header.ts +16 -0
  103. package/dist/components/rel-table/rel-table-row.ts +32 -0
  104. package/dist/components/rel-table/rel-table.ts +47 -0
  105. package/dist/components/rel-textfield/README.md +90 -0
  106. package/dist/components/rel-textfield/rel-textfield.ts +37 -21
  107. package/dist/components/rel-toast/README.md +148 -0
  108. package/dist/components/rel-toast/rel-toast.ts +32 -14
  109. package/dist/components/rel-tooltip/README.md +103 -0
  110. package/dist/components/rel-tooltip/rel-tooltip.ts +9 -9
  111. package/dist/index.d.mts +846 -7
  112. package/dist/index.d.ts +846 -7
  113. package/dist/index.js +10860 -1803
  114. package/dist/index.js.map +1 -1
  115. package/dist/index.mjs +10820 -1809
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/styles/vars.css +293 -183
  118. package/dist/vars-ITL2K3KO.css +294 -0
  119. package/package.json +2 -2
  120. package/dist/components/rel-accordion/rel-accordion.stories.ts +0 -313
  121. package/dist/components/rel-alert/rel-alert.stories.ts +0 -412
  122. package/dist/components/rel-avatar/rel-avatar.stories.ts +0 -327
  123. package/dist/components/rel-badge/rel-badge.stories.ts +0 -350
  124. package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +0 -306
  125. package/dist/components/rel-button/rel-button.stories.ts +0 -356
  126. package/dist/components/rel-card/rel-card.stories.ts +0 -299
  127. package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +0 -368
  128. package/dist/components/rel-checkbox/rel-checkbox.stories.ts +0 -414
  129. package/dist/components/rel-chip/rel-chip.stories.ts +0 -552
  130. package/dist/components/rel-container/rel-container.stories.ts +0 -239
  131. package/dist/components/rel-divider/rel-divider.stories.ts +0 -229
  132. package/dist/components/rel-layout/rel-layout.stories.ts +0 -713
  133. package/dist/components/rel-menu/rel-menu.stories.ts +0 -910
  134. package/dist/components/rel-progress/rel-progress.stories.ts +0 -817
  135. package/dist/components/rel-radio/rel-radio.stories.ts +0 -1048
  136. package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +0 -1079
  137. package/dist/components/rel-select/rel-select.stories.ts +0 -1201
  138. package/dist/components/rel-slider/rel-slider.stories.ts +0 -730
  139. package/dist/components/rel-snackbar/rel-snackbar.stories.ts +0 -808
  140. package/dist/components/rel-stepper/rel-stepper.stories.ts +0 -752
  141. package/dist/components/rel-switch/rel-switch.stories.ts +0 -441
  142. package/dist/components/rel-tab/rel-tab.stories.ts +0 -492
  143. package/dist/components/rel-textfield/rel-textfield.stories.ts +0 -710
  144. package/dist/components/rel-toast/rel-toast.stories.ts +0 -394
  145. package/dist/components/rel-tooltip/rel-tooltip.stories.ts +0 -364
@@ -0,0 +1,132 @@
1
+ # rel-accordion
2
+
3
+ ## Overview
4
+ An animated accordion component with a collapsible body section. Features a clickable header with chevron icon rotation, smooth expand/collapse transitions, and keyboard support. Respects reduced motion preferences.
5
+
6
+ ## Usage
7
+ ```html
8
+ <!-- Basic accordion -->
9
+ <rel-accordion title="Section 1">
10
+ <p>This is the content of section 1.</p>
11
+ </rel-accordion>
12
+
13
+ <!-- Initially open -->
14
+ <rel-accordion title="FAQ: How does it work?" open>
15
+ <p>This accordion starts in the open state.</p>
16
+ <ul>
17
+ <li>Bullet 1</li>
18
+ <li>Bullet 2</li>
19
+ </ul>
20
+ </rel-accordion>
21
+
22
+ <!-- Multiple accordions -->
23
+ <rel-accordion title="Introduction">
24
+ <p>Introduction content...</p>
25
+ </rel-accordion>
26
+ <rel-accordion title="Features">
27
+ <p>Features content...</p>
28
+ </rel-accordion>
29
+ <rel-accordion title="Pricing">
30
+ <p>Pricing content...</p>
31
+ </rel-accordion>
32
+
33
+ <!-- Listen for open state changes -->
34
+ <rel-accordion id="myAccordion" title="Details"></rel-accordion>
35
+ <script>
36
+ const accordion = document.getElementById('myAccordion');
37
+ accordion.addEventListener('open-change', (e) => {
38
+ console.log('Accordion open:', e.detail); // true or false
39
+ });
40
+ </script>
41
+ ```
42
+
43
+ ## API
44
+
45
+ ### Attributes/Properties
46
+ | Name | Type | Default | Description |
47
+ |------|------|---------|-------------|
48
+ | `title` | `string` | `"Accordion"` | Header title text |
49
+ | `open` (reflected) | `boolean` | `false` | Whether the accordion is expanded |
50
+
51
+ ## Events
52
+ | Event | Detail | Description |
53
+ |-------|--------|-------------|
54
+ | `open-change` | `boolean` | Fired when the accordion is toggled (detail is the new `open` state) |
55
+
56
+ ## Slots
57
+ | Slot | Description |
58
+ |------|-------------|
59
+ | (default) | Accordion body content |
60
+
61
+ ## CSS Parts
62
+ None exposed.
63
+
64
+ ## Tokens / CSS Variables
65
+
66
+ ### Semantic Tokens
67
+ - `--rel-fontFamilies-primary` - Font family
68
+
69
+ ### Font Tokens
70
+ - `--rel-fontSizes-lg` - Title font size (20px)
71
+ - `--rel-fontSizes-md` - Body font size (14px)
72
+ - `--rel-fontWeights-medium` - Title font weight (500)
73
+
74
+ ### Color Tokens
75
+ - `--rel-colors-white` - Background color
76
+ - `--rel-text-heading` - Title text color
77
+ - `--rel-text-primary` - Body text color, icon stroke color
78
+ - `--rel-border-default` - Border color
79
+ - `--rel-border-info` - Focus outline color
80
+
81
+ ### Shadow Tokens
82
+ - `--rel-shadows-shadow-100` - Shadow
83
+
84
+ ### Border Tokens
85
+ - `--rel-borders-radius-border-radius-200` - Border radius (8px)
86
+
87
+ ### Spacing Tokens
88
+ - `--rel-spacing-space-md` - Header horizontal padding, body horizontal padding in closed state (16px)
89
+ - `--rel-spacing-space-xl` - Body top padding when open (24px)
90
+ - `--rel-spacing-space-lg` - Body bottom padding when open (20px)
91
+
92
+ ## Accessibility
93
+ - Header uses `role="button"` and `aria-expanded` attribute
94
+ - Header is keyboard accessible with `tabindex="0"`
95
+ - Supports Enter and Space key activation
96
+ - Focus visible outline on keyboard focus
97
+
98
+ ### Keyboard Interactions
99
+ | Key | Action |
100
+ |-----|--------|
101
+ | `Enter` | Toggle accordion open/closed |
102
+ | `Space` | Toggle accordion open/closed |
103
+ | `Tab` | Navigate to/from the header |
104
+
105
+ ### Focus Behavior
106
+ - Header receives focus outline (`outline: 2px solid --rel-border-info`)
107
+ - Focus offset is `-2px` inset
108
+
109
+ ## Notes / Edge Cases
110
+ - **Animation details**:
111
+ - Chevron rotates 180° when open (`transform: rotate(180deg)`)
112
+ - Body expands from `max-height: 0` to `max-height: 1000px`
113
+ - Body padding animates from `0` to full padding when opening
114
+ - Transitions: `transform 0.25s ease`, `max-height 0.25s ease`, `padding 0.2s ease`
115
+
116
+ - **Reduced motion**: When `prefers-reduced-motion: reduce`, icon rotation and body transitions are disabled
117
+
118
+ - **Body rendering**: The slotted content is always in the DOM (not conditionally rendered), but hidden via `max-height: 0` and `overflow: hidden` when closed
119
+
120
+ - The header has hover styling (`background: --rel-surface-surface`)
121
+
122
+ - The component is `display: block` and `width: 100%`
123
+
124
+ - The accordion border is `1px solid` with rounded corners
125
+
126
+ - The chevron icon is an inline SVG (9-point downward-pointing chevron)
127
+
128
+ - When closed, the body has `padding: 0 var(--rel-spacing-space-md)` to maintain horizontal padding
129
+
130
+ - The `open` attribute is reflected in HTML when set
131
+
132
+ - Multiple accordions can be open simultaneously (no automatic closing of others)
@@ -1,24 +1,23 @@
1
1
  import { LitElement, html, css } from "lit";
2
- import { customElement, property, state } from "lit/decorators.js";
2
+ import { customElement, property } from "lit/decorators.js";
3
3
 
4
4
  @customElement("rel-accordion")
5
5
  export class RelAccordion extends LitElement {
6
6
  @property({ type: String }) title = "Accordion";
7
- @property({ type: Boolean }) open = false;
7
+ @property({ type: Boolean, reflect: true }) open = false;
8
8
 
9
9
  static styles = css`
10
10
  :host {
11
11
  display: block;
12
12
  width: 100%;
13
- font-family: var(--rel-fontFamilies-primary);
13
+ font-family: var(--rel-fontFamilies-primary, sans-serif);
14
14
  }
15
15
 
16
16
  .accordion {
17
- background: var(--rel-colors-white);
18
- border: 1px solid var(--rel-border-default);
19
- border-radius: var(--rel-borders-radius-border-radius-200); /* 8px */
17
+ background: var(--rel-colors-white, #fff);
18
+ border: 1px solid var(--rel-border-default, #ddd);
19
+ border-radius: var(--rel-borders-radius-border-radius-200, 8px);
20
20
  box-shadow: var(--rel-shadows-shadow-100);
21
- transition: all 0.2s ease;
22
21
  overflow: hidden;
23
22
  }
24
23
 
@@ -27,15 +26,25 @@ export class RelAccordion extends LitElement {
27
26
  display: flex;
28
27
  justify-content: space-between;
29
28
  align-items: center;
30
- padding: var(--rel-spacing-space-md); /* 16px */
29
+ padding: var(--rel-spacing-space-md, 16px);
31
30
  cursor: pointer;
32
31
  user-select: none;
32
+ border-radius: var(--rel-borders-radius-border-radius-200, 8px);
33
+ }
34
+
35
+ .header:hover {
36
+ background: var(--rel-surface-surface, #f5f5f5);
37
+ }
38
+
39
+ .header:focus-visible {
40
+ outline: 2px solid var(--rel-border-info, #0091ea);
41
+ outline-offset: -2px;
33
42
  }
34
43
 
35
44
  .title {
36
- font-size: var(--rel-fontSizes-lg); /* 20px */
37
- font-weight: var(--rel-fontWeights-medium);
38
- color: var(--rel-colors-black);
45
+ font-size: var(--rel-fontSizes-lg, 20px);
46
+ font-weight: var(--rel-fontWeights-medium, 500);
47
+ color: var(--rel-text-heading, #2b2b2b);
39
48
  }
40
49
 
41
50
  /* ICON ----------------------------------------------------- */
@@ -51,41 +60,51 @@ export class RelAccordion extends LitElement {
51
60
  .icon svg {
52
61
  width: 20px;
53
62
  height: 20px;
54
- stroke: var(--rel-colors-gray-primary);
63
+ stroke: var(--rel-text-primary, #333);
55
64
  stroke-width: 2;
56
65
  fill: none;
57
66
  stroke-linecap: round;
58
67
  stroke-linejoin: round;
59
68
  }
60
69
 
61
- .rotated {
70
+ .icon.rotated {
62
71
  transform: rotate(180deg);
63
72
  }
64
73
 
65
74
  /* BODY ------------------------------------------------------ */
66
75
  .body {
67
- padding: var(--rel-spacing-space-xl) var(--rel-spacing-space-md)
68
- var(--rel-spacing-space-lg);
69
- /* 24px 16px 20px */
70
- font-size: var(--rel-fontSizes-lg); /* 20px */
71
- color: var(--rel-colors-gray-primary);
72
- animation: fadeIn 0.2s ease;
76
+ overflow: hidden;
77
+ max-height: 0;
78
+ padding: 0 var(--rel-spacing-space-md, 16px);
79
+ font-size: var(--rel-fontSizes-md, 14px);
80
+ color: var(--rel-text-primary, #333);
81
+ transition: max-height 0.25s ease, padding 0.2s ease;
73
82
  }
74
83
 
75
- @keyframes fadeIn {
76
- from {
77
- opacity: 0;
78
- transform: translateY(-4px);
79
- }
80
- to {
81
- opacity: 1;
82
- transform: translateY(0);
84
+ .body.open {
85
+ max-height: 1000px;
86
+ padding: var(--rel-spacing-space-xl, 24px) var(--rel-spacing-space-md, 16px)
87
+ var(--rel-spacing-space-lg, 20px);
88
+ }
89
+
90
+ @media (prefers-reduced-motion: reduce) {
91
+ .icon,
92
+ .body {
93
+ transition: none;
83
94
  }
84
95
  }
85
96
  `;
86
97
 
87
98
  private toggle() {
88
99
  this.open = !this.open;
100
+
101
+ this.dispatchEvent(
102
+ new CustomEvent<boolean>("open-change", {
103
+ detail: this.open,
104
+ bubbles: true,
105
+ composed: true,
106
+ })
107
+ );
89
108
  }
90
109
 
91
110
  private chevron() {
@@ -99,7 +118,17 @@ export class RelAccordion extends LitElement {
99
118
  render() {
100
119
  return html`
101
120
  <div class="accordion">
102
- <div class="header" @click=${this.toggle}>
121
+ <div class="header"
122
+ role="button"
123
+ tabindex="0"
124
+ aria-expanded="${this.open}"
125
+ @click=${this.toggle}
126
+ @keydown=${(e: KeyboardEvent) => {
127
+ if (e.key === "Enter" || e.key === " ") {
128
+ e.preventDefault();
129
+ this.toggle();
130
+ }
131
+ }}>
103
132
  <div class="title">${this.title}</div>
104
133
 
105
134
  <div class="icon ${this.open ? "rotated" : ""}">
@@ -107,7 +136,10 @@ export class RelAccordion extends LitElement {
107
136
  </div>
108
137
  </div>
109
138
 
110
- ${this.open ? html`<div class="body"><slot></slot></div>` : ""}
139
+ <!-- IMPORTANT: slot is ALWAYS rendered -->
140
+ <div class="body ${this.open ? "open" : ""}">
141
+ <slot></slot>
142
+ </div>
111
143
  </div>
112
144
  `;
113
145
  }
@@ -0,0 +1,141 @@
1
+ # rel-alert
2
+
3
+ ## Overview
4
+ A versatile alert component for displaying informational, success, warning, error, or neutral messages. Features built-in icons, optional dismissibility, secondary message text, and inline links. Automatically hides when dismissed via the `dismissed` reflected attribute.
5
+
6
+ ## Usage
7
+ ```html
8
+ <!-- Basic neutral alert -->
9
+ <rel-alert
10
+ message1="This is a neutral alert"
11
+ type="neutral">
12
+ </rel-alert>
13
+
14
+ <!-- Info alert with secondary message -->
15
+ <rel-alert
16
+ type="info"
17
+ message1="System Notification"
18
+ message2="Your settings have been updated successfully.">
19
+ </rel-alert>
20
+
21
+ <!-- Success alert -->
22
+ <rel-alert
23
+ type="success"
24
+ message1="Operation Completed"
25
+ message2="Your data has been saved.">
26
+ </rel-alert>
27
+
28
+ <!-- Warning alert -->
29
+ <rel-alert
30
+ type="warning"
31
+ message1="Warning"
32
+ message2="Please verify your input before continuing.">
33
+ </rel-alert>
34
+
35
+ <!-- Error alert -->
36
+ <rel-alert
37
+ type="error"
38
+ message1="Error Occurred"
39
+ message2="Unable to process your request.">
40
+ </rel-alert>
41
+
42
+ <!-- With action link -->
43
+ <rel-alert
44
+ type="info"
45
+ message1="Update Available"
46
+ message2="A new version is ready."
47
+ urlText="Learn More"
48
+ urlHref="https://example.com/release-notes">
49
+ </rel-alert>
50
+
51
+ <!-- Non-dismissible -->
52
+ <rel-alert
53
+ type="warning"
54
+ message1="Required Action"
55
+ dismissible="false">
56
+ </rel-alert>
57
+
58
+ <!-- Listen for dismiss -->
59
+ <rel-alert id="myAlert" type="success" message1="Success!"></rel-alert>
60
+ <script>
61
+ const alert = document.getElementById('myAlert');
62
+ alert.addEventListener('dismiss', () => {
63
+ console.log('Alert was dismissed');
64
+ });
65
+ </script>
66
+ ```
67
+
68
+ ## API
69
+
70
+ ### Attributes/Properties
71
+ | Name | Type | Default | Description |
72
+ |------|------|---------|-------------|
73
+ | `type` | `"info" \| "success" \| "warning" \| "error" \| "neutral"` | `"neutral"` | Alert type determining icon and color scheme |
74
+ | `message1` | `string` | `""` | Primary message text (bold) |
75
+ | `message2` | `string` | - | Optional secondary message text (smaller, slightly transparent) |
76
+ | `urlText` | `string` | - | Link text (shown below messages) |
77
+ | `urlHref` | `string` | - | Link URL (both `urlText` and `urlHref` required for link to show) |
78
+ | `dismissible` | `boolean` | `true` | Whether to show the close (✕) button |
79
+ | `dismissed` | `boolean` (reflected) | `false` | When true, hides the component via `:host([dismissed])` |
80
+
81
+ ## Events
82
+ | Event | Detail | Description |
83
+ |-------|--------|-------------|
84
+ | `dismiss` | None | Fired when the close button is clicked (sets `dismissed` to true) |
85
+
86
+ ## Slots
87
+ Default slot not used.
88
+
89
+ ## CSS Parts
90
+ None exposed.
91
+
92
+ ## Tokens / CSS Variables
93
+
94
+ ### Semantic Tokens
95
+ - `--rel-fontFamilies-primary` - Font family
96
+ - `--rel-fontSizes-md` - Primary message font size
97
+ - `--rel-fontSizes-sm` - Secondary message and link font size
98
+ - `--rel-fontWeights-medium` - Primary message and link font weight
99
+ - `--rel-fontWeights-semibold` - Used implicitly in link styling
100
+
101
+ ### Spacing Tokens
102
+ - `--rel-spacing-space-xs` - Gap between icon and content
103
+ - `--rel-spacing-space-sm` - Vertical padding
104
+ - `--rel-spacing-space-md` - Horizontal padding
105
+ - `--rel-spacing-space-2xs` - Close button padding
106
+
107
+ ### Color Tokens (by type)
108
+ - **info**: `--rel-background-info` (background), `--rel-text-info` (text), `--rel-icon-info` (icon)
109
+ - **success**: `--rel-background-success`, `--rel-text-success`, `--rel-icon-success`
110
+ - **warning**: `--rel-background-warning`, `--rel-text-warning`, `--rel-icon-warning`
111
+ - **error**: `--rel-background-error`, `--rel-text-error`, `--rel-icon-error`
112
+ - **neutral**: `--rel-colors-white` (background), `--rel-text-primary` (text), `--rel-colors-black` (icon), `--rel-border-default` (border)
113
+
114
+ ### Border Tokens
115
+ - `--rel-borders-radius-border-radius-200` - Border radius
116
+
117
+ ## Accessibility
118
+ - Uses `role="alert"` for screen reader announcements
119
+ - Close button has `aria-label="Dismiss"`
120
+ - Focus visible states on close button with 2px outline
121
+ - Secondary message has reduced opacity for visual hierarchy
122
+
123
+ ### Keyboard Interactions
124
+ - `Tab` - Focus the close button (if dismissible)
125
+ - `Space/Enter` - Dismiss the alert (when close button focused)
126
+
127
+ ### Focus Behavior
128
+ - Close button shows 2px outline matching the alert's text color with 2px offset
129
+ - Border radius applied to maintain visual consistency
130
+
131
+ ## Notes / Edge Cases
132
+ - Icons are built-in SVG graphics that change based on `type` (info: ℹ️, success: ✓, warning: ⚠️, error: ❗, neutral: ℹ️)
133
+ - Icon colors are controlled by type-specific `--rel-icon-*` tokens
134
+ - The alert has a minimum width of `360px`
135
+ - Both `urlText` and `urlHref` must be set for the link to appear
136
+ - Links inherit the alert's text color and are underlined
137
+ - `message2` has `opacity: 0.9` for subtle contrast with `message1`
138
+ - When `dismissed` is set to `true`, the component applies `display: none` via `:host([dismissed])`
139
+ - `dismissed` is a reflected attribute, meaning it appears in the HTML when true
140
+ - The close button is always positioned at the right edge via `margin-left: auto`
141
+ - Neutral type includes a 1px border while colored types do not