@opentiny/fluent-editor 3.20.1 → 3.20.2-alpha.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 (147) hide show
  1. package/README.md +99 -99
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js.map +1 -1
  5. package/es/config/editor.utils.es.js.map +1 -1
  6. package/es/config/i18n/en-us.es.js.map +1 -1
  7. package/es/config/i18n/zh-cn.es.js.map +1 -1
  8. package/es/config/icons.config.es.js.map +1 -1
  9. package/es/{config.es.js → config/index.es.js} +14 -7
  10. package/es/config/index.es.js.map +1 -0
  11. package/es/counter/index.es.js +2 -1
  12. package/es/counter/index.es.js.map +1 -1
  13. package/es/custom-clipboard.es.js.map +1 -1
  14. package/es/custom-image/BlotFormatter.es.js.map +1 -1
  15. package/es/custom-image/Options.es.js.map +1 -1
  16. package/es/custom-image/actions/Action.es.js.map +1 -1
  17. package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
  18. package/es/custom-image/actions/DeleteAction.es.js.map +1 -1
  19. package/es/custom-image/image.es.js.map +1 -1
  20. package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
  21. package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -1
  22. package/es/custom-image/specs/ImageSpec.es.js.map +1 -1
  23. package/es/custom-uploader.es.js.map +1 -1
  24. package/es/emoji/emoji-list/people.es.js.map +1 -1
  25. package/es/emoji/emoji-list.es.js.map +1 -1
  26. package/es/emoji/emoji-map.es.js.map +1 -1
  27. package/es/emoji/formats/emoji-blot.es.js.map +1 -1
  28. package/es/emoji/index.es.js.map +1 -1
  29. package/es/emoji/modules/emoji.es.js.map +1 -1
  30. package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
  31. package/es/emoji/utils.es.js.map +1 -1
  32. package/es/file/formats/file.es.js.map +1 -1
  33. package/es/file/index.es.js.map +1 -1
  34. package/es/file/modules/file-bar.es.js.map +1 -1
  35. package/es/fluent-editor.es.js +1 -1
  36. package/es/fluent-editor.es.js.map +1 -1
  37. package/es/global-link/constants.es.js.map +1 -1
  38. package/es/global-link/formats/customer-widget-link.es.js.map +1 -1
  39. package/es/global-link/formats/doc-link.es.js.map +1 -1
  40. package/es/global-link/formats/wiki-link.es.js.map +1 -1
  41. package/es/global-link/formats/work-item-link.es.js.map +1 -1
  42. package/es/global-link/index.es.js.map +1 -1
  43. package/es/global-link/utils/createTable.es.js.map +1 -1
  44. package/es/index.es.js +17 -1
  45. package/es/index.es.js.map +1 -1
  46. package/es/link/formats/link.es.js.map +1 -1
  47. package/es/link/index.es.js.map +1 -1
  48. package/es/link/modules/tooltip.es.js.map +1 -1
  49. package/es/mention/Mention.es.js.map +1 -1
  50. package/es/mention/MentionLink.es.js.map +1 -1
  51. package/es/mention/constants.es.js.map +1 -1
  52. package/es/quick-menu/index.es.js.map +1 -1
  53. package/es/screenshot/index.es.js.map +1 -1
  54. package/es/soft-break/index.es.js.map +1 -1
  55. package/es/strike/index.es.js.map +1 -1
  56. package/es/syntax/index.es.js.map +1 -1
  57. package/es/table/better-table.es.js.map +1 -1
  58. package/es/table/formats/header.es.js.map +1 -1
  59. package/es/table/formats/list.es.js.map +1 -1
  60. package/es/table/formats/table.es.js.map +1 -1
  61. package/es/table/modules/table-column-tool.es.js.map +1 -1
  62. package/es/table/modules/table-operation-menu.es.js.map +1 -1
  63. package/es/table/modules/table-scroll-bar.es.js.map +1 -1
  64. package/es/table/modules/table-selection.es.js.map +1 -1
  65. package/es/table/table-config.es.js.map +1 -1
  66. package/es/table/utils/index.es.js.map +1 -1
  67. package/es/table/utils/node-matchers.es.js.map +1 -1
  68. package/es/toolbar/better-picker.es.js.map +1 -1
  69. package/es/toolbar/index.es.js.map +1 -1
  70. package/es/utils/debounce.es.js.map +1 -1
  71. package/es/utils/method.es.js.map +1 -1
  72. package/es/video/index.es.js.map +1 -1
  73. package/lib/attributors/line-height.cjs.js.map +1 -1
  74. package/lib/config/base64-image.cjs.js.map +1 -1
  75. package/lib/config/editor.config.cjs.js.map +1 -1
  76. package/lib/config/editor.utils.cjs.js.map +1 -1
  77. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  78. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  79. package/lib/config/icons.config.cjs.js.map +1 -1
  80. package/lib/{config.cjs.js → config/index.cjs.js} +27 -21
  81. package/lib/config/index.cjs.js.map +1 -0
  82. package/lib/counter/index.cjs.js +5 -4
  83. package/lib/counter/index.cjs.js.map +1 -1
  84. package/lib/custom-clipboard.cjs.js.map +1 -1
  85. package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
  86. package/lib/custom-image/Options.cjs.js.map +1 -1
  87. package/lib/custom-image/actions/Action.cjs.js.map +1 -1
  88. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
  89. package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -1
  90. package/lib/custom-image/image.cjs.js.map +1 -1
  91. package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
  92. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
  93. package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -1
  94. package/lib/custom-uploader.cjs.js.map +1 -1
  95. package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
  96. package/lib/emoji/emoji-list.cjs.js.map +1 -1
  97. package/lib/emoji/emoji-map.cjs.js.map +1 -1
  98. package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
  99. package/lib/emoji/index.cjs.js.map +1 -1
  100. package/lib/emoji/modules/emoji.cjs.js.map +1 -1
  101. package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
  102. package/lib/emoji/utils.cjs.js.map +1 -1
  103. package/lib/file/formats/file.cjs.js.map +1 -1
  104. package/lib/file/index.cjs.js.map +1 -1
  105. package/lib/file/modules/file-bar.cjs.js.map +1 -1
  106. package/lib/fluent-editor.cjs.js +31 -31
  107. package/lib/fluent-editor.cjs.js.map +1 -1
  108. package/lib/global-link/constants.cjs.js.map +1 -1
  109. package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -1
  110. package/lib/global-link/formats/doc-link.cjs.js.map +1 -1
  111. package/lib/global-link/formats/wiki-link.cjs.js.map +1 -1
  112. package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
  113. package/lib/global-link/index.cjs.js.map +1 -1
  114. package/lib/global-link/utils/createTable.cjs.js.map +1 -1
  115. package/lib/index.cjs.js +16 -0
  116. package/lib/index.cjs.js.map +1 -1
  117. package/lib/link/formats/link.cjs.js.map +1 -1
  118. package/lib/link/index.cjs.js.map +1 -1
  119. package/lib/link/modules/tooltip.cjs.js.map +1 -1
  120. package/lib/mention/Mention.cjs.js.map +1 -1
  121. package/lib/mention/MentionLink.cjs.js.map +1 -1
  122. package/lib/mention/constants.cjs.js.map +1 -1
  123. package/lib/quick-menu/index.cjs.js.map +1 -1
  124. package/lib/screenshot/index.cjs.js.map +1 -1
  125. package/lib/soft-break/index.cjs.js.map +1 -1
  126. package/lib/strike/index.cjs.js.map +1 -1
  127. package/lib/syntax/index.cjs.js.map +1 -1
  128. package/lib/table/better-table.cjs.js.map +1 -1
  129. package/lib/table/formats/header.cjs.js.map +1 -1
  130. package/lib/table/formats/list.cjs.js.map +1 -1
  131. package/lib/table/formats/table.cjs.js.map +1 -1
  132. package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
  133. package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
  134. package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
  135. package/lib/table/modules/table-selection.cjs.js.map +1 -1
  136. package/lib/table/table-config.cjs.js.map +1 -1
  137. package/lib/table/utils/index.cjs.js.map +1 -1
  138. package/lib/table/utils/node-matchers.cjs.js.map +1 -1
  139. package/lib/toolbar/better-picker.cjs.js.map +1 -1
  140. package/lib/toolbar/index.cjs.js.map +1 -1
  141. package/lib/utils/debounce.cjs.js.map +1 -1
  142. package/lib/utils/method.cjs.js.map +1 -1
  143. package/lib/video/index.cjs.js.map +1 -1
  144. package/package.json +52 -61
  145. package/{theme/style.css → style.css} +74 -17
  146. package/es/config.es.js.map +0 -1
  147. package/lib/config.cjs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { isNullOrUndefined } from '../config/editor.utils'\nimport './better-picker'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst levels = ['error', 'warn', 'log', 'info'] as const\nlet level = 'warn' as const\n\nfunction debuglogger(method: typeof levels[number], ...args) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args) // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debuglogger.bind(console, method, ns)\n return logger\n }, {} as Record<typeof levels[number], (...args: any) => void>)\n}\n\nnamespace.level = (newLevel) => {\n level = newLevel\n}\ndebuglogger.level = namespace.level\nconst debug = namespace('quill:toolbar')\n\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\n\nclass BetterToolbar extends Toolbar {\n update(range) {\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\n this.controls.forEach((pair) => {\n const [format, input] = pair\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n let option\n if (isNullOrUndefined(range)) {\n option = null\n }\n else if (isNullOrUndefined(formats[format])) {\n option = select.querySelector('option[selected]')\n }\n else if (!Array.isArray(formats[format])) {\n let value = format === 'header' ? formats[format].value : formats[format]\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"')\n }\n option = select.querySelector(`option[value=\"${value}\"]`)\n }\n if (isNullOrUndefined(option)) {\n select.value = '' // TODO make configurable?\n select.selectedIndex = -1\n }\n else {\n option.selected = true\n }\n }\n else if (isNullOrUndefined(range)) {\n input.classList.remove('ql-active')\n }\n else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n let isActive\n = formats[format] === input.getAttribute('value')\n || (!isNullOrUndefined(formats[format])\n && (formats[format].value === input.getAttribute('value')\n || formats[format].toString() === input.getAttribute('value')))\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\n\n if (!isActive) {\n const checkFormat = formats[format]\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\n isActive = input.getAttribute('value') === 'check'\n }\n }\n\n if (isActive) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n else {\n if (!isNullOrUndefined(formats[format])) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n })\n }\n\n attach(input: HTMLElement) {\n let format = Array.from(input.classList).find((className) => {\n return className.indexOf('ql-') === 0\n })\n if (!format) return\n format = format.slice('ql-'.length)\n\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button')\n }\n\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input)\n return\n }\n\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\n input.addEventListener(eventName, (e) => {\n let value: boolean | string\n\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n if (select.selectedIndex < 0) return\n const selected = select.options[select.selectedIndex]\n\n if (selected.hasAttribute('selected')) {\n value = false\n }\n else {\n value = selected.value || false\n }\n }\n else {\n const button = input as HTMLButtonElement\n if (button.classList.contains('ql-active')) {\n value = false\n }\n else {\n value = button.value || !button.hasAttribute('value')\n }\n e.preventDefault()\n }\n\n this.quill.focus({ preventScroll: format === 'screenshot' })\n const [range] = this.quill.selection.getRange()\n if (this.handlers[format] != null) {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.handlers[format].call(this, value)\n }\n else if (\n // @ts-ignore\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\n ) {\n value = prompt(`Enter ${format}`)\n if (!value) return\n this.quill.updateContents(\n new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ [format]: value }),\n Quill.sources.USER,\n )\n }\n else {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.quill.format(format, value, Quill.sources.USER)\n }\n\n this.update(range)\n })\n this.controls.push([format, input])\n }\n}\n\nexport default BetterToolbar\n"],"names":["isNullOrUndefined"],"mappings":";;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,MAAM,SAAS,CAAC,SAAS,QAAQ,OAAO,MAAM;AAC9C,IAAI,QAAQ;AAEZ,SAAS,YAAY,WAAkC,MAAM;AAC3D,MAAI,OAAO,QAAQ,MAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI;AAAA,EACzB;AACF;AAEA,SAAS,UAAU,IAAI;AACrB,SAAO,OAAO,OAAO,CAAC,QAAQ,WAAW;AACvC,WAAO,MAAM,IAAI,YAAY,KAAK,SAAS,QAAQ,EAAE;AAC9C,WAAA;AAAA,EACT,GAAG,CAA2D,CAAA;AAChE;AAEA,UAAU,QAAQ,CAAC,aAAa;AACtB,UAAA;AACV;AACA,YAAY,QAAQ,UAAU;AAC9B,MAAM,QAAQ,UAAU,eAAe;AAEvC,MAAM,UAAU,MAAM,OAAO,iBAAiB;AAG9C,MAAM,sBAAsB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACN,UAAA,UAAUA,+BAAkB,KAAK,IAAI,CAAA,IAAK,KAAK,MAAM,UAAU,KAAK;AACrE,SAAA,SAAS,QAAQ,CAAC,SAAS;AACxB,YAAA,CAAC,QAAQ,KAAK,IAAI;AACpB,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA;AACA,YAAAA,aAAAA,kBAAkB,KAAK,GAAG;AACnB,mBAAA;AAAA,QAEF,WAAAA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AAClC,mBAAA,OAAO,cAAc,kBAAkB;AAAA,QAAA,WAEzC,CAAC,MAAM,QAAQ,QAAQ,MAAM,CAAC,GAAG;AACpC,cAAA,QAAQ,WAAW,WAAW,QAAQ,MAAM,EAAE,QAAQ,QAAQ,MAAM;AACpE,cAAA,OAAO,UAAU,UAAU;AACrB,oBAAA,MAAM,QAAQ,MAAM,KAAK;AAAA,UACnC;AACA,mBAAS,OAAO,cAAc,iBAAiB,KAAK,IAAI;AAAA,QAC1D;AACI,YAAAA,aAAAA,kBAAkB,MAAM,GAAG;AAC7B,iBAAO,QAAQ;AACf,iBAAO,gBAAgB;AAAA,QAAA,OAEpB;AACH,iBAAO,WAAW;AAAA,QACpB;AAAA,MAAA,WAEOA,aAAAA,kBAAkB,KAAK,GAAG;AAC3B,cAAA,UAAU,OAAO,WAAW;AAAA,MAE3B,WAAA,MAAM,aAAa,OAAO,GAAG;AAGpC,YAAI,WACA,QAAQ,MAAM,MAAM,MAAM,aAAa,OAAO,KAC5C,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,MAChC,QAAQ,MAAM,EAAE,UAAU,MAAM,aAAa,OAAO,KACnD,QAAQ,MAAM,EAAE,SAAS,MAAM,MAAM,aAAa,OAAO,MACxDA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO;AAE3E,YAAI,CAAC,UAAU;AACP,gBAAA,cAAc,QAAQ,MAAM;AAC9B,cAAA,gBAAgB,aAAa,gBAAgB,aAAa;AACjD,uBAAA,MAAM,aAAa,OAAO,MAAM;AAAA,UAC7C;AAAA,QACF;AAEA,YAAI,UAAU;AACN,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QACpC;AAAA,MAAA,OAEG;AACH,YAAI,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AACjC,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QACpC;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,OAAO,OAAoB;AACrB,QAAA,SAAS,MAAM,KAAK,MAAM,SAAS,EAAE,KAAK,CAAC,cAAc;AACpD,aAAA,UAAU,QAAQ,KAAK,MAAM;AAAA,IAAA,CACrC;AACD,QAAI,CAAC,OAAQ;AACJ,aAAA,OAAO,MAAM,MAAM,MAAM;AAE9B,QAAA,MAAM,YAAY,UAAU;AACxB,YAAA,aAAa,QAAQ,QAAQ;AAAA,IACrC;AAEI,QAAA,KAAK,SAAS,MAAM,KAAK,QAAQ,KAAK,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACtE,YAAA,KAAK,4CAA4C,QAAQ,KAAK;AACpE;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,YAAY,WAAW,WAAW;AACpD,UAAA,iBAAiB,WAAW,CAAC,MAAM;AACnC,UAAA;AAEA,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA,OAAO,gBAAgB,EAAG;AAC9B,cAAM,WAAW,OAAO,QAAQ,OAAO,aAAa;AAEhD,YAAA,SAAS,aAAa,UAAU,GAAG;AAC7B,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,SAAS,SAAS;AAAA,QAC5B;AAAA,MAAA,OAEG;AACH,cAAM,SAAS;AACf,YAAI,OAAO,UAAU,SAAS,WAAW,GAAG;AAClC,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,OAAO,SAAS,CAAC,OAAO,aAAa,OAAO;AAAA,QACtD;AACA,UAAE,eAAe;AAAA,MACnB;AAEA,WAAK,MAAM,MAAM,EAAE,eAAe,WAAW,cAAc;AAC3D,YAAM,CAAC,KAAK,IAAI,KAAK,MAAM,UAAU;AACrC,UAAI,KAAK,SAAS,MAAM,KAAK,MAAM;AAEjC,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QACF;AACA,aAAK,SAAS,MAAM,EAAE,KAAK,MAAM,KAAK;AAAA,MAAA;AAAA;AAAA,QAItC,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,qBAAqB,UAAU;AAAA,QAC/D;AACQ,gBAAA,OAAO,SAAS,MAAM,EAAE;AAChC,YAAI,CAAC,MAAO;AACZ,aAAK,MAAM;AAAA,UACT,IAAI,MAAM,EACP,OAAO,MAAM,KAAK,EAClB,OAAO,MAAM,MAAM,EACnB,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO;AAAA,UAC7B,MAAM,QAAQ;AAAA,QAAA;AAAA,MAChB,OAEG;AAEH,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QACF;AACA,aAAK,MAAM,OAAO,QAAQ,OAAO,MAAM,QAAQ,IAAI;AAAA,MACrD;AAEA,WAAK,OAAO,KAAK;AAAA,IAAA,CAClB;AACD,SAAK,SAAS,KAAK,CAAC,QAAQ,KAAK,CAAC;AAAA,EACpC;AACF;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nimport './better-picker'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject, root } from './method'\n\nexport function debounce(func, wait, options = undefined) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime\n\n let lastInvokeTime = 0\n let leading = false\n let maxing = false\n let trailing = true\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function')\n }\n wait = +wait || 0\n if (isObject(options)) {\n leading = !!options.leading\n maxing = 'maxWait' in options\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\n trailing = 'trailing' in options ? !!options.trailing : trailing\n }\n\n function invokeFunc(time) {\n const args = lastArgs\n const thisArg = lastThis\n\n lastArgs = lastThis = undefined\n lastInvokeTime = time\n result = func.apply(thisArg, args)\n return result\n }\n\n function startTimer(pendingFunc, wait) {\n if (useRAF) {\n root.cancelAnimationFrame(timerId)\n return root.requestAnimationFrame(pendingFunc)\n }\n return setTimeout(pendingFunc, wait)\n }\n\n function cancelTimer(id) {\n if (useRAF) {\n return root.cancelAnimationFrame(id)\n }\n clearTimeout(id)\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait)\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n const timeWaiting = wait - timeSinceLastCall\n\n return maxing\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\n }\n\n function timerExpired() {\n const time = Date.now()\n if (shouldInvoke(time)) {\n return trailingEdge(time)\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time))\n }\n\n function trailingEdge(time) {\n timerId = undefined\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId)\n }\n lastInvokeTime = 0\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function pending() {\n return timerId !== undefined\n }\n\n function debounced(...args) {\n const time = Date.now()\n const isInvoking = shouldInvoke(time)\n\n lastArgs = args\n lastThis = this\n lastCallTime = time\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait)\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel\n debounced.flush = flush\n debounced.pending = pending\n return debounced\n}\n"],"names":["root","isObject","wait"],"mappings":"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"}
1
+ {"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject, root } from './method'\r\n\r\nexport function debounce(func, wait, options = undefined) {\r\n let lastArgs,\r\n lastThis,\r\n maxWait,\r\n result,\r\n timerId,\r\n lastCallTime\r\n\r\n let lastInvokeTime = 0\r\n let leading = false\r\n let maxing = false\r\n let trailing = true\r\n\r\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\r\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\r\n\r\n if (typeof func !== 'function') {\r\n throw new TypeError('Expected a function')\r\n }\r\n wait = +wait || 0\r\n if (isObject(options)) {\r\n leading = !!options.leading\r\n maxing = 'maxWait' in options\r\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\r\n trailing = 'trailing' in options ? !!options.trailing : trailing\r\n }\r\n\r\n function invokeFunc(time) {\r\n const args = lastArgs\r\n const thisArg = lastThis\r\n\r\n lastArgs = lastThis = undefined\r\n lastInvokeTime = time\r\n result = func.apply(thisArg, args)\r\n return result\r\n }\r\n\r\n function startTimer(pendingFunc, wait) {\r\n if (useRAF) {\r\n root.cancelAnimationFrame(timerId)\r\n return root.requestAnimationFrame(pendingFunc)\r\n }\r\n return setTimeout(pendingFunc, wait)\r\n }\r\n\r\n function cancelTimer(id) {\r\n if (useRAF) {\r\n return root.cancelAnimationFrame(id)\r\n }\r\n clearTimeout(id)\r\n }\r\n\r\n function leadingEdge(time) {\r\n // Reset any `maxWait` timer.\r\n lastInvokeTime = time\r\n // Start the timer for the trailing edge.\r\n timerId = startTimer(timerExpired, wait)\r\n // Invoke the leading edge.\r\n return leading ? invokeFunc(time) : result\r\n }\r\n\r\n function remainingWait(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n const timeWaiting = wait - timeSinceLastCall\r\n\r\n return maxing\r\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\r\n : timeWaiting\r\n }\r\n\r\n function shouldInvoke(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n\r\n // Either this is the first call, activity has stopped and we're at the\r\n // trailing edge, the system time has gone backwards and we're treating\r\n // it as the trailing edge, or we've hit the `maxWait` limit.\r\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\r\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\r\n }\r\n\r\n function timerExpired() {\r\n const time = Date.now()\r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time)\r\n }\r\n // Restart the timer.\r\n timerId = startTimer(timerExpired, remainingWait(time))\r\n }\r\n\r\n function trailingEdge(time) {\r\n timerId = undefined\r\n\r\n // Only invoke if we have `lastArgs` which means `func` has been\r\n // debounced at least once.\r\n if (trailing && lastArgs) {\r\n return invokeFunc(time)\r\n }\r\n lastArgs = lastThis = undefined\r\n return result\r\n }\r\n\r\n function cancel() {\r\n if (timerId !== undefined) {\r\n cancelTimer(timerId)\r\n }\r\n lastInvokeTime = 0\r\n lastArgs = lastCallTime = lastThis = timerId = undefined\r\n }\r\n\r\n function flush() {\r\n return timerId === undefined ? result : trailingEdge(Date.now())\r\n }\r\n\r\n function pending() {\r\n return timerId !== undefined\r\n }\r\n\r\n function debounced(...args) {\r\n const time = Date.now()\r\n const isInvoking = shouldInvoke(time)\r\n\r\n lastArgs = args\r\n lastThis = this\r\n lastCallTime = time\r\n\r\n if (isInvoking) {\r\n if (timerId === undefined) {\r\n return leadingEdge(lastCallTime)\r\n }\r\n if (maxing) {\r\n // Handle invocations in a tight loop.\r\n timerId = startTimer(timerExpired, wait)\r\n return invokeFunc(lastCallTime)\r\n }\r\n }\r\n if (timerId === undefined) {\r\n timerId = startTimer(timerExpired, wait)\r\n }\r\n return result\r\n }\r\n debounced.cancel = cancel\r\n debounced.flush = flush\r\n debounced.pending = pending\r\n return debounced\r\n}\r\n"],"names":["root","isObject","wait"],"mappings":";;;AAEO,SAAS,SAAS,MAAM,MAAM,UAAU,QAAW;AACxD,MAAI,UACF,UACA,SACA,QACA,SACA;AAEF,MAAI,iBAAiB;AACrB,MAAI,UAAU;AACd,MAAI,SAAS;AACb,MAAI,WAAW;AAGf,QAAM,SAAU,CAAC,QAAQ,SAAS,KAAK,OAAOA,YAAK,0BAA0B;AAEzE,MAAA,OAAO,SAAS,YAAY;AACxB,UAAA,IAAI,UAAU,qBAAqB;AAAA,EAC3C;AACA,SAAO,CAAC,QAAQ;AACZ,MAAAC,OAAAA,SAAS,OAAO,GAAG;AACX,cAAA,CAAC,CAAC,QAAQ;AACpB,aAAS,aAAa;AACZ,cAAA,SAAS,KAAK,IAAI,CAAC,QAAQ,WAAW,GAAG,IAAI,IAAI;AAC3D,eAAW,cAAc,UAAU,CAAC,CAAC,QAAQ,WAAW;AAAA,EAC1D;AAEA,WAAS,WAAW,MAAM;AACxB,UAAM,OAAO;AACb,UAAM,UAAU;AAEhB,eAAW,WAAW;AACL,qBAAA;AACR,aAAA,KAAK,MAAM,SAAS,IAAI;AAC1B,WAAA;AAAA,EACT;AAES,WAAA,WAAW,aAAaC,OAAM;AACrC,QAAI,QAAQ;AACVF,kBAAK,qBAAqB,OAAO;AAC1B,aAAAA,OAAA,KAAK,sBAAsB,WAAW;AAAA,IAC/C;AACO,WAAA,WAAW,aAAaE,KAAI;AAAA,EACrC;AAEA,WAAS,YAAY,IAAI;AACvB,QAAI,QAAQ;AACH,aAAAF,OAAA,KAAK,qBAAqB,EAAE;AAAA,IACrC;AACA,iBAAa,EAAE;AAAA,EACjB;AAEA,WAAS,YAAY,MAAM;AAER,qBAAA;AAEP,cAAA,WAAW,cAAc,IAAI;AAEhC,WAAA,UAAU,WAAW,IAAI,IAAI;AAAA,EACtC;AAEA,WAAS,cAAc,MAAM;AAC3B,UAAM,oBAAoB,OAAO;AACjC,UAAM,sBAAsB,OAAO;AACnC,UAAM,cAAc,OAAO;AAE3B,WAAO,SACH,KAAK,IAAI,aAAa,UAAU,mBAAmB,IACnD;AAAA,EACN;AAEA,WAAS,aAAa,MAAM;AAC1B,UAAM,oBAAoB,OAAO;AACjC,UAAM,sBAAsB,OAAO;AAKnC,WAAQ,iBAAiB,UAAc,qBAAqB,QACtD,oBAAoB,KAAO,UAAU,uBAAuB;AAAA,EACpE;AAEA,WAAS,eAAe;AAChB,UAAA,OAAO,KAAK;AACd,QAAA,aAAa,IAAI,GAAG;AACtB,aAAO,aAAa,IAAI;AAAA,IAC1B;AAEA,cAAU,WAAW,cAAc,cAAc,IAAI,CAAC;AAAA,EACxD;AAEA,WAAS,aAAa,MAAM;AAChB,cAAA;AAIV,QAAI,YAAY,UAAU;AACxB,aAAO,WAAW,IAAI;AAAA,IACxB;AACA,eAAW,WAAW;AACf,WAAA;AAAA,EACT;AAEA,WAAS,SAAS;AAChB,QAAI,YAAY,QAAW;AACzB,kBAAY,OAAO;AAAA,IACrB;AACiB,qBAAA;AACN,eAAA,eAAe,WAAW,UAAU;AAAA,EACjD;AAEA,WAAS,QAAQ;AACf,WAAO,YAAY,SAAY,SAAS,aAAa,KAAK,KAAK;AAAA,EACjE;AAEA,WAAS,UAAU;AACjB,WAAO,YAAY;AAAA,EACrB;AAEA,WAAS,aAAa,MAAM;AACpB,UAAA,OAAO,KAAK;AACZ,UAAA,aAAa,aAAa,IAAI;AAEzB,eAAA;AACA,eAAA;AACI,mBAAA;AAEf,QAAI,YAAY;AACd,UAAI,YAAY,QAAW;AACzB,eAAO,YAAY,YAAY;AAAA,MACjC;AACA,UAAI,QAAQ;AAEA,kBAAA,WAAW,cAAc,IAAI;AACvC,eAAO,WAAW,YAAY;AAAA,MAChC;AAAA,IACF;AACA,QAAI,YAAY,QAAW;AACf,gBAAA,WAAW,cAAc,IAAI;AAAA,IACzC;AACO,WAAA;AAAA,EACT;AACA,YAAU,SAAS;AACnB,YAAU,QAAQ;AAClB,YAAU,UAAU;AACb,SAAA;AACT;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"method.cjs.js","sources":["../../../src/utils/method.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nconst freeGlobal\n = typeof global === 'object'\n && global !== null\n && global.Object === Object\n && global\n\n/** Detect free variable `globalThis` */\nconst freeGlobalThis\n = typeof globalThis === 'object'\n && globalThis !== null\n && globalThis.Object == Object\n && globalThis\n\n/** Detect free variable `self`. */\nconst freeSelf\n = typeof self === 'object' && self !== null && self.Object === Object && self\n\n/** Used as a reference to the global object. */\nexport const root\n = freeGlobalThis || freeGlobal || freeSelf || new Function('return this')()\n\nexport function isObject(value) {\n const type = typeof value\n return value != null && (type === 'object' || type === 'function')\n}\n\nexport function compareArray(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false\n }\n }\n return true\n}\n\nexport function compareObject(object1, object2) {\n const o1keys = Object.keys(object1)\n const o2keys = Object.keys(object2)\n if (o2keys.length !== o1keys.length) return false\n for (let i = 0; i <= o1keys.length - 1; i++) {\n const key = o1keys[i]\n if (!o2keys.includes(key)) return false\n if (!compare(object2[key], object1[key])) return false\n }\n return true\n}\n\nexport function compare(value, other) {\n if (value === other) {\n return true\n }\n if (Array.isArray(value) && Array.isArray(other)) {\n return compareArray(value, other)\n }\n if (value instanceof Function || other instanceof Function) {\n return false\n }\n if (value instanceof Object && other instanceof Object) {\n return compareObject(value, other)\n }\n return false\n}\n\nexport function unshiftString(str: string, targetLength: number, addString: string): string {\n targetLength = targetLength > 0 ? targetLength : 0\n addString = String((typeof addString !== 'undefined' && typeof addString !== 'object') ? addString : ' ')\n str = (str === undefined || str === null) ? '' : String(str)\n if (str.length >= targetLength) {\n return String(str)\n }\n else {\n targetLength = targetLength - str.length\n if (targetLength > addString.length) {\n addString += addString.repeat(targetLength / addString.length)\n }\n return addString.slice(0, targetLength) + String(str)\n }\n}\n"],"names":[],"mappings":";;AACA,MAAM,aACF,OAAO,WAAW,YACjB,WAAW,QACX,OAAO,WAAW,UAClB;AAGL,MAAM,iBACF,OAAO,eAAe,YACrB,eAAe,QACf,WAAW,UAAU,UACrB;AAGL,MAAM,WACF,OAAO,SAAS,YAAY,SAAS,QAAQ,KAAK,WAAW,UAAU;AAGpE,MAAM,OACT,kBAAkB,cAAc,YAAY,IAAI,SAAS,aAAa,EAAE;AAErE,SAAS,SAAS,OAAO;AAC9B,QAAM,OAAO,OAAO;AACpB,SAAO,SAAS,SAAS,SAAS,YAAY,SAAS;AACzD;AAEgB,SAAA,aAAa,MAAM,MAAM;AACnC,MAAA,KAAK,WAAW,KAAK,QAAQ;AACxB,WAAA;AAAA,EACT;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;AAChB,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,SAAS,SAAS;AACxC,QAAA,SAAS,OAAO,KAAK,OAAO;AAC5B,QAAA,SAAS,OAAO,KAAK,OAAO;AAClC,MAAI,OAAO,WAAW,OAAO,OAAe,QAAA;AAC5C,WAAS,IAAI,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK;AACrC,UAAA,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,OAAO,SAAS,GAAG,EAAU,QAAA;AAC9B,QAAA,CAAC,QAAQ,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAU,QAAA;AAAA,EACnD;AACO,SAAA;AACT;AAEgB,SAAA,QAAQ,OAAO,OAAO;AACpC,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,KAAK,GAAG;AACzC,WAAA,aAAa,OAAO,KAAK;AAAA,EAClC;AACI,MAAA,iBAAiB,YAAY,iBAAiB,UAAU;AACnD,WAAA;AAAA,EACT;AACI,MAAA,iBAAiB,UAAU,iBAAiB,QAAQ;AAC/C,WAAA,cAAc,OAAO,KAAK;AAAA,EACnC;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,KAAa,cAAsB,WAA2B;AAC3E,iBAAA,eAAe,IAAI,eAAe;AACrC,cAAA,OAAQ,OAAO,cAAc,eAAe,OAAO,cAAc,WAAY,YAAY,GAAG;AACxG,QAAO,QAAQ,UAAa,QAAQ,OAAQ,KAAK,OAAO,GAAG;AACvD,MAAA,IAAI,UAAU,cAAc;AAC9B,WAAO,OAAO,GAAG;AAAA,EAAA,OAEd;AACH,mBAAe,eAAe,IAAI;AAC9B,QAAA,eAAe,UAAU,QAAQ;AACnC,mBAAa,UAAU,OAAO,eAAe,UAAU,MAAM;AAAA,IAC/D;AACA,WAAO,UAAU,MAAM,GAAG,YAAY,IAAI,OAAO,GAAG;AAAA,EACtD;AACF;;;;;;;"}
1
+ {"version":3,"file":"method.cjs.js","sources":["../../../src/utils/method.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\r\nconst freeGlobal\r\n = typeof global === 'object'\r\n && global !== null\r\n && global.Object === Object\r\n && global\r\n\r\n/** Detect free variable `globalThis` */\r\nconst freeGlobalThis\r\n = typeof globalThis === 'object'\r\n && globalThis !== null\r\n && globalThis.Object == Object\r\n && globalThis\r\n\r\n/** Detect free variable `self`. */\r\nconst freeSelf\r\n = typeof self === 'object' && self !== null && self.Object === Object && self\r\n\r\n/** Used as a reference to the global object. */\r\nexport const root\r\n = freeGlobalThis || freeGlobal || freeSelf || new Function('return this')()\r\n\r\nexport function isObject(value) {\r\n const type = typeof value\r\n return value != null && (type === 'object' || type === 'function')\r\n}\r\n\r\nexport function compareArray(arr1, arr2) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\nexport function compareObject(object1, object2) {\r\n const o1keys = Object.keys(object1)\r\n const o2keys = Object.keys(object2)\r\n if (o2keys.length !== o1keys.length) return false\r\n for (let i = 0; i <= o1keys.length - 1; i++) {\r\n const key = o1keys[i]\r\n if (!o2keys.includes(key)) return false\r\n if (!compare(object2[key], object1[key])) return false\r\n }\r\n return true\r\n}\r\n\r\nexport function compare(value, other) {\r\n if (value === other) {\r\n return true\r\n }\r\n if (Array.isArray(value) && Array.isArray(other)) {\r\n return compareArray(value, other)\r\n }\r\n if (value instanceof Function || other instanceof Function) {\r\n return false\r\n }\r\n if (value instanceof Object && other instanceof Object) {\r\n return compareObject(value, other)\r\n }\r\n return false\r\n}\r\n\r\nexport function unshiftString(str: string, targetLength: number, addString: string): string {\r\n targetLength = targetLength > 0 ? targetLength : 0\r\n addString = String((typeof addString !== 'undefined' && typeof addString !== 'object') ? addString : ' ')\r\n str = (str === undefined || str === null) ? '' : String(str)\r\n if (str.length >= targetLength) {\r\n return String(str)\r\n }\r\n else {\r\n targetLength = targetLength - str.length\r\n if (targetLength > addString.length) {\r\n addString += addString.repeat(targetLength / addString.length)\r\n }\r\n return addString.slice(0, targetLength) + String(str)\r\n }\r\n}\r\n"],"names":[],"mappings":";;AACA,MAAM,aACF,OAAO,WAAW,YACjB,WAAW,QACX,OAAO,WAAW,UAClB;AAGL,MAAM,iBACF,OAAO,eAAe,YACrB,eAAe,QACf,WAAW,UAAU,UACrB;AAGL,MAAM,WACF,OAAO,SAAS,YAAY,SAAS,QAAQ,KAAK,WAAW,UAAU;AAGpE,MAAM,OACT,kBAAkB,cAAc,YAAY,IAAI,SAAS,aAAa,EAAE;AAErE,SAAS,SAAS,OAAO;AAC9B,QAAM,OAAO,OAAO;AACpB,SAAO,SAAS,SAAS,SAAS,YAAY,SAAS;AACzD;AAEgB,SAAA,aAAa,MAAM,MAAM;AACnC,MAAA,KAAK,WAAW,KAAK,QAAQ;AACxB,WAAA;AAAA,EACT;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;AAChB,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,SAAS,SAAS;AACxC,QAAA,SAAS,OAAO,KAAK,OAAO;AAC5B,QAAA,SAAS,OAAO,KAAK,OAAO;AAClC,MAAI,OAAO,WAAW,OAAO,OAAe,QAAA;AAC5C,WAAS,IAAI,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK;AACrC,UAAA,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,OAAO,SAAS,GAAG,EAAU,QAAA;AAC9B,QAAA,CAAC,QAAQ,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAU,QAAA;AAAA,EACnD;AACO,SAAA;AACT;AAEgB,SAAA,QAAQ,OAAO,OAAO;AACpC,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,KAAK,GAAG;AACzC,WAAA,aAAa,OAAO,KAAK;AAAA,EAClC;AACI,MAAA,iBAAiB,YAAY,iBAAiB,UAAU;AACnD,WAAA;AAAA,EACT;AACI,MAAA,iBAAiB,UAAU,iBAAiB,QAAQ;AAC/C,WAAA,cAAc,OAAO,KAAK;AAAA,EACnC;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,KAAa,cAAsB,WAA2B;AAC3E,iBAAA,eAAe,IAAI,eAAe;AACrC,cAAA,OAAQ,OAAO,cAAc,eAAe,OAAO,cAAc,WAAY,YAAY,GAAG;AACxG,QAAO,QAAQ,UAAa,QAAQ,OAAQ,KAAK,OAAO,GAAG;AACvD,MAAA,IAAI,UAAU,cAAc;AAC9B,WAAO,OAAO,GAAG;AAAA,EAAA,OAEd;AACH,mBAAe,eAAe,IAAI;AAC9B,QAAA,eAAe,UAAU,QAAQ;AACnC,mBAAa,UAAU,OAAO,eAAe,UAAU,MAAM;AAAA,IAC/D;AACA,WAAO,UAAU,MAAM,GAAG,YAAY,IAAI,OAAO,GAAG;AAAA,EACtD;AACF;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../src/video/index.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport Quill from 'quill'\nimport { sanitize } from '../config/editor.utils'\n\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\n\nclass Video extends BlockEmbed {\n static blotName: string\n static tagName: string\n static SANITIZED_URL: string\n static PROTOCOL_WHITELIST: string[]\n static className: string\n statics: any\n domNode: any\n\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\n }\n\n static create(value) {\n const node = super.create(value) as HTMLElement\n node.setAttribute('contenteditable', 'false')\n node.setAttribute('controls', 'controls')\n VIDEO_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n switch (key) {\n case 'src':{ const src = Video.sanitize(value[key])\n node.setAttribute(key, src)\n break\n }\n case 'title': {\n node.setAttribute(key, value[key])\n break\n }\n default: {\n node.dataset[key] = value[key]\n }\n }\n }\n })\n return node\n }\n\n static value(domNode) {\n const formats: any = {}\n VIDEO_ATTRIBUTES.forEach((key) => {\n const value = domNode.getAttribute(key) || domNode.dataset[key]\n if (value) {\n formats[key] = value\n }\n })\n return formats\n }\n}\nVideo.blotName = 'video'\nVideo.tagName = 'VIDEO'\nVideo.SANITIZED_URL = 'about:blank'\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\nVideo.className = 'ql-video-item'\n\nexport default Video\n"],"names":["sanitize"],"mappings":";;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAOA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UACF;AAAA,UACA,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAA;AACJ,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AACF;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../src/video/index.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../config/editor.utils'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\r\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\r\n\r\nclass Video extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n statics: any\r\n domNode: any\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n static create(value) {\r\n const node = super.create(value) as HTMLElement\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('controls', 'controls')\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n switch (key) {\r\n case 'src':{ const src = Video.sanitize(value[key])\r\n node.setAttribute(key, src)\r\n break\r\n }\r\n case 'title': {\r\n node.setAttribute(key, value[key])\r\n break\r\n }\r\n default: {\r\n node.dataset[key] = value[key]\r\n }\r\n }\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n const formats: any = {}\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n const value = domNode.getAttribute(key) || domNode.dataset[key]\r\n if (value) {\r\n formats[key] = value\r\n }\r\n })\r\n return formats\r\n }\r\n}\r\nVideo.blotName = 'video'\r\nVideo.tagName = 'VIDEO'\r\nVideo.SANITIZED_URL = 'about:blank'\r\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\r\nVideo.className = 'ql-video-item'\r\n\r\nexport default Video\r\n"],"names":["sanitize"],"mappings":";;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAOA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UACF;AAAA,UACA,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAA;AACJ,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AACF;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;;"}
package/package.json CHANGED
@@ -1,61 +1,52 @@
1
- {
2
- "name": "@opentiny/fluent-editor",
3
- "version": "3.20.1",
4
- "description": "A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.",
5
- "author": "OpenTiny Team",
6
- "license": "MIT",
7
- "homepage": "https://opentiny.github.io/fluent-editor/",
8
- "repository": {
9
- "type": "git",
10
- "url": "git@github.com:opentiny/fluent-editor.git"
11
- },
12
- "bugs": {
13
- "url": "https://github.com/opentiny/fluent-editor/issues"
14
- },
15
- "keywords": [
16
- "editor",
17
- "rich-text-editor",
18
- "rich-text",
19
- "wysiwyg",
20
- "wysiwyg-editor",
21
- "quill",
22
- "opentiny",
23
- "fluent-editor"
24
- ],
25
- "exports": {
26
- ".": {
27
- "import": "./es/index.es.js",
28
- "require": "./lib/index.cjs.js"
29
- },
30
- "./style.css": "./theme/style.css"
31
- },
32
- "main": "lib/index.cjs.js",
33
- "module": "es/index.es.js",
34
- "scripts": {
35
- "start": "vite build && vite",
36
- "dev": "vite",
37
- "build": "vite build && pnpm build:theme && node scripts/pre-release.js",
38
- "build:theme": "vite build --config vite.config.theme.ts",
39
- "test": "jest"
40
- },
41
- "peerDependencies": {
42
- "quill": "^2.0.0"
43
- },
44
- "dependencies": {
45
- "lodash-es": "^4.17.15"
46
- },
47
- "devDependencies": {
48
- "@types/jest": "^26.0.23",
49
- "commander": "^6.2.0",
50
- "glob": "^11.0.0",
51
- "highlight.js": "^10.2.0",
52
- "html2canvas": "^1.4.1",
53
- "jest": "^26.6.3",
54
- "sass": "^1.47.0",
55
- "shelljs": "^0.8.4",
56
- "ts-jest": "^26.5.6",
57
- "ts-node": "^9.1.1",
58
- "typescript": "^4.9.5",
59
- "vite": "^5.0.0"
60
- }
61
- }
1
+ {
2
+ "name": "@opentiny/fluent-editor",
3
+ "version": "3.20.2-alpha.0",
4
+ "description": "A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.",
5
+ "author": "OpenTiny Team",
6
+ "license": "MIT",
7
+ "homepage": "https://opentiny.github.io/fluent-editor/",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git@github.com:opentiny/fluent-editor.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/opentiny/fluent-editor/issues"
14
+ },
15
+ "keywords": [
16
+ "editor",
17
+ "rich-text-editor",
18
+ "rich-text",
19
+ "wysiwyg",
20
+ "wysiwyg-editor",
21
+ "quill",
22
+ "opentiny",
23
+ "fluent-editor"
24
+ ],
25
+ "main": "lib/index.cjs.js",
26
+ "module": "es/index.es.js",
27
+ "scripts": {
28
+ "start": "vite build && vite",
29
+ "dev": "vite",
30
+ "build": "pnpm build:theme && vite build && node scripts/pre-release.js",
31
+ "build:theme": "vite build --config vite.config.theme.ts",
32
+ "test": "jest"
33
+ },
34
+ "dependencies": {
35
+ "lodash-es": "^4.17.15",
36
+ "quill": "^2.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/jest": "^26.0.23",
40
+ "commander": "^6.2.0",
41
+ "glob": "^11.0.0",
42
+ "highlight.js": "^10.2.0",
43
+ "html2canvas": "^1.4.1",
44
+ "jest": "^26.6.3",
45
+ "sass": "^1.47.0",
46
+ "shelljs": "^0.8.4",
47
+ "ts-jest": "^26.5.6",
48
+ "ts-node": "^9.1.1",
49
+ "typescript": "^4.9.5",
50
+ "vite": "^5.0.0"
51
+ }
52
+ }
@@ -2823,57 +2823,114 @@ li.unchecked > .ql-ui {
2823
2823
  .ql-size.ql-picker .ql-picker-options > span.ql-picker-item[data-value]::before {
2824
2824
  content: attr(data-value);
2825
2825
  }
2826
- .ql-font.ql-picker {
2826
+ .ql-formats .ql-font.ql-picker {
2827
2827
  width: 108px;
2828
2828
  }
2829
- .ql-font.ql-picker span[data-value=arial]::before {
2829
+ .ql-formats .ql-font.ql-picker span[data-value=arial]::before {
2830
2830
  content: "arial";
2831
2831
  font-family: arial, helvetica, sans-serif;
2832
2832
  }
2833
- .ql-font.ql-picker span[data-value=songti]::before {
2833
+ .ql-formats .ql-font.ql-picker span[data-value=arial].ql-picker-label::before {
2834
+ width: 60px;
2835
+ overflow: hidden;
2836
+ text-overflow: ellipsis;
2837
+ white-space: nowrap;
2838
+ }
2839
+ .ql-formats .ql-font.ql-picker span[data-value=songti]::before {
2834
2840
  content: "宋体";
2835
2841
  font-family: "宋体", "SimSun";
2836
2842
  }
2837
- .ql-font.ql-picker span[data-value=yahei]::before {
2843
+ .ql-formats .ql-font.ql-picker span[data-value=songti].ql-picker-label::before {
2844
+ width: 60px;
2845
+ overflow: hidden;
2846
+ text-overflow: ellipsis;
2847
+ white-space: nowrap;
2848
+ }
2849
+ .ql-formats .ql-font.ql-picker span[data-value=yahei]::before {
2838
2850
  content: "微软雅黑";
2839
2851
  font-family: "微软雅黑", "Microsoft YaHei";
2840
2852
  }
2841
- .ql-font.ql-picker span[data-value=kaiti]::before {
2853
+ .ql-formats .ql-font.ql-picker span[data-value=yahei].ql-picker-label::before {
2854
+ width: 60px;
2855
+ overflow: hidden;
2856
+ text-overflow: ellipsis;
2857
+ white-space: nowrap;
2858
+ }
2859
+ .ql-formats .ql-font.ql-picker span[data-value=kaiti]::before {
2842
2860
  content: "楷体";
2843
2861
  font-family: "楷体", "楷体_GB2312", "SimKai";
2844
2862
  }
2845
- .ql-font.ql-picker span[data-value=heiti]::before {
2863
+ .ql-formats .ql-font.ql-picker span[data-value=kaiti].ql-picker-label::before {
2864
+ width: 60px;
2865
+ overflow: hidden;
2866
+ text-overflow: ellipsis;
2867
+ white-space: nowrap;
2868
+ }
2869
+ .ql-formats .ql-font.ql-picker span[data-value=heiti]::before {
2846
2870
  content: "黑体";
2847
2871
  font-family: "黑体", "SimHei";
2848
2872
  }
2849
- .ql-font.ql-picker span[data-value=lishu]::before {
2873
+ .ql-formats .ql-font.ql-picker span[data-value=heiti].ql-picker-label::before {
2874
+ width: 60px;
2875
+ overflow: hidden;
2876
+ text-overflow: ellipsis;
2877
+ white-space: nowrap;
2878
+ }
2879
+ .ql-formats .ql-font.ql-picker span[data-value=lishu]::before {
2850
2880
  content: "隶书";
2851
2881
  font-family: "隶书", "SimLi";
2852
2882
  }
2853
- .ql-font.ql-picker span[data-value=mono]::before {
2883
+ .ql-formats .ql-font.ql-picker span[data-value=lishu].ql-picker-label::before {
2884
+ width: 60px;
2885
+ overflow: hidden;
2886
+ text-overflow: ellipsis;
2887
+ white-space: nowrap;
2888
+ }
2889
+ .ql-formats .ql-font.ql-picker span[data-value=mono]::before {
2854
2890
  content: "andale mono";
2855
2891
  font-family: "andale mono";
2856
2892
  }
2857
- .ql-font.ql-picker span[data-value=arialblack]::before {
2893
+ .ql-formats .ql-font.ql-picker span[data-value=mono].ql-picker-label::before {
2894
+ width: 60px;
2895
+ overflow: hidden;
2896
+ text-overflow: ellipsis;
2897
+ white-space: nowrap;
2898
+ }
2899
+ .ql-formats .ql-font.ql-picker span[data-value=arialblack]::before {
2858
2900
  content: "arial black";
2859
2901
  font-family: "arial black", "avant garde";
2860
2902
  }
2861
- .ql-font.ql-picker span[data-value=comic]::before {
2903
+ .ql-formats .ql-font.ql-picker span[data-value=arialblack].ql-picker-label::before {
2904
+ width: 60px;
2905
+ overflow: hidden;
2906
+ text-overflow: ellipsis;
2907
+ white-space: nowrap;
2908
+ }
2909
+ .ql-formats .ql-font.ql-picker span[data-value=comic]::before {
2862
2910
  content: "comic sans ms";
2863
2911
  font-family: "comic sans ms";
2864
2912
  }
2865
- .ql-font.ql-picker span[data-value=impact]::before {
2913
+ .ql-formats .ql-font.ql-picker span[data-value=comic].ql-picker-label::before {
2914
+ width: 60px;
2915
+ overflow: hidden;
2916
+ text-overflow: ellipsis;
2917
+ white-space: nowrap;
2918
+ }
2919
+ .ql-formats .ql-font.ql-picker span[data-value=impact]::before {
2866
2920
  content: "impact";
2867
2921
  font-family: "impact", "chicago";
2868
2922
  }
2869
- .ql-font.ql-picker span[data-value=times]::before {
2923
+ .ql-formats .ql-font.ql-picker span[data-value=impact].ql-picker-label::before {
2924
+ width: 60px;
2925
+ overflow: hidden;
2926
+ text-overflow: ellipsis;
2927
+ white-space: nowrap;
2928
+ }
2929
+ .ql-formats .ql-font.ql-picker span[data-value=times]::before {
2870
2930
  content: "times new roman";
2871
2931
  font-family: "times new roman";
2872
2932
  }
2873
- .ql-font.ql-picker span[data-value=mono].ql-picker-label::before,
2874
- .ql-font.ql-picker span[data-value=comic].ql-picker-label::before,
2875
- .ql-font.ql-picker span[data-value=times].ql-picker-label::before,
2876
- .ql-font.ql-picker span[data-value=arialblack].ql-picker-label::before {
2933
+ .ql-formats .ql-font.ql-picker span[data-value=times].ql-picker-label::before {
2877
2934
  width: 60px;
2878
2935
  overflow: hidden;
2879
2936
  text-overflow: ellipsis;
@@ -3449,7 +3506,7 @@ li.unchecked > .ql-ui {
3449
3506
  }
3450
3507
  .ql-screenshot-wrapper {
3451
3508
  --ql-screenshot-color-bg: rgba(0, 0, 0, 0.5);
3452
- --ql-screenshot-color-confirm: #2196F3;
3509
+ --ql-screenshot-color-confirm: #2196f3;
3453
3510
  --ql-screenshot-color-cancel: #ef1749;
3454
3511
  }
3455
3512
  .ql-screenshot-wrapper .ql-screenshot-cancel,
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.es.js","sources":["../../src/config.ts"],"sourcesContent":["import { isNullOrUndefined } from './config/editor.utils'\nimport { EN_US } from './config/i18n/en-us'\n\nimport { ZH_CN } from './config/i18n/zh-cn'\nimport {\n ALIGN_CENTER_ICON,\n ALIGN_LEFT_ICON,\n ALIGN_RIGHT_ICON,\n BACKGROUND_COLOR_ICON,\n BLOCKQUOTE_ICON,\n BOLD_ICON,\n CLEAN_ICON,\n CODE_BLOCK_ICON,\n CODE_ICON,\n COLOR_ICON,\n EMOJI_ICON,\n FILE_ICON,\n FORMAT_PAINTER_ICON,\n FULLSCREEN_ICON,\n GLOBAL_LINK_ICON,\n HELP_ICON,\n IMAGE_ICON,\n ITALIC_ICON,\n LINK_ICON,\n LIST_CHECK_ICON,\n LIST_ORDERED_ICON,\n LIST_UNORDERED_ICON,\n REDO_ICON,\n SCREENSHOT_ICON,\n STRIKE_ICON,\n TABLE_ICON,\n TRIANGLE_DOWN_ICON,\n UNDERLINE_ICON,\n UNDO_ICON,\n} from './config/icons.config'\n\nconst localLang = localStorage.getItem('lang') || 'zh-cn'\nexport const LANG_CONF = localLang === 'en-us' ? EN_US : ZH_CN\n\nexport const ICONS_CONFIG: { [key: string]: any } = {\n 'undo': UNDO_ICON,\n 'redo': REDO_ICON,\n 'clean': CLEAN_ICON,\n\n 'bold': BOLD_ICON,\n 'italic': ITALIC_ICON,\n 'underline': UNDERLINE_ICON,\n 'strike': STRIKE_ICON,\n\n 'font': '',\n 'size': '',\n\n 'color': `<span class=\"ql-color-inner\">\n ${COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line\"></span>\n </span>`,\n 'background': `<span class=\"ql-color-inner\">\n ${BACKGROUND_COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line color-line-background\"></span>\n </span>`,\n\n 'align': {\n '': ALIGN_LEFT_ICON,\n 'center': ALIGN_CENTER_ICON,\n 'right': ALIGN_RIGHT_ICON,\n },\n 'list': {\n bullet: LIST_UNORDERED_ICON,\n ordered: LIST_ORDERED_ICON,\n check: LIST_CHECK_ICON,\n },\n\n 'code': CODE_ICON,\n 'code-block': CODE_BLOCK_ICON,\n 'blockquote': BLOCKQUOTE_ICON,\n\n 'image': IMAGE_ICON,\n 'file': FILE_ICON,\n 'better-table': TABLE_ICON,\n 'link': LINK_ICON,\n 'global-link': GLOBAL_LINK_ICON,\n 'fullscreen': FULLSCREEN_ICON,\n 'emoji': EMOJI_ICON,\n 'help': HELP_ICON,\n 'screenshot': SCREENSHOT_ICON,\n 'format-painter': FORMAT_PAINTER_ICON,\n}\n\nexport const TABLE_RIGHT_MENU_CONFIG = {\n copyCells: {\n text: LANG_CONF['copy-cells'],\n },\n copyTable: {\n text: LANG_CONF['copy-table'],\n },\n cutCells: {\n text: LANG_CONF['cut-cells'],\n },\n emptyCells: {\n text: LANG_CONF['empty-cells'],\n },\n insertRowUp: {\n text: LANG_CONF['insert-row-up'],\n },\n insertRowDown: {\n text: LANG_CONF['insert-row-down'],\n },\n insertColumnLeft: {\n text: LANG_CONF['insert-column-left'],\n },\n insertColumnRight: {\n text: LANG_CONF['insert-column-right'],\n },\n mergeCells: {\n text: LANG_CONF['merge-cells'],\n },\n unmergeCells: {\n text: LANG_CONF['unmerge-cells'],\n },\n deleteRow: {\n text: LANG_CONF['delete-row'],\n },\n deleteColumn: {\n text: LANG_CONF['delete-column'],\n },\n deleteTable: {\n text: LANG_CONF['delete-table'],\n },\n}\n\n// 触发上传\nexport function inputFile(type, accept) {\n const defaultMIMETypes = this.quill.uploader.options[type].join(', ')\n const mimeTypes = accept || defaultMIMETypes\n let fileInput = this.container.querySelector(`input.ql-${type}[type=file]`)\n if (isNullOrUndefined(fileInput)) {\n fileInput = document.createElement('input')\n fileInput.classList.add(`ql-${type}`)\n fileInput.setAttribute('type', 'file')\n fileInput.setAttribute('accept', mimeTypes)\n if (\n this.quill.uploader.options.enableMultiUpload === true\n || (this.quill.uploader.options.enableMultiUpload.file && type === 'file')\n || (this.quill.uploader.options.enableMultiUpload.image && type === 'image')\n ) {\n fileInput.setAttribute('multiple', '')\n }\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true)\n this.quill.uploader.upload(range, fileInput.files, type === 'file')\n fileInput.value = ''\n })\n this.container.appendChild(fileInput)\n }\n fileInput.click()\n}\n\nexport function getListValue(value, preListValue) {\n let curListValue = value\n if (preListValue && preListValue === value) {\n curListValue = false\n }\n else if (value === 'check') {\n if (preListValue === 'checked' || preListValue === 'unchecked') {\n curListValue = false\n }\n else {\n curListValue = 'unchecked'\n }\n }\n return curListValue\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.cjs.js","sources":["../../src/config.ts"],"sourcesContent":["import { isNullOrUndefined } from './config/editor.utils'\nimport { EN_US } from './config/i18n/en-us'\n\nimport { ZH_CN } from './config/i18n/zh-cn'\nimport {\n ALIGN_CENTER_ICON,\n ALIGN_LEFT_ICON,\n ALIGN_RIGHT_ICON,\n BACKGROUND_COLOR_ICON,\n BLOCKQUOTE_ICON,\n BOLD_ICON,\n CLEAN_ICON,\n CODE_BLOCK_ICON,\n CODE_ICON,\n COLOR_ICON,\n EMOJI_ICON,\n FILE_ICON,\n FORMAT_PAINTER_ICON,\n FULLSCREEN_ICON,\n GLOBAL_LINK_ICON,\n HELP_ICON,\n IMAGE_ICON,\n ITALIC_ICON,\n LINK_ICON,\n LIST_CHECK_ICON,\n LIST_ORDERED_ICON,\n LIST_UNORDERED_ICON,\n REDO_ICON,\n SCREENSHOT_ICON,\n STRIKE_ICON,\n TABLE_ICON,\n TRIANGLE_DOWN_ICON,\n UNDERLINE_ICON,\n UNDO_ICON,\n} from './config/icons.config'\n\nconst localLang = localStorage.getItem('lang') || 'zh-cn'\nexport const LANG_CONF = localLang === 'en-us' ? EN_US : ZH_CN\n\nexport const ICONS_CONFIG: { [key: string]: any } = {\n 'undo': UNDO_ICON,\n 'redo': REDO_ICON,\n 'clean': CLEAN_ICON,\n\n 'bold': BOLD_ICON,\n 'italic': ITALIC_ICON,\n 'underline': UNDERLINE_ICON,\n 'strike': STRIKE_ICON,\n\n 'font': '',\n 'size': '',\n\n 'color': `<span class=\"ql-color-inner\">\n ${COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line\"></span>\n </span>`,\n 'background': `<span class=\"ql-color-inner\">\n ${BACKGROUND_COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line color-line-background\"></span>\n </span>`,\n\n 'align': {\n '': ALIGN_LEFT_ICON,\n 'center': ALIGN_CENTER_ICON,\n 'right': ALIGN_RIGHT_ICON,\n },\n 'list': {\n bullet: LIST_UNORDERED_ICON,\n ordered: LIST_ORDERED_ICON,\n check: LIST_CHECK_ICON,\n },\n\n 'code': CODE_ICON,\n 'code-block': CODE_BLOCK_ICON,\n 'blockquote': BLOCKQUOTE_ICON,\n\n 'image': IMAGE_ICON,\n 'file': FILE_ICON,\n 'better-table': TABLE_ICON,\n 'link': LINK_ICON,\n 'global-link': GLOBAL_LINK_ICON,\n 'fullscreen': FULLSCREEN_ICON,\n 'emoji': EMOJI_ICON,\n 'help': HELP_ICON,\n 'screenshot': SCREENSHOT_ICON,\n 'format-painter': FORMAT_PAINTER_ICON,\n}\n\nexport const TABLE_RIGHT_MENU_CONFIG = {\n copyCells: {\n text: LANG_CONF['copy-cells'],\n },\n copyTable: {\n text: LANG_CONF['copy-table'],\n },\n cutCells: {\n text: LANG_CONF['cut-cells'],\n },\n emptyCells: {\n text: LANG_CONF['empty-cells'],\n },\n insertRowUp: {\n text: LANG_CONF['insert-row-up'],\n },\n insertRowDown: {\n text: LANG_CONF['insert-row-down'],\n },\n insertColumnLeft: {\n text: LANG_CONF['insert-column-left'],\n },\n insertColumnRight: {\n text: LANG_CONF['insert-column-right'],\n },\n mergeCells: {\n text: LANG_CONF['merge-cells'],\n },\n unmergeCells: {\n text: LANG_CONF['unmerge-cells'],\n },\n deleteRow: {\n text: LANG_CONF['delete-row'],\n },\n deleteColumn: {\n text: LANG_CONF['delete-column'],\n },\n deleteTable: {\n text: LANG_CONF['delete-table'],\n },\n}\n\n// 触发上传\nexport function inputFile(type, accept) {\n const defaultMIMETypes = this.quill.uploader.options[type].join(', ')\n const mimeTypes = accept || defaultMIMETypes\n let fileInput = this.container.querySelector(`input.ql-${type}[type=file]`)\n if (isNullOrUndefined(fileInput)) {\n fileInput = document.createElement('input')\n fileInput.classList.add(`ql-${type}`)\n fileInput.setAttribute('type', 'file')\n fileInput.setAttribute('accept', mimeTypes)\n if (\n this.quill.uploader.options.enableMultiUpload === true\n || (this.quill.uploader.options.enableMultiUpload.file && type === 'file')\n || (this.quill.uploader.options.enableMultiUpload.image && type === 'image')\n ) {\n fileInput.setAttribute('multiple', '')\n }\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true)\n this.quill.uploader.upload(range, fileInput.files, type === 'file')\n fileInput.value = ''\n })\n this.container.appendChild(fileInput)\n }\n fileInput.click()\n}\n\nexport function getListValue(value, preListValue) {\n let curListValue = value\n if (preListValue && preListValue === value) {\n curListValue = false\n }\n else if (value === 'check') {\n if (preListValue === 'checked' || preListValue === 'unchecked') {\n curListValue = false\n }\n else {\n curListValue = 'unchecked'\n }\n }\n return curListValue\n}\n"],"names":["EN_US","ZH_CN","UNDO_ICON","REDO_ICON","CLEAN_ICON","BOLD_ICON","ITALIC_ICON","UNDERLINE_ICON","STRIKE_ICON","COLOR_ICON","TRIANGLE_DOWN_ICON","BACKGROUND_COLOR_ICON","ALIGN_LEFT_ICON","ALIGN_CENTER_ICON","ALIGN_RIGHT_ICON","LIST_UNORDERED_ICON","LIST_ORDERED_ICON","LIST_CHECK_ICON","CODE_ICON","CODE_BLOCK_ICON","BLOCKQUOTE_ICON","IMAGE_ICON","FILE_ICON","TABLE_ICON","LINK_ICON","GLOBAL_LINK_ICON","FULLSCREEN_ICON","EMOJI_ICON","HELP_ICON","SCREENSHOT_ICON","FORMAT_PAINTER_ICON","isNullOrUndefined"],"mappings":"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"}