@birdycom/omniaui-blocks 0.12.4 → 0.12.6

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.
@@ -7,7 +7,7 @@
7
7
  Slots: toggle, module nav, actions (theme switch, workspace select, user dropdown)
8
8
  -->
9
9
  <header class="oc-block-appbar">
10
- <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-appbar-toggle" title="Toggle sidebar"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
10
+ <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-appbar-toggle" title="Toggle sidebar"><svg data-icon="mdi:menu" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
11
11
  <nav class="oc-block-appbar-nav" aria-label="Module navigation">
12
12
  <ul class="oc-navmenu">
13
13
  <li><a class="oc-navmenu-link" href="#" aria-current="page">Contacts</a></li>
@@ -20,9 +20,9 @@
20
20
  <label><input type="radio" name="oc-appbar-theme" value="light"> Light</label>
21
21
  <label><input type="radio" name="oc-appbar-theme" value="dark"> Dark</label>
22
22
  </div>
23
- <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-appbar-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">SC</span></button>
23
+ <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-appbar-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">U1</span></button>
24
24
  <div class="oc-dropdown-menu" id="oc-appbar-user" popover>
25
- <div class="oc-dropdown-label">serge@example.com</div>
25
+ <div class="oc-dropdown-label">user1@company1.example</div>
26
26
  <a class="oc-dropdown-item" href="#">Profile</a>
27
27
  <a class="oc-dropdown-item" href="#">Settings</a>
28
28
  <div class="oc-dropdown-separator"></div>
@@ -14,45 +14,45 @@
14
14
  <aside class="oc-sidebar " aria-label="Main navigation">
15
15
  <div class="oc-sidebar-header">
16
16
  <a class="oc-sidebar-menu-button oc-sidebar-menu-button--lg" href="#">
17
- <svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg>
18
- <span class="oc-sidebar-menu-label"><strong>OmniaDesk</strong></span>
17
+ <svg data-icon="mdi:home-outline" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81zM12 3L2 12h3v8h6v-6h2v6h6v-8h3"/></svg>
18
+ <span class="oc-sidebar-menu-label"><strong>Company 1</strong></span>
19
19
  </a>
20
20
  </div>
21
21
  <div class="oc-sidebar-content">
22
22
  <div class="oc-sidebar-group">
23
23
  <div class="oc-sidebar-group-label">Platform</div>
24
24
  <ul class="oc-sidebar-menu">
25
- <li><a class="oc-sidebar-menu-button" href="#" aria-current="page"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg><span class="oc-sidebar-menu-label">Dashboard</span></a></li>
26
- <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="4"/><path d="M2 21c0-4 3-6 7-6s7 2 7 6"/></svg><span class="oc-sidebar-menu-label">Contacts</span><span class="oc-sidebar-menu-badge">12</span></a></li>
25
+ <li><a class="oc-sidebar-menu-button" href="#" aria-current="page"><svg data-icon="mdi:home-outline" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81zM12 3L2 12h3v8h6v-6h2v6h6v-8h3"/></svg><span class="oc-sidebar-menu-label">Dashboard</span></a></li>
26
+ <li><a class="oc-sidebar-menu-button" href="#"><svg data-icon="mdi:account-outline" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 2a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2m0 7c2.67 0 8 1.33 8 4v3H4v-3c0-2.67 5.33-4 8-4m0 1.9c-2.97 0-6.1 1.46-6.1 2.1v1.1h12.2V17c0-.64-3.13-2.1-6.1-2.1"/></svg><span class="oc-sidebar-menu-label">Contacts</span><span class="oc-sidebar-menu-badge">12</span></a></li>
27
27
  <li>
28
28
  <details class="oc-sidebar-collapsible" open>
29
- <summary class="oc-sidebar-menu-button"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2h8l5 5v15H6z"/><path d="M14 2v5h5"/></svg><span class="oc-sidebar-menu-label">Invoices</span></summary>
29
+ <summary class="oc-sidebar-menu-button"><svg data-icon="mdi:file-document-outline" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm0 2h7v5h5v11H6zm2 8v2h8v-2zm0 4v2h5v-2z"/></svg><span class="oc-sidebar-menu-label">Invoices</span></summary>
30
30
  <ul class="oc-sidebar-menu-sub">
31
31
  <li><a class="oc-sidebar-menu-button" href="#">Sales</a></li>
32
32
  <li><a class="oc-sidebar-menu-button" href="#">Purchases</a></li>
33
33
  </ul>
34
34
  </details>
35
35
  </li>
36
- <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V10M10 20V4M16 20v-8M22 20H2"/></svg><span class="oc-sidebar-menu-label">Reports</span></a></li>
36
+ <li><a class="oc-sidebar-menu-button" href="#"><svg data-icon="mdi:chart-bar" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22 21H2V3h2v16h2v-9h4v9h2V6h4v13h2v-5h4z"/></svg><span class="oc-sidebar-menu-label">Reports</span></a></li>
37
37
  </ul>
38
38
  </div>
39
39
  <div class="oc-sidebar-separator"></div>
40
40
  <div class="oc-sidebar-group">
41
41
  <ul class="oc-sidebar-menu">
42
- <li><a class="oc-sidebar-menu-button" href="#"><svg class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"/></svg><span class="oc-sidebar-menu-label">Settings</span></a></li>
42
+ <li><a class="oc-sidebar-menu-button" href="#"><svg data-icon="mdi:cog-outline" class="oc-sidebar-menu-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 8a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 2a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2m-2 12c-.25 0-.46-.18-.5-.42l-.37-2.65c-.63-.25-1.17-.59-1.69-.99l-2.49 1.01c-.22.08-.49 0-.61-.22l-2-3.46a.493.493 0 0 1 .12-.64l2.11-1.66L4.5 12l.07-1l-2.11-1.63a.493.493 0 0 1-.12-.64l2-3.46c.12-.22.39-.31.61-.22l2.49 1c.52-.39 1.06-.73 1.69-.98l.37-2.65c.04-.24.25-.42.5-.42h4c.25 0 .46.18.5.42l.37 2.65c.63.25 1.17.59 1.69.98l2.49-1c.22-.09.49 0 .61.22l2 3.46c.13.22.07.49-.12.64L19.43 11l.07 1l-.07 1l2.11 1.63c.19.15.25.42.12.64l-2 3.46c-.12.22-.39.31-.61.22l-2.49-1c-.52.39-1.06.73-1.69.98l-.37 2.65c-.04.24-.25.42-.5.42zm1.25-18l-.37 2.61c-1.2.25-2.26.89-3.03 1.78L5.44 7.35l-.75 1.3L6.8 10.2a5.55 5.55 0 0 0 0 3.6l-2.12 1.56l.75 1.3l2.43-1.04c.77.88 1.82 1.52 3.01 1.76l.37 2.62h1.52l.37-2.61c1.19-.25 2.24-.89 3.01-1.77l2.43 1.04l.75-1.3l-2.12-1.55c.4-1.17.4-2.44 0-3.61l2.11-1.55l-.75-1.3l-2.41 1.04a5.42 5.42 0 0 0-3.03-1.77L12.75 4z"/></svg><span class="oc-sidebar-menu-label">Settings</span></a></li>
43
43
  </ul>
44
44
  </div>
45
45
  </div>
46
46
  <div class="oc-sidebar-footer">
47
47
  <div class="oc-user">
48
- <span class="oc-avatar oc-avatar--sm">SC</span>
49
- <span class="oc-user-text"><span class="oc-user-name">Serge Cools</span><span class="oc-user-email">serge@example.com</span></span>
48
+ <span class="oc-avatar oc-avatar--sm">U1</span>
49
+ <span class="oc-user-text"><span class="oc-user-name">User 1</span><span class="oc-user-email">user1@company1.example</span></span>
50
50
  </div>
51
51
  </div>
52
52
  </aside>
53
53
  <div class="oc-block-shell-main">
54
54
  <header class="oc-block-appbar">
55
- <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-shell-toggle" title="Toggle sidebar"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
55
+ <label class="oc-btn oc-btn--ghost oc-btn--icon" for="oc-shell-toggle" title="Toggle sidebar"><svg data-icon="mdi:menu" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg><span class="oc-visually-hidden">Toggle sidebar</span></label>
56
56
  <nav class="oc-block-appbar-nav" aria-label="Module navigation">
57
57
  <ul class="oc-navmenu">
58
58
  <li><a class="oc-navmenu-link" href="#" aria-current="page">Contacts</a></li>
@@ -65,9 +65,9 @@
65
65
  <label><input type="radio" name="oc-shell-theme" value="light"> Light</label>
66
66
  <label><input type="radio" name="oc-shell-theme" value="dark"> Dark</label>
67
67
  </div>
68
- <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-shell-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">SC</span></button>
68
+ <button class="oc-btn oc-btn--ghost oc-btn--icon" type="button" popovertarget="oc-shell-user" aria-label="User menu"><span class="oc-avatar oc-avatar--sm">U1</span></button>
69
69
  <div class="oc-dropdown-menu" id="oc-shell-user" popover>
70
- <div class="oc-dropdown-label">serge@example.com</div>
70
+ <div class="oc-dropdown-label">user1@company1.example</div>
71
71
  <a class="oc-dropdown-item" href="#">Profile</a>
72
72
  <a class="oc-dropdown-item" href="#">Settings</a>
73
73
  <div class="oc-dropdown-separator"></div>
@@ -75,7 +75,7 @@
75
75
  </div>
76
76
  </div>
77
77
  </header>
78
- <div class="oc-block-shell-breadcrumbs"><nav aria-label="Breadcrumb"><ol class="oc-breadcrumb"><li class="oc-breadcrumb-item"><a href="#">Home</a></li><li class="oc-breadcrumb-item"><a href="#">CRM</a></li><li class="oc-breadcrumb-item" aria-current="page">Contacts</li></ol></nav></div>
78
+ <div class="oc-block-shell-breadcrumbs"><nav aria-label="Breadcrumb"><ol class="oc-breadcrumb oc-breadcrumb--chevron"><li class="oc-breadcrumb-item"><a href="#"><svg data-icon="mdi:home-outline" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81zM12 3L2 12h3v8h6v-6h2v6h6v-8h3"/></svg>Home</a></li><li class="oc-breadcrumb-item"><a href="#"><svg data-icon="mdi:account-group-outline" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 5a3.5 3.5 0 0 0-3.5 3.5A3.5 3.5 0 0 0 12 12a3.5 3.5 0 0 0 3.5-3.5A3.5 3.5 0 0 0 12 5m0 2a1.5 1.5 0 0 1 1.5 1.5A1.5 1.5 0 0 1 12 10a1.5 1.5 0 0 1-1.5-1.5A1.5 1.5 0 0 1 12 7M5.5 8A2.5 2.5 0 0 0 3 10.5c0 .94.53 1.75 1.29 2.18c.36.2.77.32 1.21.32s.85-.12 1.21-.32c.37-.21.68-.51.91-.87A5.42 5.42 0 0 1 6.5 8.5v-.28c-.3-.14-.64-.22-1-.22m13 0c-.36 0-.7.08-1 .22v.28c0 1.2-.39 2.36-1.12 3.31c.12.19.25.34.4.49a2.48 2.48 0 0 0 1.72.7c.44 0 .85-.12 1.21-.32c.76-.43 1.29-1.24 1.29-2.18A2.5 2.5 0 0 0 18.5 8M12 14c-2.34 0-7 1.17-7 3.5V19h14v-1.5c0-2.33-4.66-3.5-7-3.5m-7.29.55C2.78 14.78 0 15.76 0 17.5V19h3v-1.93c0-1.01.69-1.85 1.71-2.52m14.58 0c1.02.67 1.71 1.51 1.71 2.52V19h3v-1.5c0-1.74-2.78-2.72-4.71-2.95M12 16c1.53 0 3.24.5 4.23 1H7.77c.99-.5 2.7-1 4.23-1"/></svg>CRM</a></li><li class="oc-breadcrumb-item" aria-current="page"><svg data-icon="mdi:card-account-details-outline" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22 3H2c-1.09.04-1.96.91-2 2v14c.04 1.09.91 1.96 2 2h20c1.09-.04 1.96-.91 2-2V5a2.074 2.074 0 0 0-2-2m0 16H2V5h20zm-8-2v-1.25c0-1.66-3.34-2.5-5-2.5s-5 .84-5 2.5V17zM9 7a2.5 2.5 0 0 0-2.5 2.5A2.5 2.5 0 0 0 9 12a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 9 7m5 0v1h6V7zm0 2v1h6V9zm0 2v1h4v-1z"/></svg>Contacts</li></ol></nav></div>
79
79
  <main class="oc-block-shell-content">
80
80
  <h1 class="oc-heading-title">Contacts</h1>
81
81
  <p class="oc-heading-description">Page content scrolls here.</p>
@@ -12,10 +12,10 @@
12
12
  -->
13
13
  <div class="oc-block-authsplit">
14
14
  <aside class="oc-block-authsplit-brand">
15
- <a class="oc-block-authsplit-logo" href="#"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg> OmniaDesk</a>
15
+ <a class="oc-block-authsplit-logo" href="#"><svg data-icon="mdi:home-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81zM12 3L2 12h3v8h6v-6h2v6h6v-8h3"/></svg> Company 1</a>
16
16
  <blockquote class="oc-block-authsplit-quote">
17
17
  <p>&ldquo;One calm place for contacts, invoices and the day-to-day work.&rdquo;</p>
18
- <footer>Serge Cools, founder</footer>
18
+ <footer>User 1, founder</footer>
19
19
  </blockquote>
20
20
  </aside>
21
21
  <div class="oc-block-authsplit-form">
@@ -13,7 +13,7 @@
13
13
  <article class="oc-block-contact-card">
14
14
  <span class="oc-product-mark oc-product-mark--sm oc-product-mark--soft oc-accent--blue" aria-hidden="true">&#9993;</span>
15
15
  <h3 class="oc-block-contact-title">E-mail</h3>
16
- <a class="oc-block-contact-line" href="mailto:hello@example.com">hello@example.com</a>
16
+ <a class="oc-block-contact-line" href="mailto:info@company1.example">info@company1.example</a>
17
17
  <p class="oc-block-contact-line">For quotes and questions.</p>
18
18
  </article>
19
19
  <article class="oc-block-contact-card">
@@ -1,111 +1,156 @@
1
1
  <!-- OmniaUI block: data-table - Card with title, actions, search toolbar, sortable table, bulk bar and pagination footer. Needs @birdycom/omniaui-blocks + @birdycom/omniaui CSS.
2
+ File: packages/blocks/blocks/data-table.html | Map: card header -> toolbar (search, status pills) -> bulk bar -> table -> footer
3
+ Works in the browser with @birdycom/omniaui/data-table.js (data-oc-data-table on the card): search, status filter,
4
+ sort, selection, bulk export/delete, row delete, rows per page and pages. Server side (Livewire) leave the
5
+ data-oc-* hooks out and render links instead.
2
6
  Class API (modifiers are extra classes / attributes on the same element):
3
- .oc-card.oc-block-datatable: Card root
7
+ .oc-card.oc-block-datatable[data-oc-data-table]: Card root (data-oc-live="true": the demo changes its own rows)
4
8
  .oc-block-datatable-head / -title / -description: Card header area
5
9
  .oc-block-datatable-body: Padded body
6
- .oc-table-toolbar: Search + filters row (.oc-table-toolbar-spacer pushes items right)
7
- .oc-filter-pills / .oc-filter-pill: Segmented link filters (aria-current="true")
8
- .oc-block-datatable-bulk: Selection bar (appears when rows are selected)
9
- .oc-table-wrap > .oc-table: Table with .oc-table-sort headers, .oc-table-actions cells (see Table)
10
- .oc-table-footer: Entries text, page-size select and .oc-pagination
10
+ .oc-table-toolbar: Search (.oc-data-table-search) + status pills (data-oc-filter="active|all|archived")
11
+ .oc-block-datatable-bulk.oc-data-table-bulk: Selection bar (shown while rows are selected)
12
+ .oc-table-wrap > .oc-table: Table; th[data-oc-col] with button.oc-table-sort, rows tr[data-oc-row][data-oc-key][data-oc-status]
13
+ .oc-table-footer: Count (data-oc-summary), page size (data-oc-page-size) and pages (data-oc-pager)
11
14
  Slots: title, description, header actions, toolbar, table, footer
12
15
  -->
13
- <section class="oc-card oc-block-datatable">
16
+ <section class="oc-card oc-block-datatable" id="oc-block-contacts" data-oc-data-table="" data-oc-live="true">
14
17
  <header class="oc-block-datatable-head">
15
18
  <div>
16
19
  <h2 class="oc-block-datatable-title">Contacts</h2>
17
20
  <p class="oc-block-datatable-description">All customers and suppliers.</p>
18
21
  </div>
19
22
  <div>
20
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Export</button>
21
- <button class="oc-btn oc-btn--sm" type="button">New contact</button>
23
+ <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-export=""><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 12h2v5h16v-5h2v5c0 1.11-.89 2-2 2H4a2 2 0 0 1-2-2zm10 3l5.55-5.46l-1.42-1.41L13 11.25V2h-2v9.25L7.88 8.13L6.46 9.55z"/></svg>Export</button>
24
+ <button class="oc-btn oc-btn--sm" type="button"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"/></svg>New contact</button>
22
25
  </div>
23
26
  </header>
24
27
  <div class="oc-block-datatable-body">
25
28
  <div class="oc-table-toolbar">
26
- <input class="oc-input" type="search" placeholder="Search contacts..." aria-label="Search contacts">
29
+ <input class="oc-input oc-data-table-search" type="search" placeholder="Search contacts..." aria-label="Search contacts">
27
30
  <div class="oc-filter-pills" role="group" aria-label="Status filter">
28
- <a class="oc-filter-pill" href="#" aria-current="true">Active</a>
29
- <a class="oc-filter-pill" href="#">Including archived</a>
30
- <a class="oc-filter-pill" href="#">Archived only</a>
31
- </div>
32
- <span class="oc-table-toolbar-spacer"></span>
33
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" popovertarget="oc-datatable-columns">Columns</button>
34
- <div class="oc-popover oc-popover--sm" id="oc-datatable-columns" popover>
35
- <label><input class="oc-checkbox" type="checkbox" checked> Name</label><br>
36
- <label><input class="oc-checkbox" type="checkbox" checked> E-mail</label><br>
37
- <label><input class="oc-checkbox" type="checkbox" checked> Status</label>
31
+ <button class="oc-filter-pill" type="button" data-oc-filter="active" aria-current="true">Active</button>
32
+ <button class="oc-filter-pill" type="button" data-oc-filter="all">Including archived</button>
33
+ <button class="oc-filter-pill" type="button" data-oc-filter="archived">Archived only</button>
38
34
  </div>
39
35
  </div>
40
- <div class="oc-block-datatable-bulk"><span>2 selected</span><button class="oc-btn oc-btn--outline oc-btn--sm" type="button">Export</button><button class="oc-btn oc-btn--destructive oc-btn--sm" type="button">Delete</button></div>
36
+ <div class="oc-block-datatable-bulk oc-data-table-bulk" hidden><span data-oc-selected-count="">0 selected</span><button class="oc-btn oc-btn--outline oc-btn--sm" type="button" data-oc-bulk="export"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 12h2v5h16v-5h2v5c0 1.11-.89 2-2 2H4a2 2 0 0 1-2-2zm10 3l5.55-5.46l-1.42-1.41L13 11.25V2h-2v9.25L7.88 8.13L6.46 9.55z"/></svg>Export</button><button class="oc-btn oc-btn--destructive oc-btn--sm" type="button" data-oc-bulk="delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg>Delete</button></div>
41
37
  <div class="oc-table-wrap">
42
38
  <table class="oc-table">
43
39
  <thead>
44
40
  <tr>
45
- <th style="width:2.5rem"><input class="oc-checkbox" type="checkbox" aria-label="Select all"></th>
46
- <th aria-sort="ascending"><a class="oc-table-sort" href="?sort=name">Name</a></th>
47
- <th><a class="oc-table-sort" href="?sort=email">E-mail</a></th>
48
- <th>Status</th>
49
- <th data-numeric><a class="oc-table-sort" href="?sort=balance">Balance</a></th>
50
- <th><span class="oc-visually-hidden">Actions</span></th>
41
+ <th data-oc-col="select" style="width:2.5rem"><input class="oc-checkbox" type="checkbox" data-oc-select-all="" aria-label="Select all"></th>
42
+ <th data-oc-col="name" aria-sort="ascending"><button class="oc-table-sort" type="button">Name</button></th>
43
+ <th data-oc-col="email"><button class="oc-table-sort" type="button">E-mail</button></th>
44
+ <th data-oc-col="status"><button class="oc-table-sort" type="button">Status</button></th>
45
+ <th data-oc-col="balance" data-numeric=""><button class="oc-table-sort" type="button">Balance</button></th>
46
+ <th data-oc-col="actions"><span class="oc-visually-hidden">Actions</span></th>
51
47
  </tr>
52
48
  </thead>
53
49
  <tbody>
54
- <tr>
55
- <td><input class="oc-checkbox" type="checkbox" aria-label="Select Ada Lovelace"></td>
56
- <td>Ada Lovelace</td>
57
- <td>ada@example.com</td>
58
- <td><span class="oc-badge oc-badge--success">Active</span></td>
59
- <td data-numeric>420.00</td>
60
- <td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
50
+ <tr data-oc-row="" data-oc-key="contact-1" data-oc-status="active">
51
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 1"></td>
52
+ <td data-oc-col="name">Contact 1</td>
53
+ <td data-oc-col="email">info@contact1.example</td>
54
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
55
+ <td data-oc-col="balance" data-numeric="">420.00</td>
56
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 1" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 1" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
57
+ </tr>
58
+ <tr data-oc-row="" data-oc-key="contact-2" data-oc-status="active">
59
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 2"></td>
60
+ <td data-oc-col="name">Contact 2</td>
61
+ <td data-oc-col="email">info@contact2.example</td>
62
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
63
+ <td data-oc-col="balance" data-numeric="">840.00</td>
64
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 2" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 2" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
65
+ </tr>
66
+ <tr data-oc-row="" data-oc-key="contact-3" data-oc-status="active">
67
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 3"></td>
68
+ <td data-oc-col="name">Contact 3</td>
69
+ <td data-oc-col="email">info@contact3.example</td>
70
+ <td data-oc-col="status"><span class="oc-badge oc-badge--warning">Pending</span></td>
71
+ <td data-oc-col="balance" data-numeric="">1260.00</td>
72
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 3" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 3" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
73
+ </tr>
74
+ <tr data-oc-row="" data-oc-key="contact-4" data-oc-status="archived">
75
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 4"></td>
76
+ <td data-oc-col="name">Contact 4</td>
77
+ <td data-oc-col="email">info@contact4.example</td>
78
+ <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Archived</span></td>
79
+ <td data-oc-col="balance" data-numeric="">1680.00</td>
80
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 4" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 4" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
81
+ </tr>
82
+ <tr data-oc-row="" data-oc-key="contact-5" data-oc-status="active">
83
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 5"></td>
84
+ <td data-oc-col="name">Contact 5</td>
85
+ <td data-oc-col="email">info@contact5.example</td>
86
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
87
+ <td data-oc-col="balance" data-numeric="">2100.00</td>
88
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 5" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 5" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
89
+ </tr>
90
+ <tr data-oc-row="" data-oc-key="contact-6" data-oc-status="active">
91
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 6"></td>
92
+ <td data-oc-col="name">Contact 6</td>
93
+ <td data-oc-col="email">info@contact6.example</td>
94
+ <td data-oc-col="status"><span class="oc-badge oc-badge--warning">Pending</span></td>
95
+ <td data-oc-col="balance" data-numeric="">310.00</td>
96
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 6" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 6" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
97
+ </tr>
98
+ <tr data-oc-row="" data-oc-key="contact-7" data-oc-status="active">
99
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 7"></td>
100
+ <td data-oc-col="name">Contact 7</td>
101
+ <td data-oc-col="email">info@contact7.example</td>
102
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
103
+ <td data-oc-col="balance" data-numeric="">975.00</td>
104
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 7" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 7" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
105
+ </tr>
106
+ <tr data-oc-row="" data-oc-key="contact-8" data-oc-status="archived">
107
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 8"></td>
108
+ <td data-oc-col="name">Contact 8</td>
109
+ <td data-oc-col="email">info@contact8.example</td>
110
+ <td data-oc-col="status"><span class="oc-badge oc-badge--secondary">Archived</span></td>
111
+ <td data-oc-col="balance" data-numeric="">150.00</td>
112
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 8" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 8" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
61
113
  </tr>
62
- <tr>
63
- <td><input class="oc-checkbox" type="checkbox" aria-label="Select Alan Turing"></td>
64
- <td>Alan Turing</td>
65
- <td>alan@example.com</td>
66
- <td><span class="oc-badge oc-badge--success">Active</span></td>
67
- <td data-numeric>840.00</td>
68
- <td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
114
+ <tr data-oc-row="" data-oc-key="contact-9" data-oc-status="active">
115
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 9"></td>
116
+ <td data-oc-col="name">Contact 9</td>
117
+ <td data-oc-col="email">info@contact9.example</td>
118
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
119
+ <td data-oc-col="balance" data-numeric="">3240.00</td>
120
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 9" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 9" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
69
121
  </tr>
70
- <tr>
71
- <td><input class="oc-checkbox" type="checkbox" aria-label="Select Grace Hopper"></td>
72
- <td>Grace Hopper</td>
73
- <td>grace@example.com</td>
74
- <td><span class="oc-badge oc-badge--warning">Pending</span></td>
75
- <td data-numeric>1260.00</td>
76
- <td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
122
+ <tr data-oc-row="" data-oc-key="contact-10" data-oc-status="active">
123
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 10"></td>
124
+ <td data-oc-col="name">Contact 10</td>
125
+ <td data-oc-col="email">info@contact10.example</td>
126
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
127
+ <td data-oc-col="balance" data-numeric="">560.00</td>
128
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 10" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 10" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
77
129
  </tr>
78
- <tr>
79
- <td><input class="oc-checkbox" type="checkbox" aria-label="Select Linus Torvalds"></td>
80
- <td>Linus Torvalds</td>
81
- <td>linus@example.com</td>
82
- <td><span class="oc-badge oc-badge--secondary">Archived</span></td>
83
- <td data-numeric>1680.00</td>
84
- <td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
130
+ <tr data-oc-row="" data-oc-key="contact-11" data-oc-status="active">
131
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 11"></td>
132
+ <td data-oc-col="name">Contact 11</td>
133
+ <td data-oc-col="email">info@contact11.example</td>
134
+ <td data-oc-col="status"><span class="oc-badge oc-badge--warning">Pending</span></td>
135
+ <td data-oc-col="balance" data-numeric="">1890.00</td>
136
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 11" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 11" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
85
137
  </tr>
86
- <tr>
87
- <td><input class="oc-checkbox" type="checkbox" aria-label="Select Margaret Hamilton"></td>
88
- <td>Margaret Hamilton</td>
89
- <td>margaret@example.com</td>
90
- <td><span class="oc-badge oc-badge--success">Active</span></td>
91
- <td data-numeric>2100.00</td>
92
- <td class="oc-table-actions"><a class="oc-table-row-action" href="#">Edit</a><button class="oc-table-row-action oc-table-row-action--destructive" type="button">Delete</button></td>
138
+ <tr data-oc-row="" data-oc-key="contact-12" data-oc-status="active">
139
+ <td data-oc-col="select"><input class="oc-checkbox" type="checkbox" data-oc-select="" aria-label="Select Contact 12"></td>
140
+ <td data-oc-col="name">Contact 12</td>
141
+ <td data-oc-col="email">info@contact12.example</td>
142
+ <td data-oc-col="status"><span class="oc-badge oc-badge--success">Active</span></td>
143
+ <td data-oc-col="balance" data-numeric="">720.00</td>
144
+ <td class="oc-table-actions" data-oc-col="actions"><a class="oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm" href="#" aria-label="Edit Contact 12" title="Edit"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z"/></svg></a><button class="oc-btn oc-btn--soft-destructive oc-btn--icon oc-btn--sm" type="button" data-oc-row-action="delete" aria-label="Delete Contact 12" title="Delete"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z"/></svg></button></td>
93
145
  </tr>
94
146
  </tbody>
95
147
  </table>
148
+ <p class="oc-data-table-empty" hidden>No contacts found.</p>
96
149
  </div>
97
150
  <div class="oc-table-footer">
98
- <span>Showing 1 to 5 of 48 entries</span>
99
- <label>Rows per page <select class="oc-select" aria-label="Rows per page"><option>10</option><option>25</option><option>50</option></select></label>
100
- <nav aria-label="Pagination">
101
- <ul class="oc-pagination">
102
- <li class="oc-pagination-item"><a href="#" aria-label="Previous">&lsaquo;</a></li>
103
- <li class="oc-pagination-item is-active"><a href="#" aria-current="page">1</a></li>
104
- <li class="oc-pagination-item"><a href="#">2</a></li>
105
- <li class="oc-pagination-item"><a href="#">3</a></li>
106
- <li class="oc-pagination-item"><a href="#" aria-label="Next">&rsaquo;</a></li>
107
- </ul>
108
- </nav>
151
+ <span data-oc-summary="Showing {from} to {to} of {total} entries">Showing 1 to 5 of 10 entries</span>
152
+ <label>Rows per page <select class="oc-select" data-oc-page-size="" aria-label="Rows per page"><option>5</option><option>10</option><option>25</option></select></label>
153
+ <nav class="oc-data-table-pager" data-oc-pager="" aria-label="Pagination"></nav>
109
154
  </div>
110
155
  </div>
111
156
  </section>
@@ -17,7 +17,7 @@
17
17
  -->
18
18
  <div class="oc-block-authpage oc-block-authpage--plain">
19
19
  <form class="oc-block-authcard" action="#" method="post">
20
- <span class="oc-block-authcard-logo"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></span>
20
+ <span class="oc-block-authcard-logo"><svg data-icon="mdi:email-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2zm-2 0l-8 5l-8-5zm0 12H4V8l8 5l8-5z"/></svg></span>
21
21
  <div class="oc-block-authcard-head">
22
22
  <h1 class="oc-block-authcard-title">Forgot your password?</h1>
23
23
  <p class="oc-block-authcard-text">Enter your e-mail and we will send you a reset link</p>
@@ -7,7 +7,7 @@
7
7
  -->
8
8
  <form class="oc-block-formpage" action="#" method="post">
9
9
  <details class="oc-collapsible" open>
10
- <summary><svg class="oc-collapsible-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 8h.01"/></svg><span class="oc-collapsible-title">General information</span></summary>
10
+ <summary><svg data-icon="mdi:information-outline" class="oc-collapsible-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11 9h2V7h-2m1 13c-4.41 0-8-3.59-8-8s3.59-8 8-8s8 3.59 8 8s-3.59 8-8 8m0-18A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m-1 15h2v-6h-2z"/></svg><span class="oc-collapsible-title">General information</span></summary>
11
11
  <div class="oc-collapsible-content">
12
12
  <div class="oc-block-formpage-grid">
13
13
  <div class="oc-field"><label class="oc-field-label" for="oc-form-name">Name</label><input class="oc-input" id="oc-form-name" name="name"></div>
@@ -18,7 +18,7 @@
18
18
  </div>
19
19
  </details>
20
20
  <details class="oc-collapsible">
21
- <summary><svg class="oc-collapsible-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 6h11M9 12h11M9 18h11M4 6h.01M4 12h.01M4 18h.01"/></svg><span class="oc-collapsible-title">Notes</span></summary>
21
+ <summary><svg data-icon="mdi:format-list-bulleted" class="oc-collapsible-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5"/></svg><span class="oc-collapsible-title">Notes</span></summary>
22
22
  <div class="oc-collapsible-content"><textarea class="oc-input" name="notes" rows="3" aria-label="Notes"></textarea></div>
23
23
  </details>
24
24
  <div class="oc-block-formpage-actions">
@@ -2,7 +2,7 @@
2
2
  <section class="oc-section-pad">
3
3
  <div class="oc-container oc-split">
4
4
  <div>
5
- <p class="oc-eyebrow">Software development &middot; since 2001</p>
5
+ <p class="oc-eyebrow">Software development &middot; for small companies</p>
6
6
  <h1 class="oc-display">We build software that moves your business <span class="oc-text-gradient">forward</span>.</h1>
7
7
  <p class="oc-lead">From a modular ERP to a custom app for a single customer: we design, build and maintain web applications, desktop tools and plugins.</p>
8
8
  <div class="flex flex-wrap gap-1 mt-2">
@@ -14,10 +14,10 @@
14
14
  <span class="oc-icon-tile oc-icon-tile--float oc-accent--green absolute" style="inset: -0.5rem auto auto 8%;" aria-hidden="true">&#9670;</span>
15
15
  <span class="oc-icon-tile oc-icon-tile--float oc-accent--violet absolute" style="inset: 0 6% auto auto; animation-delay: -2s;" aria-hidden="true">&#9673;</span>
16
16
  <span class="oc-icon-tile oc-icon-tile--float oc-accent--orange absolute" style="inset: auto 10% -0.5rem auto; animation-delay: -4s;" aria-hidden="true">&#9650;</span>
17
- <div class="oc-code-window">
17
+ <div class="oc-code-window oc-code-window--dark">
18
18
  <div class="oc-code-window__bar"><i></i><i></i><i></i><span class="oc-code-window__title">projects.php</span></div>
19
19
  <pre class="oc-code-window__body">return [
20
- 'erp' => OmniaDesk::class,
20
+ 'erp' => Erp::class,
21
21
  'design' => OmniaCSS::class,
22
22
  'next' => YourProject::class,
23
23
  ];</pre>
@@ -17,7 +17,7 @@
17
17
  -->
18
18
  <div class="oc-block-authpage oc-block-authpage--plain">
19
19
  <form class="oc-block-authcard" action="#" method="post">
20
- <span class="oc-block-authcard-logo"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 13 9 5 9-5"/></svg></span>
20
+ <span class="oc-block-authcard-logo"><svg data-icon="mdi:layers-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 18.54l7.37-5.74L21 14.07l-9 7l-9-7l1.62-1.26zM12 16L3 9l9-7l9 7zm0-11.47L6.26 9L12 13.47L17.74 9z"/></svg></span>
21
21
  <div class="oc-block-authcard-head">
22
22
  <h1 class="oc-block-authcard-title">Login to your account</h1>
23
23
  <p class="oc-block-authcard-text">Enter your e-mail below to login</p>
@@ -18,7 +18,7 @@
18
18
  <div class="oc-block-authduo">
19
19
  <div class="oc-block-authduo-grid">
20
20
  <aside class="oc-block-authduo-panel oc-block-authduo-panel--image">
21
- <a class="oc-block-authduo-logo" href="#"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 13 9 5 9-5"/></svg> OmniaDesk</a>
21
+ <a class="oc-block-authduo-logo" href="#"><svg data-icon="mdi:layers-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 18.54l7.37-5.74L21 14.07l-9 7l-9-7l1.62-1.26zM12 16L3 9l9-7l9 7zm0-11.47L6.26 9L12 13.47L17.74 9z"/></svg> Company 1</a>
22
22
  <blockquote class="oc-block-authduo-quote">
23
23
  <p>&ldquo;This workspace saved me hours of admin every week.&rdquo;</p>
24
24
  <footer>Sofia Davis, operations lead</footer>
@@ -17,7 +17,7 @@
17
17
  -->
18
18
  <div class="oc-block-authpage">
19
19
  <form class="oc-block-authcard" action="#" method="post">
20
- <span class="oc-block-authcard-logo"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 13 9 5 9-5"/></svg></span>
20
+ <span class="oc-block-authcard-logo"><svg data-icon="mdi:layers-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 18.54l7.37-5.74L21 14.07l-9 7l-9-7l1.62-1.26zM12 16L3 9l9-7l9 7zm0-11.47L6.26 9L12 13.47L17.74 9z"/></svg></span>
21
21
  <div class="oc-block-authcard-head">
22
22
  <h1 class="oc-block-authcard-title">Welcome back</h1>
23
23
  <p class="oc-block-authcard-text">Login with your Apple or Google account</p>
@@ -10,7 +10,7 @@
10
10
  -->
11
11
  <header class="oc-block-modulehead">
12
12
  <div class="oc-block-modulehead-band">
13
- <span class="oc-block-modulehead-icon" aria-hidden="true"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="8" r="4"/><path d="M2 21c0-4 3-6 7-6s7 2 7 6"/></svg></span>
13
+ <span class="oc-block-modulehead-icon" aria-hidden="true"><svg data-icon="mdi:account-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 2a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2m0 7c2.67 0 8 1.33 8 4v3H4v-3c0-2.67 5.33-4 8-4m0 1.9c-2.97 0-6.1 1.46-6.1 2.1v1.1h12.2V17c0-.64-3.13-2.1-6.1-2.1"/></svg></span>
14
14
  <div class="oc-block-modulehead-body">
15
15
  <h1 class="oc-block-modulehead-title">Contacts</h1>
16
16
  <p class="oc-block-modulehead-intro">Manage customers, suppliers and the people who work there.</p>
@@ -18,7 +18,7 @@
18
18
  -->
19
19
  <div class="oc-block-authpage oc-block-authpage--plain">
20
20
  <form class="oc-block-authcard" action="#" method="post">
21
- <span class="oc-block-authcard-logo"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3 4 6v6c0 5 3.5 8 8 9 4.5-1 8-4 8-9V6z"/></svg></span>
21
+ <span class="oc-block-authcard-logo"><svg data-icon="mdi:shield-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M21 11c0 5.55-3.84 10.74-9 12c-5.16-1.26-9-6.45-9-12V5l9-4l9 4zm-9 10c3.75-1 7-5.46 7-9.78V6.3l-7-3.12L5 6.3v4.92C5 15.54 8.25 20 12 21"/></svg></span>
22
22
  <div class="oc-block-authcard-head">
23
23
  <h1 class="oc-block-authcard-title">Enter verification code</h1>
24
24
  <p class="oc-block-authcard-text">We sent a 6-digit code to your e-mail</p>
@@ -19,7 +19,7 @@
19
19
  <div class="oc-block-authduo">
20
20
  <div class="oc-block-authduo-grid">
21
21
  <aside class="oc-block-authduo-panel oc-block-authduo-panel--muted">
22
- <a class="oc-block-authduo-logo" href="#"><svg class="" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 13 9 5 9-5"/></svg> OmniaDesk</a>
22
+ <a class="oc-block-authduo-logo" href="#"><svg data-icon="mdi:layers-outline" class="" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="m12 18.54l7.37-5.74L21 14.07l-9 7l-9-7l1.62-1.26zM12 16L3 9l9-7l9 7zm0-11.47L6.26 9L12 13.47L17.74 9z"/></svg> Company 1</a>
23
23
  <blockquote class="oc-block-authduo-quote">
24
24
  <p>&ldquo;Two-step verification keeps our client data where it belongs.&rdquo;</p>
25
25
  <footer>Security team</footer>
@@ -6,17 +6,17 @@
6
6
  <div class="oc-card-grid">
7
7
  <a class="oc-product-card oc-accent--green" href="#">
8
8
  <div class="oc-product-card__top"><span class="oc-icon-tile" aria-hidden="true">&#9670;</span><span class="oc-pill">Own product</span></div>
9
- <h3 class="oc-product-card__name">OmniaDesk</h3>
9
+ <h3 class="oc-product-card__name">Product 1</h3>
10
10
  <p class="oc-product-card__tagline">Modular ERP for small businesses</p>
11
11
  <p class="oc-product-card__summary">CRM, sales, invoicing, bookkeeping and stock in one web application.</p>
12
- <span class="oc-product-card__more">Discover OmniaDesk</span>
12
+ <span class="oc-product-card__more">Discover Product 1</span>
13
13
  </a>
14
14
  <a class="oc-product-card oc-accent--orange" href="#">
15
15
  <div class="oc-product-card__top"><span class="oc-icon-tile" aria-hidden="true">&#9874;</span><span class="oc-pill">Custom work</span></div>
16
- <h3 class="oc-product-card__name">Korrekt Hub</h3>
16
+ <h3 class="oc-product-card__name">Product 2</h3>
17
17
  <p class="oc-product-card__tagline">Custom platform for interior builders</p>
18
18
  <p class="oc-product-card__summary">Work orders, projects, quotes, stock, planning and HR in one app.</p>
19
- <span class="oc-product-card__more">Discover Korrekt Hub</span>
19
+ <span class="oc-product-card__more">Discover Product 2</span>
20
20
  </a>
21
21
  <a class="oc-product-card oc-accent--violet" href="#">
22
22
  <div class="oc-product-card__top"><span class="oc-icon-tile" aria-hidden="true">&#9673;</span><span class="oc-pill">Framework</span></div>
@@ -27,10 +27,10 @@
27
27
  </a>
28
28
  <a class="oc-product-card oc-accent--cyan" href="#">
29
29
  <div class="oc-product-card__top"><span class="oc-icon-tile" aria-hidden="true">&#9638;</span><span class="oc-pill">Tool</span></div>
30
- <h3 class="oc-product-card__name">HistoryTabs</h3>
30
+ <h3 class="oc-product-card__name">Product 3</h3>
31
31
  <p class="oc-product-card__tagline">Never lose your tabs again</p>
32
32
  <p class="oc-product-card__summary">A Windows tool that brings back browser windows with all their tabs.</p>
33
- <span class="oc-product-card__more">Discover HistoryTabs</span>
33
+ <span class="oc-product-card__more">Discover Product 3</span>
34
34
  </a>
35
35
  </div>
36
36
  </div>