@things-factory/ops-master 10.1.33 → 10.1.35

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 (150) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -0
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/master-change-approval.d.ts +14 -0
  5. package/dist-client/master-change-approval.js +36 -0
  6. package/dist-client/master-change-approval.js.map +1 -0
  7. package/dist-client/pages/master/material-definition.d.ts +4 -11
  8. package/dist-client/pages/master/material-definition.js +5 -53
  9. package/dist-client/pages/master/material-definition.js.map +1 -1
  10. package/dist-client/pages/master/material-revision-fields.d.ts +2 -0
  11. package/dist-client/pages/master/material-revision-fields.js +43 -0
  12. package/dist-client/pages/master/material-revision-fields.js.map +1 -0
  13. package/dist-client/pages/master/recipe-definition.d.ts +4 -135
  14. package/dist-client/pages/master/recipe-definition.js +7 -397
  15. package/dist-client/pages/master/recipe-definition.js.map +1 -1
  16. package/dist-client/pages/master/revision-comparison.d.ts +48 -0
  17. package/dist-client/pages/master/revision-comparison.js +553 -0
  18. package/dist-client/pages/master/revision-comparison.js.map +1 -0
  19. package/dist-client/pages/master/revision-view.d.ts +19 -0
  20. package/dist-client/pages/master/revision-view.js +133 -0
  21. package/dist-client/pages/master/revision-view.js.map +1 -0
  22. package/dist-client/pages/master/revision-workspace.d.ts +50 -0
  23. package/dist-client/pages/master/revision-workspace.js +752 -0
  24. package/dist-client/pages/master/revision-workspace.js.map +1 -0
  25. package/dist-client/pages/master/test-specification.d.ts +4 -92
  26. package/dist-client/pages/master/test-specification.js +5 -440
  27. package/dist-client/pages/master/test-specification.js.map +1 -1
  28. package/dist-client/tsconfig.tsbuildinfo +1 -1
  29. package/dist-server/service/asset/asset-master-resolver.js +38 -34
  30. package/dist-server/service/asset/asset-master-resolver.js.map +1 -1
  31. package/dist-server/service/asset/index.d.ts +2 -2
  32. package/dist-server/service/equipment/equipment-master-resolver.js +54 -49
  33. package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -1
  34. package/dist-server/service/equipment/index.d.ts +2 -2
  35. package/dist-server/service/index.d.ts +18 -2
  36. package/dist-server/service/index.js +18 -0
  37. package/dist-server/service/index.js.map +1 -1
  38. package/dist-server/service/location/index.d.ts +1 -1
  39. package/dist-server/service/location/location-master-resolver.js +34 -31
  40. package/dist-server/service/location/location-master-resolver.js.map +1 -1
  41. package/dist-server/service/master-axis.js +1 -1
  42. package/dist-server/service/master-axis.js.map +1 -1
  43. package/dist-server/service/master-change-policy.d.ts +23 -0
  44. package/dist-server/service/master-change-policy.js +134 -0
  45. package/dist-server/service/master-change-policy.js.map +1 -0
  46. package/dist-server/service/master-conformance-resolver.js +11 -1
  47. package/dist-server/service/master-conformance-resolver.js.map +1 -1
  48. package/dist-server/service/master-crud.js +9 -0
  49. package/dist-server/service/master-crud.js.map +1 -1
  50. package/dist-server/service/master-list.js +6 -0
  51. package/dist-server/service/master-list.js.map +1 -1
  52. package/dist-server/service/material/index.d.ts +3 -2
  53. package/dist-server/service/material/index.js +4 -2
  54. package/dist-server/service/material/index.js.map +1 -1
  55. package/dist-server/service/material/material-axis-status.d.ts +8 -0
  56. package/dist-server/service/material/material-axis-status.js +19 -0
  57. package/dist-server/service/material/material-axis-status.js.map +1 -0
  58. package/dist-server/service/material/material-definition.d.ts +3 -0
  59. package/dist-server/service/material/material-definition.js +13 -0
  60. package/dist-server/service/material/material-definition.js.map +1 -1
  61. package/dist-server/service/material/material-effective-list.d.ts +39 -0
  62. package/dist-server/service/material/material-effective-list.js +54 -0
  63. package/dist-server/service/material/material-effective-list.js.map +1 -0
  64. package/dist-server/service/material/material-master-resolver.js +59 -61
  65. package/dist-server/service/material/material-master-resolver.js.map +1 -1
  66. package/dist-server/service/material/material-query.js +9 -2
  67. package/dist-server/service/material/material-query.js.map +1 -1
  68. package/dist-server/service/material/material-revision-content.d.ts +10 -0
  69. package/dist-server/service/material/material-revision-content.js +92 -0
  70. package/dist-server/service/material/material-revision-content.js.map +1 -0
  71. package/dist-server/service/material/material-revision-resolver.d.ts +54 -0
  72. package/dist-server/service/material/material-revision-resolver.js +76 -0
  73. package/dist-server/service/material/material-revision-resolver.js.map +1 -0
  74. package/dist-server/service/material/material-revision-service.d.ts +144 -0
  75. package/dist-server/service/material/material-revision-service.js +534 -0
  76. package/dist-server/service/material/material-revision-service.js.map +1 -0
  77. package/dist-server/service/material/material-revision.d.ts +84 -0
  78. package/dist-server/service/material/material-revision.js +339 -0
  79. package/dist-server/service/material/material-revision.js.map +1 -0
  80. package/dist-server/service/operation/index.d.ts +1 -1
  81. package/dist-server/service/operation/operation-definition.js +1 -0
  82. package/dist-server/service/operation/operation-definition.js.map +1 -1
  83. package/dist-server/service/operation/operation-master-resolver.js +30 -30
  84. package/dist-server/service/operation/operation-master-resolver.js.map +1 -1
  85. package/dist-server/service/personnel/index.d.ts +2 -2
  86. package/dist-server/service/personnel/personnel-master-resolver.js +38 -34
  87. package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -1
  88. package/dist-server/service/quality/nonconformance-cause-resolver.js +17 -14
  89. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +1 -1
  90. package/dist-server/service/recipe/index.d.ts +3 -2
  91. package/dist-server/service/recipe/index.js +4 -2
  92. package/dist-server/service/recipe/index.js.map +1 -1
  93. package/dist-server/service/recipe/recipe-definition.d.ts +4 -0
  94. package/dist-server/service/recipe/recipe-definition.js +14 -1
  95. package/dist-server/service/recipe/recipe-definition.js.map +1 -1
  96. package/dist-server/service/recipe/recipe-effective-list.d.ts +49 -0
  97. package/dist-server/service/recipe/recipe-effective-list.js +96 -0
  98. package/dist-server/service/recipe/recipe-effective-list.js.map +1 -0
  99. package/dist-server/service/recipe/recipe-master-resolver.js +32 -28
  100. package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -1
  101. package/dist-server/service/recipe/recipe-query.js +9 -2
  102. package/dist-server/service/recipe/recipe-query.js.map +1 -1
  103. package/dist-server/service/recipe/recipe-revision-content.d.ts +32 -0
  104. package/dist-server/service/recipe/recipe-revision-content.js +65 -0
  105. package/dist-server/service/recipe/recipe-revision-content.js.map +1 -0
  106. package/dist-server/service/recipe/recipe-revision-line.d.ts +30 -0
  107. package/dist-server/service/recipe/recipe-revision-line.js +95 -0
  108. package/dist-server/service/recipe/recipe-revision-line.js.map +1 -0
  109. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +59 -0
  110. package/dist-server/service/recipe/recipe-revision-resolver.js +76 -0
  111. package/dist-server/service/recipe/recipe-revision-resolver.js.map +1 -0
  112. package/dist-server/service/recipe/recipe-revision-service.d.ts +147 -0
  113. package/dist-server/service/recipe/recipe-revision-service.js +591 -0
  114. package/dist-server/service/recipe/recipe-revision-service.js.map +1 -0
  115. package/dist-server/service/recipe/recipe-revision.d.ts +100 -0
  116. package/dist-server/service/recipe/recipe-revision.js +373 -0
  117. package/dist-server/service/recipe/recipe-revision.js.map +1 -0
  118. package/dist-server/service/recipe/route-definition.js +1 -0
  119. package/dist-server/service/recipe/route-definition.js.map +1 -1
  120. package/dist-server/service/resource/class-members.js +9 -0
  121. package/dist-server/service/resource/class-members.js.map +1 -1
  122. package/dist-server/service/status/master-status.js +2 -1
  123. package/dist-server/service/status/master-status.js.map +1 -1
  124. package/dist-server/service/test-spec/index.d.ts +3 -2
  125. package/dist-server/service/test-spec/index.js +4 -2
  126. package/dist-server/service/test-spec/index.js.map +1 -1
  127. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +34 -0
  128. package/dist-server/service/test-spec/test-spec-effective-list.js +42 -0
  129. package/dist-server/service/test-spec/test-spec-effective-list.js.map +1 -0
  130. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +4 -14
  131. package/dist-server/service/test-spec/test-spec-master-resolver.js +12 -83
  132. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -1
  133. package/dist-server/service/test-spec/test-spec-query.js +7 -1
  134. package/dist-server/service/test-spec/test-spec-query.js.map +1 -1
  135. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +53 -0
  136. package/dist-server/service/test-spec/test-spec-revision-resolver.js +76 -0
  137. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -0
  138. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +138 -0
  139. package/dist-server/service/test-spec/test-spec-revision-service.js +538 -0
  140. package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -0
  141. package/dist-server/service/test-spec/test-spec-revision.d.ts +84 -0
  142. package/dist-server/service/test-spec/test-spec-revision.js +334 -0
  143. package/dist-server/service/test-spec/test-spec-revision.js.map +1 -0
  144. package/dist-server/service/test-spec/test-specification.d.ts +6 -0
  145. package/dist-server/service/test-spec/test-specification.js +15 -2
  146. package/dist-server/service/test-spec/test-specification.js.map +1 -1
  147. package/dist-server/tsconfig.tsbuildinfo +1 -1
  148. package/package.json +10 -6
  149. package/translations/en.json +148 -0
  150. package/translations/ko.json +148 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-workspace.js","sourceRoot":"","sources":["../../../client/pages/master/revision-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist/ox-grist.js'\nimport gql from 'graphql-tag'\nimport { html, css, nothing } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { OxPrompt } from '@operato/popup'\nimport { IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\nimport { requestMasterChangeApproval, masterChangeStatus, MasterChangeStatus } from '../../master-change-approval.js'\nimport { revisionText as t, revisionDate as date, revisionStyles } from './revision-comparison.js'\nimport { materialRevisionFields } from './material-revision-fields.js'\nimport { RevisionAxis, localDateTime, isoFromLocal } from './revision-view.js'\n\n/** Shared workflow, not shared domain payload. Both consumers keep their existing page/URL identities. */\nexport abstract class RevisionWorkspace extends MasterPageBase {\n protected abstract axis: RevisionAxis\n static styles = [\n ...MasterPageBase.styles,\n revisionStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n ox-grist {\n flex: 1;\n min-height: 240px;\n }\n ox-grist[hidden] {\n display: none;\n }\n .workspace {\n overflow: auto;\n flex: 1;\n padding: 20px 24px;\n }\n .bar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n .bar h2 {\n margin: 8px 0;\n font-size: var(--ui-t-title, 20px);\n flex: 1;\n overflow-wrap: anywhere;\n }\n .summary {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));\n gap: 16px;\n margin: 20px 0;\n }\n .card {\n padding: 16px;\n border: 1px solid var(--ui-line);\n border-radius: 6px;\n background: var(--md-sys-color-surface);\n }\n .card h3 {\n margin: 0 0 10px;\n }\n .card p {\n margin: 8px 0;\n }\n .current {\n border-inline-start: 4px solid var(--md-sys-color-primary);\n }\n .fields {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n gap: 16px;\n margin: 16px 0;\n }\n label {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: var(--ui-t-small, 13px);\n }\n input,\n textarea {\n box-sizing: border-box;\n width: 100%;\n padding: 8px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n font: inherit;\n background: var(--md-sys-color-surface);\n color: inherit;\n }\n td input {\n min-width: 100px;\n }\n textarea {\n min-height: 70px;\n }\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 20px;\n align-items: center;\n }\n .notice {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n border-radius: 4px;\n }\n .failure {\n padding: 12px;\n border-inline-start: 4px solid var(--md-sys-color-error);\n color: var(--md-sys-color-error);\n }\n .empty {\n padding: 24px;\n }\n .hint {\n font-size: var(--ui-t-small, 13px);\n }\n .editor {\n border-top: 1px solid var(--ui-line);\n margin-top: 20px;\n padding-top: 12px;\n }\n @media (max-width: 700px) {\n .workspace {\n padding: 12px;\n }\n .summary {\n grid-template-columns: 1fr;\n }\n .fields {\n grid-template-columns: 1fr;\n }\n }\n `\n ]\n @state() private overview: any\n @state() private draft: any\n @state() private newName = ''\n @state() private busy = false\n @state() private dirty = false\n @state() private failure = ''\n @state() private message = ''\n @state() private approvalRequired: boolean | undefined\n @state() private statuses: Record<string, MasterChangeStatus> = {}\n private serial = 0\n private get recipe() {\n return this.axis === 'recipeDefinition'\n }\n private get material() { return this.axis === 'materialDefinition' }\n private get names() {\n if (this.material) return { noun: 'material', list: 'materialDefinitions', overview: 'materialDefinitionRevisions', subject: 'materialId', create: 'createMaterialDefinitionDraft', edit: 'editMaterialDefinitionDraft', publish: 'publishMaterialDefinitionDraft' }\n return this.recipe\n ? {\n noun: 'recipe',\n list: 'recipeDefinitions',\n overview: 'recipeRevisions',\n subject: 'recipeId',\n create: 'createRecipeDraft',\n edit: 'editRecipeDraft',\n publish: 'publishRecipeDraft'\n }\n : {\n noun: 'spec',\n list: 'testSpecifications',\n overview: 'testSpecificationRevisions',\n subject: 'specId',\n create: 'createTestSpecificationDraft',\n edit: 'editTestSpecificationDraft',\n publish: 'publishTestSpecificationDraft'\n }\n }\n protected get spec(): MasterSpec {\n return {\n key: this.axis,\n title: this.material ? 'material' : this.recipe ? 'recipe' : 'test-specification',\n help: 'ops-master/' + (this.material ? 'material-definition' : this.recipe ? 'recipe-definition' : 'test-specification'),\n query: this.names.list,\n mutation: this.material ? 'updateMultipleMaterialDefinition' : this.recipe ? 'updateMultipleRecipeDefinition' : 'updateMultipleTestSpecification',\n columns: [\n ...IDENTITY,\n ...(this.material ? [\n { name: 'rootClasses', label: 'material-type', type: 'list' as const, width: 120 },\n { name: 'classPath', label: 'class-lineage', type: 'list' as const, width: 180 },\n { name: 'madeBy', label: 'made-by', type: 'list' as const, width: 180 },\n { name: 'usedIn', label: 'used-in', type: 'list' as const, width: 180 }\n ] : []),\n { name: 'revisionNumber', label: 'revision', type: 'number' as const },\n { name: 'effectiveStart', label: 'effective-start', type: 'date' as const }\n ].map(column => ({ ...column, readonly: true }))\n }\n }\n protected get pathSegmentNarrowsList() {\n return false\n }\n get context(): any {\n return {\n ...super.context,\n importable: undefined,\n exportable: this.overview || this.draft ? undefined : super.context.exportable,\n search: this.overview || this.draft ? undefined : super.context.search,\n description: t('purpose'),\n actions:\n this.draft && !this.draft.frozenAt\n ? [\n {\n title: t(this.approvalRequired ? 'request-approval' : 'publish'),\n icon: 'done',\n emphasis: { raised: true },\n disabled: this.busy || this.approvalRequired === undefined,\n action: () => this.submit()\n }\n ]\n : this.overview || this.draft\n ? []\n : [\n {\n title: t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec'),\n icon: 'add',\n emphasis: { raised: true },\n action: () => this.startNew()\n }\n ]\n }\n }\n updated(changes: any) {\n super.updated(changes)\n if (this.active && ['overview', 'draft', 'busy', 'approvalRequired'].some(key => changes.has(key)))\n this.updateContext()\n }\n protected configOf() {\n const config = super.configOf()\n return { ...config, rows: { ...config.rows, appendable: false, selectable: { multiple: false } } }\n }\n async pageInitialized() {\n await super.pageInitialized()\n await this.openResource(this.lifecycle?.resourceId)\n }\n async pageUpdated(changes: any, after: any, before: any) {\n await super.pageUpdated()\n if (after?.resourceId !== before?.resourceId) await this.openResource(after?.resourceId)\n }\n private async openResource(key?: string) {\n if (!key) return\n await this.run(async () => {\n const response = await client.query({\n query: gql(`query($filters:[Filter!]){${this.names.list}(filters:$filters){items{id}}}`),\n variables: { filters: [{ name: 'name', operator: 'eq', value: key }] },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n const row = response.data[this.names.list].items[0]\n if (row) await this.load(row.id)\n })\n }\n private assert(response: any) {\n if (response.errors?.length) throw new Error(response.errors.map((e: any) => e.message).join('\\n'))\n if (!response.data) throw new Error(t('no-response'))\n }\n private async run(work: () => Promise<void>) {\n if (this.busy) return\n this.busy = true\n this.failure = ''\n try {\n await work()\n } catch (error) {\n this.failure = (error as Error).message\n } finally {\n this.busy = false\n }\n }\n private async canLeave() {\n return (\n !this.dirty ||\n !!(await OxPrompt.open({\n title: t('unsaved'),\n text: t('discard-question'),\n confirmButton: { text: t('discard') },\n cancelButton: { text: t('keep-editing') }\n }))\n )\n }\n private blank() {\n return {\n version: '1',\n description: '',\n materialDefinitionName: '',\n effectiveFrom: new Date().toISOString(),\n reason: '',\n materialClassIds: [], properties: [], testSpecificationIds: [],\n criteria: [],\n inputs: [],\n outputs: []\n }\n }\n private async policy() {\n const response = await client.query({\n query: gql`\n query ($axis: String!) {\n masterChangePolicy(axis: $axis)\n }\n `,\n variables: { axis: this.axis },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n this.approvalRequired = response.data.masterChangePolicy.approvalRequired\n }\n private async startNew() {\n if (!(await this.canLeave())) return\n await this.run(async () => {\n ++this.serial\n this.overview = undefined\n this.draft = this.blank()\n this.newName = ''\n this.dirty = false\n this.message = ''\n await this.policy()\n })\n }\n private async pick(event: CustomEvent) {\n const row = event.detail?.records?.[0] ?? event.detail?.added?.[0]\n if (!row?.id || !(await this.canLeave())) return\n await this.run(async () => {\n this.draft = undefined\n this.dirty = false\n this.message = ''\n await this.load(row.id)\n })\n }\n private async load(id: string) {\n const serial = ++this.serial\n const response = await client.query({\n query: gql(`query($id:String!){${this.names.overview}(${this.names.subject}:$id)}`),\n variables: { id },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n if (serial !== this.serial) return\n this.overview = response.data[this.names.overview]\n await this.policy()\n const statuses: Record<string, MasterChangeStatus> = {}\n await Promise.all(\n this.overview.revisions\n .filter((row: any) => row.activityInstanceId)\n .map(async (row: any) => {\n try {\n statuses[row.id] = await masterChangeStatus(this, row.activityInstanceId)\n } catch (error) {\n statuses[row.id] = { state: 'unknown', comment: (error as Error).message }\n }\n })\n )\n if (serial === this.serial) this.statuses = statuses\n }\n private get currentSegment() {\n return this.overview?.schedule.find((s: any) => s.state === 'current')\n }\n private get current() {\n return this.overview?.revisions.find((r: any) => r.id === this.currentSegment?.revisionId)\n }\n private get comparisonBase() {\n if (this.draft?.id && (!this.dirty || this.draft.frozenAt))\n return this.overview?.revisions.find((r: any) => r.id === this.draft.baseRevisionId)\n const at = this.draft?.effectiveFrom\n const segment = this.overview?.schedule.find((s: any) => s.validFrom <= at && (!s.validTo || at < s.validTo))\n return this.overview?.revisions.find((r: any) => r.id === segment?.revisionId)\n }\n private stateOf(row: any) {\n const segment = this.overview?.schedule.find((s: any) => s.revisionId === row.id)\n return (\n segment?.state ??\n (row.activityInstanceId ? (this.statuses[row.id]?.state ?? 'unknown') : row.frozenAt ? 'approved' : 'draft')\n )\n }\n private async openRevision(row: any, fork = false) {\n if (!(await this.canLeave())) return\n this.draft = structuredClone(row ?? this.blank())\n if (fork)\n this.draft = {\n ...this.draft,\n id: undefined,\n revisionNumber: undefined,\n frozenAt: undefined,\n activityInstanceId: undefined,\n editGeneration: undefined,\n baseRevisionId: undefined,\n effectiveFrom: new Date().toISOString(),\n reason: ''\n }\n this.dirty = false\n this.message = ''\n await this.updateComplete\n this.renderRoot.querySelector('.editor')?.scrollIntoView({ block: 'start', behavior: 'smooth' })\n }\n private change(field: string, value: any) {\n this.draft = { ...this.draft, [field]: value }\n this.dirty = true\n this.message = ''\n }\n private line(section: string, index: number, field: string, value: string) {\n const rows = this.draft[section].map((row: any) => ({ ...row, limit: { ...row.limit } }))\n const numeric = ['qty', 'minimum', 'maximum'].includes(field)\n const next = numeric ? (value === '' ? undefined : Number(value)) : value\n if (section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)) rows[index].limit[field] = next\n else rows[index][field] = next\n this.change(section, rows)\n }\n protected async save() {\n await this.run(async () => {\n await this.persist()\n this.message = t('saved')\n })\n }\n private async persist() {\n if (!this.draft || this.draft.frozenAt) return\n const invalid = this.renderRoot.querySelector('input:invalid,textarea:invalid') as HTMLInputElement\n if (invalid) {\n invalid.reportValidity()\n throw new Error(t('required-fields'))\n }\n const { version, description, criteria, inputs, outputs, materialDefinitionName, route, effectiveFrom, reason } =\n this.draft\n const content = this.material\n ? { description, materialClassIds: this.draft.materialClassIds, properties: this.draft.properties, testSpecificationIds: this.draft.testSpecificationIds, effectiveFrom, reason }\n : this.recipe\n ? { description, inputs, outputs, materialDefinitionName, route: route || null, effectiveFrom, reason }\n : { version, description, criteria, effectiveFrom, reason }\n const n = this.names\n const response = this.draft.id\n ? await client.mutate({\n mutation: gql(\n `mutation($id:String!,$generation:Int!,$content:Object!){${n.edit}(revisionId:$id,editGeneration:$generation,content:$content)}`\n ),\n variables: { id: this.draft.id, generation: this.draft.editGeneration, content }\n })\n : await client.mutate({\n mutation: gql(\n `mutation($subject:String,$name:String,$content:Object!){${n.create}(${n.subject}:$subject,name:$name,content:$content)}`\n ),\n variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName, content }\n })\n this.assert(response)\n this.draft = response.data[n.edit] ?? response.data[n.create]\n this.dirty = false\n await this.load(this.draft[n.subject])\n await this.grist?.fetch()\n }\n private async submit() {\n await this.run(async () => {\n await this.persist()\n if (!this.draft?.id || this.draft.frozenAt) return\n await this.policy()\n if (this.approvalRequired)\n await requestMasterChangeApproval(this, {\n axis: this.axis,\n revisionId: this.draft.id,\n editGeneration: this.draft.editGeneration\n })\n else {\n const response = await client.mutate({\n mutation: gql(\n `mutation($id:String!,$generation:Int!){${this.names.publish}(revisionId:$id,editGeneration:$generation)}`\n ),\n variables: { id: this.draft.id, generation: this.draft.editGeneration }\n })\n this.assert(response)\n }\n const id = this.draft.id\n await this.load(this.draft[this.names.subject])\n this.draft = this.overview.revisions.find((r: any) => r.id === id)\n await this.grist?.fetch()\n this.message = t(this.approvalRequired ? 'submitted' : 'published')\n })\n }\n private content(row: any, editable = false) {\n if (this.material) return materialRevisionFields(row, editable ? (field, value) => this.change(field, value) : undefined)\n return (this.recipe ? ['inputs', 'outputs'] : ['criteria']).map(section => {\n const fields =\n section === 'criteria'\n ? ['id', 'description', 'evaluatedPropertyId', 'minimum', 'maximum', 'uom', 'expression']\n : section === 'inputs'\n ? ['material', 'qty', 'operation']\n : ['material', 'qty']\n return html`<h3>${t(section)}</h3>\n <div class=\"scroll\">\n <table>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${t(field)}</th>`)}${editable ? html`<th>${t('actions')}</th>` : nothing}\n </tr>\n </thead>\n <tbody>\n ${(row[section] ?? []).map(\n (line: any, index: number) =>\n html`<tr>\n ${fields.map(field => {\n const value =\n section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)\n ? line.limit?.[field]\n : line[field]\n return html`<td>\n ${editable ? html`<input aria-label=${t(section) + ' ' + (index + 1) + ' ' + t(field)} .value=${String(value ?? '')} type=${['qty', 'minimum', 'maximum'].includes(field) ? 'number' : 'text'} step=\"any\" ?required=${['id', 'material', 'qty', 'evaluatedPropertyId'].includes(field)} @input=${(e: Event) => this.line(section, index, field, (e.target as HTMLInputElement).value)} />` : (value ?? '—')}\n </td>`\n })}${\n editable\n ? html`<td>\n <button\n aria-label=${t('remove-row', { n: index + 1 })}\n @click=${() =>\n this.change(\n section,\n row[section].filter((_: any, i: number) => i !== index)\n )}\n >\n ${t('remove')}\n </button>\n </td>`\n : nothing\n }\n </tr>`\n )}\n </tbody>\n </table>\n </div>\n ${editable ? html`<button @click=${() => this.change(section, [...row[section], section === 'criteria' ? { id: '', description: '', limit: {} } : { lineKey: crypto.randomUUID(), material: '', qty: 1 }])}>${t('add-' + section)}</button>` : nothing}\n ${section === 'criteria' && row.criteria?.some((c: any) => c.expression) ? html`<p class=\"notice\">${t('expression-preserved')}</p>` : nothing}`\n })\n }\n private status(row: any) {\n const state = this.stateOf(row),\n decision = this.statuses[row.id]\n return html`<span class=\"pill\">${t(state)}</span\n >${decision?.who ? html`<span> · ${decision.who}</span>` : ''}${decision?.comment ? html`<p>${decision.comment}</p>` : ''}${decision?.open ? html`<button @click=${() => decision.open!()}>${t('approval-detail')}</button>` : ''}`\n }\n render() {\n const current = this.current\n const next = this.overview?.schedule.filter((s: any) => s.state === 'scheduled') ?? []\n const changes =\n this.overview?.revisions.filter((r: any) => !this.overview.schedule.some((s: any) => s.revisionId === r.id)) ?? []\n const readonly = !!this.draft?.frozenAt || this.busy\n return html` <ox-grist\n ?hidden=${!!this.overview || !!this.draft}\n .mode=${this.mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n @select-record-change=${this.pick.bind(this)}\n ></ox-grist>\n ${\n this.overview || this.draft\n ? html`<main class=\"workspace\" aria-busy=${this.busy}>\n <div class=\"bar\">\n <button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.overview = undefined\n this.draft = undefined\n this.dirty = false\n await this.grist?.fetch()\n }\n }}\n >\n ${t('back-list')}\n </button>\n <h2>${this.overview?.name ?? t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec')}</h2>\n ${\n this.overview\n ? html`<button\n ?disabled=${this.busy}\n @click=${() =>\n this.run(async () => {\n this.message = ''\n await this.load(this.overview[this.names.subject])\n await this.grist?.fetch()\n })}\n >\n ${t('refresh')}</button\n ><button\n class=\"primary\"\n ?disabled=${this.busy}\n @click=${() => this.openRevision(current, true)}\n >\n ${t('create-change')}\n </button>`\n : ''\n }\n </div>\n ${\n this.overview\n ? html`<div class=\"summary\">\n <section class=\"card current\">\n <h3>${t('current')}</h3>\n ${\n current\n ? html`<strong>${t('revision-value', { n: current.revisionNumber })}</strong>\n <p>\n ${date(this.currentSegment.validFrom)} →\n ${this.currentSegment.validTo ? date(this.currentSegment.validTo) : t('until-change')}\n </p>\n <button @click=${() => this.openRevision(current)}>${t('view-current')}</button>`\n : html`<p>${t('no-current')}</p>`\n }\n </section>\n <section class=\"card\">\n <h3>${t('changes-in-progress')} · ${changes.length}</h3>\n ${changes.length ? changes.map((row: any) => html`<p><button @click=${() => this.openRevision(row)}>${t('revision-value', { n: row.revisionNumber })}</button> ${this.status(row)}</p>`) : html`<p class=\"muted\">${t('no-drafts')}</p>`}\n </section>\n <section class=\"card\">\n <h3>${t('scheduled')}</h3>\n ${\n next.length\n ? next.map((segment: any) => {\n const row = this.overview.revisions.find((r: any) => r.id === segment.revisionId)\n return html`<p>\n <button @click=${() => this.openRevision(row)}>\n ${t('revision-value', { n: row.revisionNumber })}\n </button>\n · ${date(segment.validFrom)}\n </p>`\n })\n : html`<p class=\"muted\">${t('no-scheduled')}</p>`\n }\n </section>\n </div>\n ${\n !this.draft && current\n ? html`<h3>${t('current-content')}</h3>\n <p>${current.description}</p>\n ${this.content(current)}`\n : ''\n }\n <details>\n <summary>${t('history')}</summary>\n <table>\n <thead>\n <tr>\n <th>${t('revision')}</th>\n <th>${t('state')}</th>\n <th>${t('effectiveFrom')}</th>\n <th>${t('reason')}</th>\n </tr>\n </thead>\n <tbody>\n ${[...this.overview.revisions].reverse().map(\n (row: any) =>\n html`<tr>\n <td><button @click=${() => this.openRevision(row)}>${row.revisionNumber}</button></td>\n <td>${this.status(row)}</td>\n <td>${date(row.effectiveFrom)}</td>\n <td>${row.reason}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </details>`\n : ''\n }\n ${\n this.draft\n ? html`<section class=\"editor\">\n <div class=\"bar\">\n <h3>\n ${this.draft.id ? t('revision-value', { n: this.draft.revisionNumber }) : t('new-change')}\n </h3>\n ${this.draft.id ? this.status(this.draft) : ''}<button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.draft = undefined\n this.dirty = false\n }\n }}\n >\n ${t('close-editor')}\n </button>\n </div>\n <p class=\"notice\">${t(this.material ? 'material-impact' : this.recipe ? 'recipe-impact' : 'spec-impact')}</p>\n <div class=\"fields\">\n ${\n !this.overview\n ? html`<label\n >${t('name')}<input\n required\n .value=${this.newName}\n @input=${(e: Event) => {\n this.newName = (e.target as HTMLInputElement).value\n this.dirty = true\n }}\n /></label>`\n : ''\n }\n ${['description', ...(this.material ? [] : this.recipe ? ['materialDefinitionName', 'route'] : ['version'])].map(field => html`<label>${t(field)}<input ?disabled=${readonly} ?required=${field === 'materialDefinitionName' || field === 'version'} .value=${this.draft[field] ?? ''} @input=${(e: Event) => this.change(field, (e.target as HTMLInputElement).value)} /></label>`)}\n <label\n >${t('effectiveFrom')}<input\n type=\"datetime-local\"\n required\n ?disabled=${readonly}\n .value=${localDateTime(this.draft.effectiveFrom)}\n @change=${(e: Event) => {\n try {\n this.change('effectiveFrom', isoFromLocal((e.target as HTMLInputElement).value))\n } catch {\n this.failure = t('invalid-date')\n }\n }}\n /><span class=\"muted hint\"\n >${t('time-zone')} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</span\n ></label\n >\n <label\n >${t('reason')}<textarea\n required\n ?disabled=${readonly}\n .value=${this.draft.reason ?? ''}\n @input=${(e: Event) => this.change('reason', (e.target as HTMLTextAreaElement).value)}\n ></textarea>\n </label>\n </div>\n ${this.content(this.draft, !readonly)}\n <ops-master-revision-comparison\n .axis=${this.axis}\n .before=${this.comparisonBase}\n .after=${this.draft}\n ></ops-master-revision-comparison>\n <div class=\"actions\">\n ${this.draft.frozenAt ? html`<button ?disabled=${this.busy} @click=${() => this.openRevision(this.draft, true)}>${t('create-change')}</button>` : html`<button ?disabled=${this.busy} @click=${() => this.save()}>${t('save-draft')}</button>`}${this.dirty ? html`<span>${t('unsaved')}</span>` : ''}\n </div>\n </section>`\n : ''\n }\n ${this.message ? html`<p role=\"status\" class=\"notice\">${this.message}</p>` : ''}${this.failure ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>` : ''}\n </main>`\n : this.failure\n ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>`\n : nothing\n }`\n }\n}\n"]}
@@ -1,93 +1,5 @@
1
- import '@operato/data-grist/ox-grist.js';
2
- import { MasterPageBase, MasterSpec } from './master-page-base.js';
3
- /**
4
- * 무엇을 어떻게 검사하나 — 항목과 상하한과 방법.
5
- *
6
- * 인원 등급과 자산 등급이 이것을 요구 검사로 가리킨다.
7
- *
8
- * ── 왜 이 축만 자기 화면을 갖나 ────────────────────────────────────────────
9
- * 다른 축의 칸은 글자 · 숫자 · 날짜라서 공통 그리드 하나로 충분하다. 검사 명세는 다르다. **명세 하나가
10
- * 기준 여럿을 갖는다.** 기준 하나는 이름 · 설명 · 측정 속성 · 하한 · 상한 · 단위 · 표현식을 갖는다.
11
- *
12
- * 그것을 한 칸에 JSON 원문으로 보이면 품질팀장이 상한을 40.5 로 고치려고 중괄호를 세게 된다. 그것은
13
- * 기준 정보를 다루는 화면이 아니라 개발자가 JSON 을 손보는 화면이다. 실제로 한동안 그랬다.
14
- *
15
- * ── 화면은 JSON 을 모른다 ──────────────────────────────────────────────────
16
- * 서버가 기준을 **행으로** 낸다(`testSpecificationCriteria`) 그리고 행으로 받는다
17
- * (`updateTestSpecificationCriteria`). 옮김은 서버의 `criteria-rows.ts` 한 곳이 맡는다.
18
- *
19
- * 그래서 저장이 언젠가 표로 내려가도 **이 파일은 바뀌지 않는다.** 화면이 JSON 을 풀면 그날 이 코드가
20
- * 통째로 버려진다.
21
- *
22
- * ── 위아래로 나눈다 ────────────────────────────────────────────────────────
23
- * 위는 명세 목록, 아래는 **고른 명세의 기준**이다. 아무것도 안 고른 상태를 빈 표로 두지 않는다 —
24
- * 빈 표는 「기준이 없는 명세」와 같아 보이고, 그러면 사람이 기준을 다시 적는다.
25
- */
26
- export declare class OpsMasterTestSpecification extends MasterPageBase {
27
- static styles: import("lit").CSSResult[];
28
- protected get spec(): MasterSpec;
29
- /** 지금 고른 명세의 이름. 없으면 아래를 빈 표로 두지 않는다. */
30
- private picked?;
31
- /**
32
- * 지금 체크된 명세들.
33
- *
34
- * 아래는 **하나의 기준만** 보이는데 위에서 여럿을 체크할 수 있다(명세 여럿을 한 번에 종료하는 데
35
- * 쓴다). 그때 화면이 아무 말도 안 하면 보이는 기준이 **여럿을 합친 것**으로 읽힌다. 그래서 몇 개가
36
- * 체크돼 있는지 세어 말한다.
37
- */
38
- private checked;
39
- private criteriaGrist;
40
- /**
41
- * 아래 표에서 아직 저장하지 않은 기준이 몇 건인가.
42
- *
43
- * ── 왜 세어 보이나 (2026-09-05) ────────────────────────────────────────
44
- * 이 화면은 표가 둘인데 「저장」은 하나다. 아래를 고쳐 놓고도 그것이 저장 대상인지 화면 어디에도
45
- * 안 적혀 있었다. 「복잡한 편집인데 저장 버튼의 기능이 위험해 보인다」(사용자).
46
- *
47
- * 세어서 표 머리에 적으면 두 가지가 한꺼번에 풀린다. 저장을 누르기 전에 **무엇이 나가는지** 보이고,
48
- * 다른 명세로 넘어가려 할 때 **버릴 것이 있다**는 사실도 보인다.
49
- */
50
- private dirtyCriteria;
51
- private countDirtyCriteria;
52
- /**
53
- * 기준 표의 구성.
54
- *
55
- * **단위 칸을 좁히지 않는다.** `MMT`(mm) · `CEL`(℃) 같은 UN/CEFACT 코드가 들어가고, 잘리면
56
- * 「무엇으로 잰 값인지」가 화면에서 사라진다.
57
- */
58
- private get criteriaConfig();
59
- render(): import("lit-html").TemplateResult<1>;
60
- /**
61
- * 위에서 고른 줄이 아래를 정한다.
62
- *
63
- * ── detail 모양이 거터 설정에 따라 다르다 ─────────────────────────────────
64
- * `gutter-row-selector.js` 를 보면 두 모양을 낸다.
65
- *
66
- * ```
67
- * multiple: true { added: [record], removed: [] } ← 이 화면이 쓰는 것
68
- * 그 밖 { records: [record] }
69
- * ```
70
- *
71
- * 한쪽만 읽으면 **오류보고없이 아무것도 안 골라진다.** 오류가 나지 않고 아래 표만 영원히 안내 문구로
72
- * 남는다. 처음에 `records` 만 읽어서 실제로 그랬다. 그리드가 세우는 `__selected__` 를 읽는 방법도
73
- * 있는데, 그 표시는 이 화면에 오지 않았다. 그래서 **둘 다 읽는다.**
74
- *
75
- * 여럿 고르면 마지막에 고른 것을 본다. 아래는 명세 하나의 기준을 보이는 자리라 둘을 함께 보일 수
76
- * 없고, 아무 것이나 고르면 사람은 그것이 무엇의 기준인지 모른다.
77
- */
78
- private pick;
79
- /**
80
- * 고른 명세의 기준을 읽는다.
81
- *
82
- * 못 읽으면 **빈 목록으로 바꾸지 않는다.** 빈 목록은 「기준이 없다」와 같아 보이고, 그러면 사람이
83
- * 기준을 다시 적어 넣는다. 무엇이 잘못됐는지 말하고 비운다.
84
- */
85
- private fetchCriteria;
86
- /**
87
- * 저장 — **위와 아래를 따로 낸다.**
88
- *
89
- * 명세 자체(이름 · 버전 · 유효 기간)는 공통 규칙이 저장하고, 기준은 이 축의 뮤테이션이 저장한다.
90
- * 기준이 막히면 **명세 쪽도 되돌린다.** 절반만 저장되면 화면과 저장된 것이 달라진다.
91
- */
92
- protected save(): Promise<void>;
1
+ import { RevisionWorkspace } from './revision-workspace.js';
2
+ import { RevisionAxis } from './revision-view.js';
3
+ export declare class OpsMasterTestSpecification extends RevisionWorkspace {
4
+ protected axis: RevisionAxis;
93
5
  }