@qxs-bns/components-wc 0.0.2

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 (141) hide show
  1. package/es/base/define.mjs +2 -0
  2. package/es/base/define.mjs.map +1 -0
  3. package/es/base/uid.mjs +2 -0
  4. package/es/base/uid.mjs.map +1 -0
  5. package/es/editor/blocksuite-editor.mjs +931 -0
  6. package/es/editor/blocksuite-editor.mjs.map +1 -0
  7. package/es/editor/index.mjs +2 -0
  8. package/es/editor/index.mjs.map +1 -0
  9. package/es/index.mjs +2 -0
  10. package/es/index.mjs.map +1 -0
  11. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.mjs +7 -0
  12. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.mjs.map +1 -0
  13. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.mjs +7 -0
  14. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.mjs.map +1 -0
  15. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.mjs +7 -0
  16. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.mjs.map +1 -0
  17. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.mjs +7 -0
  18. package/es/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.mjs.map +1 -0
  19. package/es/node_modules/.pnpm/@tiptap_extension-placeholder@3.20.5_@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5_/node_modules/@tiptap/extension-placeholder/dist/index.mjs +2 -0
  20. package/es/node_modules/.pnpm/@tiptap_extension-placeholder@3.20.5_@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5_/node_modules/@tiptap/extension-placeholder/dist/index.mjs.map +1 -0
  21. package/es/node_modules/.pnpm/@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5/node_modules/@tiptap/extensions/dist/index.mjs +2 -0
  22. package/es/node_modules/.pnpm/@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5/node_modules/@tiptap/extensions/dist/index.mjs.map +1 -0
  23. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive-helpers.mjs +7 -0
  24. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive-helpers.mjs.map +1 -0
  25. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive.mjs +7 -0
  26. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive.mjs.map +1 -0
  27. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/repeat.mjs +7 -0
  28. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/repeat.mjs.map +1 -0
  29. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.mjs +7 -0
  30. package/es/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.mjs.map +1 -0
  31. package/es/node_modules/.pnpm/prosemirror-dropcursor@1.8.2/node_modules/prosemirror-dropcursor/dist/index.mjs +2 -0
  32. package/es/node_modules/.pnpm/prosemirror-dropcursor@1.8.2/node_modules/prosemirror-dropcursor/dist/index.mjs.map +1 -0
  33. package/es/node_modules/.pnpm/prosemirror-gapcursor@1.4.1/node_modules/prosemirror-gapcursor/dist/index.mjs +2 -0
  34. package/es/node_modules/.pnpm/prosemirror-gapcursor@1.4.1/node_modules/prosemirror-gapcursor/dist/index.mjs.map +1 -0
  35. package/es/node_modules/.pnpm/prosemirror-history@1.5.0/node_modules/prosemirror-history/dist/index.mjs +2 -0
  36. package/es/node_modules/.pnpm/prosemirror-history@1.5.0/node_modules/prosemirror-history/dist/index.mjs.map +1 -0
  37. package/es/node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.mjs +2 -0
  38. package/es/node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.mjs.map +1 -0
  39. package/es/node_modules/.pnpm/prosemirror-model@1.25.4/node_modules/prosemirror-model/dist/index.mjs +2 -0
  40. package/es/node_modules/.pnpm/prosemirror-model@1.25.4/node_modules/prosemirror-model/dist/index.mjs.map +1 -0
  41. package/es/node_modules/.pnpm/prosemirror-state@1.4.4/node_modules/prosemirror-state/dist/index.mjs +2 -0
  42. package/es/node_modules/.pnpm/prosemirror-state@1.4.4/node_modules/prosemirror-state/dist/index.mjs.map +1 -0
  43. package/es/node_modules/.pnpm/prosemirror-transform@1.11.0/node_modules/prosemirror-transform/dist/index.mjs +2 -0
  44. package/es/node_modules/.pnpm/prosemirror-transform@1.11.0/node_modules/prosemirror-transform/dist/index.mjs.map +1 -0
  45. package/es/node_modules/.pnpm/prosemirror-view@1.41.7/node_modules/prosemirror-view/dist/index.mjs +2 -0
  46. package/es/node_modules/.pnpm/prosemirror-view@1.41.7/node_modules/prosemirror-view/dist/index.mjs.map +1 -0
  47. package/es/node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.mjs +2 -0
  48. package/es/node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.mjs.map +1 -0
  49. package/es/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.mjs +2 -0
  50. package/es/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.mjs.map +1 -0
  51. package/es/subject/action.mjs +118 -0
  52. package/es/subject/action.mjs.map +1 -0
  53. package/es/subject/blank-fill.mjs +204 -0
  54. package/es/subject/blank-fill.mjs.map +1 -0
  55. package/es/subject/layout.mjs +18 -0
  56. package/es/subject/layout.mjs.map +1 -0
  57. package/es/subject/list.mjs +128 -0
  58. package/es/subject/list.mjs.map +1 -0
  59. package/es/subject/page-end.mjs +25 -0
  60. package/es/subject/page-end.mjs.map +1 -0
  61. package/es/subject/rich-text.mjs +27 -0
  62. package/es/subject/rich-text.mjs.map +1 -0
  63. package/es/subject/scale.mjs +162 -0
  64. package/es/subject/scale.mjs.map +1 -0
  65. package/es/subject/single.mjs +318 -0
  66. package/es/subject/single.mjs.map +1 -0
  67. package/es/subject/text-fill.mjs +229 -0
  68. package/es/subject/text-fill.mjs.map +1 -0
  69. package/es/subject/type.mjs +42 -0
  70. package/es/subject/type.mjs.map +1 -0
  71. package/lib/base/define.cjs +2 -0
  72. package/lib/base/define.cjs.map +1 -0
  73. package/lib/base/uid.cjs +2 -0
  74. package/lib/base/uid.cjs.map +1 -0
  75. package/lib/editor/blocksuite-editor.cjs +931 -0
  76. package/lib/editor/blocksuite-editor.cjs.map +1 -0
  77. package/lib/editor/index.cjs +2 -0
  78. package/lib/editor/index.cjs.map +1 -0
  79. package/lib/index.cjs +2 -0
  80. package/lib/index.cjs.map +1 -0
  81. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.cjs +7 -0
  82. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.cjs.map +1 -0
  83. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.cjs +7 -0
  84. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.cjs.map +1 -0
  85. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.cjs +7 -0
  86. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.cjs.map +1 -0
  87. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.cjs +7 -0
  88. package/lib/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.cjs.map +1 -0
  89. package/lib/node_modules/.pnpm/@tiptap_extension-placeholder@3.20.5_@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5_/node_modules/@tiptap/extension-placeholder/dist/index.cjs +2 -0
  90. package/lib/node_modules/.pnpm/@tiptap_extension-placeholder@3.20.5_@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5_/node_modules/@tiptap/extension-placeholder/dist/index.cjs.map +1 -0
  91. package/lib/node_modules/.pnpm/@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5/node_modules/@tiptap/extensions/dist/index.cjs +2 -0
  92. package/lib/node_modules/.pnpm/@tiptap_extensions@3.20.5_@tiptap_core@3.20.5_@tiptap_pm@3.20.5__@tiptap_pm@3.20.5/node_modules/@tiptap/extensions/dist/index.cjs.map +1 -0
  93. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive-helpers.cjs +7 -0
  94. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive-helpers.cjs.map +1 -0
  95. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive.cjs +7 -0
  96. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive.cjs.map +1 -0
  97. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/repeat.cjs +8 -0
  98. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/repeat.cjs.map +1 -0
  99. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.cjs +7 -0
  100. package/lib/node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.cjs.map +1 -0
  101. package/lib/node_modules/.pnpm/prosemirror-dropcursor@1.8.2/node_modules/prosemirror-dropcursor/dist/index.cjs +2 -0
  102. package/lib/node_modules/.pnpm/prosemirror-dropcursor@1.8.2/node_modules/prosemirror-dropcursor/dist/index.cjs.map +1 -0
  103. package/lib/node_modules/.pnpm/prosemirror-gapcursor@1.4.1/node_modules/prosemirror-gapcursor/dist/index.cjs +2 -0
  104. package/lib/node_modules/.pnpm/prosemirror-gapcursor@1.4.1/node_modules/prosemirror-gapcursor/dist/index.cjs.map +1 -0
  105. package/lib/node_modules/.pnpm/prosemirror-history@1.5.0/node_modules/prosemirror-history/dist/index.cjs +2 -0
  106. package/lib/node_modules/.pnpm/prosemirror-history@1.5.0/node_modules/prosemirror-history/dist/index.cjs.map +1 -0
  107. package/lib/node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.cjs +2 -0
  108. package/lib/node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.cjs.map +1 -0
  109. package/lib/node_modules/.pnpm/prosemirror-model@1.25.4/node_modules/prosemirror-model/dist/index.cjs +2 -0
  110. package/lib/node_modules/.pnpm/prosemirror-model@1.25.4/node_modules/prosemirror-model/dist/index.cjs.map +1 -0
  111. package/lib/node_modules/.pnpm/prosemirror-state@1.4.4/node_modules/prosemirror-state/dist/index.cjs +2 -0
  112. package/lib/node_modules/.pnpm/prosemirror-state@1.4.4/node_modules/prosemirror-state/dist/index.cjs.map +1 -0
  113. package/lib/node_modules/.pnpm/prosemirror-transform@1.11.0/node_modules/prosemirror-transform/dist/index.cjs +2 -0
  114. package/lib/node_modules/.pnpm/prosemirror-transform@1.11.0/node_modules/prosemirror-transform/dist/index.cjs.map +1 -0
  115. package/lib/node_modules/.pnpm/prosemirror-view@1.41.7/node_modules/prosemirror-view/dist/index.cjs +2 -0
  116. package/lib/node_modules/.pnpm/prosemirror-view@1.41.7/node_modules/prosemirror-view/dist/index.cjs.map +1 -0
  117. package/lib/node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.cjs +2 -0
  118. package/lib/node_modules/.pnpm/rope-sequence@1.3.4/node_modules/rope-sequence/dist/index.cjs.map +1 -0
  119. package/lib/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.cjs +2 -0
  120. package/lib/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.cjs.map +1 -0
  121. package/lib/subject/action.cjs +118 -0
  122. package/lib/subject/action.cjs.map +1 -0
  123. package/lib/subject/blank-fill.cjs +204 -0
  124. package/lib/subject/blank-fill.cjs.map +1 -0
  125. package/lib/subject/layout.cjs +18 -0
  126. package/lib/subject/layout.cjs.map +1 -0
  127. package/lib/subject/list.cjs +128 -0
  128. package/lib/subject/list.cjs.map +1 -0
  129. package/lib/subject/page-end.cjs +25 -0
  130. package/lib/subject/page-end.cjs.map +1 -0
  131. package/lib/subject/rich-text.cjs +27 -0
  132. package/lib/subject/rich-text.cjs.map +1 -0
  133. package/lib/subject/scale.cjs +162 -0
  134. package/lib/subject/scale.cjs.map +1 -0
  135. package/lib/subject/single.cjs +318 -0
  136. package/lib/subject/single.cjs.map +1 -0
  137. package/lib/subject/text-fill.cjs +229 -0
  138. package/lib/subject/text-fill.cjs.map +1 -0
  139. package/lib/subject/type.cjs +42 -0
  140. package/lib/subject/type.cjs.map +1 -0
  141. package/package.json +77 -0
@@ -0,0 +1,318 @@
1
+ import{html as e,css as t,LitElement as s}from"lit";import{property as i}from"../node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.mjs";import{state as r}from"../node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.mjs";import{safeCustomElement as o}from"../base/define.mjs";import{uid as a}from"../base/uid.mjs";var n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,p=(e,t,s,i)=>{for(var r,o=i>1?void 0:i?l(t,s):t,a=e.length-1;a>=0;a--)(r=e[a])&&(o=(i?r(t,s,o):r(o))||o);return i&&o&&n(t,s,o),o};const d=e`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>`,c=e`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"/></svg>`;e`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>`;const h=e`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>`;function u(e){const t=document.createElement("div");t.textContent=e,Object.assign(t.style,{position:"fixed",top:"20px",left:"50%",transform:"translateX(-50%)",padding:"10px 20px",borderRadius:"4px",fontSize:"13px",color:"#fff",background:"#f56c6c",zIndex:"99999",boxShadow:"0 4px 12px rgba(0,0,0,.15)",transition:"opacity .3s",opacity:"1"}),document.body.appendChild(t),setTimeout(()=>{t.style.opacity="0",setTimeout(()=>t.remove(),300)},2500)}let x=class extends s{constructor(){super(...arguments),this.orderIndex=0,this.isEdit=!1,this.isSave=!1,this.isSet=!1,this.isKey=!1,this.showAction=!0,this.showAnalysis=!1,this.type="single",this.answerCheckType=1,this.examAnswerRelationType=0,this.richTextContent="",this.analysis="",this.leastAnswerCount=2,this.examExpand="",this.customId="",this.examId=0,this._answers=[{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1}],this._title="",this._analysis="",this._richText="",this._showRichText=!1,this._leastAnswerCount=2,this._answerCheckType=1,this._orderList=[],this._resultDialogOpen=!1,this._resultDialogIndex=0,this._resultDialogValue="",this._sortDropdownOpen=!1,this.TITLE_MAX=200,this.ANSWER_MAX=100,this._handleDocumentClick=e=>{const t=e.composedPath(),s=this.shadowRoot?.querySelector(".multi-select-wrapper");s&&!t.includes(s)&&(this._sortDropdownOpen=!1,this.requestUpdate())}}get answerList(){return this._answers}set answerList(e){const t=Array.isArray(e)?e:[];this._answers=t.length?t.map(e=>({...e})):[{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1},{title:"",isCorrect:!1}],this.requestUpdate("answerList")}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleDocumentClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleDocumentClick)}updated(e){e.has("isEdit")&&this.isEdit&&this._syncProps(),(e.has("examExpand")||e.has("answerList"))&&this._syncExamExpand()}_syncProps(){this._title=this.title||"",this._analysis=this.analysis||"",this._leastAnswerCount=this.leastAnswerCount||2,this._answerCheckType=this.answerCheckType||1,this.richTextContent&&(this._richText=this.richTextContent,this._showRichText=!0),this.answerList?.length&&(this._answers=this.answerList.map(e=>({...e,title:e.title||"",isCorrect:!!e.isCorrect}))),this._syncExamExpand()}_syncExamExpand(){if(!this.examExpand||!this.answerList?.length)return;const e=this.examExpand.split(",");this._orderList=e.map(e=>{const t=this.answerList.find(t=>t.answerId?.toString()===e);return t?String.fromCharCode(65+t.orderIndex-1):e}).filter(Boolean)}_emit(e,t){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t??null}))}_label(e){return String.fromCharCode(65+e)}get _titlePlaceholder(){return"single"===this.type?"单选题":"multiple"===this.type?"多选题":"排序题"}_setCorrect(e,t){"single"===this.type?(this._answers.forEach(e=>{e.isCorrect=!1}),e.isCorrect=t):e.isCorrect=t,this.requestUpdate()}_onTitleInput(e){const t=e.target;t.value.length>this.TITLE_MAX&&(t.value=t.value.slice(0,this.TITLE_MAX)),this._title=t.value}_onAnswerInput(e,t){const s=e.target;s.value.length>this.ANSWER_MAX&&(s.value=s.value.slice(0,this.ANSWER_MAX)),this._answers[t].title=s.value,this.requestUpdate()}_addAnswer(){this.isSave||(this._answers=[...this._answers,{title:"",isCorrect:!1,customAnswerId:a()}])}_deleteAnswer(e){this._answers.length<3||this.isSave||(this._answers=this._answers.filter((t,s)=>s!==e))}_toggleSortItem(e){const t=this._orderList.indexOf(e);this._orderList=t>=0?this._orderList.filter(t=>t!==e):[...this._orderList,e],this.requestUpdate()}_removeSortItem(e){this._orderList=this._orderList.filter(t=>t!==e),this.requestUpdate()}_getSortOrder(e){const t=this._orderList.indexOf(this._label(e));return t>=0?t+1:null}_openResultDialog(e){this._resultDialogIndex=e,this._resultDialogValue=this._answers[e].resultItem||"",this._resultDialogOpen=!0}_saveResultDialog(){this._answers[this._resultDialogIndex].resultItem=this._resultDialogValue,this._resultDialogOpen=!1,this.requestUpdate()}_renderResultDialog(){if(!this._resultDialogOpen)return"";const t=this._label(this._resultDialogIndex);return e`
2
+ <div class="modal-backdrop" @click=${()=>{this._resultDialogOpen=!1}}>
3
+ <div class="modal" @click=${e=>e.stopPropagation()}>
4
+ <div class="modal-header">
5
+ <span class="modal-title">编辑结果项 — 选项 ${t}</span>
6
+ <button class="modal-close" @click=${()=>{this._resultDialogOpen=!1}}>&#x2715;</button>
7
+ </div>
8
+ <div class="modal-body">
9
+ <textarea rows="5" .value=${this._resultDialogValue}
10
+ @input=${e=>{this._resultDialogValue=e.target.value}}
11
+ placeholder="请输入该选项的结果项内容"></textarea>
12
+ </div>
13
+ <div class="modal-footer">
14
+ <button @click=${()=>{this._resultDialogOpen=!1}}>取消</button>
15
+ <button class="primary" @click=${()=>this._saveResultDialog()}>保存</button>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ `}_save(e){if(e?.stopImmediatePropagation(),!this._title)return void u("题目标题不能为空!");if(!this._answerCheckType)return void u("请选择答题设置");let t="",s=!1,i=0;if("multiple"===this.type||"single"===this.type)this._answers.forEach((e,r)=>{e.title?.trim()||(t+=`选项${this._label(r)}未填写。`),e.isCorrect&&(s=!0,i++)});else if("sort"===this.type&&(this._orderList.length&&(s=!0),s&&this._orderList.length<this._leastAnswerCount))return void u(`排序题至少需要设置${this._leastAnswerCount}项排序答案`);if(t)return void u(t);if(new Set(this._answers.map(e=>e.title)).size===this._answers.length){if("multiple"===this.type){if(1===i)return void u("请至少设置两个支持选项");if(s&&i<this._leastAnswerCount)return void u("至少选几项与支持选项数不符")}2!==this._answerCheckType&&3!==this._answerCheckType||s?this._emit("save",{title:this._title,answers:this._answers.filter(e=>e.title).map((e,t)=>({...e,orderIndex:t+1})),examExpand:this._orderList.map(e=>e.charCodeAt(0)-65+1).join(","),analysis:this._analysis,isSetCorrectAnswer:s,leastAnswerCount:this._leastAnswerCount,examRichTextContent:this._showRichText?this._richText:"",examAnswerRelationType:this.examAnswerRelationType,isKey:this.isKey,answerCheckType:this._answerCheckType}):u("请设置支持选项")}else u("选项不能重复")}_renderPreview(){const t="single"===this.type?"(单选题)":`(${this._titlePlaceholder}${this.leastAnswerCount?`至少选${this.leastAnswerCount}项${"sort"===this.type?"并排序":""}`:""})`,s=this.answerList;return e`
20
+ <div class="preview">
21
+ <div><span class="title">${this.orderIndex+1}.${this.title||""}${t}</span></div>
22
+ ${this.richTextContent?e`<div class="rich-text" .innerHTML=${this.richTextContent}></div>`:""}
23
+ <div class="preview-answer">
24
+ ${s.map((t,s)=>e`
25
+ <label class="radio">
26
+ <input type="${"sort"===this.type?"checkbox":"radio"}" disabled />
27
+ <span class="order">${this._label(s)}.</span> ${t.title}
28
+ ${"sort"!==this.type&&t.isCorrect?e`<span class="correct">(支持选项)</span>`:""}
29
+ ${"sort"!==this.type&&1===this.examAnswerRelationType?e`<span class="result-info">${t.resultItem?"(已设置结果项)":"(未设置结果项)"}</span>`:""}
30
+ ${"sort"!==this.type&&2===this.examAnswerRelationType?e`<span class="result-info">${t.answerRelations?.length?"(已设置关联)":"(未设置关联)"}</span>`:""}
31
+ </label>
32
+ `)}
33
+ </div>
34
+ </div>
35
+ `}_renderEdit(){return e`
36
+ <div class="flex-items-start">
37
+ <div class="label"><span>题目:</span></div>
38
+ <div style="flex:1">
39
+ <div class="el-input">
40
+ <textarea rows="2" .value=${this._title} ?disabled=${this.isSave}
41
+ maxlength=${this.TITLE_MAX}
42
+ @input=${e=>this._onTitleInput(e)}
43
+ placeholder="【${this._titlePlaceholder}】请输入问题"></textarea>
44
+ <span class="char-counter">${this._title.length}/${this.TITLE_MAX}</span>
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ ${["multiple","sort"].includes(this.type)?e`
50
+ <div class="flex-items-start" style="margin-top:12px">
51
+ <div class="label"><span>设置:</span></div>
52
+ <select class="el-select" .value=${String(this._leastAnswerCount)} ?disabled=${this.isSave}
53
+ @change=${e=>{this._leastAnswerCount=Number(e.target.value)}}>
54
+ ${Array.from({length:Math.max(0,this._answers.length-1)},(e,t)=>t+2).map(t=>e`
55
+ <option value=${t} ?selected=${this._leastAnswerCount===t}>至少选择${t}项</option>
56
+ `)}
57
+ </select>
58
+ </div>
59
+ `:""}
60
+
61
+ <div class="answer-list">
62
+ ${this._answers.map((t,s)=>e`
63
+ <div class="answer-item">
64
+ <span class="label">${this._label(s)}.</span>
65
+ <div class="input">
66
+ <input type="text" .value=${t.title} ?disabled=${this.isSave}
67
+ maxlength=${this.ANSWER_MAX}
68
+ @input=${e=>this._onAnswerInput(e,s)}
69
+ placeholder="选项${this._label(s)}" />
70
+ <span class="char-counter">${t.title.length}/${this.ANSWER_MAX}</span>
71
+ </div>
72
+
73
+ ${"sort"===this.type&&null!==this._getSortOrder(s)?e`<span class="sort-badge">第${this._getSortOrder(s)}位</span>`:""}
74
+
75
+ ${["single","multiple"].includes(this.type)?e`
76
+ <label class="correct ${t.isCorrect?"is-correct":""}">
77
+ <input type="checkbox" .checked=${t.isCorrect} ?disabled=${this.isSave}
78
+ @change=${e=>this._setCorrect(t,e.target.checked)} />
79
+ 支持选项
80
+ </label>
81
+ `:""}
82
+
83
+ <span class="icon ${this.isSave?"disabled":""}"
84
+ @click=${()=>this._addAnswer()}>
85
+ ${d}
86
+ </span>
87
+ <span class="icon ${this.isSave||this._answers.length<3?"disabled":""}"
88
+ @click=${()=>this._deleteAnswer(s)}>
89
+ ${c}
90
+ </span>
91
+
92
+ ${1===this.examAnswerRelationType&&"sort"!==this.type?e`
93
+ <span class="link" @click=${()=>this._openResultDialog(s)}>${t.resultItem?"编辑结果":"添加结果"}</span>
94
+ `:""}
95
+ ${2===this.examAnswerRelationType&&"sort"!==this.type?e`
96
+ <span class="link">关联检查</span>
97
+ `:""}
98
+ </div>
99
+ `)}
100
+ </div>
101
+
102
+ ${"sort"===this.type?e`
103
+ <div class="flex-items-center" style="margin-top:12px">
104
+ <div class="label"><span>排序答案:</span></div>
105
+ <div style="flex:1">
106
+ <div class="multi-select-wrapper">
107
+ <div class="multi-select ${this._sortDropdownOpen?"focused":""} ${this.isSave?"disabled":""}"
108
+ @click=${()=>{this.isSave||(this._sortDropdownOpen=!this._sortDropdownOpen,this.requestUpdate())}}>
109
+ ${this._orderList.length>0?this._orderList.map(t=>e`
110
+ <span class="tag">
111
+ ${t}
112
+ <span class="tag-close" @click=${e=>{e.stopPropagation(),this._removeSortItem(t)}}>&#x2715;</span>
113
+ </span>
114
+ `):e`<span class="placeholder">请按顺序选择排序答案</span>`}
115
+ <span class="arrow">${h}</span>
116
+ </div>
117
+ ${this._sortDropdownOpen?e`
118
+ <div class="multi-select-dropdown">
119
+ ${this._answers.map((t,s)=>e`
120
+ <div class="multi-select-option ${this._orderList.includes(this._label(s))?"selected":""}"
121
+ @click=${()=>{this._toggleSortItem(this._label(s)),this.requestUpdate()}}>
122
+ ${this._label(s)}
123
+ </div>
124
+ `)}
125
+ </div>
126
+ `:""}
127
+ </div>
128
+ </div>
129
+ </div>
130
+ `:""}
131
+
132
+ ${this._showRichText?e`
133
+ <div class="flex-items-start" style="margin-top:12px">
134
+ <div class="label"><span>富文本:</span></div>
135
+ <div style="flex:1">
136
+ <qxs-blocksuite-editor
137
+ content=${this._richText}
138
+ ?is-edit=${!0}
139
+ @input=${e=>{this._richText=e.target.getContent()}}
140
+ ></qxs-blocksuite-editor>
141
+ <div class="flex-justify-end" style="margin-top:8px"><span class="el-link danger" @click=${()=>{this._showRichText=!1,this._richText=""}}>删除富文本</span></div>
142
+ </div>
143
+ </div>
144
+ `:""}
145
+
146
+ ${this.showAnalysis?e`
147
+ <div class="flex-items-start" style="margin-top:12px">
148
+ <div class="label"><span>解析:</span></div>
149
+ <div style="flex:1">
150
+ <textarea rows="2" .value=${this._analysis}
151
+ @input=${e=>{this._analysis=e.target.value}}
152
+ placeholder="请输入题目解析"></textarea>
153
+ </div>
154
+ </div>
155
+ `:""}
156
+ `}render(){return e`
157
+ <qxs-subject-layout ?show-edit=${this.isEdit}>
158
+ <div slot="preview">${this._renderPreview()}</div>
159
+ <div slot="edit">${this._renderEdit()}</div>
160
+ ${this.showAction?e`
161
+ <qxs-subject-action
162
+ ?is-edit=${this.isEdit}
163
+ ?is-set=${this.isSet}
164
+ ?is-key=${this.isKey}
165
+ ?show-other-option=${"multiple"===this.type||"single"===this.type}
166
+ answer-check-type=${this._answerCheckType}
167
+ exam-answer-relation-type=${this.examAnswerRelationType}
168
+ @delete=${()=>this._emit("delete")}
169
+ @save=${this._save}
170
+ @edit=${()=>this._emit("edit")}
171
+ @add=${e=>this._emit("add",e.detail)}
172
+ @set-key=${e=>{this._emit("set-key",e.detail)}}
173
+ @set-answer-setting=${e=>{this._answerCheckType=e.detail.value}}
174
+ @on-show-rich-text=${()=>{this._showRichText=!0}}
175
+ ></qxs-subject-action>
176
+ `:""}
177
+ </qxs-subject-layout>
178
+ ${this._renderResultDialog()}
179
+ `}};x.styles=t`
180
+ :host { display: block; font-family: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 12px; color: #5a5a5a; }
181
+ *, ::before, ::after { box-sizing: border-box; }
182
+
183
+ .preview { padding: 12px 0; }
184
+ .preview .title { font-size: 14px; color: #303133; }
185
+ .preview .rich-text { margin-top: 8px; }
186
+ .preview .rich-text img { max-width: 100%; }
187
+ .preview-answer { display: flex; flex-direction: column; margin-top: 12px; }
188
+ .preview-answer .radio { margin-top: 8px; padding-left: 8px; display: flex; align-items: center; gap: 6px; }
189
+ .preview-answer .order { color: #909399; }
190
+ .preview-answer .correct { color: #67c23a; }
191
+ .preview-answer .result-info { color: #909399; }
192
+
193
+ .flex { display: flex; }
194
+ .flex-items-center { display: flex; align-items: center; }
195
+ .flex-items-start { display: flex; align-items: flex-start; }
196
+ .flex-justify-end { display: flex; justify-content: flex-end; }
197
+ .label { min-width: 60px; font-size: 13px; color: #606266; }
198
+
199
+ textarea {
200
+ border: 1px solid #dcdfe6; border-radius: 3px; padding: 5px 11px;
201
+ font-size: 13px; font-family: inherit; width: 100%; resize: none; transition: border-color .2s;
202
+ line-height: 1.5; display: block; box-sizing: border-box;
203
+ }
204
+ textarea:focus { border-color: #3D61E3; outline: none; }
205
+ textarea:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }
206
+ .el-input { position: relative; display: block; }
207
+ .el-input textarea { padding-bottom: 24px; }
208
+ .el-input .char-counter {
209
+ position: absolute; right: 12px; bottom: 8px;
210
+ font-size: 12px; color: #909399; line-height: 1; pointer-events: none;
211
+ }
212
+
213
+ .answer-list { margin-top: 12px; }
214
+ .answer-item { display: flex; align-items: center; margin-top: 6px; border-radius: 4px; }
215
+ .answer-item .label { min-width: 60px; font-size: 13px; color: #909399; }
216
+ .answer-item .input { flex: 1; max-width: 360px; position: relative; display: block; }
217
+ .answer-item .input input {
218
+ height: 32px; padding: 0 50px 0 8px;
219
+ font-size: 13px; line-height: 32px;
220
+ border: 1px solid #dcdfe6; border-radius: 3px; width: 100%;
221
+ transition: border-color .2s; box-sizing: border-box;
222
+ }
223
+ .answer-item .input input:focus { border-color: #3D61E3; outline: none; }
224
+ .answer-item .input input:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }
225
+ .answer-item .input .char-counter {
226
+ position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
227
+ font-size: 12px; color: #909399; line-height: 1; pointer-events: none;
228
+ }
229
+
230
+ .answer-item .correct { margin: 0 10px; color: #909399; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
231
+ .answer-item .correct:hover { color: #3D61E3; }
232
+ .answer-item .correct.is-correct { color: #67c23a; }
233
+ .answer-item .correct input { width: 14px; height: 14px; cursor: pointer; accent-color: #3D61E3; }
234
+
235
+ .answer-item .icon {
236
+ margin-left: 6px; cursor: pointer; display: inline-flex;
237
+ align-items: center; justify-content: center;
238
+ width: 24px; height: 24px; border-radius: 4px;
239
+ border: 1px solid #dcdfe6; background: #fff; color: #909399;
240
+ transition: all 0.2s;
241
+ }
242
+ .answer-item .icon:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }
243
+ .answer-item .icon.disabled { color: #e4e7ed; border-color: #e4e7ed; cursor: not-allowed; }
244
+
245
+ .answer-item .link { margin-left: 8px; color: #3D61E3; cursor: pointer; font-size: 12px; white-space: nowrap; }
246
+ .answer-item .link:hover { color: #2D4CB8; }
247
+
248
+ .el-select {
249
+ width: 150px; height: 32px; border: 1px solid #dcdfe6; border-radius: 3px;
250
+ padding: 0 8px; font-size: 13px; background: #fff; appearance: none;
251
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23c0c4cc' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
252
+ background-repeat: no-repeat; background-position: right 8px center;
253
+ }
254
+ .el-select:focus { border-color: #3D61E3; outline: none; }
255
+ .el-select:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }
256
+ .el-select.sort-select {
257
+ width: 360px; height: auto; min-height: 32px; appearance: auto;
258
+ }
259
+
260
+ .sort-badge { font-weight: bold; color: #3D61E3; margin-left: 10px; }
261
+
262
+ .el-link { color: #3D61E3; cursor: pointer; font-size: 12px; }
263
+ .el-link:hover { color: #2D4CB8; }
264
+ .el-link.danger { color: #f56c6c; }
265
+
266
+ /* Multi-select with tags (Element Plus style) */
267
+ .multi-select-wrapper { position: relative; }
268
+ .multi-select {
269
+ width: 240px; height: 28px; border: 1px solid #dcdfe6; border-radius: 3px;
270
+ padding: 0 30px 0 8px; font-size: 13px; background: #fff; cursor: pointer;
271
+ display: flex; flex-wrap: nowrap; align-items: center; gap: 4px;
272
+ transition: border-color .2s; position: relative; overflow: hidden;
273
+ }
274
+ .multi-select:hover { border-color: #c0c4cc; }
275
+ .multi-select.focused { border-color: #3D61E3; }
276
+ .multi-select.disabled { background: #f5f7fa; cursor: not-allowed; }
277
+ .multi-select .placeholder { color: #c0c4cc; font-size: 13px; padding: 4px 0; }
278
+ .multi-select .arrow {
279
+ position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
280
+ color: #c0c4cc; display: inline-flex; transition: transform .2s;
281
+ }
282
+ .multi-select.focused .arrow { transform: translateY(-50%) rotate(180deg); color: #3D61E3; }
283
+ .multi-select .tag {
284
+ display: inline-flex; align-items: center; gap: 2px;
285
+ background: #f0f2f5; border-radius: 3px; padding: 0 6px; height: 20px;
286
+ font-size: 12px; color: #606266; line-height: 20px;
287
+ }
288
+ .multi-select .tag .tag-close {
289
+ display: inline-flex; cursor: pointer; color: #909399; margin-left: 2px; line-height: 1;
290
+ }
291
+ .multi-select .tag .tag-close:hover { color: #3D61E3; }
292
+ .multi-select-dropdown {
293
+ position: absolute; z-index: 100; background: #fff; left: 0; top: 100%; margin-top: 4px;
294
+ border: 1px solid #e4e7ed; border-radius: 3px;
295
+ box-shadow: 0 4px 12px rgba(0,0,0,.12); min-width: 240px; max-height: 140px; overflow-y: auto;
296
+ }
297
+ .multi-select-option {
298
+ padding: 4px 12px; font-size: 13px; color: #606266; cursor: pointer;
299
+ transition: background .2s;
300
+ }
301
+ .multi-select-option:hover { background: #f5f7fa; }
302
+ .multi-select-option.selected { color: #3D61E3; font-weight: 500; }
303
+
304
+ .modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9000; display: flex; align-items: center; justify-content: center; }
305
+ .modal { background: #fff; border-radius: 6px; width: 520px; max-width: 90vw; box-shadow: 0 12px 32px rgba(0,0,0,.12); display: flex; flex-direction: column; }
306
+ .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px 12px; border-bottom: 1px solid #e4e7ed; }
307
+ .modal-title { font-size: 14px; font-weight: 600; color: #303133; }
308
+ .modal-close { background: none; border: none; font-size: 18px; cursor: pointer; color: #909399; padding: 0; line-height: 1; }
309
+ .modal-close:hover { color: #3D61E3; }
310
+ .modal-body { padding: 20px; }
311
+ .modal-body textarea { min-height: 120px; }
312
+ .modal-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid #e4e7ed; }
313
+ .modal-footer button { padding: 6px 16px; font-size: 12px; border-radius: 3px; cursor: pointer; border: 1px solid #dcdfe6; background: #fff; color: #606266; }
314
+ .modal-footer button:hover { color: #3D61E3; border-color: #a0cfff; }
315
+ .modal-footer button.primary { background: #3D61E3; border-color: #3D61E3; color: #fff; }
316
+ .modal-footer button.primary:hover { background: #2D4CB8; border-color: #2D4CB8; }
317
+ `,p([i({type:Number,attribute:"order-index"})],x.prototype,"orderIndex",2),p([i({type:Boolean,attribute:"is-edit"})],x.prototype,"isEdit",2),p([i({type:Boolean,attribute:"is-save"})],x.prototype,"isSave",2),p([i({type:Boolean,attribute:"is-set"})],x.prototype,"isSet",2),p([i({type:Boolean,attribute:"is-key"})],x.prototype,"isKey",2),p([i({type:Boolean,attribute:"show-action"})],x.prototype,"showAction",2),p([i({type:Boolean,attribute:"show-analysis"})],x.prototype,"showAnalysis",2),p([i({type:String})],x.prototype,"type",2),p([i({type:Number,attribute:"answer-check-type"})],x.prototype,"answerCheckType",2),p([i({type:Number,attribute:"exam-answer-relation-type"})],x.prototype,"examAnswerRelationType",2),p([i({type:String,attribute:"rich-text-content"})],x.prototype,"richTextContent",2),p([i({type:String})],x.prototype,"analysis",2),p([i({type:Number,attribute:"least-answer-count"})],x.prototype,"leastAnswerCount",2),p([i({type:String,attribute:"exam-expand"})],x.prototype,"examExpand",2),p([i({type:String,attribute:"custom-id"})],x.prototype,"customId",2),p([i({type:Number,attribute:"exam-id"})],x.prototype,"examId",2),p([i({type:Array,attribute:"answer-list"})],x.prototype,"answerList",1),p([r()],x.prototype,"_answers",2),p([r()],x.prototype,"_title",2),p([r()],x.prototype,"_analysis",2),p([r()],x.prototype,"_richText",2),p([r()],x.prototype,"_showRichText",2),p([r()],x.prototype,"_leastAnswerCount",2),p([r()],x.prototype,"_answerCheckType",2),p([r()],x.prototype,"_orderList",2),p([r()],x.prototype,"_resultDialogOpen",2),p([r()],x.prototype,"_resultDialogIndex",2),p([r()],x.prototype,"_resultDialogValue",2),p([r()],x.prototype,"_sortDropdownOpen",2),x=p([o("qxs-subject-single")],x);export{x as QxsSubjectSingle};
318
+ //# sourceMappingURL=single.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single.mjs","sources":["../../../../packages/components-wc/src/subject/single.ts"],"sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { uid } from '../base/uid'\n\ninterface Answer {\n title: string\n isCorrect: boolean\n customAnswerId?: string\n answerId?: string\n resultItem?: string\n orderIndex?: number\n answerRelations?: any[]\n relationType?: number | null\n}\n\nconst iconPlus = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></svg>`\nconst iconRemove = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></svg>`\nconst iconClose = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>`\nconst iconArrow = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"6 9 12 15 18 9\"/></svg>`\n\nfunction showToast(msg: string) {\n const el = document.createElement('div')\n el.textContent = msg\n Object.assign(el.style, {\n position: 'fixed', top: '20px', left: '50%', transform: 'translateX(-50%)',\n padding: '10px 20px', borderRadius: '4px', fontSize: '13px', color: '#fff',\n background: '#f56c6c', zIndex: '99999', boxShadow: '0 4px 12px rgba(0,0,0,.15)',\n transition: 'opacity .3s', opacity: '1',\n })\n document.body.appendChild(el)\n setTimeout(() => { el.style.opacity = '0'; setTimeout(() => el.remove(), 300) }, 2500)\n}\n\n@safeCustomElement('qxs-subject-single')\nexport class QxsSubjectSingle extends LitElement {\n static styles = css`\n :host { display: block; font-family: system-ui, -apple-system, \"PingFang SC\", \"Microsoft YaHei\", sans-serif; font-size: 12px; color: #5a5a5a; }\n *, ::before, ::after { box-sizing: border-box; }\n\n .preview { padding: 12px 0; }\n .preview .title { font-size: 14px; color: #303133; }\n .preview .rich-text { margin-top: 8px; }\n .preview .rich-text img { max-width: 100%; }\n .preview-answer { display: flex; flex-direction: column; margin-top: 12px; }\n .preview-answer .radio { margin-top: 8px; padding-left: 8px; display: flex; align-items: center; gap: 6px; }\n .preview-answer .order { color: #909399; }\n .preview-answer .correct { color: #67c23a; }\n .preview-answer .result-info { color: #909399; }\n\n .flex { display: flex; }\n .flex-items-center { display: flex; align-items: center; }\n .flex-items-start { display: flex; align-items: flex-start; }\n .flex-justify-end { display: flex; justify-content: flex-end; }\n .label { min-width: 60px; font-size: 13px; color: #606266; }\n\n textarea {\n border: 1px solid #dcdfe6; border-radius: 3px; padding: 5px 11px;\n font-size: 13px; font-family: inherit; width: 100%; resize: none; transition: border-color .2s;\n line-height: 1.5; display: block; box-sizing: border-box;\n }\n textarea:focus { border-color: #3D61E3; outline: none; }\n textarea:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }\n .el-input { position: relative; display: block; }\n .el-input textarea { padding-bottom: 24px; }\n .el-input .char-counter {\n position: absolute; right: 12px; bottom: 8px;\n font-size: 12px; color: #909399; line-height: 1; pointer-events: none;\n }\n\n .answer-list { margin-top: 12px; }\n .answer-item { display: flex; align-items: center; margin-top: 6px; border-radius: 4px; }\n .answer-item .label { min-width: 60px; font-size: 13px; color: #909399; }\n .answer-item .input { flex: 1; max-width: 360px; position: relative; display: block; }\n .answer-item .input input {\n height: 32px; padding: 0 50px 0 8px;\n font-size: 13px; line-height: 32px;\n border: 1px solid #dcdfe6; border-radius: 3px; width: 100%;\n transition: border-color .2s; box-sizing: border-box;\n }\n .answer-item .input input:focus { border-color: #3D61E3; outline: none; }\n .answer-item .input input:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }\n .answer-item .input .char-counter {\n position: absolute; right: 8px; top: 50%; transform: translateY(-50%);\n font-size: 12px; color: #909399; line-height: 1; pointer-events: none;\n }\n\n .answer-item .correct { margin: 0 10px; color: #909399; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }\n .answer-item .correct:hover { color: #3D61E3; }\n .answer-item .correct.is-correct { color: #67c23a; }\n .answer-item .correct input { width: 14px; height: 14px; cursor: pointer; accent-color: #3D61E3; }\n\n .answer-item .icon {\n margin-left: 6px; cursor: pointer; display: inline-flex;\n align-items: center; justify-content: center;\n width: 24px; height: 24px; border-radius: 4px;\n border: 1px solid #dcdfe6; background: #fff; color: #909399;\n transition: all 0.2s;\n }\n .answer-item .icon:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }\n .answer-item .icon.disabled { color: #e4e7ed; border-color: #e4e7ed; cursor: not-allowed; }\n\n .answer-item .link { margin-left: 8px; color: #3D61E3; cursor: pointer; font-size: 12px; white-space: nowrap; }\n .answer-item .link:hover { color: #2D4CB8; }\n\n .el-select {\n width: 150px; height: 32px; border: 1px solid #dcdfe6; border-radius: 3px;\n padding: 0 8px; font-size: 13px; background: #fff; appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23c0c4cc' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat; background-position: right 8px center;\n }\n .el-select:focus { border-color: #3D61E3; outline: none; }\n .el-select:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }\n .el-select.sort-select {\n width: 360px; height: auto; min-height: 32px; appearance: auto;\n }\n\n .sort-badge { font-weight: bold; color: #3D61E3; margin-left: 10px; }\n\n .el-link { color: #3D61E3; cursor: pointer; font-size: 12px; }\n .el-link:hover { color: #2D4CB8; }\n .el-link.danger { color: #f56c6c; }\n\n /* Multi-select with tags (Element Plus style) */\n .multi-select-wrapper { position: relative; }\n .multi-select {\n width: 240px; height: 28px; border: 1px solid #dcdfe6; border-radius: 3px;\n padding: 0 30px 0 8px; font-size: 13px; background: #fff; cursor: pointer;\n display: flex; flex-wrap: nowrap; align-items: center; gap: 4px;\n transition: border-color .2s; position: relative; overflow: hidden;\n }\n .multi-select:hover { border-color: #c0c4cc; }\n .multi-select.focused { border-color: #3D61E3; }\n .multi-select.disabled { background: #f5f7fa; cursor: not-allowed; }\n .multi-select .placeholder { color: #c0c4cc; font-size: 13px; padding: 4px 0; }\n .multi-select .arrow {\n position: absolute; right: 8px; top: 50%; transform: translateY(-50%);\n color: #c0c4cc; display: inline-flex; transition: transform .2s;\n }\n .multi-select.focused .arrow { transform: translateY(-50%) rotate(180deg); color: #3D61E3; }\n .multi-select .tag {\n display: inline-flex; align-items: center; gap: 2px;\n background: #f0f2f5; border-radius: 3px; padding: 0 6px; height: 20px;\n font-size: 12px; color: #606266; line-height: 20px;\n }\n .multi-select .tag .tag-close {\n display: inline-flex; cursor: pointer; color: #909399; margin-left: 2px; line-height: 1;\n }\n .multi-select .tag .tag-close:hover { color: #3D61E3; }\n .multi-select-dropdown {\n position: absolute; z-index: 100; background: #fff; left: 0; top: 100%; margin-top: 4px;\n border: 1px solid #e4e7ed; border-radius: 3px;\n box-shadow: 0 4px 12px rgba(0,0,0,.12); min-width: 240px; max-height: 140px; overflow-y: auto;\n }\n .multi-select-option {\n padding: 4px 12px; font-size: 13px; color: #606266; cursor: pointer;\n transition: background .2s;\n }\n .multi-select-option:hover { background: #f5f7fa; }\n .multi-select-option.selected { color: #3D61E3; font-weight: 500; }\n\n .modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9000; display: flex; align-items: center; justify-content: center; }\n .modal { background: #fff; border-radius: 6px; width: 520px; max-width: 90vw; box-shadow: 0 12px 32px rgba(0,0,0,.12); display: flex; flex-direction: column; }\n .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px 12px; border-bottom: 1px solid #e4e7ed; }\n .modal-title { font-size: 14px; font-weight: 600; color: #303133; }\n .modal-close { background: none; border: none; font-size: 18px; cursor: pointer; color: #909399; padding: 0; line-height: 1; }\n .modal-close:hover { color: #3D61E3; }\n .modal-body { padding: 20px; }\n .modal-body textarea { min-height: 120px; }\n .modal-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid #e4e7ed; }\n .modal-footer button { padding: 6px 16px; font-size: 12px; border-radius: 3px; cursor: pointer; border: 1px solid #dcdfe6; background: #fff; color: #606266; }\n .modal-footer button:hover { color: #3D61E3; border-color: #a0cfff; }\n .modal-footer button.primary { background: #3D61E3; border-color: #3D61E3; color: #fff; }\n .modal-footer button.primary:hover { background: #2D4CB8; border-color: #2D4CB8; }\n `\n\n @property({ type: Number, attribute: 'order-index' }) orderIndex = 0\n @property({ type: Boolean, attribute: 'is-edit' }) isEdit = false\n @property({ type: Boolean, attribute: 'is-save' }) isSave = false\n @property({ type: Boolean, attribute: 'is-set' }) isSet = false\n @property({ type: Boolean, attribute: 'is-key' }) isKey = false\n @property({ type: Boolean, attribute: 'show-action' }) showAction = true\n @property({ type: Boolean, attribute: 'show-analysis' }) showAnalysis = false\n @property({ type: String }) type: 'single' | 'multiple' | 'sort' = 'single'\n @property({ type: Number, attribute: 'answer-check-type' }) answerCheckType = 1\n @property({ type: Number, attribute: 'exam-answer-relation-type' }) examAnswerRelationType = 0\n @property({ type: String, attribute: 'rich-text-content' }) richTextContent = ''\n @property({ type: String }) analysis = ''\n @property({ type: Number, attribute: 'least-answer-count' }) leastAnswerCount = 2\n @property({ type: String, attribute: 'exam-expand' }) examExpand = ''\n @property({ type: String, attribute: 'custom-id' }) customId = ''\n @property({ type: Number, attribute: 'exam-id' }) examId = 0\n\n @property({ type: Array, attribute: 'answer-list' })\n get answerList() { return this._answers }\n\n set answerList(v: any) {\n const arr = Array.isArray(v) ? v : []\n this._answers = arr.length\n ? arr.map((a: any) => ({ ...a }))\n : [\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n ]\n this.requestUpdate('answerList')\n }\n\n @state() private _answers: Answer[] = [\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n ]\n\n @state() private _title = ''\n @state() private _analysis = ''\n @state() private _richText = ''\n @state() private _showRichText = false\n @state() private _leastAnswerCount = 2\n @state() private _answerCheckType = 1\n @state() private _orderList: string[] = []\n @state() private _resultDialogOpen = false\n @state() private _resultDialogIndex = 0\n @state() private _resultDialogValue = ''\n @state() private _sortDropdownOpen = false\n\n private readonly TITLE_MAX = 200\n private readonly ANSWER_MAX = 100\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._handleDocumentClick)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('click', this._handleDocumentClick)\n }\n\n private _handleDocumentClick = (e: MouseEvent) => {\n const path = e.composedPath()\n const wrapper = this.shadowRoot?.querySelector('.multi-select-wrapper')\n if (wrapper && !path.includes(wrapper)) {\n this._sortDropdownOpen = false\n this.requestUpdate()\n }\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('isEdit') && this.isEdit) { this._syncProps() }\n if (changed.has('examExpand') || changed.has('answerList')) { this._syncExamExpand() }\n }\n\n private _syncProps() {\n this._title = (this as any).title || ''\n this._analysis = this.analysis || ''\n this._leastAnswerCount = this.leastAnswerCount || 2\n this._answerCheckType = this.answerCheckType || 1\n if (this.richTextContent) { this._richText = this.richTextContent; this._showRichText = true }\n if (this.answerList?.length) {\n this._answers = this.answerList.map((a: any) => ({\n ...a,\n title: a.title || '',\n isCorrect: !!a.isCorrect,\n }))\n }\n this._syncExamExpand()\n }\n\n private _syncExamExpand() {\n if (!this.examExpand || !this.answerList?.length) { return }\n const ids = this.examExpand.split(',')\n this._orderList = ids.map((id) => {\n const answer = (this.answerList as any[]).find(a => a.answerId?.toString() === id)\n return answer ? String.fromCharCode(65 + answer.orderIndex - 1) : id\n }).filter(Boolean)\n }\n\n private _emit(name: string, detail?: unknown) {\n this.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail: detail ?? null }))\n }\n\n private _label(i: number) { return String.fromCharCode(65 + i) }\n\n private get _titlePlaceholder() {\n return this.type === 'single' ? '单选题' : this.type === 'multiple' ? '多选题' : '排序题'\n }\n\n private _setCorrect(item: Answer, val: boolean) {\n if (this.type === 'single') {\n this._answers.forEach((a) => { a.isCorrect = false })\n item.isCorrect = val\n }\n else {\n item.isCorrect = val\n }\n this.requestUpdate()\n }\n\n private _onTitleInput(e: Event) {\n const el = e.target as HTMLTextAreaElement\n if (el.value.length > this.TITLE_MAX) { el.value = el.value.slice(0, this.TITLE_MAX) }\n this._title = el.value\n }\n\n private _onAnswerInput(e: Event, idx: number) {\n const el = e.target as HTMLInputElement\n if (el.value.length > this.ANSWER_MAX) { el.value = el.value.slice(0, this.ANSWER_MAX) }\n this._answers[idx].title = el.value\n this.requestUpdate()\n }\n\n private _addAnswer() {\n if (this.isSave) { return }\n this._answers = [...this._answers, { title: '', isCorrect: false, customAnswerId: uid() }]\n }\n\n private _deleteAnswer(index: number) {\n if (this._answers.length < 3 || this.isSave) { return }\n this._answers = this._answers.filter((_, i) => i !== index)\n }\n\n private _toggleSortItem(letter: string) {\n const idx = this._orderList.indexOf(letter)\n if (idx >= 0) {\n this._orderList = this._orderList.filter(l => l !== letter)\n }\n else {\n this._orderList = [...this._orderList, letter]\n }\n this.requestUpdate()\n }\n\n private _removeSortItem(letter: string) {\n this._orderList = this._orderList.filter(l => l !== letter)\n this.requestUpdate()\n }\n\n private _getSortOrder(index: number): number | null {\n const pos = this._orderList.indexOf(this._label(index))\n return pos >= 0 ? pos + 1 : null\n }\n\n private _openResultDialog(idx: number) {\n this._resultDialogIndex = idx\n this._resultDialogValue = this._answers[idx].resultItem || ''\n this._resultDialogOpen = true\n }\n\n private _saveResultDialog() {\n this._answers[this._resultDialogIndex].resultItem = this._resultDialogValue\n this._resultDialogOpen = false\n this.requestUpdate()\n }\n\n private _renderResultDialog() {\n if (!this._resultDialogOpen) { return '' }\n const letter = this._label(this._resultDialogIndex)\n return html`\n <div class=\"modal-backdrop\" @click=${() => { this._resultDialogOpen = false }}>\n <div class=\"modal\" @click=${(e: Event) => e.stopPropagation()}>\n <div class=\"modal-header\">\n <span class=\"modal-title\">编辑结果项 — 选项 ${letter}</span>\n <button class=\"modal-close\" @click=${() => { this._resultDialogOpen = false }}>&#x2715;</button>\n </div>\n <div class=\"modal-body\">\n <textarea rows=\"5\" .value=${this._resultDialogValue}\n @input=${(e: Event) => { this._resultDialogValue = (e.target as HTMLTextAreaElement).value }}\n placeholder=\"请输入该选项的结果项内容\"></textarea>\n </div>\n <div class=\"modal-footer\">\n <button @click=${() => { this._resultDialogOpen = false }}>取消</button>\n <button class=\"primary\" @click=${() => this._saveResultDialog()}>保存</button>\n </div>\n </div>\n </div>\n `\n }\n\n private _save(e?: Event) {\n e?.stopImmediatePropagation()\n if (!this._title) { showToast('题目标题不能为空!'); return }\n if (!this._answerCheckType) { showToast('请选择答题设置'); return }\n\n let msg = ''\n let isSetCorrectAnswer = false\n let correctAnswerCount = 0\n\n if (this.type === 'multiple' || this.type === 'single') {\n this._answers.forEach((v, i) => {\n if (!v.title?.trim()) { msg += `选项${this._label(i)}未填写。` }\n if (v.isCorrect) { isSetCorrectAnswer = true; correctAnswerCount++ }\n })\n }\n else if (this.type === 'sort') {\n if (this._orderList.length) { isSetCorrectAnswer = true }\n if (isSetCorrectAnswer && this._orderList.length < this._leastAnswerCount) {\n showToast(`排序题至少需要设置${this._leastAnswerCount}项排序答案`); return\n }\n }\n\n if (msg) { showToast(msg); return }\n\n const uniqueAnswer = new Set(this._answers.map(a => a.title))\n if (uniqueAnswer.size !== this._answers.length) { showToast('选项不能重复'); return }\n\n if (this.type === 'multiple') {\n if (correctAnswerCount === 1) { showToast('请至少设置两个支持选项'); return }\n if (isSetCorrectAnswer && correctAnswerCount < this._leastAnswerCount) {\n showToast('至少选几项与支持选项数不符'); return\n }\n }\n\n if (this._answerCheckType === 2 || this._answerCheckType === 3) {\n if (!isSetCorrectAnswer) { showToast('请设置支持选项'); return }\n }\n\n this._emit('save', {\n title: this._title,\n answers: this._answers.filter(a => a.title).map((a, i) => ({ ...a, orderIndex: i + 1 })),\n examExpand: this._orderList.map(l => l.charCodeAt(0) - 65 + 1).join(','),\n analysis: this._analysis,\n isSetCorrectAnswer,\n leastAnswerCount: this._leastAnswerCount,\n examRichTextContent: this._showRichText ? this._richText : '',\n examAnswerRelationType: this.examAnswerRelationType,\n isKey: this.isKey,\n answerCheckType: this._answerCheckType,\n })\n }\n\n private _renderPreview() {\n const typeSuffix = this.type === 'single'\n ? '(单选题)'\n : `(${this._titlePlaceholder}${this.leastAnswerCount ? `至少选${this.leastAnswerCount}项${this.type === 'sort' ? '并排序' : ''}` : ''})`\n const answers = this.answerList as Answer[]\n return html`\n <div class=\"preview\">\n <div><span class=\"title\">${this.orderIndex + 1}.${(this as any).title || ''}${typeSuffix}</span></div>\n ${this.richTextContent ? html`<div class=\"rich-text\" .innerHTML=${this.richTextContent}></div>` : ''}\n <div class=\"preview-answer\">\n ${answers.map((a, i) => html`\n <label class=\"radio\">\n <input type=\"${this.type === 'sort' ? 'checkbox' : 'radio'}\" disabled />\n <span class=\"order\">${this._label(i)}.</span> ${a.title}\n ${this.type !== 'sort' && a.isCorrect ? html`<span class=\"correct\">(支持选项)</span>` : ''}\n ${this.type !== 'sort' && this.examAnswerRelationType === 1 ? html`<span class=\"result-info\">${a.resultItem ? '(已设置结果项)' : '(未设置结果项)'}</span>` : ''}\n ${this.type !== 'sort' && this.examAnswerRelationType === 2 ? html`<span class=\"result-info\">${a.answerRelations?.length ? '(已设置关联)' : '(未设置关联)'}</span>` : ''}\n </label>\n `)}\n </div>\n </div>\n `\n }\n\n private _renderEdit() {\n return html`\n <div class=\"flex-items-start\">\n <div class=\"label\"><span>题目:</span></div>\n <div style=\"flex:1\">\n <div class=\"el-input\">\n <textarea rows=\"2\" .value=${this._title} ?disabled=${this.isSave}\n maxlength=${this.TITLE_MAX}\n @input=${(e: Event) => this._onTitleInput(e)}\n placeholder=\"【${this._titlePlaceholder}】请输入问题\"></textarea>\n <span class=\"char-counter\">${this._title.length}/${this.TITLE_MAX}</span>\n </div>\n </div>\n </div>\n\n ${['multiple', 'sort'].includes(this.type)\n ? html`\n <div class=\"flex-items-start\" style=\"margin-top:12px\">\n <div class=\"label\"><span>设置:</span></div>\n <select class=\"el-select\" .value=${String(this._leastAnswerCount)} ?disabled=${this.isSave}\n @change=${(e: Event) => { this._leastAnswerCount = Number((e.target as HTMLSelectElement).value) }}>\n ${Array.from({ length: Math.max(0, this._answers.length - 1) }, (_, i) => i + 2).map(n => html`\n <option value=${n} ?selected=${this._leastAnswerCount === n}>至少选择${n}项</option>\n `)}\n </select>\n </div>\n `\n : ''}\n\n <div class=\"answer-list\">\n ${this._answers.map((a, i) => html`\n <div class=\"answer-item\">\n <span class=\"label\">${this._label(i)}.</span>\n <div class=\"input\">\n <input type=\"text\" .value=${a.title} ?disabled=${this.isSave}\n maxlength=${this.ANSWER_MAX}\n @input=${(e: Event) => this._onAnswerInput(e, i)}\n placeholder=\"选项${this._label(i)}\" />\n <span class=\"char-counter\">${a.title.length}/${this.ANSWER_MAX}</span>\n </div>\n\n ${this.type === 'sort' && this._getSortOrder(i) !== null\n ? html`<span class=\"sort-badge\">第${this._getSortOrder(i)}位</span>`\n : ''}\n\n ${['single', 'multiple'].includes(this.type)\n ? html`\n <label class=\"correct ${a.isCorrect ? 'is-correct' : ''}\">\n <input type=\"checkbox\" .checked=${a.isCorrect} ?disabled=${this.isSave}\n @change=${(e: Event) => this._setCorrect(a, (e.target as HTMLInputElement).checked)} />\n 支持选项\n </label>\n `\n : ''}\n\n <span class=\"icon ${this.isSave ? 'disabled' : ''}\"\n @click=${() => this._addAnswer()}>\n ${iconPlus}\n </span>\n <span class=\"icon ${this.isSave || this._answers.length < 3 ? 'disabled' : ''}\"\n @click=${() => this._deleteAnswer(i)}>\n ${iconRemove}\n </span>\n\n ${this.examAnswerRelationType === 1 && this.type !== 'sort'\n ? html`\n <span class=\"link\" @click=${() => this._openResultDialog(i)}>${a.resultItem ? '编辑结果' : '添加结果'}</span>\n `\n : ''}\n ${this.examAnswerRelationType === 2 && this.type !== 'sort'\n ? html`\n <span class=\"link\">关联检查</span>\n `\n : ''}\n </div>\n `)}\n </div>\n\n ${this.type === 'sort'\n ? html`\n <div class=\"flex-items-center\" style=\"margin-top:12px\">\n <div class=\"label\"><span>排序答案:</span></div>\n <div style=\"flex:1\">\n <div class=\"multi-select-wrapper\">\n <div class=\"multi-select ${this._sortDropdownOpen ? 'focused' : ''} ${this.isSave ? 'disabled' : ''}\"\n @click=${() => { if (!this.isSave) { this._sortDropdownOpen = !this._sortDropdownOpen; this.requestUpdate() } }}>\n ${this._orderList.length > 0\n ? this._orderList.map(l => html`\n <span class=\"tag\">\n ${l}\n <span class=\"tag-close\" @click=${(e: Event) => { e.stopPropagation(); this._removeSortItem(l) }}>&#x2715;</span>\n </span>\n `)\n : html`<span class=\"placeholder\">请按顺序选择排序答案</span>`\n }\n <span class=\"arrow\">${iconArrow}</span>\n </div>\n ${this._sortDropdownOpen\n ? html`\n <div class=\"multi-select-dropdown\">\n ${this._answers.map((_, i) => html`\n <div class=\"multi-select-option ${this._orderList.includes(this._label(i)) ? 'selected' : ''}\"\n @click=${() => { this._toggleSortItem(this._label(i)); this.requestUpdate() }}>\n ${this._label(i)}\n </div>\n `)}\n </div>\n `\n : ''}\n </div>\n </div>\n </div>\n `\n : ''}\n\n ${this._showRichText\n ? html`\n <div class=\"flex-items-start\" style=\"margin-top:12px\">\n <div class=\"label\"><span>富文本:</span></div>\n <div style=\"flex:1\">\n <qxs-blocksuite-editor\n content=${this._richText}\n ?is-edit=${true}\n @input=${(e: CustomEvent) => { this._richText = (e.target as any).getContent() }}\n ></qxs-blocksuite-editor>\n <div class=\"flex-justify-end\" style=\"margin-top:8px\"><span class=\"el-link danger\" @click=${() => { this._showRichText = false; this._richText = '' }}>删除富文本</span></div>\n </div>\n </div>\n `\n : ''}\n\n ${this.showAnalysis\n ? html`\n <div class=\"flex-items-start\" style=\"margin-top:12px\">\n <div class=\"label\"><span>解析:</span></div>\n <div style=\"flex:1\">\n <textarea rows=\"2\" .value=${this._analysis}\n @input=${(e: Event) => { this._analysis = (e.target as HTMLTextAreaElement).value }}\n placeholder=\"请输入题目解析\"></textarea>\n </div>\n </div>\n `\n : ''}\n `\n }\n\n render() {\n return html`\n <qxs-subject-layout ?show-edit=${this.isEdit}>\n <div slot=\"preview\">${this._renderPreview()}</div>\n <div slot=\"edit\">${this._renderEdit()}</div>\n ${this.showAction\n ? html`\n <qxs-subject-action\n ?is-edit=${this.isEdit}\n ?is-set=${this.isSet}\n ?is-key=${this.isKey}\n ?show-other-option=${this.type === 'multiple' || this.type === 'single'}\n answer-check-type=${this._answerCheckType}\n exam-answer-relation-type=${this.examAnswerRelationType}\n @delete=${() => this._emit('delete')}\n @save=${this._save}\n @edit=${() => this._emit('edit')}\n @add=${(e: CustomEvent) => this._emit('add', e.detail)}\n @set-key=${(e: CustomEvent) => { this._emit('set-key', e.detail) }}\n @set-answer-setting=${(e: CustomEvent) => { this._answerCheckType = e.detail.value }}\n @on-show-rich-text=${() => { this._showRichText = true }}\n ></qxs-subject-action>\n `\n : ''}\n </qxs-subject-layout>\n ${this._renderResultDialog()}\n `\n }\n}\n\nexport function register() {}\n"],"names":["iconPlus","html","iconRemove","iconArrow","showToast","msg","el","document","createElement","textContent","Object","assign","style","position","top","left","transform","padding","borderRadius","fontSize","color","background","zIndex","boxShadow","transition","opacity","body","appendChild","setTimeout","remove","QxsSubjectSingle","LitElement","constructor","super","arguments","this","orderIndex","isEdit","isSave","isSet","isKey","showAction","showAnalysis","type","answerCheckType","examAnswerRelationType","richTextContent","analysis","leastAnswerCount","examExpand","customId","examId","_answers","title","isCorrect","_title","_analysis","_richText","_showRichText","_leastAnswerCount","_answerCheckType","_orderList","_resultDialogOpen","_resultDialogIndex","_resultDialogValue","_sortDropdownOpen","TITLE_MAX","ANSWER_MAX","_handleDocumentClick","e","path","composedPath","wrapper","shadowRoot","querySelector","includes","requestUpdate","answerList","v","arr","Array","isArray","length","map","a","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","updated","changed","has","_syncProps","_syncExamExpand","ids","split","id","answer","find","answerId","toString","String","fromCharCode","filter","Boolean","_emit","name","detail","dispatchEvent","CustomEvent","bubbles","composed","_label","i","_titlePlaceholder","_setCorrect","item","val","forEach","_onTitleInput","target","value","slice","_onAnswerInput","idx","_addAnswer","customAnswerId","uid","_deleteAnswer","index","_","_toggleSortItem","letter","indexOf","l","_removeSortItem","_getSortOrder","pos","_openResultDialog","resultItem","_saveResultDialog","_renderResultDialog","stopPropagation","_save","stopImmediatePropagation","isSetCorrectAnswer","correctAnswerCount","trim","Set","size","answers","charCodeAt","join","examRichTextContent","_renderPreview","typeSuffix","answerRelations","_renderEdit","Number","from","Math","max","n","checked","getContent","render","styles","css","__decorateClass","property","attribute","prototype","state","safeCustomElement"],"mappings":"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"}