@birdycom/omniaui 0.12.6 → 0.13.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/bin/lib/copy-js.mjs +2 -0
- package/dist/components.css +720 -41
- package/dist/components.min.css +1 -1
- package/dist/contact-form.d.ts +5 -0
- package/dist/contact-form.js +138 -0
- package/dist/fly.d.ts +4 -0
- package/dist/fly.js +80 -0
- package/dist/oc-theme.css +3 -1
- package/dist/parts/app-result.css +39 -0
- package/dist/parts/forms-form.css +76 -0
- package/dist/parts/media-lightbox.css +4 -0
- package/dist/parts/site-base.css +33 -0
- package/dist/parts/site-brand-mark.css +56 -0
- package/dist/parts/site-cards.css +183 -0
- package/dist/parts/site-fly.css +40 -0
- package/dist/parts/site-layout.css +69 -0
- package/dist/parts/site-panel.css +29 -0
- package/dist/parts/site-prose.css +12 -0
- package/dist/parts/utility-hover.css +44 -0
- package/dist/showcase.css +81 -19
- package/manifest.json +72 -0
- package/package.json +4 -2
- package/snippets/brand-mark.html +41 -0
- package/snippets/feature-card.html +52 -0
- package/snippets/fly-in.html +30 -0
- package/snippets/hover-effects.html +19 -0
- package/snippets/icon-list.html +28 -0
- package/snippets/lazy.html +7 -7
- package/snippets/name-card.html +4 -4
- package/snippets/page-sections.html +50 -0
- package/snippets/panel.html +18 -0
- package/snippets/result.html +31 -0
- package/snippets/ribbon.html +8 -8
- package/snippets/shot-grid.html +27 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!-- OmniaUI component: fly-in - Cards that fly in from the middle of their row when they scroll into view, with a hover lift that keeps working, and a New badge in a product card. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/fly-in.html | Map: product cards.
|
|
3
|
+
Behaviour: fly.js (npx omniaui copy-js fly); works without it.
|
|
4
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
5
|
+
.oc-reveal--fly: A card that flies in. Hidden only while html.oc-fly-ready is set (by fly.js) and the card is not yet .is-visible.
|
|
6
|
+
--oc-fly-x: Start offset from the middle of the row; fly.js sets it per card.
|
|
7
|
+
.is-visible: Added by fly.js when the card comes into view; the card flies to its place.
|
|
8
|
+
.oc-product-card__badge: A small New label after the name of a product card (with .oc-pill).
|
|
9
|
+
initFly(scope): Exported from @birdycom/omniaui/fly.js; returns a function that stops watching.
|
|
10
|
+
-->
|
|
11
|
+
<div class="oc-card-grid" style="inline-size:100%">
|
|
12
|
+
<a class="oc-product-card oc-reveal--fly oc-accent--blue" href="#product-1">
|
|
13
|
+
<h3 class="oc-product-card__name">Product 1</h3>
|
|
14
|
+
<p class="oc-product-card__tagline">Plan every shift</p>
|
|
15
|
+
<p class="oc-product-card__summary">Schedules and leave in one view.</p>
|
|
16
|
+
<span class="oc-product-card__more">Read more</span>
|
|
17
|
+
</a>
|
|
18
|
+
<a class="oc-product-card oc-reveal--fly oc-accent--green" href="#product-2">
|
|
19
|
+
<h3 class="oc-product-card__name">Product 2 <span class="oc-product-card__badge oc-pill oc-pill--accent">New</span></h3>
|
|
20
|
+
<p class="oc-product-card__tagline">Quotes in minutes</p>
|
|
21
|
+
<p class="oc-product-card__summary">From quote to invoice without typing twice.</p>
|
|
22
|
+
<span class="oc-product-card__more">Read more</span>
|
|
23
|
+
</a>
|
|
24
|
+
<a class="oc-product-card oc-reveal--fly oc-accent--violet" href="#product-3">
|
|
25
|
+
<h3 class="oc-product-card__name">Product 3</h3>
|
|
26
|
+
<p class="oc-product-card__tagline">Your shop online</p>
|
|
27
|
+
<p class="oc-product-card__summary">Products, stock and orders in one place.</p>
|
|
28
|
+
<span class="oc-product-card__more">Read more</span>
|
|
29
|
+
</a>
|
|
30
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- OmniaUI component: hover-effects - Choose how a card reacts to the mouse: lift, grow, glow or stay still, with one smooth curve for all of them. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/hover-effects.html | Map: four effects -> your own distance and speed.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-hover-lift: Moves up (--oc-hover-lift, 6px) with a soft shadow. The product card does this by default.
|
|
5
|
+
.oc-hover-grow: Grows a little in place (--oc-hover-scale, 1.02).
|
|
6
|
+
.oc-hover-glow: Stays in place, with a ring and glow in the accent color (--oc-accent-from, e.g. with .oc-accent--violet).
|
|
7
|
+
.oc-hover-none: No movement; also turns off the default lift of a product or price card.
|
|
8
|
+
--oc-hover-duration / --oc-hover-ease: Speed (0.45s) and curve (cubic-bezier(0.22, 1, 0.36, 1), a soft ease-out) of every effect.
|
|
9
|
+
-->
|
|
10
|
+
<div class="oc-card-grid" style="inline-size:100%">
|
|
11
|
+
<article class="oc-feature-card oc-hover-lift"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--blue" aria-hidden="true"><iconify-icon icon="mdi:arrow-up-bold-outline"></iconify-icon></span><h3 class="oc-feature-card__title">Lift</h3><p class="oc-feature-card__text">Moves up 6px with a soft shadow. <code>.oc-hover-lift</code></p></article>
|
|
12
|
+
<article class="oc-feature-card oc-hover-grow"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--green" aria-hidden="true"><iconify-icon icon="mdi:arrow-expand"></iconify-icon></span><h3 class="oc-feature-card__title">Grow</h3><p class="oc-feature-card__text">Grows a little in place. <code>.oc-hover-grow</code></p></article>
|
|
13
|
+
<article class="oc-feature-card oc-hover-glow oc-accent--violet"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--violet" aria-hidden="true"><iconify-icon icon="mdi:white-balance-sunny"></iconify-icon></span><h3 class="oc-feature-card__title">Glow</h3><p class="oc-feature-card__text">Stays in place, glows in the accent color. <code>.oc-hover-glow</code></p></article>
|
|
14
|
+
<article class="oc-feature-card oc-hover-none"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--cyan" aria-hidden="true"><iconify-icon icon="mdi:pause-circle-outline"></iconify-icon></span><h3 class="oc-feature-card__title">None</h3><p class="oc-feature-card__text">No movement. <code>.oc-hover-none</code></p></article>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="oc-card-grid" style="inline-size:100%; --oc-hover-lift: 10px; --oc-hover-duration: 0.7s">
|
|
17
|
+
<article class="oc-feature-card oc-hover-lift"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--blue" aria-hidden="true"><iconify-icon icon="mdi:tune-variant"></iconify-icon></span><h3 class="oc-feature-card__title">Slow and high</h3><p class="oc-feature-card__text"><code>--oc-hover-lift: 10px</code> and <code>--oc-hover-duration: 0.7s</code> on the grid.</p></article>
|
|
18
|
+
<article class="oc-feature-card oc-hover-lift"><span class="oc-icon-tile oc-icon-tile--sm oc-accent--green" aria-hidden="true"><iconify-icon icon="mdi:view-grid-outline"></iconify-icon></span><h3 class="oc-feature-card__title">Same grid</h3><p class="oc-feature-card__text">Every card in the grid follows the tokens.</p></article>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- OmniaUI component: icon-list - Lists for a company site: rows with an icon in a frame, points with an icon tile, a title and a text, and a list with markers in the accent color. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/icon-list.html | Map: icon rows -> points -> accent list, badges and tagline.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-icon-list: Rows with an icon (svg, iconify-icon) in the primary color, each in a frame.
|
|
5
|
+
.oc-icon-list--points: Points: an icon tile next to .oc-icon-list__title and .oc-icon-list__text, no frames.
|
|
6
|
+
.oc-list--accent: Disc list in muted text with markers in --oc-accent-from.
|
|
7
|
+
.oc-note: Small muted note under a block (0.85rem).
|
|
8
|
+
.oc-badge-row: Row of badges or pills above a title.
|
|
9
|
+
.oc-tagline--accent: Tagline in the accent color, lighter in dark mode.
|
|
10
|
+
-->
|
|
11
|
+
<ul class="oc-icon-list" style="inline-size:min(100%, 26rem)">
|
|
12
|
+
<li><iconify-icon icon="mdi:shield-lock-outline" aria-hidden="true"></iconify-icon>Internal tools behind a login</li>
|
|
13
|
+
<li><iconify-icon icon="mdi:database-sync-outline" aria-hidden="true"></iconify-icon>Links between existing systems</li>
|
|
14
|
+
<li><iconify-icon icon="mdi:file-document-outline" aria-hidden="true"></iconify-icon>Reports and exports</li>
|
|
15
|
+
</ul>
|
|
16
|
+
<ul class="oc-icon-list oc-icon-list--points" style="inline-size:min(100%, 30rem)">
|
|
17
|
+
<li><span class="oc-icon-tile oc-icon-tile--sm oc-accent--violet" aria-hidden="true"><iconify-icon icon="mdi:server-security"></iconify-icon></span><span class="oc-icon-list__title">Runs on your own server</span><span class="oc-icon-list__text">Your data does not leave the building.</span></li>
|
|
18
|
+
<li><span class="oc-icon-tile oc-icon-tile--sm oc-accent--violet" aria-hidden="true"><iconify-icon icon="mdi:account-key-outline"></iconify-icon></span><span class="oc-icon-list__title">Only for your team</span><span class="oc-icon-list__text">Sign in with the accounts you already have.</span></li>
|
|
19
|
+
</ul>
|
|
20
|
+
<div class="oc-accent--green" style="inline-size:min(100%, 34rem)">
|
|
21
|
+
<div class="oc-badge-row"><span class="oc-pill">Web app</span><span class="oc-pill">Since 2020</span></div>
|
|
22
|
+
<p class="oc-tagline--accent">Plan every shift in one view</p>
|
|
23
|
+
<ul class="oc-list--accent">
|
|
24
|
+
<li>Drag a shift to another day.</li>
|
|
25
|
+
<li>Everyone sees their own schedule on the phone.</li>
|
|
26
|
+
</ul>
|
|
27
|
+
<p class="oc-note">The demo resets every hour.</p>
|
|
28
|
+
</div>
|
package/snippets/lazy.html
CHANGED
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
<table class="oc-table" style="inline-size:100%">
|
|
22
22
|
<thead><tr><th>Product</th><th>Category</th><th data-numeric>Price</th></tr></thead>
|
|
23
23
|
<tbody>
|
|
24
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-1-front.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 1</strong><br><small class="text-muted">PRD-0001</small></span></div></td><td>Lighting</td><td data-numeric>€ 179,00</td></tr>
|
|
25
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-2.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 2</strong><br><small class="text-muted">PRD-0002</small></span></div></td><td>Furniture</td><td data-numeric>€ 265,00</td></tr>
|
|
26
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-3.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 3</strong><br><small class="text-muted">PRD-0003</small></span></div></td><td>Furniture</td><td data-numeric>€ 589,00</td></tr>
|
|
27
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-4.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 4</strong><br><small class="text-muted">PRD-0004</small></span></div></td><td>Garden</td><td data-numeric>€ 22,40</td></tr>
|
|
28
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-5.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 5</strong><br><small class="text-muted">PRD-0005</small></span></div></td><td>Electronics</td><td data-numeric>€ 129,00</td></tr>
|
|
29
|
-
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-6.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 6</strong><br><small class="text-muted">PRD-0006</small></span></div></td><td>Kitchen</td><td data-numeric>€ 11,95</td></tr>
|
|
24
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-1-front.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 1</strong><br><small class="oc-text-muted">PRD-0001</small></span></div></td><td>Lighting</td><td data-numeric>€ 179,00</td></tr>
|
|
25
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-2.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 2</strong><br><small class="oc-text-muted">PRD-0002</small></span></div></td><td>Furniture</td><td data-numeric>€ 265,00</td></tr>
|
|
26
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-3.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 3</strong><br><small class="oc-text-muted">PRD-0003</small></span></div></td><td>Furniture</td><td data-numeric>€ 589,00</td></tr>
|
|
27
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-4.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 4</strong><br><small class="oc-text-muted">PRD-0004</small></span></div></td><td>Garden</td><td data-numeric>€ 22,40</td></tr>
|
|
28
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-5.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 5</strong><br><small class="oc-text-muted">PRD-0005</small></span></div></td><td>Electronics</td><td data-numeric>€ 129,00</td></tr>
|
|
29
|
+
<tr><td><div style="display:flex;align-items:center;gap:0.75rem"><figure class="oc-lazy oc-lazy--thumb"><img src="/img/shop/product-6.svg" alt="" loading="lazy" decoding="async" width="40" height="40"></figure><span><strong>Product 6</strong><br><small class="oc-text-muted">PRD-0006</small></span></div></td><td>Kitchen</td><td data-numeric>€ 11,95</td></tr>
|
|
30
30
|
<tr class="oc-lazy-row" aria-hidden="true"><td><div style="display:flex;align-items:center;gap:0.75rem"><span class="oc-lazy oc-lazy--thumb"></span><span class="oc-lazy-bar" style="--oc-lazy-bar: 8rem"></span></div></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 5rem"></span></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 4rem;margin-inline-start:auto"></span></td></tr>
|
|
31
31
|
<tr class="oc-lazy-row" aria-hidden="true"><td><div style="display:flex;align-items:center;gap:0.75rem"><span class="oc-lazy oc-lazy--thumb"></span><span class="oc-lazy-bar" style="--oc-lazy-bar: 8rem"></span></div></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 5rem"></span></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 4rem;margin-inline-start:auto"></span></td></tr>
|
|
32
32
|
<tr class="oc-lazy-row" aria-hidden="true"><td><div style="display:flex;align-items:center;gap:0.75rem"><span class="oc-lazy oc-lazy--thumb"></span><span class="oc-lazy-bar" style="--oc-lazy-bar: 8rem"></span></div></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 5rem"></span></td><td><span class="oc-lazy-bar" style="--oc-lazy-bar: 4rem;margin-inline-start:auto"></span></td></tr>
|
|
33
33
|
</tbody>
|
|
34
|
-
<caption class="text-muted" style="caption-side:bottom;padding-block-start:0.5rem;font-size:0.8125rem" role="status">Loading 20 more products…</caption>
|
|
34
|
+
<caption class="oc-text-muted" style="caption-side:bottom;padding-block-start:0.5rem;font-size:0.8125rem" role="status">Loading 20 more products…</caption>
|
|
35
35
|
</table>
|
|
36
36
|
<div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));gap:1rem;inline-size:100%">
|
|
37
37
|
<figure class="oc-lazy" role="img" aria-label="Loading"></figure>
|
package/snippets/name-card.html
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
<span class="oc-name-card__actions"><button type="button" class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" aria-label="Delete Base cabinets" title="Delete"><iconify-icon icon="mdi:trash-can-outline" aria-hidden="true"></iconify-icon></button></span>
|
|
29
29
|
</summary>
|
|
30
30
|
<div class="oc-name-card__body">
|
|
31
|
-
<p class="m-0 text-muted">6 articles · 2 options</p>
|
|
31
|
+
<p class="m-0 oc-text-muted">6 articles · 2 options</p>
|
|
32
32
|
</div>
|
|
33
33
|
</details>
|
|
34
34
|
<details class="oc-name-card">
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<span class="oc-name-card__actions"><button type="button" class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" aria-label="Delete Wall cabinets" title="Delete"><iconify-icon icon="mdi:trash-can-outline" aria-hidden="true"></iconify-icon></button></span>
|
|
41
41
|
</summary>
|
|
42
42
|
<div class="oc-name-card__body">
|
|
43
|
-
<p class="m-0 text-muted">4 articles</p>
|
|
43
|
+
<p class="m-0 oc-text-muted">4 articles</p>
|
|
44
44
|
</div>
|
|
45
45
|
</details>
|
|
46
46
|
<details class="oc-name-card">
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
<span class="oc-name-card__actions"><button type="button" class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" aria-label="Delete Worktop" title="Delete"><iconify-icon icon="mdi:trash-can-outline" aria-hidden="true"></iconify-icon></button></span>
|
|
53
53
|
</summary>
|
|
54
54
|
<div class="oc-name-card__body">
|
|
55
|
-
<p class="m-0 text-muted">1 article · cut to size</p>
|
|
55
|
+
<p class="m-0 oc-text-muted">1 article · cut to size</p>
|
|
56
56
|
</div>
|
|
57
57
|
</details>
|
|
58
58
|
</div>
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<span class="oc-name-card__actions"><button type="button" class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" aria-label="Delete Bathroom – first floor" title="Delete"><iconify-icon icon="mdi:trash-can-outline" aria-hidden="true"></iconify-icon></button></span>
|
|
67
67
|
</summary>
|
|
68
68
|
<div class="oc-name-card__body">
|
|
69
|
-
<p class="m-0 text-muted">Add a part with the button below.</p>
|
|
69
|
+
<p class="m-0 oc-text-muted">Add a part with the button below.</p>
|
|
70
70
|
</div>
|
|
71
71
|
</details>
|
|
72
72
|
</div>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- OmniaUI component: page-sections - Building blocks for the pages of a company site: the header of an inner page, a section head, a row of buttons, a group title with a count, a full-width band and a meta line. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/page-sections.html | Map: inner page header -> section head, group title and more row -> centered head and buttons.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-section-pad--page: Header of an inner page: padding clamp(4rem, 10vw, 7rem) on top, clamp(2rem, 5vw, 3rem) below.
|
|
5
|
+
.oc-display--page: Larger display title for that header: clamp(2.5rem, 6.5vw, 4.75rem).
|
|
6
|
+
.oc-section-head: Head of a section (eyebrow, title, lead): max 46rem, 3rem below. --center centers it.
|
|
7
|
+
.oc-section-more: Row under a section (a <em>see all</em> link): 2.5rem above.
|
|
8
|
+
.oc-actions: Row of buttons that wraps: gap .75rem, 2rem above. --center, --end, --tight (1rem above).
|
|
9
|
+
.oc-group-title: Title of a group of cards; .oc-group-title__count is the number in a pill.
|
|
10
|
+
.oc-band: Band over the full width with a line above and below (--oc-band-bg, surface); the content stays in its .oc-container.
|
|
11
|
+
.oc-meta: Meta line under a title: version · date. Subtle text (--oc-subtle-foreground), 0.9rem.
|
|
12
|
+
-->
|
|
13
|
+
<section class="oc-section-pad--page" style="inline-size:100%">
|
|
14
|
+
<div class="oc-container">
|
|
15
|
+
<p class="oc-eyebrow">Contact</p>
|
|
16
|
+
<h1 class="oc-display oc-display--page">Let's <span class="oc-text-gradient">talk</span></h1>
|
|
17
|
+
<p class="oc-lead">A new project, a question about one of our apps or help with your IT? We would like to hear from you.</p>
|
|
18
|
+
<p class="oc-meta">Version 2 · 30 October 2026</p>
|
|
19
|
+
<div class="oc-actions">
|
|
20
|
+
<a class="oc-btn oc-btn--lg" href="#form">Send a message</a>
|
|
21
|
+
<a class="oc-btn oc-btn--outline oc-btn--lg" href="tel:+3230000000">Call us</a>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</section>
|
|
25
|
+
<section style="inline-size:100%">
|
|
26
|
+
<div class="oc-section-head">
|
|
27
|
+
<p class="oc-eyebrow">Software</p>
|
|
28
|
+
<h2 class="oc-display oc-display--md">Our own products</h2>
|
|
29
|
+
<p class="oc-lead">Apps we build, sell and maintain ourselves.</p>
|
|
30
|
+
</div>
|
|
31
|
+
<h3 class="oc-group-title">Business apps <span class="oc-group-title__count">3</span></h3>
|
|
32
|
+
<div class="oc-card-grid">
|
|
33
|
+
<div class="oc-card" style="padding:1.25rem">Product 1</div>
|
|
34
|
+
<div class="oc-card" style="padding:1.25rem">Product 2</div>
|
|
35
|
+
<div class="oc-card" style="padding:1.25rem">Product 3</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="oc-section-more">
|
|
38
|
+
<a class="oc-link-arrow" href="#products">See all products</a>
|
|
39
|
+
</div>
|
|
40
|
+
</section>
|
|
41
|
+
<section style="inline-size:100%">
|
|
42
|
+
<div class="oc-section-head oc-section-head--center">
|
|
43
|
+
<h2 class="oc-display oc-display--md">Ready for the next step?</h2>
|
|
44
|
+
<p class="oc-lead" style="margin-inline:auto">Tell us what you need; we answer within one working day.</p>
|
|
45
|
+
<div class="oc-actions oc-actions--center">
|
|
46
|
+
<a class="oc-btn oc-btn--lg" href="#contact">Start a project</a>
|
|
47
|
+
<a class="oc-btn oc-btn--ghost oc-btn--lg" href="#work">See our work</a>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</section>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- OmniaUI component: panel - A framed panel on the page for a form, a call to action or a feature: card background, strong border, large radius and an optional soft glow in a corner. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/panel.html | Map: panel with a glow -> glow positions.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-panel: The panel: padding clamp(1.5rem, 4vw, 2.5rem) (--oc-panel-padding), --oc-border-strong, radius 1.2 × --oc-radius-lg, scroll-margin-top from --oc-scroll-offset (6rem).
|
|
5
|
+
.oc-panel--glow: A soft light in the top start corner in --oc-panel-glow-color (brand 1); --oc-panel-glow-at moves it.
|
|
6
|
+
.oc-panel--glow-end: The light in the top end corner.
|
|
7
|
+
.oc-panel--glow-both: Two lights: brand 1 top start and brand 3 bottom end (call to action).
|
|
8
|
+
-->
|
|
9
|
+
<div class="oc-panel oc-panel--glow" style="inline-size:min(100%, 34rem)">
|
|
10
|
+
<h2 style="margin:0 0 0.5rem;font-size:1.35rem">Send us a message</h2>
|
|
11
|
+
<p class="oc-text-muted" style="margin:0">We usually answer within one working day.</p>
|
|
12
|
+
</div>
|
|
13
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:1rem;inline-size:100%">
|
|
14
|
+
<div class="oc-panel"><strong>.oc-panel</strong><p class="oc-text-muted" style="margin:0.35rem 0 0">No light.</p></div>
|
|
15
|
+
<div class="oc-panel oc-panel--glow"><strong>--glow</strong><p class="oc-text-muted" style="margin:0.35rem 0 0">Top start.</p></div>
|
|
16
|
+
<div class="oc-panel oc-panel--glow oc-panel--glow-end"><strong>--glow-end</strong><p class="oc-text-muted" style="margin:0.35rem 0 0">Top end.</p></div>
|
|
17
|
+
<div class="oc-panel oc-panel--glow-both"><strong>--glow-both</strong><p class="oc-text-muted" style="margin:0.35rem 0 0">Two lights.</p></div>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!-- OmniaUI component: result - The outcome of an action in the place where the form was: an icon tile, a title, a short text and a button such as Send another message. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/result.html | Map: message sent -> centered.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-result: The result: tile, title, text and actions stacked, aligned at the start.
|
|
5
|
+
.oc-result__title: The title (1.2rem).
|
|
6
|
+
.oc-result__text: Muted text; links in the primary color, underlined.
|
|
7
|
+
.oc-result__actions: Row of buttons under the text.
|
|
8
|
+
.oc-result--center: Centers everything (an empty state or a full page).
|
|
9
|
+
role="status" tabindex="-1": Announces the result and lets the script move the focus to it.
|
|
10
|
+
-->
|
|
11
|
+
<div class="oc-panel" style="inline-size:min(100%, 34rem)">
|
|
12
|
+
<div class="oc-result" role="status" tabindex="-1">
|
|
13
|
+
<span class="oc-icon-tile oc-icon-tile--sm oc-accent--green" aria-hidden="true"><iconify-icon icon="mdi:check"></iconify-icon></span>
|
|
14
|
+
<h2 class="oc-result__title">Thank you, your message was sent</h2>
|
|
15
|
+
<p class="oc-result__text">You will get a confirmation by e-mail.<br>Urgent? Call us on <a href="tel:+3230000000">+32 3 000 00 00</a>.</p>
|
|
16
|
+
<div class="oc-result__actions">
|
|
17
|
+
<a class="oc-btn oc-btn--outline" href="#contact-form">Send another message</a>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="oc-panel" style="inline-size:min(100%, 34rem)">
|
|
22
|
+
<div class="oc-result oc-result--center" role="status" tabindex="-1">
|
|
23
|
+
<span class="oc-icon-tile oc-icon-tile--sm oc-accent--orange" aria-hidden="true"><iconify-icon icon="mdi:clock-outline"></iconify-icon></span>
|
|
24
|
+
<h2 class="oc-result__title">Your request is waiting for approval</h2>
|
|
25
|
+
<p class="oc-result__text">Customer 1 gets an e-mail as soon as it is approved.</p>
|
|
26
|
+
<div class="oc-result__actions">
|
|
27
|
+
<a class="oc-btn" href="#orders">Back to the orders</a>
|
|
28
|
+
<a class="oc-btn oc-btn--ghost" href="#request">View the request</a>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
package/snippets/ribbon.html
CHANGED
|
@@ -11,32 +11,32 @@
|
|
|
11
11
|
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:1rem;inline-size:100%">
|
|
12
12
|
<div class="oc-card" style="min-block-size:9rem;display:grid;place-items:center;text-align:center">
|
|
13
13
|
<span class="oc-ribbon oc-ribbon--top-start">New</span>
|
|
14
|
-
<div><strong>Top start</strong><br><small class="text-muted">--top-start</small></div>
|
|
14
|
+
<div><strong>Top start</strong><br><small class="oc-text-muted">--top-start</small></div>
|
|
15
15
|
</div>
|
|
16
16
|
<div class="oc-card" style="min-block-size:9rem;display:grid;place-items:center;text-align:center">
|
|
17
17
|
<span class="oc-ribbon oc-ribbon--success">Paid</span>
|
|
18
|
-
<div><strong>Top end</strong><br><small class="text-muted">default</small></div>
|
|
18
|
+
<div><strong>Top end</strong><br><small class="oc-text-muted">default</small></div>
|
|
19
19
|
</div>
|
|
20
20
|
<div class="oc-card" style="min-block-size:9rem;display:grid;place-items:center;text-align:center">
|
|
21
21
|
<span class="oc-ribbon oc-ribbon--bottom-start oc-ribbon--warning">Due soon</span>
|
|
22
|
-
<div><strong>Bottom start</strong><br><small class="text-muted">--bottom-start</small></div>
|
|
22
|
+
<div><strong>Bottom start</strong><br><small class="oc-text-muted">--bottom-start</small></div>
|
|
23
23
|
</div>
|
|
24
24
|
<div class="oc-card" style="min-block-size:9rem;display:grid;place-items:center;text-align:center">
|
|
25
25
|
<span class="oc-ribbon oc-ribbon--bottom-end oc-ribbon--destructive">Overdue</span>
|
|
26
|
-
<div><strong>Bottom end</strong><br><small class="text-muted">--bottom-end</small></div>
|
|
26
|
+
<div><strong>Bottom end</strong><br><small class="oc-text-muted">--bottom-end</small></div>
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
29
29
|
<article class="oc-card" style="max-inline-size:30rem;inline-size:100%;padding:1.5rem;display:grid;gap:1rem">
|
|
30
30
|
<span class="oc-ribbon oc-ribbon--success oc-ribbon--lg">Paid</span>
|
|
31
31
|
<header style="display:grid;gap:0.25rem">
|
|
32
|
-
<span class="text-muted" style="font-size:0.8125rem">Invoice</span>
|
|
32
|
+
<span class="oc-text-muted" style="font-size:0.8125rem">Invoice</span>
|
|
33
33
|
<strong style="font-size:1.25rem">2026-0042</strong>
|
|
34
34
|
<span style="font-size:0.875rem">Customer 1 · info@company1.example</span>
|
|
35
35
|
</header>
|
|
36
36
|
<dl style="display:grid;grid-template-columns:auto 1fr;gap:0.25rem 1rem;margin:0;font-size:0.875rem">
|
|
37
|
-
<dt class="text-muted">Invoice date</dt><dd style="margin:0">2 November 2026</dd>
|
|
38
|
-
<dt class="text-muted">Paid on</dt><dd style="margin:0">9 November 2026</dd>
|
|
39
|
-
<dt class="text-muted">Total</dt><dd style="margin:0"><strong>€ 1.210,00</strong></dd>
|
|
37
|
+
<dt class="oc-text-muted">Invoice date</dt><dd style="margin:0">2 November 2026</dd>
|
|
38
|
+
<dt class="oc-text-muted">Paid on</dt><dd style="margin:0">9 November 2026</dd>
|
|
39
|
+
<dt class="oc-text-muted">Total</dt><dd style="margin:0"><strong>€ 1.210,00</strong></dd>
|
|
40
40
|
</dl>
|
|
41
41
|
</article>
|
|
42
42
|
<div style="display:flex;flex-wrap:wrap;gap:1rem">
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- OmniaUI component: shot-grid - A grid of screenshots with a caption that open in the lightbox, and a browser frame with a glow in the accent color and a product mark on it. Needs @birdycom/omniaui CSS.
|
|
2
|
+
File: packages/ui/snippets/shot-grid.html | Map: screenshots -> browser frame with a glow.
|
|
3
|
+
Class API (modifiers are extra classes / attributes on the same element):
|
|
4
|
+
.oc-shot-grid: Auto-fit grid; --oc-shot-min is the minimum column width (18rem).
|
|
5
|
+
.oc-shot: Figure: image (or picture) with object-fit: contain, --oc-shot-ratio (16 / 10), caption under it; a link or button around the image shows a zoom cursor.
|
|
6
|
+
.oc-browser-frame--glow: Browser frame with a shadow in --oc-accent-from; the screenshot zooms in a little on hover.
|
|
7
|
+
.oc-browser-frame__mark: A product mark or tile on the bottom end corner of the frame.
|
|
8
|
+
-->
|
|
9
|
+
<div class="oc-shot-grid" style="inline-size:100%">
|
|
10
|
+
<figure class="oc-shot">
|
|
11
|
+
<a href="/img/blocks/dashboard-01.jpg"><img src="/img/blocks/dashboard-01.jpg" alt="Dashboard" loading="lazy" width="640" height="400"></a>
|
|
12
|
+
<figcaption>Dashboard with the figures of the day</figcaption>
|
|
13
|
+
</figure>
|
|
14
|
+
<figure class="oc-shot">
|
|
15
|
+
<a href="/img/blocks/data-table.jpg"><img src="/img/blocks/data-table.jpg" alt="Customer list" loading="lazy" width="640" height="400"></a>
|
|
16
|
+
<figcaption>Customer list with filters</figcaption>
|
|
17
|
+
</figure>
|
|
18
|
+
<figure class="oc-shot">
|
|
19
|
+
<a href="/img/blocks/product-detail.jpg"><img src="/img/blocks/product-detail.jpg" alt="Product page" loading="lazy" width="640" height="400"></a>
|
|
20
|
+
<figcaption>Product page with stock and documents</figcaption>
|
|
21
|
+
</figure>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="oc-browser-frame oc-browser-frame--glow oc-accent--green" style="inline-size:min(100%, 34rem)">
|
|
24
|
+
<div class="oc-browser-frame__bar"><i></i><i></i><i></i></div>
|
|
25
|
+
<img class="oc-browser-frame__body" src="/img/blocks/dashboard-01.jpg" alt="Dashboard of Product 1" width="640" height="400">
|
|
26
|
+
<span class="oc-browser-frame__mark oc-icon-tile oc-icon-tile--lg oc-accent--green" aria-hidden="true"><iconify-icon icon="mdi:chart-box-outline"></iconify-icon></span>
|
|
27
|
+
</div>
|