@qxs-bns/components 0.0.92 → 0.0.94

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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/es/answer-container/answer-container.mjs +65 -0
  3. package/es/answer-container/answer-container.mjs.map +1 -0
  4. package/es/answer-container/clone.mjs +2 -0
  5. package/es/answer-container/clone.mjs.map +1 -0
  6. package/es/answer-container/normalize.mjs +2 -0
  7. package/es/answer-container/normalize.mjs.map +1 -0
  8. package/es/answer-container/runtime-blank-fill.mjs +39 -0
  9. package/es/answer-container/runtime-blank-fill.mjs.map +1 -0
  10. package/es/answer-container/runtime-choice.mjs +38 -0
  11. package/es/answer-container/runtime-choice.mjs.map +1 -0
  12. package/es/answer-container/runtime-question-base.mjs +43 -0
  13. package/es/answer-container/runtime-question-base.mjs.map +1 -0
  14. package/es/answer-container/runtime-scale.mjs +36 -0
  15. package/es/answer-container/runtime-scale.mjs.map +1 -0
  16. package/es/answer-container/runtime-text-fill.mjs +19 -0
  17. package/es/answer-container/runtime-text-fill.mjs.map +1 -0
  18. package/es/answer-container/styles.mjs +468 -0
  19. package/es/answer-container/styles.mjs.map +1 -0
  20. package/es/entry-answer-container.mjs +2 -0
  21. package/es/entry-answer-container.mjs.map +1 -0
  22. package/es/entry-video-player.mjs +2 -0
  23. package/es/entry-video-player.mjs.map +1 -0
  24. package/es/index.mjs +1 -1
  25. package/es/node_modules/.pnpm/xgplayer@3.0.26_core-js@3.45.0/node_modules/xgplayer/dist/index.min.css.mjs +2 -0
  26. package/es/node_modules/.pnpm/xgplayer@3.0.26_core-js@3.45.0/node_modules/xgplayer/dist/index.min.css.mjs.map +1 -0
  27. package/es/video-player.mjs +3 -0
  28. package/es/video-player.mjs.map +1 -0
  29. package/es/video-player.theme.mjs +111 -0
  30. package/es/video-player.theme.mjs.map +1 -0
  31. package/lib/answer-container/answer-container.cjs +65 -0
  32. package/lib/answer-container/answer-container.cjs.map +1 -0
  33. package/lib/answer-container/clone.cjs +2 -0
  34. package/lib/answer-container/clone.cjs.map +1 -0
  35. package/lib/answer-container/normalize.cjs +2 -0
  36. package/lib/answer-container/normalize.cjs.map +1 -0
  37. package/lib/answer-container/runtime-blank-fill.cjs +39 -0
  38. package/lib/answer-container/runtime-blank-fill.cjs.map +1 -0
  39. package/lib/answer-container/runtime-choice.cjs +38 -0
  40. package/lib/answer-container/runtime-choice.cjs.map +1 -0
  41. package/lib/answer-container/runtime-question-base.cjs +43 -0
  42. package/lib/answer-container/runtime-question-base.cjs.map +1 -0
  43. package/lib/answer-container/runtime-scale.cjs +36 -0
  44. package/lib/answer-container/runtime-scale.cjs.map +1 -0
  45. package/lib/answer-container/runtime-text-fill.cjs +19 -0
  46. package/lib/answer-container/runtime-text-fill.cjs.map +1 -0
  47. package/lib/answer-container/styles.cjs +468 -0
  48. package/lib/answer-container/styles.cjs.map +1 -0
  49. package/lib/entry-answer-container.cjs +2 -0
  50. package/lib/entry-answer-container.cjs.map +1 -0
  51. package/lib/entry-video-player.cjs +2 -0
  52. package/lib/entry-video-player.cjs.map +1 -0
  53. package/lib/index.cjs +1 -1
  54. package/lib/node_modules/.pnpm/xgplayer@3.0.26_core-js@3.45.0/node_modules/xgplayer/dist/index.min.css.cjs +2 -0
  55. package/lib/node_modules/.pnpm/xgplayer@3.0.26_core-js@3.45.0/node_modules/xgplayer/dist/index.min.css.cjs.map +1 -0
  56. package/lib/video-player.cjs +3 -0
  57. package/lib/video-player.cjs.map +1 -0
  58. package/lib/video-player.theme.cjs +111 -0
  59. package/lib/video-player.theme.cjs.map +1 -0
  60. package/package.json +14 -2
  61. package/types/answer-container/answer-container.d.ts +26 -0
  62. package/types/answer-container/clone.d.ts +1 -0
  63. package/types/answer-container/index.d.ts +12 -0
  64. package/types/answer-container/normalize.d.ts +3 -0
  65. package/types/answer-container/runtime-blank-fill.d.ts +35 -0
  66. package/types/answer-container/runtime-choice.d.ts +44 -0
  67. package/types/answer-container/runtime-question-base.d.ts +39 -0
  68. package/types/answer-container/runtime-scale.d.ts +36 -0
  69. package/types/answer-container/runtime-text-fill.d.ts +32 -0
  70. package/types/answer-container/styles.d.ts +1 -0
  71. package/types/answer-container/types.d.ts +40 -0
  72. package/types/entry-answer-container.d.ts +2 -0
  73. package/types/entry-video-player.d.ts +2 -0
  74. package/types/index.d.ts +2 -0
  75. package/types/video-player.d.ts +44 -0
  76. package/types/video-player.theme.d.ts +12 -0
  77. package/types/video-player.types.d.ts +49 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 qxs-bns
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,65 @@
1
+ import{LitElement as S,html as l}from"lit";import{property as a,state as p}from"lit/decorators.js";import{safeCustomElement as g}from"../base/define.mjs";import{emitSubjectEvent as f}from"../subject/shared-methods.mjs";import{normalizeAnswerContainerList as d,addTitleNumber as c}from"./normalize.mjs";import{answerContainerStyles as R}from"./styles.mjs";var $=Object.defineProperty,b=Object.getOwnPropertyDescriptor,n=(e,s,t,r)=>{for(var i=r>1?void 0:r?b(s,t):s,h=e.length-1,m;h>=0;h--)(m=e[h])&&(i=(r?m(s,t,i):m(i))||i);return r&&i&&$(s,t,i),i};function w(e){return`${e.examId??""}::${e.examIndex??""}`}function u(e){const s=e?.submitAnswer;return s!=null&&String(s).length>0}let o=class extends S{constructor(){super(...arguments),this.list=[],this.disabled=!1,this.type=!0,this.isShowCorrect=!1,this.isShowBg=!1,this.isShowProgress=!1,this.showSingleRowScaleTitle=!1,this.themeName="default",this.beforeChange=()=>!0,this.answerRowRelationExamAnswerRenderer=null,this._list=[],this._draftRowKeys=new Set}createRenderRoot(){return this}willUpdate(e){if(e.has("list")){const s=d(this.list);this._list=s.map(t=>{const r=this._list.find(h=>w(h)===w(t));if(!r)return t;const i=w(t);return this._draftRowKeys.has(i)&&!u(t)&&u(r)?{...r,...t,submitAnswer:r.submitAnswer,submitAnswerObj:r.submitAnswerObj}:(this._draftRowKeys.has(i)&&u(t)&&this._draftRowKeys.delete(i),t)})}}addTitleNumber(e){return c(e)}reset(){this._draftRowKeys.clear(),this._list=d(this._list.map(e=>({...e,submitAnswer:null})))}async onSubmit(){const e=Array.from(this.querySelectorAll("qxs-answer-runtime-choice, qxs-answer-runtime-blank-fill, qxs-answer-runtime-text-fill, qxs-answer-runtime-scale"));return Promise.all(e.map(s=>s.onSubmit()))}_onRowChange(e){this._draftRowKeys.delete(w(e)),this._list=this._list.map(s=>{const t=String(s.examId||"")===String(e.examId||""),r=String(s.examIndex||"")===String(e.examIndex||"");return t||r?{...s,...e}:s}),f(this,"on-change",e)}_onRowDraftChange(e){const s=w(e);this._draftRowKeys.add(s),this._list=this._list.map(t=>{const r=String(t.examId||"")===String(e.examId||""),i=String(t.examIndex||"")===String(e.examIndex||"");return r||i?{...t,...e}:t})}_renderItem(e){const s=e.examTypeEnum||"single";return s==="blank_fill"?l`
2
+ <qxs-answer-runtime-blank-fill
3
+ .item=${e}
4
+ .disabled=${this.disabled}
5
+ .type=${this.type}
6
+ .isShowCorrect=${this.isShowCorrect}
7
+ .isShowBg=${this.isShowBg}
8
+ .isShowProgress=${this.isShowProgress}
9
+ .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}
10
+ .themeName=${this.themeName}
11
+ .beforeChange=${this.beforeChange}
12
+ .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}
13
+ @runtime-input=${t=>this._onRowDraftChange(t.detail)}
14
+ @on-change=${t=>this._onRowChange(t.detail)}
15
+ ></qxs-answer-runtime-blank-fill>
16
+ `:s==="text_fill"?l`
17
+ <qxs-answer-runtime-text-fill
18
+ .item=${e}
19
+ .disabled=${this.disabled}
20
+ .type=${this.type}
21
+ .isShowCorrect=${this.isShowCorrect}
22
+ .isShowBg=${this.isShowBg}
23
+ .isShowProgress=${this.isShowProgress}
24
+ .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}
25
+ .themeName=${this.themeName}
26
+ .beforeChange=${this.beforeChange}
27
+ .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}
28
+ @runtime-input=${t=>this._onRowDraftChange(t.detail)}
29
+ @on-change=${t=>this._onRowChange(t.detail)}
30
+ ></qxs-answer-runtime-text-fill>
31
+ `:s==="scale"?l`
32
+ <qxs-answer-runtime-scale
33
+ .item=${e}
34
+ .disabled=${this.disabled}
35
+ .type=${this.type}
36
+ .isShowCorrect=${this.isShowCorrect}
37
+ .isShowBg=${this.isShowBg}
38
+ .isShowProgress=${this.isShowProgress}
39
+ .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}
40
+ .themeName=${this.themeName}
41
+ .beforeChange=${this.beforeChange}
42
+ .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}
43
+ @on-change=${t=>this._onRowChange(t.detail)}
44
+ ></qxs-answer-runtime-scale>
45
+ `:l`
46
+ <qxs-answer-runtime-choice
47
+ .item=${e}
48
+ .disabled=${this.disabled}
49
+ .type=${this.type}
50
+ .isShowCorrect=${this.isShowCorrect}
51
+ .isShowBg=${this.isShowBg}
52
+ .isShowProgress=${this.isShowProgress}
53
+ .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}
54
+ .themeName=${this.themeName}
55
+ .beforeChange=${this.beforeChange}
56
+ .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}
57
+ @on-change=${t=>this._onRowChange(t.detail)}
58
+ ></qxs-answer-runtime-choice>
59
+ `}render(){return l`
60
+ <style>${R}</style>
61
+ <div class="qxs-answer-container ${this.themeName}">
62
+ ${this._list.map(e=>this._renderItem(e))}
63
+ </div>
64
+ `}};n([a({attribute:!1})],o.prototype,"list",2);n([a({type:Boolean})],o.prototype,"disabled",2);n([a({type:Boolean})],o.prototype,"type",2);n([a({type:Boolean,attribute:"is-show-correct"})],o.prototype,"isShowCorrect",2);n([a({type:Boolean,attribute:"is-show-bg"})],o.prototype,"isShowBg",2);n([a({type:Boolean,attribute:"is-show-progress"})],o.prototype,"isShowProgress",2);n([a({type:Boolean,attribute:"show-single-row-scale-title"})],o.prototype,"showSingleRowScaleTitle",2);n([a({type:String,attribute:"theme-name"})],o.prototype,"themeName",2);n([a({attribute:!1})],o.prototype,"beforeChange",2);n([a({attribute:!1})],o.prototype,"answerRowRelationExamAnswerRenderer",2);n([p()],o.prototype,"_list",2);o=n([g("qxs-answer-container")],o);export{o as QxsAnswerContainer};
65
+ //# sourceMappingURL=answer-container.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-container.mjs","sources":["../../../../packages/components/src/answer-container/answer-container.ts"],"sourcesContent":["import { html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport { addTitleNumber, normalizeAnswerContainerList } from './normalize'\nimport { answerContainerStyles } from './styles'\nimport type { AnswerRowRelationExamAnswerRenderer, AnswerThemeName, LegacyAnswerContainerItem } from './types'\n\ntype RuntimeElement = HTMLElement & {\n item: LegacyAnswerContainerItem\n type?: boolean\n onSubmit: () => Promise<LegacyAnswerContainerItem>\n reset: () => void\n}\n\nfunction rowKeyOf(item: LegacyAnswerContainerItem) {\n return `${item.examId ?? ''}::${item.examIndex ?? ''}`\n}\n\nfunction hasMeaningfulSubmitAnswer(item: LegacyAnswerContainerItem | undefined) {\n const value = item?.submitAnswer\n return value != null && String(value).length > 0\n}\n\n@safeCustomElement('qxs-answer-container')\nexport class QxsAnswerContainer extends LitElement {\n createRenderRoot() {\n return this\n }\n\n @property({ attribute: false }) list: LegacyAnswerContainerItem[] | LegacyAnswerContainerItem | null = []\n @property({ type: Boolean }) disabled = false\n @property({ type: Boolean }) type = true\n @property({ type: Boolean, attribute: 'is-show-correct' }) isShowCorrect = false\n @property({ type: Boolean, attribute: 'is-show-bg' }) isShowBg = false\n @property({ type: Boolean, attribute: 'is-show-progress' }) isShowProgress = false\n @property({ type: Boolean, attribute: 'show-single-row-scale-title' }) showSingleRowScaleTitle = false\n @property({ type: String, attribute: 'theme-name' }) themeName: AnswerThemeName = 'default'\n @property({ attribute: false }) beforeChange: (row: LegacyAnswerContainerItem, answerItem?: any) => boolean = () => true\n @property({ attribute: false }) answerRowRelationExamAnswerRenderer: AnswerRowRelationExamAnswerRenderer | null = null\n\n @state() private _list: LegacyAnswerContainerItem[] = []\n private _draftRowKeys = new Set<string>()\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('list')) {\n const nextList = normalizeAnswerContainerList(this.list)\n this._list = nextList.map((nextItem) => {\n const currentItem = this._list.find(item => rowKeyOf(item) === rowKeyOf(nextItem))\n if (!currentItem) {\n return nextItem\n }\n\n const rowKey = rowKeyOf(nextItem)\n if (this._draftRowKeys.has(rowKey) && !hasMeaningfulSubmitAnswer(nextItem) && hasMeaningfulSubmitAnswer(currentItem)) {\n return {\n ...currentItem,\n ...nextItem,\n submitAnswer: currentItem.submitAnswer,\n submitAnswerObj: currentItem.submitAnswerObj,\n }\n }\n\n if (this._draftRowKeys.has(rowKey) && hasMeaningfulSubmitAnswer(nextItem)) {\n this._draftRowKeys.delete(rowKey)\n }\n\n return nextItem\n })\n }\n }\n\n addTitleNumber(list: LegacyAnswerContainerItem[]) {\n return addTitleNumber(list)\n }\n\n reset() {\n this._draftRowKeys.clear()\n this._list = normalizeAnswerContainerList(\n this._list.map(item => ({ ...item, submitAnswer: null })),\n )\n }\n\n async onSubmit() {\n const children = Array.from(this.querySelectorAll<RuntimeElement>(\n 'qxs-answer-runtime-choice, qxs-answer-runtime-blank-fill, qxs-answer-runtime-text-fill, qxs-answer-runtime-scale',\n ))\n return Promise.all(children.map(child => child.onSubmit()))\n }\n\n private _onRowChange(changedItem: LegacyAnswerContainerItem) {\n this._draftRowKeys.delete(rowKeyOf(changedItem))\n this._list = this._list.map((item) => {\n const sameExamId = String(item.examId || '') === String(changedItem.examId || '')\n const sameExamIndex = String(item.examIndex || '') === String(changedItem.examIndex || '')\n return sameExamId || sameExamIndex ? { ...item, ...changedItem } : item\n })\n\n emitSubjectEvent(this, 'on-change', changedItem)\n }\n\n private _onRowDraftChange(changedItem: LegacyAnswerContainerItem) {\n const rowKey = rowKeyOf(changedItem)\n this._draftRowKeys.add(rowKey)\n this._list = this._list.map((item) => {\n const sameExamId = String(item.examId || '') === String(changedItem.examId || '')\n const sameExamIndex = String(item.examIndex || '') === String(changedItem.examIndex || '')\n return sameExamId || sameExamIndex ? { ...item, ...changedItem } : item\n })\n }\n\n private _renderItem(item: LegacyAnswerContainerItem) {\n const examTypeEnum = item.examTypeEnum || 'single'\n\n if (examTypeEnum === 'blank_fill') {\n return html`\n <qxs-answer-runtime-blank-fill\n .item=${item}\n .disabled=${this.disabled}\n .type=${this.type}\n .isShowCorrect=${this.isShowCorrect}\n .isShowBg=${this.isShowBg}\n .isShowProgress=${this.isShowProgress}\n .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}\n .themeName=${this.themeName}\n .beforeChange=${this.beforeChange}\n .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}\n @runtime-input=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowDraftChange(event.detail)}\n @on-change=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowChange(event.detail)}\n ></qxs-answer-runtime-blank-fill>\n `\n }\n\n if (examTypeEnum === 'text_fill') {\n return html`\n <qxs-answer-runtime-text-fill\n .item=${item}\n .disabled=${this.disabled}\n .type=${this.type}\n .isShowCorrect=${this.isShowCorrect}\n .isShowBg=${this.isShowBg}\n .isShowProgress=${this.isShowProgress}\n .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}\n .themeName=${this.themeName}\n .beforeChange=${this.beforeChange}\n .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}\n @runtime-input=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowDraftChange(event.detail)}\n @on-change=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowChange(event.detail)}\n ></qxs-answer-runtime-text-fill>\n `\n }\n\n if (examTypeEnum === 'scale') {\n return html`\n <qxs-answer-runtime-scale\n .item=${item}\n .disabled=${this.disabled}\n .type=${this.type}\n .isShowCorrect=${this.isShowCorrect}\n .isShowBg=${this.isShowBg}\n .isShowProgress=${this.isShowProgress}\n .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}\n .themeName=${this.themeName}\n .beforeChange=${this.beforeChange}\n .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}\n @on-change=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowChange(event.detail)}\n ></qxs-answer-runtime-scale>\n `\n }\n\n return html`\n <qxs-answer-runtime-choice\n .item=${item}\n .disabled=${this.disabled}\n .type=${this.type}\n .isShowCorrect=${this.isShowCorrect}\n .isShowBg=${this.isShowBg}\n .isShowProgress=${this.isShowProgress}\n .showSingleRowScaleTitle=${this.showSingleRowScaleTitle}\n .themeName=${this.themeName}\n .beforeChange=${this.beforeChange}\n .answerRowRelationExamAnswerRenderer=${this.answerRowRelationExamAnswerRenderer}\n @on-change=${(event: CustomEvent<LegacyAnswerContainerItem>) => this._onRowChange(event.detail)}\n ></qxs-answer-runtime-choice>\n `\n }\n\n render() {\n return html`\n <style>${answerContainerStyles}</style>\n <div class=\"qxs-answer-container ${this.themeName}\">\n ${this._list.map(item => this._renderItem(item))}\n </div>\n `\n }\n}\n\nexport function register() {}\n"],"names":["rowKeyOf","item","hasMeaningfulSubmitAnswer","value","QxsAnswerContainer","LitElement","changed","nextList","normalizeAnswerContainerList","nextItem","currentItem","rowKey","list","addTitleNumber","children","child","changedItem","sameExamId","sameExamIndex","emitSubjectEvent","examTypeEnum","html","event","answerContainerStyles","__decorateClass","property","state","safeCustomElement"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ function e(t,r){const n=[];r.set(t,n);for(const o of t)n.push(c(o,r));return n}function i(t,r){const n={};r.set(t,n);for(const o of Reflect.ownKeys(t))Object.getOwnPropertyDescriptor(t,o)?.enumerable&&(n[o]=c(t[o],r));return n}function c(t,r=new WeakMap){return t==null||typeof t!="object"?t:t instanceof Date?new Date(t.getTime()):r.has(t)?r.get(t):Array.isArray(t)?e(t,r):i(t,r)}export{c as cloneAnswerValue};
2
+ //# sourceMappingURL=clone.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.mjs","sources":["../../../../packages/components/src/answer-container/clone.ts"],"sourcesContent":["function cloneArray(value: unknown[], seen: WeakMap<object, unknown>) {\n const output: unknown[] = []\n seen.set(value, output)\n for (const item of value) {\n output.push(cloneAnswerValue(item, seen))\n }\n return output\n}\n\nfunction cloneObject(value: Record<PropertyKey, unknown>, seen: WeakMap<object, unknown>) {\n const output: Record<PropertyKey, unknown> = {}\n seen.set(value, output)\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (!descriptor?.enumerable) {\n continue\n }\n output[key] = cloneAnswerValue(value[key], seen)\n }\n\n return output\n}\n\nexport function cloneAnswerValue<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n if (value == null || typeof value !== 'object') {\n return value\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T\n }\n\n if (seen.has(value as object)) {\n return seen.get(value as object) as T\n }\n\n if (Array.isArray(value)) {\n return cloneArray(value, seen) as T\n }\n\n return cloneObject(value as Record<PropertyKey, unknown>, seen) as T\n}\n"],"names":["cloneArray","value","seen","output","item","cloneAnswerValue","cloneObject","key"],"mappings":"AAAA,SAASA,EAAWC,EAAkBC,EAAgC,CACpE,MAAMC,EAAoB,CAAA,EAC1BD,EAAK,IAAID,EAAOE,CAAM,EACtB,UAAWC,KAAQH,EACjBE,EAAO,KAAKE,EAAiBD,EAAMF,CAAI,CAAC,EAE1C,OAAOC,CACT,CAEA,SAASG,EAAYL,EAAqCC,EAAgC,CACxF,MAAMC,EAAuC,CAAA,EAC7CD,EAAK,IAAID,EAAOE,CAAM,EAEtB,UAAWI,KAAO,QAAQ,QAAQN,CAAK,EAClB,OAAO,yBAAyBA,EAAOM,CAAG,GAC5C,aAGjBJ,EAAOI,CAAG,EAAIF,EAAiBJ,EAAMM,CAAG,EAAGL,CAAI,GAGjD,OAAOC,CACT,CAEO,SAASE,EAAoBJ,EAAUC,EAAO,IAAI,QAA+B,CACtF,OAAID,GAAS,MAAQ,OAAOA,GAAU,SAC7BA,EAGLA,aAAiB,KACZ,IAAI,KAAKA,EAAM,SAAS,EAG7BC,EAAK,IAAID,CAAe,EACnBC,EAAK,IAAID,CAAe,EAG7B,MAAM,QAAQA,CAAK,EACdD,EAAWC,EAAOC,CAAI,EAGxBI,EAAYL,EAAuCC,CAAI,CAChE"}
@@ -0,0 +1,2 @@
1
+ import{cloneAnswerValue as a}from"./clone.mjs";function o(r){return a(r)}function s(r){const n=Number(r??0);return Number.isFinite(n)?n:0}function m(r){let n=0;return r.map(t=>{const e=o(t);return e.examTypeEnum&&(n+=1,e.titleIndex=e.titleIndex||n,e.answers=Array.isArray(e.answers)?e.answers:[]),e})}function c(r){const t=(Array.isArray(r)?r:r?[r]:[]).map(e=>o(e)).sort((e,i)=>s(e.examIndex)-s(i.examIndex));return m(t)}export{m as addTitleNumber,c as normalizeAnswerContainerList};
2
+ //# sourceMappingURL=normalize.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.mjs","sources":["../../../../packages/components/src/answer-container/normalize.ts"],"sourcesContent":["import type { LegacyAnswerContainerItem } from './types'\nimport { cloneAnswerValue } from './clone'\n\nfunction cloneItem<T>(value: T): T {\n return cloneAnswerValue(value)\n}\n\nfunction toNumber(value: unknown) {\n const num = Number(value ?? 0)\n return Number.isFinite(num) ? num : 0\n}\n\nexport function addTitleNumber(list: LegacyAnswerContainerItem[]): LegacyAnswerContainerItem[] {\n let currentTitleIndex = 0\n\n return list.map((item) => {\n const next = cloneItem(item)\n\n if (next.examTypeEnum) {\n currentTitleIndex += 1\n next.titleIndex = next.titleIndex || currentTitleIndex\n next.answers = Array.isArray(next.answers) ? next.answers : []\n }\n\n return next\n })\n}\n\nexport function normalizeAnswerContainerList(\n input: LegacyAnswerContainerItem[] | LegacyAnswerContainerItem | null | undefined,\n): LegacyAnswerContainerItem[] {\n const list = Array.isArray(input)\n ? input\n : input\n ? [input]\n : []\n\n const sorted = list\n .map(item => cloneItem(item))\n .sort((a, b) => toNumber(a.examIndex) - toNumber(b.examIndex))\n\n return addTitleNumber(sorted)\n}\n"],"names":["cloneItem","value","cloneAnswerValue","toNumber","num","addTitleNumber","list","currentTitleIndex","item","next","normalizeAnswerContainerList","input","sorted","a","b"],"mappings":"+CAGA,SAASA,EAAaC,EAAa,CACjC,OAAOC,EAAiBD,CAAK,CAC/B,CAEA,SAASE,EAASF,EAAgB,CAChC,MAAMG,EAAM,OAAOH,GAAS,CAAC,EAC7B,OAAO,OAAO,SAASG,CAAG,EAAIA,EAAM,CACtC,CAEO,SAASC,EAAeC,EAAgE,CAC7F,IAAIC,EAAoB,EAExB,OAAOD,EAAK,IAAKE,GAAS,CACxB,MAAMC,EAAOT,EAAUQ,CAAI,EAE3B,OAAIC,EAAK,eACPF,GAAqB,EACrBE,EAAK,WAAaA,EAAK,YAAcF,EACrCE,EAAK,QAAU,MAAM,QAAQA,EAAK,OAAO,EAAIA,EAAK,QAAU,CAAA,GAGvDA,CACT,CAAC,CACH,CAEO,SAASC,EACdC,EAC6B,CAO7B,MAAMC,GANO,MAAM,QAAQD,CAAK,EAC5BA,EACAA,EACE,CAACA,CAAK,EACN,CAAA,GAGH,OAAYX,EAAUQ,CAAI,CAAC,EAC3B,KAAK,CAACK,EAAGC,IAAMX,EAASU,EAAE,SAAS,EAAIV,EAASW,EAAE,SAAS,CAAC,EAE/D,OAAOT,EAAeO,CAAM,CAC9B"}
@@ -0,0 +1,39 @@
1
+ import{html as i}from"lit";import{state as m}from"lit/decorators.js";import{safeCustomElement as _}from"../base/define.mjs";import{emitSubjectEvent as h}from"../subject/shared-methods.mjs";import{AnswerRuntimeElement as c}from"./runtime-question-base.mjs";var p=Object.defineProperty,d=Object.getOwnPropertyDescriptor,o=(t,s,e,n)=>{for(var r=n>1?void 0:n?d(s,e):s,l=t.length-1,a;l>=0;l--)(a=t[l])&&(r=(n?a(s,e,r):a(r))||r);return n&&r&&p(s,e,r),r};const v="<filter></filter>";function w(t,s){return{row:t,message:s}}function f(t){const s=String(t.title||"").match(/<filter><\/filter>/g)?.length||0,e=Array.isArray(t.answers)?t.answers.length:0;return Math.max(s,e,1)}function b(t){return t.split(v)}let u=class extends c{constructor(){super(...arguments),this._values=[]}syncFromItem(){const t=f(this._item),s=String(this._item.submitAnswer||"").split(",");this._values=Array.from({length:t},(e,n)=>s[n]||"")}_setValue(t,s){this.disabled||!this.beforeChange(this._item,this._item)||(this._values=this._values.map((e,n)=>n===t?s:e),h(this,"runtime-input",{...this._item,submitAnswer:this._values.join(",")}))}_renderInput(t){const s=this._values[t]||"";return i`
2
+ <input
3
+ class="input mgn-l10"
4
+ .value=${s}
5
+ aria-label=${`第 ${t+1} 空`}
6
+ ?disabled=${this.disabled||!this.type}
7
+ @input=${e=>this._setValue(t,e.target.value)}
8
+ />
9
+ `}_renderTitleWithMasks(){const t=String(this._item.title||""),s=b(t);return s.length>1?i`
10
+ <span class="qxs-answer-runtime__blank-flow">
11
+ <span class="qxs-answer-runtime__blank-text">${this._item.titleIndex?`${this._item.titleIndex}. `:""}${s[0]||""}</span>
12
+ ${s.slice(1).map((n,r)=>i`
13
+ <span class="qxs-answer-runtime__blank-mask">
14
+ <span class="qxs-answer-runtime__blank-mask-index">${r+1}</span>
15
+ </span>
16
+ ${n?i`<span class="qxs-answer-runtime__blank-text">${n}</span>`:""}
17
+ `)}
18
+ </span>
19
+ `:null}_renderInputRows(){return i`
20
+ <div class="qxs-answer-runtime__answers">
21
+ ${this._values.map((t,s)=>i`
22
+ <div class="question-input-box">
23
+ <div class="placeholder-box">
24
+ <span class="required-span">*</span>
25
+ </div>
26
+ <div class="question-input-box__index">${s+1}.</div>
27
+ ${this._renderInput(s)}
28
+ </div>
29
+ `)}
30
+ </div>
31
+ `}_renderReview(){if(!this.disabled||!this.isShowCorrect)return null;const t=this.resultAnswersFromExamResults(),s=String(this._item.analysis||"").trim();return i`
32
+ <div class="qxs-answer-runtime__result">
33
+ ${t.length?t.map((e,n)=>i`
34
+ <div class="qxs-answer-runtime__result-line">填空${n+1}参考答案为:${e?.correctAnswer||""}</div>
35
+ `):i`<span class="qxs-answer-runtime__result-line is-success">本题暂无参考答案</span>`}
36
+ ${s?i`<div class="qxs-answer-runtime__result-line is-muted">答题解析:${s}</div>`:""}
37
+ </div>
38
+ `}async onSubmit(){if(!this._values.length||this._values.some(s=>!String(s||"").trim()))throw w(this._item,"请填写答案");const t=this._values.join(",");return{...this._item,submitAnswer:t,submitAnswerObj:{intVal:this._item.examId,stringVal:t}}}reset(){this.updateItem(this.cloneItem()),this.syncFromItem()}render(){const t=this._renderTitleWithMasks();return this.renderShell({shellClassName:"qxs-answer-runtime-blank-fill blank_fill",titleContent:this.renderTitleBlock(t||void 0),answerContent:this._renderInputRows(),resultContent:this._renderReview(),footerContent:this.renderCasePracticeFooter({...this._item,submitAnswer:this._values.join(",")})})}};o([m()],u.prototype,"_values",2);u=o([_("qxs-answer-runtime-blank-fill")],u);export{u as QxsAnswerRuntimeBlankFill};
39
+ //# sourceMappingURL=runtime-blank-fill.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-blank-fill.mjs","sources":["../../../../packages/components/src/answer-container/runtime-blank-fill.ts"],"sourcesContent":["import { html } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport { AnswerRuntimeElement } from './runtime-question-base'\nimport type { AnswerSubmitError } from './types'\n\nconst FILTER_TOKEN = '<filter></filter>'\n\nfunction toError(row: any, message: string): AnswerSubmitError {\n return { row, message }\n}\n\nfunction blankCountFromItem(item: Record<string, any>) {\n const titleCount = String(item.title || '').match(/<filter><\\/filter>/g)?.length || 0\n const answerCount = Array.isArray(item.answers) ? item.answers.length : 0\n return Math.max(titleCount, answerCount, 1)\n}\n\nfunction splitFilterTitle(title: string) {\n return title.split(FILTER_TOKEN)\n}\n\n@safeCustomElement('qxs-answer-runtime-blank-fill')\nexport class QxsAnswerRuntimeBlankFill extends AnswerRuntimeElement {\n @state() private _values: string[] = []\n\n protected syncFromItem() {\n const count = blankCountFromItem(this._item)\n const current = String(this._item.submitAnswer || '').split(',')\n this._values = Array.from({ length: count }, (_, index) => current[index] || '')\n }\n\n private _setValue(index: number, value: string) {\n if (this.disabled || !this.beforeChange(this._item, this._item)) {\n return\n }\n this._values = this._values.map((current, currentIndex) => currentIndex === index ? value : current)\n emitSubjectEvent(this, 'runtime-input', {\n ...this._item,\n submitAnswer: this._values.join(','),\n })\n }\n\n private _renderInput(index: number) {\n const value = this._values[index] || ''\n return html`\n <input\n class=\"input mgn-l10\"\n .value=${value}\n aria-label=${`第 ${index + 1} 空`}\n ?disabled=${this.disabled || !this.type}\n @input=${(event: Event) => this._setValue(index, (event.target as HTMLInputElement).value)}\n />\n `\n }\n\n private _renderTitleWithMasks() {\n const title = String(this._item.title || '')\n const segments = splitFilterTitle(title)\n const hasFilter = segments.length > 1\n\n if (!hasFilter) {\n return null\n }\n\n return html`\n <span class=\"qxs-answer-runtime__blank-flow\">\n <span class=\"qxs-answer-runtime__blank-text\">${this._item.titleIndex ? `${this._item.titleIndex}. ` : ''}${segments[0] || ''}</span>\n ${segments.slice(1).map((segment, index) => html`\n <span class=\"qxs-answer-runtime__blank-mask\">\n <span class=\"qxs-answer-runtime__blank-mask-index\">${index + 1}</span>\n </span>\n ${segment ? html`<span class=\"qxs-answer-runtime__blank-text\">${segment}</span>` : ''}\n `)}\n </span>\n `\n }\n\n private _renderInputRows() {\n return html`\n <div class=\"qxs-answer-runtime__answers\">\n ${this._values.map((value, index) => html`\n <div class=\"question-input-box\">\n <div class=\"placeholder-box\">\n <span class=\"required-span\">*</span>\n </div>\n <div class=\"question-input-box__index\">${index + 1}.</div>\n ${this._renderInput(index)}\n </div>\n `)}\n </div>\n `\n }\n\n private _renderReview() {\n if (!this.disabled || !this.isShowCorrect) {\n return null\n }\n\n const results = this.resultAnswersFromExamResults()\n const analysis = String(this._item.analysis || '').trim()\n\n return html`\n <div class=\"qxs-answer-runtime__result\">\n ${results.length\n ? results.map((result: any, index: number) => html`\n <div class=\"qxs-answer-runtime__result-line\">填空${index + 1}参考答案为:${result?.correctAnswer || ''}</div>\n `)\n : html`<span class=\"qxs-answer-runtime__result-line is-success\">本题暂无参考答案</span>`}\n ${analysis ? html`<div class=\"qxs-answer-runtime__result-line is-muted\">答题解析:${analysis}</div>` : ''}\n </div>\n `\n }\n\n async onSubmit() {\n if (!this._values.length || this._values.some(item => !String(item || '').trim())) {\n throw toError(this._item, '请填写答案')\n }\n\n const submitAnswer = this._values.join(',')\n return {\n ...this._item,\n submitAnswer,\n submitAnswerObj: {\n intVal: this._item.examId,\n stringVal: submitAnswer,\n },\n }\n }\n\n reset() {\n this.updateItem(this.cloneItem())\n this.syncFromItem()\n }\n\n render() {\n const titleWithMasks = this._renderTitleWithMasks()\n\n return this.renderShell({\n shellClassName: 'qxs-answer-runtime-blank-fill blank_fill',\n titleContent: this.renderTitleBlock(titleWithMasks || undefined),\n answerContent: this._renderInputRows(),\n resultContent: this._renderReview(),\n footerContent: this.renderCasePracticeFooter({\n ...this._item,\n submitAnswer: this._values.join(','),\n }),\n })\n }\n}\n\nexport function register() {}\n"],"names":["FILTER_TOKEN","toError","row","message","blankCountFromItem","item","titleCount","answerCount","splitFilterTitle","title","QxsAnswerRuntimeBlankFill","AnswerRuntimeElement","count","current","_","index","value","currentIndex","emitSubjectEvent","html","event","segments","segment","results","analysis","result","submitAnswer","titleWithMasks","__decorateClass","state","safeCustomElement"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import{html as a,nothing as u}from"lit";import{property as p,state as _}from"lit/decorators.js";import{safeCustomElement as w}from"../base/define.mjs";import{emitSubjectEvent as m}from"../subject/shared-methods.mjs";import{AnswerRuntimeElement as f}from"./runtime-question-base.mjs";import{cloneAnswerValue as y}from"./clone.mjs";var x=Object.defineProperty,I=Object.getOwnPropertyDescriptor,l=(t,e,s,r)=>{for(var n=r>1?void 0:r?I(e,s):e,o=t.length-1,i;o>=0;o--)(i=t[o])&&(n=(r?i(e,s,n):i(n))||n);return r&&n&&x(e,s,n),n};function d(t,e){return{row:t,message:e}}let h=class extends f{constructor(){super(...arguments),this.examType="single",this._selectedIds=new Set,this._sortOrder=[]}syncFromItem(){this.examType=this._item.examTypeEnum||"single";const e=String(this._item.submitAnswer||"").split(",").map(s=>s.trim()).filter(Boolean);this._selectedIds=new Set(e),this._sortOrder=this.examType==="sort"?[...e]:[]}_isSelected(t){return this._selectedIds.has(this.answerIdOf(t))}_toggle(t){if(this.disabled||!this.beforeChange(this._item,t))return;const e=this.answerIdOf(t);if(e){if(this.examType==="single"){const s=this._selectedIds.has(e);this._selectedIds=s?new Set:new Set([e])}else if(this.examType==="multiple"){const s=new Set(this._selectedIds);s.has(e)?s.delete(e):s.add(e),this._selectedIds=s}else this._sortOrder.includes(e)?this._sortOrder=this._sortOrder.filter(s=>s!==e):this._sortOrder=[...this._sortOrder,e],this._selectedIds=new Set(this._sortOrder);m(this,"on-change",this._snapshotRow())}}_currentValue(){return this.examType==="sort"?this._sortOrder.join(","):Array.from(this._selectedIds).join(",")}_validate(){const t=this.examType==="sort"?this._sortOrder.length:this._selectedIds.size,e=Number(this._item.leastAnswerCount||0);if(e>0&&t<e){const s=this.examType==="multiple"?"多选题":"排序题";return d(this._item,`${s}至少选${e}项`)}return t<1?d(this._item,this.examType==="sort"?"请先完成答题":"请选择答案"):null}_selectedSummary(){const t=Array.isArray(this._item.answers)?this._item.answers:[];return(this.examType==="sort"?this._sortOrder:Array.from(this._selectedIds)).map(r=>{const n=t.findIndex(o=>this.answerIdOf(o)===r);return n>=0?this.answerLetter(n):""}).filter(Boolean).join("、")}_snapshotAnswers(){return(Array.isArray(this._item.answers)?this._item.answers:[]).map(e=>{const s=this.answerIdOf(e),r=this._sortOrder.indexOf(s)+1;return{...e,isSelect:this._selectedIds.has(s),sortNum:r>0?r:void 0}})}_snapshotRow(){return{...this._item,answers:this._snapshotAnswers(),submitAnswer:this._currentValue()}}_handleRendererChange(t){const e=y(this._snapshotRow()),s=typeof t=="function"?t(e)||e:t||e;this.updateItem(s),this.syncFromItem(),m(this,"on-change",this._snapshotRow())}_correctSummary(){const t=Array.isArray(this._item.answers)?this._item.answers:[],e=this.resultAnswersFromExamResults();return e.length?e.map(s=>{const r=t.findIndex(n=>this.answerIdOf(n)===String(s?.correctAnswer??""));return r>=0?this.answerLetter(r):""}).filter(Boolean).join("、"):t.map((s,r)=>s?.isCorrect?this.answerLetter(r):"").filter(Boolean).join("、")}_renderReview(){if(!this.disabled||!this.isShowCorrect)return null;const t=this._selectedSummary(),e=this._correctSummary(),s=String(this._item.analysis||"").trim();return a`
2
+ <div class="qxs-answer-runtime__result">
3
+ ${t?a`<span class="qxs-answer-runtime__result-line">已选答案:${t}</span>`:""}
4
+ ${e?a`<span class="qxs-answer-runtime__result-line is-danger">本题参考答案为:${e}</span>`:a`<span class="qxs-answer-runtime__result-line is-success">本题暂无参考答案</span>`}
5
+ ${s?a`<div class="qxs-answer-runtime__result-line is-muted">答题解析:${s}</div>`:""}
6
+ </div>
7
+ `}_renderRelationEntry(t){const e=this.answerIdOf(t),s=this._selectedIds.has(e);if(!t?.needRelationExamAnswer||!s)return u;const r=this._snapshotRow(),n=this._snapshotAnswers().find(i=>this.answerIdOf(i)===e)||t,o={answerItem:n,row:r,handleChange:i=>this._handleRendererChange(i)};return this.answerRowRelationExamAnswerRenderer?a`
8
+ <div class="qxs-answer-runtime__relation-entry">
9
+ ${this.answerRowRelationExamAnswerRenderer(o)}
10
+ </div>
11
+ `:a`
12
+ <button
13
+ type="button"
14
+ class="qxs-answer-runtime__relation-action"
15
+ @click=${()=>this.emitRelationExamAnswer("open",n,r)}
16
+ >
17
+ 查看关联题
18
+ </button>
19
+ `}async onSubmit(){const t=this._validate();if(t)throw t;const e=this._currentValue();return{...this._snapshotRow(),submitAnswer:e,submitAnswerObj:{intVal:this._item.examId,stringVal:e}}}reset(){this.updateItem(this.cloneItem()),this.syncFromItem()}render(){const t=Array.isArray(this._item.answers)?this._item.answers:[],e=this.examType==="single"?"radio":"checkbox";return this.renderShell({shellClassName:`qxs-answer-runtime-choice ${this.examType}`,answerContent:a`
20
+ <div class="qxs-answer-runtime__answers">
21
+ ${t.map((s,r)=>{const n=this.answerIdOf(s),o=this.answerLabel(s),i=this._isSelected(s),c=this._sortOrder.indexOf(n)+1;return a`
22
+ <label class="qxs-answer-runtime__choice exam-answer ${this.themeName==="case-practice"?"answer-item":""} ${i?"is-selected":""} ${this.isShowBg||this.themeName==="case-practice"?"has-background bgCol":""}">
23
+ <input
24
+ type=${e}
25
+ name=${String(this._item.examId||this._item.examIndex||"choice")}
26
+ .checked=${i}
27
+ ?disabled=${this.disabled}
28
+ @click=${()=>this._toggle(s)}
29
+ />
30
+ <span>${this.answerLetter(r)}.</span>
31
+ <span>${o}</span>
32
+ ${this.examType==="sort"&&c>0?a`<strong class="sort-num">${c}</strong>`:""}
33
+ </label>
34
+ ${this._renderRelationEntry(s)}
35
+ `})}
36
+ </div>
37
+ `,resultContent:this._renderReview(),footerContent:this.renderCasePracticeFooter(this._snapshotRow())})}};l([p({type:String,attribute:"exam-type"})],h.prototype,"examType",2);l([_()],h.prototype,"_selectedIds",2);l([_()],h.prototype,"_sortOrder",2);h=l([w("qxs-answer-runtime-choice")],h);export{h as QxsAnswerRuntimeChoice};
38
+ //# sourceMappingURL=runtime-choice.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-choice.mjs","sources":["../../../../packages/components/src/answer-container/runtime-choice.ts"],"sourcesContent":["import { html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport { AnswerRuntimeElement } from './runtime-question-base'\nimport type { AnswerSubmitError, LegacyExamType } from './types'\nimport { cloneAnswerValue } from './clone'\n\nfunction toError(row: any, message: string): AnswerSubmitError {\n return { row, message }\n}\n\n@safeCustomElement('qxs-answer-runtime-choice')\nexport class QxsAnswerRuntimeChoice extends AnswerRuntimeElement {\n @property({ type: String, attribute: 'exam-type' }) examType: LegacyExamType = 'single'\n\n @state() private _selectedIds = new Set<string>()\n @state() private _sortOrder: string[] = []\n\n protected syncFromItem() {\n this.examType = (this._item.examTypeEnum as LegacyExamType) || 'single'\n const submitAnswer = String(this._item.submitAnswer || '')\n const ids = submitAnswer.split(',').map(item => item.trim()).filter(Boolean)\n this._selectedIds = new Set(ids)\n this._sortOrder = this.examType === 'sort' ? [...ids] : []\n }\n\n private _isSelected(answer: any) {\n return this._selectedIds.has(this.answerIdOf(answer))\n }\n\n private _toggle(answer: any) {\n if (this.disabled || !this.beforeChange(this._item, answer)) {\n return\n }\n\n const id = this.answerIdOf(answer)\n if (!id) {\n return\n }\n\n if (this.examType === 'single') {\n const isSelected = this._selectedIds.has(id)\n this._selectedIds = isSelected ? new Set() : new Set([id])\n }\n else if (this.examType === 'multiple') {\n const next = new Set(this._selectedIds)\n if (next.has(id)) {\n next.delete(id)\n }\n else {\n next.add(id)\n }\n this._selectedIds = next\n }\n else {\n if (this._sortOrder.includes(id)) {\n this._sortOrder = this._sortOrder.filter(currentId => currentId !== id)\n }\n else {\n this._sortOrder = [...this._sortOrder, id]\n }\n this._selectedIds = new Set(this._sortOrder)\n }\n\n emitSubjectEvent(this, 'on-change', this._snapshotRow())\n }\n\n private _currentValue() {\n return this.examType === 'sort'\n ? this._sortOrder.join(',')\n : Array.from(this._selectedIds).join(',')\n }\n\n private _validate() {\n const count = this.examType === 'sort' ? this._sortOrder.length : this._selectedIds.size\n const least = Number(this._item.leastAnswerCount || 0)\n\n if (least > 0 && count < least) {\n const typeCopy = this.examType === 'multiple' ? '多选题' : '排序题'\n return toError(this._item, `${typeCopy}至少选${least}项`)\n }\n\n if (count < 1) {\n return toError(this._item, this.examType === 'sort' ? '请先完成答题' : '请选择答案')\n }\n\n return null\n }\n\n private _selectedSummary() {\n const answers = Array.isArray(this._item.answers) ? this._item.answers : []\n const ids = this.examType === 'sort' ? this._sortOrder : Array.from(this._selectedIds)\n const letters = ids\n .map((id) => {\n const index = answers.findIndex((answer: any) => this.answerIdOf(answer) === id)\n return index >= 0 ? this.answerLetter(index) : ''\n })\n .filter(Boolean)\n return letters.join('、')\n }\n\n private _snapshotAnswers() {\n const answers = Array.isArray(this._item.answers) ? this._item.answers : []\n return answers.map((answer: any) => {\n const id = this.answerIdOf(answer)\n const sortNum = this._sortOrder.indexOf(id) + 1\n return {\n ...answer,\n isSelect: this._selectedIds.has(id),\n sortNum: sortNum > 0 ? sortNum : undefined,\n }\n })\n }\n\n private _snapshotRow() {\n return {\n ...this._item,\n answers: this._snapshotAnswers(),\n submitAnswer: this._currentValue(),\n }\n }\n\n private _handleRendererChange(\n next?:\n | any\n | ((row: any) => any),\n ) {\n const current = cloneAnswerValue(this._snapshotRow())\n const updated = typeof next === 'function'\n ? next(current) || current\n : next || current\n this.updateItem(updated)\n this.syncFromItem()\n emitSubjectEvent(this, 'on-change', this._snapshotRow())\n }\n\n private _correctSummary() {\n const answers = Array.isArray(this._item.answers) ? this._item.answers : []\n const resultAnswers = this.resultAnswersFromExamResults()\n\n if (resultAnswers.length) {\n return resultAnswers\n .map((result: any) => {\n const index = answers.findIndex((answer: any) => this.answerIdOf(answer) === String(result?.correctAnswer ?? ''))\n return index >= 0 ? this.answerLetter(index) : ''\n })\n .filter(Boolean)\n .join('、')\n }\n\n return answers\n .map((answer: any, index: number) => answer?.isCorrect ? this.answerLetter(index) : '')\n .filter(Boolean)\n .join('、')\n }\n\n private _renderReview() {\n if (!this.disabled || !this.isShowCorrect) {\n return null\n }\n\n const selected = this._selectedSummary()\n const correct = this._correctSummary()\n const analysis = String(this._item.analysis || '').trim()\n\n return html`\n <div class=\"qxs-answer-runtime__result\">\n ${selected ? html`<span class=\"qxs-answer-runtime__result-line\">已选答案:${selected}</span>` : ''}\n ${correct\n ? html`<span class=\"qxs-answer-runtime__result-line is-danger\">本题参考答案为:${correct}</span>`\n : html`<span class=\"qxs-answer-runtime__result-line is-success\">本题暂无参考答案</span>`}\n ${analysis ? html`<div class=\"qxs-answer-runtime__result-line is-muted\">答题解析:${analysis}</div>` : ''}\n </div>\n `\n }\n\n private _renderRelationEntry(answer: any) {\n const answerId = this.answerIdOf(answer)\n const isSelected = this._selectedIds.has(answerId)\n\n if (!answer?.needRelationExamAnswer || !isSelected) {\n return nothing\n }\n\n const row = this._snapshotRow()\n const answerItem = this._snapshotAnswers().find((item: any) => this.answerIdOf(item) === answerId) || answer\n const context = {\n answerItem,\n row,\n handleChange: (next?: any) => this._handleRendererChange(next),\n }\n\n if (this.answerRowRelationExamAnswerRenderer) {\n return html`\n <div class=\"qxs-answer-runtime__relation-entry\">\n ${this.answerRowRelationExamAnswerRenderer(context)}\n </div>\n `\n }\n\n return html`\n <button\n type=\"button\"\n class=\"qxs-answer-runtime__relation-action\"\n @click=${() => this.emitRelationExamAnswer('open', answerItem, row)}\n >\n 查看关联题\n </button>\n `\n }\n\n async onSubmit() {\n const error = this._validate()\n if (error) {\n throw error\n }\n\n const submitAnswer = this._currentValue()\n return {\n ...this._snapshotRow(),\n submitAnswer,\n submitAnswerObj: {\n intVal: this._item.examId,\n stringVal: submitAnswer,\n },\n }\n }\n\n reset() {\n this.updateItem(this.cloneItem())\n this.syncFromItem()\n }\n\n render() {\n const answers = Array.isArray(this._item.answers) ? this._item.answers : []\n const inputType = this.examType === 'single' ? 'radio' : 'checkbox'\n\n return this.renderShell({\n shellClassName: `qxs-answer-runtime-choice ${this.examType}`,\n answerContent: html`\n <div class=\"qxs-answer-runtime__answers\">\n ${answers.map((answer: any, index: number) => {\n const id = this.answerIdOf(answer)\n const label = this.answerLabel(answer)\n const selected = this._isSelected(answer)\n const sortNumber = this._sortOrder.indexOf(id) + 1\n\n return html`\n <label class=\"qxs-answer-runtime__choice exam-answer ${this.themeName === 'case-practice' ? 'answer-item' : ''} ${selected ? 'is-selected' : ''} ${(this.isShowBg || this.themeName === 'case-practice') ? 'has-background bgCol' : ''}\">\n <input\n type=${inputType}\n name=${String(this._item.examId || this._item.examIndex || 'choice')}\n .checked=${selected}\n ?disabled=${this.disabled}\n @click=${() => this._toggle(answer)}\n />\n <span>${this.answerLetter(index)}.</span>\n <span>${label}</span>\n ${this.examType === 'sort' && sortNumber > 0 ? html`<strong class=\"sort-num\">${sortNumber}</strong>` : ''}\n </label>\n ${this._renderRelationEntry(answer)}\n `\n })}\n </div>\n `,\n resultContent: this._renderReview(),\n footerContent: this.renderCasePracticeFooter(this._snapshotRow()),\n })\n }\n}\n\nexport function register() {}\n"],"names":["toError","row","message","QxsAnswerRuntimeChoice","AnswerRuntimeElement","ids","item","answer","id","isSelected","next","currentId","emitSubjectEvent","count","least","typeCopy","answers","index","sortNum","current","cloneAnswerValue","updated","resultAnswers","result","selected","correct","analysis","html","answerId","nothing","answerItem","context","error","submitAnswer","inputType","label","sortNumber","__decorateClass","property","state","safeCustomElement"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import{LitElement as d,nothing as h,html as u}from"lit";import{property as n,state as w}from"lit/decorators.js";import{unsafeHTML as f}from"lit/directives/unsafe-html.js";import{emitSubjectEvent as p}from"../subject/shared-methods.mjs";import{cloneAnswerValue as x}from"./clone.mjs";var y=Object.defineProperty,r=(c,e,t,o)=>{for(var s=void 0,l=c.length-1,m;l>=0;l--)(m=c[l])&&(s=m(e,t,s)||s);return s&&y(e,t,s),s};class i extends d{constructor(){super(...arguments),this.item={},this.disabled=!1,this.type=!0,this.isShowCorrect=!1,this.isShowBg=!1,this.isShowProgress=!1,this.showSingleRowScaleTitle=!1,this.themeName="default",this.beforeChange=()=>!0,this.answerRowRelationExamAnswerRenderer=null,this._item={}}createRenderRoot(){return this}cloneItem(){return x(this.item||{})}answerIdOf(e){return String(e?.examAnswerId??e?.answerId??e?.correctAnswer??"")}answerLabel(e){return e?.title||e?.answer||e?.correctAnswer||""}answerLetter(e){return String.fromCharCode(65+e)}titleText(){return`${this._item.titleIndex?`${this._item.titleIndex}. `:""}${this._item.title||""}`.trim()}resultAnswersFromExamResults(){return Array.isArray(this._item.examAnswerResults)?this._item.examAnswerResults:[]}updateItem(e){this._item=e}emitHandleAction(e,t){p(this,"handleAction",{action:e,row:t})}emitRelationExamAnswer(e,t,o){p(this,"relation-exam-answer",{action:e,answerItem:t,row:o})}renderTitleBlock(e){return u`
2
+ <div class="qxs-answer-runtime__heading">
3
+ ${this.isShowProgress&&this._item.examIndex!=null?u`<span class="qxs-answer-runtime__progress">第 ${this._item.examIndex} 题</span>`:h}
4
+ <div class="qxs-answer-runtime__title">${e??this.titleText()}</div>
5
+ </div>
6
+ `}renderShell(e){const{answerContent:t,resultContent:o=null,footerContent:s=null,shellClassName:l="",titleContent:m}=e;return u`
7
+ <div data-answer-runtime-row class="exam-body-box qxs-answer-runtime ${l} ${this.themeName}">
8
+ <div class="exam-content-box">
9
+ <div class="exam-title">
10
+ ${m??this.renderTitleBlock()}
11
+ </div>
12
+ <div class="exam-answer-box">
13
+ ${t}
14
+ </div>
15
+ </div>
16
+ ${o?u`<div class="answer-result-box">${o}</div>`:h}
17
+ ${s??h}
18
+ </div>
19
+ `}renderCasePracticeFooter(e){if(!(this.disabled&&this.themeName==="case-practice"))return h;if(e?.isShowDiscussionInfo===!1)return h;const t=e?.answerTruePercent??null,s=t===null||t==="0.00%"?"没有人支持该观点":`有${t}人支持该观点`,l=e?.referenceCommentCount??0,m=(Array.isArray(e?.answers)?e.answers:[]).map(a=>a?.relationType==null||!a?.resultItem?null:{className:a?.resultClass||"",html:a?.relationType===1?a?.resultItem:""}).filter(Boolean);return u`
20
+ <div class="qxs-answer-runtime__footer">
21
+ <div class="qxs-answer-runtime__discussion">
22
+ <span>${s}</span>
23
+ <span>${l}人讨论</span>
24
+ <button
25
+ type="button"
26
+ class="qxs-answer-runtime__discussion-action"
27
+ @click=${()=>this.emitHandleAction("discussion",e)}
28
+ >
29
+ 参与讨论
30
+ </button>
31
+ </div>
32
+ ${m.length?u`
33
+ <div class="qxs-answer-runtime__answer-relate">
34
+ ${m.map(a=>u`
35
+ <div class="qxs-answer-runtime__answer-relate-item ${a.className}">
36
+ ${f(a.html)}
37
+ </div>
38
+ `)}
39
+ </div>
40
+ `:h}
41
+ </div>
42
+ `}willUpdate(e){e.has("item")&&(this.updateItem(this.cloneItem()),this.syncFromItem())}}r([n({attribute:!1})],i.prototype,"item");r([n({type:Boolean})],i.prototype,"disabled");r([n({type:Boolean})],i.prototype,"type");r([n({type:Boolean,attribute:"is-show-correct"})],i.prototype,"isShowCorrect");r([n({type:Boolean,attribute:"is-show-bg"})],i.prototype,"isShowBg");r([n({type:Boolean,attribute:"is-show-progress"})],i.prototype,"isShowProgress");r([n({type:Boolean,attribute:"show-single-row-scale-title"})],i.prototype,"showSingleRowScaleTitle");r([n({type:String,attribute:"theme-name"})],i.prototype,"themeName");r([n({attribute:!1})],i.prototype,"beforeChange");r([n({attribute:!1})],i.prototype,"answerRowRelationExamAnswerRenderer");r([w()],i.prototype,"_item");export{i as AnswerRuntimeElement};
43
+ //# sourceMappingURL=runtime-question-base.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-question-base.mjs","sources":["../../../../packages/components/src/answer-container/runtime-question-base.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport type { AnswerThemeName, LegacyAnswerContainerItem } from './types'\nimport type { AnswerContainerActionDetail, AnswerContainerRelationDetail, AnswerRowRelationExamAnswerRenderer } from './types'\nimport { cloneAnswerValue } from './clone'\n\nexport abstract class AnswerRuntimeElement extends LitElement {\n createRenderRoot() {\n return this\n }\n\n @property({ attribute: false }) item: LegacyAnswerContainerItem = {}\n @property({ type: Boolean }) disabled = false\n @property({ type: Boolean }) type = true\n @property({ type: Boolean, attribute: 'is-show-correct' }) isShowCorrect = false\n @property({ type: Boolean, attribute: 'is-show-bg' }) isShowBg = false\n @property({ type: Boolean, attribute: 'is-show-progress' }) isShowProgress = false\n @property({ type: Boolean, attribute: 'show-single-row-scale-title' }) showSingleRowScaleTitle = false\n @property({ type: String, attribute: 'theme-name' }) themeName: AnswerThemeName = 'default'\n @property({ attribute: false }) beforeChange: (row: LegacyAnswerContainerItem, answerItem?: any) => boolean = () => true\n @property({ attribute: false }) answerRowRelationExamAnswerRenderer: AnswerRowRelationExamAnswerRenderer | null = null\n\n @state() protected _item: LegacyAnswerContainerItem = {}\n\n protected cloneItem() {\n return cloneAnswerValue(this.item || {})\n }\n\n protected answerIdOf(answer: any) {\n return String(answer?.examAnswerId ?? answer?.answerId ?? answer?.correctAnswer ?? '')\n }\n\n protected answerLabel(answer: any) {\n return answer?.title || answer?.answer || answer?.correctAnswer || ''\n }\n\n protected answerLetter(index: number) {\n return String.fromCharCode(65 + index)\n }\n\n protected titleText() {\n const prefix = this._item.titleIndex ? `${this._item.titleIndex}. ` : ''\n return `${prefix}${this._item.title || ''}`.trim()\n }\n\n protected resultAnswersFromExamResults() {\n if (Array.isArray(this._item.examAnswerResults)) {\n return this._item.examAnswerResults\n }\n return []\n }\n\n protected updateItem(next: LegacyAnswerContainerItem) {\n this._item = next\n }\n\n protected emitHandleAction(action: string, row: LegacyAnswerContainerItem) {\n const detail: AnswerContainerActionDetail = { action, row }\n emitSubjectEvent(this, 'handleAction', detail)\n }\n\n protected emitRelationExamAnswer(action: string, answerItem: Record<string, unknown>, row: LegacyAnswerContainerItem) {\n const detail: AnswerContainerRelationDetail = { action, answerItem, row }\n emitSubjectEvent(this, 'relation-exam-answer', detail)\n }\n\n protected renderTitleBlock(content?: unknown) {\n return html`\n <div class=\"qxs-answer-runtime__heading\">\n ${this.isShowProgress && this._item.examIndex != null\n ? html`<span class=\"qxs-answer-runtime__progress\">第 ${this._item.examIndex} 题</span>`\n : nothing}\n <div class=\"qxs-answer-runtime__title\">${content ?? this.titleText()}</div>\n </div>\n `\n }\n\n protected renderShell(options: {\n answerContent: unknown\n resultContent?: unknown | null\n footerContent?: unknown | null\n shellClassName?: string\n titleContent?: unknown\n }) {\n const {\n answerContent,\n resultContent = null,\n footerContent = null,\n shellClassName = '',\n titleContent,\n } = options\n\n return html`\n <div data-answer-runtime-row class=\"exam-body-box qxs-answer-runtime ${shellClassName} ${this.themeName}\">\n <div class=\"exam-content-box\">\n <div class=\"exam-title\">\n ${titleContent ?? this.renderTitleBlock()}\n </div>\n <div class=\"exam-answer-box\">\n ${answerContent}\n </div>\n </div>\n ${resultContent ? html`<div class=\"answer-result-box\">${resultContent}</div>` : nothing}\n ${footerContent ?? nothing}\n </div>\n `\n }\n\n protected renderCasePracticeFooter(row: LegacyAnswerContainerItem) {\n if (!(this.disabled && this.themeName === 'case-practice')) {\n return nothing\n }\n\n if (row?.isShowDiscussionInfo === false) {\n return nothing\n }\n\n const answerTruePercent = row?.answerTruePercent ?? null\n const hasNoSupport = answerTruePercent === null || answerTruePercent === '0.00%'\n const viewpointDescription = hasNoSupport ? '没有人支持该观点' : `有${answerTruePercent}人支持该观点`\n const referenceCommentCount = row?.referenceCommentCount ?? 0\n const answerRelate = (Array.isArray(row?.answers) ? row.answers : [])\n .map((item: any) => {\n if (item?.relationType == null || !item?.resultItem) {\n return null\n }\n\n return {\n className: item?.resultClass || '',\n html: item?.relationType === 1 ? item?.resultItem : '',\n }\n })\n .filter(Boolean) as Array<{ className: string, html: string }>\n\n return html`\n <div class=\"qxs-answer-runtime__footer\">\n <div class=\"qxs-answer-runtime__discussion\">\n <span>${viewpointDescription}</span>\n <span>${referenceCommentCount}人讨论</span>\n <button\n type=\"button\"\n class=\"qxs-answer-runtime__discussion-action\"\n @click=${() => this.emitHandleAction('discussion', row)}\n >\n 参与讨论\n </button>\n </div>\n ${answerRelate.length\n ? html`\n <div class=\"qxs-answer-runtime__answer-relate\">\n ${answerRelate.map((item) => html`\n <div class=\"qxs-answer-runtime__answer-relate-item ${item.className}\">\n ${unsafeHTML(item.html)}\n </div>\n `)}\n </div>\n `\n : nothing}\n </div>\n `\n }\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('item')) {\n this.updateItem(this.cloneItem())\n this.syncFromItem()\n }\n }\n\n protected abstract syncFromItem(): void\n\n abstract onSubmit(): Promise<LegacyAnswerContainerItem>\n\n abstract reset(): void\n}\n"],"names":["AnswerRuntimeElement","LitElement","cloneAnswerValue","answer","index","next","action","row","emitSubjectEvent","answerItem","content","html","nothing","options","answerContent","resultContent","footerContent","shellClassName","titleContent","answerTruePercent","viewpointDescription","referenceCommentCount","answerRelate","item","unsafeHTML","changed","__decorateClass","property","state"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import{html as n}from"lit";import{state as h}from"lit/decorators.js";import{safeCustomElement as w}from"../base/define.mjs";import{emitSubjectEvent as u}from"../subject/shared-methods.mjs";import{AnswerRuntimeElement as _}from"./runtime-question-base.mjs";var c=Object.defineProperty,d=Object.getOwnPropertyDescriptor,l=(e,t,s,r)=>{for(var i=r>1?void 0:r?d(t,s):t,a=e.length-1,m;a>=0;a--)(m=e[a])&&(i=(r?m(t,s,i):m(i))||i);return r&&i&&c(t,s,i),i};function p(e,t){return{row:e,message:t}}let o=class extends _{constructor(){super(...arguments),this._rows=[]}syncFromItem(){const e=Array.isArray(this._item.scaleQuestionList)?this._item.scaleQuestionList:[],t=String(this._item.submitAnswer||"").split(",").filter(Boolean);this._rows=e.map((s,r)=>({name:typeof s=="string"?s:s?.name||"",examAnswerId:t[r]||s?.examAnswerId||""}))}_setValue(e,t){this.disabled||!this.beforeChange(this._item,this._rows[e])||(this._rows=this._rows.map((s,r)=>r===e?{...s,examAnswerId:t}:s),u(this,"on-change",{...this._item,submitAnswer:this._rows.map(s=>s.examAnswerId||"").join(",")}))}_renderReview(){if(!this.disabled||!this.isShowCorrect)return null;const e=String(this._item.analysis||"").trim();return n`
2
+ <div class="qxs-answer-runtime__result">
3
+ <span class="qxs-answer-runtime__result-line is-success">本题暂无参考答案</span>
4
+ ${e?n`<div class="qxs-answer-runtime__result-line is-muted">答题解析:${e}</div>`:""}
5
+ </div>
6
+ `}_showRowTitleColumn(){if(this.showSingleRowScaleTitle||this._rows.length!==1)return!0;const e=String(this._rows[0]?.name||"").trim(),t=String(this._item?.title||"").trim();return!(e&&t&&e===t)}async onSubmit(){if(this._rows.some(t=>!t.examAnswerId))throw p(this._item,"请先完成答题");const e=this._rows.map(t=>t.examAnswerId||"").join(",");return{...this._item,scaleQuestionList:this._rows.map(t=>({...t})),submitAnswer:e,submitAnswerObj:{intVal:this._item.examId,stringVal:e}}}reset(){this.updateItem(this.cloneItem()),this.syncFromItem()}render(){const e=Array.isArray(this._item.answers)?this._item.answers:[],t=this._showRowTitleColumn();return this.renderShell({shellClassName:"qxs-answer-runtime-scale scale",answerContent:n`
7
+ <div class="table-scroll">
8
+ <table>
9
+ <thead>
10
+ <tr>
11
+ ${t?n`<th>问题</th>`:""}
12
+ ${e.map(s=>n`<th>${this.answerLabel(s)}</th>`)}
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ ${this._rows.map((s,r)=>n`
17
+ <tr>
18
+ ${t?n`<td class="qxs-answer-runtime-scale__row-title">${s.name}</td>`:""}
19
+ ${e.map(i=>{const a=this.answerIdOf(i),m=`scale-${this._item.examId||"row"}-${r}`;return n`
20
+ <td>
21
+ <input
22
+ type="radio"
23
+ name=${m}
24
+ .checked=${String(s.examAnswerId||"")===a}
25
+ ?disabled=${this.disabled}
26
+ @click=${()=>this._setValue(r,a)}
27
+ />
28
+ </td>
29
+ `})}
30
+ </tr>
31
+ `)}
32
+ </tbody>
33
+ </table>
34
+ </div>
35
+ `,resultContent:this._renderReview(),footerContent:this.renderCasePracticeFooter({...this._item,scaleQuestionList:this._rows.map(s=>({...s})),submitAnswer:this._rows.map(s=>s.examAnswerId||"").join(",")})})}};l([h()],o.prototype,"_rows",2);o=l([w("qxs-answer-runtime-scale")],o);export{o as QxsAnswerRuntimeScale};
36
+ //# sourceMappingURL=runtime-scale.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-scale.mjs","sources":["../../../../packages/components/src/answer-container/runtime-scale.ts"],"sourcesContent":["import { html } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport { AnswerRuntimeElement } from './runtime-question-base'\nimport type { AnswerSubmitError } from './types'\n\nfunction toError(row: any, message: string): AnswerSubmitError {\n return { row, message }\n}\n\ntype ScaleQuestionRow = {\n name: string\n examAnswerId?: string | number\n}\n\n@safeCustomElement('qxs-answer-runtime-scale')\nexport class QxsAnswerRuntimeScale extends AnswerRuntimeElement {\n @state() private _rows: ScaleQuestionRow[] = []\n\n protected syncFromItem() {\n const rows = Array.isArray(this._item.scaleQuestionList)\n ? this._item.scaleQuestionList\n : []\n const submit = String(this._item.submitAnswer || '').split(',').filter(Boolean)\n\n this._rows = rows.map((row: any, index) => ({\n name: typeof row === 'string' ? row : row?.name || '',\n examAnswerId: submit[index] || row?.examAnswerId || '',\n }))\n }\n\n private _setValue(rowIndex: number, answerId: string) {\n if (this.disabled || !this.beforeChange(this._item, this._rows[rowIndex])) {\n return\n }\n\n this._rows = this._rows.map((row, index) => index === rowIndex ? { ...row, examAnswerId: answerId } : row)\n emitSubjectEvent(this, 'on-change', {\n ...this._item,\n submitAnswer: this._rows.map(row => row.examAnswerId || '').join(','),\n })\n }\n\n private _renderReview() {\n if (!this.disabled || !this.isShowCorrect) {\n return null\n }\n\n const analysis = String(this._item.analysis || '').trim()\n\n return html`\n <div class=\"qxs-answer-runtime__result\">\n <span class=\"qxs-answer-runtime__result-line is-success\">本题暂无参考答案</span>\n ${analysis ? html`<div class=\"qxs-answer-runtime__result-line is-muted\">答题解析:${analysis}</div>` : ''}\n </div>\n `\n }\n\n private _showRowTitleColumn() {\n if (this.showSingleRowScaleTitle) {\n return true\n }\n\n if (this._rows.length !== 1) {\n return true\n }\n\n const rowName = String(this._rows[0]?.name || '').trim()\n const title = String(this._item?.title || '').trim()\n return !(rowName && title && rowName === title)\n }\n\n async onSubmit() {\n if (this._rows.some(row => !row.examAnswerId)) {\n throw toError(this._item, '请先完成答题')\n }\n\n const submitAnswer = this._rows.map(row => row.examAnswerId || '').join(',')\n return {\n ...this._item,\n scaleQuestionList: this._rows.map(row => ({ ...row })),\n submitAnswer,\n submitAnswerObj: {\n intVal: this._item.examId,\n stringVal: submitAnswer,\n },\n }\n }\n\n reset() {\n this.updateItem(this.cloneItem())\n this.syncFromItem()\n }\n\n render() {\n const answers = Array.isArray(this._item.answers) ? this._item.answers : []\n const showRowTitleColumn = this._showRowTitleColumn()\n\n return this.renderShell({\n shellClassName: 'qxs-answer-runtime-scale scale',\n answerContent: html`\n <div class=\"table-scroll\">\n <table>\n <thead>\n <tr>\n ${showRowTitleColumn ? html`<th>问题</th>` : ''}\n ${answers.map((answer: any) => html`<th>${this.answerLabel(answer)}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${this._rows.map((row, rowIndex) => html`\n <tr>\n ${showRowTitleColumn ? html`<td class=\"qxs-answer-runtime-scale__row-title\">${row.name}</td>` : ''}\n ${answers.map((answer: any) => {\n const answerId = this.answerIdOf(answer)\n const name = `scale-${this._item.examId || 'row'}-${rowIndex}`\n return html`\n <td>\n <input\n type=\"radio\"\n name=${name}\n .checked=${String(row.examAnswerId || '') === answerId}\n ?disabled=${this.disabled}\n @click=${() => this._setValue(rowIndex, answerId)}\n />\n </td>\n `\n })}\n </tr>\n `)}\n </tbody>\n </table>\n </div>\n `,\n resultContent: this._renderReview(),\n footerContent: this.renderCasePracticeFooter({\n ...this._item,\n scaleQuestionList: this._rows.map(row => ({ ...row })),\n submitAnswer: this._rows.map(row => row.examAnswerId || '').join(','),\n }),\n })\n }\n}\n\nexport function register() {}\n"],"names":["toError","row","message","QxsAnswerRuntimeScale","AnswerRuntimeElement","rows","submit","index","rowIndex","answerId","emitSubjectEvent","analysis","html","rowName","title","submitAnswer","answers","showRowTitleColumn","answer","name","__decorateClass","state","safeCustomElement"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import{html as n}from"lit";import{state as o}from"lit/decorators.js";import{safeCustomElement as h}from"../base/define.mjs";import{emitSubjectEvent as _}from"../subject/shared-methods.mjs";import{AnswerRuntimeElement as v}from"./runtime-question-base.mjs";var c=Object.defineProperty,p=Object.getOwnPropertyDescriptor,m=(e,t,i,s)=>{for(var r=s>1?void 0:s?p(t,i):t,l=e.length-1,a;l>=0;l--)(a=e[l])&&(r=(s?a(t,i,r):a(r))||r);return s&&r&&c(t,i,r),r};function w(e,t){return{row:e,message:t}}let u=class extends v{constructor(){super(...arguments),this._value=""}syncFromItem(){this._value=String(this._item.submitAnswer||"")}_setValue(e){this.disabled||!this.beforeChange(this._item,this._item)||(this._value=e,_(this,"runtime-input",{...this._item,submitAnswer:this._value}))}_renderReview(){if(!this.disabled||!this.isShowCorrect)return null;const e=this.resultAnswersFromExamResults(),t=String(this._item.examExpand||"").trim(),i=e.length?e.map(s=>s?.correctAnswer||"").filter(Boolean):t?[t]:[];return n`
2
+ <div class="qxs-answer-runtime__result">
3
+ ${i.length?i.map(s=>n`
4
+ <div class="qxs-answer-runtime__result-line">参考答案为:${s}</div>
5
+ `):n`<span class="qxs-answer-runtime__result-line is-success">本题暂无参考答案</span>`}
6
+ </div>
7
+ `}async onSubmit(){if(!this._value.trim())throw w(this._item,"不能为空");return{...this._item,submitAnswer:this._value,submitAnswerObj:{intVal:this._item.examId,stringVal:this._value}}}reset(){this.updateItem(this.cloneItem()),this.syncFromItem()}render(){return this.renderShell({shellClassName:"qxs-answer-runtime-text-fill text_fill",answerContent:n`
8
+ ${this.type?n`
9
+ <textarea
10
+ rows="4"
11
+ class="textarea-box"
12
+ .value=${this._value}
13
+ ?disabled=${this.disabled}
14
+ @input=${e=>this._setValue(e.target.value)}
15
+ ></textarea>
16
+ <div class="font-num">${this._value.length}</div>
17
+ `:n`<div class="textarea-box qxs-answer-runtime__text-preview">${this._value||"—"}</div>`}
18
+ `,resultContent:this._renderReview(),footerContent:this.renderCasePracticeFooter({...this._item,submitAnswer:this._value})})}};m([o()],u.prototype,"_value",2);u=m([h("qxs-answer-runtime-text-fill")],u);export{u as QxsAnswerRuntimeTextFill};
19
+ //# sourceMappingURL=runtime-text-fill.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-text-fill.mjs","sources":["../../../../packages/components/src/answer-container/runtime-text-fill.ts"],"sourcesContent":["import { html } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { emitSubjectEvent } from '../subject/shared-methods'\nimport { AnswerRuntimeElement } from './runtime-question-base'\nimport type { AnswerSubmitError } from './types'\n\nfunction toError(row: any, message: string): AnswerSubmitError {\n return { row, message }\n}\n\n@safeCustomElement('qxs-answer-runtime-text-fill')\nexport class QxsAnswerRuntimeTextFill extends AnswerRuntimeElement {\n @state() private _value = ''\n\n protected syncFromItem() {\n this._value = String(this._item.submitAnswer || '')\n }\n\n private _setValue(value: string) {\n if (this.disabled || !this.beforeChange(this._item, this._item)) {\n return\n }\n this._value = value\n emitSubjectEvent(this, 'runtime-input', {\n ...this._item,\n submitAnswer: this._value,\n })\n }\n\n private _renderReview() {\n if (!this.disabled || !this.isShowCorrect) {\n return null\n }\n\n const results = this.resultAnswersFromExamResults()\n const fallback = String(this._item.examExpand || '').trim()\n const correctList = results.length\n ? results.map((result: any) => result?.correctAnswer || '').filter(Boolean)\n : fallback\n ? [fallback]\n : []\n\n return html`\n <div class=\"qxs-answer-runtime__result\">\n ${correctList.length\n ? correctList.map((correctAnswer) => html`\n <div class=\"qxs-answer-runtime__result-line\">参考答案为:${correctAnswer}</div>\n `)\n : html`<span class=\"qxs-answer-runtime__result-line is-success\">本题暂无参考答案</span>`}\n </div>\n `\n }\n\n async onSubmit() {\n if (!this._value.trim()) {\n throw toError(this._item, '不能为空')\n }\n\n return {\n ...this._item,\n submitAnswer: this._value,\n submitAnswerObj: {\n intVal: this._item.examId,\n stringVal: this._value,\n },\n }\n }\n\n reset() {\n this.updateItem(this.cloneItem())\n this.syncFromItem()\n }\n\n render() {\n return this.renderShell({\n shellClassName: 'qxs-answer-runtime-text-fill text_fill',\n answerContent: html`\n ${this.type\n ? html`\n <textarea\n rows=\"4\"\n class=\"textarea-box\"\n .value=${this._value}\n ?disabled=${this.disabled}\n @input=${(event: Event) => this._setValue((event.target as HTMLTextAreaElement).value)}\n ></textarea>\n <div class=\"font-num\">${this._value.length}</div>\n `\n : html`<div class=\"textarea-box qxs-answer-runtime__text-preview\">${this._value || '—'}</div>`}\n `,\n resultContent: this._renderReview(),\n footerContent: this.renderCasePracticeFooter({\n ...this._item,\n submitAnswer: this._value,\n }),\n })\n }\n}\n\nexport function register() {}\n"],"names":["toError","row","message","QxsAnswerRuntimeTextFill","AnswerRuntimeElement","value","emitSubjectEvent","results","fallback","correctList","result","html","correctAnswer","event","__decorateClass","state","safeCustomElement"],"mappings":"gcAOA,SAASA,EAAQC,EAAUC,EAAoC,CAC7D,MAAO,CAAE,IAAAD,EAAK,QAAAC,CAAA,CAChB,CAGO,IAAMC,EAAN,cAAuCC,CAAqB,CAA5D,aAAA,CAAA,MAAA,GAAA,SAAA,EACI,KAAQ,OAAS,EAAA,CAEhB,cAAe,CACvB,KAAK,OAAS,OAAO,KAAK,MAAM,cAAgB,EAAE,CACpD,CAEQ,UAAUC,EAAe,CAC3B,KAAK,UAAY,CAAC,KAAK,aAAa,KAAK,MAAO,KAAK,KAAK,IAG9D,KAAK,OAASA,EACdC,EAAiB,KAAM,gBAAiB,CACtC,GAAG,KAAK,MACR,aAAc,KAAK,MAAA,CACpB,EACH,CAEQ,eAAgB,CACtB,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,cAC1B,OAAO,KAGT,MAAMC,EAAU,KAAK,6BAAA,EACfC,EAAW,OAAO,KAAK,MAAM,YAAc,EAAE,EAAE,KAAA,EAC/CC,EAAcF,EAAQ,OACxBA,EAAQ,IAAKG,GAAgBA,GAAQ,eAAiB,EAAE,EAAE,OAAO,OAAO,EACxEF,EACE,CAACA,CAAQ,EACT,CAAA,EAEN,OAAOG;AAAA;AAAA,UAEDF,EAAY,OACVA,EAAY,IAAKG,GAAkBD;AAAA,mEACoBC,CAAa;AAAA,aACnE,EACDD,2EAA8E;AAAA;AAAA,KAGxF,CAEA,MAAM,UAAW,CACf,GAAI,CAAC,KAAK,OAAO,OACf,MAAMX,EAAQ,KAAK,MAAO,MAAM,EAGlC,MAAO,CACL,GAAG,KAAK,MACR,aAAc,KAAK,OACnB,gBAAiB,CACf,OAAQ,KAAK,MAAM,OACnB,UAAW,KAAK,MAAA,CAClB,CAEJ,CAEA,OAAQ,CACN,KAAK,WAAW,KAAK,WAAW,EAChC,KAAK,aAAA,CACP,CAEA,QAAS,CACP,OAAO,KAAK,YAAY,CACtB,eAAgB,yCAChB,cAAeW;AAAA,UACX,KAAK,KACHA;AAAA;AAAA;AAAA;AAAA,yBAIa,KAAK,MAAM;AAAA,4BACR,KAAK,QAAQ;AAAA,yBACfE,GAAiB,KAAK,UAAWA,EAAM,OAA+B,KAAK,CAAC;AAAA;AAAA,sCAEhE,KAAK,OAAO,MAAM;AAAA,cAE5CF,+DAAkE,KAAK,QAAU,GAAG,QAAQ;AAAA,QAElG,cAAe,KAAK,cAAA,EACpB,cAAe,KAAK,yBAAyB,CAC3C,GAAG,KAAK,MACR,aAAc,KAAK,MAAA,CACpB,CAAA,CACF,CACH,CACF,EArFmBG,EAAA,CAAhBC,EAAA,CAAM,EADIZ,EACM,UAAA,SAAA,CAAA,EADNA,EAANW,EAAA,CADNE,EAAkB,8BAA8B,CAAA,EACpCb,CAAA"}