foldkit-mixins-data-grid 0.2.15 → 0.3.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 (51) hide show
  1. package/dist/fillDrag.d.ts +30 -0
  2. package/dist/fillDrag.d.ts.map +1 -0
  3. package/dist/fillDrag.js +178 -0
  4. package/dist/fillDrag.js.map +1 -0
  5. package/dist/headerDrag.d.ts +34 -0
  6. package/dist/headerDrag.d.ts.map +1 -0
  7. package/dist/headerDrag.js +112 -0
  8. package/dist/headerDrag.js.map +1 -0
  9. package/dist/holdFocus.d.ts +11 -0
  10. package/dist/holdFocus.d.ts.map +1 -0
  11. package/dist/holdFocus.js +31 -0
  12. package/dist/holdFocus.js.map +1 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.js +6 -0
  15. package/dist/keepFocus.d.ts +9 -0
  16. package/dist/keepFocus.d.ts.map +1 -0
  17. package/dist/keepFocus.js +20 -0
  18. package/dist/keepFocus.js.map +1 -0
  19. package/dist/marks.d.ts +69 -0
  20. package/dist/marks.d.ts.map +1 -0
  21. package/dist/marks.js +90 -0
  22. package/dist/marks.js.map +1 -0
  23. package/dist/moreOnScroll.d.ts +12 -0
  24. package/dist/moreOnScroll.d.ts.map +1 -0
  25. package/dist/moreOnScroll.js +17 -0
  26. package/dist/moreOnScroll.js.map +1 -0
  27. package/dist/nearEnd.d.ts +15 -0
  28. package/dist/nearEnd.d.ts.map +1 -0
  29. package/dist/nearEnd.js +33 -0
  30. package/dist/nearEnd.js.map +1 -0
  31. package/dist/press.d.ts +31 -0
  32. package/dist/press.d.ts.map +1 -0
  33. package/dist/press.js +53 -0
  34. package/dist/press.js.map +1 -0
  35. package/dist/slots.d.ts +85 -0
  36. package/dist/slots.d.ts.map +1 -0
  37. package/dist/slots.js +289 -0
  38. package/dist/slots.js.map +1 -0
  39. package/dist/style.d.ts +555 -0
  40. package/dist/style.d.ts.map +1 -0
  41. package/dist/style.js +224 -0
  42. package/dist/style.js.map +1 -0
  43. package/dist/view.d.ts +140 -0
  44. package/dist/view.d.ts.map +1 -0
  45. package/dist/view.js +861 -0
  46. package/dist/view.js.map +1 -0
  47. package/package.json +12 -12
  48. package/dist/index.d.mts +0 -321
  49. package/dist/index.d.mts.map +0 -1
  50. package/dist/index.mjs +0 -1849
  51. package/dist/index.mjs.map +0 -1
package/dist/slots.js ADDED
@@ -0,0 +1,289 @@
1
+ import { Attr, Capability, Event, Slot, Slots } from "foldkit-mixins";
2
+ // src/slots.ts
3
+ const AriaRowCount = Attr.make("aria-rowcount");
4
+ const AriaColCount = Attr.make("aria-colcount");
5
+ const AriaRowIndex = Attr.make("aria-rowindex");
6
+ const AriaColIndex = Attr.make("aria-colindex");
7
+ const AriaActiveDescendant = Attr.make("aria-activedescendant");
8
+ const Tabindex = Attr.make("tabindex");
9
+ const AriaValueNow = Attr.make("aria-valuenow");
10
+ const AriaValueMin = Attr.make("aria-valuemin");
11
+ const AriaValueMax = Attr.make("aria-valuemax");
12
+ const Id = Attr.make("id");
13
+ const MouseDown = Event.make("mousedown");
14
+ const AriaHasPopup = Attr.make("aria-haspopup");
15
+ const geometry = [
16
+ "boxSizing",
17
+ "width",
18
+ "height",
19
+ "minWidth",
20
+ "maxWidth",
21
+ "flex",
22
+ "position",
23
+ "insetInlineStart",
24
+ "insetInlineEnd",
25
+ "top"
26
+ ];
27
+ const GridSlots = Slots.define({
28
+ /** The scroll container: `role="grid"`, the one tab stop, and the keyboard. */
29
+ root: Slot.make({
30
+ capability: Capability.Focusable,
31
+ events: [Event.KeyDown],
32
+ attributes: [
33
+ Attr.Role,
34
+ Attr.AriaLabel,
35
+ AriaRowCount,
36
+ AriaColCount,
37
+ AriaActiveDescendant
38
+ ],
39
+ protected: {
40
+ events: [Event.KeyDown],
41
+ attributes: [
42
+ Attr.Role,
43
+ Tabindex,
44
+ Id,
45
+ AriaRowCount,
46
+ AriaColCount,
47
+ AriaActiveDescendant
48
+ ],
49
+ style: ["overflow", "position"]
50
+ }
51
+ }),
52
+ /** The header row's group; it stays at the top while the body scrolls. */
53
+ header: Slot.make({
54
+ capability: Capability.Container,
55
+ protected: {
56
+ attributes: [Attr.Role],
57
+ style: ["position", "top"]
58
+ }
59
+ }),
60
+ headerRow: Slot.make({
61
+ capability: Capability.Container,
62
+ protected: {
63
+ attributes: [Attr.Role, AriaRowIndex],
64
+ style: geometry
65
+ }
66
+ }),
67
+ /**
68
+ * One per drawn column. `data-pinned` is `start` or `end` on a pinned
69
+ * column; while a header is dragged it has `data-dragging` and follows the
70
+ * pointer by a `transform`, and the shown neighbour it would land beside
71
+ * has `data-drop`, `before` or `after`.
72
+ */
73
+ headerCell: Slot.make({
74
+ capability: Capability.Base,
75
+ protected: {
76
+ attributes: [Attr.Role, AriaColIndex],
77
+ style: [...geometry, "transform"]
78
+ }
79
+ }),
80
+ /**
81
+ * A column's resize handle at its end edge: a `role="separator"` with its
82
+ * width as `aria-valuenow`, dragged with the pointer, or stepped with the
83
+ * arrow keys once focused. It is out of the tab order, so the grid stays
84
+ * one tab stop. Only resizable columns have one.
85
+ */
86
+ resizeHandle: Slot.make({
87
+ capability: Capability.Focusable,
88
+ events: [Event.KeyDown],
89
+ protected: {
90
+ events: [Event.KeyDown],
91
+ attributes: [
92
+ Attr.Role,
93
+ Tabindex,
94
+ AriaValueNow,
95
+ AriaValueMin,
96
+ AriaValueMax
97
+ ],
98
+ style: [
99
+ "position",
100
+ "insetInlineEnd",
101
+ "top",
102
+ "bottom"
103
+ ]
104
+ }
105
+ }),
106
+ body: Slot.make({
107
+ capability: Capability.Container,
108
+ protected: {
109
+ attributes: [Attr.Role],
110
+ style: geometry
111
+ }
112
+ }),
113
+ /** One per drawn row; `aria-rowindex` is its place among every row, drawn or not. */
114
+ row: Slot.make({
115
+ capability: Capability.Container,
116
+ protected: {
117
+ attributes: [Attr.Role, AriaRowIndex],
118
+ style: geometry
119
+ }
120
+ }),
121
+ /** One per drawn cell; `data-focused` marks the current one, `data-pinned` a pinned one. */
122
+ cell: Slot.make({
123
+ capability: Capability.Base,
124
+ events: [MouseDown],
125
+ protected: {
126
+ events: [MouseDown],
127
+ attributes: [
128
+ Attr.Role,
129
+ Id,
130
+ AriaColIndex
131
+ ],
132
+ style: geometry
133
+ }
134
+ }),
135
+ /** A row counted but not loaded yet, drawn at its height for a skeleton to style. */
136
+ placeholder: Slot.make({
137
+ capability: Capability.Base,
138
+ protected: { style: ["height", "width"] }
139
+ }),
140
+ /**
141
+ * The text field a cell is edited in, drawn in place of its content while
142
+ * the edit lasts; `aria-invalid` when the column refused the draft.
143
+ */
144
+ editor: Slot.make({
145
+ capability: Capability.TextInput,
146
+ events: [
147
+ Event.Input,
148
+ Event.KeyDown,
149
+ Event.Blur
150
+ ],
151
+ protected: { events: [
152
+ Event.Input,
153
+ Event.KeyDown,
154
+ Event.Blur
155
+ ] }
156
+ }),
157
+ /**
158
+ * Why the column refused a draft, shown below the field while the edit
159
+ * lasts; the field names it with `aria-describedby`.
160
+ */
161
+ editorError: Slot.make({ capability: Capability.Base }),
162
+ /**
163
+ * The editor of a column whose schema's text is one of a few literals,
164
+ * drawn in place of the cell's content while the edit lasts, like
165
+ * `editor`: a `role="combobox"` showing the draft, its options in
166
+ * `choiceList` (or, with `choiceEditor: 'native'`, a `select`).
167
+ */
168
+ choice: Slot.make({
169
+ capability: Capability.Focusable,
170
+ events: [
171
+ Event.Change,
172
+ Event.KeyDown,
173
+ Event.Blur
174
+ ],
175
+ protected: {
176
+ events: [
177
+ Event.Change,
178
+ Event.KeyDown,
179
+ Event.Blur
180
+ ],
181
+ attributes: [
182
+ Attr.Role,
183
+ Tabindex,
184
+ AriaActiveDescendant
185
+ ]
186
+ }
187
+ }),
188
+ /**
189
+ * A choice's options, `role="listbox"`, below the cell, or above it when
190
+ * the cell is low in the view (`data-place="above"`).
191
+ */
192
+ choiceList: Slot.make({
193
+ capability: Capability.Base,
194
+ protected: {
195
+ attributes: [Attr.Role, Id],
196
+ style: ["position"]
197
+ }
198
+ }),
199
+ /** One literal a `choice` offers: `role="option"`, `aria-selected` on the draft. */
200
+ choiceOption: Slot.make({
201
+ capability: Capability.Base,
202
+ events: [Event.Click],
203
+ protected: {
204
+ events: [Event.Click],
205
+ attributes: [Attr.Role, Id]
206
+ }
207
+ }),
208
+ /** Said in place of rows when there are none: empty, loading, or failed. */
209
+ status: Slot.make({ capability: Capability.Base }),
210
+ /**
211
+ * The button on a column's header that opens its menu, when the view is
212
+ * given `columnMenu`: `aria-haspopup="menu"` and `aria-expanded`, out of
213
+ * the tab order like the grid's other controls.
214
+ */
215
+ menuButton: Slot.make({
216
+ capability: Capability.Interactive,
217
+ events: [Event.Click],
218
+ attributes: [Attr.AriaLabel],
219
+ protected: {
220
+ events: [Event.Click],
221
+ attributes: [
222
+ AriaHasPopup,
223
+ Attr.AriaExpanded,
224
+ Tabindex
225
+ ]
226
+ }
227
+ }),
228
+ /**
229
+ * A column's open menu, below its header: a `role="menu"` that takes focus
230
+ * and points at its active item with `aria-activedescendant`, as the grid
231
+ * points at its cell. Focus leaving it closes it.
232
+ */
233
+ menu: Slot.make({
234
+ capability: Capability.Focusable,
235
+ events: [Event.KeyDown],
236
+ protected: {
237
+ events: [Event.KeyDown],
238
+ attributes: [
239
+ Attr.Role,
240
+ Tabindex,
241
+ AriaActiveDescendant
242
+ ],
243
+ style: ["position"]
244
+ }
245
+ }),
246
+ /** One of a menu's items; `data-active` marks the one the keyboard is on. */
247
+ menuItem: Slot.make({
248
+ capability: Capability.Base,
249
+ events: [Event.Click],
250
+ protected: {
251
+ events: [Event.Click],
252
+ attributes: [Attr.Role, Id]
253
+ }
254
+ }),
255
+ /**
256
+ * The button on a sortable column's header: a click sends its sort Message.
257
+ * `data-sort` is `asc` or `desc` while the column is sorted.
258
+ */
259
+ sort: Slot.make({
260
+ capability: Capability.Interactive,
261
+ events: [Event.Click]
262
+ }),
263
+ /**
264
+ * The square at the end corner of the range, or of the focused cell, in a
265
+ * grid that edits: dragged, it fills the cells it is drawn over. Pointer
266
+ * only and hidden from assistive technology; Ctrl+D and Ctrl+R fill by key.
267
+ */
268
+ fillHandle: Slot.make({
269
+ capability: Capability.Base,
270
+ protected: { style: [
271
+ "position",
272
+ "insetInlineEnd",
273
+ "insetBlockEnd"
274
+ ] }
275
+ }),
276
+ /** Below the rows: a failure that left them on screen, and the More button. */
277
+ footer: Slot.make({ capability: Capability.Container }),
278
+ retry: Slot.make({
279
+ capability: Capability.Interactive,
280
+ events: [Event.Click]
281
+ }),
282
+ more: Slot.make({
283
+ capability: Capability.Interactive,
284
+ events: [Event.Click]
285
+ })
286
+ });
287
+ export { GridSlots };
288
+
289
+ //# sourceMappingURL=slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.js","names":[],"sources":["../src/slots.ts"],"sourcesContent":["import { Attr, Capability, Event, Slot, Slots } from 'foldkit-mixins'\n\nconst AriaRowCount = Attr.make('aria-rowcount')\nconst AriaColCount = Attr.make('aria-colcount')\nconst AriaRowIndex = Attr.make('aria-rowindex')\nconst AriaColIndex = Attr.make('aria-colindex')\nconst AriaActiveDescendant = Attr.make('aria-activedescendant')\nconst Tabindex = Attr.make('tabindex')\nconst AriaValueNow = Attr.make('aria-valuenow')\nconst AriaValueMin = Attr.make('aria-valuemin')\nconst AriaValueMax = Attr.make('aria-valuemax')\nconst Id = Attr.make('id')\nconst MouseDown = Event.make('mousedown')\nconst AriaHasPopup = Attr.make('aria-haspopup')\n\n// What the virtual window is worked out from: a Style that changed one of\n// these would draw rows where the window math does not think they are.\nconst geometry = [\n 'boxSizing',\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'flex',\n 'position',\n 'insetInlineStart',\n 'insetInlineEnd',\n 'top',\n]\n\nexport const GridSlots = Slots.define({\n /** The scroll container: `role=\"grid\"`, the one tab stop, and the keyboard. */\n root: Slot.make({\n capability: Capability.Focusable,\n events: [Event.KeyDown],\n attributes: [Attr.Role, Attr.AriaLabel, AriaRowCount, AriaColCount, AriaActiveDescendant],\n protected: {\n events: [Event.KeyDown],\n attributes: [Attr.Role, Tabindex, Id, AriaRowCount, AriaColCount, AriaActiveDescendant],\n style: ['overflow', 'position'],\n },\n }),\n /** The header row's group; it stays at the top while the body scrolls. */\n header: Slot.make({\n capability: Capability.Container,\n protected: { attributes: [Attr.Role], style: ['position', 'top'] },\n }),\n headerRow: Slot.make({\n capability: Capability.Container,\n protected: { attributes: [Attr.Role, AriaRowIndex], style: geometry },\n }),\n /**\n * One per drawn column. `data-pinned` is `start` or `end` on a pinned\n * column; while a header is dragged it has `data-dragging` and follows the\n * pointer by a `transform`, and the shown neighbour it would land beside\n * has `data-drop`, `before` or `after`.\n */\n headerCell: Slot.make({\n capability: Capability.Base,\n protected: { attributes: [Attr.Role, AriaColIndex], style: [...geometry, 'transform'] },\n }),\n /**\n * A column's resize handle at its end edge: a `role=\"separator\"` with its\n * width as `aria-valuenow`, dragged with the pointer, or stepped with the\n * arrow keys once focused. It is out of the tab order, so the grid stays\n * one tab stop. Only resizable columns have one.\n */\n resizeHandle: Slot.make({\n capability: Capability.Focusable,\n events: [Event.KeyDown],\n protected: {\n events: [Event.KeyDown],\n attributes: [Attr.Role, Tabindex, AriaValueNow, AriaValueMin, AriaValueMax],\n style: ['position', 'insetInlineEnd', 'top', 'bottom'],\n },\n }),\n body: Slot.make({\n capability: Capability.Container,\n protected: { attributes: [Attr.Role], style: geometry },\n }),\n /** One per drawn row; `aria-rowindex` is its place among every row, drawn or not. */\n row: Slot.make({\n capability: Capability.Container,\n protected: { attributes: [Attr.Role, AriaRowIndex], style: geometry },\n }),\n /** One per drawn cell; `data-focused` marks the current one, `data-pinned` a pinned one. */\n cell: Slot.make({\n capability: Capability.Base,\n events: [MouseDown],\n protected: {\n events: [MouseDown],\n attributes: [Attr.Role, Id, AriaColIndex],\n style: geometry,\n },\n }),\n /** A row counted but not loaded yet, drawn at its height for a skeleton to style. */\n placeholder: Slot.make({\n capability: Capability.Base,\n protected: { style: ['height', 'width'] },\n }),\n /**\n * The text field a cell is edited in, drawn in place of its content while\n * the edit lasts; `aria-invalid` when the column refused the draft.\n */\n editor: Slot.make({\n capability: Capability.TextInput,\n events: [Event.Input, Event.KeyDown, Event.Blur],\n protected: { events: [Event.Input, Event.KeyDown, Event.Blur] },\n }),\n /**\n * Why the column refused a draft, shown below the field while the edit\n * lasts; the field names it with `aria-describedby`.\n */\n editorError: Slot.make({ capability: Capability.Base }),\n /**\n * The editor of a column whose schema's text is one of a few literals,\n * drawn in place of the cell's content while the edit lasts, like\n * `editor`: a `role=\"combobox\"` showing the draft, its options in\n * `choiceList` (or, with `choiceEditor: 'native'`, a `select`).\n */\n choice: Slot.make({\n capability: Capability.Focusable,\n events: [Event.Change, Event.KeyDown, Event.Blur],\n protected: {\n events: [Event.Change, Event.KeyDown, Event.Blur],\n attributes: [Attr.Role, Tabindex, AriaActiveDescendant],\n },\n }),\n /**\n * A choice's options, `role=\"listbox\"`, below the cell, or above it when\n * the cell is low in the view (`data-place=\"above\"`).\n */\n choiceList: Slot.make({\n capability: Capability.Base,\n protected: { attributes: [Attr.Role, Id], style: ['position'] },\n }),\n /** One literal a `choice` offers: `role=\"option\"`, `aria-selected` on the draft. */\n choiceOption: Slot.make({\n capability: Capability.Base,\n events: [Event.Click],\n protected: { events: [Event.Click], attributes: [Attr.Role, Id] },\n }),\n /** Said in place of rows when there are none: empty, loading, or failed. */\n status: Slot.make({ capability: Capability.Base }),\n /**\n * The button on a column's header that opens its menu, when the view is\n * given `columnMenu`: `aria-haspopup=\"menu\"` and `aria-expanded`, out of\n * the tab order like the grid's other controls.\n */\n menuButton: Slot.make({\n capability: Capability.Interactive,\n events: [Event.Click],\n attributes: [Attr.AriaLabel],\n protected: { events: [Event.Click], attributes: [AriaHasPopup, Attr.AriaExpanded, Tabindex] },\n }),\n /**\n * A column's open menu, below its header: a `role=\"menu\"` that takes focus\n * and points at its active item with `aria-activedescendant`, as the grid\n * points at its cell. Focus leaving it closes it.\n */\n menu: Slot.make({\n capability: Capability.Focusable,\n events: [Event.KeyDown],\n protected: {\n events: [Event.KeyDown],\n attributes: [Attr.Role, Tabindex, AriaActiveDescendant],\n style: ['position'],\n },\n }),\n /** One of a menu's items; `data-active` marks the one the keyboard is on. */\n menuItem: Slot.make({\n capability: Capability.Base,\n events: [Event.Click],\n protected: { events: [Event.Click], attributes: [Attr.Role, Id] },\n }),\n /**\n * The button on a sortable column's header: a click sends its sort Message.\n * `data-sort` is `asc` or `desc` while the column is sorted.\n */\n sort: Slot.make({ capability: Capability.Interactive, events: [Event.Click] }),\n /**\n * The square at the end corner of the range, or of the focused cell, in a\n * grid that edits: dragged, it fills the cells it is drawn over. Pointer\n * only and hidden from assistive technology; Ctrl+D and Ctrl+R fill by key.\n */\n fillHandle: Slot.make({\n capability: Capability.Base,\n protected: { style: ['position', 'insetInlineEnd', 'insetBlockEnd'] },\n }),\n /** Below the rows: a failure that left them on screen, and the More button. */\n footer: Slot.make({ capability: Capability.Container }),\n retry: Slot.make({ capability: Capability.Interactive, events: [Event.Click] }),\n more: Slot.make({ capability: Capability.Interactive, events: [Event.Click] }),\n})\n"],"mappings":"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"}