@wpic/ui 0.9.14 → 0.9.16

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.
package/dist/wpic-ui.css CHANGED
@@ -475,6 +475,11 @@ input[type="range"].wpic-legacy-slider-themed::-webkit-slider-thumb {
475
475
  background: inherit;
476
476
  }
477
477
 
478
+ /* Optional vertical rules between cells, matching the row separators. */
479
+ .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left: 1px solid #f4f4f5; }
480
+ .dark .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left-color: #27272a; }
481
+ .wpic-theme .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left-color: var(--wpic-table-border, var(--wpic-border)); }
482
+
478
483
  /* Match row separators to the enclosing themed card in both modes. */
479
484
  .wpic-theme .wpic-table__divider,
480
485
  .wpic-theme .wpic-card--bordered:has(> .wpic-card__body > .wpic-table) {
package/dist/wpic-ui.js CHANGED
@@ -1,5 +1,5 @@
1
- import { defineComponent as X, openBlock as e, createBlock as O, resolveDynamicComponent as B1, normalizeClass as g, withCtx as s1, createElementVNode as i, createCommentVNode as h, renderSlot as Q, createElementBlock as t, createVNode as L, unref as m, Fragment as I, renderList as c1, toDisplayString as v, useModel as G1, useSlots as q2, computed as y, ref as H, watch as M1, onBeforeUnmount as s2, mergeProps as X1, createTextVNode as m1, withDirectives as T1, normalizeStyle as h1, vModelDynamic as b0, mergeModels as _1, vModelCheckbox as J0, withModifiers as f1, onMounted as H2, withKeys as M2, inject as Q2, provide as g2, isRef as X0, nextTick as H1, Teleport as U1, vShow as G0, Transition as w2, getCurrentInstance as g0, vModelText as l2, useAttrs as _0, TransitionGroup as n3, useCssVars as e3, vModelSelect as c3, onUnmounted as t3, createStaticVNode as A1 } from "vue";
2
- import { Loader2 as a2, Calendar as z0, DollarSign as i3, X as $1, Check as Y1, Search as P2, ChevronUp as C0, ChevronDown as D1, ChevronsUpDown as J2, ChevronRight as j1, ChevronLeft as z2, Download as l3, Minimize as a3, Expand as o3, CalendarDays as T2, FolderSymlink as s3, Minimize2 as r3, Maximize2 as p3, Plus as y2, Trash2 as d3, Folder as w0, MoreHorizontal as w3, Bot as u3, Paperclip as K2, ThumbsUp as h3, ThumbsDown as m3, Copy as v3, Pencil as f3, MessageSquarePlus as b3, Square as g3, ArrowUp as z3, CircleAlert as C3, CircleCheck as k3, ShieldAlert as x3, Lightbulb as y3, PanelLeftOpen as M3, PanelLeftClose as V3, AlertTriangle as L3, Tag as F2, Clock as B3, RefreshCw as $3 } from "lucide-vue-next";
1
+ import { defineComponent as X, openBlock as e, createBlock as O, resolveDynamicComponent as B1, normalizeClass as g, withCtx as s1, createElementVNode as i, createCommentVNode as h, renderSlot as Q, createElementBlock as t, createVNode as L, unref as m, Fragment as I, renderList as c1, toDisplayString as v, useModel as G1, useSlots as q2, computed as y, ref as H, watch as M1, onBeforeUnmount as s2, mergeProps as U1, createTextVNode as m1, withDirectives as T1, normalizeStyle as h1, vModelDynamic as b0, mergeModels as _1, vModelCheckbox as J0, withModifiers as f1, onMounted as H2, withKeys as M2, inject as Q2, provide as g2, isRef as X0, nextTick as H1, Teleport as Y1, vShow as G0, Transition as w2, getCurrentInstance as g0, vModelText as l2, useAttrs as _0, TransitionGroup as n3, useCssVars as e3, vModelSelect as c3, onUnmounted as t3, createStaticVNode as A1 } from "vue";
2
+ import { Loader2 as a2, Calendar as z0, DollarSign as i3, X as $1, Check as q1, Search as P2, ChevronUp as C0, ChevronDown as D1, ChevronsUpDown as J2, ChevronRight as j1, ChevronLeft as z2, Download as l3, Minimize as a3, Expand as o3, CalendarDays as T2, FolderSymlink as s3, Minimize2 as r3, Maximize2 as p3, Plus as y2, Trash2 as d3, Folder as w0, MoreHorizontal as w3, Bot as u3, Paperclip as K2, ThumbsUp as h3, ThumbsDown as m3, Copy as v3, Pencil as f3, MessageSquarePlus as b3, Square as g3, ArrowUp as z3, CircleAlert as C3, CircleCheck as k3, ShieldAlert as x3, Lightbulb as y3, PanelLeftOpen as M3, PanelLeftClose as V3, AlertTriangle as L3, Tag as F2, Clock as B3, RefreshCw as $3 } from "lucide-vue-next";
3
3
  import { offset as u2, autoPlacement as A3, flip as h2, shift as m2, size as X2, useFloating as v2, autoUpdate as f2, arrow as S3 } from "@floating-ui/vue";
4
4
  import { defineStore as F3 } from "pinia";
5
5
  import { useEditor as H3, EditorContent as P3 } from "@tiptap/vue-3";
@@ -168,7 +168,7 @@ const D3 = {
168
168
  z.id = x, z.textContent = "input.winput-number::-webkit-outer-spin-button, input.winput-number::-webkit-inner-spin-button { display: none; } input.winput-number { -moz-appearance: textfield; }", document.head.appendChild(z);
169
169
  }
170
170
  }
171
- return (M, x) => (e(), t("div", X1(M.$attrs, { class: "wpic:w-full" }), [
171
+ return (M, x) => (e(), t("div", U1(M.$attrs, { class: "wpic:w-full" }), [
172
172
  c.label ? (e(), O(k0, {
173
173
  key: 0,
174
174
  required: c.required
@@ -268,7 +268,7 @@ const D3 = {
268
268
  w.value ? "wpic:border-zinc-900 wpic:bg-zinc-900 wpic:text-white wpic:dark:border-zinc-100 wpic:dark:bg-zinc-100 wpic:dark:text-zinc-950" : "wpic:border-zinc-300 wpic:bg-white wpic:text-transparent wpic:shadow-sm wpic:hover:border-zinc-400 wpic:dark:border-zinc-700 wpic:dark:bg-zinc-900 wpic:dark:hover:border-zinc-500"
269
269
  ]])
270
270
  }, [
271
- L(m(Y1), {
271
+ L(m(q1), {
272
272
  size: 11,
273
273
  "stroke-width": "2.6"
274
274
  })
@@ -354,7 +354,8 @@ const D3 = {
354
354
  summaryRow: {},
355
355
  compact: { type: Boolean },
356
356
  padding: {},
357
- showFooter: { type: Boolean, default: !0 }
357
+ showFooter: { type: Boolean, default: !0 },
358
+ columnDividers: { type: Boolean, default: !1 }
358
359
  },
359
360
  emits: ["row-click", "update:selectedKeys", "row-select", "update:serverPage"],
360
361
  setup(n, { expose: w, emit: c }) {
@@ -429,7 +430,7 @@ const D3 = {
429
430
  ...j.minWidth ? { minWidth: j.minWidth } : {}
430
431
  });
431
432
  return w({ filteredCount: y(() => M.value.length), searchQuery: $ }), (j, p1) => (e(), t("div", {
432
- class: g(["wpic-table", r1.value])
433
+ class: g(["wpic-table", [r1.value, { "wpic-table--column-dividers": n.columnDividers }]])
433
434
  }, [
434
435
  (W.value || m(f).toolbar) && !n.loading ? (e(), t("div", {
435
436
  key: 0,
@@ -826,11 +827,11 @@ const D3 = {
826
827
  if (!$.value || !W.value) return;
827
828
  const S = $.value, U = W.value, K = Math.min(S.row, U.row), d1 = Math.max(S.row, U.row), o1 = Math.min(S.cell, U.cell), R = Math.max(S.cell, U.cell), Y = /* @__PURE__ */ new Set(), _ = D.value[S.row], C1 = _?.cells[S.cell];
828
829
  for (let E1 = K; E1 <= d1; E1++) {
829
- const q1 = D.value[E1];
830
- if (q1)
830
+ const Q1 = D.value[E1];
831
+ if (Q1)
831
832
  for (let e2 = o1; e2 <= R; e2++) {
832
- const Q1 = q1.cells[e2];
833
- Q1?.editable && (Y.add(J(q1, Q1)), p("cell-change", { rowKey: q1.key, cellKey: Q1.key, value: S.value, row: q1, cell: Q1 }));
833
+ const J1 = Q1.cells[e2];
834
+ J1?.editable && (Y.add(J(Q1, J1)), p("cell-change", { rowKey: Q1.key, cellKey: J1.key, value: S.value, row: Q1, cell: J1 }));
834
835
  }
835
836
  }
836
837
  $.value = null, W.value = null, x.value = _ && C1 ? { cells: Y, source: J(_, C1) } : null;
@@ -1230,7 +1231,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1230
1231
  transformOrigin: Z.value,
1231
1232
  zIndex: c.zIndex
1232
1233
  }));
1233
- return (F, t1) => (e(), O(U1, {
1234
+ return (F, t1) => (e(), O(Y1, {
1234
1235
  to: "body",
1235
1236
  class: "wpic-popover"
1236
1237
  }, [
@@ -1574,7 +1575,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1574
1575
  const d = r.content.trim();
1575
1576
  return d === "Generating image..." || R(d);
1576
1577
  }
1577
- function q1(r) {
1578
+ function Q1(r) {
1578
1579
  return r.replace(/\[PROMPT\]([\s\S]*?)\[\/PROMPT\]/gi, "$1").replace(/\[SETTING\s+[^\]]*\]([\s\S]*?)\[\/SETTING\]/gi, "$1").replace(/\[TASK(?:\s+[^\]]*)?\]([\s\S]*?)\[\/TASK\]/gi, "").replace(/^\s*\[TASK(?:\s+[^\]]*)?\]\s*$/gim, "");
1579
1580
  }
1580
1581
  function e2(r) {
@@ -1584,7 +1585,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1584
1585
  ).filter(Boolean).join(`
1585
1586
  `);
1586
1587
  }
1587
- function Q1(r) {
1588
+ function J1(r) {
1588
1589
  if (r.role !== "assistant" || r.streaming || r.error) return null;
1589
1590
  const d = U(r.content), u = P1(r.content), V = S(r.content);
1590
1591
  return !d && !u && !V ? null : { prompt: d, taskType: V, settings: u };
@@ -1724,7 +1725,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1724
1725
  function H0(r, d, u) {
1725
1726
  const V = F0(r, d, u);
1726
1727
  if (V !== d) return V;
1727
- const C = Q1(u), A = v1(r);
1728
+ const C = J1(u), A = v1(r);
1728
1729
  if (!C && !A.length) return d;
1729
1730
  const n1 = /(?:prompt\s+(?:modifi[eé]|am[eé]lior[eé]|propos[eé])|prompt)\s*:/i;
1730
1731
  if (C?.prompt && n1.test(r))
@@ -1735,10 +1736,10 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1735
1736
  for (const x1 of A)
1736
1737
  u1 = u1.replace(R1(x1.label), c2(x1.label, "setting", "model", x1.value));
1737
1738
  if (!C?.settings) return u1;
1738
- const k1 = (x1, W1, J1) => {
1739
- if (J1 == null) return;
1739
+ const k1 = (x1, W1, X1) => {
1740
+ if (X1 == null) return;
1740
1741
  const N1 = r.match(x1);
1741
- N1?.[1] && (u1 = u1.replace(R1(N1[1]), c2(N1[1], "setting", W1, J1)));
1742
+ N1?.[1] && (u1 = u1.replace(R1(N1[1]), c2(N1[1], "setting", W1, X1)));
1742
1743
  };
1743
1744
  if ((l1.includes("format") || l1.includes("aspect") || l1.includes("ratio")) && k1(/\b(\d{1,2}:\d{1,2})\b/, "aspect", C.settings.aspect), (l1.includes("résolution") || l1.includes("resolution")) && k1(/\b([1248]K)\b/i, "resolution", C.settings.resolution), (l1.includes("durée") || l1.includes("duration")) && k1(/\b(\d{1,3})\s*(?:s|sec|secondes?|seconds?)\b/i, "duration", C.settings.duration), l1.includes("fps") && k1(/\b(\d{1,3})\s*fps\b/i, "fps", C.settings.fps), C.settings.format) {
1744
1745
  const x1 = r.match(/\b(jpe?g|png|webp)\b/i)?.[1];
@@ -1747,7 +1748,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1747
1748
  return u1;
1748
1749
  }
1749
1750
  function k2(r, d) {
1750
- const u = q1(r);
1751
+ const u = Q1(r);
1751
1752
  let V = R1(u);
1752
1753
  return d?.role === "assistant" && !d.streaming && !d.error && (V = H0(u, V, d)), V = V.replace(/`([^`]+)`/g, "<code>$1</code>").replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+)__/g, "<strong>$1</strong>").replace(/\*([^*]+)\*/g, "<em>$1</em>").replace(/_([^_]+)_/g, "<em>$1</em>").replace(/\[([^\]]+)\]\(((?:https?:\/\/|\/(?!\/))[^)\s]+)\)/g, (C, A, n1) => {
1753
1754
  const u1 = /^https?:\/\//.test(n1) ? ' target="_blank" rel="noopener noreferrer"' : "";
@@ -1764,7 +1765,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1764
1765
  return `${F1}
1765
1766
 
1766
1767
  [[WPIC_CHAT_APPLY_PROMPT_${S2}]]`;
1767
- }), V = q1(u).replace(/\r\n/g, `
1768
+ }), V = Q1(u).replace(/\r\n/g, `
1768
1769
  `).split(`
1769
1770
  `), C = [];
1770
1771
  let A = !1, n1 = [], l1 = !1, u1 = !1;
@@ -1775,7 +1776,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1775
1776
  }, W1 = () => {
1776
1777
  A && (C.push(`<pre><code>${R1(n1.join(`
1777
1778
  `))}</code></pre>`), n1 = [], A = !1);
1778
- }, J1 = (L1) => {
1779
+ }, X1 = (L1) => {
1779
1780
  const F1 = L1.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((S1) => S1.trim());
1780
1781
  return F1.length > 1 && F1.every((S1) => /^:?-{3,}:?$/.test(S1));
1781
1782
  }, N1 = (L1) => L1.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((F1) => F1.trim());
@@ -1800,7 +1801,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1800
1801
  x1(), k1();
1801
1802
  continue;
1802
1803
  }
1803
- if (!u1 && S1.includes("|") && V[L1 + 1] && J1(V[L1 + 1])) {
1804
+ if (!u1 && S1.includes("|") && V[L1 + 1] && X1(V[L1 + 1])) {
1804
1805
  k1();
1805
1806
  const K1 = N1(S1);
1806
1807
  C.push('<div class="wpic-chat-table-wrap"><table><thead><tr>'), C.push(K1.map((O2) => `<th>${k2(O2, r)}</th>`).join("")), C.push("</tr></thead><tbody>"), u1 = !0, L1 += 1;
@@ -1829,7 +1830,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1829
1830
  x1(), k1(), C.push(`<p>${k2(S1, r)}</p>`);
1830
1831
  }
1831
1832
  W1(), x1(), k1();
1832
- const i2 = E2(r).find((L1) => L1.type === "apply_all" && !L1.exactText), O1 = Q1(r);
1833
+ const i2 = E2(r).find((L1) => L1.type === "apply_all" && !L1.exactText), O1 = J1(r);
1833
1834
  if (!(r.role === "assistant" && o1(r.content))) {
1834
1835
  if (i2)
1835
1836
  C.push(`<p class="wpic-chat-actions-end">${e0(i2, c.applyAllLabel)}</p>`);
@@ -1907,7 +1908,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
1907
1908
  const u = d.target instanceof Element ? d.target.closest("[data-wpic-chat-action]") : null;
1908
1909
  if (u) {
1909
1910
  d.preventDefault(), d.stopPropagation();
1910
- const A = u.dataset.wpicChatAction, n1 = Q1(r);
1911
+ const A = u.dataset.wpicChatAction, n1 = J1(r);
1911
1912
  if (A === "metadata") {
1912
1913
  const l1 = u.dataset.wpicChatActionId, u1 = l1 ? A0(r, l1) : null;
1913
1914
  u1 && B2(r, u1);
@@ -2060,9 +2061,9 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
2060
2061
  if (!u) return;
2061
2062
  a1.value = !0;
2062
2063
  const V = r.clientX, C = r.clientY, A = u.width, n1 = u.height, l1 = u.left, u1 = u.top, k1 = (W1) => {
2063
- const J1 = W1.clientX - V, N1 = W1.clientY - C;
2064
+ const X1 = W1.clientX - V, N1 = W1.clientY - C;
2064
2065
  let i2 = A, O1 = n1, L1 = l1, F1 = u1;
2065
- d.includes("e") && (i2 = Math.max(c.minWidth, A + J1)), d.includes("s") && (O1 = Math.max(c.minHeight, n1 + N1)), d.includes("w") && (i2 = Math.max(c.minWidth, A - J1), L1 = l1 + (A - i2)), d.includes("n") && (O1 = Math.max(c.minHeight, n1 - N1), F1 = Math.max(c.topOffset, u1 + (n1 - O1))), s("update:width", Math.min(i2, window.innerWidth)), s("update:height", Math.min(O1, window.innerHeight - c.topOffset)), c.docked || (s("update:x", Math.max(0, L1)), s("update:y", Math.max(c.topOffset, F1)));
2066
+ d.includes("e") && (i2 = Math.max(c.minWidth, A + X1)), d.includes("s") && (O1 = Math.max(c.minHeight, n1 + N1)), d.includes("w") && (i2 = Math.max(c.minWidth, A - X1), L1 = l1 + (A - i2)), d.includes("n") && (O1 = Math.max(c.minHeight, n1 - N1), F1 = Math.max(c.topOffset, u1 + (n1 - O1))), s("update:width", Math.min(i2, window.innerWidth)), s("update:height", Math.min(O1, window.innerHeight - c.topOffset)), c.docked || (s("update:x", Math.max(0, L1)), s("update:y", Math.max(c.topOffset, F1)));
2066
2067
  }, x1 = () => {
2067
2068
  a1.value = !1, document.removeEventListener("mousemove", k1), document.removeEventListener("mouseup", x1);
2068
2069
  };
@@ -2085,7 +2086,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
2085
2086
  x2(), H1(t1), document.addEventListener("pointerdown", i0, !0);
2086
2087
  }), s2(() => {
2087
2088
  F?.disconnect(), z && window.clearTimeout(z), r2(), document.removeEventListener("pointerdown", i0, !0);
2088
- }), (r, d) => (e(), O(U1, { to: "body" }, [
2089
+ }), (r, d) => (e(), O(Y1, { to: "body" }, [
2089
2090
  L(w2, {
2090
2091
  "enter-active-class": "wpic:transition-opacity wpic:duration-150",
2091
2092
  "enter-from-class": "wpic:opacity-0",
@@ -2395,7 +2396,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
2395
2396
  ]),
2396
2397
  _: 1
2397
2398
  }),
2398
- (e(), O(U1, { to: "body" }, [
2399
+ (e(), O(Y1, { to: "body" }, [
2399
2400
  q.value === `loose-${u.id}` ? (e(), t("div", {
2400
2401
  key: 0,
2401
2402
  style: h1(D.value),
@@ -2577,7 +2578,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
2577
2578
  title: n.copyLabel,
2578
2579
  onClick: (C) => U0(u.content, j2(u, V))
2579
2580
  }, [
2580
- (e(), O(B1(a.value === j2(u, V) ? m(Y1) : m(v3)), { size: 14 }))
2581
+ (e(), O(B1(a.value === j2(u, V) ? m(q1) : m(v3)), { size: 14 }))
2581
2582
  ], 8, q4),
2582
2583
  u.role === "user" ? (e(), t("button", {
2583
2584
  key: 1,
@@ -3131,7 +3132,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
3131
3132
  key: 0,
3132
3133
  class: g(Z(E.value) ? "wpic:flex wpic:items-center wpic:justify-center wpic:w-3.5 wpic:h-3.5 wpic:rounded wpic:shrink-0 wpic:border wpic:border-indigo-500 wpic:bg-indigo-500" : "wpic:flex wpic:items-center wpic:justify-center wpic:w-3.5 wpic:h-3.5 wpic:rounded wpic:shrink-0 wpic:border wpic:border-zinc-300 wpic:dark:border-zinc-600 wpic:bg-transparent")
3133
3134
  }, [
3134
- Z(E.value) ? (e(), O(m(Y1), {
3135
+ Z(E.value) ? (e(), O(m(q1), {
3135
3136
  key: 0,
3136
3137
  size: 9,
3137
3138
  style: { color: "white" },
@@ -3271,7 +3272,7 @@ const I5 = ["data-wpic-theme"], n2 = /* @__PURE__ */ X({
3271
3272
  class: "wpic:shrink-0 wpic:text-zinc-400"
3272
3273
  })) : h("", !0),
3273
3274
  i("span", D6, v(o.label), 1),
3274
- n.modelValue === o.value ? (e(), O(m(Y1), {
3275
+ n.modelValue === o.value ? (e(), O(m(q1), {
3275
3276
  key: 2,
3276
3277
  size: 13,
3277
3278
  class: "wpic:shrink-0 wpic:text-indigo-500"
@@ -3366,7 +3367,7 @@ const R6 = {
3366
3367
  return M1(() => [c.disabled, c.checkable, c.editable], () => {
3367
3368
  (c.disabled || c.checkable || !c.editable) && (f.value = !1);
3368
3369
  }), (M, x) => (e(), t(I, null, [
3369
- (e(), O(B1(b.value && !n.removable ? "button" : "span"), X1({
3370
+ (e(), O(B1(b.value && !n.removable ? "button" : "span"), U1({
3370
3371
  ref_key: "anchorRef",
3371
3372
  ref: l
3372
3373
  }, { ...k.value ? {} : a.value, ...b.value && !n.removable ? P.value : {} }, {
@@ -3382,7 +3383,7 @@ const R6 = {
3382
3383
  onClick: x[2] || (x[2] = (z) => !n.removable && W())
3383
3384
  }), {
3384
3385
  default: s1(() => [
3385
- (e(), O(B1(k.value ? "button" : "span"), X1(k.value ? { ...a.value, ...P.value } : {}, {
3386
+ (e(), O(B1(k.value ? "button" : "span"), U1(k.value ? { ...a.value, ...P.value } : {}, {
3386
3387
  class: k.value ? "wpic:inline-flex wpic:items-center wpic:gap-1.5 wpic:bg-transparent wpic:p-0 wpic:[font:inherit] wpic:cursor-pointer wpic:disabled:cursor-not-allowed wpic:focus-visible:outline-2 wpic:focus-visible:outline-offset-2 wpic:focus-visible:outline-current" : "wpic:contents",
3387
3388
  onClick: x[0] || (x[0] = (z) => k.value && W())
3388
3389
  }), {
@@ -3673,7 +3674,7 @@ const R6 = {
3673
3674
  emits: ["close"],
3674
3675
  setup(n, { emit: w }) {
3675
3676
  const c = V2(), s = w, p = H(!1);
3676
- return g2("wpic-pagination-url-sync", !1), (l, o) => (e(), O(U1, { to: "body" }, [
3677
+ return g2("wpic-pagination-url-sync", !1), (l, o) => (e(), O(Y1, { to: "body" }, [
3677
3678
  i("div", {
3678
3679
  style: h1(m(c)?.variables),
3679
3680
  "data-wpic-theme": m(c)?.mode,
@@ -3740,7 +3741,7 @@ const R6 = {
3740
3741
  emits: ["close"],
3741
3742
  setup(n, { emit: w }) {
3742
3743
  const c = w;
3743
- return g2("wpic-pagination-url-sync", !1), (s, p) => (e(), O(U1, { to: "body" }, [
3744
+ return g2("wpic-pagination-url-sync", !1), (s, p) => (e(), O(Y1, { to: "body" }, [
3744
3745
  i("div", {
3745
3746
  class: g(["wpic:flex wpic:items-center wpic:justify-center wpic:bg-black/50 wpic:backdrop-blur-sm wpic:px-4", n.zIndex ?? "wpic:z-[60]"]),
3746
3747
  style: { position: "fixed", top: "0", left: "0", right: "0", bottom: "0", width: "100vw", height: "100vh" },
@@ -3818,7 +3819,7 @@ const R6 = {
3818
3819
  __name: "ToastContainer",
3819
3820
  setup(n) {
3820
3821
  const w = M9();
3821
- return (c, s) => (e(), O(U1, { to: "body" }, [
3822
+ return (c, s) => (e(), O(Y1, { to: "body" }, [
3822
3823
  i("div", V9, [
3823
3824
  L(n3, {
3824
3825
  tag: "div",
@@ -4008,7 +4009,7 @@ const R6 = {
4008
4009
  }, [
4009
4010
  i("span", K9, v(f + 1), 1),
4010
4011
  i("span", U9, v(o.label), 1),
4011
- o.completed ? (e(), O(m(Y1), {
4012
+ o.completed ? (e(), O(m(q1), {
4012
4013
  key: 0,
4013
4014
  size: 17,
4014
4015
  class: "wpic:shrink-0 wpic:text-indigo-500",
@@ -4085,7 +4086,7 @@ const vi = /* @__PURE__ */ I1(t7, [["render", l7]]), a7 = ["placeholder", "rows"
4085
4086
  emits: ["update:modelValue"],
4086
4087
  setup(n) {
4087
4088
  const w = G1(n, "modelValue");
4088
- return (c, s) => T1((e(), t("textarea", X1({
4089
+ return (c, s) => T1((e(), t("textarea", U1({
4089
4090
  "onUpdate:modelValue": s[0] || (s[0] = (p) => w.value = p),
4090
4091
  placeholder: n.placeholder ?? "",
4091
4092
  rows: n.rows ?? 4
@@ -4111,7 +4112,7 @@ const vi = /* @__PURE__ */ I1(t7, [["render", l7]]), a7 = ["placeholder", "rows"
4111
4112
  emits: ["update:modelValue"],
4112
4113
  setup(n) {
4113
4114
  const w = G1(n, "modelValue");
4114
- return (c, s) => T1((e(), t("input", X1({
4115
+ return (c, s) => T1((e(), t("input", U1({
4115
4116
  "onUpdate:modelValue": s[0] || (s[0] = (p) => w.value = p),
4116
4117
  type: n.type ?? "text",
4117
4118
  placeholder: n.placeholder ?? ""
@@ -4141,7 +4142,7 @@ const vi = /* @__PURE__ */ I1(t7, [["render", l7]]), a7 = ["placeholder", "rows"
4141
4142
  emits: ["update:modelValue"],
4142
4143
  setup(n) {
4143
4144
  const w = G1(n, "modelValue");
4144
- return (c, s) => T1((e(), t("select", X1({
4145
+ return (c, s) => T1((e(), t("select", U1({
4145
4146
  "onUpdate:modelValue": s[0] || (s[0] = (p) => w.value = p)
4146
4147
  }, c.$attrs, {
4147
4148
  class: [
@@ -4451,7 +4452,7 @@ const xi = /* @__PURE__ */ I1(P7, [["render", T7]]), yi = /* @__PURE__ */ X({
4451
4452
  emits: ["confirm", "cancel"],
4452
4453
  setup(n, { emit: w }) {
4453
4454
  const c = w;
4454
- return g2("wpic-pagination-url-sync", !1), (s, p) => (e(), O(U1, { to: "body" }, [
4455
+ return g2("wpic-pagination-url-sync", !1), (s, p) => (e(), O(Y1, { to: "body" }, [
4455
4456
  i("div", {
4456
4457
  class: "wpic:fixed wpic:inset-0 wpic:flex wpic:items-center wpic:justify-center wpic:bg-black/60 wpic:backdrop-blur-sm",
4457
4458
  style: { "z-index": "100010" },
@@ -4586,7 +4587,7 @@ const Bi = /* @__PURE__ */ X({
4586
4587
  function b() {
4587
4588
  s("update:modelValue", !1);
4588
4589
  }
4589
- return (k, a) => (e(), O(U1, {
4590
+ return (k, a) => (e(), O(Y1, {
4590
4591
  to: "body",
4591
4592
  class: "wpic-slide-panel"
4592
4593
  }, [
@@ -5055,7 +5056,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5055
5056
  class: "wpic:p-0.5 wpic:text-zinc-400 wpic:dark:text-zinc-500 wpic:hover:text-green-500 wpic:transition",
5056
5057
  onClick: (C1) => o1(_)
5057
5058
  }, [
5058
- L(m(Y1), { size: 12 })
5059
+ L(m(q1), { size: 12 })
5059
5060
  ], 8, g8),
5060
5061
  i("button", {
5061
5062
  class: "wpic:p-0.5 wpic:text-zinc-400 wpic:dark:text-zinc-500 wpic:hover:text-gray-900 wpic:dark:hover:text-white wpic:transition",
@@ -5385,6 +5386,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5385
5386
  ]));
5386
5387
  }
5387
5388
  }), W8 = ["data-wpic-theme"], D8 = /* @__PURE__ */ X({
5389
+ inheritAttrs: !1,
5388
5390
  __name: "WTooltip",
5389
5391
  props: {
5390
5392
  content: {},
@@ -5421,20 +5423,21 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5421
5423
  return s2(M), M1(() => w.disabled, (x) => {
5422
5424
  x && M();
5423
5425
  }), (x, z) => (e(), t(I, null, [
5424
- i("span", {
5426
+ i("span", U1({
5425
5427
  ref_key: "reference",
5426
- ref: s,
5427
- class: g(["wpic-tooltip", w.inline === !1 ? void 0 : "wpic:inline-flex"]),
5428
+ ref: s
5429
+ }, x.$attrs, {
5430
+ class: ["wpic-tooltip", w.inline === !1 ? "wpic:block" : "wpic:inline-flex"],
5428
5431
  onMouseenter: W,
5429
5432
  onMouseleave: M,
5430
5433
  onClickCapture: M,
5431
5434
  onFocusin: W,
5432
5435
  onFocusout: M,
5433
5436
  onKeydown: M2(M, ["esc"])
5434
- }, [
5437
+ }), [
5435
5438
  Q(x.$slots, "default")
5436
- ], 34),
5437
- (e(), O(U1, { to: "body" }, [
5439
+ ], 16),
5440
+ (e(), O(Y1, { to: "body" }, [
5438
5441
  L(w2, {
5439
5442
  "enter-active-class": "wpic:transition-opacity wpic:duration-150 wpic:ease-out",
5440
5443
  "enter-from-class": "wpic:opacity-0",
@@ -5785,7 +5788,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5785
5788
  key: 2,
5786
5789
  class: g(["wpic-pill-indicator", n.multiple ? "wpic:rounded-[4px]" : "wpic:rounded-full", s(k.value) ? "wpic-pill-indicator--active" : "wpic-pill-indicator--idle"])
5787
5790
  }, [
5788
- n.multiple && s(k.value) ? (e(), O(m(Y1), {
5791
+ n.multiple && s(k.value) ? (e(), O(m(q1), {
5789
5792
  key: 0,
5790
5793
  size: 10,
5791
5794
  "stroke-width": "2.8"
@@ -5820,7 +5823,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5820
5823
  key: 2,
5821
5824
  class: g(["wpic-pill-indicator", n.multiple ? "wpic:rounded-[4px]" : "wpic:rounded-full", s(k.value) ? "wpic-pill-indicator--active" : "wpic-pill-indicator--idle"])
5822
5825
  }, [
5823
- n.multiple && s(k.value) ? (e(), O(m(Y1), {
5826
+ n.multiple && s(k.value) ? (e(), O(m(q1), {
5824
5827
  key: 0,
5825
5828
  size: 10,
5826
5829
  "stroke-width": "2.8"
@@ -5944,7 +5947,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
5944
5947
  class: "wpic:w-full wpic:h-full wpic:object-cover"
5945
5948
  }, null, 8, bn),
5946
5949
  n.selected ? (e(), t("div", gn, [
5947
- L(m(Y1), {
5950
+ L(m(q1), {
5948
5951
  size: 20,
5949
5952
  class: "wpic:text-white wpic:drop-shadow"
5950
5953
  })
@@ -6169,7 +6172,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
6169
6172
  class: "wpic:shrink-0 wpic:text-base",
6170
6173
  style: h1({ width: z.width ?? "150px" })
6171
6174
  }, [
6172
- L(Y2, X1({ ref_for: !0 }, n.selectLabels, {
6175
+ L(Y2, U1({ ref_for: !0 }, n.selectLabels, {
6173
6176
  "model-value": o(z.modelKey),
6174
6177
  options: z.options,
6175
6178
  placeholder: z.placeholder,
@@ -6201,7 +6204,7 @@ const Q7 = { class: "wpic-tag-input" }, J7 = {
6201
6204
  "onUpdate:modelValue": (a1) => a(z.modelKey, a1)
6202
6205
  }, null, 8, ["model-value", "options", "size", "multiple", "grouped", "class", "onUpdate:modelValue"]),
6203
6206
  z.responsive === "select" ? (e(), t("div", Fn, [
6204
- L(Y2, X1({ ref_for: !0 }, n.selectLabels, {
6207
+ L(Y2, U1({ ref_for: !0 }, n.selectLabels, {
6205
6208
  "model-value": o(z.modelKey),
6206
6209
  options: z.options,
6207
6210
  clearable: !1,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wpic/ui",
3
- "version": "0.9.14",
3
+ "version": "0.9.16",
4
4
  "type": "module",
5
5
  "description": "WPIC shared Vue 3 component library",
6
6
  "publishConfig": {
package/src/style.css CHANGED
@@ -474,6 +474,11 @@ input[type="range"].wpic-legacy-slider-themed::-webkit-slider-thumb {
474
474
  background: inherit;
475
475
  }
476
476
 
477
+ /* Optional vertical rules between cells, matching the row separators. */
478
+ .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left: 1px solid #f4f4f5; }
479
+ .dark .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left-color: #27272a; }
480
+ .wpic-theme .wpic-table--column-dividers :is(th, td) + :is(th, td) { border-left-color: var(--wpic-table-border, var(--wpic-border)); }
481
+
477
482
  /* Match row separators to the enclosing themed card in both modes. */
478
483
  .wpic-theme .wpic-table__divider,
479
484
  .wpic-theme .wpic-card--bordered:has(> .wpic-card__body > .wpic-table) {