@hina-ui/vue 1.7.0 → 1.7.2

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 (98) hide show
  1. package/dist/index.js +3086 -444
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/components/anchor/composables/useScrollSpy.d.ts.map +1 -1
  4. package/dist/types/components/combobox/Combobox.vue.d.ts +1 -0
  5. package/dist/types/components/combobox/Combobox.vue.d.ts.map +1 -1
  6. package/dist/types/components/data-table/DataTable.vue.d.ts +58 -0
  7. package/dist/types/components/data-table/DataTable.vue.d.ts.map +1 -0
  8. package/dist/types/components/data-table/DataTableAction.vue.d.ts +18 -0
  9. package/dist/types/components/data-table/DataTableAction.vue.d.ts.map +1 -0
  10. package/dist/types/components/data-table/DataTableDragPreview.vue.d.ts +24 -0
  11. package/dist/types/components/data-table/DataTableDragPreview.vue.d.ts.map +1 -0
  12. package/dist/types/components/data-table/DataTableEditor.vue.d.ts +24 -0
  13. package/dist/types/components/data-table/DataTableEditor.vue.d.ts.map +1 -0
  14. package/dist/types/components/data-table/DataTableHead.vue.d.ts +32 -0
  15. package/dist/types/components/data-table/DataTableHead.vue.d.ts.map +1 -0
  16. package/dist/types/components/data-table/DataTableRow.vue.d.ts +39 -0
  17. package/dist/types/components/data-table/DataTableRow.vue.d.ts.map +1 -0
  18. package/dist/types/components/data-table/DataTableSelection.vue.d.ts +15 -0
  19. package/dist/types/components/data-table/DataTableSelection.vue.d.ts.map +1 -0
  20. package/dist/types/components/data-table/DataTableText.vue.d.ts +8 -0
  21. package/dist/types/components/data-table/DataTableText.vue.d.ts.map +1 -0
  22. package/dist/types/components/data-table/Slot.d.ts +8 -0
  23. package/dist/types/components/data-table/Slot.d.ts.map +1 -0
  24. package/dist/types/components/data-table/column-sizing-styles.d.ts +4 -0
  25. package/dist/types/components/data-table/column-sizing-styles.d.ts.map +1 -0
  26. package/dist/types/components/data-table/column-sizing.d.ts +22 -0
  27. package/dist/types/components/data-table/column-sizing.d.ts.map +1 -0
  28. package/dist/types/components/data-table/composables/useDataTable.d.ts +80 -0
  29. package/dist/types/components/data-table/composables/useDataTable.d.ts.map +1 -0
  30. package/dist/types/components/data-table/composables/useTableColumns.d.ts +52 -0
  31. package/dist/types/components/data-table/composables/useTableColumns.d.ts.map +1 -0
  32. package/dist/types/components/data-table/composables/useTableDrag.d.ts +53 -0
  33. package/dist/types/components/data-table/composables/useTableDrag.d.ts.map +1 -0
  34. package/dist/types/components/data-table/composables/useTableEditing.d.ts +27 -0
  35. package/dist/types/components/data-table/composables/useTableEditing.d.ts.map +1 -0
  36. package/dist/types/components/data-table/composables/useTableExport.d.ts +3 -0
  37. package/dist/types/components/data-table/composables/useTableExport.d.ts.map +1 -0
  38. package/dist/types/components/data-table/composables/useTableResize.d.ts +42 -0
  39. package/dist/types/components/data-table/composables/useTableResize.d.ts.map +1 -0
  40. package/dist/types/components/data-table/composables/useTableResizeHandles.d.ts +8 -0
  41. package/dist/types/components/data-table/composables/useTableResizeHandles.d.ts.map +1 -0
  42. package/dist/types/components/data-table/composables/useTableText.d.ts +6 -0
  43. package/dist/types/components/data-table/composables/useTableText.d.ts.map +1 -0
  44. package/dist/types/components/data-table/composables/useTableVirtual.d.ts +55 -0
  45. package/dist/types/components/data-table/composables/useTableVirtual.d.ts.map +1 -0
  46. package/dist/types/components/data-table/features.d.ts +16 -0
  47. package/dist/types/components/data-table/features.d.ts.map +1 -0
  48. package/dist/types/components/data-table/types.d.ts +225 -0
  49. package/dist/types/components/data-table/types.d.ts.map +1 -0
  50. package/dist/types/components/data-table/utils.d.ts +10 -0
  51. package/dist/types/components/data-table/utils.d.ts.map +1 -0
  52. package/dist/types/components/form/composables/useForm.d.ts.map +1 -1
  53. package/dist/types/components/table/TableHead.vue.d.ts +2 -2
  54. package/dist/types/components/table/TableHead.vue.d.ts.map +1 -1
  55. package/dist/types/components/table/table.variants.d.ts +1 -1
  56. package/dist/types/components/table/table.variants.d.ts.map +1 -1
  57. package/dist/types/index.d.ts +2 -0
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/types/locale/en-US.d.ts.map +1 -1
  60. package/dist/types/locale/types.d.ts +12 -0
  61. package/dist/types/locale/types.d.ts.map +1 -1
  62. package/dist/types/locale/zh-CN.d.ts.map +1 -1
  63. package/package.json +14 -12
  64. package/src/components/anchor/composables/useScrollSpy.ts +8 -11
  65. package/src/components/combobox/Combobox.vue +11 -1
  66. package/src/components/data-table/DataTable.vue +341 -0
  67. package/src/components/data-table/DataTableAction.vue +15 -0
  68. package/src/components/data-table/DataTableDragPreview.vue +72 -0
  69. package/src/components/data-table/DataTableEditor.vue +59 -0
  70. package/src/components/data-table/DataTableHead.vue +181 -0
  71. package/src/components/data-table/DataTableRow.vue +255 -0
  72. package/src/components/data-table/DataTableSelection.vue +51 -0
  73. package/src/components/data-table/DataTableText.vue +20 -0
  74. package/src/components/data-table/Slot.ts +12 -0
  75. package/src/components/data-table/column-sizing-styles.ts +40 -0
  76. package/src/components/data-table/column-sizing.ts +101 -0
  77. package/src/components/data-table/composables/useDataTable.ts +425 -0
  78. package/src/components/data-table/composables/useTableColumns.ts +251 -0
  79. package/src/components/data-table/composables/useTableDrag.ts +345 -0
  80. package/src/components/data-table/composables/useTableEditing.ts +184 -0
  81. package/src/components/data-table/composables/useTableExport.ts +44 -0
  82. package/src/components/data-table/composables/useTableResize.ts +292 -0
  83. package/src/components/data-table/composables/useTableResizeHandles.ts +72 -0
  84. package/src/components/data-table/composables/useTableText.ts +13 -0
  85. package/src/components/data-table/composables/useTableVirtual.ts +109 -0
  86. package/src/components/data-table/features.ts +32 -0
  87. package/src/components/data-table/types.ts +218 -0
  88. package/src/components/data-table/utils.ts +75 -0
  89. package/src/components/form/composables/useForm.ts +44 -8
  90. package/src/components/table/TableHead.vue +1 -1
  91. package/src/components/table/table.variants.ts +1 -2
  92. package/src/index.ts +25 -0
  93. package/src/locale/en-US.ts +13 -0
  94. package/src/locale/types.ts +13 -0
  95. package/src/locale/zh-CN.ts +13 -0
  96. package/src/styles/data-table.css +330 -0
  97. package/src/styles/tokens.css +1 -0
  98. package/src/styles/typography.css +4 -2
@@ -0,0 +1,330 @@
1
+ .hn-table th.hn-table-header {
2
+ user-select: none;
3
+ isolation: isolate;
4
+ }
5
+
6
+ .hn-table-header > :not(.hn-table-heading, .hn-table-resize) {
7
+ margin: 0.5em 0.75em;
8
+ }
9
+
10
+ .hn-table-heading {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: 0.375rem;
14
+ width: 100%;
15
+ min-height: var(--hn-row-h);
16
+ padding: 0.5em 0.75em;
17
+ color: inherit;
18
+ font: inherit;
19
+ text-align: inherit;
20
+ background: transparent;
21
+ border: 0;
22
+ outline-offset: -2px;
23
+ transition: background-color var(--hn-duration-fast) var(--hn-ease-enter);
24
+ }
25
+
26
+ button.hn-table-heading {
27
+ cursor: pointer;
28
+ }
29
+ .hn-table-header[data-reorderable] {
30
+ cursor: grab;
31
+ touch-action: pan-y;
32
+ }
33
+ .hn-table-header[data-reorderable] .hn-table-heading {
34
+ cursor: inherit;
35
+ }
36
+ .hn-table-header[data-align='end'] .hn-table-heading {
37
+ justify-content: end;
38
+ }
39
+ .hn-table-header[data-align='center'] .hn-table-heading {
40
+ justify-content: center;
41
+ }
42
+ .hn-table-header[data-align='end'] .hn-table-sort {
43
+ order: -1;
44
+ }
45
+ button.hn-table-heading:hover:not(:disabled) {
46
+ background: var(--hn-bg-inset);
47
+ }
48
+ .hn-table-heading:disabled {
49
+ cursor: default;
50
+ }
51
+
52
+ .hn-table-sort {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ flex-shrink: 0;
56
+ gap: 0.125rem;
57
+ opacity: 0;
58
+ transition: opacity var(--hn-duration-fast) var(--hn-ease-enter);
59
+ }
60
+ .hn-table-sort > svg {
61
+ width: 0.875rem;
62
+ height: 0.875rem;
63
+ }
64
+ .hn-table-heading:is(:hover, :focus-visible, [data-sorted]) .hn-table-sort {
65
+ opacity: 1;
66
+ }
67
+
68
+ .hn-table-resize {
69
+ position: absolute;
70
+ inset-block: 0;
71
+ inset-inline-end: var(--hn-table-resize-inset, 0px);
72
+ width: 9px;
73
+ z-index: 10;
74
+ cursor: col-resize;
75
+ touch-action: none;
76
+ }
77
+ .hn-table-resize::after {
78
+ content: '';
79
+ position: absolute;
80
+ inset-block: 25%;
81
+ inset-inline: 3px;
82
+ border-inline: 1px solid var(--hn-border);
83
+ }
84
+ .hn-table-resize[data-side='start'] {
85
+ inset-inline-start: var(--hn-table-resize-inset, 0px);
86
+ inset-inline-end: auto;
87
+ }
88
+ .hn-table-resize:is(:hover, :focus-visible, [data-resizing])::after {
89
+ inset-block: 15%;
90
+ border-color: var(--hn-accent);
91
+ }
92
+ .hn-table-resize-label {
93
+ position: fixed;
94
+ z-index: calc(var(--hn-z-overlay) + 2);
95
+ display: grid;
96
+ gap: 0.125rem;
97
+ max-width: 180px;
98
+ padding: 0.125rem 0.375rem;
99
+ color: var(--hn-fg-default);
100
+ background: var(--hn-surface);
101
+ border: 1px solid var(--hn-border);
102
+ border-radius: var(--hn-radius-sm);
103
+ box-shadow: var(--hn-shadow-sm);
104
+ font-size: var(--hn-text-xs);
105
+ line-height: var(--hn-leading-xs);
106
+ white-space: nowrap;
107
+ pointer-events: none;
108
+ }
109
+ .hn-table-resize-label > div {
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: space-between;
113
+ gap: 0.5rem;
114
+ min-width: 0;
115
+ }
116
+ .hn-table-resize-label > div > :first-child {
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ }
120
+ .hn-table-resize-label > div > :last-child {
121
+ flex-shrink: 0;
122
+ color: var(--hn-fg-muted);
123
+ font-variant-numeric: tabular-nums;
124
+ }
125
+
126
+ .hn-table-drop-line {
127
+ position: fixed;
128
+ z-index: calc(var(--hn-z-overlay) + 2);
129
+ pointer-events: none;
130
+ background: var(--hn-accent);
131
+ transform: translateX(-1px);
132
+ }
133
+ .hn-table-drag-preview {
134
+ position: fixed;
135
+ z-index: calc(var(--hn-z-overlay) + 1);
136
+ pointer-events: none;
137
+ overflow: hidden;
138
+ color: var(--hn-fg-default);
139
+ background: var(--hn-surface);
140
+ border: 1px solid var(--hn-border);
141
+ border-radius: var(--hn-radius-sm);
142
+ box-shadow: var(--hn-shadow-lg);
143
+ font-size: var(--hn-text-sm);
144
+ line-height: var(--hn-leading-sm);
145
+ opacity: 0.95;
146
+ }
147
+ .hn-table-drag-label,
148
+ .hn-table-drag-cell {
149
+ padding: 0.5em 0.75em;
150
+ min-height: var(--hn-row-h);
151
+ overflow: hidden;
152
+ text-overflow: ellipsis;
153
+ white-space: nowrap;
154
+ }
155
+ .hn-table-drag-label {
156
+ background: var(--hn-table-head-bg);
157
+ font-weight: var(--hn-weight-medium);
158
+ }
159
+ .hn-table-drag-cell {
160
+ border-block-start: 1px solid var(--hn-border);
161
+ }
162
+
163
+ .hn-table-action {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ width: 1.5rem;
168
+ height: 1.5rem;
169
+ flex-shrink: 0;
170
+ vertical-align: middle;
171
+ padding: 0;
172
+ color: var(--hn-fg-muted);
173
+ background: transparent;
174
+ border: 0;
175
+ border-radius: var(--hn-radius-sm);
176
+ cursor: pointer;
177
+ transition:
178
+ color var(--hn-duration-fast) var(--hn-ease-enter),
179
+ background-color var(--hn-duration-fast) var(--hn-ease-enter);
180
+ }
181
+ .hn-table-action > svg {
182
+ width: 1rem;
183
+ height: 1rem;
184
+ }
185
+ .hn-table-action:hover:not(:disabled) {
186
+ color: var(--hn-fg-default);
187
+ background: var(--hn-bg-inset);
188
+ }
189
+ .hn-table-action:disabled {
190
+ cursor: default;
191
+ opacity: 0.4;
192
+ }
193
+ .hn-table-action:active:not(:disabled) {
194
+ background: var(--hn-bg-subtle);
195
+ }
196
+ .hn-table-group {
197
+ display: flex;
198
+ align-items: center;
199
+ gap: 0.375rem;
200
+ padding: 0;
201
+ color: inherit;
202
+ background: transparent;
203
+ border: 0;
204
+ font: inherit;
205
+ font-weight: var(--hn-weight-medium);
206
+ cursor: pointer;
207
+ }
208
+ .hn-table-group > svg {
209
+ width: 1rem;
210
+ height: 1rem;
211
+ flex-shrink: 0;
212
+ }
213
+ .hn-table td[data-editing='cell'] {
214
+ box-shadow: inset 0 0 0 1px var(--hn-focus-ring);
215
+ }
216
+ .hn-table tr[data-editing='row'] > td,
217
+ .hn-table tr[data-edit-error] > td {
218
+ background-image: linear-gradient(
219
+ color-mix(in oklab, var(--hn-accent) 4%, transparent),
220
+ color-mix(in oklab, var(--hn-accent) 4%, transparent)
221
+ );
222
+ }
223
+ .hn-table tr[data-edit-error] > td {
224
+ height: auto;
225
+ }
226
+ .hn-table tr[data-editing='row']:has(+ tr[data-edit-error]) > td {
227
+ border-block-end-color: transparent;
228
+ }
229
+ .hn-table td[data-editing='row']:focus-within {
230
+ box-shadow: inset 0 -2px var(--hn-focus-ring);
231
+ }
232
+ .hn-table td[data-editing]:has([aria-invalid='true']) {
233
+ box-shadow: inset 0 -2px var(--hn-danger);
234
+ }
235
+ .hn-table td[data-editing],
236
+ .hn-table tr[data-editing] > .hn-table-edit-actions {
237
+ vertical-align: top;
238
+ }
239
+ .hn-table-editor {
240
+ min-width: 0;
241
+ }
242
+ .hn-table-editor-control {
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 0.25rem;
246
+ min-height: calc(var(--hn-row-h) - 1px);
247
+ }
248
+ .hn-table-editor-field {
249
+ --hn-input-px: 0px;
250
+ flex: 1;
251
+ font: inherit;
252
+ }
253
+ .hn-table-editor input {
254
+ padding-inline: 0;
255
+ text-align: inherit;
256
+ }
257
+ .hn-table-field-error,
258
+ .hn-table-edit-message {
259
+ margin: 0;
260
+ color: var(--hn-danger);
261
+ font-size: var(--hn-text-xs);
262
+ line-height: var(--hn-leading-xs);
263
+ text-align: start;
264
+ overflow-wrap: anywhere;
265
+ }
266
+ .hn-table-field-error {
267
+ padding-block-end: 0.5rem;
268
+ }
269
+ .hn-table-edit-message {
270
+ position: sticky;
271
+ inset-inline-start: 0.75em;
272
+ width: fit-content;
273
+ max-width: calc(var(--hn-table-viewport-width, 100%) - 1.5em);
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 0.375rem;
277
+ padding-block: 0.375rem;
278
+ }
279
+ .hn-table-edit-message > svg {
280
+ width: 1rem;
281
+ height: 1rem;
282
+ flex-shrink: 0;
283
+ }
284
+ .hn-table tr:has(.hn-table-action),
285
+ .hn-table tr:has([data-hn-cell][tabindex]) {
286
+ height: var(--hn-row-h);
287
+ }
288
+
289
+ @media (hover: hover) and (pointer: fine) {
290
+ .hn-table-edit-trigger {
291
+ opacity: 0;
292
+ }
293
+ tr:is(:hover, :focus-within) .hn-table-edit-trigger {
294
+ opacity: 1;
295
+ }
296
+ }
297
+ @media (prefers-reduced-motion: reduce) {
298
+ .hn-table-heading,
299
+ .hn-table-sort,
300
+ .hn-table-action {
301
+ transition: none;
302
+ }
303
+ }
304
+ html[data-hn-table-gesture='drag'],
305
+ html[data-hn-table-gesture='drag'] * {
306
+ cursor: grabbing !important;
307
+ user-select: none !important;
308
+ }
309
+
310
+ html[data-hn-table-gesture='resize'],
311
+ html[data-hn-table-gesture='resize'] * {
312
+ cursor: col-resize !important;
313
+ user-select: none !important;
314
+ }
315
+
316
+ .hn-table td[data-hn-cell][tabindex] {
317
+ cursor: text;
318
+ }
319
+ .hn-table td[data-editing] {
320
+ cursor: default;
321
+ }
322
+
323
+ .hn-table-action[data-hn-row-drag]:not(:disabled) {
324
+ cursor: grab;
325
+ }
326
+
327
+ .hn-table-header:has(.hn-table-resize:is(:hover, :focus-visible, [data-resizing]))
328
+ .hn-table-heading {
329
+ background: color-mix(in oklab, var(--hn-accent) 8%, var(--hn-table-head-bg));
330
+ }
@@ -8,6 +8,7 @@
8
8
  @import './typography.css';
9
9
  @import './spoiler.css';
10
10
  @import './scroll.css';
11
+ @import './data-table.css';
11
12
  @import './base.css';
12
13
 
13
14
  @source '../components/**/*.vue';
@@ -57,11 +57,13 @@
57
57
  & th {
58
58
  color: var(--hn-fg-muted);
59
59
  font-weight: var(--hn-weight-medium);
60
+ }
61
+
62
+ & :where(th) {
60
63
  text-align: start;
61
64
  }
62
65
 
63
- & th,
64
- & td {
66
+ & :where(th, td) {
65
67
  border-block-end: 1px solid var(--hn-border);
66
68
  padding: 0.5em 0.75em;
67
69
  }