@toolbox-web/grid 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +2 -3
  2. package/all.js +1063 -1024
  3. package/all.js.map +1 -1
  4. package/index.js +1078 -912
  5. package/index.js.map +1 -1
  6. package/lib/core/grid.d.ts +28 -0
  7. package/lib/core/grid.d.ts.map +1 -1
  8. package/lib/core/internal/dom-builder.d.ts +2 -0
  9. package/lib/core/internal/dom-builder.d.ts.map +1 -1
  10. package/lib/core/internal/event-delegation.d.ts +21 -0
  11. package/lib/core/internal/event-delegation.d.ts.map +1 -1
  12. package/lib/core/internal/header.d.ts.map +1 -1
  13. package/lib/core/internal/resize.d.ts.map +1 -1
  14. package/lib/core/internal/rows.d.ts +1 -1
  15. package/lib/core/internal/rows.d.ts.map +1 -1
  16. package/lib/core/internal/shell.d.ts +19 -13
  17. package/lib/core/internal/shell.d.ts.map +1 -1
  18. package/lib/core/plugin/base-plugin.d.ts +13 -2
  19. package/lib/core/plugin/base-plugin.d.ts.map +1 -1
  20. package/lib/core/plugin/expander-column.d.ts.map +1 -1
  21. package/lib/core/plugin/plugin-manager.d.ts +6 -2
  22. package/lib/core/plugin/plugin-manager.d.ts.map +1 -1
  23. package/lib/core/types.d.ts +41 -3
  24. package/lib/core/types.d.ts.map +1 -1
  25. package/lib/plugins/clipboard/index.js +22 -11
  26. package/lib/plugins/clipboard/index.js.map +1 -1
  27. package/lib/plugins/column-virtualization/index.js +59 -48
  28. package/lib/plugins/column-virtualization/index.js.map +1 -1
  29. package/lib/plugins/context-menu/index.js +71 -60
  30. package/lib/plugins/context-menu/index.js.map +1 -1
  31. package/lib/plugins/editing/EditingPlugin.d.ts +1 -0
  32. package/lib/plugins/editing/EditingPlugin.d.ts.map +1 -1
  33. package/lib/plugins/editing/index.js +93 -80
  34. package/lib/plugins/editing/index.js.map +1 -1
  35. package/lib/plugins/export/index.js +29 -18
  36. package/lib/plugins/export/index.js.map +1 -1
  37. package/lib/plugins/filtering/FilteringPlugin.d.ts +9 -1
  38. package/lib/plugins/filtering/FilteringPlugin.d.ts.map +1 -1
  39. package/lib/plugins/filtering/index.js +199 -165
  40. package/lib/plugins/filtering/index.js.map +1 -1
  41. package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts +1 -0
  42. package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts.map +1 -1
  43. package/lib/plugins/grouping-columns/index.js +79 -49
  44. package/lib/plugins/grouping-columns/index.js.map +1 -1
  45. package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts.map +1 -1
  46. package/lib/plugins/grouping-rows/index.js +98 -87
  47. package/lib/plugins/grouping-rows/index.js.map +1 -1
  48. package/lib/plugins/master-detail/index.js +70 -57
  49. package/lib/plugins/master-detail/index.js.map +1 -1
  50. package/lib/plugins/multi-sort/index.js +48 -37
  51. package/lib/plugins/multi-sort/index.js.map +1 -1
  52. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +1 -1
  53. package/lib/plugins/pinned-columns/index.js +71 -66
  54. package/lib/plugins/pinned-columns/index.js.map +1 -1
  55. package/lib/plugins/pinned-columns/pinned-columns.d.ts +2 -2
  56. package/lib/plugins/pinned-columns/pinned-columns.d.ts.map +1 -1
  57. package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts.map +1 -1
  58. package/lib/plugins/pinned-rows/index.js +63 -52
  59. package/lib/plugins/pinned-rows/index.js.map +1 -1
  60. package/lib/plugins/pivot/PivotPlugin.d.ts.map +1 -1
  61. package/lib/plugins/pivot/index.js +310 -299
  62. package/lib/plugins/pivot/index.js.map +1 -1
  63. package/lib/plugins/reorder/ReorderPlugin.d.ts.map +1 -1
  64. package/lib/plugins/reorder/index.d.ts +1 -1
  65. package/lib/plugins/reorder/index.d.ts.map +1 -1
  66. package/lib/plugins/reorder/index.js +79 -68
  67. package/lib/plugins/reorder/index.js.map +1 -1
  68. package/lib/plugins/selection/SelectionPlugin.d.ts.map +1 -1
  69. package/lib/plugins/selection/index.js +115 -105
  70. package/lib/plugins/selection/index.js.map +1 -1
  71. package/lib/plugins/server-side/index.js +15 -4
  72. package/lib/plugins/server-side/index.js.map +1 -1
  73. package/lib/plugins/tree/TreePlugin.d.ts.map +1 -1
  74. package/lib/plugins/tree/index.js +41 -30
  75. package/lib/plugins/tree/index.js.map +1 -1
  76. package/lib/plugins/undo-redo/index.js +29 -18
  77. package/lib/plugins/undo-redo/index.js.map +1 -1
  78. package/lib/plugins/visibility/VisibilityPlugin.d.ts.map +1 -1
  79. package/lib/plugins/visibility/index.js +59 -47
  80. package/lib/plugins/visibility/index.js.map +1 -1
  81. package/package.json +6 -6
  82. package/public.d.ts +42 -0
  83. package/public.d.ts.map +1 -1
  84. package/themes/dg-theme-bootstrap.css +55 -53
  85. package/themes/dg-theme-contrast.css +42 -40
  86. package/themes/dg-theme-large.css +38 -37
  87. package/themes/dg-theme-material.css +54 -52
  88. package/themes/dg-theme-standard.css +19 -17
  89. package/themes/dg-theme-vibrant.css +16 -14
  90. package/umd/grid.all.umd.js +23 -22
  91. package/umd/grid.all.umd.js.map +1 -1
  92. package/umd/grid.umd.js +15 -14
  93. package/umd/grid.umd.js.map +1 -1
  94. package/umd/plugins/column-virtualization.umd.js +1 -1
  95. package/umd/plugins/column-virtualization.umd.js.map +1 -1
  96. package/umd/plugins/context-menu.umd.js +1 -1
  97. package/umd/plugins/context-menu.umd.js.map +1 -1
  98. package/umd/plugins/editing.umd.js +1 -1
  99. package/umd/plugins/editing.umd.js.map +1 -1
  100. package/umd/plugins/filtering.umd.js +1 -1
  101. package/umd/plugins/filtering.umd.js.map +1 -1
  102. package/umd/plugins/grouping-columns.umd.js +1 -1
  103. package/umd/plugins/grouping-columns.umd.js.map +1 -1
  104. package/umd/plugins/grouping-rows.umd.js +1 -1
  105. package/umd/plugins/grouping-rows.umd.js.map +1 -1
  106. package/umd/plugins/master-detail.umd.js +1 -1
  107. package/umd/plugins/master-detail.umd.js.map +1 -1
  108. package/umd/plugins/multi-sort.umd.js +1 -1
  109. package/umd/plugins/multi-sort.umd.js.map +1 -1
  110. package/umd/plugins/pinned-columns.umd.js +1 -1
  111. package/umd/plugins/pinned-columns.umd.js.map +1 -1
  112. package/umd/plugins/pinned-rows.umd.js +1 -1
  113. package/umd/plugins/pinned-rows.umd.js.map +1 -1
  114. package/umd/plugins/pivot.umd.js +1 -1
  115. package/umd/plugins/pivot.umd.js.map +1 -1
  116. package/umd/plugins/reorder.umd.js +1 -1
  117. package/umd/plugins/reorder.umd.js.map +1 -1
  118. package/umd/plugins/selection.umd.js +1 -1
  119. package/umd/plugins/selection.umd.js.map +1 -1
  120. package/umd/plugins/tree.umd.js +1 -1
  121. package/umd/plugins/tree.umd.js.map +1 -1
  122. package/umd/plugins/visibility.umd.js +1 -1
  123. package/umd/plugins/visibility.umd.js.map +1 -1
@@ -3,69 +3,71 @@
3
3
  * Matches the look of Bootstrap's .table component
4
4
  * https://getbootstrap.com/docs/5.3/content/tables/
5
5
  */
6
- tbw-grid {
7
- /* Bootstrap surface colors */
8
- --tbw-color-bg: light-dark(#ffffff, #212529);
9
- --tbw-color-panel-bg: light-dark(#ffffff, #212529);
10
- --tbw-color-fg: light-dark(#212529, #dee2e6);
11
- --tbw-color-fg-muted: light-dark(#6c757d, #adb5bd);
6
+ @layer tbw-theme {
7
+ tbw-grid {
8
+ /* Bootstrap surface colors */
9
+ --tbw-color-bg: light-dark(#ffffff, #212529);
10
+ --tbw-color-panel-bg: light-dark(#ffffff, #212529);
11
+ --tbw-color-fg: light-dark(#212529, #dee2e6);
12
+ --tbw-color-fg-muted: light-dark(#6c757d, #adb5bd);
12
13
 
13
- /* Bootstrap border colors */
14
- --tbw-color-border: light-dark(#dee2e6, #495057);
15
- --tbw-color-border-strong: light-dark(#adb5bd, #6c757d);
16
- --tbw-color-border-cell: light-dark(#dee2e6, #495057);
17
- --tbw-color-border-header: light-dark(#dee2e6, #495057);
14
+ /* Bootstrap border colors */
15
+ --tbw-color-border: light-dark(#dee2e6, #495057);
16
+ --tbw-color-border-strong: light-dark(#adb5bd, #6c757d);
17
+ --tbw-color-border-cell: light-dark(#dee2e6, #495057);
18
+ --tbw-color-border-header: light-dark(#dee2e6, #495057);
18
19
 
19
- /* Row divider */
20
- --tbw-row-divider: 1px solid light-dark(#dee2e6, #495057);
20
+ /* Row divider */
21
+ --tbw-row-divider: 1px solid light-dark(#dee2e6, #495057);
21
22
 
22
- /* Bootstrap primary (blue) */
23
- --tbw-color-accent: light-dark(#0d6efd, #6ea8fe);
24
- --tbw-color-accent-fg: #ffffff;
23
+ /* Bootstrap primary (blue) */
24
+ --tbw-color-accent: light-dark(#0d6efd, #6ea8fe);
25
+ --tbw-color-accent-fg: #ffffff;
25
26
 
26
- /* Selection & interaction - Bootstrap's table-active */
27
- --tbw-color-selection: light-dark(rgba(0, 0, 0, 0.075), rgba(255, 255, 255, 0.075));
28
- --tbw-color-row-alt: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)); /* Striped rows */
29
- --tbw-color-row-hover: light-dark(rgba(0, 0, 0, 0.075), rgba(255, 255, 255, 0.075));
30
- --tbw-color-active-row-bg: light-dark(rgba(13, 110, 253, 0.1), rgba(110, 168, 254, 0.15));
27
+ /* Selection & interaction - Bootstrap's table-active */
28
+ --tbw-color-selection: light-dark(rgba(0, 0, 0, 0.075), rgba(255, 255, 255, 0.075));
29
+ --tbw-color-row-alt: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)); /* Striped rows */
30
+ --tbw-color-row-hover: light-dark(rgba(0, 0, 0, 0.075), rgba(255, 255, 255, 0.075));
31
+ --tbw-color-active-row-bg: light-dark(rgba(13, 110, 253, 0.1), rgba(110, 168, 254, 0.15));
31
32
 
32
- /* Header - slightly darker background */
33
- --tbw-color-header-bg: light-dark(#f8f9fa, #343a40);
34
- --tbw-color-header-fg: light-dark(#212529, #dee2e6);
33
+ /* Header - slightly darker background */
34
+ --tbw-color-header-bg: light-dark(#f8f9fa, #343a40);
35
+ --tbw-color-header-fg: light-dark(#212529, #dee2e6);
35
36
 
36
- /* No border radius - Bootstrap tables are rectangular */
37
- --tbw-border-radius: 0;
37
+ /* No border radius - Bootstrap tables are rectangular */
38
+ --tbw-border-radius: 0;
38
39
 
39
- /* Focus styling */
40
- --tbw-focus-outline: 3px solid light-dark(rgba(13, 110, 253, 0.25), rgba(110, 168, 254, 0.5));
41
- --tbw-focus-outline-offset: -3px;
42
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
40
+ /* Focus styling */
41
+ --tbw-focus-outline: 3px solid light-dark(rgba(13, 110, 253, 0.25), rgba(110, 168, 254, 0.5));
42
+ --tbw-focus-outline-offset: -3px;
43
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
43
44
 
44
- /* Bootstrap typography */
45
- --tbw-font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
46
- --tbw-font-size: 1rem;
47
- --tbw-font-size-header: 1rem;
48
- --tbw-font-weight-header: bold;
49
- --tbw-header-text-transform: none;
45
+ /* Bootstrap typography */
46
+ --tbw-font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
47
+ --tbw-font-size: 1rem;
48
+ --tbw-font-size-header: 1rem;
49
+ --tbw-font-weight-header: bold;
50
+ --tbw-header-text-transform: none;
50
51
 
51
- /* Bootstrap table padding */
52
- --tbw-cell-padding: 8px 8px;
53
- --tbw-cell-padding-header: 8px 8px;
54
- --tbw-row-height: 40px;
55
- --tbw-header-height: 44px;
52
+ /* Bootstrap table padding */
53
+ --tbw-cell-padding: 8px 8px;
54
+ --tbw-cell-padding-header: 8px 8px;
55
+ --tbw-row-height: 40px;
56
+ --tbw-header-height: 44px;
56
57
 
57
- /* Sort indicator */
58
- --tbw-sort-indicator-color: light-dark(#6c757d, #adb5bd);
59
- --tbw-sort-indicator-active-color: light-dark(#212529, #dee2e6);
58
+ /* Sort indicator */
59
+ --tbw-sort-indicator-color: light-dark(#6c757d, #adb5bd);
60
+ --tbw-sort-indicator-active-color: light-dark(#212529, #dee2e6);
60
61
 
61
- /* Header border - thicker bottom border like Bootstrap */
62
- --tbw-border-header: 2px solid light-dark(#212529, #dee2e6);
62
+ /* Header border - thicker bottom border like Bootstrap */
63
+ --tbw-border-header: 2px solid light-dark(#212529, #dee2e6);
63
64
 
64
- /* Input styling */
65
- --tbw-border-input: 1px solid light-dark(#ced4da, #495057);
66
- --tbw-editing-bg: light-dark(#ffffff, #212529);
67
- --tbw-editing-border: 1px solid var(--tbw-color-accent);
65
+ /* Input styling */
66
+ --tbw-border-input: 1px solid light-dark(#ced4da, #495057);
67
+ --tbw-editing-bg: light-dark(#ffffff, #212529);
68
+ --tbw-editing-border: 1px solid var(--tbw-color-accent);
68
69
 
69
- /* Success color for checkmarks etc */
70
- --tbw-color-success: light-dark(#198754, #75b798);
71
- }
70
+ /* Success color for checkmarks etc */
71
+ --tbw-color-success: light-dark(#198754, #75b798);
72
+ }
73
+ } /* End @layer tbw-theme */
@@ -1,42 +1,44 @@
1
1
  /* High contrast accessibility-focused theme */
2
- tbw-grid {
3
- --tbw-color-bg: light-dark(#ffffff, #000000);
4
- --tbw-color-fg: light-dark(#000000, #ffffff);
5
- --tbw-color-fg-muted: light-dark(#222222, #dddddd);
6
- --tbw-color-border: light-dark(#000000, #ffffff);
7
- --tbw-color-border-strong: light-dark(#000000, #ffffff);
8
- --tbw-color-accent: light-dark(#c00000, #ff4d4d);
9
- --tbw-color-accent-fg: #ffffff;
10
- --tbw-color-selection: light-dark(#ffe9a8, #333333);
11
- --tbw-color-row-alt: light-dark(#f2f2f2, #111111);
12
- --tbw-color-row-hover: light-dark(#e6f2ff, #1c1c1c);
13
- --tbw-color-header-bg: light-dark(#e8e8e8, #141414);
14
- --tbw-color-border-cell: light-dark(#333, #eee);
15
- --tbw-color-border-header: light-dark(#444, #ccc);
16
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
17
- --tbw-focus-outline: 2px solid var(--tbw-color-accent);
2
+ @layer tbw-theme {
3
+ tbw-grid {
4
+ --tbw-color-bg: light-dark(#ffffff, #000000);
5
+ --tbw-color-fg: light-dark(#000000, #ffffff);
6
+ --tbw-color-fg-muted: light-dark(#222222, #dddddd);
7
+ --tbw-color-border: light-dark(#000000, #ffffff);
8
+ --tbw-color-border-strong: light-dark(#000000, #ffffff);
9
+ --tbw-color-accent: light-dark(#c00000, #ff4d4d);
10
+ --tbw-color-accent-fg: #ffffff;
11
+ --tbw-color-selection: light-dark(#ffe9a8, #333333);
12
+ --tbw-color-row-alt: light-dark(#f2f2f2, #111111);
13
+ --tbw-color-row-hover: light-dark(#e6f2ff, #1c1c1c);
14
+ --tbw-color-header-bg: light-dark(#e8e8e8, #141414);
15
+ --tbw-color-border-cell: light-dark(#333, #eee);
16
+ --tbw-color-border-header: light-dark(#444, #ccc);
17
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
18
+ --tbw-focus-outline: 2px solid var(--tbw-color-accent);
18
19
 
19
- /* Typography & spacing */
20
- --tbw-font-size: 14px;
21
- --tbw-font-size-header: 17px;
22
- --tbw-font-weight-header: bold;
23
- --tbw-cell-padding-header: 15px 8px;
24
- --tbw-cell-padding: 2px 8px;
25
- --tbw-cell-padding-input: 2px 6px;
26
- --tbw-row-height: 40px; /* taller rows */
27
- --tbw-header-height: 44px;
28
- --tbw-border-radius: 0;
29
- --tbw-resize-handle-width: 6px;
30
- --tbw-resize-handle-border-radius: 2px;
31
- --tbw-checkbox-size: 20px;
32
- --tbw-focus-outline-offset: 0;
33
- --tbw-row-divider: 2px solid light-dark(#000000, #ffffff);
34
- --tbw-border-header: 2px solid light-dark(#000000, #ffffff);
35
- --tbw-editing-border: 2px solid var(--tbw-color-accent);
36
- --tbw-active-row-outline: 2px solid var(--tbw-color-accent);
37
- --tbw-row-hover-outline: 2px solid var(--tbw-color-accent);
38
- --tbw-sort-indicator-color: var(--tbw-color-fg-muted);
39
- --tbw-sort-indicator-active-color: var(--tbw-color-accent);
40
- --tbw-transition-duration: 0ms; /* reduce motion */
41
- --tbw-font-size-editor: 1rem;
42
- }
20
+ /* Typography & spacing */
21
+ --tbw-font-size: 14px;
22
+ --tbw-font-size-header: 17px;
23
+ --tbw-font-weight-header: bold;
24
+ --tbw-cell-padding-header: 15px 8px;
25
+ --tbw-cell-padding: 2px 8px;
26
+ --tbw-cell-padding-input: 2px 6px;
27
+ --tbw-row-height: 40px; /* taller rows */
28
+ --tbw-header-height: 44px;
29
+ --tbw-border-radius: 0;
30
+ --tbw-resize-handle-width: 6px;
31
+ --tbw-resize-handle-border-radius: 2px;
32
+ --tbw-checkbox-size: 20px;
33
+ --tbw-focus-outline-offset: 0;
34
+ --tbw-row-divider: 2px solid light-dark(#000000, #ffffff);
35
+ --tbw-border-header: 2px solid light-dark(#000000, #ffffff);
36
+ --tbw-editing-border: 2px solid var(--tbw-color-accent);
37
+ --tbw-active-row-outline: 2px solid var(--tbw-color-accent);
38
+ --tbw-row-hover-outline: 2px solid var(--tbw-color-accent);
39
+ --tbw-sort-indicator-color: var(--tbw-color-fg-muted);
40
+ --tbw-sort-indicator-active-color: var(--tbw-color-accent);
41
+ --tbw-transition-duration: 0ms; /* reduce motion */
42
+ --tbw-font-size-editor: 1rem;
43
+ }
44
+ } /* End @layer tbw-theme */
@@ -9,45 +9,46 @@
9
9
  - Stronger focus outline for visibility
10
10
  - Slightly higher contrast for muted fg & borders (within WCAG AA)
11
11
  */
12
+ @layer tbw-theme {
13
+ tbw-grid {
14
+ /* Reuse core color tokens from standard theme with a few tweaks */
15
+ --tbw-color-bg: light-dark(#ffffff, #1f2125);
16
+ --tbw-color-fg: light-dark(#1b1e23, #e7e9ed); /* a bit darker/lighter */
17
+ --tbw-color-fg-muted: light-dark(#4c5660, #a3adb7); /* slightly higher contrast */
18
+ --tbw-color-border: light-dark(#c4c9cf, #444950);
19
+ --tbw-color-border-strong: light-dark(#7c828a, #5f646c);
20
+ --tbw-color-accent: light-dark(#1d4ed8, #3b82f6); /* slightly deeper blue in light */
21
+ --tbw-color-accent-fg: #ffffff;
22
+ --tbw-color-selection: light-dark(#fff3c2, #303640);
23
+ --tbw-color-row-alt: light-dark(#f5f7f9, #272c34);
24
+ --tbw-color-row-hover: light-dark(#e6f2ff, #313741);
25
+ --tbw-color-header-bg: light-dark(#eef1f5, #262a30);
26
+ --tbw-color-border-cell: light-dark(#e4e7eb, #363a41);
27
+ --tbw-color-border-header: light-dark(#bbbbc2, #454a52);
12
28
 
13
- tbw-grid {
14
- /* Reuse core color tokens from standard theme with a few tweaks */
15
- --tbw-color-bg: light-dark(#ffffff, #1f2125);
16
- --tbw-color-fg: light-dark(#1b1e23, #e7e9ed); /* a bit darker/lighter */
17
- --tbw-color-fg-muted: light-dark(#4c5660, #a3adb7); /* slightly higher contrast */
18
- --tbw-color-border: light-dark(#c4c9cf, #444950);
19
- --tbw-color-border-strong: light-dark(#7c828a, #5f646c);
20
- --tbw-color-accent: light-dark(#1d4ed8, #3b82f6); /* slightly deeper blue in light */
21
- --tbw-color-accent-fg: #ffffff;
22
- --tbw-color-selection: light-dark(#fff3c2, #303640);
23
- --tbw-color-row-alt: light-dark(#f5f7f9, #272c34);
24
- --tbw-color-row-hover: light-dark(#e6f2ff, #313741);
25
- --tbw-color-header-bg: light-dark(#eef1f5, #262a30);
26
- --tbw-color-border-cell: light-dark(#e4e7eb, #363a41);
27
- --tbw-color-border-header: light-dark(#bbbbc2, #454a52);
29
+ /* Typography & spacing overrides */
30
+ --tbw-font-size: 18px; /* larger base */
31
+ --tbw-font-size-header: 19px;
32
+ --tbw-cell-padding: 6px 14px; /* vertical horiz */
33
+ --tbw-cell-padding-header: 6px 14px;
34
+ --tbw-cell-padding-input: 4px 10px;
35
+ --tbw-row-height: 38px;
36
+ --tbw-header-height: 42px;
37
+ --tbw-checkbox-size: 20px;
28
38
 
29
- /* Typography & spacing overrides */
30
- --tbw-font-size: 18px; /* larger base */
31
- --tbw-font-size-header: 19px;
32
- --tbw-cell-padding: 6px 14px; /* vertical horiz */
33
- --tbw-cell-padding-header: 6px 14px;
34
- --tbw-cell-padding-input: 4px 10px;
35
- --tbw-row-height: 38px;
36
- --tbw-header-height: 42px;
37
- --tbw-checkbox-size: 20px;
39
+ /* Focus enhancements */
40
+ --tbw-focus-outline: 3px solid var(--tbw-color-accent);
41
+ --tbw-focus-outline-offset: -3px;
38
42
 
39
- /* Focus enhancements */
40
- --tbw-focus-outline: 3px solid var(--tbw-color-accent);
41
- --tbw-focus-outline-offset: -3px;
43
+ /* Editing */
44
+ --tbw-font-size-editor: 18px;
45
+ --tbw-padding-editing-input: 4px 10px;
42
46
 
43
- /* Editing */
44
- --tbw-font-size-editor: 18px;
45
- --tbw-padding-editing-input: 4px 10px;
47
+ /* Resize handle larger */
48
+ --tbw-resize-handle-width: 6px;
49
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
46
50
 
47
- /* Resize handle larger */
48
- --tbw-resize-handle-width: 6px;
49
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
50
-
51
- /* Slightly longer transitions for comfort */
52
- --tbw-transition-duration: 140ms;
53
- }
51
+ /* Slightly longer transitions for comfort */
52
+ --tbw-transition-duration: 140ms;
53
+ }
54
+ } /* End @layer tbw-theme */
@@ -3,67 +3,69 @@
3
3
  * Matches the clean, minimal look of Angular Material's mat-table
4
4
  * https://material.angular.io/components/table/overview
5
5
  */
6
- tbw-grid {
7
- /* Clean white/dark surface - no tinting */
8
- --tbw-color-bg: light-dark(#ffffff, #272727);
9
- --tbw-color-panel-bg: light-dark(#ffffff, #272727);
10
- --tbw-color-fg: light-dark(rgba(0, 0, 0, 0.87), #ffffff);
11
- --tbw-color-fg-muted: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
6
+ @layer tbw-theme {
7
+ tbw-grid {
8
+ /* Clean white/dark surface - no tinting */
9
+ --tbw-color-bg: light-dark(#ffffff, #272727);
10
+ --tbw-color-panel-bg: light-dark(#ffffff, #272727);
11
+ --tbw-color-fg: light-dark(rgba(0, 0, 0, 0.87), #ffffff);
12
+ --tbw-color-fg-muted: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
12
13
 
13
- /* Minimal borders - only horizontal row dividers */
14
- --tbw-color-border: light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
15
- --tbw-color-border-strong: light-dark(rgba(0, 0, 0, 0.42), rgba(255, 255, 255, 0.5));
16
- --tbw-color-border-cell: transparent; /* No vertical cell borders */
17
- --tbw-color-border-header: light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
14
+ /* Minimal borders - only horizontal row dividers */
15
+ --tbw-color-border: light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
16
+ --tbw-color-border-strong: light-dark(rgba(0, 0, 0, 0.42), rgba(255, 255, 255, 0.5));
17
+ --tbw-color-border-cell: transparent; /* No vertical cell borders */
18
+ --tbw-color-border-header: light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
18
19
 
19
- /* Row divider - thin horizontal line only */
20
- --tbw-row-divider: 1px solid light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
20
+ /* Row divider - thin horizontal line only */
21
+ --tbw-row-divider: 1px solid light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
21
22
 
22
- /* Angular Material accent colors */
23
- --tbw-color-accent: light-dark(#3f51b5, #7986cb); /* Indigo primary */
24
- --tbw-color-accent-fg: #ffffff;
23
+ /* Angular Material accent colors */
24
+ --tbw-color-accent: light-dark(#3f51b5, #7986cb); /* Indigo primary */
25
+ --tbw-color-accent-fg: #ffffff;
25
26
 
26
- /* Selection & interaction */
27
- --tbw-color-selection: light-dark(rgba(63, 81, 181, 0.08), rgba(121, 134, 203, 0.16));
28
- --tbw-color-row-alt: transparent; /* No zebra striping in Material */
29
- --tbw-color-row-hover: light-dark(rgba(0, 0, 0, 0.04), rgba(255, 255, 255, 0.04));
30
- --tbw-color-active-row-bg: light-dark(rgba(63, 81, 181, 0.08), rgba(121, 134, 203, 0.16));
27
+ /* Selection & interaction */
28
+ --tbw-color-selection: light-dark(rgba(63, 81, 181, 0.08), rgba(121, 134, 203, 0.16));
29
+ --tbw-color-row-alt: transparent; /* No zebra striping in Material */
30
+ --tbw-color-row-hover: light-dark(rgba(0, 0, 0, 0.04), rgba(255, 255, 255, 0.04));
31
+ --tbw-color-active-row-bg: light-dark(rgba(63, 81, 181, 0.08), rgba(121, 134, 203, 0.16));
31
32
 
32
- /* Header - same as body, no distinct background */
33
- --tbw-color-header-bg: light-dark(#ffffff, #272727);
34
- --tbw-color-header-fg: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
33
+ /* Header - same as body, no distinct background */
34
+ --tbw-color-header-bg: light-dark(#ffffff, #272727);
35
+ --tbw-color-header-fg: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
35
36
 
36
- /* No outer border or radius - clean rectangular look */
37
- --tbw-border-radius: 0;
37
+ /* No outer border or radius - clean rectangular look */
38
+ --tbw-border-radius: 0;
38
39
 
39
- /* Focus styling */
40
- --tbw-focus-outline: 2px solid var(--tbw-color-accent);
41
- --tbw-focus-outline-offset: -2px;
42
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
40
+ /* Focus styling */
41
+ --tbw-focus-outline: 2px solid var(--tbw-color-accent);
42
+ --tbw-focus-outline-offset: -2px;
43
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
43
44
 
44
- /* Roboto typography - Material standard */
45
- --tbw-font-family: 'Roboto', 'Helvetica Neue', sans-serif;
46
- --tbw-font-size: 14px;
47
- --tbw-font-size-header: 12px;
48
- --tbw-font-weight-header: 500;
49
- --tbw-header-text-transform: none;
50
- --tbw-header-letter-spacing: normal;
45
+ /* Roboto typography - Material standard */
46
+ --tbw-font-family: 'Roboto', 'Helvetica Neue', sans-serif;
47
+ --tbw-font-size: 14px;
48
+ --tbw-font-size-header: 12px;
49
+ --tbw-font-weight-header: 500;
50
+ --tbw-header-text-transform: none;
51
+ --tbw-header-letter-spacing: normal;
51
52
 
52
- /* Generous padding like Material tables */
53
- --tbw-cell-padding: 4px 16px;
54
- --tbw-cell-padding-header: 4px 16px;
55
- --tbw-row-height: 48px;
56
- --tbw-header-height: 56px;
53
+ /* Generous padding like Material tables */
54
+ --tbw-cell-padding: 4px 16px;
55
+ --tbw-cell-padding-header: 4px 16px;
56
+ --tbw-row-height: 48px;
57
+ --tbw-header-height: 56px;
57
58
 
58
- /* Sort indicator styling */
59
- --tbw-sort-indicator-color: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
60
- --tbw-sort-indicator-active-color: light-dark(rgba(0, 0, 0, 0.87), #ffffff);
59
+ /* Sort indicator styling */
60
+ --tbw-sort-indicator-color: light-dark(rgba(0, 0, 0, 0.54), rgba(255, 255, 255, 0.7));
61
+ --tbw-sort-indicator-active-color: light-dark(rgba(0, 0, 0, 0.87), #ffffff);
61
62
 
62
- /* Header border - only bottom */
63
- --tbw-border-header: 1px solid light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
63
+ /* Header border - only bottom */
64
+ --tbw-border-header: 1px solid light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.12));
64
65
 
65
- /* Input styling for editing */
66
- --tbw-border-input: 1px solid light-dark(rgba(0, 0, 0, 0.42), rgba(255, 255, 255, 0.5));
67
- --tbw-editing-bg: transparent;
68
- --tbw-editing-border: 2px solid var(--tbw-color-accent);
69
- }
66
+ /* Input styling for editing */
67
+ --tbw-border-input: 1px solid light-dark(rgba(0, 0, 0, 0.42), rgba(255, 255, 255, 0.5));
68
+ --tbw-editing-bg: transparent;
69
+ --tbw-editing-border: 2px solid var(--tbw-color-accent);
70
+ }
71
+ } /* End @layer tbw-theme */
@@ -1,18 +1,20 @@
1
1
  /* Standard balanced theme with light-dark() adaptive palette */
2
- tbw-grid {
3
- --tbw-color-bg: light-dark(#ffffff, #1f2125);
4
- --tbw-color-fg: light-dark(#1f2329, #e5e7eb);
5
- --tbw-color-fg-muted: light-dark(#586069, #9ca3af);
6
- --tbw-color-border: light-dark(#d0d4d9, #3a3d44);
7
- --tbw-color-border-strong: light-dark(#888d94, #5a5f66);
8
- --tbw-color-accent: light-dark(#2563eb, #3b82f6);
9
- --tbw-color-accent-fg: #ffffff;
10
- --tbw-color-selection: light-dark(#fff7d6, #374151);
11
- --tbw-color-row-alt: light-dark(#f8f9fa, #252830);
12
- --tbw-color-row-hover: light-dark(#eef6ff, #2d313b);
13
- --tbw-color-header-bg: light-dark(#f5f6f8, #262a30);
14
- --tbw-color-border-cell: light-dark(#eee, #333);
15
- --tbw-color-border-header: light-dark(#ccc, #444);
16
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
17
- --tbw-align-header-group: center;
18
- }
2
+ @layer tbw-theme {
3
+ tbw-grid {
4
+ --tbw-color-bg: light-dark(#ffffff, #1f2125);
5
+ --tbw-color-fg: light-dark(#1f2329, #e5e7eb);
6
+ --tbw-color-fg-muted: light-dark(#586069, #9ca3af);
7
+ --tbw-color-border: light-dark(#d0d4d9, #3a3d44);
8
+ --tbw-color-border-strong: light-dark(#888d94, #5a5f66);
9
+ --tbw-color-accent: light-dark(#2563eb, #3b82f6);
10
+ --tbw-color-accent-fg: #ffffff;
11
+ --tbw-color-selection: light-dark(#fff7d6, #374151);
12
+ --tbw-color-row-alt: light-dark(#f8f9fa, #252830);
13
+ --tbw-color-row-hover: light-dark(#eef6ff, #2d313b);
14
+ --tbw-color-header-bg: light-dark(#f5f6f8, #262a30);
15
+ --tbw-color-border-cell: light-dark(#eee, #333);
16
+ --tbw-color-border-header: light-dark(#ccc, #444);
17
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
18
+ --tbw-align-header-group: center;
19
+ }
20
+ } /* End @layer tbw-theme */
@@ -1,15 +1,17 @@
1
1
  /* Vibrant colorful theme (keeps good contrast) */
2
- tbw-grid {
3
- --tbw-color-bg: light-dark(#fcfcff, #1a1c24);
4
- --tbw-color-fg: light-dark(#1e2430, #f1f5f9);
5
- --tbw-color-fg-muted: light-dark(#5d6473, #9ba4b4);
6
- --tbw-color-border: light-dark(#d6daf2, #3a4153);
7
- --tbw-color-border-strong: light-dark(#8a93b5, #596380);
8
- --tbw-color-accent: light-dark(#6366f1, #818cf8);
9
- --tbw-color-accent-fg: #ffffff;
10
- --tbw-color-selection: light-dark(#edeaff, #374062);
11
- --tbw-color-row-alt: light-dark(#f4f3ff, #232a3a);
12
- --tbw-color-row-hover: light-dark(#eef2ff, #2b3447);
13
- --tbw-color-header-bg: light-dark(#eff1ff, #242b3b);
14
- --tbw-resize-handle-color-hover: var(--tbw-color-accent);
15
- }
2
+ @layer tbw-theme {
3
+ tbw-grid {
4
+ --tbw-color-bg: light-dark(#fcfcff, #1a1c24);
5
+ --tbw-color-fg: light-dark(#1e2430, #f1f5f9);
6
+ --tbw-color-fg-muted: light-dark(#5d6473, #9ba4b4);
7
+ --tbw-color-border: light-dark(#d6daf2, #3a4153);
8
+ --tbw-color-border-strong: light-dark(#8a93b5, #596380);
9
+ --tbw-color-accent: light-dark(#6366f1, #818cf8);
10
+ --tbw-color-accent-fg: #ffffff;
11
+ --tbw-color-selection: light-dark(#edeaff, #374062);
12
+ --tbw-color-row-alt: light-dark(#f4f3ff, #232a3a);
13
+ --tbw-color-row-hover: light-dark(#eef2ff, #2b3447);
14
+ --tbw-color-header-bg: light-dark(#eff1ff, #242b3b);
15
+ --tbw-resize-handle-color-hover: var(--tbw-color-accent);
16
+ }
17
+ } /* End @layer tbw-theme */