@innertia-solutions/nuxt-theme-spark 0.1.61 → 0.1.63

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.
@@ -302,6 +302,36 @@ const setColumnOrder = (order) => { columnOrder.value = order }
302
302
  // ─── Header drag reorder ──────────────────────────────────────────────────────
303
303
  let draggedHeaderId = null
304
304
  const dragOverHeaderId = ref(null)
305
+ const resizeHoverId = ref(null)
306
+
307
+ // ─── Column auto-size on double click ─────────────────────────────────────────
308
+ const _canvas = typeof document !== 'undefined' ? document.createElement('canvas') : null
309
+ const _ctx = _canvas?.getContext('2d')
310
+
311
+ const measureText = (text, font) => {
312
+ if (!_ctx) return 0
313
+ _ctx.font = font
314
+ return _ctx.measureText(String(text ?? '')).width
315
+ }
316
+
317
+ const autoSizeColumn = (header) => {
318
+ const colId = header.column.id
319
+ const pad = 32 // px-4 on each side
320
+
321
+ // Measure header label
322
+ const label = header.column.columnDef.meta?.label ?? header.id
323
+ let max = measureText(label, '500 12px ui-sans-serif,system-ui,sans-serif') + pad + 20 // +20 for sort icon
324
+
325
+ // Measure all visible data cells
326
+ if (tableBodyRef.value) {
327
+ tableBodyRef.value.querySelectorAll(`td[data-col-id="${colId}"]`).forEach(td => {
328
+ const w = measureText(td.textContent?.trim(), '14px ui-sans-serif,system-ui,sans-serif') + pad
329
+ if (w > max) max = w
330
+ })
331
+ }
332
+
333
+ header.column.setSize(Math.ceil(max))
334
+ }
305
335
 
306
336
  const onHeaderDragStart = (colId) => { draggedHeaderId = colId }
307
337
  const onHeaderDragOver = (e, colId) => { e.preventDefault(); dragOverHeaderId.value = colId }
@@ -462,8 +492,8 @@ defineExpose({
462
492
  v-for="header in headerGroup.headers"
463
493
  :key="header.id"
464
494
  scope="col"
465
- :draggable="header.id !== 'select'"
466
- @dragstart="header.id !== 'select' && onHeaderDragStart(header.id)"
495
+ :draggable="header.id !== 'select' && resizeHoverId !== header.id"
496
+ @dragstart="header.id !== 'select' && resizeHoverId !== header.id && onHeaderDragStart(header.id)"
467
497
  @dragover="header.id !== 'select' && onHeaderDragOver($event, header.id)"
468
498
  @dragleave="onHeaderDragLeave"
469
499
  @drop="header.id !== 'select' && onHeaderDrop(header.id)"
@@ -499,8 +529,11 @@ defineExpose({
499
529
  <div
500
530
  v-if="header.column.getCanResize()"
501
531
  class="absolute right-0 top-0 h-full w-3 cursor-col-resize group/rz flex items-center justify-center select-none touch-none"
532
+ @mouseenter="resizeHoverId = header.id"
533
+ @mouseleave="resizeHoverId = null"
502
534
  @mousedown.stop="header.getResizeHandler()?.($event)"
503
535
  @touchstart.passive.stop="header.getResizeHandler()?.($event)"
536
+ @dblclick.stop="autoSizeColumn(header)"
504
537
  @dragstart.stop.prevent
505
538
  @click.stop
506
539
  >
@@ -602,6 +635,7 @@ defineExpose({
602
635
  <td
603
636
  v-for="cell in row.getVisibleCells()"
604
637
  :key="cell.id"
638
+ :data-col-id="cell.column.id"
605
639
  :class="[
606
640
  cell.column.id === 'select'
607
641
  ? 'text-center w-12'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innertia-solutions/nuxt-theme-spark",
3
- "version": "0.1.61",
3
+ "version": "0.1.63",
4
4
  "description": "Innertia Solutions — Spark theme: backoffice, landing and mobile components and layouts",
5
5
  "keywords": [
6
6
  "nuxt",