@dxos/lit-grid 0.8.3 → 0.8.4-main.16b68245aa

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 (107) hide show
  1. package/dist/src/defs.d.ts +1 -0
  2. package/dist/src/defs.d.ts.map +1 -1
  3. package/dist/src/defs.js +1 -0
  4. package/dist/src/defs.js.map +1 -1
  5. package/dist/src/dx-grid-axis-resize-handle.d.ts.map +1 -1
  6. package/dist/src/dx-grid-axis-resize-handle.js +3 -5
  7. package/dist/src/dx-grid-axis-resize-handle.js.map +1 -1
  8. package/dist/src/dx-grid-multiselect-cell.d.ts.map +1 -1
  9. package/dist/src/dx-grid-multiselect-cell.js +2 -1
  10. package/dist/src/dx-grid-multiselect-cell.js.map +1 -1
  11. package/dist/src/dx-grid.d.ts +15 -9
  12. package/dist/src/dx-grid.d.ts.map +1 -1
  13. package/dist/src/dx-grid.js +253 -172
  14. package/dist/src/dx-grid.js.map +1 -1
  15. package/dist/src/dx-grid.lit-stories.d.ts +13 -15
  16. package/dist/src/dx-grid.lit-stories.d.ts.map +1 -1
  17. package/dist/src/dx-grid.lit-stories.js +22 -23
  18. package/dist/src/dx-grid.lit-stories.js.map +1 -1
  19. package/dist/src/playwright/dx-grid.spec.d.ts.map +1 -0
  20. package/dist/src/{testing/playwright → playwright}/dx-grid.spec.js +3 -3
  21. package/dist/src/playwright/dx-grid.spec.js.map +1 -0
  22. package/dist/src/playwright/playwright.config.d.ts +3 -0
  23. package/dist/src/playwright/playwright.config.d.ts.map +1 -0
  24. package/dist/src/playwright/playwright.config.js +15 -0
  25. package/dist/src/playwright/playwright.config.js.map +1 -0
  26. package/dist/src/testing/{playwright/dx-grid-manager.d.ts → dx-grid-manager.d.ts} +1 -1
  27. package/dist/src/testing/dx-grid-manager.d.ts.map +1 -0
  28. package/dist/src/testing/dx-grid-manager.js.map +1 -0
  29. package/dist/src/testing/index.d.ts +1 -1
  30. package/dist/src/testing/index.d.ts.map +1 -1
  31. package/dist/src/testing/index.js +1 -1
  32. package/dist/src/testing/index.js.map +1 -1
  33. package/dist/src/types.d.ts +10 -1
  34. package/dist/src/types.d.ts.map +1 -1
  35. package/dist/src/types.js.map +1 -1
  36. package/dist/src/util.d.ts +8 -5
  37. package/dist/src/util.d.ts.map +1 -1
  38. package/dist/src/util.js +11 -11
  39. package/dist/src/util.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +15 -14
  42. package/src/defs.ts +1 -0
  43. package/src/dx-grid-axis-resize-handle.pcss +10 -3
  44. package/src/dx-grid-axis-resize-handle.ts +1 -1
  45. package/src/dx-grid-multiselect-cell.pcss +8 -6
  46. package/src/dx-grid-multiselect-cell.ts +2 -1
  47. package/src/dx-grid.lit-stories.ts +6 -4
  48. package/src/dx-grid.pcss +146 -20
  49. package/src/dx-grid.ts +268 -123
  50. package/src/{testing/playwright → playwright}/dx-grid.spec.ts +5 -5
  51. package/src/playwright/playwright.config.ts +17 -0
  52. package/src/testing/{playwright/dx-grid-manager.ts → dx-grid-manager.ts} +2 -2
  53. package/src/testing/index.ts +1 -1
  54. package/src/types.ts +11 -0
  55. package/src/util.ts +13 -9
  56. package/dist/src/testing/playwright/dx-grid-manager.d.ts.map +0 -1
  57. package/dist/src/testing/playwright/dx-grid-manager.js.map +0 -1
  58. package/dist/src/testing/playwright/dx-grid.spec.d.ts.map +0 -1
  59. package/dist/src/testing/playwright/dx-grid.spec.js.map +0 -1
  60. package/dist/types/src/defs.d.ts +0 -3
  61. package/dist/types/src/defs.d.ts.map +0 -1
  62. package/dist/types/src/defs.js +0 -6
  63. package/dist/types/src/defs.js.map +0 -1
  64. package/dist/types/src/dx-grid-axis-resize-handle.d.ts +0 -16
  65. package/dist/types/src/dx-grid-axis-resize-handle.d.ts.map +0 -1
  66. package/dist/types/src/dx-grid-axis-resize-handle.js +0 -100
  67. package/dist/types/src/dx-grid-axis-resize-handle.js.map +0 -1
  68. package/dist/types/src/dx-grid-multiselect-cell.d.ts +0 -13
  69. package/dist/types/src/dx-grid-multiselect-cell.d.ts.map +0 -1
  70. package/dist/types/src/dx-grid-multiselect-cell.js +0 -56
  71. package/dist/types/src/dx-grid-multiselect-cell.js.map +0 -1
  72. package/dist/types/src/dx-grid.d.ts +0 -170
  73. package/dist/types/src/dx-grid.d.ts.map +0 -1
  74. package/dist/types/src/dx-grid.js +0 -1347
  75. package/dist/types/src/dx-grid.js.map +0 -1
  76. package/dist/types/src/dx-grid.lit-stories.d.ts +0 -46
  77. package/dist/types/src/dx-grid.lit-stories.d.ts.map +0 -1
  78. package/dist/types/src/dx-grid.lit-stories.js +0 -179
  79. package/dist/types/src/dx-grid.lit-stories.js.map +0 -1
  80. package/dist/types/src/index.d.ts +0 -5
  81. package/dist/types/src/index.d.ts.map +0 -1
  82. package/dist/types/src/index.js +0 -8
  83. package/dist/types/src/index.js.map +0 -1
  84. package/dist/types/src/testing/index.d.ts +0 -2
  85. package/dist/types/src/testing/index.d.ts.map +0 -1
  86. package/dist/types/src/testing/index.js +0 -5
  87. package/dist/types/src/testing/index.js.map +0 -1
  88. package/dist/types/src/testing/playwright/dx-grid-manager.d.ts +0 -24
  89. package/dist/types/src/testing/playwright/dx-grid-manager.d.ts.map +0 -1
  90. package/dist/types/src/testing/playwright/dx-grid-manager.js +0 -79
  91. package/dist/types/src/testing/playwright/dx-grid-manager.js.map +0 -1
  92. package/dist/types/src/testing/playwright/dx-grid.spec.d.ts +0 -2
  93. package/dist/types/src/testing/playwright/dx-grid.spec.d.ts.map +0 -1
  94. package/dist/types/src/testing/playwright/dx-grid.spec.js +0 -92
  95. package/dist/types/src/testing/playwright/dx-grid.spec.js.map +0 -1
  96. package/dist/types/src/types.d.ts +0 -137
  97. package/dist/types/src/types.d.ts.map +0 -1
  98. package/dist/types/src/types.js +0 -46
  99. package/dist/types/src/types.js.map +0 -1
  100. package/dist/types/src/util.d.ts +0 -39
  101. package/dist/types/src/util.d.ts.map +0 -1
  102. package/dist/types/src/util.js +0 -165
  103. package/dist/types/src/util.js.map +0 -1
  104. package/dist/types/tsconfig.tsbuildinfo +0 -1
  105. package/src/testing/playwright/playwright.config.cts +0 -18
  106. /package/dist/src/{testing/playwright → playwright}/dx-grid.spec.d.ts +0 -0
  107. /package/dist/src/testing/{playwright/dx-grid-manager.js → dx-grid-manager.js} +0 -0
@@ -1,32 +1,34 @@
1
+ @reference "../../ui-theme/src/main.css";
2
+
1
3
  dx-grid-multiselect-cell {
2
4
  display: contents;
3
5
  }
4
6
 
5
- .dx-grid__cell__multiselect{
7
+ .dx-grid__cell__multiselect {
6
8
  display: flex;
7
9
  flex-flow: row nowrap;
8
10
  gap: 2px;
9
11
  inline-size: 100%;
10
- block-size: 100%;
12
+ block-size: 24px;
11
13
  & > span {
12
14
  flex: 0 1 auto;
13
15
  overflow: hidden;
14
16
  white-space: nowrap;
15
17
  text-overflow: ellipsis;
16
18
  &.dx-grid__cell__multiselect__value {
17
- @apply border border-separator text-xs font-semibold pli-2 plb-1 rounded cursor-default text-neutral-800 dark:text-neutral-150
19
+ @apply h-full border border-separator text-xs font-semibold px-2 py-0.5 rounded cursor-default text-neutral-800 dark:text-neutral-200;
18
20
  }
19
21
  &.dx-grid__cell__multiselect__placeholder {
20
22
  @apply text-description;
21
23
  }
22
24
  }
23
- & > .dx-grid__cell__multiselect__separator{
25
+ & > .dx-grid__cell__multiselect__separator {
24
26
  flex: 1 0 0;
25
27
  }
26
28
  & > svg {
27
29
  flex: 0 0 auto;
28
- margin-block: .25em;
30
+ margin-block: 0.25em;
29
31
  inline-size: 1em;
30
32
  block-size: 1em;
31
33
  }
32
- }
34
+ }
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { html, LitElement } from 'lit';
5
+ import { LitElement, html } from 'lit';
6
6
  import { customElement, property } from 'lit/decorators.js';
7
7
 
8
8
  export type DxGridSelectValue = {
@@ -31,6 +31,7 @@ export class DxGridMultiselectCell extends LitElement {
31
31
  aria-haspopup="dialog"
32
32
  class="dx-grid__cell__multiselect"
33
33
  data-dx-grid-accessory="invoke-multiselect"
34
+ data-dx-grid-action="accessory"
34
35
  >
35
36
  ${this.values.length > 0
36
37
  ? this.values.map(({ label }) => html`<span class="dx-grid__cell__multiselect__value">${label}</span>`)
@@ -2,13 +2,15 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import '@dxos-theme';
5
6
  import './dx-grid.ts';
6
7
  import './dx-grid.pcss';
7
-
8
8
  import './dx-grid-multiselect-cell.ts';
9
9
 
10
10
  import { html, nothing } from 'lit';
11
11
 
12
+ import { random } from '@dxos/random';
13
+
12
14
  import { defaultRowSize } from './defs.js';
13
15
  import { type DxGridFrozenPlane, type DxGridPlaneCells, type DxGridProps } from './types';
14
16
  import { colToA1Notation, rowToA1Notation } from './util';
@@ -35,7 +37,7 @@ const initialLabels = {
35
37
  '0,0': { value: '', resizeHandle: 'col' },
36
38
  },
37
39
  frozenColsStart: [...Array(64)].reduce((acc, _, i) => {
38
- acc[`0,${i}`] = { value: rowToA1Notation(i), className: 'text-end pie-1', resizeHandle: 'row' };
40
+ acc[`0,${i}`] = { value: rowToA1Notation(i), className: 'text-end pe-1', resizeHandle: 'row' };
39
41
  return acc;
40
42
  }, {}),
41
43
  frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {
@@ -49,7 +51,7 @@ Basic.args = {
49
51
  grid: {
50
52
  '1,1': {
51
53
  // end: '8,1',
52
- value: 'Waffle production',
54
+ value: random.lorem.paragraphs(5),
53
55
  },
54
56
  '2,2': {
55
57
  value: '',
@@ -81,7 +83,7 @@ Basic.args = {
81
83
  columns: JSON.stringify({
82
84
  grid: {
83
85
  0: { size: 64 },
84
- 1: { size: 512 },
86
+ 1: { size: 128 },
85
87
  2: { size: 64 },
86
88
  3: { size: 512 },
87
89
  4: { size: 64 },
package/src/dx-grid.pcss CHANGED
@@ -4,7 +4,15 @@
4
4
  @layer dx-tokens {
5
5
  :root {
6
6
  --dx-grid-cell-padding-block: 0.2rem;
7
+ --dx-grid-cell-content-padding-block: calc(
8
+ var(--dx-grid-cell-padding-block) - var(--dx-grid-focus-indicator-width)
9
+ );
10
+ --dx-grid-cell-editor-padding-block: var(--dx-grid-cell-content-padding-block);
7
11
  --dx-grid-cell-padding-inline: 0.25rem;
12
+ --dx-grid-cell-content-padding-inline: calc(
13
+ var(--dx-grid-cell-padding-inline) - var(--dx-grid-focus-indicator-width)
14
+ );
15
+ --dx-grid-cell-editor-padding-inline: var(--dx-grid-cell-content-padding-inline);
8
16
  }
9
17
  }
10
18
 
@@ -29,8 +37,6 @@
29
37
 
30
38
  touch-action: none;
31
39
  user-select: none;
32
-
33
- background: var(--dx-grid-lines, var(--dx-gridLine));
34
40
  }
35
41
 
36
42
  .dx-grid__plane--frozen-row,
@@ -50,7 +56,7 @@
50
56
  position: absolute;
51
57
  inset: 0;
52
58
  pointer-events: none;
53
- border: 1px solid var(--dx-accentSurface);
59
+ border: var(--dx-grid-focus-indicator-width) solid var(--color-grid-focus-indicator);
54
60
  }
55
61
  }
56
62
 
@@ -63,19 +69,17 @@
63
69
  }
64
70
 
65
71
  .dx-grid {
72
+ --grid-cell-surface: var(--color-grid-surface);
73
+
66
74
  [role='gridcell'],
67
75
  [role='columnheader'],
68
76
  [role='rowheader'] {
69
- position: relative;
70
- background: var(--dx-grid-base, var(--dx-baseSurface));
71
- /** This must match CellEditor styling in `CellEditor.tsx`. */
72
- padding: var(--dx-grid-cell-padding-block) var(--dx-grid-cell-padding-inline);
73
- box-sizing: border-box;
74
- border: 1px solid transparent;
75
- overflow: hidden;
76
- text-overflow: ellipsis;
77
- white-space: nowrap;
77
+ background: var(--grid-cell-surface);
78
78
  cursor: pointer;
79
+ position: relative;
80
+
81
+ border-right: 1px solid var(--color-grid-line);
82
+ border-bottom: 1px solid var(--color-grid-line);
79
83
 
80
84
  &[aria-readonly='true'] {
81
85
  cursor: default;
@@ -86,15 +90,33 @@
86
90
  user-select: text;
87
91
  }
88
92
 
89
- &:focus:not([aria-readonly='true']),
90
- &:focus-visible {
91
- z-index: 2;
92
- border-color: var(--dx-accentSurface);
93
+ &:focus {
93
94
  outline: none;
94
95
  }
95
96
 
97
+ & > .dx-grid__cell__content {
98
+ padding-inline: var(--dx-grid-cell-content-padding-inline);
99
+ padding-block: var(--dx-grid-cell-content-padding-block);
100
+ box-sizing: border-box;
101
+ overflow: hidden;
102
+ text-overflow: ellipsis;
103
+ white-space: nowrap;
104
+ block-size: 100%;
105
+ position: relative;
106
+ border: var(--dx-grid-focus-indicator-width) solid transparent;
107
+ border-radius: 2px;
108
+
109
+ &:has(.dx-tag),
110
+ &:has(dx-tag-picker-item) {
111
+ text-overflow: clip;
112
+ line-height: 0;
113
+ --dx-grid-cell-content-padding-inline: 1px;
114
+ --dx-grid-cell-content-padding-block: 1px;
115
+ }
116
+ }
117
+
96
118
  &.dx-grid__cell--commented {
97
- background: var(--dx-grid-commented, var(--dx-gridCommented));
119
+ background: var(--color-grid-comment);
98
120
  }
99
121
  }
100
122
 
@@ -103,18 +125,108 @@
103
125
  [role='columnheader'],
104
126
  [role='rowheader'] {
105
127
  &[aria-selected] {
106
- background: var(--dx-gridSelectionOverlay);
128
+ --grid-cell-surface: var(--color-grid-selection-overlay);
129
+
130
+ &:focus:not([aria-readonly='true']),
131
+ &:focus-visible,
132
+ &:focus-within {
133
+ & > .dx-grid__cell__content {
134
+ background: transparent;
135
+ }
136
+ }
107
137
  }
108
138
  }
109
139
  }
140
+
141
+ .dx-grid__row--cta__cell {
142
+ transition: background-color 100ms linear;
143
+ & > .dx-grid__cell__content {
144
+ cursor: pointer;
145
+ background: transparent !important;
146
+ }
147
+ }
148
+
149
+ &:has(.dx-grid__row--cta__cell:hover) .dx-grid__row--cta__cell {
150
+ background: var(--color-grid-hover-overlay);
151
+ }
110
152
  }
111
153
 
154
+ /* Editor and focused cell styles; be sure to keep these two blocks in-sync. */
155
+ .dx-grid {
156
+ [role='gridcell'],
157
+ [role='columnheader'],
158
+ [role='rowheader'] {
159
+ &:not([data-focus-unfurl='false']):not(.dx-grid__cell--no-focus-unfurl) {
160
+ &:focus,
161
+ &:focus-within {
162
+ & > .dx-grid__cell__content {
163
+ min-block-size: 100%;
164
+ block-size: min-content;
165
+ max-block-size: min(12em, 50vh);
166
+
167
+ min-inline-size: 100%;
168
+ inline-size: min-content;
169
+ max-inline-size: min(60ch, 90vw);
170
+
171
+ overflow: auto;
172
+ scrollbar-width: thin;
173
+ overscroll-behavior: contain;
174
+
175
+ white-space: normal;
176
+ hyphens: auto;
177
+ overflow-wrap: break-word;
178
+
179
+ z-index: 1;
180
+
181
+ background: var(--grid-cell-surface);
182
+ }
183
+
184
+ &:not([aria-readonly='true']) > .dx-grid__cell__content {
185
+ border-color: var(--color-grid-focus-indicator);
186
+ }
187
+ }
188
+ }
189
+
190
+ &:focus-visible > .dx-grid__cell__content {
191
+ border-color: var(--color-grid-focus-indicator);
192
+ }
193
+ }
194
+ }
195
+
196
+ .dx-grid__cell-editor {
197
+ font-variant-numeric: tabular-nums;
198
+ white-space: normal;
199
+ hyphens: auto;
200
+ overflow-wrap: break-word;
201
+
202
+ background: var(--dx-grid-base, var(--color-base-surface));
203
+ border: var(--dx-grid-focus-indicator-width) solid var(--color-grid-focus-indicator);
204
+ border-radius: 2px;
205
+
206
+ --dx-grid-cell-editor-max-block-size: min(12em, 50vh);
207
+ --dx-grid-cell-editor-max-inline-size: min(60ch, 90vw);
208
+
209
+ block-size: min-content;
210
+ max-block-size: var(--dx-grid-cell-editor-max-block-size);
211
+ inline-size: min-content;
212
+ max-inline-size: var(--dx-grid-cell-editor-max-inline-size);
213
+
214
+ &:has(.dx-tag),
215
+ &:has(dx-tag-picker-item) {
216
+ text-overflow: clip;
217
+ line-height: 0;
218
+ --dx-grid-cell-editor-padding-inline: 1px;
219
+ --dx-grid-cell-editor-padding-block: 1px;
220
+ }
221
+ }
222
+
223
+ /* /// */
112
224
  .dx-grid-host:focus-within .dx-grid:not(:focus-within) {
113
225
  [role='gridcell'],
114
226
  [role='columnheader'],
115
227
  [role='rowheader'] {
116
- &[data-dx-active]:not([aria-readonly='true']) {
117
- border-color: var(--dx-accentSurface);
228
+ &[data-dx-active]:not([aria-readonly='true']) > .dx-grid__cell__content {
229
+ border-color: var(--color-grid-focus-indicator);
118
230
  }
119
231
  }
120
232
  }
@@ -132,6 +244,20 @@
132
244
  background: rgba(0, 255, 0, 0.1);
133
245
  }
134
246
  }
247
+
248
+ .dx-grid__cell--flagged {
249
+ &::after {
250
+ content: '';
251
+ position: absolute;
252
+ inset-block-start: 0;
253
+ inset-inline-end: 0;
254
+ inline-size: 0;
255
+ block-size: 0;
256
+ border-inline-start: 0.5em solid transparent;
257
+ border-block-start: 0.5em solid var(--color-warning-text);
258
+ z-index: 1;
259
+ }
260
+ }
135
261
  }
136
262
 
137
263
  /* TODO(thure): Move this somewhere better. */