@svelte-lean/table 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @svelte-lean/table
2
2
 
3
+ ## 0.4.0
4
+
5
+ No changes in this release.
6
+
7
+ ## 0.3.2
8
+
9
+ ### Patch Changes
10
+
11
+ - Grid layout: content drawn straight into a cell (a badge, a chip, a link) keeps its own width instead of stretching across the cell; the selection and expand columns center their control. A click on a disabled `data-action` control reports no `onAction`.
12
+
13
+ ## 0.3.1
14
+
15
+ ### Patch Changes
16
+
17
+ - The selection count moves out of the toolbar: with a pager it ends the pager's status line (`Page 1 of 15 · 144 rows · 3 selected`), without one it stays in the toolbar; either way it shows only while rows are selected, never as "0 selected". A table with selection and nothing else in its toolbar no longer draws an empty band above its header row.
18
+
3
19
  ## 0.3.0
4
20
 
5
21
  ### Minor Changes
package/dist/style.css CHANGED
@@ -858,12 +858,36 @@
858
858
  align-items: center;
859
859
  min-width: 0;
860
860
  }
861
+ /* The renderer's own boxes in a cell fill it; content drawn straight into a cell (a badge, a
862
+ chip, a link in a plain grid cell, a control) keeps its own width. */
861
863
  :where(
862
864
  .slean-table[data-layout='grid'] > .slean-table-scroll > table > * > tr > :is(th, td) > *
865
+ ) {
866
+ flex: 0 1 auto;
867
+ }
868
+ :where(
869
+ .slean-table[data-layout='grid']
870
+ > .slean-table-scroll
871
+ > table
872
+ > *
873
+ > tr
874
+ > :is(th, td)
875
+ > :is(.slean-table-cell, .slean-table-heading, .slean-table-editor)
863
876
  ) {
864
877
  flex: 1 1 auto;
865
878
  min-width: 0;
866
879
  }
880
+ /* The selection and expand columns center their one control. */
881
+ :where(
882
+ .slean-table[data-layout='grid']
883
+ > .slean-table-scroll
884
+ > table
885
+ > *
886
+ > tr
887
+ > :is(.slean-table-selection, .slean-table-expander)
888
+ ) {
889
+ justify-content: center;
890
+ }
867
891
  :where(
868
892
  .slean-table[data-layout='grid'] > .slean-table-scroll > table > * > tr > .slean-table-full
869
893
  ) {
@@ -865,6 +865,8 @@
865
865
  }
866
866
  /** The page status: a manual table without `rowCount` does not know its total. */
867
867
  const rowsKnown = $derived(!manual || rowCount !== undefined);
868
+ /** Without a pager the toolbar carries the selection count, and only while something is chosen. */
869
+ const selectedInToolbar = $derived(Boolean(selection) && !pagination && s.selection.length > 0);
868
870
  const headerRowCount = $derived(showHeader ? table.headers.length + (filters ? 1 : 0) : 0);
869
871
  /** A manual page is part of a known total: `aria-rowcount` and `aria-rowindex` say where. */
870
872
  const ariaRowCount = $derived(
@@ -1063,7 +1065,10 @@
1063
1065
  const target = e.target as HTMLElement;
1064
1066
  const action = target.closest<HTMLElement>('[data-action]');
1065
1067
  if (action && cell.contains(action)) {
1066
- onAction?.(action.dataset.action ?? '', row, action, index);
1068
+ // A disabled control reports nothing (a click can still be dispatched on one).
1069
+ if (!action.matches(':disabled, [aria-disabled="true"]')) {
1070
+ onAction?.(action.dataset.action ?? '', row, action, index);
1071
+ }
1067
1072
  return;
1068
1073
  }
1069
1074
  const control = target.closest(NOT_ROW_CLICK);
@@ -1475,7 +1480,11 @@
1475
1480
  <!-- The toolbar exists only when something goes in it: an empty flex row would still paint its
1476
1481
  padding as a blank band above the header row (Svelte keeps a text node between the blocks,
1477
1482
  so `:empty` cannot hide it). -->
1478
- {#if searchable || toolbar || selection || columnControls}<div class="slean-table-toolbar">
1483
+ <!-- The selection count sits in the pager's status line when there is a pager, and in the
1484
+ toolbar only without one; either way it shows while something is selected, never "0". -->
1485
+ {#if searchable || toolbar || selectedInToolbar || columnControls}<div
1486
+ class="slean-table-toolbar"
1487
+ >
1479
1488
  {#if searchable}<input
1480
1489
  class="slean-table-search slean-table-input"
1481
1490
  type="search"
@@ -1485,7 +1494,7 @@
1485
1494
  oninput={(e) => delayed('search', e.currentTarget.value, (v) => table.setSearch(v))}
1486
1495
  />{/if}
1487
1496
  {#if toolbar}{@render toolbar(model)}{/if}
1488
- {#if selection}<span class="slean-table-selected" aria-live="polite"
1497
+ {#if selectedInToolbar}<span class="slean-table-selected" aria-live="polite"
1489
1498
  >{m.selected(s.selection.length)}</span
1490
1499
  >{/if}
1491
1500
  {#if columnControls}<details class="slean-table-columns">
@@ -1658,8 +1667,7 @@
1658
1667
  ></button
1659
1668
  >{:else if col.headerCell}{@render col.headerCell(
1660
1669
  headerContext(col, sort)
1661
- )}{:else}{col.header}{/if}
1662
- {#if col.resizable !== false}<button
1670
+ )}{:else}{col.header}{/if}{#if col.resizable !== false}<button
1663
1671
  type="button"
1664
1672
  class="slean-table-resize"
1665
1673
  aria-label={`${m.resize}: ${col.header}`}
@@ -1726,7 +1734,12 @@
1726
1734
  </div>
1727
1735
  {#if pagination}<div class="slean-table-pagination">
1728
1736
  <span class="slean-table-page-status" aria-live="polite"
1729
- >{m.page(model.pageIndex + 1, model.pageCount, rowsKnown ? model.total : undefined)}</span
1737
+ >{m.page(
1738
+ model.pageIndex + 1,
1739
+ model.pageCount,
1740
+ rowsKnown ? model.total : undefined
1741
+ )}{#if selection && s.selection.length > 0}
1742
+ · <span class="slean-table-selected">{m.selected(s.selection.length)}</span>{/if}</span
1730
1743
  >{#if pageSizeSelect === 'custom'}<span class="slean-table-page-size"
1731
1744
  ><span id="{uid}-page-size">{m.pageSize}</span>
1732
1745
  <div class="slean-table-page-select" {...SELECT_ROOT} data-size="sm">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svelte-lean/table",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "A Svelte-native table and data-grid engine that ships only the features you use.",
5
5
  "license": "MIT",
6
6
  "author": "Ömer Say",