@birdycom/omniaui 0.11.0 → 0.11.2

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 +6565 -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 +410 -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,25 +1,25 @@
1
- <!-- OmniaUI component: context-menu - Context menu: dropdown menu at the pointer with a minimal documented script. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-dropdown-menu.oc-context-menu[popover]: the menu (role="menu"); position from --oc-context-x / --oc-context-y
4
- .oc-context-area: dashed right-click target (demo styling)
5
- Script: contextmenu -> preventDefault, set the two variables, showPopover()
6
- -->
7
- <div class="oc-context-area" id="oc-ctx-area" tabindex="0">Right-click (or press the menu key) here</div>
8
- <div class="oc-dropdown-menu oc-context-menu" id="oc-ctx-menu" popover role="menu" aria-label="Actions">
9
- <button class="oc-dropdown-item" type="button" role="menuitem">Back <span class="oc-dropdown-shortcut">Alt &larr;</span></button>
10
- <button class="oc-dropdown-item" type="button" role="menuitem">Reload <span class="oc-dropdown-shortcut">Ctrl R</span></button>
11
- <div class="oc-dropdown-separator" role="separator"></div>
12
- <button class="oc-dropdown-item" type="button" role="menuitemcheckbox" aria-checked="true">Show bookmarks</button>
13
- <button class="oc-dropdown-item oc-dropdown-item--destructive" type="button" role="menuitem">Delete</button>
14
- </div>
15
- <script>
16
- (function () {
17
- var area = document.getElementById('oc-ctx-area'), menu = document.getElementById('oc-ctx-menu');
18
- area.addEventListener('contextmenu', function (e) {
19
- e.preventDefault();
20
- menu.style.setProperty('--oc-context-x', Math.min(e.clientX, innerWidth - 220) + 'px');
21
- menu.style.setProperty('--oc-context-y', Math.min(e.clientY, innerHeight - 220) + 'px');
22
- menu.showPopover();
23
- });
24
- })();
25
- </script>
1
+ <!-- OmniaUI component: context-menu - Context menu: dropdown menu at the pointer with a minimal documented script. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-dropdown-menu.oc-context-menu[popover]: the menu (role="menu"); position from --oc-context-x / --oc-context-y
4
+ .oc-context-area: dashed right-click target (demo styling)
5
+ Script: contextmenu -> preventDefault, set the two variables, showPopover()
6
+ -->
7
+ <div class="oc-context-area" id="oc-ctx-area" tabindex="0">Right-click (or press the menu key) here</div>
8
+ <div class="oc-dropdown-menu oc-context-menu" id="oc-ctx-menu" popover role="menu" aria-label="Actions">
9
+ <button class="oc-dropdown-item" type="button" role="menuitem">Back <span class="oc-dropdown-shortcut">Alt &larr;</span></button>
10
+ <button class="oc-dropdown-item" type="button" role="menuitem">Reload <span class="oc-dropdown-shortcut">Ctrl R</span></button>
11
+ <div class="oc-dropdown-separator" role="separator"></div>
12
+ <button class="oc-dropdown-item" type="button" role="menuitemcheckbox" aria-checked="true">Show bookmarks</button>
13
+ <button class="oc-dropdown-item oc-dropdown-item--destructive" type="button" role="menuitem">Delete</button>
14
+ </div>
15
+ <script>
16
+ (function () {
17
+ var area = document.getElementById('oc-ctx-area'), menu = document.getElementById('oc-ctx-menu');
18
+ area.addEventListener('contextmenu', function (e) {
19
+ e.preventDefault();
20
+ menu.style.setProperty('--oc-context-x', Math.min(e.clientX, innerWidth - 220) + 'px');
21
+ menu.style.setProperty('--oc-context-y', Math.min(e.clientY, innerHeight - 220) + 'px');
22
+ menu.showPopover();
23
+ });
24
+ })();
25
+ </script>
@@ -1,70 +1,70 @@
1
- <!-- OmniaUI component: cookie-consent — Cookie banner with categories on popover="manual"; a small script remembers the choice. Needs @birdycom/omniaui CSS.
2
- File: packages/ui/snippets/cookie-consent.html | Map: reopen link -> popover (title, text, details with category switches, actions) -> script
3
- Class API (modifiers are extra classes / attributes on the same element):
4
- aside.oc-cookie-consent[popover="manual"]: The banner (bottom-right card). Modifier: --bar (full-width bar at the bottom)
5
- .oc-cookie-consent__title / __text: Heading and text (put the policy link in the text)
6
- details.oc-cookie-consent__prefs: "Customize" with one .oc-cookie-consent__category per purpose
7
- .oc-cookie-consent__category > __category-name, __category-text, label.oc-switch (input name = category; necessary: checked disabled)
8
- .oc-cookie-consent__actions > button[data-oc-consent="necessary" | "selected" | "all"]
9
- [data-oc-consent-open]: Any button or link that opens the banner again (footer "Cookie settings")
10
- [data-oc-consent-manual] on the banner: never open by itself (only through data-oc-consent-open)
11
- Script: shows the banner when no choice is stored, saves { necessary, statistics, marketing, date } in localStorage
12
- under "oc-consent" and fires a "oc-consent" event on document with that object as detail. Load your analytics there.
13
- -->
14
- <button type="button" class="oc-btn oc-btn--outline oc-btn--sm" data-oc-consent-open>Cookie settings</button>
15
-
16
- <aside class="oc-cookie-consent" id="oc-cookie-consent" popover="manual" aria-labelledby="oc-cookie-consent-title">
17
- <h2 class="oc-cookie-consent__title" id="oc-cookie-consent-title"><span aria-hidden="true">&#127850;</span> We use cookies</h2>
18
- <p class="oc-cookie-consent__text">Necessary cookies keep the site working. With your permission we also measure visits to improve the site. Read the <a href="#cookie-policy">cookie policy</a>.</p>
19
- <details class="oc-cookie-consent__prefs">
20
- <summary>Customize</summary>
21
- <div class="oc-cookie-consent__category">
22
- <span class="oc-cookie-consent__category-name">Necessary</span>
23
- <span class="oc-cookie-consent__category-text">Session, security and your cookie choice. Always on.</span>
24
- <label class="oc-switch"><input type="checkbox" role="switch" name="necessary" checked disabled aria-label="Necessary cookies"><span class="oc-switch-track"></span></label>
25
- </div>
26
- <div class="oc-cookie-consent__category">
27
- <span class="oc-cookie-consent__category-name">Statistics</span>
28
- <span class="oc-cookie-consent__category-text">Anonymous visit counts.</span>
29
- <label class="oc-switch"><input type="checkbox" role="switch" name="statistics" aria-label="Statistics cookies"><span class="oc-switch-track"></span></label>
30
- </div>
31
- <div class="oc-cookie-consent__category">
32
- <span class="oc-cookie-consent__category-name">Marketing</span>
33
- <span class="oc-cookie-consent__category-text">Embedded videos and ads that track you.</span>
34
- <label class="oc-switch"><input type="checkbox" role="switch" name="marketing" aria-label="Marketing cookies"><span class="oc-switch-track"></span></label>
35
- </div>
36
- </details>
37
- <div class="oc-cookie-consent__actions">
38
- <button type="button" class="oc-btn oc-btn--outline" data-oc-consent="necessary">Only necessary</button>
39
- <button type="button" class="oc-btn oc-btn--secondary" data-oc-consent="selected">Save choice</button>
40
- <button type="button" class="oc-btn" data-oc-consent="all">Accept all</button>
41
- </div>
42
- </aside>
43
- <script>
44
- // Cookie consent: show when no choice is stored, save the choice, tell the page (event "oc-consent").
45
- (() => {
46
- const box = document.getElementById("oc-cookie-consent");
47
- if (!box) return;
48
- const KEY = "oc-consent";
49
- const read = () => { try { return JSON.parse(localStorage.getItem(KEY)); } catch { return null; } };
50
- const inputs = () => [...box.querySelectorAll("input[name]")];
51
- const apply = (choice) => { for (const i of inputs()) if (!i.disabled) i.checked = !!choice?.[i.name]; };
52
- const stored = read();
53
- if (stored) document.dispatchEvent(new CustomEvent("oc-consent", { detail: stored }));
54
- else if (!box.hasAttribute("data-oc-consent-manual")) box.showPopover();
55
- box.addEventListener("click", (e) => {
56
- const mode = e.target.closest("[data-oc-consent]")?.dataset.ocConsent;
57
- if (!mode) return;
58
- const choice = { necessary: true, date: new Date().toISOString() };
59
- for (const i of inputs()) if (!i.disabled) choice[i.name] = mode === "all" || (mode === "selected" && i.checked);
60
- try { localStorage.setItem(KEY, JSON.stringify(choice)); } catch {}
61
- box.hidePopover();
62
- document.dispatchEvent(new CustomEvent("oc-consent", { detail: choice }));
63
- });
64
- document.addEventListener("click", (e) => {
65
- if (!e.target.closest("[data-oc-consent-open]")) return;
66
- apply(read());
67
- box.showPopover();
68
- });
69
- })();
70
- </script>
1
+ <!-- OmniaUI component: cookie-consent — Cookie banner with categories on popover="manual"; a small script remembers the choice. Needs @birdycom/omniaui CSS.
2
+ File: packages/ui/snippets/cookie-consent.html | Map: reopen link -> popover (title, text, details with category switches, actions) -> script
3
+ Class API (modifiers are extra classes / attributes on the same element):
4
+ aside.oc-cookie-consent[popover="manual"]: The banner (bottom-right card). Modifier: --bar (full-width bar at the bottom)
5
+ .oc-cookie-consent__title / __text: Heading and text (put the policy link in the text)
6
+ details.oc-cookie-consent__prefs: "Customize" with one .oc-cookie-consent__category per purpose
7
+ .oc-cookie-consent__category > __category-name, __category-text, label.oc-switch (input name = category; necessary: checked disabled)
8
+ .oc-cookie-consent__actions > button[data-oc-consent="necessary" | "selected" | "all"]
9
+ [data-oc-consent-open]: Any button or link that opens the banner again (footer "Cookie settings")
10
+ [data-oc-consent-manual] on the banner: never open by itself (only through data-oc-consent-open)
11
+ Script: shows the banner when no choice is stored, saves { necessary, statistics, marketing, date } in localStorage
12
+ under "oc-consent" and fires a "oc-consent" event on document with that object as detail. Load your analytics there.
13
+ -->
14
+ <button type="button" class="oc-btn oc-btn--outline oc-btn--sm" data-oc-consent-open>Cookie settings</button>
15
+
16
+ <aside class="oc-cookie-consent" id="oc-cookie-consent" popover="manual" aria-labelledby="oc-cookie-consent-title">
17
+ <h2 class="oc-cookie-consent__title" id="oc-cookie-consent-title"><span aria-hidden="true">&#127850;</span> We use cookies</h2>
18
+ <p class="oc-cookie-consent__text">Necessary cookies keep the site working. With your permission we also measure visits to improve the site. Read the <a href="#cookie-policy">cookie policy</a>.</p>
19
+ <details class="oc-cookie-consent__prefs">
20
+ <summary>Customize</summary>
21
+ <div class="oc-cookie-consent__category">
22
+ <span class="oc-cookie-consent__category-name">Necessary</span>
23
+ <span class="oc-cookie-consent__category-text">Session, security and your cookie choice. Always on.</span>
24
+ <label class="oc-switch"><input type="checkbox" role="switch" name="necessary" checked disabled aria-label="Necessary cookies"><span class="oc-switch-track"></span></label>
25
+ </div>
26
+ <div class="oc-cookie-consent__category">
27
+ <span class="oc-cookie-consent__category-name">Statistics</span>
28
+ <span class="oc-cookie-consent__category-text">Anonymous visit counts.</span>
29
+ <label class="oc-switch"><input type="checkbox" role="switch" name="statistics" aria-label="Statistics cookies"><span class="oc-switch-track"></span></label>
30
+ </div>
31
+ <div class="oc-cookie-consent__category">
32
+ <span class="oc-cookie-consent__category-name">Marketing</span>
33
+ <span class="oc-cookie-consent__category-text">Embedded videos and ads that track you.</span>
34
+ <label class="oc-switch"><input type="checkbox" role="switch" name="marketing" aria-label="Marketing cookies"><span class="oc-switch-track"></span></label>
35
+ </div>
36
+ </details>
37
+ <div class="oc-cookie-consent__actions">
38
+ <button type="button" class="oc-btn oc-btn--outline" data-oc-consent="necessary">Only necessary</button>
39
+ <button type="button" class="oc-btn oc-btn--secondary" data-oc-consent="selected">Save choice</button>
40
+ <button type="button" class="oc-btn" data-oc-consent="all">Accept all</button>
41
+ </div>
42
+ </aside>
43
+ <script>
44
+ // Cookie consent: show when no choice is stored, save the choice, tell the page (event "oc-consent").
45
+ (() => {
46
+ const box = document.getElementById("oc-cookie-consent");
47
+ if (!box) return;
48
+ const KEY = "oc-consent";
49
+ const read = () => { try { return JSON.parse(localStorage.getItem(KEY)); } catch { return null; } };
50
+ const inputs = () => [...box.querySelectorAll("input[name]")];
51
+ const apply = (choice) => { for (const i of inputs()) if (!i.disabled) i.checked = !!choice?.[i.name]; };
52
+ const stored = read();
53
+ if (stored) document.dispatchEvent(new CustomEvent("oc-consent", { detail: stored }));
54
+ else if (!box.hasAttribute("data-oc-consent-manual")) box.showPopover();
55
+ box.addEventListener("click", (e) => {
56
+ const mode = e.target.closest("[data-oc-consent]")?.dataset.ocConsent;
57
+ if (!mode) return;
58
+ const choice = { necessary: true, date: new Date().toISOString() };
59
+ for (const i of inputs()) if (!i.disabled) choice[i.name] = mode === "all" || (mode === "selected" && i.checked);
60
+ try { localStorage.setItem(KEY, JSON.stringify(choice)); } catch {}
61
+ box.hidePopover();
62
+ document.dispatchEvent(new CustomEvent("oc-consent", { detail: choice }));
63
+ });
64
+ document.addEventListener("click", (e) => {
65
+ if (!e.target.closest("[data-oc-consent-open]")) return;
66
+ apply(read());
67
+ box.showPopover();
68
+ });
69
+ })();
70
+ </script>
@@ -1,19 +1,19 @@
1
- <!-- OmniaUI component: copy-field - Read-only monospace value with a copy button. Needs @birdycom/omniaui CSS.
2
- Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-copy-field: Wrapper
4
- .oc-copy-field-value: Read-only <input readonly> (or <output>)
5
- .oc-copy-field-button: Copy button; add .is-copied for 2s feedback
6
- -->
7
- <div class="oc-copy-field">
8
- <input class="oc-copy-field-value" type="text" readonly value="JBSWY3DPEHPK3PXP" aria-label="Setup key">
9
- <button class="oc-copy-field-button" type="button">Copy</button>
10
- </div>
11
- <script>
12
- document.addEventListener('click', async (e) => {
13
- const btn = e.target.closest('.oc-copy-field-button');
14
- if (!btn) return;
15
- await navigator.clipboard.writeText(btn.parentElement.querySelector('.oc-copy-field-value').value);
16
- btn.classList.add('is-copied');
17
- setTimeout(() => btn.classList.remove('is-copied'), 2000);
18
- });
19
- </script>
1
+ <!-- OmniaUI component: copy-field - Read-only monospace value with a copy button. Needs @birdycom/omniaui CSS.
2
+ Class API (modifiers are extra classes / attributes on the same element):
3
+ .oc-copy-field: Wrapper
4
+ .oc-copy-field-value: Read-only <input readonly> (or <output>)
5
+ .oc-copy-field-button: Copy button; add .is-copied for 2s feedback
6
+ -->
7
+ <div class="oc-copy-field">
8
+ <input class="oc-copy-field-value" type="text" readonly value="JBSWY3DPEHPK3PXP" aria-label="Setup key">
9
+ <button class="oc-copy-field-button" type="button">Copy</button>
10
+ </div>
11
+ <script>
12
+ document.addEventListener('click', async (e) => {
13
+ const btn = e.target.closest('.oc-copy-field-button');
14
+ if (!btn) return;
15
+ await navigator.clipboard.writeText(btn.parentElement.querySelector('.oc-copy-field-value').value);
16
+ btn.classList.add('is-copied');
17
+ setTimeout(() => btn.classList.remove('is-copied'), 2000);
18
+ });
19
+ </script>
@@ -1,2 +1,2 @@
1
- <!-- OmniaUI component: counter — Animated number (@property) — starts when scrolled into view. Needs @birdycom/omniaui CSS. -->
2
- <strong class="oc-counter oc-counter--on-view" style="--oc-counter-to: 1250; --oc-counter-suffix: '+'"></strong>
1
+ <!-- OmniaUI component: counter — Animated number (@property) — starts when scrolled into view. Needs @birdycom/omniaui CSS. -->
2
+ <strong class="oc-counter oc-counter--on-view" style="--oc-counter-to: 1250; --oc-counter-suffix: '+'"></strong>
@@ -1,151 +1,151 @@
1
- <!-- OmniaUI component: data-table - List table from Korrekt and OmniaDesk: search, sort, pages, columns, resize, drag, trash filter and bulk actions. Needs @birdycom/omniaui CSS.
2
- File: packages/ui/snippets/data-table.html | Map: shell -> toolbar (gear, search, pills, view) -> bulk bar -> table -> footer. Behaviour: src/data-table.js
3
- -->
4
- <div class="oc-data-table oc-column-menu-scope" id="oc-articles" data-page-size="3" data-oc-live="true" style="--oc-data-table-max: 18rem">
5
- <div class="oc-data-table-toolbar">
6
- <div class="oc-data-table-heading">
7
- <span class="oc-data-table-title">Articles</span>
8
- <button class="oc-btn oc-btn--outline oc-btn--icon oc-btn--sm" type="button" popovertarget="oc-articles-menu" aria-label="Table actions">
9
- <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="M7.2 1.2h1.6l.3 1.5a4 4 0 0 1 1.1.6l1.4-.6 1.1 1.1-.6 1.4c.3.3.5.7.6 1.1l1.5.3v1.6l-1.5.3a4 4 0 0 1-.6 1.1l.6 1.4-1.1 1.1-1.4-.6a4 4 0 0 1-1.1.6l-.3 1.5H7.2l-.3-1.5a4 4 0 0 1-1.1-.6l-1.4.6-1.1-1.1.6-1.4a4 4 0 0 1-.6-1.1L1.8 8.8V7.2l1.5-.3c.1-.4.3-.8.6-1.1l-.6-1.4 1.1-1.1 1.4.6a4 4 0 0 1 1.1-.6l.3-1.5zM8 6.2a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6z"/></svg>
10
- </button>
11
- <div class="oc-dropdown-menu" id="oc-articles-menu" popover>
12
- <button class="oc-dropdown-item" type="button" data-oc-export>Export CSV</button>
13
- <button class="oc-dropdown-item" type="button" data-oc-import>Import CSV</button>
14
- <input class="oc-data-table-file" type="file" accept=".csv,text/csv" data-oc-file>
15
- <div class="oc-dropdown-separator"></div>
16
- <button class="oc-dropdown-item" type="button" data-oc-density="comfortable">Comfortable rows</button>
17
- <button class="oc-dropdown-item" type="button" data-oc-density="compact">Compact rows</button>
18
- <button class="oc-dropdown-item" type="button" data-oc-reset-widths>Reset column widths</button>
19
- </div>
20
- </div>
21
- <input class="oc-input oc-data-table-search" type="search" placeholder="Search articles..." aria-label="Search articles">
22
- <div class="oc-filter-pills" role="group" aria-label="Trash filter">
23
- <button class="oc-filter-pill" type="button" data-oc-filter="active" aria-current="true">Active only</button>
24
- <button class="oc-filter-pill" type="button" data-oc-filter="all">Including trash</button>
25
- <button class="oc-filter-pill" type="button" data-oc-filter="deleted">Trash only</button>
26
- <button class="oc-filter-pill" type="button" data-oc-filter="archived">Archive only</button>
27
- </div>
28
- <div class="oc-data-table-view" role="group" aria-label="View">
29
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-view="table" aria-pressed="true">Table</button>
30
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-view="grid">Cards</button>
31
- </div>
32
- <div class="oc-data-table-actions"><button class="oc-btn oc-btn--sm" type="button">New article</button></div>
33
- <p class="oc-data-table-sort-summary" data-oc-sort-summary role="status"></p>
34
- </div>
35
- <div class="oc-table-toolbar">
36
- <span class="oc-table-toolbar-spacer"></span>
37
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-articles-columns">Columns</button>
38
- </div>
39
- <div class="oc-column-menu" id="oc-articles-columns" popover>
40
- <p class="oc-column-menu-title">Visible columns</p>
41
- <form class="oc-column-menu-list">
42
- <label class="oc-column-menu-item"><input type="checkbox" data-col="3" checked> Article ID</label>
43
- <label class="oc-column-menu-item"><input type="checkbox" data-col="4" checked> Name</label>
44
- <label class="oc-column-menu-item"><input type="checkbox" data-col="5" checked> Price</label>
45
- <label class="oc-column-menu-item"><input type="checkbox" data-col="6"> Supplier</label>
46
- <label class="oc-column-menu-item"><input type="checkbox" data-col="7" checked> Status</label>
47
- </form>
48
- </div>
49
- <div class="oc-data-table-bulk" hidden>
50
- <span data-oc-selected-count>0 selected</span>
51
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="export">Export selection</button>
52
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="duplicate">Duplicate</button>
53
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="archive">Move to trash</button>
54
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="restore">Restore</button>
55
- <button class="oc-btn oc-btn--destructive oc-btn--sm" type="button" data-oc-bulk="delete">Delete permanently</button>
56
- <button class="oc-btn oc-btn--ghost oc-btn--sm" type="button" data-oc-bulk="clear">Clear</button>
57
- </div>
58
- <div class="oc-data-table-frame">
59
- <div class="oc-data-table-scroll">
60
- <table class="oc-table oc-data-table-table">
61
- <thead>
62
- <tr>
63
- <th data-oc-col="select" class="oc-data-table-select"><input class="oc-checkbox" type="checkbox" data-oc-select-all aria-label="Select all"></th>
64
- <th data-oc-col="order"><span class="oc-visually-hidden">Order</span></th>
65
- <th data-oc-col="sku" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Article ID</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Article ID"></span></span></th>
66
- <th data-oc-col="name" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Name</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Name"></span></span></th>
67
- <th data-oc-col="price" data-oc-sort="numeric" data-numeric><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Price</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Price"></span></span></th>
68
- <th data-oc-col="supplier" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Supplier</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Supplier"></span></span></th>
69
- <th data-oc-col="status" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Status</button></span></th>
70
- <th data-oc-col="actions"><span class="oc-visually-hidden">Actions</span></th>
71
- </tr>
72
- </thead>
73
- <tbody>
74
- <tr data-oc-row data-oc-key="schar" data-oc-status="active">
75
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Scharnier"></td>
76
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Scharnier"></button></td>
77
- <td data-oc-col="sku">SET-SCHAR-1105C-ONS</td>
78
- <td data-oc-col="name">Scharnier 1105</td>
79
- <td data-oc-col="price" data-numeric data-oc-value="5.15">5,15</td>
80
- <td data-oc-col="supplier">Van Hoecke</td>
81
- <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
82
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
83
- </tr>
84
- <tr data-oc-row data-oc-key="greep" data-oc-status="active">
85
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Greep"></td>
86
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Greep"></button></td>
87
- <td data-oc-col="sku">SET-GREEP-40</td>
88
- <td data-oc-col="name">Greep 40</td>
89
- <td data-oc-col="price" data-numeric data-oc-value="12.4">12,40</td>
90
- <td data-oc-col="supplier">Van Hoecke</td>
91
- <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
92
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
93
- </tr>
94
- <tr data-oc-row data-oc-key="plaat" data-oc-status="active">
95
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Plaat"></td>
96
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Plaat"></button></td>
97
- <td data-oc-col="sku">PLAAT-18-WIT</td>
98
- <td data-oc-col="name">Plaat 18 wit</td>
99
- <td data-oc-col="price" data-numeric data-oc-value="28">28,00</td>
100
- <td data-oc-col="supplier">Egger</td>
101
- <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
102
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
103
- </tr>
104
- <tr data-oc-row data-oc-key="led" data-oc-status="active">
105
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select LED"></td>
106
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move LED"></button></td>
107
- <td data-oc-col="sku">LED-STRIP-2M</td>
108
- <td data-oc-col="name">LED strip</td>
109
- <td data-oc-col="price" data-numeric data-oc-value="16.9">16,90</td>
110
- <td data-oc-col="supplier">Egger</td>
111
- <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
112
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
113
- </tr>
114
- <tr data-oc-row data-oc-key="schroef" data-oc-status="deleted">
115
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Schroef"></td>
116
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Schroef"></button></td>
117
- <td data-oc-col="sku">SCHROEF-4X40</td>
118
- <td data-oc-col="name">Schroef 4x40</td>
119
- <td data-oc-col="price" data-numeric data-oc-value="0.08">0,08</td>
120
- <td data-oc-col="supplier">Van Hoecke</td>
121
- <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Deleted</span></td>
122
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
123
- </tr>
124
- <tr data-oc-row data-oc-key="kast" data-oc-status="archived">
125
- <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Kast"></td>
126
- <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Kast"></button></td>
127
- <td data-oc-col="sku">ARCH-KAST-60</td>
128
- <td data-oc-col="name">Kast 60</td>
129
- <td data-oc-col="price" data-numeric data-oc-value="240">240,00</td>
130
- <td data-oc-col="supplier">Egger</td>
131
- <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Archived</span></td>
132
- <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
133
- </tr>
134
- </tbody>
135
- </table>
136
- </div>
137
- <p class="oc-data-table-empty" hidden>No results</p>
138
- </div>
139
- <div class="oc-data-table-footer">
140
- <p class="oc-data-table-summary" data-oc-summary>Showing 1–3 of 4</p>
141
- <label class="oc-data-table-per-page">Rows per page
142
- <select class="oc-select" data-oc-page-size aria-label="Rows per page">
143
- <option value="3" selected>3</option>
144
- <option value="5">5</option>
145
- <option value="10">10</option>
146
- <option value="15">15</option>
147
- </select>
148
- </label>
149
- <nav class="oc-data-table-pager" data-oc-pager aria-label="Pagination"></nav>
150
- </div>
151
- </div>
1
+ <!-- OmniaUI component: data-table - List table from Korrekt and OmniaDesk: search, sort, pages, columns, resize, drag, trash filter and bulk actions. Needs @birdycom/omniaui CSS.
2
+ File: packages/ui/snippets/data-table.html | Map: shell -> toolbar (gear, search, pills, view) -> bulk bar -> table -> footer. Behaviour: src/data-table.js
3
+ -->
4
+ <div class="oc-data-table oc-column-menu-scope" id="oc-articles" data-page-size="3" data-oc-live="true" style="--oc-data-table-max: 18rem">
5
+ <div class="oc-data-table-toolbar">
6
+ <div class="oc-data-table-heading">
7
+ <span class="oc-data-table-title">Articles</span>
8
+ <button class="oc-btn oc-btn--outline oc-btn--icon oc-btn--sm" type="button" popovertarget="oc-articles-menu" aria-label="Table actions">
9
+ <svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="M7.2 1.2h1.6l.3 1.5a4 4 0 0 1 1.1.6l1.4-.6 1.1 1.1-.6 1.4c.3.3.5.7.6 1.1l1.5.3v1.6l-1.5.3a4 4 0 0 1-.6 1.1l.6 1.4-1.1 1.1-1.4-.6a4 4 0 0 1-1.1.6l-.3 1.5H7.2l-.3-1.5a4 4 0 0 1-1.1-.6l-1.4.6-1.1-1.1.6-1.4a4 4 0 0 1-.6-1.1L1.8 8.8V7.2l1.5-.3c.1-.4.3-.8.6-1.1l-.6-1.4 1.1-1.1 1.4.6a4 4 0 0 1 1.1-.6l.3-1.5zM8 6.2a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6z"/></svg>
10
+ </button>
11
+ <div class="oc-dropdown-menu" id="oc-articles-menu" popover>
12
+ <button class="oc-dropdown-item" type="button" data-oc-export>Export CSV</button>
13
+ <button class="oc-dropdown-item" type="button" data-oc-import>Import CSV</button>
14
+ <input class="oc-data-table-file" type="file" accept=".csv,text/csv" data-oc-file>
15
+ <div class="oc-dropdown-separator"></div>
16
+ <button class="oc-dropdown-item" type="button" data-oc-density="comfortable">Comfortable rows</button>
17
+ <button class="oc-dropdown-item" type="button" data-oc-density="compact">Compact rows</button>
18
+ <button class="oc-dropdown-item" type="button" data-oc-reset-widths>Reset column widths</button>
19
+ </div>
20
+ </div>
21
+ <input class="oc-input oc-data-table-search" type="search" placeholder="Search articles..." aria-label="Search articles">
22
+ <div class="oc-filter-pills" role="group" aria-label="Trash filter">
23
+ <button class="oc-filter-pill" type="button" data-oc-filter="active" aria-current="true">Active only</button>
24
+ <button class="oc-filter-pill" type="button" data-oc-filter="all">Including trash</button>
25
+ <button class="oc-filter-pill" type="button" data-oc-filter="deleted">Trash only</button>
26
+ <button class="oc-filter-pill" type="button" data-oc-filter="archived">Archive only</button>
27
+ </div>
28
+ <div class="oc-data-table-view" role="group" aria-label="View">
29
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-view="table" aria-pressed="true">Table</button>
30
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-view="grid">Cards</button>
31
+ </div>
32
+ <div class="oc-data-table-actions"><button class="oc-btn oc-btn--sm" type="button">New article</button></div>
33
+ <p class="oc-data-table-sort-summary" data-oc-sort-summary role="status"></p>
34
+ </div>
35
+ <div class="oc-table-toolbar">
36
+ <span class="oc-table-toolbar-spacer"></span>
37
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-articles-columns">Columns</button>
38
+ </div>
39
+ <div class="oc-column-menu" id="oc-articles-columns" popover>
40
+ <p class="oc-column-menu-title">Visible columns</p>
41
+ <form class="oc-column-menu-list">
42
+ <label class="oc-column-menu-item"><input type="checkbox" data-col="3" checked> Article ID</label>
43
+ <label class="oc-column-menu-item"><input type="checkbox" data-col="4" checked> Name</label>
44
+ <label class="oc-column-menu-item"><input type="checkbox" data-col="5" checked> Price</label>
45
+ <label class="oc-column-menu-item"><input type="checkbox" data-col="6"> Supplier</label>
46
+ <label class="oc-column-menu-item"><input type="checkbox" data-col="7" checked> Status</label>
47
+ </form>
48
+ </div>
49
+ <div class="oc-data-table-bulk" hidden>
50
+ <span data-oc-selected-count>0 selected</span>
51
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="export">Export selection</button>
52
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="duplicate">Duplicate</button>
53
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="archive">Move to trash</button>
54
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="restore">Restore</button>
55
+ <button class="oc-btn oc-btn--destructive oc-btn--sm" type="button" data-oc-bulk="delete">Delete permanently</button>
56
+ <button class="oc-btn oc-btn--ghost oc-btn--sm" type="button" data-oc-bulk="clear">Clear</button>
57
+ </div>
58
+ <div class="oc-data-table-frame">
59
+ <div class="oc-data-table-scroll">
60
+ <table class="oc-table oc-data-table-table">
61
+ <thead>
62
+ <tr>
63
+ <th data-oc-col="select" class="oc-data-table-select"><input class="oc-checkbox" type="checkbox" data-oc-select-all aria-label="Select all"></th>
64
+ <th data-oc-col="order"><span class="oc-visually-hidden">Order</span></th>
65
+ <th data-oc-col="sku" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Article ID</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Article ID"></span></span></th>
66
+ <th data-oc-col="name" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Name</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Name"></span></span></th>
67
+ <th data-oc-col="price" data-oc-sort="numeric" data-numeric><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Price</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Price"></span></span></th>
68
+ <th data-oc-col="supplier" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Supplier</button><span class="oc-data-table-resize" role="separator" aria-orientation="vertical" aria-label="Resize Supplier"></span></span></th>
69
+ <th data-oc-col="status" data-oc-sort="text"><span class="oc-data-table-th"><button class="oc-table-sort" type="button">Status</button></span></th>
70
+ <th data-oc-col="actions"><span class="oc-visually-hidden">Actions</span></th>
71
+ </tr>
72
+ </thead>
73
+ <tbody>
74
+ <tr data-oc-row data-oc-key="schar" data-oc-status="active">
75
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Scharnier"></td>
76
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Scharnier"></button></td>
77
+ <td data-oc-col="sku">SET-SCHAR-1105C-ONS</td>
78
+ <td data-oc-col="name">Scharnier 1105</td>
79
+ <td data-oc-col="price" data-numeric data-oc-value="5.15">5,15</td>
80
+ <td data-oc-col="supplier">Van Hoecke</td>
81
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
82
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
83
+ </tr>
84
+ <tr data-oc-row data-oc-key="greep" data-oc-status="active">
85
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Greep"></td>
86
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Greep"></button></td>
87
+ <td data-oc-col="sku">SET-GREEP-40</td>
88
+ <td data-oc-col="name">Greep 40</td>
89
+ <td data-oc-col="price" data-numeric data-oc-value="12.4">12,40</td>
90
+ <td data-oc-col="supplier">Van Hoecke</td>
91
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
92
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
93
+ </tr>
94
+ <tr data-oc-row data-oc-key="plaat" data-oc-status="active">
95
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Plaat"></td>
96
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Plaat"></button></td>
97
+ <td data-oc-col="sku">PLAAT-18-WIT</td>
98
+ <td data-oc-col="name">Plaat 18 wit</td>
99
+ <td data-oc-col="price" data-numeric data-oc-value="28">28,00</td>
100
+ <td data-oc-col="supplier">Egger</td>
101
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
102
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
103
+ </tr>
104
+ <tr data-oc-row data-oc-key="led" data-oc-status="active">
105
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select LED"></td>
106
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move LED"></button></td>
107
+ <td data-oc-col="sku">LED-STRIP-2M</td>
108
+ <td data-oc-col="name">LED strip</td>
109
+ <td data-oc-col="price" data-numeric data-oc-value="16.9">16,90</td>
110
+ <td data-oc-col="supplier">Egger</td>
111
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
112
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
113
+ </tr>
114
+ <tr data-oc-row data-oc-key="schroef" data-oc-status="deleted">
115
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Schroef"></td>
116
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Schroef"></button></td>
117
+ <td data-oc-col="sku">SCHROEF-4X40</td>
118
+ <td data-oc-col="name">Schroef 4x40</td>
119
+ <td data-oc-col="price" data-numeric data-oc-value="0.08">0,08</td>
120
+ <td data-oc-col="supplier">Van Hoecke</td>
121
+ <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Deleted</span></td>
122
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
123
+ </tr>
124
+ <tr data-oc-row data-oc-key="kast" data-oc-status="archived">
125
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select aria-label="Select Kast"></td>
126
+ <td data-oc-col="order" class="oc-sortable-row-grip-cell"><button class="oc-sortable-row-grip" type="button" aria-label="Move Kast"></button></td>
127
+ <td data-oc-col="sku">ARCH-KAST-60</td>
128
+ <td data-oc-col="name">Kast 60</td>
129
+ <td data-oc-col="price" data-numeric data-oc-value="240">240,00</td>
130
+ <td data-oc-col="supplier">Egger</td>
131
+ <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Archived</span></td>
132
+ <td data-oc-col="actions" class="oc-table-actions"><button class="oc-table-row-action" type="button">Edit</button></td>
133
+ </tr>
134
+ </tbody>
135
+ </table>
136
+ </div>
137
+ <p class="oc-data-table-empty" hidden>No results</p>
138
+ </div>
139
+ <div class="oc-data-table-footer">
140
+ <p class="oc-data-table-summary" data-oc-summary>Showing 1–3 of 4</p>
141
+ <label class="oc-data-table-per-page">Rows per page
142
+ <select class="oc-select" data-oc-page-size aria-label="Rows per page">
143
+ <option value="3" selected>3</option>
144
+ <option value="5">5</option>
145
+ <option value="10">10</option>
146
+ <option value="15">15</option>
147
+ </select>
148
+ </label>
149
+ <nav class="oc-data-table-pager" data-oc-pager aria-label="Pagination"></nav>
150
+ </div>
151
+ </div>