@birdycom/omniaui 0.11.0 → 0.11.1
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/LICENSE +21 -21
- package/README.md +21 -21
- package/bin/lib/add.mjs +126 -126
- package/bin/lib/catalog.mjs +169 -169
- package/bin/lib/project.mjs +90 -90
- package/bin/omniaui.mjs +69 -69
- package/dist/code-block.css +25 -25
- package/dist/components-extra.css +916 -914
- package/dist/components.css +6559 -6469
- package/dist/components.min.css +1 -1
- package/dist/data-table.d.ts +9 -9
- package/dist/data-table.js +505 -505
- package/dist/docs-ui.css +267 -265
- package/dist/oc-theme.css +69 -69
- package/dist/parts/app-accordion-accent.css +60 -60
- package/dist/parts/app-alpha-tabs.css +68 -68
- package/dist/parts/app-busy-overlay.css +25 -25
- package/dist/parts/app-column-menu.css +85 -85
- package/dist/parts/app-confirm-dialog.css +70 -70
- package/dist/parts/app-cookie-consent.css +63 -63
- package/dist/parts/app-data-table.css +174 -174
- package/dist/parts/app-greeting.css +47 -47
- package/dist/parts/app-list-toolbar.css +81 -81
- package/dist/parts/app-page-header.css +54 -54
- package/dist/parts/app-severity-card.css +91 -91
- package/dist/parts/app-sidebar-dark.css +15 -15
- package/dist/parts/app-sortable-row.css +52 -52
- package/dist/parts/app-stat-card.css +68 -68
- package/dist/parts/app-table-actions.css +71 -71
- package/dist/parts/app-table-compact.css +54 -54
- package/dist/parts/app-top-progress.css +68 -68
- package/dist/parts/app-tree.css +104 -104
- package/dist/parts/app-upgrade-banner.css +90 -90
- package/dist/parts/app-version-banner.css +80 -80
- package/dist/parts/data-chart-line.css +167 -167
- package/dist/parts/forms-affix-input.css +75 -75
- package/dist/parts/forms-barcode-input.css +75 -75
- package/dist/parts/forms-chip-filter.css +91 -91
- package/dist/parts/forms-color-select.css +97 -89
- package/dist/parts/forms-decimal-input.css +51 -51
- package/dist/parts/forms-filter-counts.css +94 -94
- package/dist/parts/forms-language-select.css +89 -76
- package/dist/parts/forms-number-input.css +98 -95
- package/dist/parts/forms-password-requirements.css +55 -55
- package/dist/parts/forms-phone-input.css +85 -85
- package/dist/parts/forms-time-input.css +74 -74
- package/dist/parts/forms-toggle-field.css +69 -69
- package/dist/parts/media-art.css +21 -21
- package/dist/parts/media-attachment.css +160 -160
- package/dist/parts/media-browser-frame.css +73 -73
- package/dist/parts/media-card.css +83 -83
- package/dist/parts/media-chat-composer.css +90 -90
- package/dist/parts/media-doc-viewer.css +151 -151
- package/dist/parts/media-emoji-picker.css +88 -88
- package/dist/parts/media-entity-card.css +52 -52
- package/dist/parts/media-flip-card.css +78 -78
- package/dist/parts/media-image-zoom.css +68 -68
- package/dist/parts/media-lightbox.css +131 -131
- package/dist/parts/media-message-thread.css +136 -136
- package/dist/parts/media-message.css +160 -160
- package/dist/parts/media-row.css +78 -78
- package/dist/parts/media-stack-card.css +82 -82
- package/dist/parts/media-terminal-log.css +76 -76
- package/dist/parts/media-thumb.css +71 -71
- package/dist/parts/site-fact-list.css +25 -25
- package/dist/parts/site-link-arrow.css +34 -34
- package/dist/parts/site-marquee.css +34 -34
- package/dist/parts/site-next-teaser.css +75 -75
- package/dist/parts/site-price-card.css +91 -75
- package/dist/parts/site-product-mark.css +66 -66
- package/dist/parts/site-project-card.css +111 -111
- package/dist/parts/site-prose.css +124 -124
- package/dist/parts/site-stack-list.css +48 -48
- package/dist/parts/site-timeline.css +54 -54
- package/dist/showcase.css +404 -404
- package/package.json +69 -69
- package/snippets/accordion-accent.html +24 -24
- package/snippets/accordion.html +11 -11
- package/snippets/affix-input.html +30 -30
- package/snippets/alert-dialog.html +22 -22
- package/snippets/alert.html +5 -5
- package/snippets/alpha-tabs.html +37 -37
- package/snippets/aspect-ratio.html +15 -15
- package/snippets/attachment.html +43 -43
- package/snippets/avatar.html +6 -6
- package/snippets/back-link.html +5 -5
- package/snippets/badge.html +5 -5
- package/snippets/barcode-input.html +18 -18
- package/snippets/breadcrumb.html +6 -6
- package/snippets/browser-frame.html +18 -18
- package/snippets/busy-overlay.html +31 -31
- package/snippets/button-group.html +21 -21
- package/snippets/button.html +8 -8
- package/snippets/calendar.html +43 -43
- package/snippets/card.html +17 -17
- package/snippets/carousel.html +21 -21
- package/snippets/chart-line.html +46 -46
- package/snippets/chart.html +27 -27
- package/snippets/chat-composer.html +21 -21
- package/snippets/checkbox.html +5 -5
- package/snippets/checklist.html +23 -23
- package/snippets/chip-filter.html +14 -14
- package/snippets/code-window.html +20 -20
- package/snippets/collapsible.html +19 -19
- package/snippets/color-field.html +13 -13
- package/snippets/color-select.html +18 -18
- package/snippets/column-menu.html +38 -38
- package/snippets/combobox.html +19 -19
- package/snippets/command.html +24 -24
- package/snippets/confirm-dialog.html +32 -32
- package/snippets/context-menu.html +25 -25
- package/snippets/cookie-consent.html +70 -70
- package/snippets/copy-field.html +19 -19
- package/snippets/counter.html +2 -2
- package/snippets/data-table.html +151 -151
- package/snippets/date-picker.html +32 -32
- package/snippets/decimal-input.html +20 -20
- package/snippets/definition-list.html +20 -20
- package/snippets/demo-panel.html +18 -18
- package/snippets/doc-viewer.html +58 -58
- package/snippets/drawer.html +30 -30
- package/snippets/dropdown-menu.html +27 -27
- package/snippets/dropdown.html +9 -9
- package/snippets/dropzone.html +13 -13
- package/snippets/emoji-picker.html +51 -51
- package/snippets/empty-state.html +17 -17
- package/snippets/entity-card.html +26 -26
- package/snippets/expandable-table.html +26 -26
- package/snippets/fact-list.html +14 -14
- package/snippets/filter-counts.html +30 -30
- package/snippets/flip-card.html +22 -22
- package/snippets/form-field.html +6 -6
- package/snippets/greeting.html +22 -22
- package/snippets/heading.html +14 -14
- package/snippets/hover-card.html +18 -18
- package/snippets/image-zoom.html +30 -30
- package/snippets/input-group.html +10 -10
- package/snippets/input.html +5 -5
- package/snippets/item.html +26 -26
- package/snippets/kbd.html +13 -13
- package/snippets/label.html +9 -9
- package/snippets/language-select.html +26 -26
- package/snippets/launcher-card.html +14 -14
- package/snippets/lightbox.html +50 -50
- package/snippets/link-arrow.html +10 -10
- package/snippets/list-toolbar.html +33 -33
- package/snippets/marquee.html +15 -15
- package/snippets/media-card.html +28 -28
- package/snippets/media-row.html +21 -21
- package/snippets/media-thumb.html +12 -12
- package/snippets/menubar.html +30 -30
- package/snippets/message-thread.html +123 -123
- package/snippets/message.html +51 -51
- package/snippets/modal.html +15 -15
- package/snippets/native-select.html +15 -15
- package/snippets/navmenu.html +23 -23
- package/snippets/next-teaser.html +15 -15
- package/snippets/number-input.html +27 -27
- package/snippets/otp-input.html +9 -9
- package/snippets/page-header.html +24 -24
- package/snippets/pagination.html +6 -6
- package/snippets/password-input.html +24 -24
- package/snippets/password-requirements.html +30 -30
- package/snippets/phone-input.html +22 -22
- package/snippets/popover.html +15 -15
- package/snippets/price-card.html +34 -34
- package/snippets/product-mark.html +13 -13
- package/snippets/progress.html +4 -4
- package/snippets/project-card.html +23 -23
- package/snippets/prose.html +54 -54
- package/snippets/radio.html +17 -17
- package/snippets/recovery-codes.html +20 -20
- package/snippets/resizable.html +16 -16
- package/snippets/scroll-area.html +20 -20
- package/snippets/search.html +8 -8
- package/snippets/segmented.html +11 -11
- package/snippets/select.html +7 -7
- package/snippets/separator.html +15 -15
- package/snippets/severity-card.html +35 -35
- package/snippets/sheet.html +32 -32
- package/snippets/sidebar-docs.html +24 -24
- package/snippets/sidebar.html +55 -55
- package/snippets/site-footer.html +6 -6
- package/snippets/site-header.html +26 -26
- package/snippets/skeleton.html +4 -4
- package/snippets/slider.html +17 -17
- package/snippets/sortable-row.html +31 -31
- package/snippets/spinner.html +14 -14
- package/snippets/stack-card.html +17 -17
- package/snippets/stack-list.html +16 -16
- package/snippets/stat-card.html +24 -24
- package/snippets/stepper.html +13 -13
- package/snippets/switch.html +6 -6
- package/snippets/table-actions.html +39 -39
- package/snippets/table-compact.html +24 -24
- package/snippets/table.html +29 -29
- package/snippets/tabs.html +9 -9
- package/snippets/tag-input.html +60 -17
- package/snippets/terminal-log.html +23 -23
- package/snippets/textarea.html +3 -3
- package/snippets/theme-switch.html +6 -6
- package/snippets/time-input.html +26 -26
- package/snippets/timeline.html +28 -28
- package/snippets/toast-stack.html +10 -10
- package/snippets/toast.html +36 -36
- package/snippets/toc.html +13 -13
- package/snippets/toggle-field.html +20 -20
- package/snippets/toggle.html +22 -22
- package/snippets/tooltip.html +4 -4
- package/snippets/top-progress.html +12 -12
- package/snippets/tree.html +38 -38
- package/snippets/upgrade-banner.html +28 -28
- package/snippets/user.html +15 -15
- package/snippets/version-banner.html +15 -15
package/snippets/chart.html
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
<!-- OmniaUI component: chart - Chart tokens --oc-chart-1..5 (light-dark Omnia colors) with legend, bar and pie helpers. Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
--oc-chart-1 .. --oc-chart-5: series colors (blue, teal, orange, purple, pink); --oc-chart-grid, --oc-chart-axis
|
|
4
|
-
.oc-chart-legend > li > .oc-chart-swatch: legend (swatch colors by position)
|
|
5
|
-
.oc-chart-bars > *: bar per item, height from --oc-bar
|
|
6
|
-
.oc-chart-pie (+ --donut): conic-gradient pie; stops set inline
|
|
7
|
-
-->
|
|
8
|
-
<div style="display:flex;gap:2rem;flex-wrap:wrap;align-items:flex-end">
|
|
9
|
-
<div style="flex:1 1 16rem">
|
|
10
|
-
<ul class="oc-chart-bars" role="img" aria-label="Revenue by quarter: 40, 65, 50, 85 percent of target">
|
|
11
|
-
<li style="--oc-bar:40%"></li><li style="--oc-bar:65%"></li><li style="--oc-bar:50%"></li><li style="--oc-bar:85%"></li>
|
|
12
|
-
</ul>
|
|
13
|
-
<ul class="oc-chart-legend" style="margin-top:.75rem">
|
|
14
|
-
<li><span class="oc-chart-swatch"></span>Q1</li><li><span class="oc-chart-swatch"></span>Q2</li><li><span class="oc-chart-swatch"></span>Q3</li><li><span class="oc-chart-swatch"></span>Q4</li>
|
|
15
|
-
</ul>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="oc-chart-pie oc-chart-pie--donut" role="img" aria-label="Share: 40, 25, 17, 18 percent"></div>
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
<svg viewBox="0 0 220 80" width="220" height="80" role="img" aria-label="Line chart with two series">
|
|
21
|
-
<path d="M0 60 L40 45 L80 50 L120 25 L160 30 L220 10" fill="none" stroke="var(--oc-chart-1)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
22
|
-
<path d="M0 70 L40 65 L80 55 L120 58 L160 40 L220 35" fill="none" stroke="var(--oc-chart-2)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
23
|
-
<path d="M0 78 H220" stroke="var(--oc-chart-grid)"/>
|
|
24
|
-
</svg>
|
|
25
|
-
<span class="oc-badge" style="background:var(--oc-chart-3);color:var(--oc-primary-foreground)">chart-3</span>
|
|
26
|
-
<span class="oc-badge" style="background:var(--oc-chart-4);color:var(--oc-primary-foreground)">chart-4</span>
|
|
27
|
-
<span class="oc-badge" style="background:var(--oc-chart-5);color:var(--oc-primary-foreground)">chart-5</span>
|
|
1
|
+
<!-- OmniaUI component: chart - Chart tokens --oc-chart-1..5 (light-dark Omnia colors) with legend, bar and pie helpers. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
--oc-chart-1 .. --oc-chart-5: series colors (blue, teal, orange, purple, pink); --oc-chart-grid, --oc-chart-axis
|
|
4
|
+
.oc-chart-legend > li > .oc-chart-swatch: legend (swatch colors by position)
|
|
5
|
+
.oc-chart-bars > *: bar per item, height from --oc-bar
|
|
6
|
+
.oc-chart-pie (+ --donut): conic-gradient pie; stops set inline
|
|
7
|
+
-->
|
|
8
|
+
<div style="display:flex;gap:2rem;flex-wrap:wrap;align-items:flex-end">
|
|
9
|
+
<div style="flex:1 1 16rem">
|
|
10
|
+
<ul class="oc-chart-bars" role="img" aria-label="Revenue by quarter: 40, 65, 50, 85 percent of target">
|
|
11
|
+
<li style="--oc-bar:40%"></li><li style="--oc-bar:65%"></li><li style="--oc-bar:50%"></li><li style="--oc-bar:85%"></li>
|
|
12
|
+
</ul>
|
|
13
|
+
<ul class="oc-chart-legend" style="margin-top:.75rem">
|
|
14
|
+
<li><span class="oc-chart-swatch"></span>Q1</li><li><span class="oc-chart-swatch"></span>Q2</li><li><span class="oc-chart-swatch"></span>Q3</li><li><span class="oc-chart-swatch"></span>Q4</li>
|
|
15
|
+
</ul>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="oc-chart-pie oc-chart-pie--donut" role="img" aria-label="Share: 40, 25, 17, 18 percent"></div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<svg viewBox="0 0 220 80" width="220" height="80" role="img" aria-label="Line chart with two series">
|
|
21
|
+
<path d="M0 60 L40 45 L80 50 L120 25 L160 30 L220 10" fill="none" stroke="var(--oc-chart-1)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
22
|
+
<path d="M0 70 L40 65 L80 55 L120 58 L160 40 L220 35" fill="none" stroke="var(--oc-chart-2)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
23
|
+
<path d="M0 78 H220" stroke="var(--oc-chart-grid)"/>
|
|
24
|
+
</svg>
|
|
25
|
+
<span class="oc-badge" style="background:var(--oc-chart-3);color:var(--oc-primary-foreground)">chart-3</span>
|
|
26
|
+
<span class="oc-badge" style="background:var(--oc-chart-4);color:var(--oc-primary-foreground)">chart-4</span>
|
|
27
|
+
<span class="oc-badge" style="background:var(--oc-chart-5);color:var(--oc-primary-foreground)">chart-5</span>
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
<!-- OmniaUI component: chat-composer — Chat message field with a toolbar and a send button in one frame. Needs @birdycom/omniaui CSS.
|
|
2
|
-
File: packages/ui/snippets/chat-composer.html | Map: form -> textarea -> bar (tools, hint, send)
|
|
3
|
-
Class API: form.oc-chat-composer > textarea.oc-chat-composer__input (placeholder + required) · .oc-chat-composer__bar >
|
|
4
|
-
.oc-chat-composer__tools > button.oc-chat-composer__tool · .oc-chat-composer__hint · button.oc-chat-composer__send (type=submit).
|
|
5
|
-
Modifiers: .oc-chat-composer--inline (one row). States: :focus-within ring; send is dimmed while the field is empty
|
|
6
|
-
(:placeholder-shown) or :disabled. The textarea grows with its content (field-sizing). No JavaScript needed.
|
|
7
|
-
Tip: put an emoji-picker trigger in the tools (see emoji-picker).
|
|
8
|
-
-->
|
|
9
|
-
<form class="oc-chat-composer" action="#" style="max-inline-size:32rem">
|
|
10
|
-
<label class="oc-visually-hidden" for="oc-chat-input">Message</label>
|
|
11
|
-
<textarea class="oc-chat-composer__input" id="oc-chat-input" name="message" rows="1" placeholder="Write a message…" required></textarea>
|
|
12
|
-
<div class="oc-chat-composer__bar">
|
|
13
|
-
<div class="oc-chat-composer__tools">
|
|
14
|
-
<button type="button" class="oc-chat-composer__tool" aria-label="Attach a file">📎</button>
|
|
15
|
-
<button type="button" class="oc-chat-composer__tool" aria-label="Mention someone">@</button>
|
|
16
|
-
<button type="button" class="oc-chat-composer__tool" aria-label="Insert emoji">🙂</button>
|
|
17
|
-
</div>
|
|
18
|
-
<span class="oc-chat-composer__hint">Enter for a new line</span>
|
|
19
|
-
<button type="submit" class="oc-chat-composer__send" aria-label="Send">➤</button>
|
|
20
|
-
</div>
|
|
21
|
-
</form>
|
|
1
|
+
<!-- OmniaUI component: chat-composer — Chat message field with a toolbar and a send button in one frame. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/chat-composer.html | Map: form -> textarea -> bar (tools, hint, send)
|
|
3
|
+
Class API: form.oc-chat-composer > textarea.oc-chat-composer__input (placeholder + required) · .oc-chat-composer__bar >
|
|
4
|
+
.oc-chat-composer__tools > button.oc-chat-composer__tool · .oc-chat-composer__hint · button.oc-chat-composer__send (type=submit).
|
|
5
|
+
Modifiers: .oc-chat-composer--inline (one row). States: :focus-within ring; send is dimmed while the field is empty
|
|
6
|
+
(:placeholder-shown) or :disabled. The textarea grows with its content (field-sizing). No JavaScript needed.
|
|
7
|
+
Tip: put an emoji-picker trigger in the tools (see emoji-picker).
|
|
8
|
+
-->
|
|
9
|
+
<form class="oc-chat-composer" action="#" style="max-inline-size:32rem">
|
|
10
|
+
<label class="oc-visually-hidden" for="oc-chat-input">Message</label>
|
|
11
|
+
<textarea class="oc-chat-composer__input" id="oc-chat-input" name="message" rows="1" placeholder="Write a message…" required></textarea>
|
|
12
|
+
<div class="oc-chat-composer__bar">
|
|
13
|
+
<div class="oc-chat-composer__tools">
|
|
14
|
+
<button type="button" class="oc-chat-composer__tool" aria-label="Attach a file">📎</button>
|
|
15
|
+
<button type="button" class="oc-chat-composer__tool" aria-label="Mention someone">@</button>
|
|
16
|
+
<button type="button" class="oc-chat-composer__tool" aria-label="Insert emoji">🙂</button>
|
|
17
|
+
</div>
|
|
18
|
+
<span class="oc-chat-composer__hint">Enter for a new line</span>
|
|
19
|
+
<button type="submit" class="oc-chat-composer__send" aria-label="Send">➤</button>
|
|
20
|
+
</div>
|
|
21
|
+
</form>
|
package/snippets/checkbox.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!-- OmniaUI component: checkbox - Checkbox and radio. Needs @birdycom/omniaui CSS.
|
|
2
|
-
-->
|
|
3
|
-
<label><input class="oc-checkbox" type="checkbox" checked> Send me updates</label>
|
|
4
|
-
<label><input class="oc-radio" type="radio" name="oc-plan" checked> Monthly</label>
|
|
5
|
-
<label><input class="oc-radio" type="radio" name="oc-plan"> Yearly</label>
|
|
1
|
+
<!-- OmniaUI component: checkbox - Checkbox and radio. Needs @birdycom/omniaui CSS.
|
|
2
|
+
-->
|
|
3
|
+
<label><input class="oc-checkbox" type="checkbox" checked> Send me updates</label>
|
|
4
|
+
<label><input class="oc-radio" type="radio" name="oc-plan" checked> Monthly</label>
|
|
5
|
+
<label><input class="oc-radio" type="radio" name="oc-plan"> Yearly</label>
|
package/snippets/checklist.html
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
<!-- OmniaUI component: checklist - Rule / step list with met and unmet states (password rules, onboarding). Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
.oc-checklist: ul wrapper (use aria-live="polite" for live rules). Modifier: --card (bordered rows with action slot).
|
|
4
|
-
.oc-checklist-item: Row. State: .is-done / aria-checked="true"
|
|
5
|
-
.oc-checklist-text / -title / -hint: Text column, title and hint (card variant)
|
|
6
|
-
-->
|
|
7
|
-
<ul class="oc-checklist" aria-live="polite" aria-label="Password requirements">
|
|
8
|
-
<li class="oc-checklist-item is-done">At least 12 characters</li>
|
|
9
|
-
<li class="oc-checklist-item is-done">One uppercase letter</li>
|
|
10
|
-
<li class="oc-checklist-item">One number</li>
|
|
11
|
-
<li class="oc-checklist-item">One symbol</li>
|
|
12
|
-
</ul>
|
|
13
|
-
|
|
14
|
-
<ul class="oc-checklist oc-checklist--card" style="margin-top:1rem">
|
|
15
|
-
<li class="oc-checklist-item is-done">
|
|
16
|
-
<span class="oc-checklist-text"><span class="oc-checklist-title">Add company details</span><span class="oc-checklist-hint">Name, VAT number, address</span></span>
|
|
17
|
-
<a class="oc-btn oc-btn--outline oc-btn--sm" href="#">Open</a>
|
|
18
|
-
</li>
|
|
19
|
-
<li class="oc-checklist-item">
|
|
20
|
-
<span class="oc-checklist-text"><span class="oc-checklist-title">Connect your bank</span><span class="oc-checklist-hint">Import transactions automatically</span></span>
|
|
21
|
-
<a class="oc-btn oc-btn--outline oc-btn--sm" href="#">Open</a>
|
|
22
|
-
</li>
|
|
23
|
-
</ul>
|
|
1
|
+
<!-- OmniaUI component: checklist - Rule / step list with met and unmet states (password rules, onboarding). Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-checklist: ul wrapper (use aria-live="polite" for live rules). Modifier: --card (bordered rows with action slot).
|
|
4
|
+
.oc-checklist-item: Row. State: .is-done / aria-checked="true"
|
|
5
|
+
.oc-checklist-text / -title / -hint: Text column, title and hint (card variant)
|
|
6
|
+
-->
|
|
7
|
+
<ul class="oc-checklist" aria-live="polite" aria-label="Password requirements">
|
|
8
|
+
<li class="oc-checklist-item is-done">At least 12 characters</li>
|
|
9
|
+
<li class="oc-checklist-item is-done">One uppercase letter</li>
|
|
10
|
+
<li class="oc-checklist-item">One number</li>
|
|
11
|
+
<li class="oc-checklist-item">One symbol</li>
|
|
12
|
+
</ul>
|
|
13
|
+
|
|
14
|
+
<ul class="oc-checklist oc-checklist--card" style="margin-top:1rem">
|
|
15
|
+
<li class="oc-checklist-item is-done">
|
|
16
|
+
<span class="oc-checklist-text"><span class="oc-checklist-title">Add company details</span><span class="oc-checklist-hint">Name, VAT number, address</span></span>
|
|
17
|
+
<a class="oc-btn oc-btn--outline oc-btn--sm" href="#">Open</a>
|
|
18
|
+
</li>
|
|
19
|
+
<li class="oc-checklist-item">
|
|
20
|
+
<span class="oc-checklist-text"><span class="oc-checklist-title">Connect your bank</span><span class="oc-checklist-hint">Import transactions automatically</span></span>
|
|
21
|
+
<a class="oc-btn oc-btn--outline oc-btn--sm" href="#">Open</a>
|
|
22
|
+
</li>
|
|
23
|
+
</ul>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<!-- OmniaUI component: chip-filter - Rounded filter chips (checkboxes for several, radios for one) - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
-
File: packages/ui/snippets/chip-filter.html | Map: group (fieldset) -> one label per chip (checkbox + text + optional count)
|
|
3
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
-
.oc-chip-filter: Group (a <fieldset> or role="group"/"radiogroup"). Modifiers: --scroll (one line, scrolls sideways), --sm.
|
|
5
|
-
.oc-chip-filter-item: Pill label around one checkbox or radio input
|
|
6
|
-
.oc-chip-filter-count: Optional count bubble inside a chip
|
|
7
|
-
States: checked (tinted primary), :focus-visible (outline), disabled (faded)
|
|
8
|
-
-->
|
|
9
|
-
<fieldset class="oc-chip-filter" aria-label="Filter by type">
|
|
10
|
-
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="video" checked> Video <span class="oc-chip-filter-count">24</span></label>
|
|
11
|
-
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="audio"> Audio <span class="oc-chip-filter-count">8</span></label>
|
|
12
|
-
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="image" checked> Images <span class="oc-chip-filter-count">112</span></label>
|
|
13
|
-
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="docs" disabled> Documents <span class="oc-chip-filter-count">0</span></label>
|
|
14
|
-
</fieldset>
|
|
1
|
+
<!-- OmniaUI component: chip-filter - Rounded filter chips (checkboxes for several, radios for one) - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/chip-filter.html | Map: group (fieldset) -> one label per chip (checkbox + text + optional count)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-chip-filter: Group (a <fieldset> or role="group"/"radiogroup"). Modifiers: --scroll (one line, scrolls sideways), --sm.
|
|
5
|
+
.oc-chip-filter-item: Pill label around one checkbox or radio input
|
|
6
|
+
.oc-chip-filter-count: Optional count bubble inside a chip
|
|
7
|
+
States: checked (tinted primary), :focus-visible (outline), disabled (faded)
|
|
8
|
+
-->
|
|
9
|
+
<fieldset class="oc-chip-filter" aria-label="Filter by type">
|
|
10
|
+
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="video" checked> Video <span class="oc-chip-filter-count">24</span></label>
|
|
11
|
+
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="audio"> Audio <span class="oc-chip-filter-count">8</span></label>
|
|
12
|
+
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="image" checked> Images <span class="oc-chip-filter-count">112</span></label>
|
|
13
|
+
<label class="oc-chip-filter-item"><input type="checkbox" name="type" value="docs" disabled> Documents <span class="oc-chip-filter-count">0</span></label>
|
|
14
|
+
</fieldset>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<!-- OmniaUI component: code-window - Window frame around code, with a copy button. Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API: .oc-code-window · .oc-code-window__bar (+ <i> dots) · .oc-code-window__title · .oc-code-window__body (plain code) or .oc-code-block (highlighted) ·
|
|
3
|
-
.oc-code-copy (button; add .is-copied after copying). The one-line script below does the copy; everything else is CSS.
|
|
4
|
-
-->
|
|
5
|
-
<div class="oc-code-window">
|
|
6
|
-
<div class="oc-code-window__bar">
|
|
7
|
-
<i></i><i></i><i></i>
|
|
8
|
-
<span class="oc-code-window__title">index.html</span>
|
|
9
|
-
<button type="button" class="oc-code-copy" data-oc-copy="#oc-sample-code">Copy</button>
|
|
10
|
-
</div>
|
|
11
|
-
<pre class="oc-code-window__body"><code id="oc-sample-code"><link rel="stylesheet" href="omnia.css">
|
|
12
|
-
<button class="oc-btn">Hello</button></code></pre>
|
|
13
|
-
</div>
|
|
14
|
-
<script>
|
|
15
|
-
document.addEventListener("click", async (e) => {
|
|
16
|
-
const b = e.target.closest("[data-oc-copy]"); if (!b) return;
|
|
17
|
-
await navigator.clipboard.writeText(document.querySelector(b.dataset.ocCopy).textContent);
|
|
18
|
-
b.classList.add("is-copied"); b.textContent = "Copied"; setTimeout(() => { b.classList.remove("is-copied"); b.textContent = "Copy"; }, 1500);
|
|
19
|
-
});
|
|
20
|
-
</script>
|
|
1
|
+
<!-- OmniaUI component: code-window - Window frame around code, with a copy button. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API: .oc-code-window · .oc-code-window__bar (+ <i> dots) · .oc-code-window__title · .oc-code-window__body (plain code) or .oc-code-block (highlighted) ·
|
|
3
|
+
.oc-code-copy (button; add .is-copied after copying). The one-line script below does the copy; everything else is CSS.
|
|
4
|
+
-->
|
|
5
|
+
<div class="oc-code-window">
|
|
6
|
+
<div class="oc-code-window__bar">
|
|
7
|
+
<i></i><i></i><i></i>
|
|
8
|
+
<span class="oc-code-window__title">index.html</span>
|
|
9
|
+
<button type="button" class="oc-code-copy" data-oc-copy="#oc-sample-code">Copy</button>
|
|
10
|
+
</div>
|
|
11
|
+
<pre class="oc-code-window__body"><code id="oc-sample-code"><link rel="stylesheet" href="omnia.css">
|
|
12
|
+
<button class="oc-btn">Hello</button></code></pre>
|
|
13
|
+
</div>
|
|
14
|
+
<script>
|
|
15
|
+
document.addEventListener("click", async (e) => {
|
|
16
|
+
const b = e.target.closest("[data-oc-copy]"); if (!b) return;
|
|
17
|
+
await navigator.clipboard.writeText(document.querySelector(b.dataset.ocCopy).textContent);
|
|
18
|
+
b.classList.add("is-copied"); b.textContent = "Copied"; setTimeout(() => { b.classList.remove("is-copied"); b.textContent = "Copy"; }, 1500);
|
|
19
|
+
});
|
|
20
|
+
</script>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
<!-- OmniaUI component: collapsible - Card-style details/summary form section with icon, title and chevron. Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
details.oc-collapsible: Root. Modifier: --dense (compact paddings).
|
|
4
|
-
summary: Header row with .oc-collapsible-icon + .oc-collapsible-title; the chevron is CSS
|
|
5
|
-
.oc-collapsible-content: Body with a top border
|
|
6
|
-
Slots: icon, title (summary), content (default)
|
|
7
|
-
-->
|
|
8
|
-
<details class="oc-collapsible" open>
|
|
9
|
-
<summary>
|
|
10
|
-
<svg class="oc-collapsible-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 8h.01"/></svg>
|
|
11
|
-
<span class="oc-collapsible-title">General information</span>
|
|
12
|
-
</summary>
|
|
13
|
-
<div class="oc-collapsible-content">
|
|
14
|
-
<div class="oc-field">
|
|
15
|
-
<label class="oc-field-label" for="oc-collapsible-name">Name</label>
|
|
16
|
-
<input class="oc-input" id="oc-collapsible-name" value="Birdy Systems BV">
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</details>
|
|
1
|
+
<!-- OmniaUI component: collapsible - Card-style details/summary form section with icon, title and chevron. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
details.oc-collapsible: Root. Modifier: --dense (compact paddings).
|
|
4
|
+
summary: Header row with .oc-collapsible-icon + .oc-collapsible-title; the chevron is CSS
|
|
5
|
+
.oc-collapsible-content: Body with a top border
|
|
6
|
+
Slots: icon, title (summary), content (default)
|
|
7
|
+
-->
|
|
8
|
+
<details class="oc-collapsible" open>
|
|
9
|
+
<summary>
|
|
10
|
+
<svg class="oc-collapsible-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 8h.01"/></svg>
|
|
11
|
+
<span class="oc-collapsible-title">General information</span>
|
|
12
|
+
</summary>
|
|
13
|
+
<div class="oc-collapsible-content">
|
|
14
|
+
<div class="oc-field">
|
|
15
|
+
<label class="oc-field-label" for="oc-collapsible-name">Name</label>
|
|
16
|
+
<input class="oc-input" id="oc-collapsible-name" value="Birdy Systems BV">
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</details>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<!-- OmniaUI component: color-field - Native color picker next to a hex text input. Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
.oc-color-field: Row wrapper
|
|
4
|
-
input[type=color]: Native picker swatch
|
|
5
|
-
.oc-input: Text field with the value (monospaced)
|
|
6
|
-
-->
|
|
7
|
-
<div class="oc-field">
|
|
8
|
-
<label class="oc-field-label" for="oc-color-demo">Brand color</label>
|
|
9
|
-
<div class="oc-color-field">
|
|
10
|
-
<input type="color" id="oc-color-demo" value="#3366cc" aria-label="Pick a color">
|
|
11
|
-
<input class="oc-input" type="text" value="#3366cc" aria-label="Color value">
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
1
|
+
<!-- OmniaUI component: color-field - Native color picker next to a hex text input. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-color-field: Row wrapper
|
|
4
|
+
input[type=color]: Native picker swatch
|
|
5
|
+
.oc-input: Text field with the value (monospaced)
|
|
6
|
+
-->
|
|
7
|
+
<div class="oc-field">
|
|
8
|
+
<label class="oc-field-label" for="oc-color-demo">Brand color</label>
|
|
9
|
+
<div class="oc-color-field">
|
|
10
|
+
<input type="color" id="oc-color-demo" value="#3366cc" aria-label="Pick a color">
|
|
11
|
+
<input class="oc-input" type="text" value="#3366cc" aria-label="Color value">
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<!-- OmniaUI component: color-select - Pick one color from round swatches (or a list with names). Needs @birdycom/omniaui CSS.
|
|
2
|
-
File: packages/ui/snippets/color-select.html | Map: fieldset group -> one label per color (radio + swatch + name)
|
|
3
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
-
.oc-color-select: Group (a <fieldset> or role="radiogroup"). Modifiers: --list (rows with names), --sm.
|
|
5
|
-
.oc-color-select-option: Label around one radio. Set the color with style="--oc-swatch: var(--color-...)".
|
|
6
|
-
.oc-color-select-swatch: Round color dot
|
|
7
|
-
.oc-color-select-name: Color name (visible in --list, screen-reader only in the swatch grid)
|
|
8
|
-
States: checked (double ring), :focus-visible (outline), disabled (faded)
|
|
9
|
-
Only Omnia palette tokens as colors, e.g. var(--color-red-70) or var(--oc-primary).
|
|
10
|
-
-->
|
|
11
|
-
<fieldset class="oc-color-select" role="radiogroup" aria-label="Label color">
|
|
12
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-vividblue-95)"><input type="radio" name="color" value="blue" checked><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Blue</span></label>
|
|
13
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-teal-80)"><input type="radio" name="color" value="teal"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Teal</span></label>
|
|
14
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-green-60)"><input type="radio" name="color" value="green"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Green</span></label>
|
|
15
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-orange-95)"><input type="radio" name="color" value="orange"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Orange</span></label>
|
|
16
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-red-70)"><input type="radio" name="color" value="red"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Red</span></label>
|
|
17
|
-
<label class="oc-color-select-option" style="--oc-swatch: var(--color-purple-40)"><input type="radio" name="color" value="purple"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Purple</span></label>
|
|
18
|
-
</fieldset>
|
|
1
|
+
<!-- OmniaUI component: color-select - Pick one color from round swatches (or a list with names). Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/color-select.html | Map: fieldset group -> one label per color (radio + swatch + name)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-color-select: Group (a <fieldset> or role="radiogroup"). Modifiers: --list (rows with names), --sm.
|
|
5
|
+
.oc-color-select-option: Label around one radio. Set the color with style="--oc-swatch: var(--color-...)".
|
|
6
|
+
.oc-color-select-swatch: Round color dot
|
|
7
|
+
.oc-color-select-name: Color name (visible in --list, screen-reader only in the swatch grid)
|
|
8
|
+
States: checked (double ring), :focus-visible (outline), disabled (faded + diagonal line; add a title such as "Purple, in use")
|
|
9
|
+
Only Omnia palette tokens as colors, e.g. var(--color-red-70) or var(--oc-primary).
|
|
10
|
+
-->
|
|
11
|
+
<fieldset class="oc-color-select" role="radiogroup" aria-label="Label color">
|
|
12
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-vividblue-95)"><input type="radio" name="color" value="blue" checked><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Blue</span></label>
|
|
13
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-teal-80)"><input type="radio" name="color" value="teal"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Teal</span></label>
|
|
14
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-green-60)"><input type="radio" name="color" value="green"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Green</span></label>
|
|
15
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-orange-95)"><input type="radio" name="color" value="orange"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Orange</span></label>
|
|
16
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-red-70)"><input type="radio" name="color" value="red"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Red</span></label>
|
|
17
|
+
<label class="oc-color-select-option" style="--oc-swatch: var(--color-purple-40)"><input type="radio" name="color" value="purple"><span class="oc-color-select-swatch"></span><span class="oc-color-select-name">Purple</span></label>
|
|
18
|
+
</fieldset>
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
<!-- OmniaUI component: column-menu - Column visibility checklist in a popover; hides table columns with :has() - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
-
File: packages/ui/snippets/column-menu.html | Map: scope -> toolbar with trigger -> popover (title, form with checkboxes, reset) -> table
|
|
3
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
-
.oc-column-menu-scope: Wrapper around menu + table. An unchecked [data-col="n"] hides column n (1-10) of the .oc-table inside.
|
|
5
|
-
.oc-column-menu[popover]: Popover panel, opened with button[popovertarget]
|
|
6
|
-
.oc-column-menu-title: Small heading
|
|
7
|
-
form.oc-column-menu-list: The checkbox list (a form, so button type="reset" restores the defaults)
|
|
8
|
-
.oc-column-menu-item: label + input[type=checkbox][data-col]. State: input disabled = locked column.
|
|
9
|
-
.oc-column-menu-footer: Row for Reset / Done buttons
|
|
10
|
-
Slots: title, one item per column, footer buttons
|
|
11
|
-
-->
|
|
12
|
-
<div class="oc-column-menu-scope">
|
|
13
|
-
<div class="oc-table-toolbar">
|
|
14
|
-
<span class="oc-table-toolbar-spacer"></span>
|
|
15
|
-
<button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-column-menu-demo">Columns</button>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="oc-column-menu" id="oc-column-menu-demo" popover>
|
|
18
|
-
<p class="oc-column-menu-title">Visible columns</p>
|
|
19
|
-
<form class="oc-column-menu-list">
|
|
20
|
-
<label class="oc-column-menu-item"><input type="checkbox" data-col="1" checked disabled> Name</label>
|
|
21
|
-
<label class="oc-column-menu-item"><input type="checkbox" data-col="2" checked> E-mail</label>
|
|
22
|
-
<label class="oc-column-menu-item"><input type="checkbox" data-col="3" checked> City</label>
|
|
23
|
-
<label class="oc-column-menu-item"><input type="checkbox" data-col="4"> Phone</label>
|
|
24
|
-
<div class="oc-column-menu-footer">
|
|
25
|
-
<button class="oc-btn oc-btn--ghost oc-btn--sm" type="reset">Reset</button>
|
|
26
|
-
</div>
|
|
27
|
-
</form>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="oc-table-wrap">
|
|
30
|
-
<table class="oc-table">
|
|
31
|
-
<thead><tr><th>Name</th><th>E-mail</th><th>City</th><th>Phone</th></tr></thead>
|
|
32
|
-
<tbody>
|
|
33
|
-
<tr><td>Ada Lovelace</td><td>ada@example.com</td><td>London</td><td>+44 20 7946 0001</td></tr>
|
|
34
|
-
<tr><td>Alan Turing</td><td>alan@example.com</td><td>Manchester</td><td>+44 161 496 0002</td></tr>
|
|
35
|
-
</tbody>
|
|
36
|
-
</table>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
1
|
+
<!-- OmniaUI component: column-menu - Column visibility checklist in a popover; hides table columns with :has() - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/column-menu.html | Map: scope -> toolbar with trigger -> popover (title, form with checkboxes, reset) -> table
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-column-menu-scope: Wrapper around menu + table. An unchecked [data-col="n"] hides column n (1-10) of the .oc-table inside.
|
|
5
|
+
.oc-column-menu[popover]: Popover panel, opened with button[popovertarget]
|
|
6
|
+
.oc-column-menu-title: Small heading
|
|
7
|
+
form.oc-column-menu-list: The checkbox list (a form, so button type="reset" restores the defaults)
|
|
8
|
+
.oc-column-menu-item: label + input[type=checkbox][data-col]. State: input disabled = locked column.
|
|
9
|
+
.oc-column-menu-footer: Row for Reset / Done buttons
|
|
10
|
+
Slots: title, one item per column, footer buttons
|
|
11
|
+
-->
|
|
12
|
+
<div class="oc-column-menu-scope">
|
|
13
|
+
<div class="oc-table-toolbar">
|
|
14
|
+
<span class="oc-table-toolbar-spacer"></span>
|
|
15
|
+
<button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-column-menu-demo">Columns</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="oc-column-menu" id="oc-column-menu-demo" popover>
|
|
18
|
+
<p class="oc-column-menu-title">Visible columns</p>
|
|
19
|
+
<form class="oc-column-menu-list">
|
|
20
|
+
<label class="oc-column-menu-item"><input type="checkbox" data-col="1" checked disabled> Name</label>
|
|
21
|
+
<label class="oc-column-menu-item"><input type="checkbox" data-col="2" checked> E-mail</label>
|
|
22
|
+
<label class="oc-column-menu-item"><input type="checkbox" data-col="3" checked> City</label>
|
|
23
|
+
<label class="oc-column-menu-item"><input type="checkbox" data-col="4"> Phone</label>
|
|
24
|
+
<div class="oc-column-menu-footer">
|
|
25
|
+
<button class="oc-btn oc-btn--ghost oc-btn--sm" type="reset">Reset</button>
|
|
26
|
+
</div>
|
|
27
|
+
</form>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="oc-table-wrap">
|
|
30
|
+
<table class="oc-table">
|
|
31
|
+
<thead><tr><th>Name</th><th>E-mail</th><th>City</th><th>Phone</th></tr></thead>
|
|
32
|
+
<tbody>
|
|
33
|
+
<tr><td>Ada Lovelace</td><td>ada@example.com</td><td>London</td><td>+44 20 7946 0001</td></tr>
|
|
34
|
+
<tr><td>Alan Turing</td><td>alan@example.com</td><td>Manchester</td><td>+44 161 496 0002</td></tr>
|
|
35
|
+
</tbody>
|
|
36
|
+
</table>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
package/snippets/combobox.html
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
<!-- OmniaUI component: combobox - Combobox: input + listbox styling (filtering and selection are wrapper responsibility). Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
.oc-combobox: wrapper (list opens on :focus-within or [data-open])
|
|
4
|
-
input.oc-input.oc-combobox-input: role="combobox" aria-expanded aria-controls aria-autocomplete="list"
|
|
5
|
-
ul.oc-combobox-list: role="listbox"
|
|
6
|
-
li.oc-combobox-option: role="option" tabindex="-1"; aria-selected="true" shows a check; [data-active] marks the keyboard-active option
|
|
7
|
-
.oc-combobox-group / .oc-combobox-empty: group heading and empty message
|
|
8
|
-
-->
|
|
9
|
-
<div class="oc-combobox">
|
|
10
|
-
<input class="oc-input oc-combobox-input" type="text" role="combobox" aria-expanded="false" aria-controls="oc-cb-list" aria-autocomplete="list" placeholder="Select framework…" aria-label="Framework">
|
|
11
|
-
<ul class="oc-combobox-list" id="oc-cb-list" role="listbox" aria-label="Frameworks">
|
|
12
|
-
<li class="oc-combobox-option" role="option" tabindex="-1">Astro</li>
|
|
13
|
-
<li class="oc-combobox-option" role="option" tabindex="-1" aria-selected="true">Laravel</li>
|
|
14
|
-
<li class="oc-combobox-option" role="option" tabindex="-1">Nuxt</li>
|
|
15
|
-
<li class="oc-combobox-option" role="option" tabindex="-1">React</li>
|
|
16
|
-
<li class="oc-combobox-option" role="option" tabindex="-1" aria-disabled="true">Svelte (soon)</li>
|
|
17
|
-
<li class="oc-combobox-option" role="option" tabindex="-1">Vue</li>
|
|
18
|
-
</ul>
|
|
19
|
-
</div>
|
|
1
|
+
<!-- OmniaUI component: combobox - Combobox: input + listbox styling (filtering and selection are wrapper responsibility). Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-combobox: wrapper (list opens on :focus-within or [data-open])
|
|
4
|
+
input.oc-input.oc-combobox-input: role="combobox" aria-expanded aria-controls aria-autocomplete="list"
|
|
5
|
+
ul.oc-combobox-list: role="listbox"
|
|
6
|
+
li.oc-combobox-option: role="option" tabindex="-1"; aria-selected="true" shows a check; [data-active] marks the keyboard-active option
|
|
7
|
+
.oc-combobox-group / .oc-combobox-empty: group heading and empty message
|
|
8
|
+
-->
|
|
9
|
+
<div class="oc-combobox">
|
|
10
|
+
<input class="oc-input oc-combobox-input" type="text" role="combobox" aria-expanded="false" aria-controls="oc-cb-list" aria-autocomplete="list" placeholder="Select framework…" aria-label="Framework">
|
|
11
|
+
<ul class="oc-combobox-list" id="oc-cb-list" role="listbox" aria-label="Frameworks">
|
|
12
|
+
<li class="oc-combobox-option" role="option" tabindex="-1">Astro</li>
|
|
13
|
+
<li class="oc-combobox-option" role="option" tabindex="-1" aria-selected="true">Laravel</li>
|
|
14
|
+
<li class="oc-combobox-option" role="option" tabindex="-1">Nuxt</li>
|
|
15
|
+
<li class="oc-combobox-option" role="option" tabindex="-1">React</li>
|
|
16
|
+
<li class="oc-combobox-option" role="option" tabindex="-1" aria-disabled="true">Svelte (soon)</li>
|
|
17
|
+
<li class="oc-combobox-option" role="option" tabindex="-1">Vue</li>
|
|
18
|
+
</ul>
|
|
19
|
+
</div>
|
package/snippets/command.html
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<!-- OmniaUI component: command - Command palette / searchable list styling (filter logic in a wrapper). Needs @birdycom/omniaui CSS.
|
|
2
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
-
.oc-command: Root
|
|
4
|
-
.oc-command-input: Search input
|
|
5
|
-
.oc-command-list: Results ul
|
|
6
|
-
.oc-command-group-label: Group heading
|
|
7
|
-
.oc-command-item: Result. State: aria-selected="true", aria-disabled="true", hidden
|
|
8
|
-
.oc-command-shortcut: Keyboard hint on the right
|
|
9
|
-
.oc-command-separator: Divider
|
|
10
|
-
.oc-command-empty: Shown when nothing matches
|
|
11
|
-
-->
|
|
12
|
-
<div class="oc-command" role="combobox" aria-expanded="true" aria-haspopup="listbox">
|
|
13
|
-
<input class="oc-command-input" type="search" placeholder="Type a command or search..." aria-label="Search commands">
|
|
14
|
-
<ul class="oc-command-list" role="listbox">
|
|
15
|
-
<li class="oc-command-group-label" role="presentation">Suggestions</li>
|
|
16
|
-
<li class="oc-command-item" role="option" aria-selected="true">New invoice <span class="oc-command-shortcut">Ctrl N</span></li>
|
|
17
|
-
<li class="oc-command-item" role="option">Open contacts</li>
|
|
18
|
-
<li class="oc-command-separator" role="separator"></li>
|
|
19
|
-
<li class="oc-command-group-label" role="presentation">Settings</li>
|
|
20
|
-
<li class="oc-command-item" role="option">Appearance</li>
|
|
21
|
-
<li class="oc-command-item" role="option" aria-disabled="true">Billing</li>
|
|
22
|
-
</ul>
|
|
23
|
-
<div class="oc-command-empty" hidden>No results found.</div>
|
|
24
|
-
</div>
|
|
1
|
+
<!-- OmniaUI component: command - Command palette / searchable list styling (filter logic in a wrapper). Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-command: Root
|
|
4
|
+
.oc-command-input: Search input
|
|
5
|
+
.oc-command-list: Results ul
|
|
6
|
+
.oc-command-group-label: Group heading
|
|
7
|
+
.oc-command-item: Result. State: aria-selected="true", aria-disabled="true", hidden
|
|
8
|
+
.oc-command-shortcut: Keyboard hint on the right
|
|
9
|
+
.oc-command-separator: Divider
|
|
10
|
+
.oc-command-empty: Shown when nothing matches
|
|
11
|
+
-->
|
|
12
|
+
<div class="oc-command" role="combobox" aria-expanded="true" aria-haspopup="listbox">
|
|
13
|
+
<input class="oc-command-input" type="search" placeholder="Type a command or search..." aria-label="Search commands">
|
|
14
|
+
<ul class="oc-command-list" role="listbox">
|
|
15
|
+
<li class="oc-command-group-label" role="presentation">Suggestions</li>
|
|
16
|
+
<li class="oc-command-item" role="option" aria-selected="true">New invoice <span class="oc-command-shortcut">Ctrl N</span></li>
|
|
17
|
+
<li class="oc-command-item" role="option">Open contacts</li>
|
|
18
|
+
<li class="oc-command-separator" role="separator"></li>
|
|
19
|
+
<li class="oc-command-group-label" role="presentation">Settings</li>
|
|
20
|
+
<li class="oc-command-item" role="option">Appearance</li>
|
|
21
|
+
<li class="oc-command-item" role="option" aria-disabled="true">Billing</li>
|
|
22
|
+
</ul>
|
|
23
|
+
<div class="oc-command-empty" hidden>No results found.</div>
|
|
24
|
+
</div>
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
<!-- OmniaUI component: confirm-dialog - Alert dialog variant: icon ring, close button, typed confirmation and a discard action - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
-
File: packages/ui/snippets/confirm-dialog.html | Map: trigger -> dialog -> content (close, icon ring, title, form: message, typed field, footer)
|
|
3
|
-
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
-
dialog.oc-modal + .oc-modal-content.oc-alert-dialog.oc-alert-dialog--<type>: The alert dialog (types: success, error, warning, info, question)
|
|
5
|
-
.oc-alert-dialog--confirm: Confirm variant on the content box (larger thin icon ring, wider box, wrapping footer)
|
|
6
|
-
.oc-alert-dialog-close: X button in the top corner (command="close")
|
|
7
|
-
form.oc-alert-dialog-form[method=dialog]: Wraps body + footer; the submit button closes the dialog with its value as returnValue
|
|
8
|
-
.oc-alert-dialog-typed: Label + input with pattern="WORD" required; the browser blocks submit until it matches
|
|
9
|
-
.oc-alert-dialog-confirm: The confirm (submit) button; looks disabled while the typed value is invalid
|
|
10
|
-
.oc-alert-dialog-discard: Optional third action at the start of the footer ("Don't save")
|
|
11
|
-
Slots: icon, title, message, typed field (optional), footer buttons (discard, cancel, confirm)
|
|
12
|
-
-->
|
|
13
|
-
<button class="oc-btn oc-btn--destructive" type="button" command="show-modal" commandfor="oc-confirm-dialog-demo">Delete project</button>
|
|
14
|
-
|
|
15
|
-
<dialog class="oc-modal" id="oc-confirm-dialog-demo" closedby="any" aria-labelledby="oc-confirm-dialog-title" aria-describedby="oc-confirm-dialog-text">
|
|
16
|
-
<div class="oc-modal-content oc-alert-dialog oc-alert-dialog--error oc-alert-dialog--confirm">
|
|
17
|
-
<button class="oc-alert-dialog-close" type="button" command="close" commandfor="oc-confirm-dialog-demo" aria-label="Close">×</button>
|
|
18
|
-
<span class="oc-alert-dialog-icon" aria-hidden="true">×</span>
|
|
19
|
-
<h2 class="oc-modal-title" id="oc-confirm-dialog-title">Delete "Kitchen renovation"?</h2>
|
|
20
|
-
<form class="oc-alert-dialog-form" method="dialog">
|
|
21
|
-
<div class="oc-modal-body" id="oc-confirm-dialog-text">This removes the project, its quotes and all files. This cannot be undone.</div>
|
|
22
|
-
<label class="oc-alert-dialog-typed">
|
|
23
|
-
<span>Type <code>DELETE</code> to confirm</span>
|
|
24
|
-
<input class="oc-input" name="confirm" pattern="DELETE" required autocomplete="off">
|
|
25
|
-
</label>
|
|
26
|
-
<div class="oc-modal-footer">
|
|
27
|
-
<button class="oc-btn oc-btn--outline" type="button" command="close" commandfor="oc-confirm-dialog-demo">Cancel</button>
|
|
28
|
-
<button class="oc-btn oc-btn--destructive oc-alert-dialog-confirm" type="submit" value="confirm">Delete project</button>
|
|
29
|
-
</div>
|
|
30
|
-
</form>
|
|
31
|
-
</div>
|
|
32
|
-
</dialog>
|
|
1
|
+
<!-- OmniaUI component: confirm-dialog - Alert dialog variant: icon ring, close button, typed confirmation and a discard action - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/confirm-dialog.html | Map: trigger -> dialog -> content (close, icon ring, title, form: message, typed field, footer)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
dialog.oc-modal + .oc-modal-content.oc-alert-dialog.oc-alert-dialog--<type>: The alert dialog (types: success, error, warning, info, question)
|
|
5
|
+
.oc-alert-dialog--confirm: Confirm variant on the content box (larger thin icon ring, wider box, wrapping footer)
|
|
6
|
+
.oc-alert-dialog-close: X button in the top corner (command="close")
|
|
7
|
+
form.oc-alert-dialog-form[method=dialog]: Wraps body + footer; the submit button closes the dialog with its value as returnValue
|
|
8
|
+
.oc-alert-dialog-typed: Label + input with pattern="WORD" required; the browser blocks submit until it matches
|
|
9
|
+
.oc-alert-dialog-confirm: The confirm (submit) button; looks disabled while the typed value is invalid
|
|
10
|
+
.oc-alert-dialog-discard: Optional third action at the start of the footer ("Don't save")
|
|
11
|
+
Slots: icon, title, message, typed field (optional), footer buttons (discard, cancel, confirm)
|
|
12
|
+
-->
|
|
13
|
+
<button class="oc-btn oc-btn--destructive" type="button" command="show-modal" commandfor="oc-confirm-dialog-demo">Delete project</button>
|
|
14
|
+
|
|
15
|
+
<dialog class="oc-modal" id="oc-confirm-dialog-demo" closedby="any" aria-labelledby="oc-confirm-dialog-title" aria-describedby="oc-confirm-dialog-text">
|
|
16
|
+
<div class="oc-modal-content oc-alert-dialog oc-alert-dialog--error oc-alert-dialog--confirm">
|
|
17
|
+
<button class="oc-alert-dialog-close" type="button" command="close" commandfor="oc-confirm-dialog-demo" aria-label="Close">×</button>
|
|
18
|
+
<span class="oc-alert-dialog-icon" aria-hidden="true">×</span>
|
|
19
|
+
<h2 class="oc-modal-title" id="oc-confirm-dialog-title">Delete "Kitchen renovation"?</h2>
|
|
20
|
+
<form class="oc-alert-dialog-form" method="dialog">
|
|
21
|
+
<div class="oc-modal-body" id="oc-confirm-dialog-text">This removes the project, its quotes and all files. This cannot be undone.</div>
|
|
22
|
+
<label class="oc-alert-dialog-typed">
|
|
23
|
+
<span>Type <code>DELETE</code> to confirm</span>
|
|
24
|
+
<input class="oc-input" name="confirm" pattern="DELETE" required autocomplete="off">
|
|
25
|
+
</label>
|
|
26
|
+
<div class="oc-modal-footer">
|
|
27
|
+
<button class="oc-btn oc-btn--outline" type="button" command="close" commandfor="oc-confirm-dialog-demo">Cancel</button>
|
|
28
|
+
<button class="oc-btn oc-btn--destructive oc-alert-dialog-confirm" type="submit" value="confirm">Delete project</button>
|
|
29
|
+
</div>
|
|
30
|
+
</form>
|
|
31
|
+
</div>
|
|
32
|
+
</dialog>
|