@leaflink/stash 53.4.5 → 53.4.7

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 (62) hide show
  1. package/dist/AppSidebar.js +43 -41
  2. package/dist/AppSidebar.js.map +1 -1
  3. package/dist/AppTopbar.js +1 -1
  4. package/dist/Copy.js +1 -1
  5. package/dist/DataTable/index.js +2400 -0
  6. package/dist/DataTable/index.js.map +1 -0
  7. package/dist/DataViewFilters.js +1 -1
  8. package/dist/DataViewFilters.js.map +1 -1
  9. package/dist/DataViewToolbar.js +139 -125
  10. package/dist/DataViewToolbar.js.map +1 -1
  11. package/dist/DatePicker.js +1114 -1113
  12. package/dist/DatePicker.js.map +1 -1
  13. package/dist/Modal.js +104 -90
  14. package/dist/Modal.js.map +1 -1
  15. package/dist/MoreActions.js +294 -288
  16. package/dist/MoreActions.js.map +1 -1
  17. package/dist/PageNavigation.js +1 -1
  18. package/dist/RadioGroup.js +69 -62
  19. package/dist/RadioGroup.js.map +1 -1
  20. package/dist/Select.js +90 -90
  21. package/dist/Select.js.map +1 -1
  22. package/dist/Stepper.js +1 -1
  23. package/dist/Tab.js +1 -1
  24. package/dist/Table.js +36 -36
  25. package/dist/Table.js.map +1 -1
  26. package/dist/Table.vue.d.ts +12 -0
  27. package/dist/TableCell.js +17 -17
  28. package/dist/TableCell.js.map +1 -1
  29. package/dist/TableHeaderCell.js +44 -38
  30. package/dist/TableHeaderCell.js.map +1 -1
  31. package/dist/TableHeaderCell.vue.d.ts +10 -0
  32. package/dist/TableHeaderRow.js +32 -32
  33. package/dist/TableHeaderRow.js.map +1 -1
  34. package/dist/TableRow.js +82 -74
  35. package/dist/TableRow.js.map +1 -1
  36. package/dist/TableRow.vue.d.ts +9 -2
  37. package/dist/Tabs.js +2 -2
  38. package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js +131 -0
  39. package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js.map +1 -0
  40. package/dist/Thumbnail.js +42 -42
  41. package/dist/Thumbnail.js.map +1 -1
  42. package/dist/Toast.vue.d.ts +1 -1
  43. package/dist/Tooltip.js +1 -1
  44. package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js} +2 -2
  45. package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js.map → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js.map} +1 -1
  46. package/dist/components.css +1 -1
  47. package/dist/getContrastingTextColor.d.ts +8 -0
  48. package/dist/index-t9tXBnql.js +469 -0
  49. package/dist/{index-DA70nQCT.js.map → index-t9tXBnql.js.map} +1 -1
  50. package/dist/templateRefNarrowing-CeANDylX.js +22 -0
  51. package/dist/templateRefNarrowing-CeANDylX.js.map +1 -0
  52. package/dist/useMediaQuery.d.ts +12 -10
  53. package/dist/useMediaQuery.js +7 -29
  54. package/dist/useMediaQuery.js.map +1 -1
  55. package/dist/useSortable.js +1 -1
  56. package/dist/utils/getContrastingTextColor.js +36 -24
  57. package/dist/utils/getContrastingTextColor.js.map +1 -1
  58. package/package.json +7 -1
  59. package/types/tanstack-vue-table.d.ts +18 -0
  60. package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js +0 -130
  61. package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js.map +0 -1
  62. package/dist/index-DA70nQCT.js +0 -424
@@ -40,6 +40,7 @@ emptyStateText: string;
40
40
  hasActions: boolean;
41
41
  hasCustomExpandToggle: boolean;
42
42
  isEmpty: boolean;
43
+ isSchemaDriven: boolean;
43
44
  isLoading: boolean;
44
45
  isExpandable: boolean;
45
46
  isSelectable: boolean;
@@ -52,6 +53,7 @@ emptyStateText: string;
52
53
  hasActions: boolean;
53
54
  hasCustomExpandToggle: boolean;
54
55
  isEmpty: boolean;
56
+ isSchemaDriven: boolean;
55
57
  isLoading: boolean;
56
58
  isExpandable: boolean;
57
59
  isSelectable: boolean;
@@ -68,6 +70,7 @@ emptyStateText: string;
68
70
  hasActions: boolean;
69
71
  layout: "scroll" | "stack";
70
72
  hasCustomExpandToggle: boolean;
73
+ isSchemaDriven: boolean;
71
74
  isExpandable: boolean;
72
75
  stickyHeader: {
73
76
  listLength: number;
@@ -119,6 +122,10 @@ export declare interface TableInjection {
119
122
  * If true, hides the default expansion toggle column
120
123
  */
121
124
  hasCustomExpandToggle: ComputedRef<boolean>;
125
+ /**
126
+ * When true, the table is schema-driven (e.g. DataTable); selection column is rendered from the schema, not by TableRow/TableHeaderRow.
127
+ */
128
+ isSchemaDriven?: ComputedRef<boolean>;
122
129
  /**
123
130
  * Adds a toggle column for row expansion. This is primarily needed for ensuring the corresponding empty TableHeaderRow is included.
124
131
  */
@@ -158,6 +165,11 @@ export declare interface TableProps {
158
165
  * Shows the empty state
159
166
  */
160
167
  isEmpty?: boolean;
168
+ /**
169
+ * When true, indicates the table is being composed by DataTable (schema-driven mode).
170
+ * TableRow/TableHeaderRow use this to suppress their built-in selection cells.
171
+ */
172
+ isSchemaDriven?: boolean;
161
173
  /**
162
174
  * Shows the loading state
163
175
  */
package/dist/TableCell.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defineComponent as _, useCssModule as p, inject as d, createElementBlock as r, openBlock as c, normalizeClass as u, unref as o, createCommentVNode as f, renderSlot as y, toDisplayString as h } from "vue";
1
+ import { defineComponent as _, useCssModule as p, inject as d, createElementBlock as r, openBlock as c, normalizeClass as f, unref as o, createCommentVNode as u, renderSlot as y, toDisplayString as b } from "vue";
2
2
  import "lodash-es/uniqueId";
3
3
  import "lodash-es/cloneDeep";
4
4
  import "./Module.keys-DcqBbvvT.js";
@@ -6,24 +6,24 @@ import "lodash-es/get";
6
6
  import "./DataView.keys-aSOnA4AD.js";
7
7
  import "./Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js";
8
8
  import "@leaflink/snitch";
9
- import { T as b } from "./Table.keys-LHQf6FEH.js";
10
- import { _ as C } from "./_plugin-vue_export-helper-CHgC5LLL.js";
11
- const k = {
9
+ import { T as g } from "./Table.keys-LHQf6FEH.js";
10
+ import { _ as h } from "./_plugin-vue_export-helper-CHgC5LLL.js";
11
+ const C = {
12
12
  key: 0,
13
13
  class: "text-xs font-medium text-ice-900 lg:hidden"
14
- }, T = /* @__PURE__ */ _({
14
+ }, k = /* @__PURE__ */ _({
15
15
  __name: "TableCell",
16
16
  props: {
17
17
  isControl: { type: Boolean, default: !1 },
18
18
  mobileHeader: { default: "" }
19
19
  },
20
20
  setup(n) {
21
- const l = n, t = p(), a = d(b.key);
21
+ const l = n, t = p(), a = d(g.key);
22
22
  if (!a)
23
23
  throw new Error("TableCell must be used within a Table component");
24
24
  const { density: e, hasActions: i, layout: s } = a;
25
25
  return (m, E) => (c(), r("td", {
26
- class: u(["stash-table-cell", [
26
+ class: f(["stash-table-cell", [
27
27
  o(t).root,
28
28
  o(t)[`layout--${o(s)}`],
29
29
  {
@@ -39,20 +39,20 @@ const k = {
39
39
  ]]),
40
40
  "data-test": "stash-table-cell"
41
41
  }, [
42
- l.mobileHeader && o(s) === "stack" ? (c(), r("div", k, h(l.mobileHeader), 1)) : f("", !0),
42
+ l.mobileHeader && o(s) === "stack" ? (c(), r("div", C, b(l.mobileHeader), 1)) : u("", !0),
43
43
  y(m.$slots, "default")
44
44
  ], 2));
45
45
  }
46
- }), x = "_root_1hns6_5", g = {
47
- root: x,
48
- "layout--scroll": "_layout--scroll_1hns6_9",
49
- "has-actions": "_has-actions_1hns6_15",
50
- "layout--stack": "_layout--stack_1hns6_19",
51
- "is-control": "_is-control_1hns6_31",
52
- "root--density-comfortable": "_root--density-comfortable_1hns6_55"
46
+ }), T = "_root_1f3ga_5", x = {
47
+ root: T,
48
+ "layout--scroll": "_layout--scroll_1f3ga_9",
49
+ "has-actions": "_has-actions_1f3ga_15",
50
+ "layout--stack": "_layout--stack_1f3ga_19",
51
+ "is-control": "_is-control_1f3ga_31",
52
+ "root--density-comfortable": "_root--density-comfortable_1f3ga_55"
53
53
  }, B = {
54
- $style: g
55
- }, z = /* @__PURE__ */ C(T, [["__cssModules", B]]);
54
+ $style: x
55
+ }, z = /* @__PURE__ */ h(k, [["__cssModules", B]]);
56
56
  export {
57
57
  z as default
58
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TableCell.js","sources":["../src/components/TableCell/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import { TABLE_INJECTION } from '../Table/Table.vue';\n\n export interface TableCellProps {\n /**\n * If true, displays the cell as a control (vs data) cell without a background color on mobile when Table is in the stacked layout\n */\n isControl?: boolean;\n /**\n * If true, displays the header inside the cell on mobile and tablet screens when Table is in the stacked layout\n */\n mobileHeader?: string;\n }\n\n const props = withDefaults(defineProps<TableCellProps>(), {\n isControl: false,\n mobileHeader: '',\n });\n const classes = useCssModule();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n if (!tableInjection) {\n throw new Error('TableCell must be used within a Table component');\n }\n\n const { density, hasActions, layout } = tableInjection;\n</script>\n\n<template>\n <td\n class=\"stash-table-cell\"\n data-test=\"stash-table-cell\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['root--density-compact']]: density === 'compact',\n [classes['root--density-comfortable']]: density === 'comfortable',\n [classes['has-actions']]: hasActions,\n 'p-3': layout === 'scroll',\n 'p-1.5': layout === 'stack',\n 'lg:p-3': density === 'compact',\n 'lg:px-3 lg:py-6': density === 'comfortable',\n [classes['is-control']]: props.isControl,\n },\n ]\"\n >\n <div v-if=\"props.mobileHeader && layout === 'stack'\" class=\"text-xs font-medium text-ice-900 lg:hidden\">\n {{ props.mobileHeader }}\n </div>\n <!-- @slot default -->\n <slot></slot>\n </td>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border: 0;\n }\n\n .layout--scroll {\n background-color: var(--color-white);\n border: none;\n border-bottom: 1px solid var(--color-ice-200);\n }\n\n .layout--scroll.has-actions:last-of-type {\n text-align: center;\n }\n\n .layout--stack {\n background-color: var(--color-ice-100);\n border-radius: var(--radius-sm);\n }\n\n .layout--stack.has-actions:last-of-type {\n background-color: transparent;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n .layout--stack.is-control {\n background-color: transparent;\n }\n\n /* On large screens, layout--stack should match layout--scroll */\n @media (width >= theme(--breakpoint-lg)) {\n .layout--stack {\n background-color: var(--color-white);\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: initial;\n }\n\n .layout--stack.has-actions:last-of-type {\n background-color: var(--color-white);\n position: initial;\n right: initial;\n text-align: center;\n top: initial;\n }\n\n .layout--stack.is-control {\n background-color: var(--color-white);\n }\n\n .root--density-comfortable:last-of-type:not(.has-actions) {\n padding-right: 24px;\n }\n\n .root--density-comfortable:first-of-type:not(\n :global(.stash-table-header-row__selection-cell),\n :global(.stash-table-row__selection-cell),\n :global(.stash-table-row__toggle-expansion-cell)\n ) {\n padding-left: 24px;\n }\n }\n }\n</style>\n"],"names":["props","__props","classes","useCssModule","tableInjection","inject","TABLE_INJECTION","density","hasActions","layout","_createElementBlock","_unref","_openBlock","_hoisted_1","_toDisplayString","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBE,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAAiBC,EAAOC,EAAgB,GAAG;AACjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,iDAAiD;AAGnE,UAAM,EAAE,SAAAG,GAAS,YAAAC,GAAY,QAAAC,EAAA,IAAWL;2BAIxCM,EAuBK,MAAA;AAAA,MAtBH,UAAM,oBAAkB;AAAA,QAERC,EAAAT,CAAA,EAAQ;AAAA,QAAYS,EAAAT,CAAA,aAAmBS,EAAAF,CAAA,CAAM,EAAA;AAAA;UAAsB,CAAAE,EAAAT,CAAA,6BAAmCS,EAAAJ,CAAA,MAAO;AAAA,UAAyB,CAAAI,EAAAT,CAAA,iCAAuCS,EAAAJ,CAAA,MAAO;AAAA,UAA6B,CAAAI,EAAAT,CAAA,mBAAyBS,EAAAH,CAAA;AAAA,iBAA2BG,EAAAF,CAAA,MAAM;AAAA,mBAAgCE,EAAAF,CAAA,MAAM;AAAA,oBAAgCE,EAAAJ,CAAA,MAAO;AAAA,6BAA2CI,EAAAJ,CAAA,MAAO;AAAA,WAA6BI,EAAAT,CAAA,EAAO,YAAA,CAAA,GAAiBF,EAAM;AAAA,QAAA;AAAA;MADrd,aAAU;AAAA,IAAA;MAgBCA,EAAM,gBAAgBW,EAAAF,CAAA,MAAM,WAAvCG,KAAAF,EAEM,OAFNG,GAEMC,EADDd,EAAM,YAAY,GAAA,CAAA;MAGvBe,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TableCell.js","sources":["../src/components/TableCell/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import { TABLE_INJECTION } from '../Table/Table.vue';\n\n export interface TableCellProps {\n /**\n * If true, displays the cell as a control (vs data) cell without a background color on mobile when Table is in the stacked layout\n */\n isControl?: boolean;\n /**\n * If true, displays the header inside the cell on mobile and tablet screens when Table is in the stacked layout\n */\n mobileHeader?: string;\n }\n\n const props = withDefaults(defineProps<TableCellProps>(), {\n isControl: false,\n mobileHeader: '',\n });\n const classes = useCssModule();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n if (!tableInjection) {\n throw new Error('TableCell must be used within a Table component');\n }\n\n const { density, hasActions, layout } = tableInjection;\n</script>\n\n<template>\n <td\n class=\"stash-table-cell\"\n data-test=\"stash-table-cell\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['root--density-compact']]: density === 'compact',\n [classes['root--density-comfortable']]: density === 'comfortable',\n [classes['has-actions']]: hasActions,\n 'p-3': layout === 'scroll',\n 'p-1.5': layout === 'stack',\n 'lg:p-3': density === 'compact',\n 'lg:px-3 lg:py-6': density === 'comfortable',\n [classes['is-control']]: props.isControl,\n },\n ]\"\n >\n <div v-if=\"props.mobileHeader && layout === 'stack'\" class=\"text-xs font-medium text-ice-900 lg:hidden\">\n {{ props.mobileHeader }}\n </div>\n <!-- @slot default -->\n <slot></slot>\n </td>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border: 0;\n }\n\n .layout--scroll {\n background-color: var(--color-white);\n border: none;\n border-bottom: 1px solid var(--color-ice-200);\n }\n\n .layout--scroll.has-actions:last-of-type {\n text-align: center;\n }\n\n .layout--stack {\n background-color: var(--color-ice-100);\n border-radius: var(--radius-sm);\n }\n\n .layout--stack.has-actions:last-of-type {\n background-color: transparent;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n .layout--stack.is-control {\n background-color: transparent;\n }\n\n /* On large screens, layout--stack should match layout--scroll */\n @media (width >= theme(--breakpoint-lg)) {\n .layout--stack {\n background-color: var(--color-white);\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: initial;\n }\n\n .layout--stack.has-actions:last-of-type {\n background-color: var(--color-white);\n position: initial;\n right: initial;\n text-align: center;\n top: initial;\n }\n\n .layout--stack.is-control {\n background-color: var(--color-white);\n }\n\n .root--density-comfortable:last-of-type:not(.has-actions) {\n padding-right: 24px;\n }\n\n .root--density-comfortable:first-of-type:not(\n :global(.stash-table-header-row__selection-cell),\n :global(.stash-table-row__selection-cell),\n :global(.stash-table-row__toggle-expansion-cell),\n :global(.stash-table-cell__is-selection-cell),\n :global(.stash-table-cell__is-expansion-cell)\n ) {\n padding-left: 24px;\n }\n }\n }\n</style>\n"],"names":["props","__props","classes","useCssModule","tableInjection","inject","TABLE_INJECTION","density","hasActions","layout","_createElementBlock","_unref","_openBlock","_hoisted_1","_toDisplayString","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBE,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAAiBC,EAAOC,EAAgB,GAAG;AACjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,iDAAiD;AAGnE,UAAM,EAAE,SAAAG,GAAS,YAAAC,GAAY,QAAAC,EAAA,IAAWL;2BAIxCM,EAuBK,MAAA;AAAA,MAtBH,UAAM,oBAAkB;AAAA,QAERC,EAAAT,CAAA,EAAQ;AAAA,QAAYS,EAAAT,CAAA,aAAmBS,EAAAF,CAAA,CAAM,EAAA;AAAA;UAAsB,CAAAE,EAAAT,CAAA,6BAAmCS,EAAAJ,CAAA,MAAO;AAAA,UAAyB,CAAAI,EAAAT,CAAA,iCAAuCS,EAAAJ,CAAA,MAAO;AAAA,UAA6B,CAAAI,EAAAT,CAAA,mBAAyBS,EAAAH,CAAA;AAAA,iBAA2BG,EAAAF,CAAA,MAAM;AAAA,mBAAgCE,EAAAF,CAAA,MAAM;AAAA,oBAAgCE,EAAAJ,CAAA,MAAO;AAAA,6BAA2CI,EAAAJ,CAAA,MAAO;AAAA,WAA6BI,EAAAT,CAAA,EAAO,YAAA,CAAA,GAAiBF,EAAM;AAAA,QAAA;AAAA;MADrd,aAAU;AAAA,IAAA;MAgBCA,EAAM,gBAAgBW,EAAAF,CAAA,MAAM,WAAvCG,KAAAF,EAEM,OAFNG,GAEMC,EADDd,EAAM,YAAY,GAAA,CAAA;MAGvBe,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;"}
@@ -1,72 +1,78 @@
1
- import { defineComponent as I, useCssModule as k, inject as p, computed as m, createElementBlock as _, openBlock as r, normalizeClass as s, unref as e, createElementVNode as T, renderSlot as E, createCommentVNode as n, createBlock as f } from "vue";
1
+ import { defineComponent as k, useCssModule as D, inject as h, computed as s, createElementBlock as b, openBlock as c, normalizeClass as n, unref as e, createElementVNode as T, renderSlot as g, createCommentVNode as d, createBlock as x } from "vue";
2
2
  import "lodash-es/cloneDeep";
3
3
  import "./Module.keys-DcqBbvvT.js";
4
4
  import "lodash-es/get";
5
- import b from "./Icon.js";
6
- import { D as v } from "./DataView.keys-aSOnA4AD.js";
5
+ import w from "./Icon.js";
6
+ import { D as y } from "./DataView.keys-aSOnA4AD.js";
7
7
  import "./Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js";
8
8
  import "lodash-es/uniqueId";
9
9
  import "@leaflink/snitch";
10
- import { T as N } from "./Table.keys-LHQf6FEH.js";
11
- import { _ as S } from "./_plugin-vue_export-helper-CHgC5LLL.js";
10
+ import { T as E } from "./Table.keys-LHQf6FEH.js";
11
+ import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.js";
12
12
  const A = {
13
13
  key: 0,
14
14
  class: "relative h-4 w-3"
15
- }, B = /* @__PURE__ */ I({
15
+ }, B = /* @__PURE__ */ k({
16
16
  __name: "TableHeaderCell",
17
17
  props: {
18
- sortId: { default: "" }
18
+ sortId: { default: "" },
19
+ schemaDrivenHeader: { default: void 0 }
19
20
  },
20
- setup(h) {
21
- const a = h, t = k(), l = p(N.key);
22
- if (!l)
21
+ setup(I) {
22
+ const r = I, t = D(), m = h(E.key);
23
+ if (!m)
23
24
  throw new Error("TableHeaderCell must be used within a Table component");
24
- const { density: i, hasActions: x } = l, { currentSortId: w, currentSortOrder: d, updateCurrentSort: u } = p(
25
- v.key,
26
- v.defaults
27
- ), c = m(() => !!a.sortId), o = m(() => w.value === a.sortId);
28
- function y() {
29
- c.value && typeof u == "function" && u(a.sortId, { shouldEmit: !0 });
25
+ const { density: p, hasActions: C } = m, a = s(() => !!r.schemaDrivenHeader), { currentSortId: H, currentSortOrder: v, updateCurrentSort: _ } = h(
26
+ y.key,
27
+ y.defaults
28
+ ), l = s(() => a.value ? r.schemaDrivenHeader.column.getCanSort() : !!r.sortId), o = s(() => a.value ? !!r.schemaDrivenHeader.column.getIsSorted() : H.value === r.sortId), f = s(() => a.value ? r.schemaDrivenHeader.column.getIsSorted() : o.value && v.value ? v.value : !1);
29
+ function S(i) {
30
+ var u;
31
+ if (a.value) {
32
+ (u = r.schemaDrivenHeader.column.getToggleSortingHandler()) == null || u(i);
33
+ return;
34
+ }
35
+ l.value && typeof _ == "function" && _(r.sortId, { shouldEmit: !0 });
30
36
  }
31
- return (C, O) => (r(), _("th", {
32
- class: s(["stash-table-header-cell border-b border-r border-ice-200 p-3 text-xs font-medium text-ice-900", [
37
+ return (i, u) => (c(), b("th", {
38
+ class: n(["stash-table-header-cell border-b border-r border-ice-200 p-3 text-xs font-medium text-ice-900", [
33
39
  e(t).root,
34
40
  {
35
41
  "bg-white": !o.value,
36
42
  "stash-table-header-cell--sorted bg-blue-100": o.value,
37
- [e(t)["root--density-compact"]]: e(i) === "compact",
38
- [e(t)["root--density-comfortable"]]: e(i) === "comfortable",
39
- [e(t)["has-actions"]]: e(x),
40
- "cursor-pointer": c.value
43
+ [e(t)["root--density-compact"]]: e(p) === "compact",
44
+ [e(t)["root--density-comfortable"]]: e(p) === "comfortable",
45
+ [e(t)["has-actions"]]: e(C),
46
+ "cursor-pointer": l.value
41
47
  }
42
48
  ]]),
43
49
  "data-test": "stash-table-header-cell",
44
- onClick: y
50
+ onClick: S
45
51
  }, [
46
52
  T("div", {
47
- class: s(["flex justify-between", e(t)["content-wrapper"]])
53
+ class: n(["flex justify-between", e(t)["content-wrapper"]])
48
54
  }, [
49
- E(C.$slots, "default"),
50
- c.value ? (r(), _("div", A, [
51
- !o.value || e(d) === "asc" ? (r(), f(b, {
55
+ g(i.$slots, "default"),
56
+ l.value ? (c(), b("div", A, [
57
+ !o.value || f.value === "asc" ? (c(), x(w, {
52
58
  key: 0,
53
- class: s(["absolute text-ice-700", [e(t).caret, e(t)["caret-up"]]]),
59
+ class: n(["absolute text-ice-700", [e(t).caret, e(t)["caret-up"]]]),
54
60
  "data-test": "icon|caret-up",
55
61
  name: "caret-up",
56
62
  size: "dense"
57
- }, null, 8, ["class"])) : n("", !0),
58
- !o.value || e(d) === "desc" ? (r(), f(b, {
63
+ }, null, 8, ["class"])) : d("", !0),
64
+ !o.value || f.value === "desc" ? (c(), x(w, {
59
65
  key: 1,
60
- class: s(["absolute text-ice-700", [e(t).caret, e(t)["caret-down"]]]),
66
+ class: n(["absolute text-ice-700", [e(t).caret, e(t)["caret-down"]]]),
61
67
  "data-test": "icon|caret-down",
62
68
  name: "caret-down",
63
69
  size: "dense"
64
- }, null, 8, ["class"])) : n("", !0)
65
- ])) : n("", !0)
70
+ }, null, 8, ["class"])) : d("", !0)
71
+ ])) : d("", !0)
66
72
  ], 2)
67
73
  ], 2));
68
74
  }
69
- }), j = "_root_1xv85_5", z = "_caret_1xv85_21", H = {
75
+ }), j = "_root_1xv85_5", z = "_caret_1xv85_21", M = {
70
76
  root: j,
71
77
  "has-actions": "_has-actions_1xv85_17",
72
78
  "content-wrapper": "_content-wrapper_1xv85_17",
@@ -74,10 +80,10 @@ const A = {
74
80
  "caret-down": "_caret-down_1xv85_25",
75
81
  caret: z,
76
82
  "root--density-comfortable": "_root--density-comfortable_1xv85_34"
77
- }, M = {
78
- $style: H
79
- }, K = /* @__PURE__ */ S(B, [["__cssModules", M]]);
83
+ }, O = {
84
+ $style: M
85
+ }, Q = /* @__PURE__ */ N(B, [["__cssModules", O]]);
80
86
  export {
81
- K as default
87
+ Q as default
82
88
  };
83
89
  //# sourceMappingURL=TableHeaderCell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderCell.js","sources":["../src/components/TableHeaderCell/TableHeaderCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, inject, useCssModule } from 'vue';\n\n import { DATA_VIEW_INJECTION, SortValueDeserialized } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n\n export interface TableHeaderCellProps {\n /**\n * A unique value correlated to the data in this header's column (without a leading hyphen/dash).\n * For example: `'product_name'` (with no leading dash/hyphen).\n */\n sortId?: SortValueDeserialized['id'];\n }\n\n const props = withDefaults(defineProps<TableHeaderCellProps>(), {\n sortId: '',\n });\n const classes = useCssModule();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n if (!tableInjection) {\n throw new Error('TableHeaderCell must be used within a Table component');\n }\n\n const { density, hasActions } = tableInjection;\n\n // #region sorting\n const { currentSortId, currentSortOrder, updateCurrentSort } = inject(\n DATA_VIEW_INJECTION.key,\n DATA_VIEW_INJECTION.defaults,\n );\n const isSortable = computed(() => !!props.sortId);\n const isActiveSort = computed(() => currentSortId.value === props.sortId);\n\n function onRootClick() {\n if (isSortable.value && typeof updateCurrentSort === 'function') {\n updateCurrentSort(props.sortId, { shouldEmit: true });\n }\n }\n // #endregion sorting\n</script>\n\n<template>\n <th\n class=\"stash-table-header-cell border-b border-r border-ice-200 p-3 text-xs font-medium text-ice-900\"\n :class=\"[\n classes.root,\n {\n 'bg-white': !isActiveSort,\n 'stash-table-header-cell--sorted bg-blue-100': isActiveSort,\n [classes['root--density-compact']]: density === 'compact',\n [classes['root--density-comfortable']]: density === 'comfortable',\n [classes['has-actions']]: hasActions,\n 'cursor-pointer': isSortable,\n },\n ]\"\n data-test=\"stash-table-header-cell\"\n @click=\"onRootClick\"\n >\n <div class=\"flex justify-between\" :class=\"classes['content-wrapper']\">\n <!-- @slot default -->\n <slot></slot>\n <div v-if=\"isSortable\" class=\"relative h-4 w-3\">\n <Icon\n v-if=\"!isActiveSort || currentSortOrder === 'asc'\"\n class=\"absolute text-ice-700\"\n :class=\"[classes.caret, classes['caret-up']]\"\n data-test=\"icon|caret-up\"\n name=\"caret-up\"\n size=\"dense\"\n />\n <Icon\n v-if=\"!isActiveSort || currentSortOrder === 'desc'\"\n class=\"absolute text-ice-700\"\n :class=\"[classes.caret, classes['caret-down']]\"\n data-test=\"icon|caret-down\"\n name=\"caret-down\"\n size=\"dense\"\n />\n </div>\n </div>\n </th>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border-left: none;\n border-top: none;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n .root:last-of-type {\n border-right: 0;\n }\n\n .has-actions:last-of-type .content-wrapper {\n justify-content: flex-end !important;\n }\n\n .caret-up {\n top: -5px;\n }\n\n .caret-down {\n top: 2px;\n }\n\n :global(.stash-table-header-cell--sorted) .caret {\n top: -2px; /* vertically center the caret icon */\n }\n\n @media (width >= theme(--breakpoint-lg)) {\n .root--density-comfortable:last-of-type {\n padding-right: 24px;\n }\n\n .root--density-comfortable:first-of-type:not(\n :global(.stash-table-header-row__selection-cell),\n :global(.stash-table-row__selection-cell)\n ) {\n padding-left: 24px;\n }\n }\n }\n</style>\n"],"names":["props","__props","classes","useCssModule","tableInjection","inject","TABLE_INJECTION","density","hasActions","currentSortId","currentSortOrder","updateCurrentSort","DATA_VIEW_INJECTION","isSortable","computed","isActiveSort","onRootClick","_createElementBlock","_unref","_createElementVNode","_normalizeClass","_renderSlot","_ctx","_openBlock","_hoisted_1","_createBlock","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;AAeE,UAAMA,IAAQC,GAGRC,IAAUC,EAAA,GAEVC,IAAiBC,EAAOC,EAAgB,GAAG;AACjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,uDAAuD;AAGzE,UAAM,EAAE,SAAAG,GAAS,YAAAC,EAAA,IAAeJ,GAG1B,EAAE,eAAAK,GAAe,kBAAAC,GAAkB,mBAAAC,EAAA,IAAsBN;AAAA,MAC7DO,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IAAA,GAEhBC,IAAaC,EAAS,MAAM,CAAC,CAACd,EAAM,MAAM,GAC1Ce,IAAeD,EAAS,MAAML,EAAc,UAAUT,EAAM,MAAM;AAExE,aAASgB,IAAc;AACrB,MAAIH,EAAW,SAAS,OAAOF,KAAsB,cACnDA,EAAkBX,EAAM,QAAQ,EAAE,YAAY,IAAM;AAAA,IAExD;2BAKAiB,EAsCK,MAAA;AAAA,MArCH,UAAM,iGAA+F;AAAA,QACrFC,EAAAhB,CAAA,EAAQ;AAAA;uBAAmCa,EAAA;AAAA,yDAAqEA,EAAA;AAAA,UAAuB,CAAAG,EAAAhB,CAAA,6BAAmCgB,EAAAX,CAAA,MAAO;AAAA,UAAyB,CAAAW,EAAAhB,CAAA,iCAAuCgB,EAAAX,CAAA,MAAO;AAAA,UAA6B,CAAAW,EAAAhB,CAAA,mBAAyBgB,EAAAV,CAAA;AAAA,4BAAsCK,EAAA;AAAA,QAAA;AAAA;MAWpW,aAAU;AAAA,MACT,SAAOG;AAAA,IAAA;MAERG,EAqBM,OAAA;AAAA,QArBD,OAAKC,EAAA,CAAC,wBAA+BF,EAAAhB,CAAA,EAAO,iBAAA,CAAA,CAAA;AAAA,MAAA;QAE/CmB,EAAaC,EAAA,QAAA,SAAA;AAAA,QACFT,EAAA,SAAXU,EAAA,GAAAN,EAiBM,OAjBNO,GAiBM;AAAA,UAfK,CAAAT,EAAA,SAAgBG,EAAAR,CAAA,MAAgB,cADzCe,EAOEC,GAAA;AAAA;YALA,UAAM,yBAAuB,CACpBR,KAAQ,OAAOA,EAAAhB,CAAA,EAAO,UAAA,CAAA,CAAA,CAAA;AAAA,YAC/B,aAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;UAGE,CAAAa,EAAA,SAAgBG,EAAAR,CAAA,MAAgB,eADzCe,EAOEC,GAAA;AAAA;YALA,UAAM,yBAAuB,CACpBR,KAAQ,OAAOA,EAAAhB,CAAA,EAAO,YAAA,CAAA,CAAA,CAAA;AAAA,YAC/B,aAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TableHeaderCell.js","sources":["../src/components/TableHeaderCell/TableHeaderCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import type { Header } from '@tanstack/vue-table';\n import { computed, inject, useCssModule } from 'vue';\n\n import { DATA_VIEW_INJECTION, SortValueDeserialized } from '../DataView/DataView.vue';\n import Icon from '../Icon/Icon.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n\n export interface TableHeaderCellProps {\n /**\n * A unique value correlated to the data in this header's column (without a leading hyphen/dash).\n * For example: `'product_name'` (with no leading dash/hyphen).\n */\n sortId?: SortValueDeserialized['id'];\n\n /**\n * TanStack header instance passed when Table is in schema-driven mode.\n * When provided, sorting is controlled by TanStack instead of DataView.\n * Typed as any so DataTable can pass Header<TData, unknown> without a type assertion.\n */\n schemaDrivenHeader?: Header<any, any>;\n }\n\n const props = withDefaults(defineProps<TableHeaderCellProps>(), {\n sortId: '',\n schemaDrivenHeader: undefined,\n });\n const classes = useCssModule();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n if (!tableInjection) {\n throw new Error('TableHeaderCell must be used within a Table component');\n }\n\n const { density, hasActions } = tableInjection;\n\n const hasSchemaDrivenHeader = computed(() => !!props.schemaDrivenHeader);\n\n // #region sorting\n const { currentSortId, currentSortOrder, updateCurrentSort } = inject(\n DATA_VIEW_INJECTION.key,\n DATA_VIEW_INJECTION.defaults,\n );\n\n const isSortable = computed(() => {\n if (hasSchemaDrivenHeader.value) {\n return props.schemaDrivenHeader!.column.getCanSort();\n }\n return !!props.sortId;\n });\n\n const isActiveSort = computed(() => {\n if (hasSchemaDrivenHeader.value) {\n return !!props.schemaDrivenHeader!.column.getIsSorted();\n }\n return currentSortId.value === props.sortId;\n });\n\n const sortDirection = computed<'asc' | 'desc' | false>(() => {\n if (hasSchemaDrivenHeader.value) {\n return props.schemaDrivenHeader!.column.getIsSorted();\n }\n if (isActiveSort.value && currentSortOrder.value) {\n return currentSortOrder.value;\n }\n return false;\n });\n\n function onRootClick(event: MouseEvent) {\n if (hasSchemaDrivenHeader.value) {\n props.schemaDrivenHeader!.column.getToggleSortingHandler()?.(event);\n return;\n }\n\n if (isSortable.value && typeof updateCurrentSort === 'function') {\n updateCurrentSort(props.sortId, { shouldEmit: true });\n }\n }\n // #endregion sorting\n</script>\n\n<template>\n <th\n class=\"stash-table-header-cell border-b border-r border-ice-200 p-3 text-xs font-medium text-ice-900\"\n :class=\"[\n classes.root,\n {\n 'bg-white': !isActiveSort,\n 'stash-table-header-cell--sorted bg-blue-100': isActiveSort,\n [classes['root--density-compact']]: density === 'compact',\n [classes['root--density-comfortable']]: density === 'comfortable',\n [classes['has-actions']]: hasActions,\n 'cursor-pointer': isSortable,\n },\n ]\"\n data-test=\"stash-table-header-cell\"\n @click=\"onRootClick\"\n >\n <div class=\"flex justify-between\" :class=\"classes['content-wrapper']\">\n <!-- @slot default -->\n <slot></slot>\n <div v-if=\"isSortable\" class=\"relative h-4 w-3\">\n <Icon\n v-if=\"!isActiveSort || sortDirection === 'asc'\"\n class=\"absolute text-ice-700\"\n :class=\"[classes.caret, classes['caret-up']]\"\n data-test=\"icon|caret-up\"\n name=\"caret-up\"\n size=\"dense\"\n />\n <Icon\n v-if=\"!isActiveSort || sortDirection === 'desc'\"\n class=\"absolute text-ice-700\"\n :class=\"[classes.caret, classes['caret-down']]\"\n data-test=\"icon|caret-down\"\n name=\"caret-down\"\n size=\"dense\"\n />\n </div>\n </div>\n </th>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border-left: none;\n border-top: none;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n .root:last-of-type {\n border-right: 0;\n }\n\n .has-actions:last-of-type .content-wrapper {\n justify-content: flex-end !important;\n }\n\n .caret-up {\n top: -5px;\n }\n\n .caret-down {\n top: 2px;\n }\n\n :global(.stash-table-header-cell--sorted) .caret {\n top: -2px; /* vertically center the caret icon */\n }\n\n @media (width >= theme(--breakpoint-lg)) {\n .root--density-comfortable:last-of-type {\n padding-right: 24px;\n }\n\n .root--density-comfortable:first-of-type:not(\n :global(.stash-table-header-row__selection-cell),\n :global(.stash-table-row__selection-cell)\n ) {\n padding-left: 24px;\n }\n }\n }\n</style>\n"],"names":["props","__props","classes","useCssModule","tableInjection","inject","TABLE_INJECTION","density","hasActions","hasSchemaDrivenHeader","computed","currentSortId","currentSortOrder","updateCurrentSort","DATA_VIEW_INJECTION","isSortable","isActiveSort","sortDirection","onRootClick","event","_a","_createElementBlock","_unref","_createElementVNode","_normalizeClass","_renderSlot","_ctx","_openBlock","_hoisted_1","_createBlock","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAuBE,UAAMA,IAAQC,GAIRC,IAAUC,EAAA,GAEVC,IAAiBC,EAAOC,EAAgB,GAAG;AACjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,uDAAuD;AAGzE,UAAM,EAAE,SAAAG,GAAS,YAAAC,EAAA,IAAeJ,GAE1BK,IAAwBC,EAAS,MAAM,CAAC,CAACV,EAAM,kBAAkB,GAGjE,EAAE,eAAAW,GAAe,kBAAAC,GAAkB,mBAAAC,EAAA,IAAsBR;AAAA,MAC7DS,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IAAA,GAGhBC,IAAaL,EAAS,MACtBD,EAAsB,QACjBT,EAAM,mBAAoB,OAAO,WAAA,IAEnC,CAAC,CAACA,EAAM,MAChB,GAEKgB,IAAeN,EAAS,MACxBD,EAAsB,QACjB,CAAC,CAACT,EAAM,mBAAoB,OAAO,YAAA,IAErCW,EAAc,UAAUX,EAAM,MACtC,GAEKiB,IAAgBP,EAAiC,MACjDD,EAAsB,QACjBT,EAAM,mBAAoB,OAAO,YAAA,IAEtCgB,EAAa,SAASJ,EAAiB,QAClCA,EAAiB,QAEnB,EACR;AAED,aAASM,EAAYC,GAAmB;;AACtC,UAAIV,EAAsB,OAAO;AAC/B,SAAAW,IAAApB,EAAM,mBAAoB,OAAO,wBAAA,MAAjC,QAAAoB,EAA6DD;AAC7D;AAAA,MACF;AAEA,MAAIJ,EAAW,SAAS,OAAOF,KAAsB,cACnDA,EAAkBb,EAAM,QAAQ,EAAE,YAAY,IAAM;AAAA,IAExD;2BAKAqB,EAsCK,MAAA;AAAA,MArCH,UAAM,iGAA+F;AAAA,QACrFC,EAAApB,CAAA,EAAQ;AAAA;uBAAmCc,EAAA;AAAA,yDAAqEA,EAAA;AAAA,UAAuB,CAAAM,EAAApB,CAAA,6BAAmCoB,EAAAf,CAAA,MAAO;AAAA,UAAyB,CAAAe,EAAApB,CAAA,iCAAuCoB,EAAAf,CAAA,MAAO;AAAA,UAA6B,CAAAe,EAAApB,CAAA,mBAAyBoB,EAAAd,CAAA;AAAA,4BAAsCO,EAAA;AAAA,QAAA;AAAA;MAWpW,aAAU;AAAA,MACT,SAAOG;AAAA,IAAA;MAERK,EAqBM,OAAA;AAAA,QArBD,OAAKC,EAAA,CAAC,wBAA+BF,EAAApB,CAAA,EAAO,iBAAA,CAAA,CAAA;AAAA,MAAA;QAE/CuB,EAAaC,EAAA,QAAA,SAAA;AAAA,QACFX,EAAA,SAAXY,EAAA,GAAAN,EAiBM,OAjBNO,GAiBM;AAAA,UAfK,CAAAZ,EAAA,SAAgBC,EAAA,UAAa,cADtCY,EAOEC,GAAA;AAAA;YALA,UAAM,yBAAuB,CACpBR,KAAQ,OAAOA,EAAApB,CAAA,EAAO,UAAA,CAAA,CAAA,CAAA;AAAA,YAC/B,aAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;UAGE,CAAAc,EAAA,SAAgBC,EAAA,UAAa,eADtCY,EAOEC,GAAA;AAAA;YALA,UAAM,yBAAuB,CACpBR,KAAQ,OAAOA,EAAApB,CAAA,EAAO,YAAA,CAAA,CAAA,CAAA;AAAA,YAC/B,aAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,UAAA;;;;;;;;;;;;;;;;"}
@@ -2,6 +2,7 @@ import { ComponentOptionsMixin } from 'vue';
2
2
  import { ComponentProvideOptions } from 'vue';
3
3
  import { DefineComponent } from 'vue';
4
4
  import { ExtractPropTypes } from 'vue';
5
+ import { Header } from '@tanstack/vue-table';
5
6
  import { PropType } from 'vue';
6
7
  import { PublicProps } from 'vue';
7
8
 
@@ -34,10 +35,13 @@ declare type __VLS_WithTemplateSlots<T, S> = T & {
34
35
 
35
36
  declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableHeaderCellProps>, {
36
37
  sortId: string;
38
+ schemaDrivenHeader: undefined;
37
39
  }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableHeaderCellProps>, {
38
40
  sortId: string;
41
+ schemaDrivenHeader: undefined;
39
42
  }>>> & Readonly<{}>, {
40
43
  sortId: string;
44
+ schemaDrivenHeader: Header<any, any>;
41
45
  }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
42
46
  default?(_: {}): any;
43
47
  }>;
@@ -67,6 +71,12 @@ export declare interface TableHeaderCellProps {
67
71
  * For example: `'product_name'` (with no leading dash/hyphen).
68
72
  */
69
73
  sortId?: SortValueDeserialized['id'];
74
+ /**
75
+ * TanStack header instance passed when Table is in schema-driven mode.
76
+ * When provided, sorting is controlled by TanStack instead of DataView.
77
+ * Typed as any so DataTable can pass Header<TData, unknown> without a type assertion.
78
+ */
79
+ schemaDrivenHeader?: Header<any, any>;
70
80
  }
71
81
 
72
82
  export { }
@@ -1,71 +1,71 @@
1
- import { defineComponent as k, inject as w, ref as T, createElementBlock as C, openBlock as l, createBlock as o, createCommentVNode as s, renderSlot as x, unref as e, normalizeClass as a, withCtx as E } from "vue";
2
- import { t as R } from "./locale.js";
3
- import S from "./Checkbox.js";
4
- import { D as h } from "./DataView.keys-aSOnA4AD.js";
1
+ import { defineComponent as C, inject as h, computed as E, ref as R, createElementBlock as x, openBlock as l, createBlock as o, createCommentVNode as s, renderSlot as B, unref as e, normalizeClass as a, withCtx as I } from "vue";
2
+ import { t as S } from "./locale.js";
3
+ import $ from "./Checkbox.js";
4
+ import { D as f } from "./DataView.keys-aSOnA4AD.js";
5
5
  import "lodash-es/uniqueId";
6
6
  import "lodash-es/cloneDeep";
7
7
  import "./Module.keys-DcqBbvvT.js";
8
8
  import "./Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js";
9
- import { T as B } from "./Table.keys-LHQf6FEH.js";
10
- import n from "./TableHeaderCell.js";
11
- import { _ as I } from "./_plugin-vue_export-helper-CHgC5LLL.js";
12
- const $ = {
9
+ import { T as v } from "./Table.keys-LHQf6FEH.js";
10
+ import i from "./TableHeaderCell.js";
11
+ import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.js";
12
+ const A = {
13
13
  class: "stash-table-header-row",
14
14
  "data-test": "stash-table-header-row"
15
- }, N = /* @__PURE__ */ k({
15
+ }, H = /* @__PURE__ */ C({
16
16
  __name: "TableHeaderRow",
17
17
  props: {
18
18
  allRowsSelected: { type: Boolean, default: !1 },
19
19
  someRowsSelected: { type: Boolean, default: !1 }
20
20
  },
21
21
  emits: ["select"],
22
- setup(u, { emit: b }) {
23
- const c = u, f = b, d = w(B.key);
24
- if (!d)
22
+ setup(_, { emit: b }) {
23
+ const c = _, y = b, m = h(v.key);
24
+ if (!m)
25
25
  throw new Error("TableHeaderRow must be used within a Table component");
26
- const { hasCustomExpandToggle: _, isExpandable: y, isSelectable: i } = d, { hasToolbar: r } = w(h.key, h.defaults), m = T(0);
27
- function p() {
28
- f("select"), m.value++;
26
+ const { hasCustomExpandToggle: k, isSchemaDriven: r, isExpandable: T, isSelectable: n } = m, p = E(() => (n == null ? void 0 : n.value) && !(r != null && r.value)), { hasToolbar: d } = h(f.key, f.defaults), u = R(0);
27
+ function w() {
28
+ y("select"), u.value++;
29
29
  }
30
- return (t, g) => (l(), C("tr", $, [
31
- e(r) && e(i) ? (l(), o(n, {
30
+ return (t, J) => (l(), x("tr", A, [
31
+ e(d) && p.value ? (l(), o(i, {
32
32
  key: 0,
33
33
  class: a(["stash-table-header-row__selection-cell-empty", t.$style["row-control-cell"]]),
34
34
  "data-test": "table-row-header|selection-cell-empty"
35
35
  }, null, 8, ["class"])) : s("", !0),
36
- !e(r) && e(i) ? (l(), o(n, {
36
+ !e(d) && p.value ? (l(), o(i, {
37
37
  key: 1,
38
- class: a(["stash-table-header-row__selection-cell min-w-[48px]", t.$style["row-control-cell"]]),
38
+ class: a(["stash-table-header-row__selection-cell min-w-12", t.$style["row-control-cell"]]),
39
39
  "data-test": "table-row-header|selection-cell"
40
40
  }, {
41
- default: E(() => [
42
- e(r) ? s("", !0) : (l(), o(S, {
43
- key: m.value,
41
+ default: I(() => [
42
+ e(d) ? s("", !0) : (l(), o($, {
43
+ key: u.value,
44
44
  class: a(t.$style["row-selection-checkbox"]),
45
45
  checked: c.allRowsSelected,
46
46
  indeterminate: c.someRowsSelected && !c.allRowsSelected,
47
- title: e(R)("ll.selectAll"),
48
- "onUpdate:indeterminate": p,
49
- "onUpdate:checked": p
47
+ title: e(S)("ll.selectAll"),
48
+ "onUpdate:indeterminate": w,
49
+ "onUpdate:checked": w
50
50
  }, null, 8, ["class", "checked", "indeterminate", "title"]))
51
51
  ]),
52
52
  _: 1
53
53
  }, 8, ["class"])) : s("", !0),
54
- e(y) && !e(_) ? (l(), o(n, {
54
+ e(T) && !e(k) ? (l(), o(i, {
55
55
  key: 2,
56
56
  class: a(t.$style["row-control-cell"]),
57
57
  "data-test": "table-row-header-expansion-cell"
58
58
  }, null, 8, ["class"])) : s("", !0),
59
- x(t.$slots, "default")
59
+ B(t.$slots, "default")
60
60
  ]));
61
61
  }
62
- }), A = {
62
+ }), g = {
63
63
  "row-selection-checkbox": "_row-selection-checkbox_102yd_5",
64
64
  "row-control-cell": "_row-control-cell_102yd_11"
65
- }, H = {
66
- $style: A
67
- }, W = /* @__PURE__ */ I(N, [["__cssModules", H]]);
65
+ }, j = {
66
+ $style: g
67
+ }, G = /* @__PURE__ */ N(H, [["__cssModules", j]]);
68
68
  export {
69
- W as default
69
+ G as default
70
70
  };
71
71
  //# sourceMappingURL=TableHeaderRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderRow.js","sources":["../src/components/TableHeaderRow/TableHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, ref } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.keys';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableHeaderCell from '../TableHeaderCell/TableHeaderCell.vue';\n\n export interface TableHeaderRowProps {\n allRowsSelected?: boolean;\n someRowsSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<TableHeaderRowProps>(), {\n allRowsSelected: false,\n someRowsSelected: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableHeaderRow must be used within a Table component');\n }\n\n const { hasCustomExpandToggle, isExpandable, isSelectable } = tableInjection;\n\n const { hasToolbar } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n</script>\n\n<template>\n <tr class=\"stash-table-header-row\" data-test=\"stash-table-header-row\">\n <!-- This is just an empty cell to ensure proper alignment. \"Select all\" control should be in the toolbar. -->\n <TableHeaderCell\n v-if=\"hasToolbar && isSelectable\"\n class=\"stash-table-header-row__selection-cell-empty\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell-empty\"\n />\n\n <TableHeaderCell\n v-if=\"!hasToolbar && isSelectable\"\n class=\"stash-table-header-row__selection-cell min-w-[48px]\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell\"\n >\n <Checkbox\n v-if=\"!hasToolbar\"\n :key=\"checkboxKey\"\n :class=\"$style['row-selection-checkbox']\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n </TableHeaderCell>\n\n <TableHeaderCell\n v-if=\"isExpandable && !hasCustomExpandToggle\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header-expansion-cell\"\n />\n <!-- @slot default -->\n <slot></slot>\n </tr>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .row-selection-checkbox label {\n padding: 0;\n min-height: --spacing(6);\n vertical-align: middle;\n }\n\n .row-control-cell {\n border-right: 0;\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","tableInjection","inject","TABLE_INJECTION","hasCustomExpandToggle","isExpandable","isSelectable","hasToolbar","DATA_VIEW_INJECTION","checkboxKey","ref","onSelect","_openBlock","_createElementBlock","_hoisted_1","_unref","_createBlock","TableHeaderCell","_normalizeClass","$style","Checkbox","t","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcE,UAAMA,IAAQC,GAKRC,IAAOC,GAIPC,IAAiBC,EAAOC,EAAgB,GAAG;AAEjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,sDAAsD;AAGxE,UAAM,EAAE,uBAAAG,GAAuB,cAAAC,GAAc,cAAAC,EAAA,IAAiBL,GAExD,EAAE,YAAAM,EAAA,IAAeL,EAAOM,EAAoB,KAAKA,EAAoB,QAAQ,GAE7EC,IAAcC,EAAI,CAAC;AAEzB,aAASC,IAAW;AAClB,MAAAZ,EAAK,QAAQ,GAObU,EAAY;AAAA,IACd;sBAIAG,EAAA,GAAAC,EAkCK,MAlCLC,GAkCK;AAAA,MA/BKC,EAAAR,CAAA,KAAcQ,EAAAT,CAAA,UADtBU,EAKEC,GAAA;AAAA;QAHA,OAAKC,EAAA,CAAC,gDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAIH,CAAAJ,EAAAR,CAAA,KAAcQ,EAAAT,CAAA,UADvBU,EAgBkBC,GAAA;AAAA;QAdhB,OAAKC,EAAA,CAAC,uDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;mBAEV,MASE;AAAA,UAROJ,EAAAR,CAAA,sBADTS,EASEI,GAAA;AAAA,YAPC,KAAKX,EAAA;AAAA,YACL,SAAOU,EAAAA,OAAM,wBAAA,CAAA;AAAA,YACb,SAAStB,EAAM;AAAA,YACf,eAAeA,EAAM,oBAAgB,CAAKA,EAAM;AAAA,YAChD,OAAOkB,EAAAM,CAAA,EAAC,cAAA;AAAA,YACR,0BAAsBV;AAAA,YACtB,oBAAgBA;AAAA,UAAA;;;;MAKbI,EAAAV,CAAA,MAAiBU,EAAAX,CAAA,UADzBY,EAIEC,GAAA;AAAA;QAFC,SAAOE,EAAAA,OAAM,kBAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAGZG,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;"}
1
+ {"version":3,"file":"TableHeaderRow.js","sources":["../src/components/TableHeaderRow/TableHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject, ref } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.keys';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableHeaderCell from '../TableHeaderCell/TableHeaderCell.vue';\n\n export interface TableHeaderRowProps {\n allRowsSelected?: boolean;\n someRowsSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<TableHeaderRowProps>(), {\n allRowsSelected: false,\n someRowsSelected: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableHeaderRow must be used within a Table component');\n }\n\n const { hasCustomExpandToggle, isSchemaDriven, isExpandable, isSelectable } = tableInjection;\n\n const showSelectionCells = computed(() => isSelectable?.value && !isSchemaDriven?.value);\n\n const { hasToolbar } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n</script>\n\n<template>\n <tr class=\"stash-table-header-row\" data-test=\"stash-table-header-row\">\n <!-- This is just an empty cell to ensure proper alignment. \"Select all\" control should be in the toolbar. -->\n <TableHeaderCell\n v-if=\"hasToolbar && showSelectionCells\"\n class=\"stash-table-header-row__selection-cell-empty\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell-empty\"\n />\n\n <TableHeaderCell\n v-if=\"!hasToolbar && showSelectionCells\"\n class=\"stash-table-header-row__selection-cell min-w-12\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell\"\n >\n <Checkbox\n v-if=\"!hasToolbar\"\n :key=\"checkboxKey\"\n :class=\"$style['row-selection-checkbox']\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n </TableHeaderCell>\n\n <TableHeaderCell\n v-if=\"isExpandable && !hasCustomExpandToggle\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header-expansion-cell\"\n />\n <!-- @slot default -->\n <slot></slot>\n </tr>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .row-selection-checkbox label {\n padding: 0;\n min-height: --spacing(6);\n vertical-align: middle;\n }\n\n .row-control-cell {\n border-right: 0;\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","tableInjection","inject","TABLE_INJECTION","hasCustomExpandToggle","isSchemaDriven","isExpandable","isSelectable","showSelectionCells","computed","hasToolbar","DATA_VIEW_INJECTION","checkboxKey","ref","onSelect","_openBlock","_createElementBlock","_hoisted_1","_unref","_createBlock","TableHeaderCell","_normalizeClass","$style","Checkbox","t","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcE,UAAMA,IAAQC,GAKRC,IAAOC,GAIPC,IAAiBC,EAAOC,EAAgB,GAAG;AAEjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,sDAAsD;AAGxE,UAAM,EAAE,uBAAAG,GAAuB,gBAAAC,GAAgB,cAAAC,GAAc,cAAAC,MAAiBN,GAExEO,IAAqBC,EAAS,OAAMF,KAAA,gBAAAA,EAAc,UAAS,EAACF,KAAA,QAAAA,EAAgB,MAAK,GAEjF,EAAE,YAAAK,EAAA,IAAeR,EAAOS,EAAoB,KAAKA,EAAoB,QAAQ,GAE7EC,IAAcC,EAAI,CAAC;AAEzB,aAASC,IAAW;AAClB,MAAAf,EAAK,QAAQ,GAOba,EAAY;AAAA,IACd;sBAIAG,EAAA,GAAAC,EAkCK,MAlCLC,GAkCK;AAAA,MA/BKC,EAAAR,CAAA,KAAcF,EAAA,cADtBW,EAKEC,GAAA;AAAA;QAHA,OAAKC,EAAA,CAAC,gDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAIH,CAAAJ,EAAAR,CAAA,KAAcF,EAAA,cADvBW,EAgBkBC,GAAA;AAAA;QAdhB,OAAKC,EAAA,CAAC,mDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;mBAEV,MASE;AAAA,UAROJ,EAAAR,CAAA,sBADTS,EASEI,GAAA;AAAA,YAPC,KAAKX,EAAA;AAAA,YACL,SAAOU,EAAAA,OAAM,wBAAA,CAAA;AAAA,YACb,SAASzB,EAAM;AAAA,YACf,eAAeA,EAAM,oBAAgB,CAAKA,EAAM;AAAA,YAChD,OAAOqB,EAAAM,CAAA,EAAC,cAAA;AAAA,YACR,0BAAsBV;AAAA,YACtB,oBAAgBA;AAAA,UAAA;;;;MAKbI,EAAAZ,CAAA,MAAiBY,EAAAd,CAAA,UADzBe,EAIEC,GAAA;AAAA;QAFC,SAAOE,EAAAA,OAAM,kBAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAGZG,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;"}