@birdycom/omniaui 0.0.0-stage → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +20 -2
- package/bin/lib/add.mjs +126 -0
- package/bin/lib/catalog.mjs +169 -0
- package/bin/lib/project.mjs +90 -0
- package/bin/omniaui.mjs +70 -0
- package/dist/code-block.css +163 -0
- package/dist/components-extra.css +914 -0
- package/dist/components.css +10081 -0
- package/dist/components.min.css +1 -0
- package/dist/data-table.d.ts +9 -0
- package/dist/data-table.js +505 -0
- package/dist/docs-ui.css +265 -0
- package/dist/oc-theme.css +69 -0
- package/dist/parts/.gitkeep +0 -0
- package/dist/parts/app-accordion-accent.css +60 -0
- package/dist/parts/app-alpha-tabs.css +68 -0
- package/dist/parts/app-busy-overlay.css +25 -0
- package/dist/parts/app-column-menu.css +85 -0
- package/dist/parts/app-confirm-dialog.css +70 -0
- package/dist/parts/app-cookie-consent.css +63 -0
- package/dist/parts/app-data-table.css +174 -0
- package/dist/parts/app-greeting.css +47 -0
- package/dist/parts/app-list-toolbar.css +81 -0
- package/dist/parts/app-page-header.css +54 -0
- package/dist/parts/app-severity-card.css +91 -0
- package/dist/parts/app-sidebar-dark.css +15 -0
- package/dist/parts/app-sortable-row.css +52 -0
- package/dist/parts/app-stat-card.css +68 -0
- package/dist/parts/app-table-actions.css +71 -0
- package/dist/parts/app-table-compact.css +54 -0
- package/dist/parts/app-top-progress.css +68 -0
- package/dist/parts/app-tree.css +104 -0
- package/dist/parts/app-upgrade-banner.css +90 -0
- package/dist/parts/app-version-banner.css +80 -0
- package/dist/parts/data-chart-line.css +167 -0
- package/dist/parts/forms-affix-input.css +75 -0
- package/dist/parts/forms-barcode-input.css +75 -0
- package/dist/parts/forms-chip-filter.css +91 -0
- package/dist/parts/forms-color-select.css +89 -0
- package/dist/parts/forms-decimal-input.css +51 -0
- package/dist/parts/forms-filter-counts.css +94 -0
- package/dist/parts/forms-language-select.css +76 -0
- package/dist/parts/forms-number-input.css +95 -0
- package/dist/parts/forms-password-requirements.css +55 -0
- package/dist/parts/forms-phone-input.css +85 -0
- package/dist/parts/forms-time-input.css +74 -0
- package/dist/parts/forms-toggle-field.css +69 -0
- package/dist/parts/media-art.css +21 -0
- package/dist/parts/media-attachment.css +160 -0
- package/dist/parts/media-browser-frame.css +73 -0
- package/dist/parts/media-card.css +83 -0
- package/dist/parts/media-chat-composer.css +90 -0
- package/dist/parts/media-doc-viewer.css +151 -0
- package/dist/parts/media-emoji-picker.css +88 -0
- package/dist/parts/media-entity-card.css +52 -0
- package/dist/parts/media-flip-card.css +78 -0
- package/dist/parts/media-image-zoom.css +68 -0
- package/dist/parts/media-lightbox.css +131 -0
- package/dist/parts/media-message-thread.css +136 -0
- package/dist/parts/media-message.css +160 -0
- package/dist/parts/media-row.css +78 -0
- package/dist/parts/media-stack-card.css +82 -0
- package/dist/parts/media-terminal-log.css +76 -0
- package/dist/parts/media-thumb.css +71 -0
- package/dist/parts/site-fact-list.css +25 -0
- package/dist/parts/site-link-arrow.css +34 -0
- package/dist/parts/site-marquee.css +34 -0
- package/dist/parts/site-next-teaser.css +75 -0
- package/dist/parts/site-price-card.css +75 -0
- package/dist/parts/site-product-mark.css +66 -0
- package/dist/parts/site-project-card.css +111 -0
- package/dist/parts/site-prose.css +124 -0
- package/dist/parts/site-stack-list.css +48 -0
- package/dist/parts/site-timeline.css +54 -0
- package/dist/showcase.css +404 -0
- package/manifest.json +1108 -0
- package/package.json +67 -4
- package/snippets/accordion-accent.html +24 -0
- package/snippets/accordion.html +11 -0
- package/snippets/affix-input.html +30 -0
- package/snippets/alert-dialog.html +22 -0
- package/snippets/alert.html +5 -0
- package/snippets/alpha-tabs.html +37 -0
- package/snippets/aspect-ratio.html +15 -0
- package/snippets/attachment.html +43 -0
- package/snippets/avatar.html +6 -0
- package/snippets/back-link.html +5 -0
- package/snippets/badge.html +5 -0
- package/snippets/barcode-input.html +18 -0
- package/snippets/breadcrumb.html +6 -0
- package/snippets/browser-frame.html +18 -0
- package/snippets/busy-overlay.html +31 -0
- package/snippets/button-group.html +21 -0
- package/snippets/button.html +8 -0
- package/snippets/calendar.html +43 -0
- package/snippets/card.html +17 -0
- package/snippets/carousel.html +21 -0
- package/snippets/chart-line.html +46 -0
- package/snippets/chart.html +27 -0
- package/snippets/chat-composer.html +21 -0
- package/snippets/checkbox.html +5 -0
- package/snippets/checklist.html +23 -0
- package/snippets/chip-filter.html +14 -0
- package/snippets/code-window.html +20 -0
- package/snippets/collapsible.html +19 -0
- package/snippets/color-field.html +13 -0
- package/snippets/color-select.html +18 -0
- package/snippets/column-menu.html +38 -0
- package/snippets/combobox.html +19 -0
- package/snippets/command.html +24 -0
- package/snippets/confirm-dialog.html +32 -0
- package/snippets/context-menu.html +25 -0
- package/snippets/cookie-consent.html +70 -0
- package/snippets/copy-field.html +19 -0
- package/snippets/counter.html +2 -0
- package/snippets/data-table.html +151 -0
- package/snippets/date-picker.html +32 -0
- package/snippets/decimal-input.html +20 -0
- package/snippets/definition-list.html +20 -0
- package/snippets/demo-panel.html +18 -0
- package/snippets/doc-viewer.html +58 -0
- package/snippets/drawer.html +30 -0
- package/snippets/dropdown-menu.html +27 -0
- package/snippets/dropdown.html +9 -0
- package/snippets/dropzone.html +13 -0
- package/snippets/emoji-picker.html +51 -0
- package/snippets/empty-state.html +17 -0
- package/snippets/entity-card.html +26 -0
- package/snippets/expandable-table.html +26 -0
- package/snippets/fact-list.html +14 -0
- package/snippets/filter-counts.html +30 -0
- package/snippets/flip-card.html +22 -0
- package/snippets/form-field.html +6 -0
- package/snippets/greeting.html +22 -0
- package/snippets/heading.html +14 -0
- package/snippets/hover-card.html +18 -0
- package/snippets/image-zoom.html +30 -0
- package/snippets/input-group.html +10 -0
- package/snippets/input.html +5 -0
- package/snippets/item.html +26 -0
- package/snippets/kbd.html +13 -0
- package/snippets/label.html +9 -0
- package/snippets/language-select.html +26 -0
- package/snippets/launcher-card.html +14 -0
- package/snippets/lightbox.html +50 -0
- package/snippets/link-arrow.html +10 -0
- package/snippets/list-toolbar.html +33 -0
- package/snippets/marquee.html +15 -0
- package/snippets/media-card.html +28 -0
- package/snippets/media-row.html +21 -0
- package/snippets/media-thumb.html +12 -0
- package/snippets/menubar.html +30 -0
- package/snippets/message-thread.html +123 -0
- package/snippets/message.html +51 -0
- package/snippets/modal.html +15 -0
- package/snippets/native-select.html +15 -0
- package/snippets/navmenu.html +23 -0
- package/snippets/next-teaser.html +15 -0
- package/snippets/number-input.html +27 -0
- package/snippets/otp-input.html +9 -0
- package/snippets/page-header.html +24 -0
- package/snippets/pagination.html +6 -0
- package/snippets/password-input.html +24 -0
- package/snippets/password-requirements.html +30 -0
- package/snippets/phone-input.html +22 -0
- package/snippets/popover.html +15 -0
- package/snippets/price-card.html +34 -0
- package/snippets/product-mark.html +13 -0
- package/snippets/progress.html +4 -0
- package/snippets/project-card.html +23 -0
- package/snippets/prose.html +54 -0
- package/snippets/radio.html +17 -0
- package/snippets/recovery-codes.html +20 -0
- package/snippets/resizable.html +16 -0
- package/snippets/scroll-area.html +20 -0
- package/snippets/search.html +8 -0
- package/snippets/segmented.html +11 -0
- package/snippets/select.html +7 -0
- package/snippets/separator.html +15 -0
- package/snippets/severity-card.html +35 -0
- package/snippets/sheet.html +32 -0
- package/snippets/sidebar-docs.html +24 -0
- package/snippets/sidebar.html +55 -0
- package/snippets/site-footer.html +6 -0
- package/snippets/site-header.html +26 -0
- package/snippets/skeleton.html +4 -0
- package/snippets/slider.html +17 -0
- package/snippets/sortable-row.html +31 -0
- package/snippets/spinner.html +14 -0
- package/snippets/stack-card.html +17 -0
- package/snippets/stack-list.html +16 -0
- package/snippets/stat-card.html +24 -0
- package/snippets/stepper.html +13 -0
- package/snippets/switch.html +6 -0
- package/snippets/table-actions.html +39 -0
- package/snippets/table-compact.html +24 -0
- package/snippets/table.html +29 -0
- package/snippets/tabs.html +9 -0
- package/snippets/tag-input.html +17 -0
- package/snippets/terminal-log.html +23 -0
- package/snippets/textarea.html +3 -0
- package/snippets/theme-switch.html +6 -0
- package/snippets/time-input.html +26 -0
- package/snippets/timeline.html +28 -0
- package/snippets/toast-stack.html +10 -0
- package/snippets/toast.html +36 -0
- package/snippets/toc.html +13 -0
- package/snippets/toggle-field.html +20 -0
- package/snippets/toggle.html +22 -0
- package/snippets/tooltip.html +4 -0
- package/snippets/top-progress.html +12 -0
- package/snippets/tree.html +38 -0
- package/snippets/upgrade-banner.html +28 -0
- package/snippets/user.html +15 -0
- package/snippets/version-banner.html +15 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- OmniaUI component: site-header - Top bar with brand, site navigation (pill menu) and actions. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API: .oc-topbar (header; --fixed pins it to the top, --collapsible = CSS-only burger menu on small screens) · .oc-topbar-brand ·
|
|
3
|
+
.oc-topbar-nav (nav wrapper) · .oc-navmenu.oc-navmenu--site + .oc-navmenu-link (aria-current="page" = current section) · .oc-navmenu-icon (icon link) ·
|
|
4
|
+
.oc-topbar-actions (right side) · .oc-topbar-toggle + .oc-topbar-burger (mobile menu)
|
|
5
|
+
-->
|
|
6
|
+
<header class="oc-topbar oc-topbar--collapsible">
|
|
7
|
+
<a class="oc-topbar-brand" href="#">OmniaCSS <span class="oc-badge-version">v1</span></a>
|
|
8
|
+
<input type="checkbox" id="oc-topbar-demo" class="oc-topbar-toggle" aria-label="Toggle menu">
|
|
9
|
+
<label class="oc-topbar-burger" for="oc-topbar-demo" aria-hidden="true">☰</label>
|
|
10
|
+
<nav class="oc-topbar-nav" aria-label="Main">
|
|
11
|
+
<ul class="oc-navmenu oc-navmenu--site">
|
|
12
|
+
<li><a class="oc-navmenu-link" href="#">Home</a></li>
|
|
13
|
+
<li><a class="oc-navmenu-link" href="#" aria-current="page">Docs</a></li>
|
|
14
|
+
<li><a class="oc-navmenu-link" href="#">Components</a></li>
|
|
15
|
+
<li><a class="oc-navmenu-link" href="#">Blocks</a></li>
|
|
16
|
+
<li><a class="oc-navmenu-link" href="#" aria-label="GitHub"><svg class="oc-navmenu-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z"/></svg></a></li>
|
|
17
|
+
</ul>
|
|
18
|
+
</nav>
|
|
19
|
+
<div class="oc-topbar-actions">
|
|
20
|
+
<fieldset class="oc-theme-switch" aria-label="Color theme">
|
|
21
|
+
<label><input type="radio" name="oc-topbar-theme" value="system" checked> System</label>
|
|
22
|
+
<label><input type="radio" name="oc-topbar-theme" value="light"> Light</label>
|
|
23
|
+
<label><input type="radio" name="oc-topbar-theme" value="dark"> Dark</label>
|
|
24
|
+
</fieldset>
|
|
25
|
+
</div>
|
|
26
|
+
</header>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- OmniaUI component: slider - Slider: native range input with themed track, fill and thumb. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
input.oc-slider[type=range]: the slider. Modifier: --vertical
|
|
4
|
+
--oc-slider-progress: fill length for Chromium/WebKit (Firefox fills natively). Update with a one-line oninput
|
|
5
|
+
--oc-slider-track / --oc-slider-thumb: sizes
|
|
6
|
+
-->
|
|
7
|
+
<div class="oc-field" style="max-inline-size:20rem">
|
|
8
|
+
<label class="oc-field-label" for="oc-slider-volume">Volume</label>
|
|
9
|
+
<input class="oc-slider" id="oc-slider-volume" type="range" min="0" max="100" value="40" style="--oc-slider-progress: 40%"
|
|
10
|
+
oninput="this.style.setProperty('--oc-slider-progress', (this.value - this.min) / (this.max - this.min) * 100 + '%')">
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div style="display:flex;align-items:center;gap:2rem;flex-wrap:wrap">
|
|
14
|
+
<input class="oc-slider" type="range" min="0" max="10" step="1" value="3" aria-label="Rating" style="--oc-slider-progress: 30%;max-inline-size:12rem" oninput="this.style.setProperty('--oc-slider-progress', (this.value - this.min) / (this.max - this.min) * 100 + '%')">
|
|
15
|
+
<input class="oc-slider" type="range" value="60" disabled aria-label="Disabled" style="--oc-slider-progress: 60%;max-inline-size:10rem">
|
|
16
|
+
<input class="oc-slider oc-slider--vertical" type="range" value="70" aria-label="Level" style="--oc-slider-progress: 70%">
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!-- OmniaUI component: sortable-row - Table row with a drag grip and drag / drop states (styling only). Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/sortable-row.html | Map: table -> grip column -> normal row -> dragging row -> drop target row
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
tr.oc-sortable-row[draggable="true"]: Row that can be moved. States: .is-dragging (row being moved), .is-drop-before / .is-drop-after (drop line on the target row).
|
|
5
|
+
td.oc-sortable-row-grip-cell: Narrow first cell
|
|
6
|
+
button.oc-sortable-row-grip: Grip with six dots (aria-label "Move ..."). States: aria-pressed="true" (picked up with the keyboard), disabled (locked row).
|
|
7
|
+
Slots: grip cell + the normal row cells. Behaviour (native drag and drop or keys) comes from your own code.
|
|
8
|
+
-->
|
|
9
|
+
<div class="oc-table-wrap">
|
|
10
|
+
<table class="oc-table">
|
|
11
|
+
<thead><tr><th class="oc-sortable-row-grip-cell"><span class="oc-visually-hidden">Order</span></th><th>Step</th><th>Owner</th></tr></thead>
|
|
12
|
+
<tbody>
|
|
13
|
+
<tr class="oc-sortable-row" draggable="true">
|
|
14
|
+
<td class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Measure the room"></button></td>
|
|
15
|
+
<td>Measure the room</td><td>Ada</td>
|
|
16
|
+
</tr>
|
|
17
|
+
<tr class="oc-sortable-row is-dragging" draggable="true">
|
|
18
|
+
<td class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Order materials"></button></td>
|
|
19
|
+
<td>Order materials</td><td>Alan</td>
|
|
20
|
+
</tr>
|
|
21
|
+
<tr class="oc-sortable-row is-drop-after" draggable="true">
|
|
22
|
+
<td class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Install"></button></td>
|
|
23
|
+
<td>Install</td><td>Grace</td>
|
|
24
|
+
</tr>
|
|
25
|
+
<tr class="oc-sortable-row">
|
|
26
|
+
<td class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Final check (locked)" disabled></button></td>
|
|
27
|
+
<td>Final check</td><td>Ada</td>
|
|
28
|
+
</tr>
|
|
29
|
+
</tbody>
|
|
30
|
+
</table>
|
|
31
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!-- OmniaUI component: spinner - Spinner: loading ring in sizes sm to xl, inherits currentColor. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-spinner: the ring (role="status" + aria-label). Sizes: --sm, --lg, --xl. Colors: --primary, --muted (or set `color`)
|
|
4
|
+
--oc-spinner-size: custom size
|
|
5
|
+
-->
|
|
6
|
+
<div style="display:flex;align-items:center;gap:1.25rem;flex-wrap:wrap">
|
|
7
|
+
<span class="oc-spinner oc-spinner--sm" role="status" aria-label="Loading"></span>
|
|
8
|
+
<span class="oc-spinner" role="status" aria-label="Loading"></span>
|
|
9
|
+
<span class="oc-spinner oc-spinner--lg oc-spinner--primary" role="status" aria-label="Loading"></span>
|
|
10
|
+
<span class="oc-spinner oc-spinner--xl oc-spinner--muted" role="status" aria-label="Loading"></span>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<button class="oc-btn" type="button" disabled aria-busy="true"><span class="oc-spinner oc-spinner--sm" aria-hidden="true"></span> Saving…</button>
|
|
14
|
+
<button class="oc-btn oc-btn--outline" type="button" disabled aria-busy="true"><span class="oc-spinner oc-spinner--sm" aria-hidden="true"></span> Loading</button>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- OmniaUI component: stack-card — Playlist or course cover drawn as a stacked deck with a count badge. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/stack-card.html | Map: card -> deck (cover thumb + count badge) -> title link + meta
|
|
3
|
+
Class API: article.oc-stack-card > .oc-stack-card__deck > .oc-media-thumb (cover) + .oc-stack-card__count ·
|
|
4
|
+
h3.oc-stack-card__title > a (covers the card) · p.oc-stack-card__meta.
|
|
5
|
+
Modifiers: .oc-stack-card--panel (count as a dark side panel). The two layers behind the cover are ::before / ::after
|
|
6
|
+
and fan out on hover (skipped with reduced motion). No JavaScript.
|
|
7
|
+
-->
|
|
8
|
+
<article class="oc-stack-card" style="max-inline-size:20rem">
|
|
9
|
+
<div class="oc-stack-card__deck">
|
|
10
|
+
<div class="oc-media-thumb"><div class="oc-media-art oc-media-art--4"></div></div>
|
|
11
|
+
<span class="oc-stack-card__count"><span aria-hidden="true">☰</span> 12 videos</span>
|
|
12
|
+
</div>
|
|
13
|
+
<div>
|
|
14
|
+
<h3 class="oc-stack-card__title"><a href="#">Cabin build, start to finish</a></h3>
|
|
15
|
+
<p class="oc-stack-card__meta">North Studio · Updated yesterday</p>
|
|
16
|
+
</div>
|
|
17
|
+
</article>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- OmniaUI component: stack-list - Technology pills for a product or project tech stack. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/stack-list.html | Map: ul.oc-stack-list -> li.oc-stack-list__item (optional __icon)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-stack-list: The list (aria-label names it). Modifiers: --neutral (no accent tint), --sm
|
|
5
|
+
.oc-stack-list__item: One pill
|
|
6
|
+
.oc-stack-list__icon: Optional glyph or SVG before the name (aria-hidden)
|
|
7
|
+
.oc-accent--*: Accent preset for the tint
|
|
8
|
+
Slots: items
|
|
9
|
+
-->
|
|
10
|
+
<ul class="oc-stack-list oc-accent--violet" aria-label="Tech stack">
|
|
11
|
+
<li class="oc-stack-list__item">PHP 8.4</li>
|
|
12
|
+
<li class="oc-stack-list__item">MySQL</li>
|
|
13
|
+
<li class="oc-stack-list__item">TypeScript</li>
|
|
14
|
+
<li class="oc-stack-list__item">Vue 3</li>
|
|
15
|
+
<li class="oc-stack-list__item">Docker</li>
|
|
16
|
+
</ul>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- OmniaUI component: stat-card - KPI tile with an icon tile, a big number, a label and an optional trend; tone modifiers and a clickable variant. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/stat-card.html | Map: grid -> default card -> card with trend -> clickable accent card
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-stat-card-grid: Responsive grid for a row of cards
|
|
5
|
+
.oc-stat-card: Card (div, or a / button for a clickable card with hover lift). Modifiers: --accent (needs attention), --success, --warning, --stripe (start edge stripe).
|
|
6
|
+
.oc-stat-card-icon: Tinted icon tile
|
|
7
|
+
.oc-stat-card-body / -value / -label: Text column, big number, small label
|
|
8
|
+
.oc-stat-card-trend: Chip after the value. Modifiers: --up, --down.
|
|
9
|
+
Slots: icon, value, label, trend
|
|
10
|
+
-->
|
|
11
|
+
<div class="oc-stat-card-grid">
|
|
12
|
+
<div class="oc-stat-card">
|
|
13
|
+
<span class="oc-stat-card-icon" aria-hidden="true"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="4"/><path d="M2 21c0-4 3-6 7-6s7 2 7 6"/></svg></span>
|
|
14
|
+
<div class="oc-stat-card-body"><span class="oc-stat-card-value">248</span><span class="oc-stat-card-label">Active customers</span></div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="oc-stat-card oc-stat-card--success">
|
|
17
|
+
<span class="oc-stat-card-icon" aria-hidden="true"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 17l6-6 4 4 8-8"/><path d="M14 7h7v7"/></svg></span>
|
|
18
|
+
<div class="oc-stat-card-body"><span class="oc-stat-card-value">€18.4k<span class="oc-stat-card-trend oc-stat-card-trend--up">+12%</span></span><span class="oc-stat-card-label">Revenue this month</span></div>
|
|
19
|
+
</div>
|
|
20
|
+
<a class="oc-stat-card oc-stat-card--accent oc-stat-card--stripe" href="#">
|
|
21
|
+
<span class="oc-stat-card-icon" aria-hidden="true"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 8l-9-5-9 5 9 5 9-5z"/><path d="M3 8v8l9 5 9-5V8"/></svg></span>
|
|
22
|
+
<span class="oc-stat-card-body"><span class="oc-stat-card-value">7</span><span class="oc-stat-card-label">Open orders - needs attention</span></span>
|
|
23
|
+
</a>
|
|
24
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- OmniaUI component: stepper - Wizard step navigation: done, active and upcoming steps (vertical or horizontal). Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-stepper: ol wrapper. Modifier: --horizontal.
|
|
4
|
+
.oc-stepper-item: Step (button). Modifiers: --done, --active (or aria-current="step"); default = upcoming (add disabled).
|
|
5
|
+
.oc-stepper-label: Step title
|
|
6
|
+
.oc-stepper-meta: Optional small text (e.g. 2/4)
|
|
7
|
+
-->
|
|
8
|
+
<ol class="oc-stepper" aria-label="Setup steps">
|
|
9
|
+
<li><button class="oc-stepper-item oc-stepper-item--done" type="button"><span><span class="oc-stepper-label">Company</span><span class="oc-stepper-meta">1/4</span></span></button></li>
|
|
10
|
+
<li><button class="oc-stepper-item oc-stepper-item--active" type="button" aria-current="step"><span><span class="oc-stepper-label">Invoicing</span><span class="oc-stepper-meta">2/4</span></span></button></li>
|
|
11
|
+
<li><button class="oc-stepper-item" type="button" disabled><span><span class="oc-stepper-label">Banking</span><span class="oc-stepper-meta">3/4</span></span></button></li>
|
|
12
|
+
<li><button class="oc-stepper-item" type="button" disabled><span><span class="oc-stepper-label">Team</span><span class="oc-stepper-meta">4/4</span></span></button></li>
|
|
13
|
+
</ol>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- OmniaUI component: table-actions - Row actions as small icon buttons or as one overflow menu (popover) - no JavaScript. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/table-actions.html | Map: table -> row with icon actions -> row with overflow menu
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
td.oc-table-actions: Actions cell from the table component (right aligned, no wrap). Modifier: --icons (tighter gap).
|
|
5
|
+
.oc-table-actions-icon: Square icon action (a or button) with aria-label + title. Tones: --primary, --success, --destructive. State: disabled / aria-disabled="true".
|
|
6
|
+
.oc-table-actions-more[popovertarget]: Overflow trigger (three dots). Stays highlighted while its menu is open.
|
|
7
|
+
.oc-dropdown-menu[popover]: The overflow menu (dropdown component); opens toward the inline start.
|
|
8
|
+
Slots: icon actions, or trigger + menu items (.oc-dropdown-item, --destructive, .oc-dropdown-separator)
|
|
9
|
+
-->
|
|
10
|
+
<div class="oc-table-wrap">
|
|
11
|
+
<table class="oc-table">
|
|
12
|
+
<thead>
|
|
13
|
+
<tr><th>Name</th><th>E-mail</th><th style="width:7rem"><span class="oc-visually-hidden">Actions</span></th></tr>
|
|
14
|
+
</thead>
|
|
15
|
+
<tbody>
|
|
16
|
+
<tr>
|
|
17
|
+
<td>Ada Lovelace</td><td>ada@example.com</td>
|
|
18
|
+
<td class="oc-table-actions oc-table-actions--icons">
|
|
19
|
+
<a class="oc-table-actions-icon oc-table-actions-icon--primary" href="#" aria-label="View Ada" title="View"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg></a>
|
|
20
|
+
<a class="oc-table-actions-icon" href="#" aria-label="Edit Ada" title="Edit"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"/></svg></a>
|
|
21
|
+
<button class="oc-table-actions-icon oc-table-actions-icon--destructive" type="button" aria-label="Delete Ada" title="Delete"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h18"/><path d="M8 6V4h8v2"/><path d="M19 6l-1 14H6L5 6"/></svg></button>
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr>
|
|
25
|
+
<td>Alan Turing</td><td>alan@example.com</td>
|
|
26
|
+
<td class="oc-table-actions">
|
|
27
|
+
<button class="oc-table-actions-more" type="button" popovertarget="oc-table-actions-menu-alan" aria-label="Actions for Alan"></button>
|
|
28
|
+
<div class="oc-dropdown-menu" id="oc-table-actions-menu-alan" popover>
|
|
29
|
+
<a class="oc-dropdown-item" href="#">View</a>
|
|
30
|
+
<a class="oc-dropdown-item" href="#">Edit</a>
|
|
31
|
+
<button class="oc-dropdown-item" type="button">Duplicate</button>
|
|
32
|
+
<div class="oc-dropdown-separator"></div>
|
|
33
|
+
<button class="oc-dropdown-item oc-dropdown-item--destructive" type="button">Delete</button>
|
|
34
|
+
</div>
|
|
35
|
+
</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- OmniaUI component: table-compact - Table variant: compact striped table without outer cell borders, for inside cards and side panels. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/table-compact.html | Map: card -> header -> compact wrapper -> table (head, striped body, total footer)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-table-compact: Wrapper around a table.oc-table (scrolls sideways when needed). Modifiers: --bordered (own frame), --plain (no stripes, no head background).
|
|
5
|
+
th / td [data-numeric]: Right aligned tabular numbers (table component). [data-wrap]: the cell may wrap.
|
|
6
|
+
tfoot row: Bold total row with a stronger line above it
|
|
7
|
+
.oc-table-compact-muted: Muted secondary text in a cell
|
|
8
|
+
Slots: thead, tbody rows, optional tfoot
|
|
9
|
+
-->
|
|
10
|
+
<div class="oc-card" style="max-width:28rem">
|
|
11
|
+
<div class="oc-card-header"><h3 class="oc-card-title">Materials</h3></div>
|
|
12
|
+
<div class="oc-table-compact">
|
|
13
|
+
<table class="oc-table">
|
|
14
|
+
<thead><tr><th>Item</th><th data-numeric>Qty</th><th data-numeric>Price</th></tr></thead>
|
|
15
|
+
<tbody>
|
|
16
|
+
<tr><td>Oak worktop <span class="oc-table-compact-muted">(3 m)</span></td><td data-numeric>1</td><td data-numeric>€ 640.00</td></tr>
|
|
17
|
+
<tr><td>Cabinet 60 cm</td><td data-numeric>2</td><td data-numeric>€ 380.00</td></tr>
|
|
18
|
+
<tr><td>Sink</td><td data-numeric>1</td><td data-numeric>€ 210.00</td></tr>
|
|
19
|
+
<tr><td>Tap</td><td data-numeric>1</td><td data-numeric>€ 95.00</td></tr>
|
|
20
|
+
</tbody>
|
|
21
|
+
<tfoot><tr><td colspan="2">Total</td><td data-numeric>€ 1,325.00</td></tr></tfoot>
|
|
22
|
+
</table>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- OmniaUI component: table - Data table: sortable header, selection, row actions, empty state, density modifiers. Needs @birdycom/omniaui CSS.
|
|
2
|
+
-->
|
|
3
|
+
<div class="oc-table-wrap">
|
|
4
|
+
<table class="oc-table oc-table--striped">
|
|
5
|
+
<caption>Contacts</caption>
|
|
6
|
+
<thead>
|
|
7
|
+
<tr>
|
|
8
|
+
<th style="width:2.5rem"><input class="oc-checkbox" type="checkbox" aria-label="Select all"></th>
|
|
9
|
+
<th aria-sort="ascending"><a class="oc-table-sort" href="?sort=name">Name</a></th>
|
|
10
|
+
<th><a class="oc-table-sort" href="?sort=email">E-mail</a></th>
|
|
11
|
+
<th data-numeric>Balance</th>
|
|
12
|
+
<th><span class="oc-visually-hidden">Actions</span></th>
|
|
13
|
+
</tr>
|
|
14
|
+
</thead>
|
|
15
|
+
<tbody>
|
|
16
|
+
<tr aria-selected="true">
|
|
17
|
+
<td><input class="oc-checkbox" type="checkbox" checked aria-label="Select Ada"></td>
|
|
18
|
+
<td>Ada Lovelace</td><td>ada@example.com</td><td data-numeric>1,250.00</td>
|
|
19
|
+
<td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
|
|
20
|
+
</tr>
|
|
21
|
+
<tr>
|
|
22
|
+
<td><input class="oc-checkbox" type="checkbox" aria-label="Select Alan"></td>
|
|
23
|
+
<td>Alan Turing</td><td>alan@example.com</td><td data-numeric>0.00</td>
|
|
24
|
+
<td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
|
|
25
|
+
</tr>
|
|
26
|
+
</tbody>
|
|
27
|
+
</table>
|
|
28
|
+
</div>
|
|
29
|
+
<!-- Empty state: <tbody><tr class="oc-table-empty"><td colspan="5"><div class="oc-empty">...</div></td></tr></tbody> -->
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- OmniaUI component: tabs — Tabs with radio inputs and :has() — no JavaScript. Needs @birdycom/omniaui CSS. -->
|
|
2
|
+
<div class="oc-tabset">
|
|
3
|
+
<div class="oc-tab-list" role="tablist">
|
|
4
|
+
<label class="oc-tab-trigger"><input type="radio" name="oc-tabs-demo" checked> Account</label>
|
|
5
|
+
<label class="oc-tab-trigger"><input type="radio" name="oc-tabs-demo"> Password</label>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="oc-tab-panel">Make changes to your account here.</div>
|
|
8
|
+
<div class="oc-tab-panel">Change your password here.</div>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- OmniaUI component: tag-input - Chips with remove buttons and a free-text input with suggestions. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-tag: Chip
|
|
4
|
+
.oc-tag-remove: Remove button inside a chip
|
|
5
|
+
.oc-tag-input: Bordered container holding chips and one <input>
|
|
6
|
+
.oc-tag-suggestions: Row of suggestion buttons below the control
|
|
7
|
+
-->
|
|
8
|
+
<div class="oc-tag-input">
|
|
9
|
+
<span class="oc-tag">design <button class="oc-tag-remove" type="button" aria-label="Remove design">×</button></span>
|
|
10
|
+
<span class="oc-tag">internal <button class="oc-tag-remove" type="button" aria-label="Remove internal">×</button></span>
|
|
11
|
+
<input type="text" placeholder="Add tag..." aria-label="Add tag" list="oc-tag-options">
|
|
12
|
+
</div>
|
|
13
|
+
<div class="oc-tag-suggestions">
|
|
14
|
+
<button type="button">customer</button>
|
|
15
|
+
<button type="button">supplier</button>
|
|
16
|
+
<button type="button">partner</button>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!-- OmniaUI component: terminal-log — Console window with traffic lights, level colors and a blinking cursor. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/terminal-log.html | Map: frame -> bar (dots, title, status) -> body (role=log) -> lines -> prompt
|
|
3
|
+
Class API: .oc-terminal-log > .oc-terminal-log__bar (3 × <i>, .oc-terminal-log__title, .oc-terminal-log__status) ·
|
|
4
|
+
.oc-terminal-log__body (role="log", tabindex=0) > p.oc-terminal-log__line (time.oc-terminal-log__time optional,
|
|
5
|
+
span.oc-terminal-log__level, span.oc-terminal-log__msg) · p.oc-terminal-log__prompt (last line, blinking cursor).
|
|
6
|
+
Modifiers (on a line): --info, --success, --warn, --error, --debug. Height: --oc-terminal-log-height (default 18rem).
|
|
7
|
+
Always dark (color-scheme: dark). Cursor blink and live pulse stop with reduced motion. Appending lines is up to your app.
|
|
8
|
+
-->
|
|
9
|
+
<div class="oc-terminal-log" style="max-inline-size:40rem">
|
|
10
|
+
<div class="oc-terminal-log__bar">
|
|
11
|
+
<i></i><i></i><i></i>
|
|
12
|
+
<span class="oc-terminal-log__title">scan — example.com</span>
|
|
13
|
+
<span class="oc-terminal-log__status">Live</span>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="oc-terminal-log__body" role="log" aria-live="polite" aria-label="Scan output" tabindex="0">
|
|
16
|
+
<p class="oc-terminal-log__line oc-terminal-log__line--info"><time class="oc-terminal-log__time">09:41:02</time><span class="oc-terminal-log__level">info</span><span class="oc-terminal-log__msg">Starting scan of https://example.com</span></p>
|
|
17
|
+
<p class="oc-terminal-log__line oc-terminal-log__line--debug"><time class="oc-terminal-log__time">09:41:02</time><span class="oc-terminal-log__level">debug</span><span class="oc-terminal-log__msg">Resolved 3 hosts, 14 paths queued</span></p>
|
|
18
|
+
<p class="oc-terminal-log__line oc-terminal-log__line--success"><time class="oc-terminal-log__time">09:41:04</time><span class="oc-terminal-log__level">ok</span><span class="oc-terminal-log__msg">TLS certificate valid for 82 days</span></p>
|
|
19
|
+
<p class="oc-terminal-log__line oc-terminal-log__line--warn"><time class="oc-terminal-log__time">09:41:06</time><span class="oc-terminal-log__level">warn</span><span class="oc-terminal-log__msg">Missing header: Content-Security-Policy</span></p>
|
|
20
|
+
<p class="oc-terminal-log__line oc-terminal-log__line--error"><time class="oc-terminal-log__time">09:41:07</time><span class="oc-terminal-log__level">error</span><span class="oc-terminal-log__msg">/admin answered 200 without login</span></p>
|
|
21
|
+
<p class="oc-terminal-log__prompt">waiting for next host</p>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- OmniaUI component: theme-switch — System / light / dark switch — CSS only (color-scheme + :has()). Needs @birdycom/omniaui CSS. -->
|
|
2
|
+
<fieldset class="oc-theme-switch" aria-label="Color theme">
|
|
3
|
+
<label><input type="radio" name="oc-theme" value="system" checked> System</label>
|
|
4
|
+
<label><input type="radio" name="oc-theme" value="light"> Light</label>
|
|
5
|
+
<label><input type="radio" name="oc-theme" value="dark"> Dark</label>
|
|
6
|
+
</fieldset>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- OmniaUI component: time-input - 24h time field (HH:mm) with suggested slots and an optional slot list. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/time-input.html | Map: field + datalist of slots -> slot list (radio chips)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-time-input: Add to .oc-input. Narrow centered field; pattern checks HH:mm (00:00 - 23:59).
|
|
5
|
+
.oc-time-slots: Grid of slot chips (role="radiogroup"). Modifier: --sm.
|
|
6
|
+
.oc-time-slot: Label with one radio input and the time text
|
|
7
|
+
States: :user-invalid on a wrong time (red), checked slot (primary), disabled slot (struck through)
|
|
8
|
+
Slots: <datalist> options = suggestions while typing; one .oc-time-slot per time in the list.
|
|
9
|
+
-->
|
|
10
|
+
<div class="oc-field">
|
|
11
|
+
<label class="oc-field-label" for="oc-time-demo">Start time</label>
|
|
12
|
+
<input class="oc-input oc-time-input" id="oc-time-demo" name="start" type="text" inputmode="numeric" placeholder="hh:mm" maxlength="5" pattern="([01][0-9]|2[0-3]):[0-5][0-9]" list="oc-time-demo-slots" value="08:30">
|
|
13
|
+
<datalist id="oc-time-demo-slots">
|
|
14
|
+
<option value="08:00"></option>
|
|
15
|
+
<option value="08:30"></option>
|
|
16
|
+
<option value="09:00"></option>
|
|
17
|
+
<option value="09:30"></option>
|
|
18
|
+
</datalist>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="oc-time-slots" role="radiogroup" aria-label="Pick a time slot">
|
|
21
|
+
<label class="oc-time-slot"><input type="radio" name="slot" value="09:00"> 09:00</label>
|
|
22
|
+
<label class="oc-time-slot"><input type="radio" name="slot" value="09:30" checked> 09:30</label>
|
|
23
|
+
<label class="oc-time-slot"><input type="radio" name="slot" value="10:00" disabled> 10:00</label>
|
|
24
|
+
<label class="oc-time-slot"><input type="radio" name="slot" value="10:30"> 10:30</label>
|
|
25
|
+
<label class="oc-time-slot"><input type="radio" name="slot" value="11:00"> 11:00</label>
|
|
26
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- OmniaUI component: timeline - Vertical timeline with dated entries and an accent dot per item. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/timeline.html | Map: ol.oc-timeline -> li.oc-timeline__item (date, title, text)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-timeline: The list (ol or ul) with the vertical line. Modifiers: --lg (more space), --accent (accent line)
|
|
5
|
+
.oc-timeline__item: One entry with a dot on the line. Modifier: --current (filled dot + ring)
|
|
6
|
+
.oc-timeline__date: Year or date label (use <time> for real dates)
|
|
7
|
+
.oc-timeline__title / .oc-timeline__text: Entry heading and description
|
|
8
|
+
Simple form (no item classes): <li><strong>2001</strong><span>Text</span></li>
|
|
9
|
+
Accent: --oc-accent-from, or an .oc-accent--* preset on the list.
|
|
10
|
+
Slots: items (date, title, text)
|
|
11
|
+
-->
|
|
12
|
+
<ol class="oc-timeline">
|
|
13
|
+
<li class="oc-timeline__item">
|
|
14
|
+
<time class="oc-timeline__date" datetime="2012">2012</time>
|
|
15
|
+
<h3 class="oc-timeline__title">Acme is founded</h3>
|
|
16
|
+
<p class="oc-timeline__text">Two developers start building websites for local shops.</p>
|
|
17
|
+
</li>
|
|
18
|
+
<li class="oc-timeline__item">
|
|
19
|
+
<time class="oc-timeline__date" datetime="2019">2019</time>
|
|
20
|
+
<h3 class="oc-timeline__title">First own product</h3>
|
|
21
|
+
<p class="oc-timeline__text">A small invoicing app grows into a modular business suite.</p>
|
|
22
|
+
</li>
|
|
23
|
+
<li class="oc-timeline__item oc-timeline__item--current">
|
|
24
|
+
<span class="oc-timeline__date">Today</span>
|
|
25
|
+
<h3 class="oc-timeline__title">Products and custom work</h3>
|
|
26
|
+
<p class="oc-timeline__text">Web apps, desktop tools and plugins for clients across Europe.</p>
|
|
27
|
+
</li>
|
|
28
|
+
</ol>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- OmniaUI component: toast-stack - Toast stack: overlapping toasts that expand on hover or focus. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-toast-container.oc-toast-container--stack: stacking container (add --static for in-flow, --top to dock to the top)
|
|
4
|
+
Newest .oc-toast LAST; the last four layers are visible (scale, offset and opacity by depth)
|
|
5
|
+
-->
|
|
6
|
+
<div class="oc-toast-container oc-toast-container--static oc-toast-container--stack" tabindex="0" aria-label="Notifications">
|
|
7
|
+
<div class="oc-toast oc-toast--info" role="status"><span class="oc-toast-icon" aria-hidden="true">i</span><div class="oc-toast-body"><p class="oc-toast-title">Update available</p><p class="oc-toast-description">Version 0.9 is ready.</p></div></div>
|
|
8
|
+
<div class="oc-toast oc-toast--warning" role="status"><span class="oc-toast-icon" aria-hidden="true">!</span><div class="oc-toast-body"><p class="oc-toast-title">Storage almost full</p><p class="oc-toast-description">92% of 5 GB used.</p></div></div>
|
|
9
|
+
<div class="oc-toast oc-toast--success" role="status"><span class="oc-toast-icon" aria-hidden="true">✓</span><div class="oc-toast-body"><p class="oc-toast-title">Invoice sent</p><p class="oc-toast-description">Hover to expand the stack.</p></div><button class="oc-toast-close" type="button" aria-label="Dismiss">×</button></div>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!-- OmniaUI component: toast - Transient notifications (success, error, warning, info) with optional CSS auto-dismiss. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-toast-container: Fixed stack (bottom right). Modifiers: --top, --static (in-flow, for docs).
|
|
4
|
+
.oc-toast: One notification (role="status"; use role="alert" for errors). Variants: --success, --error, --warning, --info. --auto = CSS auto-dismiss.
|
|
5
|
+
.oc-toast-icon: Status glyph
|
|
6
|
+
.oc-toast-body: Text column
|
|
7
|
+
.oc-toast-title / -description: Heading and optional text
|
|
8
|
+
.oc-toast-close: Dismiss button
|
|
9
|
+
Slots: icon, title, description, close
|
|
10
|
+
-->
|
|
11
|
+
<div class="oc-toast-container oc-toast-container--static">
|
|
12
|
+
<div class="oc-toast oc-toast--success" role="status">
|
|
13
|
+
<span class="oc-toast-icon" aria-hidden="true">✓</span>
|
|
14
|
+
<div class="oc-toast-body">
|
|
15
|
+
<p class="oc-toast-title">Contact saved</p>
|
|
16
|
+
<p class="oc-toast-description">Your changes are stored.</p>
|
|
17
|
+
</div>
|
|
18
|
+
<button class="oc-toast-close" type="button" aria-label="Dismiss">×</button>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="oc-toast oc-toast--error" role="alert">
|
|
21
|
+
<span class="oc-toast-icon" aria-hidden="true">!</span>
|
|
22
|
+
<div class="oc-toast-body">
|
|
23
|
+
<p class="oc-toast-title">Could not send invoice</p>
|
|
24
|
+
<p class="oc-toast-description">The e-mail address is invalid.</p>
|
|
25
|
+
</div>
|
|
26
|
+
<button class="oc-toast-close" type="button" aria-label="Dismiss">×</button>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="oc-toast oc-toast--warning" role="status">
|
|
29
|
+
<span class="oc-toast-icon" aria-hidden="true">!</span>
|
|
30
|
+
<div class="oc-toast-body"><p class="oc-toast-title">License expires in 3 days</p></div>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="oc-toast oc-toast--info" role="status">
|
|
33
|
+
<span class="oc-toast-icon" aria-hidden="true">i</span>
|
|
34
|
+
<div class="oc-toast-body"><p class="oc-toast-title">A new version is available</p></div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- OmniaUI component: toc - "On this page" list of heading links. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API: .oc-toc (root nav, sticky) · .oc-toc-title · .oc-toc-list (ul) · .oc-toc-link (a; aria-current / .is-active = current heading) · .oc-toc-item--sub (li, sub heading)
|
|
3
|
+
-->
|
|
4
|
+
<nav class="oc-toc" aria-label="On this page">
|
|
5
|
+
<p class="oc-toc-title">On this page</p>
|
|
6
|
+
<ul class="oc-toc-list">
|
|
7
|
+
<li><a class="oc-toc-link" href="#overview">Overview</a></li>
|
|
8
|
+
<li><a class="oc-toc-link" href="#install" aria-current="true">Install</a></li>
|
|
9
|
+
<li class="oc-toc-item--sub"><a class="oc-toc-link" href="#npm">With npm</a></li>
|
|
10
|
+
<li class="oc-toc-item--sub"><a class="oc-toc-link" href="#cdn">From a CDN</a></li>
|
|
11
|
+
<li><a class="oc-toc-link" href="#usage">Usage</a></li>
|
|
12
|
+
</ul>
|
|
13
|
+
</nav>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- OmniaUI component: toggle-field - Settings row with a title, a description and a switch. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/toggle-field.html | Map: row label -> text (label + description) -> switch (span.oc-switch + checkbox)
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-toggle-field: Row; it is the <label>, so the whole row flips the switch. Modifiers: --card (bordered box), --reverse (switch first).
|
|
5
|
+
.oc-toggle-field-text: Text block
|
|
6
|
+
.oc-toggle-field-label: Title
|
|
7
|
+
.oc-toggle-field-description: Muted help text (link it with aria-describedby)
|
|
8
|
+
.oc-switch: Use a <span class="oc-switch"> here (a label inside a label is invalid HTML)
|
|
9
|
+
States: checked (card border turns primary), disabled (row dimmed), :focus-visible (card outline)
|
|
10
|
+
-->
|
|
11
|
+
<label class="oc-toggle-field">
|
|
12
|
+
<span class="oc-toggle-field-text">
|
|
13
|
+
<span class="oc-toggle-field-label">Email notifications</span>
|
|
14
|
+
<span class="oc-toggle-field-description" id="oc-toggle-field-demo-desc">Get a message when a receipt is processed.</span>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="oc-switch">
|
|
17
|
+
<input type="checkbox" role="switch" name="notify_email" checked aria-describedby="oc-toggle-field-demo-desc">
|
|
18
|
+
<span class="oc-switch-track"></span>
|
|
19
|
+
</span>
|
|
20
|
+
</label>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!-- OmniaUI component: toggle - Toggle and toggle group: pressed state on checkbox/radio or aria-pressed. Needs @birdycom/omniaui CSS.
|
|
2
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
3
|
+
.oc-toggle: label (around input) or button. On state: input:checked, [aria-pressed=true], [data-state=on]. Variants: --outline. Sizes: --sm, --lg. --icon: square
|
|
4
|
+
.oc-toggle-group: connected toggles (radio inputs = single, checkbox inputs = multiple). Modifier: --spaced
|
|
5
|
+
-->
|
|
6
|
+
<div class="oc-toggle-group" role="group" aria-label="Text formatting">
|
|
7
|
+
<label class="oc-toggle oc-toggle--outline oc-toggle--icon" title="Bold"><input type="checkbox" name="fmt" value="bold" aria-label="Bold" checked><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 4h8a4 4 0 0 1 0 8H6zM6 12h9a4 4 0 0 1 0 8H6z"/></svg></label>
|
|
8
|
+
<label class="oc-toggle oc-toggle--outline oc-toggle--icon" title="Italic"><input type="checkbox" name="fmt" value="italic" aria-label="Italic"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 4h-9M14 20H5M15 4 9 20"/></svg></label>
|
|
9
|
+
<label class="oc-toggle oc-toggle--outline oc-toggle--icon" title="Underline"><input type="checkbox" name="fmt" value="underline" aria-label="Underline"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 4v6a6 6 0 0 0 12 0V4M4 21h16"/></svg></label>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="oc-toggle-group" role="radiogroup" aria-label="Alignment">
|
|
13
|
+
<label class="oc-toggle oc-toggle--icon"><input type="radio" name="oc-align" value="left" aria-label="Left" checked><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h10M4 18h14"/></svg></label>
|
|
14
|
+
<label class="oc-toggle oc-toggle--icon"><input type="radio" name="oc-align" value="center" aria-label="Center"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M7 12h10M5 18h14"/></svg></label>
|
|
15
|
+
<label class="oc-toggle oc-toggle--icon"><input type="radio" name="oc-align" value="right" aria-label="Right"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M10 12h10M6 18h14"/></svg></label>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<label class="oc-toggle oc-toggle--outline"><input type="checkbox"> Italic</label>
|
|
19
|
+
<label class="oc-toggle oc-toggle--outline oc-toggle--sm"><input type="checkbox" checked> Small</label>
|
|
20
|
+
<label class="oc-toggle oc-toggle--outline oc-toggle--lg"><input type="checkbox"> Large</label>
|
|
21
|
+
<button class="oc-toggle oc-toggle--outline" type="button" aria-pressed="true">Pressed button</button>
|
|
22
|
+
<div class="oc-toggle-group oc-toggle-group--spaced" role="group" aria-label="Spaced"><label class="oc-toggle oc-toggle--outline"><input type="checkbox" checked> A</label><label class="oc-toggle oc-toggle--outline"><input type="checkbox"> B</label></div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- OmniaUI component: top-progress - Thin page-top loading bar on a native progress element (indeterminate or with a value). Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/top-progress.html | Map: indeterminate bar -> determinate bar (value) -> static bar in a card
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
progress.oc-top-progress: Fixed to the top of the window. Without value = indeterminate (sliding segment); value + max = determinate.
|
|
5
|
+
Modifiers: --success, --warning, --danger, --brand (colors), --lg (4px), --static (in the normal flow, e.g. inside a card).
|
|
6
|
+
States: .is-done (fades out), hidden (removed)
|
|
7
|
+
Custom properties: --oc-top-progress-color, --oc-top-progress-height
|
|
8
|
+
Slots: none (use aria-label for the screen reader name)
|
|
9
|
+
-->
|
|
10
|
+
<progress class="oc-top-progress" aria-label="Loading page"></progress>
|
|
11
|
+
|
|
12
|
+
<progress class="oc-top-progress oc-top-progress--static" value="40" max="100" aria-label="Uploading, 40 percent"></progress>
|