@birdycom/omniaui 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +21 -21
  3. package/bin/lib/add.mjs +126 -126
  4. package/bin/lib/catalog.mjs +169 -169
  5. package/bin/lib/project.mjs +90 -90
  6. package/bin/omniaui.mjs +69 -69
  7. package/dist/code-block.css +25 -25
  8. package/dist/components-extra.css +916 -914
  9. package/dist/components.css +6559 -6469
  10. package/dist/components.min.css +1 -1
  11. package/dist/data-table.d.ts +9 -9
  12. package/dist/data-table.js +505 -505
  13. package/dist/docs-ui.css +267 -265
  14. package/dist/oc-theme.css +69 -69
  15. package/dist/parts/app-accordion-accent.css +60 -60
  16. package/dist/parts/app-alpha-tabs.css +68 -68
  17. package/dist/parts/app-busy-overlay.css +25 -25
  18. package/dist/parts/app-column-menu.css +85 -85
  19. package/dist/parts/app-confirm-dialog.css +70 -70
  20. package/dist/parts/app-cookie-consent.css +63 -63
  21. package/dist/parts/app-data-table.css +174 -174
  22. package/dist/parts/app-greeting.css +47 -47
  23. package/dist/parts/app-list-toolbar.css +81 -81
  24. package/dist/parts/app-page-header.css +54 -54
  25. package/dist/parts/app-severity-card.css +91 -91
  26. package/dist/parts/app-sidebar-dark.css +15 -15
  27. package/dist/parts/app-sortable-row.css +52 -52
  28. package/dist/parts/app-stat-card.css +68 -68
  29. package/dist/parts/app-table-actions.css +71 -71
  30. package/dist/parts/app-table-compact.css +54 -54
  31. package/dist/parts/app-top-progress.css +68 -68
  32. package/dist/parts/app-tree.css +104 -104
  33. package/dist/parts/app-upgrade-banner.css +90 -90
  34. package/dist/parts/app-version-banner.css +80 -80
  35. package/dist/parts/data-chart-line.css +167 -167
  36. package/dist/parts/forms-affix-input.css +75 -75
  37. package/dist/parts/forms-barcode-input.css +75 -75
  38. package/dist/parts/forms-chip-filter.css +91 -91
  39. package/dist/parts/forms-color-select.css +97 -89
  40. package/dist/parts/forms-decimal-input.css +51 -51
  41. package/dist/parts/forms-filter-counts.css +94 -94
  42. package/dist/parts/forms-language-select.css +89 -76
  43. package/dist/parts/forms-number-input.css +98 -95
  44. package/dist/parts/forms-password-requirements.css +55 -55
  45. package/dist/parts/forms-phone-input.css +85 -85
  46. package/dist/parts/forms-time-input.css +74 -74
  47. package/dist/parts/forms-toggle-field.css +69 -69
  48. package/dist/parts/media-art.css +21 -21
  49. package/dist/parts/media-attachment.css +160 -160
  50. package/dist/parts/media-browser-frame.css +73 -73
  51. package/dist/parts/media-card.css +83 -83
  52. package/dist/parts/media-chat-composer.css +90 -90
  53. package/dist/parts/media-doc-viewer.css +151 -151
  54. package/dist/parts/media-emoji-picker.css +88 -88
  55. package/dist/parts/media-entity-card.css +52 -52
  56. package/dist/parts/media-flip-card.css +78 -78
  57. package/dist/parts/media-image-zoom.css +68 -68
  58. package/dist/parts/media-lightbox.css +131 -131
  59. package/dist/parts/media-message-thread.css +136 -136
  60. package/dist/parts/media-message.css +160 -160
  61. package/dist/parts/media-row.css +78 -78
  62. package/dist/parts/media-stack-card.css +82 -82
  63. package/dist/parts/media-terminal-log.css +76 -76
  64. package/dist/parts/media-thumb.css +71 -71
  65. package/dist/parts/site-fact-list.css +25 -25
  66. package/dist/parts/site-link-arrow.css +34 -34
  67. package/dist/parts/site-marquee.css +34 -34
  68. package/dist/parts/site-next-teaser.css +75 -75
  69. package/dist/parts/site-price-card.css +91 -75
  70. package/dist/parts/site-product-mark.css +66 -66
  71. package/dist/parts/site-project-card.css +111 -111
  72. package/dist/parts/site-prose.css +124 -124
  73. package/dist/parts/site-stack-list.css +48 -48
  74. package/dist/parts/site-timeline.css +54 -54
  75. package/dist/showcase.css +404 -404
  76. package/package.json +69 -69
  77. package/snippets/accordion-accent.html +24 -24
  78. package/snippets/accordion.html +11 -11
  79. package/snippets/affix-input.html +30 -30
  80. package/snippets/alert-dialog.html +22 -22
  81. package/snippets/alert.html +5 -5
  82. package/snippets/alpha-tabs.html +37 -37
  83. package/snippets/aspect-ratio.html +15 -15
  84. package/snippets/attachment.html +43 -43
  85. package/snippets/avatar.html +6 -6
  86. package/snippets/back-link.html +5 -5
  87. package/snippets/badge.html +5 -5
  88. package/snippets/barcode-input.html +18 -18
  89. package/snippets/breadcrumb.html +6 -6
  90. package/snippets/browser-frame.html +18 -18
  91. package/snippets/busy-overlay.html +31 -31
  92. package/snippets/button-group.html +21 -21
  93. package/snippets/button.html +8 -8
  94. package/snippets/calendar.html +43 -43
  95. package/snippets/card.html +17 -17
  96. package/snippets/carousel.html +21 -21
  97. package/snippets/chart-line.html +46 -46
  98. package/snippets/chart.html +27 -27
  99. package/snippets/chat-composer.html +21 -21
  100. package/snippets/checkbox.html +5 -5
  101. package/snippets/checklist.html +23 -23
  102. package/snippets/chip-filter.html +14 -14
  103. package/snippets/code-window.html +20 -20
  104. package/snippets/collapsible.html +19 -19
  105. package/snippets/color-field.html +13 -13
  106. package/snippets/color-select.html +18 -18
  107. package/snippets/column-menu.html +38 -38
  108. package/snippets/combobox.html +19 -19
  109. package/snippets/command.html +24 -24
  110. package/snippets/confirm-dialog.html +32 -32
  111. package/snippets/context-menu.html +25 -25
  112. package/snippets/cookie-consent.html +70 -70
  113. package/snippets/copy-field.html +19 -19
  114. package/snippets/counter.html +2 -2
  115. package/snippets/data-table.html +151 -151
  116. package/snippets/date-picker.html +32 -32
  117. package/snippets/decimal-input.html +20 -20
  118. package/snippets/definition-list.html +20 -20
  119. package/snippets/demo-panel.html +18 -18
  120. package/snippets/doc-viewer.html +58 -58
  121. package/snippets/drawer.html +30 -30
  122. package/snippets/dropdown-menu.html +27 -27
  123. package/snippets/dropdown.html +9 -9
  124. package/snippets/dropzone.html +13 -13
  125. package/snippets/emoji-picker.html +51 -51
  126. package/snippets/empty-state.html +17 -17
  127. package/snippets/entity-card.html +26 -26
  128. package/snippets/expandable-table.html +26 -26
  129. package/snippets/fact-list.html +14 -14
  130. package/snippets/filter-counts.html +30 -30
  131. package/snippets/flip-card.html +22 -22
  132. package/snippets/form-field.html +6 -6
  133. package/snippets/greeting.html +22 -22
  134. package/snippets/heading.html +14 -14
  135. package/snippets/hover-card.html +18 -18
  136. package/snippets/image-zoom.html +30 -30
  137. package/snippets/input-group.html +10 -10
  138. package/snippets/input.html +5 -5
  139. package/snippets/item.html +26 -26
  140. package/snippets/kbd.html +13 -13
  141. package/snippets/label.html +9 -9
  142. package/snippets/language-select.html +26 -26
  143. package/snippets/launcher-card.html +14 -14
  144. package/snippets/lightbox.html +50 -50
  145. package/snippets/link-arrow.html +10 -10
  146. package/snippets/list-toolbar.html +33 -33
  147. package/snippets/marquee.html +15 -15
  148. package/snippets/media-card.html +28 -28
  149. package/snippets/media-row.html +21 -21
  150. package/snippets/media-thumb.html +12 -12
  151. package/snippets/menubar.html +30 -30
  152. package/snippets/message-thread.html +123 -123
  153. package/snippets/message.html +51 -51
  154. package/snippets/modal.html +15 -15
  155. package/snippets/native-select.html +15 -15
  156. package/snippets/navmenu.html +23 -23
  157. package/snippets/next-teaser.html +15 -15
  158. package/snippets/number-input.html +27 -27
  159. package/snippets/otp-input.html +9 -9
  160. package/snippets/page-header.html +24 -24
  161. package/snippets/pagination.html +6 -6
  162. package/snippets/password-input.html +24 -24
  163. package/snippets/password-requirements.html +30 -30
  164. package/snippets/phone-input.html +22 -22
  165. package/snippets/popover.html +15 -15
  166. package/snippets/price-card.html +34 -34
  167. package/snippets/product-mark.html +13 -13
  168. package/snippets/progress.html +4 -4
  169. package/snippets/project-card.html +23 -23
  170. package/snippets/prose.html +54 -54
  171. package/snippets/radio.html +17 -17
  172. package/snippets/recovery-codes.html +20 -20
  173. package/snippets/resizable.html +16 -16
  174. package/snippets/scroll-area.html +20 -20
  175. package/snippets/search.html +8 -8
  176. package/snippets/segmented.html +11 -11
  177. package/snippets/select.html +7 -7
  178. package/snippets/separator.html +15 -15
  179. package/snippets/severity-card.html +35 -35
  180. package/snippets/sheet.html +32 -32
  181. package/snippets/sidebar-docs.html +24 -24
  182. package/snippets/sidebar.html +55 -55
  183. package/snippets/site-footer.html +6 -6
  184. package/snippets/site-header.html +26 -26
  185. package/snippets/skeleton.html +4 -4
  186. package/snippets/slider.html +17 -17
  187. package/snippets/sortable-row.html +31 -31
  188. package/snippets/spinner.html +14 -14
  189. package/snippets/stack-card.html +17 -17
  190. package/snippets/stack-list.html +16 -16
  191. package/snippets/stat-card.html +24 -24
  192. package/snippets/stepper.html +13 -13
  193. package/snippets/switch.html +6 -6
  194. package/snippets/table-actions.html +39 -39
  195. package/snippets/table-compact.html +24 -24
  196. package/snippets/table.html +29 -29
  197. package/snippets/tabs.html +9 -9
  198. package/snippets/tag-input.html +60 -17
  199. package/snippets/terminal-log.html +23 -23
  200. package/snippets/textarea.html +3 -3
  201. package/snippets/theme-switch.html +6 -6
  202. package/snippets/time-input.html +26 -26
  203. package/snippets/timeline.html +28 -28
  204. package/snippets/toast-stack.html +10 -10
  205. package/snippets/toast.html +36 -36
  206. package/snippets/toc.html +13 -13
  207. package/snippets/toggle-field.html +20 -20
  208. package/snippets/toggle.html +22 -22
  209. package/snippets/tooltip.html +4 -4
  210. package/snippets/top-progress.html +12 -12
  211. package/snippets/tree.html +38 -38
  212. package/snippets/upgrade-banner.html +28 -28
  213. package/snippets/user.html +15 -15
  214. package/snippets/version-banner.html +15 -15
@@ -1,54 +1,54 @@
1
- <!-- OmniaUI component: prose — Typography for long-form CMS, blog and help text: headings, lists, quotes, code, tables, figures. Needs @birdycom/omniaui CSS.
2
- File: packages/ui/snippets/prose.html | Map: article -> lead -> h2 + list -> figure -> h3 + ordered list -> blockquote -> table -> code -> hr + small print
3
- Class API (modifiers are extra classes / attributes on the same element):
4
- .oc-prose: Wrapper around HTML without classes (h1–h4, p, a, strong, em, mark, code, kbd, ul, ol, dl, blockquote,
5
- pre, table, figure, img, figcaption, hr). Width is 68ch. Modifiers: --sm, --lg (all spacing scales along), --full (no max width)
6
- .oc-prose-lead: Larger intro paragraph
7
- Rules use :where(), so they carry no extra weight: a utility class on an element inside the text still wins. No JavaScript.
8
- -->
9
- <article class="oc-prose">
10
- <h1>Planning a kitchen renovation</h1>
11
- <p class="oc-prose-lead">A new kitchen takes eight to twelve weeks from the first visit to the last cabinet handle. This guide explains every step, so you know what to expect and when we need you.</p>
12
- <h2>Before the first visit</h2>
13
- <p>Collect a few photos of kitchens you like and measure the room roughly. Exact measurements are not needed yet: our site manager does that during the visit. Read the <a href="#checklist">preparation checklist</a> if you want to be fully ready.</p>
14
- <ul>
15
- <li>The <strong>budget range</strong> you have in mind, including appliances</li>
16
- <li>Which walls, doors and windows can move, and which cannot
17
- <ul><li>Load-bearing walls need a structural engineer</li><li>Moving a window needs a permit in most towns</li></ul>
18
- </li>
19
- <li>Appliances you want to keep</li>
20
- </ul>
21
- <figure>
22
- <div class="oc-media-art oc-media-art--6" role="img" aria-label="Kitchen with oak fronts and a light stone worktop"></div>
23
- <figcaption>Villa Dewitte: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>
24
- </figure>
25
- <h3>From design to installation</h3>
26
- <ol>
27
- <li>Site visit and measurements (week 1)</li>
28
- <li>Design and quote, with two revision rounds (weeks 2–3)</li>
29
- <li>Order and production of the cabinets (weeks 4–9)</li>
30
- <li>Installation, worktop and finishing (weeks 10–11)</li>
31
- </ol>
32
- <blockquote>
33
- <p>The planning was clear from day one. We always knew who was coming and when, and the kitchen was ready a week early.</p>
34
- <footer>— Ann Dewitte, client in Ghent</footer>
35
- </blockquote>
36
- <h2>Worktop materials compared</h2>
37
- <table>
38
- <caption>Prices per running metre, 60 cm deep, installed.</caption>
39
- <thead><tr><th>Material</th><th>Thickness</th><th>Heat resistant</th><th>Price</th></tr></thead>
40
- <tbody>
41
- <tr><td>Compact laminate</td><td>12 mm</td><td>Up to 180 °C</td><td>€ 290</td></tr>
42
- <tr><td>Quartz composite</td><td>20 mm</td><td>Up to 150 °C</td><td>€ 540</td></tr>
43
- <tr><td>Natural stone</td><td>20 mm</td><td>Yes</td><td>€ 720</td></tr>
44
- </tbody>
45
- </table>
46
- <h3>Sharing your floor plan</h3>
47
- <p>Upload a PDF or a photo in the client portal, or send it by e-mail. Press <kbd>Ctrl</kbd> + <kbd>V</kbd> in the chat to paste a screenshot. Files are stored as <code>project-id/plans/</code> and only your project team can see them.</p>
48
- <pre><code>Project: 2026-114 Villa Dewitte
49
- Room: Kitchen, ground floor
50
- Wall A: 412 cm (window at 160 cm)
51
- Wall B: 298 cm (door at the left)</code></pre>
52
- <hr>
53
- <p><small>Lead times are an estimate. <mark>Natural stone</mark> can take two weeks longer in summer.</small></p>
54
- </article>
1
+ <!-- OmniaUI component: prose — Typography for long-form CMS, blog and help text: headings, lists, quotes, code, tables, figures. Needs @birdycom/omniaui CSS.
2
+ File: packages/ui/snippets/prose.html | Map: article -> lead -> h2 + list -> figure -> h3 + ordered list -> blockquote -> table -> code -> hr + small print
3
+ Class API (modifiers are extra classes / attributes on the same element):
4
+ .oc-prose: Wrapper around HTML without classes (h1–h4, p, a, strong, em, mark, code, kbd, ul, ol, dl, blockquote,
5
+ pre, table, figure, img, figcaption, hr). Width is 68ch. Modifiers: --sm, --lg (all spacing scales along), --full (no max width)
6
+ .oc-prose-lead: Larger intro paragraph
7
+ Rules use :where(), so they carry no extra weight: a utility class on an element inside the text still wins. No JavaScript.
8
+ -->
9
+ <article class="oc-prose">
10
+ <h1>Planning a kitchen renovation</h1>
11
+ <p class="oc-prose-lead">A new kitchen takes eight to twelve weeks from the first visit to the last cabinet handle. This guide explains every step, so you know what to expect and when we need you.</p>
12
+ <h2>Before the first visit</h2>
13
+ <p>Collect a few photos of kitchens you like and measure the room roughly. Exact measurements are not needed yet: our site manager does that during the visit. Read the <a href="#checklist">preparation checklist</a> if you want to be fully ready.</p>
14
+ <ul>
15
+ <li>The <strong>budget range</strong> you have in mind, including appliances</li>
16
+ <li>Which walls, doors and windows can move, and which cannot
17
+ <ul><li>Load-bearing walls need a structural engineer</li><li>Moving a window needs a permit in most towns</li></ul>
18
+ </li>
19
+ <li>Appliances you want to keep</li>
20
+ </ul>
21
+ <figure>
22
+ <div class="oc-media-art oc-media-art--6" role="img" aria-label="Kitchen with oak fronts and a light stone worktop"></div>
23
+ <figcaption>Villa Dewitte: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>
24
+ </figure>
25
+ <h3>From design to installation</h3>
26
+ <ol>
27
+ <li>Site visit and measurements (week 1)</li>
28
+ <li>Design and quote, with two revision rounds (weeks 2–3)</li>
29
+ <li>Order and production of the cabinets (weeks 4–9)</li>
30
+ <li>Installation, worktop and finishing (weeks 10–11)</li>
31
+ </ol>
32
+ <blockquote>
33
+ <p>The planning was clear from day one. We always knew who was coming and when, and the kitchen was ready a week early.</p>
34
+ <footer>— Ann Dewitte, client in Ghent</footer>
35
+ </blockquote>
36
+ <h2>Worktop materials compared</h2>
37
+ <table>
38
+ <caption>Prices per running metre, 60 cm deep, installed.</caption>
39
+ <thead><tr><th>Material</th><th>Thickness</th><th>Heat resistant</th><th>Price</th></tr></thead>
40
+ <tbody>
41
+ <tr><td>Compact laminate</td><td>12 mm</td><td>Up to 180 °C</td><td>€ 290</td></tr>
42
+ <tr><td>Quartz composite</td><td>20 mm</td><td>Up to 150 °C</td><td>€ 540</td></tr>
43
+ <tr><td>Natural stone</td><td>20 mm</td><td>Yes</td><td>€ 720</td></tr>
44
+ </tbody>
45
+ </table>
46
+ <h3>Sharing your floor plan</h3>
47
+ <p>Upload a PDF or a photo in the client portal, or send it by e-mail. Press <kbd>Ctrl</kbd> + <kbd>V</kbd> in the chat to paste a screenshot. Files are stored as <code>project-id/plans/</code> and only your project team can see them.</p>
48
+ <pre><code>Project: 2026-114 Villa Dewitte
49
+ Room: Kitchen, ground floor
50
+ Wall A: 412 cm (window at 160 cm)
51
+ Wall B: 298 cm (door at the left)</code></pre>
52
+ <hr>
53
+ <p><small>Lead times are an estimate. <mark>Natural stone</mark> can take two weeks longer in summer.</small></p>
54
+ </article>
@@ -1,17 +1,17 @@
1
- <!-- OmniaUI component: radio - Radio group: native inputs, stacked or row, descriptions, card style. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-radio: the input (accent-color from the theme)
4
- .oc-radio-group: fieldset/div wrapper. Modifier: --row
5
- .oc-radio-item: label around input + text. Modifier: --card (bordered, highlights when checked)
6
- -->
7
- <fieldset class="oc-radio-group">
8
- <legend class="oc-label">Plan</legend>
9
- <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="free" checked> Free</label>
10
- <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="pro"> Pro</label>
11
- <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="team" disabled> Team (soon)</label>
12
- </fieldset>
13
-
14
- <div class="oc-radio-group">
15
- <label class="oc-radio-item oc-radio-item--card"><input class="oc-radio" type="radio" name="oc-bill" value="month" checked><span>Monthly<small>Billed every month, cancel anytime.</small></span></label>
16
- <label class="oc-radio-item oc-radio-item--card"><input class="oc-radio" type="radio" name="oc-bill" value="year"><span>Yearly<small>Two months free.</small></span></label>
17
- </div>
1
+ <!-- OmniaUI component: radio - Radio group: native inputs, stacked or row, descriptions, card style. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-radio: the input (accent-color from the theme)
4
+ .oc-radio-group: fieldset/div wrapper. Modifier: --row
5
+ .oc-radio-item: label around input + text. Modifier: --card (bordered, highlights when checked)
6
+ -->
7
+ <fieldset class="oc-radio-group">
8
+ <legend class="oc-label">Plan</legend>
9
+ <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="free" checked> Free</label>
10
+ <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="pro"> Pro</label>
11
+ <label class="oc-radio-item"><input class="oc-radio" type="radio" name="oc-plan" value="team" disabled> Team (soon)</label>
12
+ </fieldset>
13
+
14
+ <div class="oc-radio-group">
15
+ <label class="oc-radio-item oc-radio-item--card"><input class="oc-radio" type="radio" name="oc-bill" value="month" checked><span>Monthly<small>Billed every month, cancel anytime.</small></span></label>
16
+ <label class="oc-radio-item oc-radio-item--card"><input class="oc-radio" type="radio" name="oc-bill" value="year"><span>Yearly<small>Two months free.</small></span></label>
17
+ </div>
@@ -1,20 +1,20 @@
1
- <!-- OmniaUI component: recovery-codes - Warning panel with a code grid plus copy and download actions. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-recovery-codes: Panel (warning tint)
4
- .oc-recovery-codes-title / -warning: Heading and explanation
5
- .oc-recovery-codes-list: Two-column monospace grid (selectable with one click)
6
- .oc-recovery-codes-actions: Button row
7
- -->
8
- <div class="oc-recovery-codes">
9
- <h3 class="oc-recovery-codes-title">Recovery codes</h3>
10
- <p class="oc-recovery-codes-warning">Store these codes somewhere safe. Each code works once.</p>
11
- <ul class="oc-recovery-codes-list">
12
- <li>4F8K-92QA</li><li>M3ZP-71LD</li>
13
- <li>7TQX-0BNE</li><li>C8WV-5YHR</li>
14
- <li>2JDA-KE63</li><li>R9UG-X4MS</li>
15
- </ul>
16
- <div class="oc-recovery-codes-actions">
17
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Copy all</button>
18
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Download .txt</button>
19
- </div>
20
- </div>
1
+ <!-- OmniaUI component: recovery-codes - Warning panel with a code grid plus copy and download actions. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-recovery-codes: Panel (warning tint)
4
+ .oc-recovery-codes-title / -warning: Heading and explanation
5
+ .oc-recovery-codes-list: Two-column monospace grid (selectable with one click)
6
+ .oc-recovery-codes-actions: Button row
7
+ -->
8
+ <div class="oc-recovery-codes">
9
+ <h3 class="oc-recovery-codes-title">Recovery codes</h3>
10
+ <p class="oc-recovery-codes-warning">Store these codes somewhere safe. Each code works once.</p>
11
+ <ul class="oc-recovery-codes-list">
12
+ <li>4F8K-92QA</li><li>M3ZP-71LD</li>
13
+ <li>7TQX-0BNE</li><li>C8WV-5YHR</li>
14
+ <li>2JDA-KE63</li><li>R9UG-X4MS</li>
15
+ </ul>
16
+ <div class="oc-recovery-codes-actions">
17
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Copy all</button>
18
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Download .txt</button>
19
+ </div>
20
+ </div>
@@ -1,16 +1,16 @@
1
- <!-- OmniaUI component: resizable - Resizable panels using CSS resize (horizontal, vertical, free box). Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-resizable: flex container. Modifier: --vertical
4
- .oc-resizable-panel: pane. Modifier: --resizable (gets the resize grip; sets min/max size)
5
- .oc-resizable-box: any element with resize: both
6
- -->
7
- <div class="oc-resizable" style="block-size:11rem">
8
- <div class="oc-resizable-panel oc-resizable-panel--resizable"><strong>Sidebar</strong><br>Drag the corner grip to resize.</div>
9
- <div class="oc-resizable-panel"><strong>Content</strong><br>Takes the remaining space.</div>
10
- </div>
11
-
12
- <div class="oc-resizable oc-resizable--vertical" style="block-size:14rem">
13
- <div class="oc-resizable-panel oc-resizable-panel--resizable"><strong>Editor</strong></div>
14
- <div class="oc-resizable-panel"><strong>Preview</strong></div>
15
- </div>
16
- <div class="oc-resizable-box oc-resizable" style="inline-size:14rem;block-size:6rem"><div class="oc-resizable-panel">Resize me in both directions</div></div>
1
+ <!-- OmniaUI component: resizable - Resizable panels using CSS resize (horizontal, vertical, free box). Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-resizable: flex container. Modifier: --vertical
4
+ .oc-resizable-panel: pane. Modifier: --resizable (gets the resize grip; sets min/max size)
5
+ .oc-resizable-box: any element with resize: both
6
+ -->
7
+ <div class="oc-resizable" style="block-size:11rem">
8
+ <div class="oc-resizable-panel oc-resizable-panel--resizable"><strong>Sidebar</strong><br>Drag the corner grip to resize.</div>
9
+ <div class="oc-resizable-panel"><strong>Content</strong><br>Takes the remaining space.</div>
10
+ </div>
11
+
12
+ <div class="oc-resizable oc-resizable--vertical" style="block-size:14rem">
13
+ <div class="oc-resizable-panel oc-resizable-panel--resizable"><strong>Editor</strong></div>
14
+ <div class="oc-resizable-panel"><strong>Preview</strong></div>
15
+ </div>
16
+ <div class="oc-resizable-box oc-resizable" style="inline-size:14rem;block-size:6rem"><div class="oc-resizable-panel">Resize me in both directions</div></div>
@@ -1,20 +1,20 @@
1
- <!-- OmniaUI component: scroll-area - Scroll area: bounded scroll region with themed thin scrollbar and edge shadows. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-scroll-area: bordered scroll region (max-block-size 14rem). Modifiers: --x (horizontal), --shadows (edge shadows, CSS only)
4
- .oc-scrollbar: themed scrollbar for any overflow element. Modifiers: --thin, --hidden
5
- -->
6
- <div class="oc-scroll-area oc-scroll-area--shadows" tabindex="0" role="region" aria-label="Release notes">
7
- <h4 style="margin:0 0 .5rem">Release notes</h4>
8
- <p>Version 0.9.0 &ndash; light-dark() tokens for every component.</p>
9
- <p>Version 0.8.0 &ndash; sheet, popover and command on native dialog and popover.</p>
10
- <p>Version 0.6.0 &ndash; toast with CSS auto-dismiss.</p>
11
- <p>Version 0.6.0 &ndash; segmented control and stepper.</p>
12
- <p>Version 0.5.0 &ndash; otp input, tag input and copy field.</p>
13
- <p>Version 0.4.0 &ndash; sidebar with icon-only mode.</p>
14
- <p>Version 0.3.0 &ndash; tabs, accordion on details.</p>
15
- <p>Version 0.2.0 &ndash; alerts and badges.</p>
16
- </div>
17
-
18
- <div class="oc-scroll-area oc-scroll-area--x" tabindex="0" role="region" aria-label="Tags">
19
- <span class="oc-badge">design</span> <span class="oc-badge">tokens</span> <span class="oc-badge">dark mode</span> <span class="oc-badge">anchor positioning</span> <span class="oc-badge">popover</span> <span class="oc-badge">container queries</span> <span class="oc-badge">scroll snap</span> <span class="oc-badge">view transitions</span> <span class="oc-badge">oklch</span> <span class="oc-badge">light-dark</span> <span class="oc-badge">color-mix</span>
20
- </div>
1
+ <!-- OmniaUI component: scroll-area - Scroll area: bounded scroll region with themed thin scrollbar and edge shadows. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-scroll-area: bordered scroll region (max-block-size 14rem). Modifiers: --x (horizontal), --shadows (edge shadows, CSS only)
4
+ .oc-scrollbar: themed scrollbar for any overflow element. Modifiers: --thin, --hidden
5
+ -->
6
+ <div class="oc-scroll-area oc-scroll-area--shadows" tabindex="0" role="region" aria-label="Release notes">
7
+ <h4 style="margin:0 0 .5rem">Release notes</h4>
8
+ <p>Version 0.9.0 &ndash; light-dark() tokens for every component.</p>
9
+ <p>Version 0.8.0 &ndash; sheet, popover and command on native dialog and popover.</p>
10
+ <p>Version 0.6.0 &ndash; toast with CSS auto-dismiss.</p>
11
+ <p>Version 0.6.0 &ndash; segmented control and stepper.</p>
12
+ <p>Version 0.5.0 &ndash; otp input, tag input and copy field.</p>
13
+ <p>Version 0.4.0 &ndash; sidebar with icon-only mode.</p>
14
+ <p>Version 0.3.0 &ndash; tabs, accordion on details.</p>
15
+ <p>Version 0.2.0 &ndash; alerts and badges.</p>
16
+ </div>
17
+
18
+ <div class="oc-scroll-area oc-scroll-area--x" tabindex="0" role="region" aria-label="Tags">
19
+ <span class="oc-badge">design</span> <span class="oc-badge">tokens</span> <span class="oc-badge">dark mode</span> <span class="oc-badge">anchor positioning</span> <span class="oc-badge">popover</span> <span class="oc-badge">container queries</span> <span class="oc-badge">scroll snap</span> <span class="oc-badge">view transitions</span> <span class="oc-badge">oklch</span> <span class="oc-badge">light-dark</span> <span class="oc-badge">color-mix</span>
20
+ </div>
@@ -1,8 +1,8 @@
1
- <!-- OmniaUI component: search - Search field. Needs @birdycom/omniaui CSS.
2
- Class API: .oc-search (label wrapper) · .oc-search-icon (svg) · .oc-search-input (input type="search") · .oc-search-hint (kbd, hidden while focused)
3
- -->
4
- <label class="oc-search">
5
- <svg class="oc-search-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
6
- <input class="oc-search-input" type="search" name="q" placeholder="Search the docs" aria-label="Search the docs">
7
- <kbd class="oc-search-hint">/</kbd>
8
- </label>
1
+ <!-- OmniaUI component: search - Search field. Needs @birdycom/omniaui CSS.
2
+ Class API: .oc-search (label wrapper) · .oc-search-icon (svg) · .oc-search-input (input type="search") · .oc-search-hint (kbd, hidden while focused)
3
+ -->
4
+ <label class="oc-search">
5
+ <svg class="oc-search-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
6
+ <input class="oc-search-input" type="search" name="q" placeholder="Search the docs" aria-label="Search the docs">
7
+ <kbd class="oc-search-hint">/</kbd>
8
+ </label>
@@ -1,11 +1,11 @@
1
- <!-- OmniaUI component: segmented - Radio group as a pill switcher for a single choice - no JavaScript. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-segmented: Group wrapper (role="radiogroup"). Modifiers: --block (full width), --sm.
4
- .oc-segmented-item: Label that wraps one radio input and its text
5
- Slots: one .oc-segmented-item per option (radio input + label text)
6
- -->
7
- <div class="oc-segmented" role="radiogroup" aria-label="Period">
8
- <label class="oc-segmented-item"><input type="radio" name="oc-period" value="month" checked> Month</label>
9
- <label class="oc-segmented-item"><input type="radio" name="oc-period" value="quarter"> Quarter</label>
10
- <label class="oc-segmented-item"><input type="radio" name="oc-period" value="year"> Year</label>
11
- </div>
1
+ <!-- OmniaUI component: segmented - Radio group as a pill switcher for a single choice - no JavaScript. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-segmented: Group wrapper (role="radiogroup"). Modifiers: --block (full width), --sm.
4
+ .oc-segmented-item: Label that wraps one radio input and its text
5
+ Slots: one .oc-segmented-item per option (radio input + label text)
6
+ -->
7
+ <div class="oc-segmented" role="radiogroup" aria-label="Period">
8
+ <label class="oc-segmented-item"><input type="radio" name="oc-period" value="month" checked> Month</label>
9
+ <label class="oc-segmented-item"><input type="radio" name="oc-period" value="quarter"> Quarter</label>
10
+ <label class="oc-segmented-item"><input type="radio" name="oc-period" value="year"> Year</label>
11
+ </div>
@@ -1,7 +1,7 @@
1
- <!-- OmniaUI component: select - Native select. Needs @birdycom/omniaui CSS.
2
- -->
3
- <select class="oc-select" aria-label="Country">
4
- <option>Belgium</option>
5
- <option>Netherlands</option>
6
- <option>Germany</option>
7
- </select>
1
+ <!-- OmniaUI component: select - Native select. Needs @birdycom/omniaui CSS.
2
+ -->
3
+ <select class="oc-select" aria-label="Country">
4
+ <option>Belgium</option>
5
+ <option>Netherlands</option>
6
+ <option>Germany</option>
7
+ </select>
@@ -1,15 +1,15 @@
1
- <!-- OmniaUI component: separator - Separator: horizontal, vertical and with label. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-separator: 1px divider (use on <hr>). Modifiers: --vertical, --strong
4
- .oc-separator-text: divider lines with a centered label
5
- -->
6
- <p style="margin:0;font-size:.875rem">Content above</p>
7
- <hr class="oc-separator">
8
- <p style="margin:0;font-size:.875rem">Content below</p>
9
-
10
- <div style="display:flex;align-items:center;block-size:1.5rem;font-size:.875rem">
11
- <span>Blog</span><span class="oc-separator oc-separator--vertical" role="separator" aria-orientation="vertical"></span>
12
- <span>Docs</span><span class="oc-separator oc-separator--vertical" role="separator" aria-orientation="vertical"></span>
13
- <span>Source</span>
14
- </div>
15
- <div class="oc-separator-text" role="separator"><span>or continue with</span></div>
1
+ <!-- OmniaUI component: separator - Separator: horizontal, vertical and with label. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-separator: 1px divider (use on <hr>). Modifiers: --vertical, --strong
4
+ .oc-separator-text: divider lines with a centered label
5
+ -->
6
+ <p style="margin:0;font-size:.875rem">Content above</p>
7
+ <hr class="oc-separator">
8
+ <p style="margin:0;font-size:.875rem">Content below</p>
9
+
10
+ <div style="display:flex;align-items:center;block-size:1.5rem;font-size:.875rem">
11
+ <span>Blog</span><span class="oc-separator oc-separator--vertical" role="separator" aria-orientation="vertical"></span>
12
+ <span>Docs</span><span class="oc-separator oc-separator--vertical" role="separator" aria-orientation="vertical"></span>
13
+ <span>Source</span>
14
+ </div>
15
+ <div class="oc-separator-text" role="separator"><span>or continue with</span></div>
@@ -1,35 +1,35 @@
1
- <!-- OmniaUI component: severity-card - Risk-colored expandable card (low, medium, high, critical) on details / summary - no JavaScript. Needs @birdycom/omniaui CSS.
2
- File: packages/ui/snippets/severity-card.html | Map: high card (open: head, body, actions) -> low resolved card
3
- Class API (modifiers are extra classes / attributes on the same element):
4
- details.oc-severity-card: Card. Levels: --low, --medium, --high, --critical. State: .is-resolved (neutral, title struck). Same name="..." = one open at a time.
5
- summary.oc-severity-card-head: Head row with chevron
6
- .oc-severity-card-icon / -main / -title: Icon, text column, title in the level color
7
- .oc-severity-card-tags / -tag: Small monospace tags under the title
8
- .oc-severity-card-level: Level badge at the end of the head
9
- .oc-severity-card-body / -actions: Details text and action buttons
10
- Slots: icon, title, tags, level, body, actions
11
- -->
12
- <details class="oc-severity-card oc-severity-card--high" name="oc-findings" open>
13
- <summary class="oc-severity-card-head">
14
- <span class="oc-severity-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="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/><path d="M12 9v4M12 17h.01"/></svg></span>
15
- <span class="oc-severity-card-main">
16
- <span class="oc-severity-card-title">shop-example.com data breach</span>
17
- <span class="oc-severity-card-tags"><span class="oc-severity-card-tag">email</span><span class="oc-severity-card-tag">password</span><span class="oc-severity-card-tag">phone</span></span>
18
- </span>
19
- <span class="oc-severity-card-level">High</span>
20
- </summary>
21
- <div class="oc-severity-card-body">
22
- <p>Your e-mail address and a hashed password appeared in a leak from March 2026. Change the password on this site and everywhere you reused it.</p>
23
- <div class="oc-severity-card-actions">
24
- <a class="oc-btn oc-btn--sm" href="#">Change password</a>
25
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Mark as resolved</button>
26
- </div>
27
- </div>
28
- </details>
29
- <details class="oc-severity-card oc-severity-card--low is-resolved" name="oc-findings">
30
- <summary class="oc-severity-card-head">
31
- <span class="oc-severity-card-main"><span class="oc-severity-card-title">Old forum profile</span></span>
32
- <span class="oc-severity-card-level">Resolved</span>
33
- </summary>
34
- <div class="oc-severity-card-body"><p>The profile was removed on 2 October 2026.</p></div>
35
- </details>
1
+ <!-- OmniaUI component: severity-card - Risk-colored expandable card (low, medium, high, critical) on details / summary - no JavaScript. Needs @birdycom/omniaui CSS.
2
+ File: packages/ui/snippets/severity-card.html | Map: high card (open: head, body, actions) -> low resolved card
3
+ Class API (modifiers are extra classes / attributes on the same element):
4
+ details.oc-severity-card: Card. Levels: --low, --medium, --high, --critical. State: .is-resolved (neutral, title struck). Same name="..." = one open at a time.
5
+ summary.oc-severity-card-head: Head row with chevron
6
+ .oc-severity-card-icon / -main / -title: Icon, text column, title in the level color
7
+ .oc-severity-card-tags / -tag: Small monospace tags under the title
8
+ .oc-severity-card-level: Level badge at the end of the head
9
+ .oc-severity-card-body / -actions: Details text and action buttons
10
+ Slots: icon, title, tags, level, body, actions
11
+ -->
12
+ <details class="oc-severity-card oc-severity-card--high" name="oc-findings" open>
13
+ <summary class="oc-severity-card-head">
14
+ <span class="oc-severity-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="M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"/><path d="M12 9v4M12 17h.01"/></svg></span>
15
+ <span class="oc-severity-card-main">
16
+ <span class="oc-severity-card-title">shop-example.com data breach</span>
17
+ <span class="oc-severity-card-tags"><span class="oc-severity-card-tag">email</span><span class="oc-severity-card-tag">password</span><span class="oc-severity-card-tag">phone</span></span>
18
+ </span>
19
+ <span class="oc-severity-card-level">High</span>
20
+ </summary>
21
+ <div class="oc-severity-card-body">
22
+ <p>Your e-mail address and a hashed password appeared in a leak from March 2026. Change the password on this site and everywhere you reused it.</p>
23
+ <div class="oc-severity-card-actions">
24
+ <a class="oc-btn oc-btn--sm" href="#">Change password</a>
25
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Mark as resolved</button>
26
+ </div>
27
+ </div>
28
+ </details>
29
+ <details class="oc-severity-card oc-severity-card--low is-resolved" name="oc-findings">
30
+ <summary class="oc-severity-card-head">
31
+ <span class="oc-severity-card-main"><span class="oc-severity-card-title">Old forum profile</span></span>
32
+ <span class="oc-severity-card-level">Resolved</span>
33
+ </summary>
34
+ <div class="oc-severity-card-body"><p>The profile was removed on 2 October 2026.</p></div>
35
+ </details>
@@ -1,32 +1,32 @@
1
- <!-- OmniaUI component: sheet - Side panel on <dialog> (right, left, top, bottom) - no JavaScript. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- dialog.oc-sheet: The dialog. Side modifiers: --left, --top, --bottom (default right).
4
- .oc-sheet-content: Panel. Modifier: --wide.
5
- .oc-sheet-header / -title / -description: Heading area
6
- .oc-sheet-body: Scrolling content
7
- .oc-sheet-footer: Action row
8
- .oc-sheet-close: Close button (command="close")
9
- Slots: header (title, description), body (default), footer, trigger button outside the dialog
10
- -->
11
- <button class="oc-btn oc-btn--outline" type="button" command="show-modal" commandfor="oc-sheet-demo">Open sheet</button>
12
-
13
- <dialog class="oc-sheet" id="oc-sheet-demo" closedby="any" aria-labelledby="oc-sheet-demo-title">
14
- <div class="oc-sheet-content">
15
- <button class="oc-sheet-close" type="button" command="close" commandfor="oc-sheet-demo" aria-label="Close">&times;</button>
16
- <div class="oc-sheet-header">
17
- <h2 class="oc-sheet-title" id="oc-sheet-demo-title">Table design</h2>
18
- <p class="oc-sheet-description">Choose the columns you want to see.</p>
19
- </div>
20
- <div class="oc-sheet-body">
21
- <div class="oc-field-group">
22
- <label><input class="oc-checkbox" type="checkbox" checked> Name</label>
23
- <label><input class="oc-checkbox" type="checkbox" checked> E-mail</label>
24
- <label><input class="oc-checkbox" type="checkbox"> Phone</label>
25
- </div>
26
- </div>
27
- <div class="oc-sheet-footer">
28
- <button class="oc-btn oc-btn--outline" type="button" command="close" commandfor="oc-sheet-demo">Cancel</button>
29
- <button class="oc-btn" type="button" command="close" commandfor="oc-sheet-demo">Save</button>
30
- </div>
31
- </div>
32
- </dialog>
1
+ <!-- OmniaUI component: sheet - Side panel on <dialog> (right, left, top, bottom) - no JavaScript. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ dialog.oc-sheet: The dialog. Side modifiers: --left, --top, --bottom (default right).
4
+ .oc-sheet-content: Panel. Modifier: --wide.
5
+ .oc-sheet-header / -title / -description: Heading area
6
+ .oc-sheet-body: Scrolling content
7
+ .oc-sheet-footer: Action row
8
+ .oc-sheet-close: Close button (command="close")
9
+ Slots: header (title, description), body (default), footer, trigger button outside the dialog
10
+ -->
11
+ <button class="oc-btn oc-btn--outline" type="button" command="show-modal" commandfor="oc-sheet-demo">Open sheet</button>
12
+
13
+ <dialog class="oc-sheet" id="oc-sheet-demo" closedby="any" aria-labelledby="oc-sheet-demo-title">
14
+ <div class="oc-sheet-content">
15
+ <button class="oc-sheet-close" type="button" command="close" commandfor="oc-sheet-demo" aria-label="Close">&times;</button>
16
+ <div class="oc-sheet-header">
17
+ <h2 class="oc-sheet-title" id="oc-sheet-demo-title">Table design</h2>
18
+ <p class="oc-sheet-description">Choose the columns you want to see.</p>
19
+ </div>
20
+ <div class="oc-sheet-body">
21
+ <div class="oc-field-group">
22
+ <label><input class="oc-checkbox" type="checkbox" checked> Name</label>
23
+ <label><input class="oc-checkbox" type="checkbox" checked> E-mail</label>
24
+ <label><input class="oc-checkbox" type="checkbox"> Phone</label>
25
+ </div>
26
+ </div>
27
+ <div class="oc-sheet-footer">
28
+ <button class="oc-btn oc-btn--outline" type="button" command="close" commandfor="oc-sheet-demo">Cancel</button>
29
+ <button class="oc-btn" type="button" command="close" commandfor="oc-sheet-demo">Save</button>
30
+ </div>
31
+ </div>
32
+ </dialog>
@@ -1,24 +1,24 @@
1
- <!-- OmniaUI component: sidebar-docs - The navigation used on the left of the OmniaCSS documentation (variant of the sidebar). Needs @birdycom/omniaui CSS.
2
- Class API: .oc-sidebar.oc-sidebar--docs (root nav) · .oc-sidebar-title · .oc-sidebar-group-label · .oc-sidebar-menu (ul) ·
3
- .oc-sidebar-menu-button (a; aria-current="page" = current page, .is-active = section that contains it) · .oc-sidebar-menu-sub (nested ul)
4
- -->
5
- <nav class="oc-sidebar oc-sidebar--docs" aria-label="Documentation">
6
- <h2 class="oc-sidebar-title">Documentation</h2>
7
- <p class="oc-sidebar-group-label">Getting started</p>
8
- <ul class="oc-sidebar-menu">
9
- <li><a class="oc-sidebar-menu-button" href="#">Introduction</a></li>
10
- <li><a class="oc-sidebar-menu-button" href="#">Installation</a></li>
11
- </ul>
12
- <p class="oc-sidebar-group-label">Layout</p>
13
- <ul class="oc-sidebar-menu">
14
- <li>
15
- <a class="oc-sidebar-menu-button is-active" href="#">Flexbox</a>
16
- <ul class="oc-sidebar-menu-sub">
17
- <li><a class="oc-sidebar-menu-button" aria-current="page" href="#">Flex direction</a></li>
18
- <li><a class="oc-sidebar-menu-button" href="#">Flex wrap</a></li>
19
- </ul>
20
- </li>
21
- <li><a class="oc-sidebar-menu-button" href="#">Grid</a></li>
22
- </ul>
23
- </nav>
24
-
1
+ <!-- OmniaUI component: sidebar-docs - The navigation used on the left of the OmniaCSS documentation (variant of the sidebar). Needs @birdycom/omniaui CSS.
2
+ Class API: .oc-sidebar.oc-sidebar--docs (root nav) · .oc-sidebar-title · .oc-sidebar-group-label · .oc-sidebar-menu (ul) ·
3
+ .oc-sidebar-menu-button (a; aria-current="page" = current page, .is-active = section that contains it) · .oc-sidebar-menu-sub (nested ul)
4
+ -->
5
+ <nav class="oc-sidebar oc-sidebar--docs" aria-label="Documentation">
6
+ <h2 class="oc-sidebar-title">Documentation</h2>
7
+ <p class="oc-sidebar-group-label">Getting started</p>
8
+ <ul class="oc-sidebar-menu">
9
+ <li><a class="oc-sidebar-menu-button" href="#">Introduction</a></li>
10
+ <li><a class="oc-sidebar-menu-button" href="#">Installation</a></li>
11
+ </ul>
12
+ <p class="oc-sidebar-group-label">Layout</p>
13
+ <ul class="oc-sidebar-menu">
14
+ <li>
15
+ <a class="oc-sidebar-menu-button is-active" href="#">Flexbox</a>
16
+ <ul class="oc-sidebar-menu-sub">
17
+ <li><a class="oc-sidebar-menu-button" aria-current="page" href="#">Flex direction</a></li>
18
+ <li><a class="oc-sidebar-menu-button" href="#">Flex wrap</a></li>
19
+ </ul>
20
+ </li>
21
+ <li><a class="oc-sidebar-menu-button" href="#">Grid</a></li>
22
+ </ul>
23
+ </nav>
24
+