@hina-ui/vue 1.6.0 → 1.7.1

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