@leaflink/stash 44.0.0-beta.6 → 44.0.0-beta.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.
- package/dist/AppNavigationItem.js +1 -1
- package/dist/Carousel.js +258 -246
- package/dist/Carousel.js.map +1 -1
- package/dist/DatePicker.js +1 -1
- package/dist/DatePicker.js.map +1 -1
- package/dist/Dialog.js.map +1 -1
- package/dist/Expand.js +1 -1
- package/dist/{Expand.vue_vue_type_script_setup_true_lang-5fe03d51.js → Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js} +4 -4
- package/dist/{Expand.vue_vue_type_script_setup_true_lang-5fe03d51.js.map → Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js.map} +1 -1
- package/dist/FilterSelect.js +25 -25
- package/dist/FilterSelect.js.map +1 -1
- package/dist/Filters.js.map +1 -1
- package/dist/ListView.js +46 -46
- package/dist/ListView.js.map +1 -1
- package/dist/PageNavigation.js +3 -3
- package/dist/PageNavigation.js.map +1 -1
- package/dist/QuickAction.js +22 -19
- package/dist/QuickAction.js.map +1 -1
- package/dist/Radio.js +26 -16
- package/dist/Radio.js.map +1 -1
- package/dist/RadioGroup.js +135 -106
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioNew.js +118 -91
- package/dist/RadioNew.js.map +1 -1
- package/dist/Select.js +4 -4
- package/dist/Select.js.map +1 -1
- package/dist/Tab.js +2 -2
- package/dist/{Tab.vue_vue_type_script_setup_true_lang-4a40f015.js → Tab.vue_vue_type_script_setup_true_lang-69d1b046.js} +2 -2
- package/dist/{Tab.vue_vue_type_script_setup_true_lang-4a40f015.js.map → Tab.vue_vue_type_script_setup_true_lang-69d1b046.js.map} +1 -1
- package/dist/Table.js +2 -2
- package/dist/{Table.keys-1ebe4ecb.js → Table.keys-75e99266.js} +11 -11
- package/dist/{Table.keys-1ebe4ecb.js.map → Table.keys-75e99266.js.map} +1 -1
- package/dist/TableCell.js +1 -1
- package/dist/TableCell.js.map +1 -1
- package/dist/TableHeaderCell.js +1 -1
- package/dist/TableHeaderRow.js +1 -1
- package/dist/TableRow.js +38 -37
- package/dist/TableRow.js.map +1 -1
- package/dist/Tabs.js +2 -2
- package/dist/{Tabs.vue_used_vue_type_style_index_0_lang.module-0af1e1cf.js → Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js} +25 -25
- package/dist/Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js.map +1 -0
- package/dist/components.css +1 -1
- package/dist/tailwind-base.js +9 -2
- package/dist/tailwind-base.js.map +1 -1
- package/package.json +2 -2
- package/tailwind-base.ts +3 -1
- package/dist/Tabs.vue_used_vue_type_style_index_0_lang.module-0af1e1cf.js.map +0 -1
package/dist/Tab.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { _ as o } from "./Tab.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import { _ as o } from "./Tab.vue_vue_type_script_setup_true_lang-69d1b046.js";
|
|
2
2
|
import "vue";
|
|
3
3
|
import "@leaflink/snitch";
|
|
4
4
|
import "./Badge.js";
|
|
5
5
|
import "./_plugin-vue_export-helper-dad06003.js";
|
|
6
|
-
import "./Tabs.vue_used_vue_type_style_index_0_lang.module-
|
|
6
|
+
import "./Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js";
|
|
7
7
|
import "lodash-es/debounce";
|
|
8
8
|
import "lodash-es/uniqueId";
|
|
9
9
|
import "./constants.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as x, inject as T, computed as o, onMounted as k, nextTick as g, toRefs as u, openBlock as c, createElementBlock as y, normalizeClass as _, unref as n, withKeys as C, createBlock as P, resolveDynamicComponent as B, mergeProps as E, withCtx as b, createElementVNode as $, createVNode as N, renderSlot as A } from "vue";
|
|
2
2
|
import I from "@leaflink/snitch";
|
|
3
3
|
import j from "./Badge.js";
|
|
4
|
-
import { T as D } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-
|
|
4
|
+
import { T as D } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js";
|
|
5
5
|
const L = ["id", "aria-selected", "aria-controls", "aria-disabled"], V = { class: "tw-mt-0.5" }, J = /* @__PURE__ */ x({
|
|
6
6
|
__name: "Tab",
|
|
7
7
|
props: {
|
|
@@ -88,4 +88,4 @@ const L = ["id", "aria-selected", "aria-controls", "aria-disabled"], V = { class
|
|
|
88
88
|
export {
|
|
89
89
|
J as _
|
|
90
90
|
};
|
|
91
|
-
//# sourceMappingURL=Tab.vue_vue_type_script_setup_true_lang-
|
|
91
|
+
//# sourceMappingURL=Tab.vue_vue_type_script_setup_true_lang-69d1b046.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"Tab.vue_vue_type_script_setup_true_lang-69d1b046.js","sources":["../src/components/Tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import logger from '@leaflink/snitch';\n import { computed, inject, nextTick, onMounted, toRefs } from 'vue';\n import { type RouteLocationRaw, type RouterLinkProps } from 'vue-router';\n\n import Badge from '../Badge/Badge.vue';\n import { TABS_INJECTION } from '../Tabs/Tabs.vue';\n\n /**\n * Allowed attributes for the `<a>` element when the `href` prop is used.\n */\n type AnchorAttrs = HTMLAnchorElement['download'] | HTMLAnchorElement['hreflang'] | HTMLAnchorElement['ping'] | HTMLAnchorElement['referrerPolicy'] | HTMLAnchorElement['rel'] | HTMLAnchorElement['target'] | HTMLAnchorElement['type'];\n\n export interface TabProps {\n /**\n * The tab identifier\n */\n value: string;\n\n /**\n * Router link `to` prop\n */\n to?: RouteLocationRaw;\n\n /**\n * Anchor tag href. Used for navigating to non-vue pages, such as Django pages in marketplace.\n */\n href?: string;\n\n /**\n * The badge's content\n */\n badge?: string | number;\n\n /**\n * Will render a plain text item if true.\n */\n disabled?: boolean\n\n /**\n * Props for the `<a>` element when the `href` prop is used\n */\n anchorProps?: Record<AnchorAttrs, string>;\n\n /**\n * Props for the `<RouterLink>` element when the `to` prop is used\n */\n routerLinkProps?: Omit<RouterLinkProps, 'to'>;\n }\n\n const props = defineProps<TabProps>();\n\n const tabsInjection = inject(TABS_INJECTION.key);\n\n if (!tabsInjection) {\n throw Error('The Tab component must be a child of the Tabs component.');\n }\n\n const { setActiveTab, activeTab, variant } = tabsInjection;\n\n const isTabActive = computed(() => {\n return props.value === activeTab.value;\n });\n\n const is = computed(() => {\n if (props.to) {\n return 'router-link';\n }\n\n if (props.href) {\n return 'a';\n }\n\n return 'button';\n });\n\n /**\n * Note: this click handler gets ignored when the `href` prop is used; `preventDefault()` is intentionally omitted in order to enable the `href` prop to work correctly. The `href` prop is used for navigation to non-vue pages, such as Django pages in marketplace.\n */\n function onClick(tabValue: string) {\n if (props.disabled) {\n return;\n }\n\n setActiveTab(tabValue);\n }\n\n const panelId = computed(() => `tabpanel-${props.value}`);\n\n onMounted(async () => {\n await nextTick();\n\n if (process.env.NODE_ENV !== 'test' && isTabActive.value && !document.getElementById(panelId.value)) {\n // The following warning ensures optimal accessibility is maintained when using the Tabs component. See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tab_role#example\n logger.warn(`The <Tab> with value \"${props.value}\" is active, but its corresponding tab panel cannot be found. Please ensure that the corresponding tab panel has an \"id\" attribute with value \"${panelId.value}\" and a \"role\" attribute with value \"tabpanel\".`);\n }\n });\n\n const dynamicComponentAttrs = computed(() => {\n if (props.to && props.routerLinkProps) {\n return toRefs(props.routerLinkProps);\n }\n\n if (props.href && props.anchorProps) {\n return toRefs(props.anchorProps);\n }\n\n return {};\n });\n</script>\n\n<template>\n <li\n :id=\"`tab-${props.value}`\"\n role=\"tab\"\n :aria-selected=\"isTabActive\"\n :aria-controls=\"panelId\"\n :aria-disabled=\"props.disabled\"\n class=\"stash-tab\"\n :class=\"[\n {\n 'stash-tab--active is-active': isTabActive,\n 'stash-tab--disabled': props.disabled,\n 'stash-tab--variant-line': variant === 'line',\n 'stash-tab--variant-enclosed': variant === 'enclosed',\n },\n ]\"\n @click=\"onClick(props.value)\"\n @keypress.enter=\"onClick(props.value)\"\n >\n <component\n v-bind=\"dynamicComponentAttrs\"\n :is=\"is\"\n :to=\"props.to\"\n :href=\"props.href\"\n class=\"\n tw-flex\n tw-cursor-pointer\n tw-items-center\n tw-justify-center\n tw-whitespace-nowrap\n tw-border-solid\n tw-py-1.5\n tw-text-sm\n tw-font-medium\n hover:tw-no-underline\n \"\n :class=\"[\n {\n 'tw-border-b-2': variant === 'line',\n 'tw-border-t-4 tw-px-6': variant === 'enclosed',\n 'tw-rounded-t tw-bg-white': isTabActive && variant === 'enclosed',\n 'focus:tw-no-underline': props.href,\n 'tw-pointer-events-none tw-text-ice-500': props.disabled,\n 'tw-text-ice-700': !props.disabled && !isTabActive,\n },\n [\n isTabActive\n ? 'tw-border-blue-500 tw-text-blue-500'\n : 'tw-border-transparent hover:tw-text-blue-500 focus:tw-text-blue-500',\n ],\n ]\"\n :tabindex=\"props.disabled ? -1 : 0\"\n >\n <!-- The margin-top on the <div> below is necessary to fix the vertical alignment of text in the default slot since our Sofia font has extra space under the baseline -->\n <div class=\"tw-mt-0.5\">\n <Badge :content=\"props.badge\" position=\"inline\" color=\"red\" :is-disabled=\"props.disabled\">\n <slot :is-active=\"isTabActive\" :is-disabled=\"props.disabled\" :variant=\"variant\"></slot>\n </Badge>\n </div>\n </component>\n </li>\n</template>\n"],"names":["tabsInjection","inject","TABS_INJECTION","setActiveTab","activeTab","variant","isTabActive","computed","props","is","onClick","tabValue","panelId","onMounted","nextTick","logger","dynamicComponentAttrs","toRefs"],"mappings":";;;;;;;;;;;;;;;;iBAoDQA,IAAgBC,EAAOC,EAAe,GAAG;AAE/C,QAAI,CAACF;AACH,YAAM,MAAM,0DAA0D;AAGxE,UAAM,EAAE,cAAAG,GAAc,WAAAC,GAAW,SAAAC,EAAA,IAAYL,GAEvCM,IAAcC,EAAS,MACpBC,EAAM,UAAUJ,EAAU,KAClC,GAEKK,IAAKF,EAAS,MACdC,EAAM,KACD,gBAGLA,EAAM,OACD,MAGF,QACR;AAKD,aAASE,EAAQC,GAAkB;AACjC,MAAIH,EAAM,YAIVL,EAAaQ,CAAQ;AAAA,IACvB;AAEA,UAAMC,IAAUL,EAAS,MAAM,YAAYC,EAAM,KAAK,EAAE;AAExD,IAAAK,EAAU,YAAY;AACpB,YAAMC,EAAS,GAEX,QAAQ,IAAI,aAAa,UAAUR,EAAY,SAAS,CAAC,SAAS,eAAeM,EAAQ,KAAK,KAEhGG,EAAO,KAAK,yBAAyBP,EAAM,KAAK,kJAAkJI,EAAQ,KAAK,iDAAiD;AAAA,IAClQ,CACD;AAEK,UAAAI,IAAwBT,EAAS,MACjCC,EAAM,MAAMA,EAAM,kBACbS,EAAOT,EAAM,eAAe,IAGjCA,EAAM,QAAQA,EAAM,cACfS,EAAOT,EAAM,WAAW,IAG1B,EACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/Table.js
CHANGED
|
@@ -9,7 +9,7 @@ import N from "./EmptyState.js";
|
|
|
9
9
|
import D from "./Loading.js";
|
|
10
10
|
import h from "./TableCell.js";
|
|
11
11
|
import E from "./TableRow.js";
|
|
12
|
-
import { T as I } from "./Table.keys-
|
|
12
|
+
import { T as I } from "./Table.keys-75e99266.js";
|
|
13
13
|
import { S as V } from "./misc-d0eec261.js";
|
|
14
14
|
import "./locale.js";
|
|
15
15
|
import "lodash-es/get";
|
|
@@ -24,7 +24,7 @@ import "./ChevronToggle.vue_vue_type_script_setup_true_lang-1591294c.js";
|
|
|
24
24
|
import "./Button.js";
|
|
25
25
|
import "./Icon.js";
|
|
26
26
|
import "./index-79ce320f.js";
|
|
27
|
-
import "./Expand.vue_vue_type_script_setup_true_lang-
|
|
27
|
+
import "./Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js";
|
|
28
28
|
var A = /* @__PURE__ */ ((e) => (e.Scroll = "scroll", e.Stack = "stack", e))(A || {}), O = /* @__PURE__ */ ((e) => (e.None = "none", e.Rounded = "rounded", e.RoundedBottom = "rounded-bottom", e))(O || {});
|
|
29
29
|
const J = { class: "tw-relative tw-min-w-full tw-max-w-initial tw-border-separate" }, ut = /* @__PURE__ */ T({
|
|
30
30
|
__name: "Table",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const o = "
|
|
1
|
+
const o = "_root_jdd28_2", t = {
|
|
2
2
|
root: o,
|
|
3
|
-
"layout--scroll": "_layout--
|
|
4
|
-
"has-actions": "_has-
|
|
5
|
-
"layout--stack": "_layout--
|
|
6
|
-
"is-control": "_is-
|
|
7
|
-
"root--density-comfortable": "_root--density-
|
|
8
|
-
}, _ = "_root_10hu1_2",
|
|
3
|
+
"layout--scroll": "_layout--scroll_jdd28_6",
|
|
4
|
+
"has-actions": "_has-actions_jdd28_12",
|
|
5
|
+
"layout--stack": "_layout--stack_jdd28_16",
|
|
6
|
+
"is-control": "_is-control_jdd28_28",
|
|
7
|
+
"root--density-comfortable": "_root--density-comfortable_jdd28_52"
|
|
8
|
+
}, _ = "_root_10hu1_2", e = {
|
|
9
9
|
root: _,
|
|
10
10
|
"is-expandable": "_is-expandable_10hu1_9",
|
|
11
11
|
"root--hidden-divider": "_root--hidden-divider_10hu1_14",
|
|
@@ -16,12 +16,12 @@ const o = "_root_1la2u_2", t = {
|
|
|
16
16
|
"row-control-cell": "_row-control-cell_10hu1_62",
|
|
17
17
|
"row-expansion-content": "_row-expansion-content_10hu1_73",
|
|
18
18
|
"row-expansion": "_row-expansion_10hu1_73"
|
|
19
|
-
},
|
|
19
|
+
}, s = Object.freeze({
|
|
20
20
|
key: Symbol("TABLE_INJECTION_KEY")
|
|
21
21
|
});
|
|
22
22
|
export {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
s as T,
|
|
24
|
+
e as a,
|
|
25
25
|
t as s
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=Table.keys-
|
|
27
|
+
//# sourceMappingURL=Table.keys-75e99266.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.keys-
|
|
1
|
+
{"version":3,"file":"Table.keys-75e99266.js","sources":["../src/components/Table/Table.keys.ts"],"sourcesContent":["import { Injection } from '../../../types/utils';\nimport { TableInjection } from './Table.types';\n\nexport const TABLE_INJECTION: Injection<TableInjection> = Object.freeze({\n key: Symbol('TABLE_INJECTION_KEY'),\n});\n"],"names":["TABLE_INJECTION"],"mappings":";;;;;;;;;;;;;;;;;;GAGaA,IAA6C,OAAO,OAAO;AAAA,EACtE,KAAK,OAAO,qBAAqB;AACnC,CAAC;"}
|
package/dist/TableCell.js
CHANGED
|
@@ -7,7 +7,7 @@ import "./DataView.vue_used_vue_type_style_index_0_lang.module-d878ca9a.js";
|
|
|
7
7
|
import "lodash-es/get";
|
|
8
8
|
import "./EmptyState.vue_used_vue_type_style_index_0_lang.module-f5d89366.js";
|
|
9
9
|
import "./Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js";
|
|
10
|
-
import { T as y, s as C } from "./Table.keys-
|
|
10
|
+
import { T as y, s as C } from "./Table.keys-75e99266.js";
|
|
11
11
|
import "@leaflink/snitch";
|
|
12
12
|
import "./Checkbox.vue_vue_type_style_index_0_scoped_dbd26d7f_lang-4ed993c7.js";
|
|
13
13
|
import "./Button.vue_used_vue_type_style_index_0_lang.module-b2ee90e6.js";
|
package/dist/TableCell.js.map
CHANGED
|
@@ -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 'tw-p-3': layout === 'scroll',\n 'tw-p-1.5': layout === 'stack',\n 'lg:tw-p-3': density === 'compact',\n 'lg:tw-px-3 lg:tw-py-6': density === 'comfortable',\n [classes['is-control']]: props.isControl,\n },\n ]\"\n >\n <div v-if=\"props.mobileHeader && layout === 'stack'\" class=\"tw-text-xs tw-font-medium tw-text-ice-900 lg:tw-hidden\">\n {{ props.mobileHeader }}\n </div>\n <!-- @slot default -->\n <slot></slot>\n </td>\n</template>\n\n<style module>\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(--border-radius);\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 screen(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(:global(.stash-table-header-row__selection-cell), :global(.stash-table-row__selection-cell), :global(.
|
|
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 'tw-p-3': layout === 'scroll',\n 'tw-p-1.5': layout === 'stack',\n 'lg:tw-p-3': density === 'compact',\n 'lg:tw-px-3 lg:tw-py-6': density === 'comfortable',\n [classes['is-control']]: props.isControl,\n },\n ]\"\n >\n <div v-if=\"props.mobileHeader && layout === 'stack'\" class=\"tw-text-xs tw-font-medium tw-text-ice-900 lg:tw-hidden\">\n {{ props.mobileHeader }}\n </div>\n <!-- @slot default -->\n <slot></slot>\n </td>\n</template>\n\n<style module>\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(--border-radius);\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 screen(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(:global(.stash-table-header-row__selection-cell), :global(.stash-table-row__selection-cell), :global(.stash-table-row__toggle-expansion-cell)) {\n padding-left: 24px;\n }\n }\n</style>\n"],"names":["classes","useCssModule","tableInjection","inject","TABLE_INJECTION","density","hasActions","layout"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;iBAoBQA,IAAUC,KAEVC,IAAiBC,EAAOC,EAAgB,GAAG;AACjD,QAAI,CAACF;AACG,YAAA,IAAI,MAAM,iDAAiD;AAGnE,UAAM,EAAE,SAAAG,GAAS,YAAAC,GAAY,QAAAC,EAAA,IAAWL;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/TableHeaderCell.js
CHANGED
|
@@ -6,7 +6,7 @@ import { D as b } from "./DataView.vue_used_vue_type_style_index_0_lang.module-d
|
|
|
6
6
|
import "lodash-es/get";
|
|
7
7
|
import "./EmptyState.vue_used_vue_type_style_index_0_lang.module-f5d89366.js";
|
|
8
8
|
import "./Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js";
|
|
9
|
-
import { T as q } from "./Table.keys-
|
|
9
|
+
import { T as q } from "./Table.keys-75e99266.js";
|
|
10
10
|
import "lodash-es/uniqueId";
|
|
11
11
|
import "@leaflink/snitch";
|
|
12
12
|
import "./Checkbox.vue_vue_type_style_index_0_scoped_dbd26d7f_lang-4ed993c7.js";
|
package/dist/TableHeaderRow.js
CHANGED
|
@@ -8,7 +8,7 @@ import "./Paginate.vue_used_vue_type_style_index_0_lang.module-1a2084f9.js";
|
|
|
8
8
|
import "./DataView.vue_used_vue_type_style_index_0_lang.module-d878ca9a.js";
|
|
9
9
|
import "./EmptyState.vue_used_vue_type_style_index_0_lang.module-f5d89366.js";
|
|
10
10
|
import "./Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js";
|
|
11
|
-
import { T as R } from "./Table.keys-
|
|
11
|
+
import { T as R } from "./Table.keys-75e99266.js";
|
|
12
12
|
import "./Button.vue_used_vue_type_style_index_0_lang.module-b2ee90e6.js";
|
|
13
13
|
import m from "./TableHeaderCell.js";
|
|
14
14
|
import { _ as S } from "./_plugin-vue_export-helper-dad06003.js";
|
package/dist/TableRow.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { defineComponent as A, useAttrs as D, useCssModule as M, useSlots as V, inject as j, ref as P, computed as
|
|
1
|
+
import { defineComponent as A, useAttrs as D, useCssModule as M, useSlots as V, inject as j, ref as P, computed as k, watch as q, openBlock as c, createElementBlock as g, Fragment as z, createElementVNode as F, mergeProps as y, unref as e, createBlock as C, normalizeClass as p, withCtx as m, createVNode as w, createCommentVNode as x, renderSlot as S } from "vue";
|
|
2
2
|
import J from "lodash-es/uniqueId";
|
|
3
|
-
import { t as
|
|
3
|
+
import { t as b } from "./locale.js";
|
|
4
4
|
import L from "./Checkbox.js";
|
|
5
5
|
import { _ as O } from "./ChevronToggle.vue_vue_type_script_setup_true_lang-1591294c.js";
|
|
6
|
-
import { _ as U } from "./Expand.vue_vue_type_script_setup_true_lang-
|
|
6
|
+
import { _ as U } from "./Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js";
|
|
7
7
|
import "lodash-es/cloneDeep";
|
|
8
8
|
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
9
9
|
import "./Paginate.vue_used_vue_type_style_index_0_lang.module-1a2084f9.js";
|
|
@@ -11,7 +11,7 @@ import "./DataView.vue_used_vue_type_style_index_0_lang.module-d878ca9a.js";
|
|
|
11
11
|
import "./EmptyState.vue_used_vue_type_style_index_0_lang.module-f5d89366.js";
|
|
12
12
|
import "./Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js";
|
|
13
13
|
import T from "./TableCell.js";
|
|
14
|
-
import { T as G, a as H } from "./Table.keys-
|
|
14
|
+
import { T as G, a as H } from "./Table.keys-75e99266.js";
|
|
15
15
|
import { _ as K } from "./_plugin-vue_export-helper-dad06003.js";
|
|
16
16
|
import "lodash-es/get";
|
|
17
17
|
import "@leaflink/snitch";
|
|
@@ -30,93 +30,94 @@ const Q = /* @__PURE__ */ A({
|
|
|
30
30
|
isSelectDisabled: { type: Boolean, default: !1 }
|
|
31
31
|
},
|
|
32
32
|
emits: ["update:isSelected", "update:isExpanded"],
|
|
33
|
-
setup(B, { emit:
|
|
33
|
+
setup(B, { emit: f }) {
|
|
34
34
|
const n = B, h = D(), t = M(), i = V(), E = j(G.key);
|
|
35
35
|
if (!E)
|
|
36
36
|
throw new Error("TableRow must be used within a Table component");
|
|
37
|
-
const { hasActions: R, hasCustomExpandToggle: v, isExpandable: $, isSelectable: u, layout: r } = E,
|
|
38
|
-
var
|
|
39
|
-
let
|
|
40
|
-
return u.value && (
|
|
37
|
+
const { hasActions: R, hasCustomExpandToggle: v, isExpandable: $, isSelectable: u, layout: r } = E, o = P(n.isExpanded), l = k(() => $ && !!i.expansion), I = k(() => {
|
|
38
|
+
var s;
|
|
39
|
+
let a = ((s = i.default) == null ? void 0 : s.call(i, { toggleExpand: d }).length) ?? 0;
|
|
40
|
+
return u.value && (a += 1), l.value && !v.value && (a += 1), a;
|
|
41
41
|
}), _ = J("table-row-");
|
|
42
|
-
function d(
|
|
43
|
-
if (!
|
|
42
|
+
function d(a) {
|
|
43
|
+
if (!l.value)
|
|
44
44
|
throw new Error("Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.");
|
|
45
|
-
const
|
|
46
|
-
|
|
45
|
+
const s = typeof a == "boolean" ? a : !o.value;
|
|
46
|
+
o.value = s, f("update:isExpanded", s);
|
|
47
47
|
}
|
|
48
48
|
return q(
|
|
49
49
|
() => n.isExpanded,
|
|
50
50
|
() => d(n.isExpanded)
|
|
51
|
-
), (
|
|
51
|
+
), (a, s) => (c(), g(z, null, [
|
|
52
52
|
F("tr", y({
|
|
53
53
|
class: ["stash-table-row", [
|
|
54
54
|
e(t).root,
|
|
55
55
|
e(t)[`layout--${e(r)}`],
|
|
56
56
|
{
|
|
57
|
-
[e(t)["is-expandable"]]:
|
|
58
|
-
[e(t)["is-expanded"]]:
|
|
59
|
-
[e(t)["root--hidden-divider"]]:
|
|
57
|
+
[e(t)["is-expandable"]]: l.value,
|
|
58
|
+
[e(t)["is-expanded"]]: o.value,
|
|
59
|
+
[e(t)["root--hidden-divider"]]: a.hideExpansionDivider,
|
|
60
60
|
"tw-p-gutter": e(r) === "stack",
|
|
61
|
-
"tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none": e(r) === "stack" && !
|
|
61
|
+
"tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none": e(r) === "stack" && !l.value,
|
|
62
62
|
"tw-pt-[60px]": e(R) && e(r) === "stack" && !e(u)
|
|
63
63
|
}
|
|
64
64
|
]],
|
|
65
65
|
"data-test": "stash-table-row"
|
|
66
66
|
}, e(h)), [
|
|
67
|
-
e(u) ? (
|
|
67
|
+
e(u) ? (c(), C(T, {
|
|
68
68
|
key: 0,
|
|
69
69
|
"is-control": "",
|
|
70
|
-
class:
|
|
70
|
+
class: p(["stash-table-row__selection-cell tw-min-w-[48px]", e(t)["row-control-cell"]]),
|
|
71
|
+
"data-test": "stash-table-row|selection-cell"
|
|
71
72
|
}, {
|
|
72
73
|
default: m(() => [
|
|
73
74
|
w(L, {
|
|
74
|
-
class:
|
|
75
|
+
class: p(e(t)["row-selection-checkbox"]),
|
|
75
76
|
checked: n.isSelected,
|
|
76
77
|
disabled: n.isSelectDisabled,
|
|
77
|
-
title: e(
|
|
78
|
-
"onUpdate:checked":
|
|
78
|
+
title: e(b)("ll.select.self"),
|
|
79
|
+
"onUpdate:checked": s[0] || (s[0] = (N) => f("update:isSelected", N))
|
|
79
80
|
}, null, 8, ["class", "checked", "disabled", "title"])
|
|
80
81
|
]),
|
|
81
82
|
_: 1
|
|
82
83
|
}, 8, ["class"])) : x("", !0),
|
|
83
|
-
|
|
84
|
+
l.value && !e(v) ? (c(), C(T, {
|
|
84
85
|
key: 1,
|
|
85
|
-
class:
|
|
86
|
-
"data-test": "table-row-
|
|
86
|
+
class: p(["stash-table-row__toggle-expansion-cell tw-px-0", e(t)["row-control-cell"]]),
|
|
87
|
+
"data-test": "stash-table-row|custom-expansion-cell",
|
|
87
88
|
"is-control": ""
|
|
88
89
|
}, {
|
|
89
90
|
default: m(() => [
|
|
90
91
|
w(O, {
|
|
91
92
|
"aria-controls": e(_),
|
|
92
|
-
"aria-label":
|
|
93
|
-
direction:
|
|
94
|
-
"is-expanded":
|
|
93
|
+
"aria-label": o.value ? e(b)("ll.table.collapseRow") : e(b)("ll.table.expandRow"),
|
|
94
|
+
direction: o.value ? "up" : "down",
|
|
95
|
+
"is-expanded": o.value,
|
|
95
96
|
onClick: d
|
|
96
97
|
}, null, 8, ["aria-controls", "aria-label", "direction", "is-expanded"])
|
|
97
98
|
]),
|
|
98
99
|
_: 1
|
|
99
100
|
}, 8, ["class"])) : x("", !0),
|
|
100
|
-
S(
|
|
101
|
-
isRowExpanded:
|
|
101
|
+
S(a.$slots, "default", {
|
|
102
|
+
isRowExpanded: o.value,
|
|
102
103
|
toggleExpand: d
|
|
103
104
|
})
|
|
104
105
|
], 16),
|
|
105
|
-
|
|
106
|
+
l.value ? (c(), g("tr", y({
|
|
106
107
|
key: 0,
|
|
107
|
-
class: ["stash-table-row stash-table-row
|
|
108
|
+
class: ["stash-table-row stash-table-row--expandable", e(t)["row-expansion"]],
|
|
108
109
|
"data-test": "stash-table-row"
|
|
109
110
|
}, e(h)), [
|
|
110
111
|
w(U, {
|
|
111
112
|
is: "td",
|
|
112
113
|
id: e(_),
|
|
113
|
-
class:
|
|
114
|
-
"data-test": "table-row
|
|
114
|
+
class: p(["tw-border-none tw-bg-white tw-px-3 tw-py-0", e(t)["row-expansion-content"]]),
|
|
115
|
+
"data-test": "stash-table-row|expansion-cell",
|
|
115
116
|
colspan: I.value,
|
|
116
|
-
"is-expanded":
|
|
117
|
+
"is-expanded": o.value
|
|
117
118
|
}, {
|
|
118
119
|
default: m(() => [
|
|
119
|
-
S(
|
|
120
|
+
S(a.$slots, "expansion")
|
|
120
121
|
]),
|
|
121
122
|
_: 3
|
|
122
123
|
}, 8, ["id", "class", "colspan", "is-expanded"])
|
package/dist/TableRow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, inject, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n });\n\n const emit =\n defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = useSlots();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isExpandable, isSelectable, layout } = tableInjection;\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable && !!slots.expansion);\n\n const childCellCount = computed(() => {\n let count = slots.default?.({ toggleExpand }).length ?? 0;\n\n if (isSelectable.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'tw-p-gutter': layout === 'stack',\n 'tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none': layout === 'stack' && !isRowExpandable,\n 'tw-pt-[60px]': hasActions && layout === 'stack' && !isSelectable,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"isSelectable\"\n is-control\n class=\"stash-table-row__selection-cell tw-min-w-[48px]\"\n :class=\"classes['row-control-cell']\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"
|
|
1
|
+
{"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, inject, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n });\n\n const emit =\n defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = useSlots();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isExpandable, isSelectable, layout } = tableInjection;\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable && !!slots.expansion);\n\n const childCellCount = computed(() => {\n let count = slots.default?.({ toggleExpand }).length ?? 0;\n\n if (isSelectable.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'tw-p-gutter': layout === 'stack',\n 'tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none': layout === 'stack' && !isRowExpandable,\n 'tw-pt-[60px]': hasActions && layout === 'stack' && !isSelectable,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"isSelectable\"\n is-control\n class=\"stash-table-row__selection-cell tw-min-w-[48px]\"\n :class=\"classes['row-control-cell']\"\n data-test=\"stash-table-row|selection-cell\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"stash-table-row__toggle-expansion-cell tw-px-0\"\n data-test=\"stash-table-row|custom-expansion-cell\"\n is-control\n :class=\"classes['row-control-cell']\"\n >\n <ChevronToggle\n :aria-controls=\"rowId\"\n :aria-label=\"isRowExpanded ? t('ll.table.collapseRow') : t('ll.table.expandRow')\"\n :direction=\"isRowExpanded ? 'up' : 'down'\"\n :is-expanded=\"isRowExpanded\"\n @click=\"toggleExpand\"\n />\n </TableCell>\n <!-- @slot default -->\n <slot :is-row-expanded=\"isRowExpanded\" :toggle-expand=\"toggleExpand\"></slot>\n </tr>\n <tr\n v-if=\"isRowExpandable\"\n class=\"stash-table-row stash-table-row--expandable\"\n :class=\"classes['row-expansion']\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <Expand\n is=\"td\"\n :id=\"rowId\"\n class=\"tw-border-none tw-bg-white tw-px-3 tw-py-0\"\n data-test=\"stash-table-row|expansion-cell\"\n :class=\"classes['row-expansion-content']\"\n :colspan=\"childCellCount\"\n :is-expanded=\"isRowExpanded\"\n >\n <!-- @slot expansion, for expandable content -->\n <slot name=\"expansion\"></slot>\n </Expand>\n </tr>\n</template>\n\n<style module>\n .root {\n border: 0;\n }\n\n /**\n * Only takes effect when hideExpansionDivider is true, for a softer collapse transition as the bottom border re-appears\n */\n .is-expandable > td {\n border-bottom-color: var(--color-ice-200);\n transition: border-bottom-color 0.5s;\n }\n\n .root--hidden-divider.is-expanded > td {\n transition: border-bottom-color 0s;\n /**\n * Removes the grey cell background for 'control' cells at lower breakpoints, letting the white of the tr come through.\n */\n border-bottom-color: transparent;\n }\n\n .layout--scroll {\n border-radius: 0;\n box-shadow: none !important;\n margin: 0;\n }\n\n .layout--scroll:last-of-type {\n border: 0;\n }\n\n .layout--scroll:last-of-type td {\n border-bottom: none;\n }\n\n .layout--stack {\n align-items: stretch;\n background-color: var(--color-white);\n column-gap: var(--grid-gutter);\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n position: relative;\n row-gap: var(--grid-gutter);\n }\n\n .layout--stack:not(.is-expanded) {\n border-radius: var(--border-radius);\n transition: border-radius 0.5s;\n }\n\n .layout--stack.is-expanded {\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n }\n\n .row-selection-checkbox label {\n padding: 0;\n min-height: var(--ll-space-3);\n vertical-align: middle;\n }\n\n .layout--stack .row-control-cell {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n /* On mobile, display controls on their own row, pushing other cells below */\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: 1;\n }\n\n .row-expansion-content {\n box-shadow: inset 0 -1px 0 0 var(--color-ice-200);\n }\n\n .layout--stack + .row-expansion,\n .layout--stack + .row-expansion > .row-expansion-content {\n display: block;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: 1px solid var(--color-ice-200);\n border-bottom-left-radius: var(--border-radius);\n border-bottom-right-radius: var(--border-radius);\n margin-bottom: var(--ll-space-3);\n }\n\n .layout--stack.root--hidden-divider + .row-expansion > .row-expansion-content {\n border-top: none;\n }\n\n /* On large screens, match the styles for layout-SCROLL */\n @media screen(lg) {\n .layout--stack {\n align-items: unset;\n background-color: unset;\n border: 0;\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: 0;\n box-shadow: none;\n column-gap: unset;\n display: table-row;\n grid-template-columns: unset;\n row-gap: unset;\n }\n\n .layout--stack:last-of-type {\n border-bottom: 0;\n }\n\n .layout--stack .row-control-cell {\n display: table-cell;\n }\n\n .layout--stack + .row-expansion {\n display: table-row;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n display: table-cell;\n margin-bottom: unset;\n }\n\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: unset;\n }\n }\n</style>\n"],"names":["attrs","useAttrs","classes","useCssModule","slots","useSlots","tableInjection","inject","TABLE_INJECTION","hasActions","hasCustomExpandToggle","isExpandable","isSelectable","layout","isRowExpanded","ref","props","isRowExpandable","computed","childCellCount","count","_a","toggleExpand","rowId","uniqueId","value","isExpanded","emit","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoCQA,IAAQC,KACRC,IAAUC,KACVC,IAAQC,KAERC,IAAiBC,EAAOC,EAAgB,GAAG;AAEjD,QAAI,CAACF;AACG,YAAA,IAAI,MAAM,gDAAgD;AAGlE,UAAM,EAAE,YAAAG,GAAY,uBAAAC,GAAuB,cAAAC,GAAc,cAAAC,GAAc,QAAAC,EAAW,IAAAP,GAE5EQ,IAAgBC,EAAIC,EAAM,UAAU,GACpCC,IAAkBC,EAAS,MAAMP,KAAgB,CAAC,CAACP,EAAM,SAAS,GAElEe,IAAiBD,EAAS,MAAM;;AACpC,UAAIE,MAAQC,IAAAjB,EAAM,YAAN,gBAAAiB,EAAA,KAAAjB,GAAgB,EAAE,cAAAkB,KAAgB,WAAU;AAExD,aAAIV,EAAa,UACNQ,KAAA,IAGPH,EAAgB,SAAS,CAACP,EAAsB,UACzCU,KAAA,IAGJA;AAAA,IAAA,CACR,GACKG,IAAQC,EAAS,YAAY;AAEnC,aAASF,EAAaG,GAAiB;AACjC,UAAA,CAACR,EAAgB;AACb,cAAA,IAAI,MAAM,kFAAkF;AAGpG,YAAMS,IAAa,OAAOD,KAAU,YAAYA,IAAQ,CAACX,EAAc;AAEvE,MAAAA,EAAc,QAAQY,GACtBC,EAAK,qBAAqBD,CAAU;AAAA,IACtC;AAEA,WAAAE;AAAA,MACE,MAAMZ,EAAM;AAAA,MACZ,MAAMM,EAAaN,EAAM,UAAU;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/Tabs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as o, s as t } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-
|
|
2
|
-
import { T as C, a as E } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-
|
|
1
|
+
import { _ as o, s as t } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js";
|
|
2
|
+
import { T as C, a as E } from "./Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js";
|
|
3
3
|
import { _ as r } from "./_plugin-vue_export-helper-dad06003.js";
|
|
4
4
|
import "vue";
|
|
5
5
|
import "lodash-es/debounce";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { defineComponent as z, useCssModule as U, ref as
|
|
1
|
+
import { defineComponent as z, useCssModule as U, ref as a, computed as b, provide as V, onMounted as j, onUpdated as J, onDeactivated as R, onBeforeUnmount as q, openBlock as k, createElementBlock as F, createElementVNode as f, normalizeStyle as K, normalizeClass as I, renderSlot as L, createBlock as W, withCtx as A, unref as p, createTextVNode as Y, toDisplayString as G, createVNode as H, createCommentVNode as P } from "vue";
|
|
2
2
|
import Q from "lodash-es/debounce";
|
|
3
3
|
import X from "lodash-es/uniqueId";
|
|
4
4
|
import { DEBOUNCE as Z } from "./constants.js";
|
|
5
5
|
import { t as ee } from "./locale.js";
|
|
6
6
|
import te from "./Dropdown.js";
|
|
7
7
|
import oe from "./Icon.js";
|
|
8
|
-
const
|
|
8
|
+
const re = Object.freeze({
|
|
9
9
|
key: Symbol("TABS_INJECTION_KEY")
|
|
10
10
|
});
|
|
11
11
|
var N = /* @__PURE__ */ ((s) => (s.Line = "line", s.Enclosed = "enclosed", s))(N || {});
|
|
12
|
-
const
|
|
13
|
-
class: "
|
|
12
|
+
const ae = {
|
|
13
|
+
class: "stash-tabs tw-relative",
|
|
14
14
|
role: "tabList",
|
|
15
15
|
"data-test": "stash-tabs"
|
|
16
16
|
}, se = ["aria-controls", "aria-expanded", "onClick"], ie = ["id"], be = /* @__PURE__ */ z({
|
|
@@ -21,7 +21,7 @@ const re = {
|
|
|
21
21
|
},
|
|
22
22
|
emits: ["update:activeTab"],
|
|
23
23
|
setup(s, { emit: O }) {
|
|
24
|
-
const d = s, D = U(), l =
|
|
24
|
+
const d = s, D = U(), l = a(), c = a(), i = a(void 0), M = "IntersectionObserver" in window, r = a(/* @__PURE__ */ new Set()), m = a(0), h = a(), E = X("more-dropdown-menu-"), u = a(!1), g = b({
|
|
25
25
|
get() {
|
|
26
26
|
return d.activeTab;
|
|
27
27
|
},
|
|
@@ -30,18 +30,18 @@ const re = {
|
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
function B(t) {
|
|
33
|
-
|
|
33
|
+
g.value = t;
|
|
34
34
|
}
|
|
35
|
-
V(
|
|
36
|
-
activeTab: b(() =>
|
|
35
|
+
V(re.key, {
|
|
36
|
+
activeTab: b(() => g.value),
|
|
37
37
|
variant: b(() => d.variant),
|
|
38
38
|
setActiveTab: B
|
|
39
39
|
});
|
|
40
|
-
function
|
|
40
|
+
function y() {
|
|
41
41
|
var w, C, T;
|
|
42
42
|
if (!M || !l.value)
|
|
43
43
|
return;
|
|
44
|
-
const t = Array.from((w = l.value) == null ? void 0 : w.children),
|
|
44
|
+
const t = Array.from((w = l.value) == null ? void 0 : w.children), _ = {
|
|
45
45
|
root: l.value,
|
|
46
46
|
rootMargin: "0px",
|
|
47
47
|
threshold: Array.from({ length: 100 }).map((e, o) => (o + 1) / 100)
|
|
@@ -49,17 +49,17 @@ const re = {
|
|
|
49
49
|
if (i.value = new IntersectionObserver((e) => {
|
|
50
50
|
e.forEach((o) => {
|
|
51
51
|
const n = o.target.getAttribute("id");
|
|
52
|
-
o.intersectionRatio > 0.94 ?
|
|
52
|
+
o.intersectionRatio > 0.94 ? r.value.has(n) && r.value.delete(n) : n && !r.value.has(n) && r.value.add(n);
|
|
53
53
|
});
|
|
54
|
-
},
|
|
54
|
+
}, _), t.forEach((e) => {
|
|
55
55
|
var o;
|
|
56
|
-
(o = i.value) == null || o.observe(e),
|
|
56
|
+
(o = i.value) == null || o.observe(e), r.value.has(e.getAttribute("id")) ? e.classList.add("tw-invisible") : e.classList.remove("tw-invisible");
|
|
57
57
|
}), m.value = (T = (C = h.value) == null ? void 0 : C.$el) == null ? void 0 : T.getBoundingClientRect().width, !c.value)
|
|
58
58
|
return;
|
|
59
59
|
Array.from(c.value.children).forEach((e) => {
|
|
60
60
|
const o = e.firstElementChild;
|
|
61
61
|
o.className = "", e.className = "", e.classList.add(
|
|
62
|
-
D["
|
|
62
|
+
D["menu-tab"],
|
|
63
63
|
"tw-rounded",
|
|
64
64
|
"tw-text-sm",
|
|
65
65
|
"tw-p-1.5",
|
|
@@ -75,16 +75,16 @@ const re = {
|
|
|
75
75
|
"aria-disabled:hover:tw-cursor-default",
|
|
76
76
|
"aria-selected:tw-text-white",
|
|
77
77
|
"aria-selected:tw-bg-blue-500"
|
|
78
|
-
),
|
|
78
|
+
), r.value.has(e.getAttribute("id")) ? e.classList.remove("tw-hidden") : e.classList.add("tw-hidden"), e.removeEventListener("click", () => {
|
|
79
79
|
});
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
-
const S = Q(
|
|
82
|
+
const S = Q(y, Z.FAST, { leading: !0 });
|
|
83
83
|
function v() {
|
|
84
84
|
i.value && (i.value.disconnect(), i.value = void 0);
|
|
85
85
|
}
|
|
86
86
|
j(() => {
|
|
87
|
-
|
|
87
|
+
y();
|
|
88
88
|
}), J(() => {
|
|
89
89
|
v(), S();
|
|
90
90
|
}), R(() => {
|
|
@@ -95,7 +95,7 @@ const re = {
|
|
|
95
95
|
function $(t) {
|
|
96
96
|
t(), u.value = !u.value;
|
|
97
97
|
}
|
|
98
|
-
return (t,
|
|
98
|
+
return (t, _) => (k(), F("div", ae, [
|
|
99
99
|
f("ul", {
|
|
100
100
|
ref_key: "tabListEl",
|
|
101
101
|
ref: l,
|
|
@@ -109,7 +109,7 @@ const re = {
|
|
|
109
109
|
}])
|
|
110
110
|
}, [
|
|
111
111
|
L(t.$slots, "default"),
|
|
112
|
-
|
|
112
|
+
r.value.size ? (k(), W(te, {
|
|
113
113
|
key: 0,
|
|
114
114
|
ref_key: "moreDropdownEl",
|
|
115
115
|
ref: h,
|
|
@@ -118,7 +118,7 @@ const re = {
|
|
|
118
118
|
toggle: A(({ toggle: x }) => [
|
|
119
119
|
f("button", {
|
|
120
120
|
"aria-haspopup": "menu",
|
|
121
|
-
"aria-controls": p(
|
|
121
|
+
"aria-controls": p(E),
|
|
122
122
|
"aria-expanded": u.value,
|
|
123
123
|
class: I(["tw-flex tw-cursor-pointer tw-items-center tw-justify-center tw-border-solid tw-px-6 tw-py-1.5 tw-text-sm tw-font-medium tw-text-blue-500 hover:tw-text-blue-700", { "tw-border-t-4 tw-border-transparent": d.variant === "enclosed" }]),
|
|
124
124
|
type: "button",
|
|
@@ -130,10 +130,10 @@ const re = {
|
|
|
130
130
|
]),
|
|
131
131
|
default: A(() => [
|
|
132
132
|
f("ul", {
|
|
133
|
-
id: p(
|
|
133
|
+
id: p(E),
|
|
134
134
|
ref_key: "moreDropdownMenuEl",
|
|
135
135
|
ref: c,
|
|
136
|
-
class: "
|
|
136
|
+
class: "tw-space-y-1.5 tw-px-1.5 tw-pb-1.5",
|
|
137
137
|
role: "menu"
|
|
138
138
|
}, [
|
|
139
139
|
L(t.$slots, "default")
|
|
@@ -145,12 +145,12 @@ const re = {
|
|
|
145
145
|
]));
|
|
146
146
|
}
|
|
147
147
|
}), fe = {
|
|
148
|
-
"
|
|
148
|
+
"menu-tab": "_menu-tab_frbn6_2"
|
|
149
149
|
};
|
|
150
150
|
export {
|
|
151
|
-
|
|
151
|
+
re as T,
|
|
152
152
|
be as _,
|
|
153
153
|
N as a,
|
|
154
154
|
fe as s
|
|
155
155
|
};
|
|
156
|
-
//# sourceMappingURL=Tabs.vue_used_vue_type_style_index_0_lang.module-
|
|
156
|
+
//# sourceMappingURL=Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js","sources":["../src/components/Tabs/keys.ts","../src/components/Tabs/models.ts","../src/components/Tabs/Tabs.vue"],"sourcesContent":["import { Injection } from '../../../types/utils';\nimport { TabsInjection } from './models';\n\nexport const TABS_INJECTION: Injection<TabsInjection> = Object.freeze({\n key: Symbol('TABS_INJECTION_KEY'),\n});\n","import { ComputedRef } from 'vue';\n\nexport enum TabVariant {\n Line = 'line',\n Enclosed = 'enclosed',\n}\n\nexport type TabVariants = `${TabVariant}`;\n\nexport interface TabsInjection {\n activeTab: ComputedRef<string>;\n variant: ComputedRef<TabVariants>;\n setActiveTab: (newTabValue: string) => void;\n}\n","<script lang=\"ts\">\n import { TabVariant, TabVariants } from './models';\n\n export * from './keys';\n export * from './models';\n\n export interface TabsProps {\n /**\n * The currently active tab value\n */\n activeTab: string;\n\n /**\n * Tabs variant\n */\n variant?: TabVariants;\n }\n</script>\n\n<script setup lang=\"ts\">\n import debounce from 'lodash-es/debounce';\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, onDeactivated, onMounted, onUpdated, provide, Ref, ref, useCssModule } from 'vue';\n\n import { DEBOUNCE } from '../../constants';\n import { t } from '../../locale';\n import Dropdown from '../Dropdown/Dropdown.vue';\n import Icon from '../Icon/Icon.vue';\n import { TABS_INJECTION } from './keys';\n\n const emit =\n defineEmits<{\n (e: 'update:activeTab', newTabValue: TabsProps['activeTab']): void;\n }>();\n\n const props = withDefaults(defineProps<TabsProps>(), {\n variant: TabVariant.Line,\n });\n const classes = useCssModule();\n\n const tabListEl = ref();\n const moreDropdownMenuEl = ref();\n const observer: Ref<IntersectionObserver | undefined> = ref(undefined);\n const hasIntersectionObserver = 'IntersectionObserver' in window;\n const overflowIds = ref<Set<string>>(new Set());\n const moreDropdownWidth = ref(0);\n const moreDropdownEl = ref<InstanceType<typeof Dropdown>>();\n const moreMenuId = uniqueId('more-dropdown-menu-');\n const isMoreMenuOpen = ref(false);\n\n const currentActiveTab = computed({\n get() {\n return props.activeTab;\n },\n set(nv: TabsProps['activeTab']) {\n emit('update:activeTab', nv);\n },\n });\n\n function setActiveTab(newTabValue: TabsProps['activeTab']) {\n currentActiveTab.value = newTabValue;\n }\n\n provide(TABS_INJECTION.key, {\n activeTab: computed(() => currentActiveTab.value),\n variant: computed(() => props.variant),\n setActiveTab,\n });\n\n function initObserve() {\n if (!hasIntersectionObserver) {\n return;\n }\n\n if (!tabListEl.value) {\n return;\n }\n\n const tabs = Array.from(tabListEl.value?.children as HTMLLIElement[]);\n const options = {\n root: tabListEl.value,\n rootMargin: '0px',\n threshold: Array.from({ length: 100 }).map((v, i) => (i + 1) / 100),\n };\n\n observer.value = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const dataId = entry.target.getAttribute('id') as string;\n /**\n * Check for partial intersection.\n * Zooming out can result in ratio of approx 0.984\n * Anything higher will result in nav items disappearing\n */\n if (entry.intersectionRatio > 0.94) {\n // show tab, hide in dropdown\n if (overflowIds.value.has(dataId)) {\n overflowIds.value.delete(dataId);\n }\n } else {\n // hide tab, show in dropdown\n if (dataId && !overflowIds.value.has(dataId)) {\n overflowIds.value.add(dataId);\n }\n }\n });\n }, options);\n\n tabs.forEach((element) => {\n observer.value?.observe(element);\n if (overflowIds.value.has(element.getAttribute('id') as string)) {\n element.classList.add('tw-invisible');\n } else {\n element.classList.remove('tw-invisible');\n }\n });\n\n moreDropdownWidth.value = moreDropdownEl.value?.$el?.getBoundingClientRect().width;\n\n if (!moreDropdownMenuEl.value) {\n return;\n }\n\n const dropdownList = Array.from(moreDropdownMenuEl.value.children as HTMLLIElement[]);\n dropdownList.forEach((element) => {\n const firstElementChild = element.firstElementChild as Element;\n firstElementChild.className = '';\n element.className = '';\n\n element.classList.add(\n classes['menu-tab'],\n 'tw-rounded',\n 'tw-text-sm',\n 'tw-p-1.5',\n 'tw-text-left',\n 'tw-cursor-pointer',\n 'tw-text-ice-700',\n 'hover:tw-text-white',\n 'hover:tw-bg-blue-500',\n 'aria-disabled:tw-text-ice-500',\n 'aria-disabled:tw-pointer-events-none',\n 'aria-disabled:hover:tw-text-ice-500',\n 'aria-disabled:hover:tw-bg-inherit',\n 'aria-disabled:hover:tw-cursor-default',\n 'aria-selected:tw-text-white',\n 'aria-selected:tw-bg-blue-500',\n );\n\n if (!overflowIds.value.has(element.getAttribute('id') as string)) {\n element.classList.add('tw-hidden');\n } else {\n element.classList.remove('tw-hidden');\n }\n\n element.removeEventListener('click', () => {});\n });\n }\n\n const debouncedInitObserve = debounce(initObserve, DEBOUNCE.FAST, { leading: true });\n\n function destroyObserver() {\n if (observer.value) {\n observer.value.disconnect();\n observer.value = undefined;\n }\n }\n\n onMounted(() => {\n initObserve();\n });\n\n onUpdated(() => {\n destroyObserver();\n debouncedInitObserve();\n });\n\n onDeactivated(() => {\n destroyObserver();\n });\n\n onBeforeUnmount(() => {\n destroyObserver();\n });\n\n function onMoreClick(toggleMoreDropdown) {\n toggleMoreDropdown();\n isMoreMenuOpen.value = !isMoreMenuOpen.value;\n }\n</script>\n\n<template>\n <div class=\"stash-tabs tw-relative\" role=\"tabList\" data-test=\"stash-tabs\">\n <ul\n ref=\"tabListEl\"\n :style=\"{\n width: `calc(100% - ${moreDropdownWidth}px)`,\n }\"\n class=\"stash-tabs-list tw-flex tw-items-end tw-overflow-hidden\"\n :class=\"{\n 'stash-tabs-list--line': variant === 'line',\n 'stash-tabs-list--enclosed': variant === 'enclosed',\n 'tw-gap-6': variant === 'line',\n }\"\n >\n <slot></slot>\n\n <Dropdown v-if=\"overflowIds.size\" ref=\"moreDropdownEl\" class=\"!tw-absolute tw-right-0 tw-top-0\">\n <template #toggle=\"{ toggle }\">\n <button\n aria-haspopup=\"menu\"\n :aria-controls=\"moreMenuId\"\n :aria-expanded=\"isMoreMenuOpen\"\n class=\"\n tw-flex\n tw-cursor-pointer\n tw-items-center\n tw-justify-center\n tw-border-solid\n tw-px-6\n tw-py-1.5\n tw-text-sm\n tw-font-medium\n tw-text-blue-500\n hover:tw-text-blue-700\n \"\n :class=\"{ 'tw-border-t-4 tw-border-transparent': props.variant === 'enclosed' }\"\n type=\"button\"\n @click=\"onMoreClick(toggle)\"\n >\n {{ t('ll.more') }}\n <Icon name=\"caret-down\" />\n </button>\n </template>\n <template #default>\n <ul :id=\"moreMenuId\" ref=\"moreDropdownMenuEl\" class=\"tw-space-y-1.5 tw-px-1.5 tw-pb-1.5\" role=\"menu\">\n <slot></slot>\n </ul>\n </template>\n </Dropdown>\n </ul>\n </div>\n</template>\n\n<style module>\n .menu-tab > a {\n /* prevents the global link styles to overwrite the overflowed tab styles */\n &,\n &:hover,\n &:focus {\n color: inherit;\n }\n }\n</style>\n"],"names":["TABS_INJECTION","TabVariant","classes","useCssModule","tabListEl","ref","moreDropdownMenuEl","observer","hasIntersectionObserver","overflowIds","moreDropdownWidth","moreDropdownEl","moreMenuId","uniqueId","isMoreMenuOpen","currentActiveTab","computed","props","nv","emit","setActiveTab","newTabValue","provide","initObserve","tabs","_a","options","v","i","entries","entry","dataId","element","_c","_b","firstElementChild","debouncedInitObserve","debounce","DEBOUNCE","destroyObserver","onMounted","onUpdated","onDeactivated","onBeforeUnmount","onMoreClick","toggleMoreDropdown"],"mappings":"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"}
|