@reliability-design/web 1.0.3 → 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.
- package/dist/components/rel-accordion/README.md +132 -0
- package/dist/components/rel-accordion/rel-accordion.ts +43 -16
- package/dist/components/rel-alert/README.md +141 -0
- package/dist/components/rel-alert/rel-alert.ts +18 -7
- package/dist/components/rel-avatar/README.md +119 -0
- package/dist/components/rel-badge/README.md +86 -0
- package/dist/components/rel-badge/rel-badge.ts +6 -6
- package/dist/components/rel-breadcrumb/README.md +102 -0
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +12 -6
- package/dist/components/rel-button/README.md +130 -0
- package/dist/components/rel-calendar/README.md +109 -0
- package/dist/components/rel-calendar/index.ts +1 -0
- package/dist/components/rel-calendar/rel-calendar.ts +467 -0
- package/dist/components/rel-card/README.md +94 -0
- package/dist/components/rel-card/rel-card.ts +12 -3
- package/dist/components/rel-cardmedia/README.md +127 -0
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +14 -4
- package/dist/components/rel-carousel/README.md +166 -0
- package/dist/components/rel-carousel/index.ts +1 -0
- package/dist/components/rel-carousel/rel-carousel.ts +469 -0
- package/dist/components/rel-chart/README.md +286 -0
- package/dist/components/rel-chart/index.ts +1 -0
- package/dist/components/rel-chart/rel-chart.ts +736 -0
- package/dist/components/rel-checkbox/README.md +77 -0
- package/dist/components/rel-checkbox/rel-checkbox.ts +18 -10
- package/dist/components/rel-chip/README.md +114 -0
- package/dist/components/rel-chip/rel-chip.ts +20 -4
- package/dist/components/rel-container/README.md +99 -0
- package/dist/components/rel-date-picker/README.md +253 -0
- package/dist/components/rel-date-picker/index.ts +1 -0
- package/dist/components/rel-date-picker/rel-date-picker.ts +916 -0
- package/dist/components/rel-divider/README.md +100 -0
- package/dist/components/rel-drawer/README.md +200 -0
- package/dist/components/rel-drawer/index.ts +1 -0
- package/dist/components/rel-drawer/rel-drawer.ts +621 -0
- package/dist/components/rel-kbd/README.md +151 -0
- package/dist/components/rel-kbd/rel-kbd.ts +118 -0
- package/dist/components/rel-layout/README.md +88 -0
- package/dist/components/rel-menu/README.md +151 -0
- package/dist/components/rel-menu/rel-menu.ts +18 -10
- package/dist/components/rel-menubar/README.md +329 -0
- package/dist/components/rel-menubar/index.ts +2 -0
- package/dist/components/rel-menubar/rel-menubar-menu.ts +16 -0
- package/dist/components/rel-menubar/rel-menubar.ts +576 -0
- package/dist/components/rel-nav-menu/README.md +289 -0
- package/dist/components/rel-nav-menu/index.ts +3 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +143 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +53 -0
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +331 -0
- package/dist/components/rel-navbar/README.md +126 -0
- package/dist/components/rel-navbar/rel-navbar.ts +91 -0
- package/dist/components/rel-otp/README.md +440 -0
- package/dist/components/rel-otp/index.ts +1 -0
- package/dist/components/rel-otp/rel-otp.ts +504 -0
- package/dist/components/rel-pagination/README.md +410 -0
- package/dist/components/rel-pagination/index.ts +1 -0
- package/dist/components/rel-pagination/rel-pagination.ts +376 -0
- package/dist/components/rel-popover/README.md +568 -0
- package/dist/components/rel-popover/index.ts +2 -0
- package/dist/components/rel-popover/rel-popover-content.ts +55 -0
- package/dist/components/rel-popover/rel-popover.ts +327 -0
- package/dist/components/rel-progress/README.md +110 -0
- package/dist/components/rel-progress/rel-progress.ts +32 -5
- package/dist/components/rel-quote-page/README.md +166 -0
- package/dist/components/rel-quote-page/rel-quote-page.ts +816 -0
- package/dist/components/rel-radio/README.md +120 -0
- package/dist/components/rel-radio/rel-radio.ts +13 -5
- package/dist/components/rel-resizable/README.md +140 -0
- package/dist/components/rel-resizable/index.ts +3 -0
- package/dist/components/rel-resizable/rel-resizable-group.ts +374 -0
- package/dist/components/rel-resizable/rel-resizable-handle.ts +149 -0
- package/dist/components/rel-resizable/rel-resizable-panel.ts +47 -0
- package/dist/components/rel-segmented-button/README.md +141 -0
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +18 -13
- package/dist/components/rel-select/README.md +107 -0
- package/dist/components/rel-select/rel-select.ts +14 -14
- package/dist/components/rel-sheet/README.md +224 -0
- package/dist/components/rel-sheet/rel-sheet.ts +683 -0
- package/dist/components/rel-sidebar/README.md +209 -0
- package/dist/components/rel-sidebar/rel-sidebar.ts +1158 -0
- package/dist/components/rel-slider/README.md +135 -0
- package/dist/components/rel-slider/rel-slider.ts +19 -7
- package/dist/components/rel-snackbar/README.md +134 -0
- package/dist/components/rel-snackbar/rel-snackbar.ts +67 -2
- package/dist/components/rel-stepper/README.md +160 -0
- package/dist/components/rel-stepper/rel-stepper.ts +6 -6
- package/dist/components/rel-switch/README.md +102 -0
- package/dist/components/rel-switch/rel-switch.ts +15 -6
- package/dist/components/rel-tab/README.md +163 -0
- package/dist/components/rel-tab/rel-tab.ts +36 -14
- package/dist/components/rel-table/README.md +178 -0
- package/dist/components/rel-table/rel-table-body.ts +16 -0
- package/dist/components/rel-table/rel-table-caption.ts +22 -0
- package/dist/components/rel-table/rel-table-cell.ts +49 -0
- package/dist/components/rel-table/rel-table-footer.ts +18 -0
- package/dist/components/rel-table/rel-table-head.ts +33 -0
- package/dist/components/rel-table/rel-table-header.ts +16 -0
- package/dist/components/rel-table/rel-table-row.ts +32 -0
- package/dist/components/rel-table/rel-table.ts +47 -0
- package/dist/components/rel-textfield/README.md +90 -0
- package/dist/components/rel-textfield/rel-textfield.ts +35 -19
- package/dist/components/rel-toast/README.md +148 -0
- package/dist/components/rel-toast/rel-toast.ts +32 -14
- package/dist/components/rel-tooltip/README.md +103 -0
- package/dist/components/rel-tooltip/rel-tooltip.ts +9 -9
- package/dist/index.d.mts +836 -1
- package/dist/index.d.ts +836 -1
- package/dist/index.js +10658 -1493
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10616 -1499
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +293 -183
- package/dist/{vars-6ZIUPIU4.css → vars-ITL2K3KO.css} +293 -183
- package/package.json +1 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# rel-sheet
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
A slide-in panel component system with multiple helper components. Features four slide directions (top, right, bottom, left), configurable sizes, modal/non-modal modes, focus trapping, scroll locking, and optional overlay. Built with composition: `rel-sheet` (controller), `rel-sheet-trigger` (opener), `rel-sheet-content` (panel), and layout helpers (`rel-sheet-header`, `rel-sheet-footer`, `rel-sheet-title`, `rel-sheet-description`, `rel-sheet-close`).
|
|
5
|
+
|
|
6
|
+
## Components
|
|
7
|
+
- **`<rel-sheet>`**: Root wrapper that manages open state
|
|
8
|
+
- **`<rel-sheet-trigger>`**: Button to open the sheet
|
|
9
|
+
- **`<rel-sheet-content>`**: Slide-in panel with all visual elements
|
|
10
|
+
- **`<rel-sheet-header>`**: Header layout helper with bottom border
|
|
11
|
+
- **`<rel-sheet-footer>`**: Footer layout helper with top border
|
|
12
|
+
- **`<rel-sheet-title>`**: Title text (auto-linked to `aria-labelledby`)
|
|
13
|
+
- **`<rel-sheet-description>`**: Description text (auto-linked to `aria-describedby`)
|
|
14
|
+
- **`<rel-sheet-close>`**: Custom close button wrapper
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
```html
|
|
18
|
+
<!-- Basic right-side sheet -->
|
|
19
|
+
<rel-sheet>
|
|
20
|
+
<rel-sheet-trigger>
|
|
21
|
+
<button>Open Settings</button>
|
|
22
|
+
</rel-sheet-trigger>
|
|
23
|
+
|
|
24
|
+
<rel-sheet-content>
|
|
25
|
+
<rel-sheet-header>
|
|
26
|
+
<rel-sheet-title>Settings</rel-sheet-title>
|
|
27
|
+
<rel-sheet-description>Configure your preferences</rel-sheet-description>
|
|
28
|
+
</rel-sheet-header>
|
|
29
|
+
|
|
30
|
+
<p>Sheet content goes here...</p>
|
|
31
|
+
|
|
32
|
+
<rel-sheet-footer>
|
|
33
|
+
<rel-sheet-close>
|
|
34
|
+
<button>Cancel</button>
|
|
35
|
+
</rel-sheet-close>
|
|
36
|
+
<button>Save</button>
|
|
37
|
+
</rel-sheet-footer>
|
|
38
|
+
</rel-sheet-content>
|
|
39
|
+
</rel-sheet>
|
|
40
|
+
|
|
41
|
+
<!-- Left-side sheet, large size -->
|
|
42
|
+
<rel-sheet>
|
|
43
|
+
<rel-sheet-trigger>
|
|
44
|
+
<button>Open Menu</button>
|
|
45
|
+
</rel-sheet-trigger>
|
|
46
|
+
|
|
47
|
+
<rel-sheet-content side="left" size="lg">
|
|
48
|
+
<nav>
|
|
49
|
+
<a href="#home">Home</a>
|
|
50
|
+
<a href="#about">About</a>
|
|
51
|
+
<a href="#contact">Contact</a>
|
|
52
|
+
</nav>
|
|
53
|
+
</rel-sheet-content>
|
|
54
|
+
</rel-sheet>
|
|
55
|
+
|
|
56
|
+
<!-- Bottom sheet without overlay -->
|
|
57
|
+
<rel-sheet defaultopen>
|
|
58
|
+
<rel-sheet-trigger>
|
|
59
|
+
<button>Toggle Bottom Sheet</button>
|
|
60
|
+
</rel-sheet-trigger>
|
|
61
|
+
|
|
62
|
+
<rel-sheet-content side="bottom" hide-overlay>
|
|
63
|
+
<p>Bottom sheet content</p>
|
|
64
|
+
</rel-sheet-content>
|
|
65
|
+
</rel-sheet>
|
|
66
|
+
|
|
67
|
+
<!-- Controlled state -->
|
|
68
|
+
<rel-sheet id="controlledSheet" open>
|
|
69
|
+
<rel-sheet-trigger>
|
|
70
|
+
<button>Open</button>
|
|
71
|
+
</rel-sheet-trigger>
|
|
72
|
+
|
|
73
|
+
<rel-sheet-content>
|
|
74
|
+
<p>This sheet is controlled externally</p>
|
|
75
|
+
</rel-sheet-content>
|
|
76
|
+
</rel-sheet>
|
|
77
|
+
<script>
|
|
78
|
+
const sheet = document.getElementById('controlledSheet');
|
|
79
|
+
sheet.addEventListener('rel-open-change', (e) => {
|
|
80
|
+
console.log('Sheet open:', e.detail.open);
|
|
81
|
+
console.log('Reason:', e.detail.reason);
|
|
82
|
+
});
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<!-- Without built-in close button -->
|
|
86
|
+
<rel-sheet>
|
|
87
|
+
<rel-sheet-trigger>
|
|
88
|
+
<button>Open</button>
|
|
89
|
+
</rel-sheet-trigger>
|
|
90
|
+
|
|
91
|
+
<rel-sheet-content show-close="false">
|
|
92
|
+
<p>Custom close handling</p>
|
|
93
|
+
<rel-sheet-close>
|
|
94
|
+
<button>Close Me</button>
|
|
95
|
+
</rel-sheet-close>
|
|
96
|
+
</rel-sheet-content>
|
|
97
|
+
</rel-sheet>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## API
|
|
101
|
+
|
|
102
|
+
### rel-sheet Properties
|
|
103
|
+
| Name | Type | Default | Description |
|
|
104
|
+
|------|------|---------|-------------|
|
|
105
|
+
| `open` (reflected) | `boolean?` | `undefined` | Controlled open state |
|
|
106
|
+
| `defaultopen` | `boolean` | `false` | Default open state (uncontrolled) |
|
|
107
|
+
| `disabled` | `boolean` | `false` | Disable trigger |
|
|
108
|
+
| `modal` | `boolean` | `true` | Enable modal behavior (focus trap) |
|
|
109
|
+
|
|
110
|
+
### rel-sheet-content Properties
|
|
111
|
+
| Name | Type | Default | Description |
|
|
112
|
+
|------|------|---------|-------------|
|
|
113
|
+
| `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | Which side the sheet slides from |
|
|
114
|
+
| `size` | `"sm" \| "md" \| "lg" \| "xl"` | `"md"` | Sheet width/height (320/420/540/640px) |
|
|
115
|
+
| `hide-overlay` | `boolean` | `false` | Hide the backdrop overlay |
|
|
116
|
+
| `close-on-overlay` | `boolean` | `true` | Allow closing by clicking overlay |
|
|
117
|
+
| `show-close` | `boolean` | `true` | Show built-in close button (✕) |
|
|
118
|
+
|
|
119
|
+
## Events
|
|
120
|
+
| Event | Detail | Description |
|
|
121
|
+
|-------|--------|-------------|
|
|
122
|
+
| `rel-open-change` | `{ open, reason }` | Fired when sheet opens/closes |
|
|
123
|
+
|
|
124
|
+
### Close Reasons
|
|
125
|
+
- `"trigger"`: Toggled via trigger button
|
|
126
|
+
- `"close"`: Closed via close button
|
|
127
|
+
- `"overlay"`: Closed by clicking overlay
|
|
128
|
+
- `"escape"`: Closed via Escape key
|
|
129
|
+
- `"api"`: Changed via `setOpen()` method
|
|
130
|
+
|
|
131
|
+
## Methods
|
|
132
|
+
|
|
133
|
+
### Sheet Methods
|
|
134
|
+
```typescript
|
|
135
|
+
sheet.setOpen(nextOpen: boolean, reason?: string): void
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Slots
|
|
139
|
+
| Slot | Component | Description |
|
|
140
|
+
|------|-----------|-------------|
|
|
141
|
+
| (default) | `rel-sheet` | Trigger and content elements |
|
|
142
|
+
| (default) | `rel-sheet-trigger` | Trigger button/element |
|
|
143
|
+
| (default) | `rel-sheet-content` | Panel content |
|
|
144
|
+
| (default) | Layout helpers | Content within headers/footers/titles |
|
|
145
|
+
|
|
146
|
+
## CSS Parts
|
|
147
|
+
| Part | Description |
|
|
148
|
+
|------|-------------|
|
|
149
|
+
| `overlay` | Backdrop overlay element |
|
|
150
|
+
| `panel` | Main panel container |
|
|
151
|
+
|
|
152
|
+
## Tokens / CSS Variables
|
|
153
|
+
|
|
154
|
+
### Size Tokens (defined on `<rel-sheet-content>`)
|
|
155
|
+
- `--sheet-size-sm`: `320px`
|
|
156
|
+
- `--sheet-size-md`: `420px`
|
|
157
|
+
- `--sheet-size-lg`: `540px`
|
|
158
|
+
- `--sheet-size-xl`: `640px`
|
|
159
|
+
|
|
160
|
+
### Transition Tokens
|
|
161
|
+
- `--sheet-transition-duration`: `0.3s`
|
|
162
|
+
- `--sheet-transition-timing`: `cubic-bezier(0.32, 0.72, 0, 1)`
|
|
163
|
+
|
|
164
|
+
### Color Tokens
|
|
165
|
+
- `--rel-colors-white` - Panel background
|
|
166
|
+
- `--rel-colors-gray-heading` - Title and close button color
|
|
167
|
+
- `--rel-colors-gray-body` - Description color
|
|
168
|
+
- `--rel-colors-gray-surface` - Close button hover background
|
|
169
|
+
- `--rel-colors-gray-border` - Header/footer borders
|
|
170
|
+
- `--rel-overlay-scrim` - Overlay background
|
|
171
|
+
- `--rel-colors-primary-500` - Close button focus outline
|
|
172
|
+
|
|
173
|
+
### Shadow Tokens
|
|
174
|
+
- `--rel-shadows-shadow-500` - Panel shadow
|
|
175
|
+
|
|
176
|
+
### Border Tokens
|
|
177
|
+
- `--rel-borders-radius-border-radius-300` - Panel border radius (top corners for bottom, etc.)
|
|
178
|
+
|
|
179
|
+
### Spacing Tokens
|
|
180
|
+
- `--rel-spacing-space-lg` - Panel content padding
|
|
181
|
+
- `--rel-spacing-space-md` - Header/footer padding, close button positioning
|
|
182
|
+
- `--rel-spacing-space-xs` - Close button padding
|
|
183
|
+
|
|
184
|
+
## Accessibility
|
|
185
|
+
- Panel uses `role="dialog"` and `aria-modal`
|
|
186
|
+
- Auto-links `aria-labelledby` to `<rel-sheet-title>`
|
|
187
|
+
- Auto-links `aria-describedby` to `<rel-sheet-description>`
|
|
188
|
+
- Focus trap in modal mode
|
|
189
|
+
- Escape key closes sheet
|
|
190
|
+
- Restores focus to trigger on close
|
|
191
|
+
|
|
192
|
+
### Keyboard Interactions
|
|
193
|
+
| Key | Action |
|
|
194
|
+
|-----|--------|
|
|
195
|
+
| `Escape` | Close sheet |
|
|
196
|
+
| `Tab` | Focus trap within sheet (modal mode only) |
|
|
197
|
+
|
|
198
|
+
### Focus Behavior
|
|
199
|
+
- On open, focuses first focusable element (or panel if none found)
|
|
200
|
+
- Focus trapped within panel in modal mode
|
|
201
|
+
- On close, restores focus to trigger button
|
|
202
|
+
|
|
203
|
+
## Notes / Edge Cases
|
|
204
|
+
- **Side positioning and transforms**:
|
|
205
|
+
- **right**: Slides in from right edge, `translateX(100%)` to `translateX(0)`
|
|
206
|
+
- **left**: Slides in from left edge, `translateX(-100%)` to `translateX(0)`
|
|
207
|
+
- **bottom**: Slides in from bottom, `translateY(100%)` to `translateY(0)`
|
|
208
|
+
- **top**: Slides in from top, `translateY(-100%)` to `translateY(0)`
|
|
209
|
+
|
|
210
|
+
- **Size constraints**:
|
|
211
|
+
- Left/right: `max-width: 90vw`
|
|
212
|
+
- Top/bottom: `max-height: 80vh`
|
|
213
|
+
|
|
214
|
+
- **Scroll locking**: Body scroll is locked when sheet is open (with scrollbar width compensation)
|
|
215
|
+
- **Close button position**: Top-right by default, but top-left for `side="left"`
|
|
216
|
+
- **Reduced motion**: Transitions disabled, panel hidden via `display: none` instead of transform
|
|
217
|
+
- The sheet root uses `display: contents`
|
|
218
|
+
- Panel is overlaid with `z-index: 1000`, fixed position
|
|
219
|
+
- Overlay detection for `aria-labelledby`/`aria-describedby` happens automatically based on slotted `<rel-sheet-title>` and `<rel-sheet-description>` elements
|
|
220
|
+
- Built-in close button is "✕" character at font-size 20px
|
|
221
|
+
|
|
222
|
+
### Controlled vs Uncontrolled
|
|
223
|
+
- If `open` prop is set, the sheet is controlled and won't manage its own state
|
|
224
|
+
- Use `rel-open-change` event to sync controlled state
|