@dialpad/dialtone 9.106.1 → 9.107.1

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 (71) hide show
  1. package/dist/css/dialtone-default-theme.css +4 -0
  2. package/dist/css/dialtone-default-theme.min.css +1 -1
  3. package/dist/css/dialtone.css +4 -0
  4. package/dist/css/dialtone.min.css +1 -1
  5. package/dist/tokens/doc.json +21774 -21774
  6. package/dist/vue2/component-documentation.json +1 -1
  7. package/dist/vue2/components/pagination/pagination.vue.cjs +2 -2
  8. package/dist/vue2/components/pagination/pagination.vue.cjs.map +1 -1
  9. package/dist/vue2/components/pagination/pagination.vue.js +2 -2
  10. package/dist/vue2/components/pagination/pagination.vue.js.map +1 -1
  11. package/dist/vue2/components/rich_text_editor/extensions/div/div.cjs +14 -0
  12. package/dist/vue2/components/rich_text_editor/extensions/div/div.cjs.map +1 -0
  13. package/dist/vue2/components/rich_text_editor/extensions/div/div.js +14 -0
  14. package/dist/vue2/components/rich_text_editor/extensions/div/div.js.map +1 -0
  15. package/dist/vue2/components/rich_text_editor/extensions/div/index.cjs +5 -0
  16. package/dist/vue2/components/rich_text_editor/extensions/div/index.cjs.map +1 -0
  17. package/dist/vue2/components/rich_text_editor/extensions/div/index.js +5 -0
  18. package/dist/vue2/components/rich_text_editor/extensions/div/index.js.map +1 -0
  19. package/dist/vue2/components/rich_text_editor/rich_text_editor.vue.cjs +10 -1
  20. package/dist/vue2/components/rich_text_editor/rich_text_editor.vue.cjs.map +1 -1
  21. package/dist/vue2/components/rich_text_editor/rich_text_editor.vue.js +10 -1
  22. package/dist/vue2/components/rich_text_editor/rich_text_editor.vue.js.map +1 -1
  23. package/dist/vue2/recipes/conversation_view/editor/editor.vue.cjs +8 -1
  24. package/dist/vue2/recipes/conversation_view/editor/editor.vue.cjs.map +1 -1
  25. package/dist/vue2/recipes/conversation_view/editor/editor.vue.js +8 -1
  26. package/dist/vue2/recipes/conversation_view/editor/editor.vue.js.map +1 -1
  27. package/dist/vue2/types/components/pagination/pagination.vue.d.ts.map +1 -1
  28. package/dist/vue2/types/components/rich_text_editor/extensions/div/div.d.ts +2 -0
  29. package/dist/vue2/types/components/rich_text_editor/extensions/div/div.d.ts.map +1 -0
  30. package/dist/vue2/types/components/rich_text_editor/extensions/div/index.d.ts +3 -0
  31. package/dist/vue2/types/components/rich_text_editor/extensions/div/index.d.ts.map +1 -0
  32. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts +9 -0
  33. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  34. package/dist/vue2/types/recipes/conversation_view/editor/editor.vue.d.ts +9 -0
  35. package/dist/vue2/types/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  36. package/dist/vue3/component-documentation.json +1 -1
  37. package/dist/vue3/components/emoji_text_wrapper/emoji_text_wrapper.vue.cjs +2 -0
  38. package/dist/vue3/components/emoji_text_wrapper/emoji_text_wrapper.vue.cjs.map +1 -1
  39. package/dist/vue3/components/emoji_text_wrapper/emoji_text_wrapper.vue.js +3 -1
  40. package/dist/vue3/components/emoji_text_wrapper/emoji_text_wrapper.vue.js.map +1 -1
  41. package/dist/vue3/components/pagination/pagination.vue.cjs +7 -8
  42. package/dist/vue3/components/pagination/pagination.vue.cjs.map +1 -1
  43. package/dist/vue3/components/pagination/pagination.vue.js +8 -9
  44. package/dist/vue3/components/pagination/pagination.vue.js.map +1 -1
  45. package/dist/vue3/components/rich_text_editor/extensions/div/div.cjs +14 -0
  46. package/dist/vue3/components/rich_text_editor/extensions/div/div.cjs.map +1 -0
  47. package/dist/vue3/components/rich_text_editor/extensions/div/div.js +14 -0
  48. package/dist/vue3/components/rich_text_editor/extensions/div/div.js.map +1 -0
  49. package/dist/vue3/components/rich_text_editor/extensions/div/index.cjs +5 -0
  50. package/dist/vue3/components/rich_text_editor/extensions/div/index.cjs.map +1 -0
  51. package/dist/vue3/components/rich_text_editor/extensions/div/index.js +5 -0
  52. package/dist/vue3/components/rich_text_editor/extensions/div/index.js.map +1 -0
  53. package/dist/vue3/components/rich_text_editor/rich_text_editor.vue.cjs +10 -1
  54. package/dist/vue3/components/rich_text_editor/rich_text_editor.vue.cjs.map +1 -1
  55. package/dist/vue3/components/rich_text_editor/rich_text_editor.vue.js +10 -1
  56. package/dist/vue3/components/rich_text_editor/rich_text_editor.vue.js.map +1 -1
  57. package/dist/vue3/recipes/conversation_view/editor/editor.vue.cjs +9 -1
  58. package/dist/vue3/recipes/conversation_view/editor/editor.vue.cjs.map +1 -1
  59. package/dist/vue3/recipes/conversation_view/editor/editor.vue.js +9 -1
  60. package/dist/vue3/recipes/conversation_view/editor/editor.vue.js.map +1 -1
  61. package/dist/vue3/types/components/emoji_text_wrapper/emoji_text_wrapper.vue.d.ts.map +1 -1
  62. package/dist/vue3/types/components/pagination/pagination.vue.d.ts.map +1 -1
  63. package/dist/vue3/types/components/rich_text_editor/extensions/div/div.d.ts +2 -0
  64. package/dist/vue3/types/components/rich_text_editor/extensions/div/div.d.ts.map +1 -0
  65. package/dist/vue3/types/components/rich_text_editor/extensions/div/index.d.ts +3 -0
  66. package/dist/vue3/types/components/rich_text_editor/extensions/div/index.d.ts.map +1 -0
  67. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts +9 -0
  68. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  69. package/dist/vue3/types/recipes/conversation_view/editor/editor.vue.d.ts +9 -0
  70. package/dist/vue3/types/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  71. package/package.json +4 -4
@@ -4,6 +4,7 @@ const common_emoji = require("../../common/emoji.cjs");
4
4
  const vue = require("vue");
5
5
  const icon_constants = require("../icon/icon_constants.cjs");
6
6
  const emoji = require("../emoji/emoji.vue.cjs");
7
+ const COMMENT_TYPE = vue.h(vue.resolveDynamicComponent(null)).type;
7
8
  const _sfc_main = {
8
9
  compatConfig: { MODE: 3 },
9
10
  name: "DtEmojiTextWrapper",
@@ -62,6 +63,7 @@ const _sfc_main = {
62
63
  searchVNodes(VNode) {
63
64
  var _a;
64
65
  if (typeof VNode === "string") return this.searchCodes(VNode);
66
+ if (VNode.type === COMMENT_TYPE) return VNode;
65
67
  if (typeof VNode.type === "symbol") return this.searchCodes(VNode.children);
66
68
  if ((_a = VNode.props) == null ? void 0 : _a.innerHTML) return this.searchVNodes(VNode.props.innerHTML);
67
69
  const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];
@@ -1 +1 @@
1
- {"version":3,"file":"emoji_text_wrapper.vue.cjs","sources":["../../../components/emoji_text_wrapper/emoji_text_wrapper.vue"],"sourcesContent":["<script>\nimport { DtEmoji } from '../emoji';\nimport { findEmojis, findShortCodes } from '@/common/emoji';\nimport { h } from 'vue';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants';\n\n/**\n * Wrapper to find and replace shortcodes like :smile: or unicode chars such as 😄 with our custom Emojis implementation.\n * @see https://dialtone.dialpad.com/components/emoji_text_wrapper.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtEmojiTextWrapper',\n\n components: {\n DtEmoji,\n },\n\n props: {\n /**\n * Element type (tag name) to use for the wrapper.\n */\n elementType: {\n type: String,\n default: 'div',\n },\n\n /**\n * The icon size to render the emojis at: 100 to 800\n */\n size: {\n type: String,\n default: '500',\n validator: (t) => Object.keys(ICON_SIZE_MODIFIERS).includes(t),\n },\n },\n\n data () {\n return {\n loadingEmojiJson: true,\n };\n },\n\n async created () {\n this.loadingEmojiJson = false;\n },\n\n methods: {\n /**\n * Replaces the valid codes from the text content with a DtEmoji component.\n * @returns {Array<VNode|string>}\n */\n replaceDtEmojis (replaceList, textContent) {\n if (!replaceList.length) return textContent;\n // Escape the asterisk to avoid breaking the regex for the asterisk emoji\n const escapedReplaceList = replaceList.map(item =>\n item.replace(/\\*/g, '\\\\*'),\n );\n\n const regexp = new RegExp(`(${escapedReplaceList.join('|')})`, 'g');\n const items = textContent.split(regexp);\n\n return items\n .filter(item => item.trim() !== '')\n .map((item) => {\n if (replaceList.includes(item)) {\n return h(DtEmoji, { code: item, size: this.size });\n }\n return h('span', { class: 'd-emoji-text-wrapper__text' }, item);\n });\n },\n\n /**\n * Recursively search the Vue virtual DOM to find text\n * @param VNode\n * @returns {VNode|*}\n */\n searchVNodes (VNode) {\n if (typeof VNode === 'string') return this.searchCodes(VNode);\n if (typeof VNode.type === 'symbol') return this.searchCodes(VNode.children);\n if (VNode.props?.innerHTML) return this.searchVNodes(VNode.props.innerHTML);\n\n const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];\n return h(VNode.type, VNode.props, children.map(VNodeChild => this.searchVNodes(VNodeChild)));\n },\n\n // TODO: Find a way to crawl vue components\n replaceVueComponentVNodeContent (VNode) {\n //\n },\n\n /**\n * Find codes in text.\n * @param textContent string\n * @returns {Array<VNode|string>|string}\n */\n searchCodes (textContent) {\n const shortcodes = findShortCodes(textContent);\n const emojis = findEmojis(textContent);\n\n const replaceList = [...shortcodes, ...emojis];\n if (replaceList.length === 0) return textContent;\n return this.replaceDtEmojis(replaceList, textContent);\n },\n },\n\n render () {\n const defaultSlotContent = this.$slots.default ? this.$slots.default() : [];\n return h(\n this.elementType,\n {\n 'data-qa': 'emoji-text-wrapper',\n class: 'd-emoji-text-wrapper',\n },\n this.loadingEmojiJson\n ? defaultSlotContent\n : defaultSlotContent.map(VNode => this.searchVNodes(VNode)),\n );\n },\n};\n</script>\n"],"names":["DtEmoji","ICON_SIZE_MODIFIERS","h","findShortCodes","findEmojis"],"mappings":";;;;;;AAUA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,SAAAA,MAAO;AAAA,EACR;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,MAAM,OAAO,KAAKC,kCAAmB,EAAE,SAAS,CAAC;AAAA,IAC9D;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,kBAAkB;AAAA;EAErB;AAAA,EAED,MAAM,UAAW;AACf,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAED,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,gBAAiB,aAAa,aAAa;AACzC,UAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,YAAM,qBAAqB,YAAY;AAAA,QAAI,UACzC,KAAK,QAAQ,OAAO,KAAK;AAAA;AAG3B,YAAM,SAAS,IAAI,OAAO,IAAI,mBAAmB,KAAK,GAAG,CAAC,KAAK,GAAG;AAClE,YAAM,QAAQ,YAAY,MAAM,MAAM;AAEtC,aAAO,MACJ,OAAO,UAAQ,KAAK,KAAI,MAAO,EAAE,EACjC,IAAI,CAAC,SAAS;AACb,YAAI,YAAY,SAAS,IAAI,GAAG;AAC9B,iBAAOC,IAAC,EAACF,MAAO,SAAE,EAAE,MAAM,MAAM,MAAM,KAAK,KAAG,CAAG;AAAA,QACnD;AACA,eAAOE,IAAAA,EAAE,QAAQ,EAAE,OAAO,6BAA2B,GAAK,IAAI;AAAA,MAChE,CAAC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,aAAc,OAAO;;AACnB,UAAI,OAAO,UAAU,SAAU,QAAO,KAAK,YAAY,KAAK;AAC5D,UAAI,OAAO,MAAM,SAAS,SAAU,QAAO,KAAK,YAAY,MAAM,QAAQ;AAC1E,WAAI,WAAM,UAAN,mBAAa,UAAW,QAAO,KAAK,aAAa,MAAM,MAAM,SAAS;AAE1E,YAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AACjF,aAAOA,IAAC,EAAC,MAAM,MAAM,MAAM,OAAO,SAAS,IAAI,gBAAc,KAAK,aAAa,UAAU,CAAC,CAAC;AAAA,IAC5F;AAAA;AAAA,IAGD,gCAAiC,OAAO;AAAA,IAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,YAAa,aAAa;AACxB,YAAM,aAAaC,4BAAe,WAAW;AAC7C,YAAM,SAASC,wBAAW,WAAW;AAErC,YAAM,cAAc,CAAC,GAAG,YAAY,GAAG,MAAM;AAC7C,UAAI,YAAY,WAAW,EAAG,QAAO;AACrC,aAAO,KAAK,gBAAgB,aAAa,WAAW;AAAA,IACrD;AAAA,EACF;AAAA,EAED,SAAU;AACR,UAAM,qBAAqB,KAAK,OAAO,UAAU,KAAK,OAAO,QAAU,IAAE;AACzE,WAAOF,IAAC;AAAA,MACN,KAAK;AAAA,MACL;AAAA,QACE,WAAW;AAAA,QACX,OAAO;AAAA,MACR;AAAA,MACD,KAAK,mBACD,qBACA,mBAAmB,IAAI,WAAS,KAAK,aAAa,KAAK,CAAC;AAAA;EAE/D;AACH;;;"}
1
+ {"version":3,"file":"emoji_text_wrapper.vue.cjs","sources":["../../../components/emoji_text_wrapper/emoji_text_wrapper.vue"],"sourcesContent":["<script>\nimport { DtEmoji } from '../emoji';\nimport { findEmojis, findShortCodes } from '@/common/emoji';\nimport { h, resolveDynamicComponent } from 'vue';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants';\n\nconst COMMENT_TYPE = h(resolveDynamicComponent(null)).type;\n\n/**\n * Wrapper to find and replace shortcodes like :smile: or unicode chars such as 😄 with our custom Emojis implementation.\n * @see https://dialtone.dialpad.com/components/emoji_text_wrapper.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtEmojiTextWrapper',\n\n components: {\n DtEmoji,\n },\n\n props: {\n /**\n * Element type (tag name) to use for the wrapper.\n */\n elementType: {\n type: String,\n default: 'div',\n },\n\n /**\n * The icon size to render the emojis at: 100 to 800\n */\n size: {\n type: String,\n default: '500',\n validator: (t) => Object.keys(ICON_SIZE_MODIFIERS).includes(t),\n },\n },\n\n data () {\n return {\n loadingEmojiJson: true,\n };\n },\n\n async created () {\n this.loadingEmojiJson = false;\n },\n\n methods: {\n /**\n * Replaces the valid codes from the text content with a DtEmoji component.\n * @returns {Array<VNode|string>}\n */\n replaceDtEmojis (replaceList, textContent) {\n if (!replaceList.length) return textContent;\n // Escape the asterisk to avoid breaking the regex for the asterisk emoji\n const escapedReplaceList = replaceList.map(item =>\n item.replace(/\\*/g, '\\\\*'),\n );\n\n const regexp = new RegExp(`(${escapedReplaceList.join('|')})`, 'g');\n const items = textContent.split(regexp);\n\n return items\n .filter(item => item.trim() !== '')\n .map((item) => {\n if (replaceList.includes(item)) {\n return h(DtEmoji, { code: item, size: this.size });\n }\n return h('span', { class: 'd-emoji-text-wrapper__text' }, item);\n });\n },\n\n /**\n * Recursively search the Vue virtual DOM to find text\n * @param VNode\n * @returns {VNode|*}\n */\n searchVNodes (VNode) {\n if (typeof VNode === 'string') return this.searchCodes(VNode);\n if (VNode.type === COMMENT_TYPE) return VNode;\n if (typeof VNode.type === 'symbol') return this.searchCodes(VNode.children);\n if (VNode.props?.innerHTML) return this.searchVNodes(VNode.props.innerHTML);\n\n const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];\n return h(VNode.type, VNode.props, children.map(VNodeChild => this.searchVNodes(VNodeChild)));\n },\n\n // TODO: Find a way to crawl vue components\n replaceVueComponentVNodeContent (VNode) {\n //\n },\n\n /**\n * Find codes in text.\n * @param textContent string\n * @returns {Array<VNode|string>|string}\n */\n searchCodes (textContent) {\n const shortcodes = findShortCodes(textContent);\n const emojis = findEmojis(textContent);\n\n const replaceList = [...shortcodes, ...emojis];\n if (replaceList.length === 0) return textContent;\n return this.replaceDtEmojis(replaceList, textContent);\n },\n },\n\n render () {\n const defaultSlotContent = this.$slots.default ? this.$slots.default() : [];\n return h(\n this.elementType,\n {\n 'data-qa': 'emoji-text-wrapper',\n class: 'd-emoji-text-wrapper',\n },\n this.loadingEmojiJson\n ? defaultSlotContent\n : defaultSlotContent.map(VNode => this.searchVNodes(VNode)),\n );\n },\n};\n</script>\n"],"names":["h","resolveDynamicComponent","DtEmoji","ICON_SIZE_MODIFIERS","findShortCodes","findEmojis"],"mappings":";;;;;;AAMA,MAAM,eAAeA,IAAAA,EAAEC,IAAAA,wBAAwB,IAAI,CAAC,EAAE;AAMtD,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,SAAAC,MAAO;AAAA,EACR;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,MAAM,OAAO,KAAKC,kCAAmB,EAAE,SAAS,CAAC;AAAA,IAC9D;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,kBAAkB;AAAA;EAErB;AAAA,EAED,MAAM,UAAW;AACf,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAED,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,gBAAiB,aAAa,aAAa;AACzC,UAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,YAAM,qBAAqB,YAAY;AAAA,QAAI,UACzC,KAAK,QAAQ,OAAO,KAAK;AAAA;AAG3B,YAAM,SAAS,IAAI,OAAO,IAAI,mBAAmB,KAAK,GAAG,CAAC,KAAK,GAAG;AAClE,YAAM,QAAQ,YAAY,MAAM,MAAM;AAEtC,aAAO,MACJ,OAAO,UAAQ,KAAK,KAAI,MAAO,EAAE,EACjC,IAAI,CAAC,SAAS;AACb,YAAI,YAAY,SAAS,IAAI,GAAG;AAC9B,iBAAOH,IAAC,EAACE,MAAO,SAAE,EAAE,MAAM,MAAM,MAAM,KAAK,KAAG,CAAG;AAAA,QACnD;AACA,eAAOF,IAAAA,EAAE,QAAQ,EAAE,OAAO,6BAA2B,GAAK,IAAI;AAAA,MAChE,CAAC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,aAAc,OAAO;;AACnB,UAAI,OAAO,UAAU,SAAU,QAAO,KAAK,YAAY,KAAK;AAC5D,UAAI,MAAM,SAAS,aAAc,QAAO;AACxC,UAAI,OAAO,MAAM,SAAS,SAAU,QAAO,KAAK,YAAY,MAAM,QAAQ;AAC1E,WAAI,WAAM,UAAN,mBAAa,UAAW,QAAO,KAAK,aAAa,MAAM,MAAM,SAAS;AAE1E,YAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AACjF,aAAOA,IAAC,EAAC,MAAM,MAAM,MAAM,OAAO,SAAS,IAAI,gBAAc,KAAK,aAAa,UAAU,CAAC,CAAC;AAAA,IAC5F;AAAA;AAAA,IAGD,gCAAiC,OAAO;AAAA,IAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,YAAa,aAAa;AACxB,YAAM,aAAaI,4BAAe,WAAW;AAC7C,YAAM,SAASC,wBAAW,WAAW;AAErC,YAAM,cAAc,CAAC,GAAG,YAAY,GAAG,MAAM;AAC7C,UAAI,YAAY,WAAW,EAAG,QAAO;AACrC,aAAO,KAAK,gBAAgB,aAAa,WAAW;AAAA,IACrD;AAAA,EACF;AAAA,EAED,SAAU;AACR,UAAM,qBAAqB,KAAK,OAAO,UAAU,KAAK,OAAO,QAAU,IAAE;AACzE,WAAOL,IAAC;AAAA,MACN,KAAK;AAAA,MACL;AAAA,QACE,WAAW;AAAA,QACX,OAAO;AAAA,MACR;AAAA,MACD,KAAK,mBACD,qBACA,mBAAmB,IAAI,WAAS,KAAK,aAAa,KAAK,CAAC;AAAA;EAE/D;AACH;;;"}
@@ -1,7 +1,8 @@
1
1
  import { findShortCodes, findEmojis } from "../../common/emoji.js";
2
- import { h } from "vue";
2
+ import { h, resolveDynamicComponent } from "vue";
3
3
  import { ICON_SIZE_MODIFIERS } from "../icon/icon_constants.js";
4
4
  import DtEmoji from "../emoji/emoji.vue.js";
5
+ const COMMENT_TYPE = h(resolveDynamicComponent(null)).type;
5
6
  const _sfc_main = {
6
7
  compatConfig: { MODE: 3 },
7
8
  name: "DtEmojiTextWrapper",
@@ -60,6 +61,7 @@ const _sfc_main = {
60
61
  searchVNodes(VNode) {
61
62
  var _a;
62
63
  if (typeof VNode === "string") return this.searchCodes(VNode);
64
+ if (VNode.type === COMMENT_TYPE) return VNode;
63
65
  if (typeof VNode.type === "symbol") return this.searchCodes(VNode.children);
64
66
  if ((_a = VNode.props) == null ? void 0 : _a.innerHTML) return this.searchVNodes(VNode.props.innerHTML);
65
67
  const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];
@@ -1 +1 @@
1
- {"version":3,"file":"emoji_text_wrapper.vue.js","sources":["../../../components/emoji_text_wrapper/emoji_text_wrapper.vue"],"sourcesContent":["<script>\nimport { DtEmoji } from '../emoji';\nimport { findEmojis, findShortCodes } from '@/common/emoji';\nimport { h } from 'vue';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants';\n\n/**\n * Wrapper to find and replace shortcodes like :smile: or unicode chars such as 😄 with our custom Emojis implementation.\n * @see https://dialtone.dialpad.com/components/emoji_text_wrapper.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtEmojiTextWrapper',\n\n components: {\n DtEmoji,\n },\n\n props: {\n /**\n * Element type (tag name) to use for the wrapper.\n */\n elementType: {\n type: String,\n default: 'div',\n },\n\n /**\n * The icon size to render the emojis at: 100 to 800\n */\n size: {\n type: String,\n default: '500',\n validator: (t) => Object.keys(ICON_SIZE_MODIFIERS).includes(t),\n },\n },\n\n data () {\n return {\n loadingEmojiJson: true,\n };\n },\n\n async created () {\n this.loadingEmojiJson = false;\n },\n\n methods: {\n /**\n * Replaces the valid codes from the text content with a DtEmoji component.\n * @returns {Array<VNode|string>}\n */\n replaceDtEmojis (replaceList, textContent) {\n if (!replaceList.length) return textContent;\n // Escape the asterisk to avoid breaking the regex for the asterisk emoji\n const escapedReplaceList = replaceList.map(item =>\n item.replace(/\\*/g, '\\\\*'),\n );\n\n const regexp = new RegExp(`(${escapedReplaceList.join('|')})`, 'g');\n const items = textContent.split(regexp);\n\n return items\n .filter(item => item.trim() !== '')\n .map((item) => {\n if (replaceList.includes(item)) {\n return h(DtEmoji, { code: item, size: this.size });\n }\n return h('span', { class: 'd-emoji-text-wrapper__text' }, item);\n });\n },\n\n /**\n * Recursively search the Vue virtual DOM to find text\n * @param VNode\n * @returns {VNode|*}\n */\n searchVNodes (VNode) {\n if (typeof VNode === 'string') return this.searchCodes(VNode);\n if (typeof VNode.type === 'symbol') return this.searchCodes(VNode.children);\n if (VNode.props?.innerHTML) return this.searchVNodes(VNode.props.innerHTML);\n\n const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];\n return h(VNode.type, VNode.props, children.map(VNodeChild => this.searchVNodes(VNodeChild)));\n },\n\n // TODO: Find a way to crawl vue components\n replaceVueComponentVNodeContent (VNode) {\n //\n },\n\n /**\n * Find codes in text.\n * @param textContent string\n * @returns {Array<VNode|string>|string}\n */\n searchCodes (textContent) {\n const shortcodes = findShortCodes(textContent);\n const emojis = findEmojis(textContent);\n\n const replaceList = [...shortcodes, ...emojis];\n if (replaceList.length === 0) return textContent;\n return this.replaceDtEmojis(replaceList, textContent);\n },\n },\n\n render () {\n const defaultSlotContent = this.$slots.default ? this.$slots.default() : [];\n return h(\n this.elementType,\n {\n 'data-qa': 'emoji-text-wrapper',\n class: 'd-emoji-text-wrapper',\n },\n this.loadingEmojiJson\n ? defaultSlotContent\n : defaultSlotContent.map(VNode => this.searchVNodes(VNode)),\n );\n },\n};\n</script>\n"],"names":[],"mappings":";;;;AAUA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,YAAY;AAAA,IACV;AAAA,EACD;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,MAAM,OAAO,KAAK,mBAAmB,EAAE,SAAS,CAAC;AAAA,IAC9D;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,kBAAkB;AAAA;EAErB;AAAA,EAED,MAAM,UAAW;AACf,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAED,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,gBAAiB,aAAa,aAAa;AACzC,UAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,YAAM,qBAAqB,YAAY;AAAA,QAAI,UACzC,KAAK,QAAQ,OAAO,KAAK;AAAA;AAG3B,YAAM,SAAS,IAAI,OAAO,IAAI,mBAAmB,KAAK,GAAG,CAAC,KAAK,GAAG;AAClE,YAAM,QAAQ,YAAY,MAAM,MAAM;AAEtC,aAAO,MACJ,OAAO,UAAQ,KAAK,KAAI,MAAO,EAAE,EACjC,IAAI,CAAC,SAAS;AACb,YAAI,YAAY,SAAS,IAAI,GAAG;AAC9B,iBAAO,EAAE,SAAS,EAAE,MAAM,MAAM,MAAM,KAAK,KAAG,CAAG;AAAA,QACnD;AACA,eAAO,EAAE,QAAQ,EAAE,OAAO,6BAA2B,GAAK,IAAI;AAAA,MAChE,CAAC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,aAAc,OAAO;;AACnB,UAAI,OAAO,UAAU,SAAU,QAAO,KAAK,YAAY,KAAK;AAC5D,UAAI,OAAO,MAAM,SAAS,SAAU,QAAO,KAAK,YAAY,MAAM,QAAQ;AAC1E,WAAI,WAAM,UAAN,mBAAa,UAAW,QAAO,KAAK,aAAa,MAAM,MAAM,SAAS;AAE1E,YAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AACjF,aAAO,EAAE,MAAM,MAAM,MAAM,OAAO,SAAS,IAAI,gBAAc,KAAK,aAAa,UAAU,CAAC,CAAC;AAAA,IAC5F;AAAA;AAAA,IAGD,gCAAiC,OAAO;AAAA,IAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,YAAa,aAAa;AACxB,YAAM,aAAa,eAAe,WAAW;AAC7C,YAAM,SAAS,WAAW,WAAW;AAErC,YAAM,cAAc,CAAC,GAAG,YAAY,GAAG,MAAM;AAC7C,UAAI,YAAY,WAAW,EAAG,QAAO;AACrC,aAAO,KAAK,gBAAgB,aAAa,WAAW;AAAA,IACrD;AAAA,EACF;AAAA,EAED,SAAU;AACR,UAAM,qBAAqB,KAAK,OAAO,UAAU,KAAK,OAAO,QAAU,IAAE;AACzE,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,QACE,WAAW;AAAA,QACX,OAAO;AAAA,MACR;AAAA,MACD,KAAK,mBACD,qBACA,mBAAmB,IAAI,WAAS,KAAK,aAAa,KAAK,CAAC;AAAA;EAE/D;AACH;;"}
1
+ {"version":3,"file":"emoji_text_wrapper.vue.js","sources":["../../../components/emoji_text_wrapper/emoji_text_wrapper.vue"],"sourcesContent":["<script>\nimport { DtEmoji } from '../emoji';\nimport { findEmojis, findShortCodes } from '@/common/emoji';\nimport { h, resolveDynamicComponent } from 'vue';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants';\n\nconst COMMENT_TYPE = h(resolveDynamicComponent(null)).type;\n\n/**\n * Wrapper to find and replace shortcodes like :smile: or unicode chars such as 😄 with our custom Emojis implementation.\n * @see https://dialtone.dialpad.com/components/emoji_text_wrapper.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtEmojiTextWrapper',\n\n components: {\n DtEmoji,\n },\n\n props: {\n /**\n * Element type (tag name) to use for the wrapper.\n */\n elementType: {\n type: String,\n default: 'div',\n },\n\n /**\n * The icon size to render the emojis at: 100 to 800\n */\n size: {\n type: String,\n default: '500',\n validator: (t) => Object.keys(ICON_SIZE_MODIFIERS).includes(t),\n },\n },\n\n data () {\n return {\n loadingEmojiJson: true,\n };\n },\n\n async created () {\n this.loadingEmojiJson = false;\n },\n\n methods: {\n /**\n * Replaces the valid codes from the text content with a DtEmoji component.\n * @returns {Array<VNode|string>}\n */\n replaceDtEmojis (replaceList, textContent) {\n if (!replaceList.length) return textContent;\n // Escape the asterisk to avoid breaking the regex for the asterisk emoji\n const escapedReplaceList = replaceList.map(item =>\n item.replace(/\\*/g, '\\\\*'),\n );\n\n const regexp = new RegExp(`(${escapedReplaceList.join('|')})`, 'g');\n const items = textContent.split(regexp);\n\n return items\n .filter(item => item.trim() !== '')\n .map((item) => {\n if (replaceList.includes(item)) {\n return h(DtEmoji, { code: item, size: this.size });\n }\n return h('span', { class: 'd-emoji-text-wrapper__text' }, item);\n });\n },\n\n /**\n * Recursively search the Vue virtual DOM to find text\n * @param VNode\n * @returns {VNode|*}\n */\n searchVNodes (VNode) {\n if (typeof VNode === 'string') return this.searchCodes(VNode);\n if (VNode.type === COMMENT_TYPE) return VNode;\n if (typeof VNode.type === 'symbol') return this.searchCodes(VNode.children);\n if (VNode.props?.innerHTML) return this.searchVNodes(VNode.props.innerHTML);\n\n const children = Array.isArray(VNode.children) ? VNode.children : [VNode.children];\n return h(VNode.type, VNode.props, children.map(VNodeChild => this.searchVNodes(VNodeChild)));\n },\n\n // TODO: Find a way to crawl vue components\n replaceVueComponentVNodeContent (VNode) {\n //\n },\n\n /**\n * Find codes in text.\n * @param textContent string\n * @returns {Array<VNode|string>|string}\n */\n searchCodes (textContent) {\n const shortcodes = findShortCodes(textContent);\n const emojis = findEmojis(textContent);\n\n const replaceList = [...shortcodes, ...emojis];\n if (replaceList.length === 0) return textContent;\n return this.replaceDtEmojis(replaceList, textContent);\n },\n },\n\n render () {\n const defaultSlotContent = this.$slots.default ? this.$slots.default() : [];\n return h(\n this.elementType,\n {\n 'data-qa': 'emoji-text-wrapper',\n class: 'd-emoji-text-wrapper',\n },\n this.loadingEmojiJson\n ? defaultSlotContent\n : defaultSlotContent.map(VNode => this.searchVNodes(VNode)),\n );\n },\n};\n</script>\n"],"names":[],"mappings":";;;;AAMA,MAAM,eAAe,EAAE,wBAAwB,IAAI,CAAC,EAAE;AAMtD,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,YAAY;AAAA,IACV;AAAA,EACD;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,MAAM,OAAO,KAAK,mBAAmB,EAAE,SAAS,CAAC;AAAA,IAC9D;AAAA,EACF;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,kBAAkB;AAAA;EAErB;AAAA,EAED,MAAM,UAAW;AACf,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAED,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,gBAAiB,aAAa,aAAa;AACzC,UAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,YAAM,qBAAqB,YAAY;AAAA,QAAI,UACzC,KAAK,QAAQ,OAAO,KAAK;AAAA;AAG3B,YAAM,SAAS,IAAI,OAAO,IAAI,mBAAmB,KAAK,GAAG,CAAC,KAAK,GAAG;AAClE,YAAM,QAAQ,YAAY,MAAM,MAAM;AAEtC,aAAO,MACJ,OAAO,UAAQ,KAAK,KAAI,MAAO,EAAE,EACjC,IAAI,CAAC,SAAS;AACb,YAAI,YAAY,SAAS,IAAI,GAAG;AAC9B,iBAAO,EAAE,SAAS,EAAE,MAAM,MAAM,MAAM,KAAK,KAAG,CAAG;AAAA,QACnD;AACA,eAAO,EAAE,QAAQ,EAAE,OAAO,6BAA2B,GAAK,IAAI;AAAA,MAChE,CAAC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,aAAc,OAAO;;AACnB,UAAI,OAAO,UAAU,SAAU,QAAO,KAAK,YAAY,KAAK;AAC5D,UAAI,MAAM,SAAS,aAAc,QAAO;AACxC,UAAI,OAAO,MAAM,SAAS,SAAU,QAAO,KAAK,YAAY,MAAM,QAAQ;AAC1E,WAAI,WAAM,UAAN,mBAAa,UAAW,QAAO,KAAK,aAAa,MAAM,MAAM,SAAS;AAE1E,YAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AACjF,aAAO,EAAE,MAAM,MAAM,MAAM,OAAO,SAAS,IAAI,gBAAc,KAAK,aAAa,UAAU,CAAC,CAAC;AAAA,IAC5F;AAAA;AAAA,IAGD,gCAAiC,OAAO;AAAA,IAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,YAAa,aAAa;AACxB,YAAM,aAAa,eAAe,WAAW;AAC7C,YAAM,SAAS,WAAW,WAAW;AAErC,YAAM,cAAc,CAAC,GAAG,YAAY,GAAG,MAAM;AAC7C,UAAI,YAAY,WAAW,EAAG,QAAO;AACrC,aAAO,KAAK,gBAAgB,aAAa,WAAW;AAAA,IACrD;AAAA,EACF;AAAA,EAED,SAAU;AACR,UAAM,qBAAqB,KAAK,OAAO,UAAU,KAAK,OAAO,QAAU,IAAE;AACzE,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,QACE,WAAW;AAAA,QACX,OAAO;AAAA,MACR;AAAA,MACD,KAAK,mBACD,qBACA,mBAAmB,IAAI,WAAS,KAAK,aAAa,KAAK,CAAC;AAAA;EAE/D;AACH;;"}
@@ -117,7 +117,6 @@ const _sfc_main = {
117
117
  return pages2;
118
118
  }
119
119
  if (this.currentPage > end) {
120
- console.log("END=", end);
121
120
  const pages2 = ["...", ...this.range(end, this.totalPages)];
122
121
  if (!this.hideEdges) {
123
122
  pages2.unshift(1);
@@ -175,11 +174,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
175
174
  class: "d-pagination"
176
175
  }, [
177
176
  vue.createVNode(_component_dt_button, {
178
- class: vue.normalizeClass(["d-pagination__button", $options.isFirstPage ? "d-fc-black-300 d-bgc-transparent" : "d-fc-tertiary"]),
177
+ class: "d-pagination__button",
179
178
  "data-qa": "dt-pagination-prev",
180
179
  "aria-label": $props.prevAriaLabel,
181
- kind: $options.isFirstPage ? "default" : "muted",
182
- importance: $options.isFirstPage ? "primary" : "clear",
180
+ kind: "muted",
181
+ importance: "clear",
183
182
  disabled: $options.isFirstPage,
184
183
  onClick: _cache[0] || (_cache[0] = ($event) => $options.changePage($data.currentPage - 1))
185
184
  }, {
@@ -187,7 +186,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
187
186
  vue.createVNode(_component_dt_icon_chevron_left, { size: "300" })
188
187
  ]),
189
188
  _: 1
190
- }, 8, ["aria-label", "kind", "importance", "disabled", "class"]),
189
+ }, 8, ["aria-label", "disabled"]),
191
190
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.pages, (page, index) => {
192
191
  return vue.openBlock(), vue.createElementBlock("div", {
193
192
  key: `page-${page}-${index}`,
@@ -211,19 +210,19 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
211
210
  ], 2);
212
211
  }), 128)),
213
212
  vue.createVNode(_component_dt_button, {
214
- class: vue.normalizeClass(["d-pagination__button", $options.isLastPage ? "d-fc-black-300 d-bgc-transparent" : "d-fc-tertiary"]),
213
+ class: "d-pagination__button",
215
214
  "data-qa": "dt-pagination-next",
216
215
  "aria-label": $props.nextAriaLabel,
217
216
  disabled: $options.isLastPage,
218
217
  kind: "muted",
219
- importance: $options.isLastPage ? "primary" : "clear",
218
+ importance: "clear",
220
219
  onClick: _cache[1] || (_cache[1] = ($event) => $options.changePage($data.currentPage + 1))
221
220
  }, {
222
221
  icon: vue.withCtx(() => [
223
222
  vue.createVNode(_component_dt_icon_chevron_right, { size: "300" })
224
223
  ]),
225
224
  _: 1
226
- }, 8, ["aria-label", "disabled", "importance", "class"])
225
+ }, 8, ["aria-label", "disabled"])
227
226
  ], 8, _hoisted_1);
228
227
  }
229
228
  const pagination = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["render", _sfc_render]]);
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.vue.cjs","sources":["../../../components/pagination/pagination.vue"],"sourcesContent":["<template>\n <nav\n :aria-label=\"ariaLabel\"\n class=\"d-pagination\"\n >\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-prev\"\n :aria-label=\"prevAriaLabel\"\n :kind=\"isFirstPage ? 'default' : 'muted'\"\n :importance=\"isFirstPage ? 'primary' : 'clear'\"\n :disabled=\"isFirstPage\"\n :class=\"isFirstPage ? 'd-fc-black-300 d-bgc-transparent' : 'd-fc-tertiary'\"\n @click=\"changePage(currentPage - 1)\"\n >\n <template #icon>\n <dt-icon-chevron-left\n size=\"300\"\n />\n </template>\n </dt-button>\n <div\n v-for=\"(page, index) in pages\"\n :key=\"`page-${page}-${index}`\"\n :class=\"{ 'd-pagination__separator': isNaN(Number(page)) }\"\n >\n <!-- eslint-disable vue/no-bare-strings-in-template -->\n <div\n v-if=\"isNaN(Number(page))\"\n class=\"d-pagination__separator-icon\"\n data-qa=\"dt-pagination-separator\"\n >\n <dt-icon-more-horizontal\n size=\"300\"\n />\n <!-- … -->\n </div>\n <!-- eslint-enable vue/no-bare-strings-in-template -->\n <dt-button\n v-else\n :aria-label=\"pageNumberAriaLabel(page)\"\n :kind=\"currentPage === page ? 'default' : 'muted'\"\n :importance=\"currentPage === page ? 'primary' : 'clear'\"\n label-class=\"\"\n @click=\"changePage(page)\"\n >\n {{ page }}\n </dt-button>\n </div>\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-next\"\n :aria-label=\"nextAriaLabel\"\n :disabled=\"isLastPage\"\n kind=\"muted\"\n :importance=\"isLastPage ? 'primary' : 'clear'\"\n :class=\"isLastPage ? 'd-fc-black-300 d-bgc-transparent' : 'd-fc-tertiary'\"\n @click=\"changePage(currentPage + 1)\"\n >\n <template #icon>\n <dt-icon-chevron-right\n size=\"300\"\n />\n </template>\n </dt-button>\n </nav>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtIconChevronLeft, DtIconChevronRight, DtIconMoreHorizontal } from '@dialpad/dialtone-icons/vue3';\n\n/**\n * Pagination allows you to divide large amounts of content into smaller chunks across multiple pages.\n * @see https://dialtone.dialpad.com/components/pagination.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtPagination',\n\n components: {\n DtButton,\n DtIconChevronLeft,\n DtIconChevronRight,\n DtIconMoreHorizontal,\n },\n\n props: {\n /**\n * Descriptive label for the pagination content.\n */\n ariaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * The total number of the pages\n */\n totalPages: {\n type: Number,\n required: true,\n },\n\n /**\n * Descriptive label for the previous button.\n */\n prevAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Descriptive label for the next button.\n */\n nextAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * A method that will be called to get the aria label of each page.\n */\n pageNumberAriaLabel: {\n type: Function,\n required: true,\n },\n\n /**\n * The active current page in the list of pages, defaults to the first page\n */\n activePage: {\n type: Number,\n default: 1,\n },\n\n /**\n * Determines the max pages to be shown in the list. Using an odd number is recommended.\n * If an even number is given, then it will be rounded down to the nearest odd number to always\n * keep current page in the middle when current page is in the mid-range.\n */\n maxVisible: {\n type: Number,\n default: 5,\n },\n\n /**\n * Sometimes you may need to hide start and end page number buttons when moving in between.\n * This prop will be used to hide the first and last page buttons when not near the edges.\n * This is useful when your backend does not support offset and you can only use cursor based pagination.\n */\n hideEdges: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Page change event\n *\n * @event change\n * @type {Number}\n */\n 'change',\n ],\n\n data () {\n return {\n currentPage: this.activePage,\n };\n },\n\n computed: {\n isFirstPage () {\n return this.currentPage === 1;\n },\n\n isLastPage () {\n return this.currentPage === this.totalPages;\n },\n\n pages () {\n if (this.maxVisible === 0) {\n return [];\n }\n if (this.totalPages <= this.maxVisible) {\n return this.range(1, this.totalPages);\n }\n\n let start = this.maxVisible - 1;\n let end = this.totalPages - start + 1;\n\n // if hideEdges is true, modify the start and\n // end to account for the hidden pages\n if (this.hideEdges) {\n start = start + 1;\n end = end - 1;\n }\n\n if (this.currentPage < start) {\n const pages = [...this.range(1, start), '...'];\n if (!this.hideEdges) {\n // add last page to the end\n pages.push(this.totalPages);\n }\n return pages;\n }\n\n if (this.currentPage > end) {\n console.log('END=', end);\n const pages = ['...', ...this.range(end, this.totalPages)];\n if (!this.hideEdges) {\n // add first page to the beginning\n pages.unshift(1);\n }\n return pages;\n }\n\n // rounding to the nearest odd according to the maxlength to always show the page number in the middle.\n const total = this.maxVisible - (3 - this.maxVisible % 2);\n const centerIndex = Math.floor(total / 2);\n let left = this.currentPage - centerIndex;\n let right = this.currentPage + centerIndex;\n\n // if hideEdge is true, modify the left and right to account for the hidden pages\n if (this.hideEdges) {\n left = left - 1;\n right = right + 1;\n }\n\n const pages = ['...', ...this.range(left, right), '...'];\n if (!this.hideEdges) {\n return [1, ...pages, this.totalPages];\n }\n return pages;\n },\n },\n\n watch: {\n activePage () {\n this.currentPage = this.activePage;\n },\n },\n\n methods: {\n range (from, to) {\n const range = [];\n from = from > 0 ? from : 1;\n for (let i = from; i <= to; i++) {\n range.push(i);\n }\n return range;\n },\n\n changePage (page) {\n this.currentPage = page;\n this.$emit('change', this.currentPage);\n },\n },\n};\n</script>\n"],"names":["DtButton","DtIconChevronLeft","DtIconChevronRight","DtIconMoreHorizontal","pages","_createElementBlock","_createVNode","_normalizeClass","_openBlock","_Fragment","_renderList","_createBlock","_withCtx","_createTextVNode","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"pagination.vue.cjs","sources":["../../../components/pagination/pagination.vue"],"sourcesContent":["<template>\n <nav\n :aria-label=\"ariaLabel\"\n class=\"d-pagination\"\n >\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-prev\"\n :aria-label=\"prevAriaLabel\"\n kind=\"muted\"\n importance=\"clear\"\n :disabled=\"isFirstPage\"\n @click=\"changePage(currentPage - 1)\"\n >\n <template #icon>\n <dt-icon-chevron-left\n size=\"300\"\n />\n </template>\n </dt-button>\n <div\n v-for=\"(page, index) in pages\"\n :key=\"`page-${page}-${index}`\"\n :class=\"{ 'd-pagination__separator': isNaN(Number(page)) }\"\n >\n <!-- eslint-disable vue/no-bare-strings-in-template -->\n <div\n v-if=\"isNaN(Number(page))\"\n class=\"d-pagination__separator-icon\"\n data-qa=\"dt-pagination-separator\"\n >\n <dt-icon-more-horizontal\n size=\"300\"\n />\n <!-- … -->\n </div>\n <!-- eslint-enable vue/no-bare-strings-in-template -->\n <dt-button\n v-else\n :aria-label=\"pageNumberAriaLabel(page)\"\n :kind=\"currentPage === page ? 'default' : 'muted'\"\n :importance=\"currentPage === page ? 'primary' : 'clear'\"\n label-class=\"\"\n @click=\"changePage(page)\"\n >\n {{ page }}\n </dt-button>\n </div>\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-next\"\n :aria-label=\"nextAriaLabel\"\n :disabled=\"isLastPage\"\n kind=\"muted\"\n importance=\"clear\"\n @click=\"changePage(currentPage + 1)\"\n >\n <template #icon>\n <dt-icon-chevron-right\n size=\"300\"\n />\n </template>\n </dt-button>\n </nav>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtIconChevronLeft, DtIconChevronRight, DtIconMoreHorizontal } from '@dialpad/dialtone-icons/vue3';\n\n/**\n * Pagination allows you to divide large amounts of content into smaller chunks across multiple pages.\n * @see https://dialtone.dialpad.com/components/pagination.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtPagination',\n\n components: {\n DtButton,\n DtIconChevronLeft,\n DtIconChevronRight,\n DtIconMoreHorizontal,\n },\n\n props: {\n /**\n * Descriptive label for the pagination content.\n */\n ariaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * The total number of the pages\n */\n totalPages: {\n type: Number,\n required: true,\n },\n\n /**\n * Descriptive label for the previous button.\n */\n prevAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Descriptive label for the next button.\n */\n nextAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * A method that will be called to get the aria label of each page.\n */\n pageNumberAriaLabel: {\n type: Function,\n required: true,\n },\n\n /**\n * The active current page in the list of pages, defaults to the first page\n */\n activePage: {\n type: Number,\n default: 1,\n },\n\n /**\n * Determines the max pages to be shown in the list. Using an odd number is recommended.\n * If an even number is given, then it will be rounded down to the nearest odd number to always\n * keep current page in the middle when current page is in the mid-range.\n */\n maxVisible: {\n type: Number,\n default: 5,\n },\n\n /**\n * Sometimes you may need to hide start and end page number buttons when moving in between.\n * This prop will be used to hide the first and last page buttons when not near the edges.\n * This is useful when your backend does not support offset and you can only use cursor based pagination.\n */\n hideEdges: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Page change event\n *\n * @event change\n * @type {Number}\n */\n 'change',\n ],\n\n data () {\n return {\n currentPage: this.activePage,\n };\n },\n\n computed: {\n isFirstPage () {\n return this.currentPage === 1;\n },\n\n isLastPage () {\n return this.currentPage === this.totalPages;\n },\n\n pages () {\n if (this.maxVisible === 0) {\n return [];\n }\n if (this.totalPages <= this.maxVisible) {\n return this.range(1, this.totalPages);\n }\n\n let start = this.maxVisible - 1;\n let end = this.totalPages - start + 1;\n\n // if hideEdges is true, modify the start and\n // end to account for the hidden pages\n if (this.hideEdges) {\n start = start + 1;\n end = end - 1;\n }\n\n if (this.currentPage < start) {\n const pages = [...this.range(1, start), '...'];\n if (!this.hideEdges) {\n // add last page to the end\n pages.push(this.totalPages);\n }\n return pages;\n }\n\n if (this.currentPage > end) {\n const pages = ['...', ...this.range(end, this.totalPages)];\n if (!this.hideEdges) {\n // add first page to the beginning\n pages.unshift(1);\n }\n return pages;\n }\n\n // rounding to the nearest odd according to the maxlength to always show the page number in the middle.\n const total = this.maxVisible - (3 - this.maxVisible % 2);\n const centerIndex = Math.floor(total / 2);\n let left = this.currentPage - centerIndex;\n let right = this.currentPage + centerIndex;\n\n // if hideEdge is true, modify the left and right to account for the hidden pages\n if (this.hideEdges) {\n left = left - 1;\n right = right + 1;\n }\n\n const pages = ['...', ...this.range(left, right), '...'];\n if (!this.hideEdges) {\n return [1, ...pages, this.totalPages];\n }\n return pages;\n },\n },\n\n watch: {\n activePage () {\n this.currentPage = this.activePage;\n },\n },\n\n methods: {\n range (from, to) {\n const range = [];\n from = from > 0 ? from : 1;\n for (let i = from; i <= to; i++) {\n range.push(i);\n }\n return range;\n },\n\n changePage (page) {\n this.currentPage = page;\n this.$emit('change', this.currentPage);\n },\n },\n};\n</script>\n"],"names":["DtButton","DtIconChevronLeft","DtIconChevronRight","DtIconMoreHorizontal","pages","_createElementBlock","_createVNode","_openBlock","_Fragment","_renderList","_normalizeClass","_createBlock","_withCtx","_createTextVNode","_toDisplayString"],"mappings":";;;;;;AA0EA,MAAK,YAAU;AAAA,EACb,cAAc,EAAE,MAAM,EAAG;AAAA,EACzB,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,UAAAA,OAAQ;AAAA,IACR,mBAAAC,KAAiB;AAAA,IACjB,oBAAAC,KAAkB;AAAA,IAClB,sBAAAC,KAAoB;AAAA,EACrB;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,qBAAqB;AAAA,MACnB,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EAED,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOL;AAAA,EACD;AAAA,EAED,OAAQ;AACN,WAAO;AAAA,MACL,aAAa,KAAK;AAAA;EAErB;AAAA,EAED,UAAU;AAAA,IACR,cAAe;AACb,aAAO,KAAK,gBAAgB;AAAA,IAC7B;AAAA,IAED,aAAc;AACZ,aAAO,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,IAED,QAAS;AACP,UAAI,KAAK,eAAe,GAAG;AACzB,eAAO;MACT;AACA,UAAI,KAAK,cAAc,KAAK,YAAY;AACtC,eAAO,KAAK,MAAM,GAAG,KAAK,UAAU;AAAA,MACtC;AAEA,UAAI,QAAQ,KAAK,aAAa;AAC9B,UAAI,MAAM,KAAK,aAAa,QAAQ;AAIpC,UAAI,KAAK,WAAW;AAClB,gBAAQ,QAAQ;AAChB,cAAM,MAAM;AAAA,MACd;AAEA,UAAI,KAAK,cAAc,OAAO;AAC5B,cAAMC,SAAQ,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK;AAC7C,YAAI,CAAC,KAAK,WAAW;AAEnB,UAAAA,OAAM,KAAK,KAAK,UAAU;AAAA,QAC5B;AACA,eAAOA;AAAA,MACT;AAEA,UAAI,KAAK,cAAc,KAAK;AAC1B,cAAMA,SAAQ,CAAC,OAAO,GAAG,KAAK,MAAM,KAAK,KAAK,UAAU,CAAC;AACzD,YAAI,CAAC,KAAK,WAAW;AAEnB,UAAAA,OAAM,QAAQ,CAAC;AAAA,QACjB;AACA,eAAOA;AAAA,MACT;AAGA,YAAM,QAAQ,KAAK,cAAc,IAAI,KAAK,aAAa;AACvD,YAAM,cAAc,KAAK,MAAM,QAAQ,CAAC;AACxC,UAAI,OAAO,KAAK,cAAc;AAC9B,UAAI,QAAQ,KAAK,cAAc;AAG/B,UAAI,KAAK,WAAW;AAClB,eAAO,OAAO;AACd,gBAAQ,QAAQ;AAAA,MAClB;AAEA,YAAM,QAAQ,CAAC,OAAO,GAAG,KAAK,MAAM,MAAM,KAAK,GAAG,KAAK;AACvD,UAAI,CAAC,KAAK,WAAW;AACnB,eAAO,CAAC,GAAG,GAAG,OAAO,KAAK,UAAU;AAAA,MACtC;AACA,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EAED,OAAO;AAAA,IACL,aAAc;AACZ,WAAK,cAAc,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EAED,SAAS;AAAA,IACP,MAAO,MAAM,IAAI;AACf,YAAM,QAAQ,CAAA;AACd,aAAO,OAAO,IAAI,OAAO;AACzB,eAAS,IAAI,MAAM,KAAK,IAAI,KAAK;AAC/B,cAAM,KAAK,CAAC;AAAA,MACd;AACA,aAAO;AAAA,IACR;AAAA,IAED,WAAY,MAAM;AAChB,WAAK,cAAc;AACnB,WAAK,MAAM,UAAU,KAAK,WAAW;AAAA,IACtC;AAAA,EACF;AACH;AAjQA,MAAA,aAAA,CAAA,YAAA;;EAAA,KAAA;AAAA,EA4BQ,OAAM;AAAA,EACN,WAAQ;;;;;;;0BA5BdC,IA8DM,mBAAA,OAAA;AAAA,IA7DH,cAAY,OAAS;AAAA,IACtB,OAAM;AAAA;IAENC,IAAAA,YAcY,sBAAA;AAAA,MAbV,OAAM;AAAA,MACN,WAAQ;AAAA,MACP,cAAY,OAAa;AAAA,MAC1B,MAAK;AAAA,MACL,YAAW;AAAA,MACV,UAAU,SAAW;AAAA,MACrB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,YAAE,SAAU,WAAC,MAAW,cAAA,CAAA;AAAA;MAEnB,kBACT,MAEE;AAAA,QAFFA,IAAAA,YAEE,iCAAA,EADA,MAAK,MAAK,CAAA;AAAA;MAhBpB,GAAA;AAAA;KAoBIC,IAAAA,UAAA,IAAA,GAAAF,IAAA,mBA2BMG,oBA/CVC,IAqB8B,WAAA,SAAA,OArB9B,CAqBc,MAAM,UAAK;8BADrBJ,IA2BM,mBAAA,OAAA;AAAA,QAzBH,KAAG,QAAU,IAAI,IAAI,KAAK;AAAA,QAC1B,OAvBPK,IAuB2C,eAAA,EAAA,2BAAA,MAAM,OAAO,IAAI,CAAA,GAAA;AAAA;QAI9C,MAAM,OAAO,IAAI,CAAA,KADzBH,IAAAA,aAAAF,IAAAA,mBASM,OATN,YASM;AAAA,UAJJC,IAAAA,YAEE,oCAAA,EADA,MAAK,MAAK,CAAA;AAAA,gCAKdK,IASY,YAAA,sBAAA;AAAA,UA9ClB,KAAA;AAAA,UAuCS,cAAY,OAAmB,oBAAC,IAAI;AAAA,UACpC,MAAM,MAAW,gBAAK,OAAI,YAAA;AAAA,UAC1B,YAAY,MAAW,gBAAK,OAAI,YAAA;AAAA,UACjC,eAAY;AAAA,UACX,SAAK,YAAE,SAAU,WAAC,IAAI;AAAA;UA3C/B,SAAAC,IAAA,QA6CQ,MAAU;AAAA,YA7ClBC,IAAAA,gBAAAC,IAAA,gBA6CW,IAAI,GAAA,CAAA;AAAA;UA7Cf,GAAA;AAAA;;;IAgDIR,IAAAA,YAcY,sBAAA;AAAA,MAbV,OAAM;AAAA,MACN,WAAQ;AAAA,MACP,cAAY,OAAa;AAAA,MACzB,UAAU,SAAU;AAAA,MACrB,MAAK;AAAA,MACL,YAAW;AAAA,MACV,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,YAAE,SAAU,WAAC,MAAW,cAAA,CAAA;AAAA;MAEnB,kBACT,MAEE;AAAA,QAFFA,IAAAA,YAEE,kCAAA,EADA,MAAK,MAAK,CAAA;AAAA;MA3DpB,GAAA;AAAA;EAAA,GAAA,GAAA,UAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { DtIconChevronLeft, DtIconChevronRight, DtIconMoreHorizontal } from "@dialpad/dialtone-icons/vue3";
2
- import { resolveComponent, openBlock, createElementBlock, createVNode, normalizeClass, withCtx, Fragment, renderList, createBlock, createTextVNode, toDisplayString } from "vue";
2
+ import { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, Fragment, renderList, normalizeClass, createBlock, createTextVNode, toDisplayString } from "vue";
3
3
  import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
4
4
  import DtButton from "../button/button.vue.js";
5
5
  const _sfc_main = {
@@ -115,7 +115,6 @@ const _sfc_main = {
115
115
  return pages2;
116
116
  }
117
117
  if (this.currentPage > end) {
118
- console.log("END=", end);
119
118
  const pages2 = ["...", ...this.range(end, this.totalPages)];
120
119
  if (!this.hideEdges) {
121
120
  pages2.unshift(1);
@@ -173,11 +172,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
173
172
  class: "d-pagination"
174
173
  }, [
175
174
  createVNode(_component_dt_button, {
176
- class: normalizeClass(["d-pagination__button", $options.isFirstPage ? "d-fc-black-300 d-bgc-transparent" : "d-fc-tertiary"]),
175
+ class: "d-pagination__button",
177
176
  "data-qa": "dt-pagination-prev",
178
177
  "aria-label": $props.prevAriaLabel,
179
- kind: $options.isFirstPage ? "default" : "muted",
180
- importance: $options.isFirstPage ? "primary" : "clear",
178
+ kind: "muted",
179
+ importance: "clear",
181
180
  disabled: $options.isFirstPage,
182
181
  onClick: _cache[0] || (_cache[0] = ($event) => $options.changePage($data.currentPage - 1))
183
182
  }, {
@@ -185,7 +184,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
185
184
  createVNode(_component_dt_icon_chevron_left, { size: "300" })
186
185
  ]),
187
186
  _: 1
188
- }, 8, ["aria-label", "kind", "importance", "disabled", "class"]),
187
+ }, 8, ["aria-label", "disabled"]),
189
188
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.pages, (page, index) => {
190
189
  return openBlock(), createElementBlock("div", {
191
190
  key: `page-${page}-${index}`,
@@ -209,19 +208,19 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
209
208
  ], 2);
210
209
  }), 128)),
211
210
  createVNode(_component_dt_button, {
212
- class: normalizeClass(["d-pagination__button", $options.isLastPage ? "d-fc-black-300 d-bgc-transparent" : "d-fc-tertiary"]),
211
+ class: "d-pagination__button",
213
212
  "data-qa": "dt-pagination-next",
214
213
  "aria-label": $props.nextAriaLabel,
215
214
  disabled: $options.isLastPage,
216
215
  kind: "muted",
217
- importance: $options.isLastPage ? "primary" : "clear",
216
+ importance: "clear",
218
217
  onClick: _cache[1] || (_cache[1] = ($event) => $options.changePage($data.currentPage + 1))
219
218
  }, {
220
219
  icon: withCtx(() => [
221
220
  createVNode(_component_dt_icon_chevron_right, { size: "300" })
222
221
  ]),
223
222
  _: 1
224
- }, 8, ["aria-label", "disabled", "importance", "class"])
223
+ }, 8, ["aria-label", "disabled"])
225
224
  ], 8, _hoisted_1);
226
225
  }
227
226
  const pagination = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.vue.js","sources":["../../../components/pagination/pagination.vue"],"sourcesContent":["<template>\n <nav\n :aria-label=\"ariaLabel\"\n class=\"d-pagination\"\n >\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-prev\"\n :aria-label=\"prevAriaLabel\"\n :kind=\"isFirstPage ? 'default' : 'muted'\"\n :importance=\"isFirstPage ? 'primary' : 'clear'\"\n :disabled=\"isFirstPage\"\n :class=\"isFirstPage ? 'd-fc-black-300 d-bgc-transparent' : 'd-fc-tertiary'\"\n @click=\"changePage(currentPage - 1)\"\n >\n <template #icon>\n <dt-icon-chevron-left\n size=\"300\"\n />\n </template>\n </dt-button>\n <div\n v-for=\"(page, index) in pages\"\n :key=\"`page-${page}-${index}`\"\n :class=\"{ 'd-pagination__separator': isNaN(Number(page)) }\"\n >\n <!-- eslint-disable vue/no-bare-strings-in-template -->\n <div\n v-if=\"isNaN(Number(page))\"\n class=\"d-pagination__separator-icon\"\n data-qa=\"dt-pagination-separator\"\n >\n <dt-icon-more-horizontal\n size=\"300\"\n />\n <!-- … -->\n </div>\n <!-- eslint-enable vue/no-bare-strings-in-template -->\n <dt-button\n v-else\n :aria-label=\"pageNumberAriaLabel(page)\"\n :kind=\"currentPage === page ? 'default' : 'muted'\"\n :importance=\"currentPage === page ? 'primary' : 'clear'\"\n label-class=\"\"\n @click=\"changePage(page)\"\n >\n {{ page }}\n </dt-button>\n </div>\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-next\"\n :aria-label=\"nextAriaLabel\"\n :disabled=\"isLastPage\"\n kind=\"muted\"\n :importance=\"isLastPage ? 'primary' : 'clear'\"\n :class=\"isLastPage ? 'd-fc-black-300 d-bgc-transparent' : 'd-fc-tertiary'\"\n @click=\"changePage(currentPage + 1)\"\n >\n <template #icon>\n <dt-icon-chevron-right\n size=\"300\"\n />\n </template>\n </dt-button>\n </nav>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtIconChevronLeft, DtIconChevronRight, DtIconMoreHorizontal } from '@dialpad/dialtone-icons/vue3';\n\n/**\n * Pagination allows you to divide large amounts of content into smaller chunks across multiple pages.\n * @see https://dialtone.dialpad.com/components/pagination.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtPagination',\n\n components: {\n DtButton,\n DtIconChevronLeft,\n DtIconChevronRight,\n DtIconMoreHorizontal,\n },\n\n props: {\n /**\n * Descriptive label for the pagination content.\n */\n ariaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * The total number of the pages\n */\n totalPages: {\n type: Number,\n required: true,\n },\n\n /**\n * Descriptive label for the previous button.\n */\n prevAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Descriptive label for the next button.\n */\n nextAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * A method that will be called to get the aria label of each page.\n */\n pageNumberAriaLabel: {\n type: Function,\n required: true,\n },\n\n /**\n * The active current page in the list of pages, defaults to the first page\n */\n activePage: {\n type: Number,\n default: 1,\n },\n\n /**\n * Determines the max pages to be shown in the list. Using an odd number is recommended.\n * If an even number is given, then it will be rounded down to the nearest odd number to always\n * keep current page in the middle when current page is in the mid-range.\n */\n maxVisible: {\n type: Number,\n default: 5,\n },\n\n /**\n * Sometimes you may need to hide start and end page number buttons when moving in between.\n * This prop will be used to hide the first and last page buttons when not near the edges.\n * This is useful when your backend does not support offset and you can only use cursor based pagination.\n */\n hideEdges: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Page change event\n *\n * @event change\n * @type {Number}\n */\n 'change',\n ],\n\n data () {\n return {\n currentPage: this.activePage,\n };\n },\n\n computed: {\n isFirstPage () {\n return this.currentPage === 1;\n },\n\n isLastPage () {\n return this.currentPage === this.totalPages;\n },\n\n pages () {\n if (this.maxVisible === 0) {\n return [];\n }\n if (this.totalPages <= this.maxVisible) {\n return this.range(1, this.totalPages);\n }\n\n let start = this.maxVisible - 1;\n let end = this.totalPages - start + 1;\n\n // if hideEdges is true, modify the start and\n // end to account for the hidden pages\n if (this.hideEdges) {\n start = start + 1;\n end = end - 1;\n }\n\n if (this.currentPage < start) {\n const pages = [...this.range(1, start), '...'];\n if (!this.hideEdges) {\n // add last page to the end\n pages.push(this.totalPages);\n }\n return pages;\n }\n\n if (this.currentPage > end) {\n console.log('END=', end);\n const pages = ['...', ...this.range(end, this.totalPages)];\n if (!this.hideEdges) {\n // add first page to the beginning\n pages.unshift(1);\n }\n return pages;\n }\n\n // rounding to the nearest odd according to the maxlength to always show the page number in the middle.\n const total = this.maxVisible - (3 - this.maxVisible % 2);\n const centerIndex = Math.floor(total / 2);\n let left = this.currentPage - centerIndex;\n let right = this.currentPage + centerIndex;\n\n // if hideEdge is true, modify the left and right to account for the hidden pages\n if (this.hideEdges) {\n left = left - 1;\n right = right + 1;\n }\n\n const pages = ['...', ...this.range(left, right), '...'];\n if (!this.hideEdges) {\n return [1, ...pages, this.totalPages];\n }\n return pages;\n },\n },\n\n watch: {\n activePage () {\n this.currentPage = this.activePage;\n },\n },\n\n methods: {\n range (from, to) {\n const range = [];\n from = from > 0 ? from : 1;\n for (let i = from; i <= to; i++) {\n range.push(i);\n }\n return range;\n },\n\n changePage (page) {\n this.currentPage = page;\n this.$emit('change', this.currentPage);\n },\n },\n};\n</script>\n"],"names":["pages","_createElementBlock","_createVNode","_normalizeClass","_openBlock","_Fragment","_renderList","_createBlock","_withCtx","_createTextVNode","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"pagination.vue.js","sources":["../../../components/pagination/pagination.vue"],"sourcesContent":["<template>\n <nav\n :aria-label=\"ariaLabel\"\n class=\"d-pagination\"\n >\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-prev\"\n :aria-label=\"prevAriaLabel\"\n kind=\"muted\"\n importance=\"clear\"\n :disabled=\"isFirstPage\"\n @click=\"changePage(currentPage - 1)\"\n >\n <template #icon>\n <dt-icon-chevron-left\n size=\"300\"\n />\n </template>\n </dt-button>\n <div\n v-for=\"(page, index) in pages\"\n :key=\"`page-${page}-${index}`\"\n :class=\"{ 'd-pagination__separator': isNaN(Number(page)) }\"\n >\n <!-- eslint-disable vue/no-bare-strings-in-template -->\n <div\n v-if=\"isNaN(Number(page))\"\n class=\"d-pagination__separator-icon\"\n data-qa=\"dt-pagination-separator\"\n >\n <dt-icon-more-horizontal\n size=\"300\"\n />\n <!-- … -->\n </div>\n <!-- eslint-enable vue/no-bare-strings-in-template -->\n <dt-button\n v-else\n :aria-label=\"pageNumberAriaLabel(page)\"\n :kind=\"currentPage === page ? 'default' : 'muted'\"\n :importance=\"currentPage === page ? 'primary' : 'clear'\"\n label-class=\"\"\n @click=\"changePage(page)\"\n >\n {{ page }}\n </dt-button>\n </div>\n <dt-button\n class=\"d-pagination__button\"\n data-qa=\"dt-pagination-next\"\n :aria-label=\"nextAriaLabel\"\n :disabled=\"isLastPage\"\n kind=\"muted\"\n importance=\"clear\"\n @click=\"changePage(currentPage + 1)\"\n >\n <template #icon>\n <dt-icon-chevron-right\n size=\"300\"\n />\n </template>\n </dt-button>\n </nav>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtIconChevronLeft, DtIconChevronRight, DtIconMoreHorizontal } from '@dialpad/dialtone-icons/vue3';\n\n/**\n * Pagination allows you to divide large amounts of content into smaller chunks across multiple pages.\n * @see https://dialtone.dialpad.com/components/pagination.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtPagination',\n\n components: {\n DtButton,\n DtIconChevronLeft,\n DtIconChevronRight,\n DtIconMoreHorizontal,\n },\n\n props: {\n /**\n * Descriptive label for the pagination content.\n */\n ariaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * The total number of the pages\n */\n totalPages: {\n type: Number,\n required: true,\n },\n\n /**\n * Descriptive label for the previous button.\n */\n prevAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Descriptive label for the next button.\n */\n nextAriaLabel: {\n type: String,\n required: true,\n },\n\n /**\n * A method that will be called to get the aria label of each page.\n */\n pageNumberAriaLabel: {\n type: Function,\n required: true,\n },\n\n /**\n * The active current page in the list of pages, defaults to the first page\n */\n activePage: {\n type: Number,\n default: 1,\n },\n\n /**\n * Determines the max pages to be shown in the list. Using an odd number is recommended.\n * If an even number is given, then it will be rounded down to the nearest odd number to always\n * keep current page in the middle when current page is in the mid-range.\n */\n maxVisible: {\n type: Number,\n default: 5,\n },\n\n /**\n * Sometimes you may need to hide start and end page number buttons when moving in between.\n * This prop will be used to hide the first and last page buttons when not near the edges.\n * This is useful when your backend does not support offset and you can only use cursor based pagination.\n */\n hideEdges: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Page change event\n *\n * @event change\n * @type {Number}\n */\n 'change',\n ],\n\n data () {\n return {\n currentPage: this.activePage,\n };\n },\n\n computed: {\n isFirstPage () {\n return this.currentPage === 1;\n },\n\n isLastPage () {\n return this.currentPage === this.totalPages;\n },\n\n pages () {\n if (this.maxVisible === 0) {\n return [];\n }\n if (this.totalPages <= this.maxVisible) {\n return this.range(1, this.totalPages);\n }\n\n let start = this.maxVisible - 1;\n let end = this.totalPages - start + 1;\n\n // if hideEdges is true, modify the start and\n // end to account for the hidden pages\n if (this.hideEdges) {\n start = start + 1;\n end = end - 1;\n }\n\n if (this.currentPage < start) {\n const pages = [...this.range(1, start), '...'];\n if (!this.hideEdges) {\n // add last page to the end\n pages.push(this.totalPages);\n }\n return pages;\n }\n\n if (this.currentPage > end) {\n const pages = ['...', ...this.range(end, this.totalPages)];\n if (!this.hideEdges) {\n // add first page to the beginning\n pages.unshift(1);\n }\n return pages;\n }\n\n // rounding to the nearest odd according to the maxlength to always show the page number in the middle.\n const total = this.maxVisible - (3 - this.maxVisible % 2);\n const centerIndex = Math.floor(total / 2);\n let left = this.currentPage - centerIndex;\n let right = this.currentPage + centerIndex;\n\n // if hideEdge is true, modify the left and right to account for the hidden pages\n if (this.hideEdges) {\n left = left - 1;\n right = right + 1;\n }\n\n const pages = ['...', ...this.range(left, right), '...'];\n if (!this.hideEdges) {\n return [1, ...pages, this.totalPages];\n }\n return pages;\n },\n },\n\n watch: {\n activePage () {\n this.currentPage = this.activePage;\n },\n },\n\n methods: {\n range (from, to) {\n const range = [];\n from = from > 0 ? from : 1;\n for (let i = from; i <= to; i++) {\n range.push(i);\n }\n return range;\n },\n\n changePage (page) {\n this.currentPage = page;\n this.$emit('change', this.currentPage);\n },\n },\n};\n</script>\n"],"names":["pages","_createElementBlock","_createVNode","_openBlock","_Fragment","_renderList","_normalizeClass","_createBlock","_withCtx","_createTextVNode","_toDisplayString"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@tiptap/core");
4
+ const Paragraph = require("@tiptap/extension-paragraph");
5
+ const DivParagraph = Paragraph.extend({
6
+ parseHTML() {
7
+ return [{ tag: "div" }];
8
+ },
9
+ renderHTML({ HTMLAttributes }) {
10
+ return ["div", core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
11
+ }
12
+ });
13
+ exports.DivParagraph = DivParagraph;
14
+ //# sourceMappingURL=div.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"div.cjs","sources":["../../../../../components/rich_text_editor/extensions/div/div.js"],"sourcesContent":["import { mergeAttributes } from '@tiptap/core';\nimport Paragraph from '@tiptap/extension-paragraph';\n\n/** Extension for div tag support\n * Replaces the default p tags when typing text to div tags\n * Extends the following extension: https://github.com/ueberdosis/tiptap/blob/main/packages/extension-paragraph/src/paragraph.ts\n */\nexport const DivParagraph = Paragraph.extend({\n parseHTML () {\n return [{ tag: 'div' }];\n },\n\n renderHTML ({ HTMLAttributes }) {\n return ['div', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n});\n"],"names":["mergeAttributes"],"mappings":";;;;AAOY,MAAC,eAAe,UAAU,OAAO;AAAA,EAC3C,YAAa;AACX,WAAO,CAAC,EAAE,KAAK,MAAK,CAAE;AAAA,EACvB;AAAA,EAED,WAAY,EAAE,kBAAkB;AAC9B,WAAO,CAAC,OAAOA,KAAAA,gBAAgB,KAAK,QAAQ,gBAAgB,cAAc,GAAG,CAAC;AAAA,EAC/E;AAEH,CAAC;;"}
@@ -0,0 +1,14 @@
1
+ import { mergeAttributes } from "@tiptap/core";
2
+ import Paragraph from "@tiptap/extension-paragraph";
3
+ const DivParagraph = Paragraph.extend({
4
+ parseHTML() {
5
+ return [{ tag: "div" }];
6
+ },
7
+ renderHTML({ HTMLAttributes }) {
8
+ return ["div", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
9
+ }
10
+ });
11
+ export {
12
+ DivParagraph
13
+ };
14
+ //# sourceMappingURL=div.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"div.js","sources":["../../../../../components/rich_text_editor/extensions/div/div.js"],"sourcesContent":["import { mergeAttributes } from '@tiptap/core';\nimport Paragraph from '@tiptap/extension-paragraph';\n\n/** Extension for div tag support\n * Replaces the default p tags when typing text to div tags\n * Extends the following extension: https://github.com/ueberdosis/tiptap/blob/main/packages/extension-paragraph/src/paragraph.ts\n */\nexport const DivParagraph = Paragraph.extend({\n parseHTML () {\n return [{ tag: 'div' }];\n },\n\n renderHTML ({ HTMLAttributes }) {\n return ['div', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n});\n"],"names":[],"mappings":";;AAOY,MAAC,eAAe,UAAU,OAAO;AAAA,EAC3C,YAAa;AACX,WAAO,CAAC,EAAE,KAAK,MAAK,CAAE;AAAA,EACvB;AAAA,EAED,WAAY,EAAE,kBAAkB;AAC9B,WAAO,CAAC,OAAO,gBAAgB,KAAK,QAAQ,gBAAgB,cAAc,GAAG,CAAC;AAAA,EAC/E;AAEH,CAAC;"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const div = require("./div.cjs");
4
+ exports.default = div.DivParagraph;
5
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,5 @@
1
+ import { DivParagraph } from "./div.js";
2
+ export {
3
+ DivParagraph as default
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -23,6 +23,7 @@ const History = require("@tiptap/extension-history");
23
23
  const emoji = require("./extensions/emoji/emoji.cjs");
24
24
  const custom_link = require("./extensions/custom_link/custom_link.cjs");
25
25
  const image = require("./extensions/image/image.cjs");
26
+ const div = require("./extensions/div/div.cjs");
26
27
  const mention = require("./extensions/mentions/mention.cjs");
27
28
  const channel = require("./extensions/channels/channel.cjs");
28
29
  const slash_command = require("./extensions/slash_command/slash_command.cjs");
@@ -284,6 +285,13 @@ const _sfc_main = {
284
285
  hideLinkBubbleMenu: {
285
286
  type: Boolean,
286
287
  default: false
288
+ },
289
+ /**
290
+ * Show text in HTML div tags instead of paragraph tags
291
+ */
292
+ useDivTags: {
293
+ type: Boolean,
294
+ default: false
287
295
  }
288
296
  },
289
297
  emits: [
@@ -376,7 +384,8 @@ const _sfc_main = {
376
384
  },
377
385
  // eslint-disable-next-line complexity
378
386
  extensions() {
379
- const extensions = [Document, Paragraph, Text, History, HardBreak];
387
+ const extensions = [Document, Text, History, HardBreak];
388
+ extensions.push(this.useDivTags ? div.DivParagraph : Paragraph);
380
389
  if (this.allowBlockquote) {
381
390
  extensions.push(Blockquote);
382
391
  }