@dialpad/dialtone 9.101.2 → 9.102.0

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 (51) hide show
  1. package/dist/tokens/doc.json +19501 -19501
  2. package/dist/vue2/component-documentation.json +1 -1
  3. package/dist/vue2/components/dropdown/dropdown.vue.cjs +2 -0
  4. package/dist/vue2/components/dropdown/dropdown.vue.cjs.map +1 -1
  5. package/dist/vue2/components/dropdown/dropdown.vue.js +2 -0
  6. package/dist/vue2/components/dropdown/dropdown.vue.js.map +1 -1
  7. package/dist/vue2/components/popover/popover.vue.cjs +8 -1
  8. package/dist/vue2/components/popover/popover.vue.cjs.map +1 -1
  9. package/dist/vue2/components/popover/popover.vue.js +8 -1
  10. package/dist/vue2/components/popover/popover.vue.js.map +1 -1
  11. package/dist/vue2/components/tab/tab.vue.cjs +3 -15
  12. package/dist/vue2/components/tab/tab.vue.cjs.map +1 -1
  13. package/dist/vue2/components/tab/tab.vue.js +3 -15
  14. package/dist/vue2/components/tab/tab.vue.js.map +1 -1
  15. package/dist/vue2/components/tab/tab_group.vue.cjs +33 -29
  16. package/dist/vue2/components/tab/tab_group.vue.cjs.map +1 -1
  17. package/dist/vue2/components/tab/tab_group.vue.js +33 -29
  18. package/dist/vue2/components/tab/tab_group.vue.js.map +1 -1
  19. package/dist/vue2/components/tab/tab_panel.vue.cjs +1 -1
  20. package/dist/vue2/components/tab/tab_panel.vue.cjs.map +1 -1
  21. package/dist/vue2/components/tab/tab_panel.vue.js +1 -1
  22. package/dist/vue2/components/tab/tab_panel.vue.js.map +1 -1
  23. package/dist/vue2/types/components/dropdown/dropdown.vue.d.ts.map +1 -1
  24. package/dist/vue2/types/components/popover/popover.vue.d.ts +2 -0
  25. package/dist/vue2/types/components/tab/tab.vue.d.ts +1 -4
  26. package/dist/vue2/types/components/tab/tab_group.vue.d.ts +7 -13
  27. package/dist/vue2/types/components/tab/tab_group.vue.d.ts.map +1 -1
  28. package/dist/vue2/types/components/tab/tab_panel.vue.d.ts.map +1 -1
  29. package/dist/vue3/component-documentation.json +1 -1
  30. package/dist/vue3/components/dropdown/dropdown.vue.cjs +3 -0
  31. package/dist/vue3/components/dropdown/dropdown.vue.cjs.map +1 -1
  32. package/dist/vue3/components/dropdown/dropdown.vue.js +3 -0
  33. package/dist/vue3/components/dropdown/dropdown.vue.js.map +1 -1
  34. package/dist/vue3/components/tab/tab.vue.cjs +3 -15
  35. package/dist/vue3/components/tab/tab.vue.cjs.map +1 -1
  36. package/dist/vue3/components/tab/tab.vue.js +3 -15
  37. package/dist/vue3/components/tab/tab.vue.js.map +1 -1
  38. package/dist/vue3/components/tab/tab_group.vue.cjs +35 -30
  39. package/dist/vue3/components/tab/tab_group.vue.cjs.map +1 -1
  40. package/dist/vue3/components/tab/tab_group.vue.js +35 -30
  41. package/dist/vue3/components/tab/tab_group.vue.js.map +1 -1
  42. package/dist/vue3/components/tab/tab_panel.vue.cjs +5 -1
  43. package/dist/vue3/components/tab/tab_panel.vue.cjs.map +1 -1
  44. package/dist/vue3/components/tab/tab_panel.vue.js +6 -2
  45. package/dist/vue3/components/tab/tab_panel.vue.js.map +1 -1
  46. package/dist/vue3/types/components/dropdown/dropdown.vue.d.ts.map +1 -1
  47. package/dist/vue3/types/components/tab/tab.vue.d.ts +1 -4
  48. package/dist/vue3/types/components/tab/tab_group.vue.d.ts +8 -13
  49. package/dist/vue3/types/components/tab/tab_group.vue.d.ts.map +1 -1
  50. package/dist/vue3/types/components/tab/tab_panel.vue.d.ts.map +1 -1
  51. package/package.json +3 -3
@@ -7,7 +7,6 @@ const _sfc_main = {
7
7
  provide() {
8
8
  return {
9
9
  groupContext: this.provideObj,
10
- changeContentPanel: this.changeContentPanel,
11
10
  setFocus: this.setFocus
12
11
  };
13
12
  },
@@ -83,7 +82,14 @@ const _sfc_main = {
83
82
  * @event change
84
83
  * @type {Object}
85
84
  */
86
- "change"
85
+ "change",
86
+ /**
87
+ * Before change tab event with the event argument, useful to perform validations and prevent changing tabs if neccessary.
88
+ *
89
+ * @event before-change
90
+ * @type {Event}
91
+ */
92
+ "before-change"
87
93
  ],
88
94
  data() {
89
95
  return {
@@ -137,7 +143,7 @@ const _sfc_main = {
137
143
  return {
138
144
  context: el,
139
145
  panelId: (_a = el.getAttribute("aria-controls")) == null ? void 0 : _a.replace("dt-panel-", ""),
140
- id: (_b = el.getAttribute("id")) == null ? void 0 : _b.replace("dt-tab-", ""),
146
+ tabId: (_b = el.getAttribute("id")) == null ? void 0 : _b.replace("dt-tab-", ""),
141
147
  isSelected: el.getAttribute("aria-selected") === "true"
142
148
  };
143
149
  });
@@ -145,43 +151,37 @@ const _sfc_main = {
145
151
  onChange() {
146
152
  this.$emit("change", { ...this.provideObj });
147
153
  },
148
- changeContentPanel({ selected, selectOverride }) {
149
- this.provideObj.selected = selected;
150
- if (!selectOverride) {
151
- this.onChange();
152
- }
153
- },
154
154
  tabLeft() {
155
- const { index, tabs } = this.getIndexAndTabs();
155
+ const index = this.getFocusedTabIndex();
156
156
  if (index === -1) return;
157
- const indexElement = index - 1 < 0 ? tabs.length - 1 : index - 1;
158
- this.selectFocusOnTab(indexElement, tabs);
157
+ const indexElement = index - 1 < 0 ? this.tabs.length - 1 : index - 1;
158
+ this.selectFocusOnTab(indexElement);
159
159
  },
160
160
  tabRight() {
161
- const { index, tabs } = this.getIndexAndTabs();
161
+ const index = this.getFocusedTabIndex();
162
162
  if (index === -1) return;
163
- const indexElement = index + 1 > tabs.length - 1 ? 0 : index + 1;
164
- this.selectFocusOnTab(indexElement, tabs);
163
+ const indexElement = index + 1 > this.tabs.length - 1 ? 0 : index + 1;
164
+ this.selectFocusOnTab(indexElement);
165
165
  },
166
- selectFocusOnTab(index, tabs) {
167
- const { context } = tabs[index];
166
+ selectFocusOnTab(index) {
167
+ const { context } = this.tabs[index];
168
168
  context.focus();
169
169
  },
170
- selectTab() {
171
- const { tabs, index } = this.getIndexAndTabs();
172
- this.selectTabByIndex(index, tabs);
170
+ selectTab(event) {
171
+ if (this.isSameTabClicked()) return;
172
+ this.$emit("before-change", event);
173
+ if (event.defaultPrevented) return;
174
+ const index = this.getFocusedTabIndex();
175
+ this.selectTabByIndex(index);
176
+ this.onChange();
173
177
  },
174
- selectTabByIndex(index, tabs) {
175
- const { context, panelId } = tabs[index];
178
+ selectTabByIndex(index) {
179
+ const { context, panelId } = this.tabs[index];
176
180
  this.provideObj.selected = panelId;
177
181
  context.focus();
178
182
  },
179
- getIndexAndTabs() {
180
- const index = this.tabs.findIndex((context) => this.focusId ? context.id === `${this.focusId}` : context.isSelected);
181
- return {
182
- tabs: this.tabs,
183
- index
184
- };
183
+ getFocusedTabIndex() {
184
+ return this.tabs.findIndex((context) => this.focusId ? context.tabId === `${this.focusId}` : context.isSelected);
185
185
  },
186
186
  onHomeButton() {
187
187
  var _a, _b;
@@ -192,6 +192,10 @@ const _sfc_main = {
192
192
  var _a, _b;
193
193
  if (this.tabs.length === 0) return;
194
194
  (_b = (_a = this.tabs[this.tabs.length - 1]) == null ? void 0 : _a.context) == null ? void 0 : _b.focus();
195
+ },
196
+ isSameTabClicked() {
197
+ const tab = this.tabs[this.getFocusedTabIndex()];
198
+ return this.provideObj.selected === tab.panelId;
195
199
  }
196
200
  }
197
201
  };
@@ -219,9 +223,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
219
223
  _cache[2] || (_cache[2] = withKeys((...args) => $options.selectTab && $options.selectTab(...args), ["enter"])),
220
224
  _cache[3] || (_cache[3] = withKeys((...args) => $options.selectTab && $options.selectTab(...args), ["space"]))
221
225
  ],
226
+ onClick: _cache[4] || (_cache[4] = (...args) => $options.selectTab && $options.selectTab(...args)),
222
227
  onKeydown: [
223
- _cache[4] || (_cache[4] = withKeys((...args) => $options.onHomeButton && $options.onHomeButton(...args), ["home"])),
224
- _cache[5] || (_cache[5] = withKeys((...args) => $options.onEndButton && $options.onEndButton(...args), ["end"]))
228
+ _cache[5] || (_cache[5] = withKeys((...args) => $options.onHomeButton && $options.onHomeButton(...args), ["home"])),
229
+ _cache[6] || (_cache[6] = withKeys((...args) => $options.onEndButton && $options.onEndButton(...args), ["end"]))
225
230
  ]
226
231
  }), [
227
232
  renderSlot(_ctx.$slots, "tabs")
@@ -1 +1 @@
1
- {"version":3,"file":"tab_group.vue.js","sources":["../../../components/tab/tab_group.vue"],"sourcesContent":["<template>\n <div\n data-qa=\"dt-tab-group\"\n >\n <!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->\n <div\n ref=\"tabs\"\n :class=\"[\n 'd-tablist',\n TAB_LIST_SIZE_MODIFIERS[size],\n {\n [TAB_LIST_KIND_MODIFIERS.inverted]: inverted,\n [TAB_LIST_IMPORTANCE_MODIFIERS.borderless]: borderless,\n },\n tabListClass,\n ]\"\n v-bind=\"tabListChildProps\"\n role=\"tablist\"\n :aria-label=\"label\"\n @keyup.left=\"tabLeft\"\n @keyup.right=\"tabRight\"\n @keyup.enter=\"selectTab\"\n @keyup.space=\"selectTab\"\n @keydown.home=\"onHomeButton\"\n @keydown.end=\"onEndButton\"\n >\n <!-- @slot Slot for Tabs -->\n <slot name=\"tabs\" />\n </div>\n <!-- @slot Default slot for Panel -->\n <slot />\n </div>\n</template>\n\n<script>\nimport {\n TAB_LIST_SIZES,\n TAB_LIST_KIND_MODIFIERS,\n TAB_LIST_IMPORTANCE_MODIFIERS,\n TAB_LIST_SIZE_MODIFIERS,\n} from './tabs_constants';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabGroup',\n\n provide () {\n return {\n groupContext: this.provideObj,\n changeContentPanel: this.changeContentPanel,\n setFocus: this.setFocus,\n };\n },\n\n props: {\n /**\n * Identifies the tab group\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * The id of the selected tab panel which should be displayed\n */\n selected: {\n type: String,\n default: '',\n },\n\n /**\n * If true, disables the tab group\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If true, applies inverted styles to the tab group\n * @values true, false\n */\n inverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If true, applies borderless styles to the tab group\n * @values true, false\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If provided, applies size styles to the tab group\n * @values default, sm\n */\n size: {\n type: String,\n default: 'default',\n validate (size) {\n return TAB_LIST_SIZES.includes(size);\n },\n },\n\n /**\n * Pass through classes, used to customize the tab list\n */\n tabListClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through props, used to customize the tab list\n */\n tabListChildProps: {\n type: Object,\n default: () => ({}),\n },\n },\n\n emits: [\n /**\n * Change tab event with the arguments: selected id of the current tab and disabled value\n *\n * @event change\n * @type {Object}\n */\n 'change',\n ],\n\n data () {\n return {\n provideObj: {\n selected: '', // the currently displayed tab id\n disabled: false, // disable group\n },\n\n focusId: null,\n tabs: [],\n TAB_LIST_SIZE_MODIFIERS,\n TAB_LIST_KIND_MODIFIERS,\n TAB_LIST_IMPORTANCE_MODIFIERS,\n };\n },\n\n watch: {\n disabled: {\n immediate: true,\n handler () {\n this.provideObj.disabled = this.disabled;\n },\n },\n\n selected: {\n immediate: true,\n handler () {\n this.provideObj.selected = this.selected;\n },\n },\n },\n\n mounted () {\n this.updateSelected();\n },\n\n beforeUpdate () {\n this.updateSelected();\n },\n\n methods: {\n updateSelected () {\n /**\n * Prevent override tab selected by default\n */\n if (!this.provideObj.selected) {\n this.provideObj.selected = this.selected;\n }\n this.tabs = this.getTabChildren();\n },\n\n setFocus (focusId) {\n this.focusId = focusId;\n },\n\n getTabChildren () {\n const tabs = Array.from(this.$refs.tabs.querySelectorAll('.d-tab'));\n return tabs\n .map(el => {\n return ({\n context: el,\n panelId: el.getAttribute('aria-controls')?.replace('dt-panel-', ''),\n id: el.getAttribute('id')?.replace('dt-tab-', ''),\n isSelected: el.getAttribute('aria-selected') === 'true',\n });\n });\n },\n\n onChange () {\n this.$emit('change', { ...this.provideObj });\n },\n\n changeContentPanel ({ selected, selectOverride }) {\n this.provideObj.selected = selected;\n if (!selectOverride) {\n this.onChange();\n }\n },\n\n tabLeft () {\n const { index, tabs } = this.getIndexAndTabs();\n if (index === -1) return;\n const indexElement = index - 1 < 0 ? tabs.length - 1 : index - 1;\n this.selectFocusOnTab(indexElement, tabs);\n },\n\n tabRight () {\n const { index, tabs } = this.getIndexAndTabs();\n if (index === -1) return;\n\n const indexElement = index + 1 > tabs.length - 1 ? 0 : index + 1;\n this.selectFocusOnTab(indexElement, tabs);\n },\n\n selectFocusOnTab (index, tabs) {\n const { context } = tabs[index];\n context.focus();\n },\n\n selectTab () {\n const { tabs, index } = this.getIndexAndTabs();\n this.selectTabByIndex(index, tabs);\n },\n\n selectTabByIndex (index, tabs) {\n const { context, panelId } = tabs[index];\n this.provideObj.selected = panelId;\n context.focus();\n },\n\n getIndexAndTabs () {\n const index = this.tabs.findIndex((context) =>\n this.focusId ? context.id === `${this.focusId}` : context.isSelected);\n return {\n tabs: this.tabs,\n index,\n };\n },\n\n onHomeButton () {\n if (this.tabs.length === 0) return;\n this.tabs[0]?.context?.focus();\n },\n\n onEndButton () {\n if (this.tabs.length === 0) return;\n this.tabs[this.tabs.length - 1]?.context?.focus();\n },\n },\n};\n</script>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_mergeProps","_withKeys","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"tab_group.vue.js","sources":["../../../components/tab/tab_group.vue"],"sourcesContent":["<template>\n <div\n data-qa=\"dt-tab-group\"\n >\n <!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->\n <div\n ref=\"tabs\"\n :class=\"[\n 'd-tablist',\n TAB_LIST_SIZE_MODIFIERS[size],\n {\n [TAB_LIST_KIND_MODIFIERS.inverted]: inverted,\n [TAB_LIST_IMPORTANCE_MODIFIERS.borderless]: borderless,\n },\n tabListClass,\n ]\"\n v-bind=\"tabListChildProps\"\n role=\"tablist\"\n :aria-label=\"label\"\n @keyup.left=\"tabLeft\"\n @keyup.right=\"tabRight\"\n @keyup.enter=\"selectTab\"\n @keyup.space=\"selectTab\"\n @click=\"selectTab\"\n @keydown.home=\"onHomeButton\"\n @keydown.end=\"onEndButton\"\n >\n <!-- @slot Slot for Tabs -->\n <slot name=\"tabs\" />\n </div>\n <!-- @slot Default slot for Panel -->\n <slot />\n </div>\n</template>\n\n<script>\nimport {\n TAB_LIST_SIZES,\n TAB_LIST_KIND_MODIFIERS,\n TAB_LIST_IMPORTANCE_MODIFIERS,\n TAB_LIST_SIZE_MODIFIERS,\n} from './tabs_constants';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabGroup',\n\n provide () {\n return {\n groupContext: this.provideObj,\n setFocus: this.setFocus,\n };\n },\n\n props: {\n /**\n * Identifies the tab group\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * The id of the selected tab panel which should be displayed\n */\n selected: {\n type: String,\n default: '',\n },\n\n /**\n * If true, disables the tab group\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If true, applies inverted styles to the tab group\n * @values true, false\n */\n inverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If true, applies borderless styles to the tab group\n * @values true, false\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * If provided, applies size styles to the tab group\n * @values default, sm\n */\n size: {\n type: String,\n default: 'default',\n validate (size) {\n return TAB_LIST_SIZES.includes(size);\n },\n },\n\n /**\n * Pass through classes, used to customize the tab list\n */\n tabListClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through props, used to customize the tab list\n */\n tabListChildProps: {\n type: Object,\n default: () => ({}),\n },\n },\n\n emits: [\n /**\n * Change tab event with the arguments: selected id of the current tab and disabled value\n *\n * @event change\n * @type {Object}\n */\n 'change',\n\n /**\n * Before change tab event with the event argument, useful to perform validations and prevent changing tabs if neccessary.\n *\n * @event before-change\n * @type {Event}\n */\n 'before-change',\n ],\n\n data () {\n return {\n provideObj: {\n selected: '', // the currently displayed tab id\n disabled: false, // disable group\n },\n\n focusId: null,\n tabs: [],\n TAB_LIST_SIZE_MODIFIERS,\n TAB_LIST_KIND_MODIFIERS,\n TAB_LIST_IMPORTANCE_MODIFIERS,\n };\n },\n\n watch: {\n disabled: {\n immediate: true,\n handler () {\n this.provideObj.disabled = this.disabled;\n },\n },\n\n selected: {\n immediate: true,\n handler () {\n this.provideObj.selected = this.selected;\n },\n },\n },\n\n mounted () {\n this.updateSelected();\n },\n\n beforeUpdate () {\n this.updateSelected();\n },\n\n methods: {\n updateSelected () {\n /**\n * Prevent override tab selected by default\n */\n if (!this.provideObj.selected) {\n this.provideObj.selected = this.selected;\n }\n this.tabs = this.getTabChildren();\n },\n\n setFocus (focusId) {\n this.focusId = focusId;\n },\n\n getTabChildren () {\n const tabs = Array.from(this.$refs.tabs.querySelectorAll('.d-tab'));\n return tabs\n .map(el => {\n return ({\n context: el,\n panelId: el.getAttribute('aria-controls')?.replace('dt-panel-', ''),\n tabId: el.getAttribute('id')?.replace('dt-tab-', ''),\n isSelected: el.getAttribute('aria-selected') === 'true',\n });\n });\n },\n\n onChange () {\n this.$emit('change', { ...this.provideObj });\n },\n\n tabLeft () {\n const index = this.getFocusedTabIndex();\n if (index === -1) return;\n\n const indexElement = index - 1 < 0 ? this.tabs.length - 1 : index - 1;\n this.selectFocusOnTab(indexElement);\n },\n\n tabRight () {\n const index = this.getFocusedTabIndex();\n if (index === -1) return;\n\n const indexElement = index + 1 > this.tabs.length - 1 ? 0 : index + 1;\n this.selectFocusOnTab(indexElement);\n },\n\n selectFocusOnTab (index) {\n const { context } = this.tabs[index];\n context.focus();\n },\n\n selectTab (event) {\n if (this.isSameTabClicked()) return;\n\n this.$emit('before-change', event);\n if (event.defaultPrevented) return;\n\n const index = this.getFocusedTabIndex();\n\n this.selectTabByIndex(index);\n this.onChange();\n },\n\n selectTabByIndex (index) {\n const { context, panelId } = this.tabs[index];\n this.provideObj.selected = panelId;\n context.focus();\n },\n\n getFocusedTabIndex () {\n return this.tabs.findIndex((context) =>\n this.focusId ? context.tabId === `${this.focusId}` : context.isSelected);\n },\n\n onHomeButton () {\n if (this.tabs.length === 0) return;\n this.tabs[0]?.context?.focus();\n },\n\n onEndButton () {\n if (this.tabs.length === 0) return;\n this.tabs[this.tabs.length - 1]?.context?.focus();\n },\n\n isSameTabClicked () {\n const tab = this.tabs[this.getFocusedTabIndex()];\n return this.provideObj.selected === tab.panelId;\n },\n },\n};\n</script>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_mergeProps","_withKeys","_renderSlot"],"mappings":"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"}
@@ -83,7 +83,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
83
83
  class: vue.normalizeClass($props.tabPanelClass),
84
84
  "data-qa": "dt-tab-panel"
85
85
  }, [
86
- vue.renderSlot(_ctx.$slots, "default")
86
+ vue.withDirectives(vue.createElementVNode("div", null, [
87
+ vue.renderSlot(_ctx.$slots, "default")
88
+ ], 512), [
89
+ [vue.vShow, !$props.hidden]
90
+ ])
87
91
  ], 10, _hoisted_1)), [
88
92
  [vue.vShow, !$options.hidePanel]
89
93
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"tab_panel.vue.cjs","sources":["../../../components/tab/tab_panel.vue"],"sourcesContent":["<template>\n <div\n v-show=\"!hidePanel\"\n :id=\"`dt-panel-${id}`\"\n role=\"tabpanel\"\n :tabindex=\"isFirstElementFocusable ? -1 : 0\"\n :aria-labelledby=\"`dt-tab-${tabId}`\"\n :aria-hidden=\"`${hidePanel}`\"\n :class=\"tabPanelClass\"\n data-qa=\"dt-tab-panel\"\n >\n <!-- @slot Default slot for Tab Panel -->\n <slot />\n </div>\n</template>\n\n<script>\nimport Modal from '@/common/mixins/modal';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabPanel',\n\n mixins: [Modal],\n\n inject: ['groupContext'],\n\n props: {\n /**\n * Id of the panel\n */\n id: {\n type: String,\n required: true,\n },\n\n /**\n * Id of the associated tab\n */\n tabId: {\n type: String,\n required: true,\n },\n\n /**\n * If true, hides the tab content\n * @values true, false\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Used to customize the tab element\n */\n tabPanelClass: {\n type: [String, Array, Object],\n default: '',\n },\n },\n\n data () {\n return {\n isFirstElementFocusable: false,\n };\n },\n\n computed: {\n hidePanel () {\n return this.groupContext.selected !== this.id || this.hidden;\n },\n },\n\n async mounted () {\n const firstFocusableElement = await this.getFirstFocusableElement(this.$el);\n\n if (!firstFocusableElement) {\n this.isFirstElementFocusable = false;\n } else {\n // If the first focusable element isn't the first element in the panel,\n // then we need to set the panel tabindex to 0.\n // See notes in https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/\n this.isFirstElementFocusable = this.isFirstElementOfPanel(firstFocusableElement);\n }\n },\n\n methods: {\n isFirstElementOfPanel (element) {\n let current = element;\n let isFirstElement = true;\n\n while (current) {\n if (current.previousElementSibling !== null) {\n isFirstElement = false;\n break;\n }\n current = current.parentNode !== this.$el ? current.parentNode : null;\n }\n\n return isFirstElement;\n },\n },\n};\n</script>\n"],"names":["Modal","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":";;;;;AAuBA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,QAAQ,CAACA,MAAAA,OAAK;AAAA,EAEd,QAAQ,CAAC,cAAc;AAAA,EAEvB,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,MAC5B,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,yBAAyB;AAAA;EAE5B;AAAA,EAED,UAAU;AAAA,IACR,YAAa;AACX,aAAO,KAAK,aAAa,aAAa,KAAK,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAED,MAAM,UAAW;AACf,UAAM,wBAAwB,MAAM,KAAK,yBAAyB,KAAK,GAAG;AAE1E,QAAI,CAAC,uBAAuB;AAC1B,WAAK,0BAA0B;AAAA,WAC1B;AAIL,WAAK,0BAA0B,KAAK,sBAAsB,qBAAqB;AAAA,IACjF;AAAA,EACD;AAAA,EAED,SAAS;AAAA,IACP,sBAAuB,SAAS;AAC9B,UAAI,UAAU;AACd,UAAI,iBAAiB;AAErB,aAAO,SAAS;AACd,YAAI,QAAQ,2BAA2B,MAAM;AAC3C,2BAAiB;AACjB;AAAA,QACF;AACA,kBAAU,QAAQ,eAAe,KAAK,MAAM,QAAQ,aAAa;AAAA,MACnE;AAEA,aAAO;AAAA,IACR;AAAA,EACF;AACH;AA3GA,MAAA,aAAA,CAAA,MAAA,YAAA,mBAAA,aAAA;;8CACEC,IAAAA,mBAYM,OAAA;AAAA,IAVH,gBAAgB,OAAE,EAAA;AAAA,IACnB,MAAK;AAAA,IACJ,UAAU,MAAuB,0BAAA,KAAA;AAAA,IACjC,6BAA2B,OAAK,KAAA;AAAA,IAChC,kBAAgB,SAAS,SAAA;AAAA,IACzB,OARLC,IAAAA,eAQY,OAAa,aAAA;AAAA,IACrB,WAAQ;AAAA;IAGRC,eAAQ,KAAA,QAAA,SAAA;AAAA,EAZZ,GAAA,IAAA,UAAA,IAAA;AAAA,iBAEa,SAAS,SAAA;AAAA;;;;"}
1
+ {"version":3,"file":"tab_panel.vue.cjs","sources":["../../../components/tab/tab_panel.vue"],"sourcesContent":["<template>\n <div\n v-show=\"!hidePanel\"\n :id=\"`dt-panel-${id}`\"\n role=\"tabpanel\"\n :tabindex=\"isFirstElementFocusable ? -1 : 0\"\n :aria-labelledby=\"`dt-tab-${tabId}`\"\n :aria-hidden=\"`${hidePanel}`\"\n :class=\"tabPanelClass\"\n data-qa=\"dt-tab-panel\"\n >\n <!-- @slot Default slot for Tab Panel -->\n <div v-show=\"!hidden\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nimport Modal from '@/common/mixins/modal';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabPanel',\n\n mixins: [Modal],\n\n inject: ['groupContext'],\n\n props: {\n /**\n * Id of the panel\n */\n id: {\n type: String,\n required: true,\n },\n\n /**\n * Id of the associated tab\n */\n tabId: {\n type: String,\n required: true,\n },\n\n /**\n * If true, hides the tab content\n * @values true, false\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Used to customize the tab element\n */\n tabPanelClass: {\n type: [String, Array, Object],\n default: '',\n },\n },\n\n data () {\n return {\n isFirstElementFocusable: false,\n };\n },\n\n computed: {\n hidePanel () {\n return this.groupContext.selected !== this.id || this.hidden;\n },\n },\n\n async mounted () {\n const firstFocusableElement = await this.getFirstFocusableElement(this.$el);\n\n if (!firstFocusableElement) {\n this.isFirstElementFocusable = false;\n } else {\n // If the first focusable element isn't the first element in the panel,\n // then we need to set the panel tabindex to 0.\n // See notes in https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/\n this.isFirstElementFocusable = this.isFirstElementOfPanel(firstFocusableElement);\n }\n },\n\n methods: {\n isFirstElementOfPanel (element) {\n let current = element;\n let isFirstElement = true;\n\n while (current) {\n if (current.previousElementSibling !== null) {\n isFirstElement = false;\n break;\n }\n current = current.parentNode !== this.$el ? current.parentNode : null;\n }\n\n return isFirstElement;\n },\n },\n};\n</script>\n"],"names":["Modal","_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot"],"mappings":";;;;;AAyBA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,QAAQ,CAACA,MAAAA,OAAK;AAAA,EAEd,QAAQ,CAAC,cAAc;AAAA,EAEvB,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,MAC5B,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,yBAAyB;AAAA;EAE5B;AAAA,EAED,UAAU;AAAA,IACR,YAAa;AACX,aAAO,KAAK,aAAa,aAAa,KAAK,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAED,MAAM,UAAW;AACf,UAAM,wBAAwB,MAAM,KAAK,yBAAyB,KAAK,GAAG;AAE1E,QAAI,CAAC,uBAAuB;AAC1B,WAAK,0BAA0B;AAAA,WAC1B;AAIL,WAAK,0BAA0B,KAAK,sBAAsB,qBAAqB;AAAA,IACjF;AAAA,EACD;AAAA,EAED,SAAS;AAAA,IACP,sBAAuB,SAAS;AAC9B,UAAI,UAAU;AACd,UAAI,iBAAiB;AAErB,aAAO,SAAS;AACd,YAAI,QAAQ,2BAA2B,MAAM;AAC3C,2BAAiB;AACjB;AAAA,QACF;AACA,kBAAU,QAAQ,eAAe,KAAK,MAAM,QAAQ,aAAa;AAAA,MACnE;AAEA,aAAO;AAAA,IACR;AAAA,EACF;AACH;AA7GA,MAAA,aAAA,CAAA,MAAA,YAAA,mBAAA,aAAA;;8CACEC,IAAAA,mBAcM,OAAA;AAAA,IAZH,gBAAgB,OAAE,EAAA;AAAA,IACnB,MAAK;AAAA,IACJ,UAAU,MAAuB,0BAAA,KAAA;AAAA,IACjC,6BAA2B,OAAK,KAAA;AAAA,IAChC,kBAAgB,SAAS,SAAA;AAAA,IACzB,OARLC,IAAAA,eAQY,OAAa,aAAA;AAAA,IACrB,WAAQ;AAAA;uBAGRC,IAAAA,mBAEM,OAAA,MAAA;AAAA,MADJC,eAAQ,KAAA,QAAA,SAAA;AAAA;mBADI,OAAM,MAAA;AAAA;EAZxB,GAAA,IAAA,UAAA,IAAA;AAAA,iBAEa,SAAS,SAAA;AAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import Modal from "../../common/mixins/modal.js";
2
- import { withDirectives, openBlock, createElementBlock, normalizeClass, renderSlot, vShow } from "vue";
2
+ import { withDirectives, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, vShow } from "vue";
3
3
  import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
4
4
  const _sfc_main = {
5
5
  compatConfig: { MODE: 3 },
@@ -81,7 +81,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
81
81
  class: normalizeClass($props.tabPanelClass),
82
82
  "data-qa": "dt-tab-panel"
83
83
  }, [
84
- renderSlot(_ctx.$slots, "default")
84
+ withDirectives(createElementVNode("div", null, [
85
+ renderSlot(_ctx.$slots, "default")
86
+ ], 512), [
87
+ [vShow, !$props.hidden]
88
+ ])
85
89
  ], 10, _hoisted_1)), [
86
90
  [vShow, !$options.hidePanel]
87
91
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"tab_panel.vue.js","sources":["../../../components/tab/tab_panel.vue"],"sourcesContent":["<template>\n <div\n v-show=\"!hidePanel\"\n :id=\"`dt-panel-${id}`\"\n role=\"tabpanel\"\n :tabindex=\"isFirstElementFocusable ? -1 : 0\"\n :aria-labelledby=\"`dt-tab-${tabId}`\"\n :aria-hidden=\"`${hidePanel}`\"\n :class=\"tabPanelClass\"\n data-qa=\"dt-tab-panel\"\n >\n <!-- @slot Default slot for Tab Panel -->\n <slot />\n </div>\n</template>\n\n<script>\nimport Modal from '@/common/mixins/modal';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabPanel',\n\n mixins: [Modal],\n\n inject: ['groupContext'],\n\n props: {\n /**\n * Id of the panel\n */\n id: {\n type: String,\n required: true,\n },\n\n /**\n * Id of the associated tab\n */\n tabId: {\n type: String,\n required: true,\n },\n\n /**\n * If true, hides the tab content\n * @values true, false\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Used to customize the tab element\n */\n tabPanelClass: {\n type: [String, Array, Object],\n default: '',\n },\n },\n\n data () {\n return {\n isFirstElementFocusable: false,\n };\n },\n\n computed: {\n hidePanel () {\n return this.groupContext.selected !== this.id || this.hidden;\n },\n },\n\n async mounted () {\n const firstFocusableElement = await this.getFirstFocusableElement(this.$el);\n\n if (!firstFocusableElement) {\n this.isFirstElementFocusable = false;\n } else {\n // If the first focusable element isn't the first element in the panel,\n // then we need to set the panel tabindex to 0.\n // See notes in https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/\n this.isFirstElementFocusable = this.isFirstElementOfPanel(firstFocusableElement);\n }\n },\n\n methods: {\n isFirstElementOfPanel (element) {\n let current = element;\n let isFirstElement = true;\n\n while (current) {\n if (current.previousElementSibling !== null) {\n isFirstElement = false;\n break;\n }\n current = current.parentNode !== this.$el ? current.parentNode : null;\n }\n\n return isFirstElement;\n },\n },\n};\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_renderSlot"],"mappings":";;;AAuBA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,QAAQ,CAAC,KAAK;AAAA,EAEd,QAAQ,CAAC,cAAc;AAAA,EAEvB,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,MAC5B,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,yBAAyB;AAAA;EAE5B;AAAA,EAED,UAAU;AAAA,IACR,YAAa;AACX,aAAO,KAAK,aAAa,aAAa,KAAK,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAED,MAAM,UAAW;AACf,UAAM,wBAAwB,MAAM,KAAK,yBAAyB,KAAK,GAAG;AAE1E,QAAI,CAAC,uBAAuB;AAC1B,WAAK,0BAA0B;AAAA,WAC1B;AAIL,WAAK,0BAA0B,KAAK,sBAAsB,qBAAqB;AAAA,IACjF;AAAA,EACD;AAAA,EAED,SAAS;AAAA,IACP,sBAAuB,SAAS;AAC9B,UAAI,UAAU;AACd,UAAI,iBAAiB;AAErB,aAAO,SAAS;AACd,YAAI,QAAQ,2BAA2B,MAAM;AAC3C,2BAAiB;AACjB;AAAA,QACF;AACA,kBAAU,QAAQ,eAAe,KAAK,MAAM,QAAQ,aAAa;AAAA,MACnE;AAEA,aAAO;AAAA,IACR;AAAA,EACF;AACH;AA3GA,MAAA,aAAA,CAAA,MAAA,YAAA,mBAAA,aAAA;;sCACEA,mBAYM,OAAA;AAAA,IAVH,gBAAgB,OAAE,EAAA;AAAA,IACnB,MAAK;AAAA,IACJ,UAAU,MAAuB,0BAAA,KAAA;AAAA,IACjC,6BAA2B,OAAK,KAAA;AAAA,IAChC,kBAAgB,SAAS,SAAA;AAAA,IACzB,OARLC,eAQY,OAAa,aAAA;AAAA,IACrB,WAAQ;AAAA;IAGRC,WAAQ,KAAA,QAAA,SAAA;AAAA,EAZZ,GAAA,IAAA,UAAA,IAAA;AAAA,aAEa,SAAS,SAAA;AAAA;;;"}
1
+ {"version":3,"file":"tab_panel.vue.js","sources":["../../../components/tab/tab_panel.vue"],"sourcesContent":["<template>\n <div\n v-show=\"!hidePanel\"\n :id=\"`dt-panel-${id}`\"\n role=\"tabpanel\"\n :tabindex=\"isFirstElementFocusable ? -1 : 0\"\n :aria-labelledby=\"`dt-tab-${tabId}`\"\n :aria-hidden=\"`${hidePanel}`\"\n :class=\"tabPanelClass\"\n data-qa=\"dt-tab-panel\"\n >\n <!-- @slot Default slot for Tab Panel -->\n <div v-show=\"!hidden\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nimport Modal from '@/common/mixins/modal';\n\n/**\n * Tabs allow users to navigation between grouped content in different views while within the same page context.\n * @see https://dialtone.dialpad.com/components/tabs.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtTabPanel',\n\n mixins: [Modal],\n\n inject: ['groupContext'],\n\n props: {\n /**\n * Id of the panel\n */\n id: {\n type: String,\n required: true,\n },\n\n /**\n * Id of the associated tab\n */\n tabId: {\n type: String,\n required: true,\n },\n\n /**\n * If true, hides the tab content\n * @values true, false\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Used to customize the tab element\n */\n tabPanelClass: {\n type: [String, Array, Object],\n default: '',\n },\n },\n\n data () {\n return {\n isFirstElementFocusable: false,\n };\n },\n\n computed: {\n hidePanel () {\n return this.groupContext.selected !== this.id || this.hidden;\n },\n },\n\n async mounted () {\n const firstFocusableElement = await this.getFirstFocusableElement(this.$el);\n\n if (!firstFocusableElement) {\n this.isFirstElementFocusable = false;\n } else {\n // If the first focusable element isn't the first element in the panel,\n // then we need to set the panel tabindex to 0.\n // See notes in https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/\n this.isFirstElementFocusable = this.isFirstElementOfPanel(firstFocusableElement);\n }\n },\n\n methods: {\n isFirstElementOfPanel (element) {\n let current = element;\n let isFirstElement = true;\n\n while (current) {\n if (current.previousElementSibling !== null) {\n isFirstElement = false;\n break;\n }\n current = current.parentNode !== this.$el ? current.parentNode : null;\n }\n\n return isFirstElement;\n },\n },\n};\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot"],"mappings":";;;AAyBA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,QAAQ,CAAC,KAAK;AAAA,EAEd,QAAQ,CAAC,cAAc;AAAA,EAEvB,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,MAC5B,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,yBAAyB;AAAA;EAE5B;AAAA,EAED,UAAU;AAAA,IACR,YAAa;AACX,aAAO,KAAK,aAAa,aAAa,KAAK,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAED,MAAM,UAAW;AACf,UAAM,wBAAwB,MAAM,KAAK,yBAAyB,KAAK,GAAG;AAE1E,QAAI,CAAC,uBAAuB;AAC1B,WAAK,0BAA0B;AAAA,WAC1B;AAIL,WAAK,0BAA0B,KAAK,sBAAsB,qBAAqB;AAAA,IACjF;AAAA,EACD;AAAA,EAED,SAAS;AAAA,IACP,sBAAuB,SAAS;AAC9B,UAAI,UAAU;AACd,UAAI,iBAAiB;AAErB,aAAO,SAAS;AACd,YAAI,QAAQ,2BAA2B,MAAM;AAC3C,2BAAiB;AACjB;AAAA,QACF;AACA,kBAAU,QAAQ,eAAe,KAAK,MAAM,QAAQ,aAAa;AAAA,MACnE;AAEA,aAAO;AAAA,IACR;AAAA,EACF;AACH;AA7GA,MAAA,aAAA,CAAA,MAAA,YAAA,mBAAA,aAAA;;sCACEA,mBAcM,OAAA;AAAA,IAZH,gBAAgB,OAAE,EAAA;AAAA,IACnB,MAAK;AAAA,IACJ,UAAU,MAAuB,0BAAA,KAAA;AAAA,IACjC,6BAA2B,OAAK,KAAA;AAAA,IAChC,kBAAgB,SAAS,SAAA;AAAA,IACzB,OARLC,eAQY,OAAa,aAAA;AAAA,IACrB,WAAQ;AAAA;mBAGRC,mBAEM,OAAA,MAAA;AAAA,MADJC,WAAQ,KAAA,QAAA,SAAA;AAAA;eADI,OAAM,MAAA;AAAA;EAZxB,GAAA,IAAA,UAAA,IAAA;AAAA,aAEa,SAAS,SAAA;AAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.vue.d.ts","sourceRoot":"","sources":["../../../../components/dropdown/dropdown.vue"],"names":[],"mappings":"AAwDA;"}
1
+ {"version":3,"file":"dropdown.vue.d.ts","sourceRoot":"","sources":["../../../../components/dropdown/dropdown.vue"],"names":[],"mappings":"AA+DA;"}
@@ -33,10 +33,7 @@ declare const _default: import('vue').DefineComponent<{
33
33
  focus: (event: any) => void;
34
34
  };
35
35
  isSelected(): boolean;
36
- }, {
37
- setSelectedPanelByDefault(): void;
38
- selectPanel(selectOverride?: boolean): void;
39
- }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("click" | "focus")[], "click" | "focus", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
36
+ }, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("click" | "focus")[], "click" | "focus", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
40
37
  id: {
41
38
  type: StringConstructor;
42
39
  required: true;
@@ -54,26 +54,20 @@ declare const _default: import('vue').DefineComponent<{
54
54
  getTabChildren(): {
55
55
  context: any;
56
56
  panelId: any;
57
- id: any;
57
+ tabId: any;
58
58
  isSelected: boolean;
59
59
  }[];
60
60
  onChange(): void;
61
- changeContentPanel({ selected, selectOverride }: {
62
- selected: any;
63
- selectOverride: any;
64
- }): void;
65
61
  tabLeft(): void;
66
62
  tabRight(): void;
67
- selectFocusOnTab(index: any, tabs: any): void;
68
- selectTab(): void;
69
- selectTabByIndex(index: any, tabs: any): void;
70
- getIndexAndTabs(): {
71
- tabs: never[];
72
- index: number;
73
- };
63
+ selectFocusOnTab(index: any): void;
64
+ selectTab(event: any): void;
65
+ selectTabByIndex(index: any): void;
66
+ getFocusedTabIndex(): number;
74
67
  onHomeButton(): void;
75
68
  onEndButton(): void;
76
- }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, "change"[], "change", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
69
+ isSameTabClicked(): boolean;
70
+ }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("change" | "before-change")[], "change" | "before-change", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
77
71
  label: {
78
72
  type: StringConstructor;
79
73
  default: string;
@@ -109,6 +103,7 @@ declare const _default: import('vue').DefineComponent<{
109
103
  };
110
104
  }>> & {
111
105
  onChange?: ((...args: any[]) => any) | undefined;
106
+ "onBefore-change"?: ((...args: any[]) => any) | undefined;
112
107
  }, {
113
108
  label: string;
114
109
  disabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tab_group.vue.d.ts","sourceRoot":"","sources":["../../../../components/tab/tab_group.vue"],"names":[],"mappings":"AAiCA;"}
1
+ {"version":3,"file":"tab_group.vue.d.ts","sourceRoot":"","sources":["../../../../components/tab/tab_group.vue"],"names":[],"mappings":"AAkCA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tab_panel.vue.d.ts","sourceRoot":"","sources":["../../../../components/tab/tab_panel.vue"],"names":[],"mappings":"AAeA;"}
1
+ {"version":3,"file":"tab_panel.vue.d.ts","sourceRoot":"","sources":["../../../../components/tab/tab_panel.vue"],"names":[],"mappings":"AAiBA;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dialpad/dialtone",
3
- "version": "9.101.2",
3
+ "version": "9.102.0",
4
4
  "description": "Dialpad's Dialtone design system monorepo",
5
5
  "files": [
6
6
  "dist"
@@ -77,8 +77,8 @@
77
77
  "regex-combined-emojis": "1.6.0",
78
78
  "tippy.js": "6.3.7",
79
79
  "@dialpad/dialtone-emojis": "1.1.0",
80
- "@dialpad/dialtone-tokens": "1.41.1",
81
- "@dialpad/dialtone-icons": "4.34.0"
80
+ "@dialpad/dialtone-icons": "4.34.0",
81
+ "@dialpad/dialtone-tokens": "1.41.1"
82
82
  },
83
83
  "devDependencies": {
84
84
  "@commitlint/cli": "^18.4.3",