@birdycom/omniaui-blocks 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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -2
  3. package/blocks/about-timeline.html +23 -0
  4. package/blocks/app-header.html +32 -0
  5. package/blocks/app-shell.html +84 -0
  6. package/blocks/auth-split.html +45 -0
  7. package/blocks/auth.html +21 -0
  8. package/blocks/contact-grid.html +38 -0
  9. package/blocks/cta.html +8 -0
  10. package/blocks/data-table.html +111 -0
  11. package/blocks/faq.html +33 -0
  12. package/blocks/features.html +18 -0
  13. package/blocks/footer.html +41 -0
  14. package/blocks/forgot-password.html +34 -0
  15. package/blocks/form-page.html +28 -0
  16. package/blocks/hero-code.html +27 -0
  17. package/blocks/hero-orbit.html +38 -0
  18. package/blocks/hero-split.html +12 -0
  19. package/blocks/hero.html +10 -0
  20. package/blocks/login-01.html +41 -0
  21. package/blocks/login-02.html +55 -0
  22. package/blocks/login-03.html +47 -0
  23. package/blocks/module-header.html +24 -0
  24. package/blocks/otp-01.html +36 -0
  25. package/blocks/otp-02.html +46 -0
  26. package/blocks/page-hero.html +10 -0
  27. package/blocks/portfolio-grid.html +31 -0
  28. package/blocks/pricing.html +42 -0
  29. package/blocks/process.html +19 -0
  30. package/blocks/product-grid.html +37 -0
  31. package/blocks/profile-header.html +27 -0
  32. package/blocks/reset-password.html +45 -0
  33. package/blocks/showcase.html +27 -0
  34. package/blocks/sidebar-01.html +56 -0
  35. package/blocks/sidebar-02.html +55 -0
  36. package/blocks/sidebar-03.html +53 -0
  37. package/blocks/sidebar-04.html +56 -0
  38. package/blocks/sidebar-05.html +68 -0
  39. package/blocks/signup-01.html +53 -0
  40. package/blocks/signup-02.html +56 -0
  41. package/blocks/site-footer.html +39 -0
  42. package/blocks/site-header.html +14 -0
  43. package/blocks/spotlight.html +22 -0
  44. package/blocks/stats-counter.html +15 -0
  45. package/blocks/stats.html +19 -0
  46. package/blocks/team-list.html +30 -0
  47. package/blocks/two-factor.html +33 -0
  48. package/blocks/wizard-dialog.html +36 -0
  49. package/dist/blocks.css +1431 -0
  50. package/dist/blocks.min.css +1 -0
  51. package/dist/parts/.gitkeep +0 -0
  52. package/dist/parts/site-about-timeline.css +61 -0
  53. package/dist/parts/site-contact-grid.css +58 -0
  54. package/dist/parts/site-faq.css +52 -0
  55. package/dist/parts/site-hero-orbit.css +62 -0
  56. package/dist/parts/site-portfolio-grid.css +23 -0
  57. package/dist/parts/site-profile-header.css +77 -0
  58. package/manifest.json +418 -0
  59. package/package.json +53 -4
  60. package/pro.json +140 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Serge Cools (Birdycom)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,10 @@
1
- # Temporary Holding Version
1
+ # @birdycom/omniaui-blocks
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Ready-made page sections composed from OmniaCSS utilities and components: hero, hero-split, page-hero, features, pricing, stats, stats-counter, CTA, auth, footer.
4
+
5
+ ```bash
6
+ npx omniacss add block pricing # → omnia/blocks/pricing.html
7
+ npx omniacss list blocks
8
+ ```
9
+
10
+ CSS: `import "@birdycom/omniaui-blocks"` (or let `omniacss build` include it). MIT
@@ -0,0 +1,23 @@
1
+ <!-- OmniaUI block: about-timeline - About section: picture with a badge next to the company story and a year timeline. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ File: packages/blocks/blocks/about-timeline.html | Map: section.oc-block-about -> inner -> media (+ badge) -> copy (eyebrow, title, text, .oc-timeline)
3
+ Class API: .oc-block-about (modifier --reverse: picture right), -inner, -media (empty = gradient placeholder, or an <img>),
4
+ -badge, -copy, -title. Uses the timeline component (.oc-timeline) and an .oc-accent--* preset for the placeholder.
5
+ -->
6
+ <section class="oc-block-about oc-accent--blue" aria-labelledby="oc-about-title">
7
+ <div class="oc-block-about-inner">
8
+ <figure class="oc-block-about-media" aria-hidden="true">
9
+ <span class="oc-block-about-badge"><strong>12+</strong>years of building software</span>
10
+ </figure>
11
+ <div class="oc-block-about-copy">
12
+ <p class="oc-eyebrow">About us</p>
13
+ <h2 class="oc-block-about-title" id="oc-about-title">Software for everyone. <span class="oc-text-gradient">Since 2012.</span></h2>
14
+ <p>Acme started as an IT partner for local businesses. That practical experience is in every line of code we write today.</p>
15
+ <p>You talk directly to the people who build your software. No layers in between.</p>
16
+ <ol class="oc-timeline">
17
+ <li class="oc-timeline__item"><span class="oc-timeline__date">2012</span><p class="oc-timeline__text">Acme is founded by two developers.</p></li>
18
+ <li class="oc-timeline__item"><span class="oc-timeline__date">2019</span><p class="oc-timeline__text">New office and a first own product.</p></li>
19
+ <li class="oc-timeline__item oc-timeline__item--current"><span class="oc-timeline__date">Today</span><p class="oc-timeline__text">Own products and custom work, from web apps to desktop tools.</p></li>
20
+ </ol>
21
+ </div>
22
+ </div>
23
+ </section>
@@ -0,0 +1,32 @@
1
+ <!-- OmniaUI block: app-header - Top bar with sidebar toggle, module navigation and user actions. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-block-appbar: Bar (flex row)
4
+ .oc-block-appbar-nav: Navigation area; contains an .oc-navmenu
5
+ .oc-block-appbar-actions: Right-aligned actions (theme switch, switchers, user menu)
6
+ .oc-block-appbar-title: Optional page title
7
+ Slots: toggle, module nav, actions (theme switch, workspace select, user dropdown)
8
+ -->
9
+ <header class="oc-block-appbar">
10
+ <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-appbar-toggle" title="Toggle sidebar"><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="M4 6h16M4 12h16M4 18h16"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
11
+ <nav class="oc-block-appbar-nav" aria-label="Module navigation">
12
+ <ul class="oc-navmenu">
13
+ <li><a class="oc-navmenu-link" href="#" aria-current="page">Contacts</a></li>
14
+ <li><a class="oc-navmenu-link" href="#">Companies</a></li>
15
+ <li><a class="oc-navmenu-link" href="#">Segments</a></li>
16
+ </ul>
17
+ </nav>
18
+ <div class="oc-block-appbar-actions">
19
+ <div class="oc-theme-switch" role="radiogroup" aria-label="Theme">
20
+ <label><input type="radio" name="oc-appbar-theme" value="light"> Light</label>
21
+ <label><input type="radio" name="oc-appbar-theme" value="dark"> Dark</label>
22
+ </div>
23
+ <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-appbar-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">SC</span></button>
24
+ <div class="oc-dropdown-menu" id="oc-appbar-user" popover>
25
+ <div class="oc-dropdown-label">serge@example.com</div>
26
+ <a class="oc-dropdown-item" href="#">Profile</a>
27
+ <a class="oc-dropdown-item" href="#">Settings</a>
28
+ <div class="oc-dropdown-separator"></div>
29
+ <a class="oc-dropdown-item" href="#">Log out</a>
30
+ </div>
31
+ </div>
32
+ </header>
@@ -0,0 +1,84 @@
1
+ <!-- OmniaUI block: app-shell - Application layout: sidebar, header bar, breadcrumb strip and scrolling content. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-block-shell: Grid root. Height via --oc-block-shell-height (default 100dvh).
4
+ .oc-block-shell-toggle: Hidden checkbox that collapses the sidebar (label for it in the header bar)
5
+ .oc-sidebar: Sidebar component (first grid child)
6
+ .oc-block-shell-main: Column holding the header bar, breadcrumbs and content
7
+ .oc-block-shell-breadcrumbs: Strip under the header bar
8
+ .oc-block-shell-content: Scrolling page content (the only scroll container)
9
+ .oc-block-shell-menu-button: Shown below 48rem to open the sidebar sheet
10
+ Slots: sidebar, header bar (see App header), breadcrumbs, content (default)
11
+ -->
12
+ <div class="oc-block-shell" style="--oc-block-shell-height: 30rem">
13
+ <input class="oc-block-shell-toggle" type="checkbox" id="oc-shell-toggle" aria-label="Collapse sidebar">
14
+ <aside class="oc-sidebar " aria-label="Main navigation">
15
+ <div class="oc-sidebar-header">
16
+ <a class="oc-sidebar-menu-button oc-sidebar-menu-button--lg" href="#">
17
+ <svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg>
18
+ <span class="oc-sidebar-menu-label"><strong>OmniaDesk</strong></span>
19
+ </a>
20
+ </div>
21
+ <div class="oc-sidebar-content">
22
+ <div class="oc-sidebar-group">
23
+ <div class="oc-sidebar-group-label">Platform</div>
24
+ <ul class="oc-sidebar-menu">
25
+ <li><a class="oc-sidebar-menu-button" href="#" aria-current="page"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg><span class="oc-sidebar-menu-label">Dashboard</span></a></li>
26
+ <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-icon" 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 class="oc-sidebar-menu-label">Contacts</span><span class="oc-sidebar-menu-badge">12</span></a></li>
27
+ <li>
28
+ <details class="oc-sidebar-collapsible" open>
29
+ <summary class="oc-sidebar-menu-button"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2h8l5 5v15H6z"/><path d="M14 2v5h5"/></svg><span class="oc-sidebar-menu-label">Invoices</span></summary>
30
+ <ul class="oc-sidebar-menu-sub">
31
+ <li><a class="oc-sidebar-menu-button" href="#">Sales</a></li>
32
+ <li><a class="oc-sidebar-menu-button" href="#">Purchases</a></li>
33
+ </ul>
34
+ </details>
35
+ </li>
36
+ <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V10M10 20V4M16 20v-8M22 20H2"/></svg><span class="oc-sidebar-menu-label">Reports</span></a></li>
37
+ </ul>
38
+ </div>
39
+ <div class="oc-sidebar-separator"></div>
40
+ <div class="oc-sidebar-group">
41
+ <ul class="oc-sidebar-menu">
42
+ <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-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="3"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"/></svg><span class="oc-sidebar-menu-label">Settings</span></a></li>
43
+ </ul>
44
+ </div>
45
+ </div>
46
+ <div class="oc-sidebar-footer">
47
+ <div class="oc-user">
48
+ <span class="oc-avatar oc-avatar--sm">SC</span>
49
+ <span class="oc-user-text"><span class="oc-user-name">Serge Cools</span><span class="oc-user-email">serge@example.com</span></span>
50
+ </div>
51
+ </div>
52
+ </aside>
53
+ <div class="oc-block-shell-main">
54
+ <header class="oc-block-appbar">
55
+ <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-shell-toggle" title="Toggle sidebar"><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="M4 6h16M4 12h16M4 18h16"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
56
+ <nav class="oc-block-appbar-nav" aria-label="Module navigation">
57
+ <ul class="oc-navmenu">
58
+ <li><a class="oc-navmenu-link" href="#" aria-current="page">Contacts</a></li>
59
+ <li><a class="oc-navmenu-link" href="#">Companies</a></li>
60
+ <li><a class="oc-navmenu-link" href="#">Segments</a></li>
61
+ </ul>
62
+ </nav>
63
+ <div class="oc-block-appbar-actions">
64
+ <div class="oc-theme-switch" role="radiogroup" aria-label="Theme">
65
+ <label><input type="radio" name="oc-shell-theme" value="light"> Light</label>
66
+ <label><input type="radio" name="oc-shell-theme" value="dark"> Dark</label>
67
+ </div>
68
+ <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-shell-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">SC</span></button>
69
+ <div class="oc-dropdown-menu" id="oc-shell-user" popover>
70
+ <div class="oc-dropdown-label">serge@example.com</div>
71
+ <a class="oc-dropdown-item" href="#">Profile</a>
72
+ <a class="oc-dropdown-item" href="#">Settings</a>
73
+ <div class="oc-dropdown-separator"></div>
74
+ <a class="oc-dropdown-item" href="#">Log out</a>
75
+ </div>
76
+ </div>
77
+ </header>
78
+ <div class="oc-block-shell-breadcrumbs"><nav aria-label="Breadcrumb"><ol class="oc-breadcrumb"><li class="oc-breadcrumb-item"><a href="#">Home</a></li><li class="oc-breadcrumb-item"><a href="#">CRM</a></li><li class="oc-breadcrumb-item" aria-current="page">Contacts</li></ol></nav></div>
79
+ <main class="oc-block-shell-content">
80
+ <h1 class="oc-heading-title">Contacts</h1>
81
+ <p class="oc-heading-description">Page content scrolls here.</p>
82
+ </main>
83
+ </div>
84
+ </div>
@@ -0,0 +1,45 @@
1
+ <!-- OmniaUI block: auth-split - Sign-in with a brand panel (logo, quote) next to the form. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-block-authsplit: Grid root (two columns from 62rem)
4
+ .oc-block-authsplit-brand: Left brand panel (primary gradient)
5
+ .oc-block-authsplit-logo: Logo link
6
+ .oc-block-authsplit-quote: Quote (blockquote with p + footer)
7
+ .oc-block-authsplit-form: Right column that centers the card
8
+ .oc-block-authsplit-card: Form width limiter
9
+ .oc-block-authsplit-title / -subtitle: Heading and sub line
10
+ .oc-block-authsplit-fields / -row: Field stack and a justified row (remember me / forgot password)
11
+ Slots: logo, quote, title, subtitle, fields, submit, footer link
12
+ -->
13
+ <div class="oc-block-authsplit">
14
+ <aside class="oc-block-authsplit-brand">
15
+ <a class="oc-block-authsplit-logo" href="#"><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 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg> OmniaDesk</a>
16
+ <blockquote class="oc-block-authsplit-quote">
17
+ <p>&ldquo;One calm place for contacts, invoices and the day-to-day work.&rdquo;</p>
18
+ <footer>Serge Cools, founder</footer>
19
+ </blockquote>
20
+ </aside>
21
+ <div class="oc-block-authsplit-form">
22
+ <form class="oc-block-authsplit-card" action="#" method="post">
23
+ <h1 class="oc-block-authsplit-title">Welcome back</h1>
24
+ <p class="oc-block-authsplit-subtitle">Sign in to your workspace</p>
25
+ <div class="oc-block-authsplit-fields">
26
+ <div class="oc-field">
27
+ <label class="oc-field-label" for="oc-authsplit-email">E-mail</label>
28
+ <input class="oc-input" id="oc-authsplit-email" name="email" type="email" autocomplete="username" placeholder="name@company.com" required>
29
+ </div>
30
+ <div class="oc-field">
31
+ <label class="oc-field-label" for="oc-authsplit-password">Password</label>
32
+ <div class="oc-input-reveal">
33
+ <input class="oc-input" id="oc-authsplit-password" name="password" type="password" autocomplete="current-password" required>
34
+ <button class="oc-input-reveal-button" type="button" aria-pressed="false" aria-label="Toggle password visibility">Show</button>
35
+ </div>
36
+ </div>
37
+ <div class="oc-block-authsplit-row">
38
+ <label><input class="oc-checkbox" type="checkbox" name="remember"> Remember me</label>
39
+ <a class="oc-link" href="#">Forgot password?</a>
40
+ </div>
41
+ <button class="oc-btn" type="submit" style="width:100%">Sign in</button>
42
+ </div>
43
+ </form>
44
+ </div>
45
+ </div>
@@ -0,0 +1,21 @@
1
+ <!-- OmniaUI block: auth — Sign-in card. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS. -->
2
+ <div class="oc-block-auth">
3
+ <div class="oc-block-auth-card">
4
+ <h2>Sign in</h2>
5
+ <p class="oc-block-subtitle">Enter your credentials to continue</p>
6
+ <div class="oc-form-group">
7
+ <label class="oc-label">Email</label>
8
+ <input class="oc-input" type="email" placeholder="name@company.com">
9
+ </div>
10
+ <div class="oc-form-group">
11
+ <label class="oc-label">Password</label>
12
+ <input class="oc-input" type="password" placeholder="********">
13
+ </div>
14
+ <button class="oc-btn" style="width:100%;">Sign in</button>
15
+ <div class="oc-block-auth-divider">or continue with</div>
16
+ <button class="oc-btn oc-btn--outline" style="width:100%;">Sign in with Google</button>
17
+ </div>
18
+ <div class="oc-block-auth-footer">
19
+ Don't have an account? <a href="#">Sign up</a>
20
+ </div>
21
+ </div>
@@ -0,0 +1,38 @@
1
+ <!-- OmniaUI block: contact-grid - Contact section with info cards for e-mail, phone, address and opening hours. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ File: packages/blocks/blocks/contact-grid.html | Map: section.oc-block-contact -> head -> grid -> cards (mark, title, lines)
3
+ Class API: .oc-block-contact (modifier --plain: no card frames), -head, -heading, -lead, -grid, -card (article or address),
4
+ -title, -line (p or a). Cards start with a product mark (.oc-product-mark--sm .oc-product-mark--soft).
5
+ -->
6
+ <section class="oc-block-contact" aria-labelledby="oc-contact-title">
7
+ <div class="oc-block-contact-head">
8
+ <p class="oc-eyebrow">Contact</p>
9
+ <h2 class="oc-block-contact-heading" id="oc-contact-title">Let's talk about your project</h2>
10
+ <p class="oc-block-contact-lead">Mail, call or drop by. We answer every question within one working day.</p>
11
+ </div>
12
+ <div class="oc-block-contact-grid">
13
+ <article class="oc-block-contact-card">
14
+ <span class="oc-product-mark oc-product-mark--sm oc-product-mark--soft oc-accent--blue" aria-hidden="true">&#9993;</span>
15
+ <h3 class="oc-block-contact-title">E-mail</h3>
16
+ <a class="oc-block-contact-line" href="mailto:hello@example.com">hello@example.com</a>
17
+ <p class="oc-block-contact-line">For quotes and questions.</p>
18
+ </article>
19
+ <article class="oc-block-contact-card">
20
+ <span class="oc-product-mark oc-product-mark--sm oc-product-mark--soft oc-accent--green" aria-hidden="true">&#9742;</span>
21
+ <h3 class="oc-block-contact-title">Phone</h3>
22
+ <a class="oc-block-contact-line" href="tel:+3230000000">+32 3 000 00 00</a>
23
+ <p class="oc-block-contact-line">Monday to Friday.</p>
24
+ </article>
25
+ <address class="oc-block-contact-card">
26
+ <span class="oc-product-mark oc-product-mark--sm oc-product-mark--soft oc-accent--orange" aria-hidden="true">&#9873;</span>
27
+ <span class="oc-block-contact-title">Office</span>
28
+ <span class="oc-block-contact-line">Acme Software</span>
29
+ <span class="oc-block-contact-line">Main Street 1, 2000 Antwerp</span>
30
+ </address>
31
+ <article class="oc-block-contact-card">
32
+ <span class="oc-product-mark oc-product-mark--sm oc-product-mark--soft oc-accent--violet" aria-hidden="true">&#9719;</span>
33
+ <h3 class="oc-block-contact-title">Opening hours</h3>
34
+ <p class="oc-block-contact-line">Mon&ndash;Fri: 9:00 &ndash; 17:30</p>
35
+ <p class="oc-block-contact-line">Sat&ndash;Sun: closed</p>
36
+ </article>
37
+ </div>
38
+ </section>
@@ -0,0 +1,8 @@
1
+ <!-- OmniaUI block: cta — Call to action banner. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS. -->
2
+ <div class="oc-block-cta">
3
+ <h2>Ready to start building?</h2>
4
+ <p>Get OmniaCSS and ship your next project faster.</p>
5
+ <div class="oc-block-hero-actions">
6
+ <button class="oc-btn oc-btn--lg">Get started free</button>
7
+ </div>
8
+ </div>
@@ -0,0 +1,111 @@
1
+ <!-- OmniaUI block: data-table - Card with title, actions, search toolbar, sortable table, bulk bar and pagination footer. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-card.oc-block-datatable: Card root
4
+ .oc-block-datatable-head / -title / -description: Card header area
5
+ .oc-block-datatable-body: Padded body
6
+ .oc-table-toolbar: Search + filters row (.oc-table-toolbar-spacer pushes items right)
7
+ .oc-filter-pills / .oc-filter-pill: Segmented link filters (aria-current="true")
8
+ .oc-block-datatable-bulk: Selection bar (appears when rows are selected)
9
+ .oc-table-wrap > .oc-table: Table with .oc-table-sort headers, .oc-table-actions cells (see Table)
10
+ .oc-table-footer: Entries text, page-size select and .oc-pagination
11
+ Slots: title, description, header actions, toolbar, table, footer
12
+ -->
13
+ <section class="oc-card oc-block-datatable">
14
+ <header class="oc-block-datatable-head">
15
+ <div>
16
+ <h2 class="oc-block-datatable-title">Contacts</h2>
17
+ <p class="oc-block-datatable-description">All customers and suppliers.</p>
18
+ </div>
19
+ <div>
20
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Export</button>
21
+ <button class="oc-btn oc-btn--sm" type="button">New contact</button>
22
+ </div>
23
+ </header>
24
+ <div class="oc-block-datatable-body">
25
+ <div class="oc-table-toolbar">
26
+ <input class="oc-input" type="search" placeholder="Search contacts..." aria-label="Search contacts">
27
+ <div class="oc-filter-pills" role="group" aria-label="Status filter">
28
+ <a class="oc-filter-pill" href="#" aria-current="true">Active</a>
29
+ <a class="oc-filter-pill" href="#">Including archived</a>
30
+ <a class="oc-filter-pill" href="#">Archived only</a>
31
+ </div>
32
+ <span class="oc-table-toolbar-spacer"></span>
33
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-datatable-columns">Columns</button>
34
+ <div class="oc-popover oc-popover--sm" id="oc-datatable-columns" popover>
35
+ <label><input class="oc-checkbox" type="checkbox" checked> Name</label><br>
36
+ <label><input class="oc-checkbox" type="checkbox" checked> E-mail</label><br>
37
+ <label><input class="oc-checkbox" type="checkbox" checked> Status</label>
38
+ </div>
39
+ </div>
40
+ <div class="oc-block-datatable-bulk"><span>2 selected</span><button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Export</button><button class="oc-btn oc-btn--destructive oc-btn--sm" type="button">Delete</button></div>
41
+ <div class="oc-table-wrap">
42
+ <table class="oc-table">
43
+ <thead>
44
+ <tr>
45
+ <th style="width:2.5rem"><input class="oc-checkbox" type="checkbox" aria-label="Select all"></th>
46
+ <th aria-sort="ascending"><a class="oc-table-sort" href="?sort=name">Name</a></th>
47
+ <th><a class="oc-table-sort" href="?sort=email">E-mail</a></th>
48
+ <th>Status</th>
49
+ <th data-numeric><a class="oc-table-sort" href="?sort=balance">Balance</a></th>
50
+ <th><span class="oc-visually-hidden">Actions</span></th>
51
+ </tr>
52
+ </thead>
53
+ <tbody>
54
+ <tr>
55
+ <td><input class="oc-checkbox" type="checkbox" aria-label="Select Ada Lovelace"></td>
56
+ <td>Ada Lovelace</td>
57
+ <td>ada@example.com</td>
58
+ <td><span class="oc-badge oc-badge--success">Active</span></td>
59
+ <td data-numeric>420.00</td>
60
+ <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>
61
+ </tr>
62
+ <tr>
63
+ <td><input class="oc-checkbox" type="checkbox" aria-label="Select Alan Turing"></td>
64
+ <td>Alan Turing</td>
65
+ <td>alan@example.com</td>
66
+ <td><span class="oc-badge oc-badge--success">Active</span></td>
67
+ <td data-numeric>840.00</td>
68
+ <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>
69
+ </tr>
70
+ <tr>
71
+ <td><input class="oc-checkbox" type="checkbox" aria-label="Select Grace Hopper"></td>
72
+ <td>Grace Hopper</td>
73
+ <td>grace@example.com</td>
74
+ <td><span class="oc-badge oc-badge--warning">Pending</span></td>
75
+ <td data-numeric>1260.00</td>
76
+ <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>
77
+ </tr>
78
+ <tr>
79
+ <td><input class="oc-checkbox" type="checkbox" aria-label="Select Linus Torvalds"></td>
80
+ <td>Linus Torvalds</td>
81
+ <td>linus@example.com</td>
82
+ <td><span class="oc-badge oc-badge--secondary">Archived</span></td>
83
+ <td data-numeric>1680.00</td>
84
+ <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>
85
+ </tr>
86
+ <tr>
87
+ <td><input class="oc-checkbox" type="checkbox" aria-label="Select Margaret Hamilton"></td>
88
+ <td>Margaret Hamilton</td>
89
+ <td>margaret@example.com</td>
90
+ <td><span class="oc-badge oc-badge--success">Active</span></td>
91
+ <td data-numeric>2100.00</td>
92
+ <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>
93
+ </tr>
94
+ </tbody>
95
+ </table>
96
+ </div>
97
+ <div class="oc-table-footer">
98
+ <span>Showing 1 to 5 of 48 entries</span>
99
+ <label>Rows per page <select class="oc-select" aria-label="Rows per page"><option>10</option><option>25</option><option>50</option></select></label>
100
+ <nav aria-label="Pagination">
101
+ <ul class="oc-pagination">
102
+ <li class="oc-pagination-item"><a href="#" aria-label="Previous">&lsaquo;</a></li>
103
+ <li class="oc-pagination-item is-active"><a href="#" aria-current="page">1</a></li>
104
+ <li class="oc-pagination-item"><a href="#">2</a></li>
105
+ <li class="oc-pagination-item"><a href="#">3</a></li>
106
+ <li class="oc-pagination-item"><a href="#" aria-label="Next">&rsaquo;</a></li>
107
+ </ul>
108
+ </nav>
109
+ </div>
110
+ </div>
111
+ </section>
@@ -0,0 +1,33 @@
1
+ <!-- OmniaUI block: faq - FAQ section: eyebrow, title, lead and an exclusive accordion on native details name (no JavaScript). Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ File: packages/blocks/blocks/faq.html | Map: section.oc-block-faq -> inner -> head -> .oc-accordion (details name) -> more line
3
+ Class API: .oc-block-faq (modifier --split: head left, questions right), -inner, -head, -title, -lead,
4
+ -list (on the .oc-accordion), -more. Items: details.oc-accordion-item name="…" + summary.oc-accordion-trigger + .oc-accordion-content
5
+ -->
6
+ <section class="oc-block-faq" aria-labelledby="oc-faq-title">
7
+ <div class="oc-block-faq-inner">
8
+ <div class="oc-block-faq-head">
9
+ <p class="oc-eyebrow">FAQ</p>
10
+ <h2 class="oc-block-faq-title" id="oc-faq-title">Frequently asked questions</h2>
11
+ <p class="oc-block-faq-lead">Everything you need to know before you start. Can't find your answer? Just ask.</p>
12
+ </div>
13
+ <div class="oc-accordion oc-block-faq-list">
14
+ <details class="oc-accordion-item" name="oc-faq" open>
15
+ <summary class="oc-accordion-trigger">Can I try it for free?</summary>
16
+ <div class="oc-accordion-content">Yes. Every plan starts with a 30-day trial. No credit card needed.</div>
17
+ </details>
18
+ <details class="oc-accordion-item" name="oc-faq">
19
+ <summary class="oc-accordion-trigger">Can I switch plans later?</summary>
20
+ <div class="oc-accordion-content">Any time. Upgrades apply at once; downgrades start at the next billing period.</div>
21
+ </details>
22
+ <details class="oc-accordion-item" name="oc-faq">
23
+ <summary class="oc-accordion-trigger">Where is my data stored?</summary>
24
+ <div class="oc-accordion-content">In data centers inside the European Union, with daily encrypted backups.</div>
25
+ </details>
26
+ <details class="oc-accordion-item" name="oc-faq">
27
+ <summary class="oc-accordion-trigger">Do you offer support?</summary>
28
+ <div class="oc-accordion-content">E-mail support is included in every plan. Pro plans also get phone support.</div>
29
+ </details>
30
+ </div>
31
+ <p class="oc-block-faq-more">Still have questions? <a class="oc-link-arrow" href="#contact">Contact us</a></p>
32
+ </div>
33
+ </section>
@@ -0,0 +1,18 @@
1
+ <!-- OmniaUI block: features — Feature grid with icons. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS. -->
2
+ <div class="oc-block-features">
3
+ <h2>Everything you need</h2>
4
+ <p>Built for speed, customization and developer experience.</p>
5
+ <div class="oc-block-features-grid">
6
+ <div class="oc-block-feature-card">
7
+ <div class="oc-block-feature-icon">&#9889;</div>
8
+ <h3>Fast by default</h3>
9
+ <p>Optimized CSS output with PostCSS and cssnano.</p>
10
+ </div>
11
+ <div class="oc-block-feature-card">
12
+ <div class="oc-block-feature-icon">&#127912;</div>
13
+ <h3>Themeable</h3>
14
+ <p>CSS variables for every token. Swap colors, spacing and radii in one place.</p>
15
+ </div>
16
+ <!-- ... more cards ... -->
17
+ </div>
18
+ </div>
@@ -0,0 +1,41 @@
1
+ <!-- OmniaUI block: footer — Multi-column site footer. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS. -->
2
+ <div class="oc-block-footer">
3
+ <div class="oc-block-footer-grid">
4
+ <div class="oc-block-footer-col">
5
+ <h4>Product</h4>
6
+ <ul>
7
+ <li><a href="#">Features</a></li>
8
+ <li><a href="#">Pricing</a></li>
9
+ <li><a href="#">Changelog</a></li>
10
+ </ul>
11
+ </div>
12
+ <div class="oc-block-footer-col">
13
+ <h4>Docs</h4>
14
+ <ul>
15
+ <li><a href="#">Getting started</a></li>
16
+ <li><a href="#">Components</a></li>
17
+ <li><a href="#">Blocks</a></li>
18
+ </ul>
19
+ </div>
20
+ <div class="oc-block-footer-col">
21
+ <h4>Community</h4>
22
+ <ul>
23
+ <li><a href="#">GitHub</a></li>
24
+ <li><a href="#">Discord</a></li>
25
+ <li><a href="#">Twitter</a></li>
26
+ </ul>
27
+ </div>
28
+ <div class="oc-block-footer-col">
29
+ <h4>Legal</h4>
30
+ <ul>
31
+ <li><a href="#">Privacy</a></li>
32
+ <li><a href="#">Terms</a></li>
33
+ <li><a href="#">License</a></li>
34
+ </ul>
35
+ </div>
36
+ </div>
37
+ <div class="oc-block-footer-bottom">
38
+ <span>&copy; 2026 Birdycom. All rights reserved.</span>
39
+ <span>Built with OmniaCSS</span>
40
+ </div>
41
+ </div>
@@ -0,0 +1,34 @@
1
+ <!-- OmniaUI block: forgot-password - Request a reset link: e-mail field, submit and a back link. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-block-authpage: Page wrapper that centers one card. Modifier: --plain (page background instead of muted)
4
+ .oc-block-authcard: Card column. Modifiers: --flat (no card chrome), --wide
5
+ .oc-block-authcard-logo: Icon tile above the title
6
+ .oc-block-authcard-head / -title / -text: Centered heading block, title and description
7
+ .oc-block-authcard-fields / -row: Field stack and a justified row (remember me / forgot password)
8
+ .oc-block-authcard-submit: Full-width submit button
9
+ .oc-block-authcard-foot / -legal / -hint: Switch-form line, legal line, small helper text
10
+ .oc-block-authcard-center: Centered column (OTP input)
11
+ .oc-block-authsocial: Auto-fit grid of social buttons
12
+ .oc-block-authduo: Split layout root (container query: two columns from 42rem of its own width). Modifier: --reverse
13
+ .oc-block-authduo-grid / -panel / -form: Grid, brand panel (modifiers --image, --muted) and form column
14
+ .oc-block-authduo-logo / -quote: Panel logo and quote
15
+ .oc-block-authmin: Minimal centered column without a card
16
+ .oc-separator-text: Divider with centered text (separator component)
17
+ -->
18
+ <div class="oc-block-authpage oc-block-authpage--plain">
19
+ <form class="oc-block-authcard" action="#" method="post">
20
+ <span class="oc-block-authcard-logo"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></span>
21
+ <div class="oc-block-authcard-head">
22
+ <h1 class="oc-block-authcard-title">Forgot your password?</h1>
23
+ <p class="oc-block-authcard-text">Enter your e-mail and we will send you a reset link</p>
24
+ </div>
25
+ <div class="oc-block-authcard-fields">
26
+ <div class="oc-field">
27
+ <label class="oc-field-label" for="oc-forgot-email">E-mail</label>
28
+ <input class="oc-input" id="oc-forgot-email" name="email" type="email" autocomplete="username" required placeholder="name@company.com">
29
+ </div>
30
+ <button class="oc-btn oc-block-authcard-submit" type="submit">Send reset link</button>
31
+ </div>
32
+ <p class="oc-block-authcard-foot"><a href="#">Back to sign in</a></p>
33
+ </form>
34
+ </div>
@@ -0,0 +1,28 @@
1
+ <!-- OmniaUI block: form-page - Collapsible form sections in a grid with a sticky action bar. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-block-formpage: Column wrapper (max 56rem)
4
+ details.oc-collapsible: Section (see Collapsible section)
5
+ .oc-block-formpage-grid: Two-column field grid from 40rem
6
+ .oc-block-formpage-actions: Sticky bottom action bar
7
+ -->
8
+ <form class="oc-block-formpage" action="#" method="post">
9
+ <details class="oc-collapsible" open>
10
+ <summary><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><span class="oc-collapsible-title">General information</span></summary>
11
+ <div class="oc-collapsible-content">
12
+ <div class="oc-block-formpage-grid">
13
+ <div class="oc-field"><label class="oc-field-label" for="oc-form-name">Name</label><input class="oc-input" id="oc-form-name" name="name"></div>
14
+ <div class="oc-field"><label class="oc-field-label" for="oc-form-vat">VAT number</label><input class="oc-input" id="oc-form-vat" name="vat"></div>
15
+ <div class="oc-field"><label class="oc-field-label" for="oc-form-email">E-mail</label><input class="oc-input" id="oc-form-email" name="email" type="email"></div>
16
+ <div class="oc-field"><label class="oc-field-label" for="oc-form-country">Country</label><select class="oc-select" id="oc-form-country" name="country"><option>Belgium</option><option>Netherlands</option></select></div>
17
+ </div>
18
+ </div>
19
+ </details>
20
+ <details class="oc-collapsible">
21
+ <summary><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"><path d="M9 6h11M9 12h11M9 18h11M4 6h.01M4 12h.01M4 18h.01"/></svg><span class="oc-collapsible-title">Notes</span></summary>
22
+ <div class="oc-collapsible-content"><textarea class="oc-input" name="notes" rows="3" aria-label="Notes"></textarea></div>
23
+ </details>
24
+ <div class="oc-block-formpage-actions">
25
+ <button class="oc-btn oc-btn--outline" type="button">Cancel</button>
26
+ <button class="oc-btn" type="submit">Save</button>
27
+ </div>
28
+ </form>
@@ -0,0 +1,27 @@
1
+ <!-- OmniaUI block: hero-code — Landing hero: eyebrow, display title with gradient word, lead, two buttons and a code window with floating icon tiles. Needs @birdycom/omniaui. -->
2
+ <section class="oc-section-pad">
3
+ <div class="oc-container oc-split">
4
+ <div>
5
+ <p class="oc-eyebrow">Software development &middot; since 2001</p>
6
+ <h1 class="oc-display">We build software that moves your business <span class="oc-text-gradient">forward</span>.</h1>
7
+ <p class="oc-lead">From a modular ERP to a custom app for a single customer: we design, build and maintain web applications, desktop tools and plugins.</p>
8
+ <div class="flex flex-wrap gap-1 mt-2">
9
+ <a class="oc-btn oc-btn--gradient oc-btn--lg" href="#software">View our software &rarr;</a>
10
+ <a class="oc-btn oc-btn--glass oc-btn--lg" href="#contact">Discuss your project</a>
11
+ </div>
12
+ </div>
13
+ <div class="relative p-2">
14
+ <span class="oc-icon-tile oc-icon-tile--float oc-accent--green absolute" style="inset: -0.5rem auto auto 8%;" aria-hidden="true">&#9670;</span>
15
+ <span class="oc-icon-tile oc-icon-tile--float oc-accent--violet absolute" style="inset: 0 6% auto auto; animation-delay: -2s;" aria-hidden="true">&#9673;</span>
16
+ <span class="oc-icon-tile oc-icon-tile--float oc-accent--orange absolute" style="inset: auto 10% -0.5rem auto; animation-delay: -4s;" aria-hidden="true">&#9650;</span>
17
+ <div class="oc-code-window">
18
+ <div class="oc-code-window__bar"><i></i><i></i><i></i><span class="oc-code-window__title">projects.php</span></div>
19
+ <pre class="oc-code-window__body">return [
20
+ 'erp' => OmniaDesk::class,
21
+ 'design' => OmniaCSS::class,
22
+ 'next' => YourProject::class,
23
+ ];</pre>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </section>