@things-factory/board-ui 10.1.256 → 10.1.258

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.
@@ -14,7 +14,8 @@ import { LitElement } from 'lit';
14
14
  export declare class BoardVersions extends LitElement {
15
15
  static styles: import("lit").CSSResult[];
16
16
  boardId?: string;
17
- versions: any[];
17
+ private released;
18
+ get versions(): any[];
18
19
  /** version → 컴포넌트 diff 결과(펼쳐진 경우만) */
19
20
  diffs: {
20
21
  [version: number]: any;
@@ -22,8 +23,6 @@ export declare class BoardVersions extends LitElement {
22
23
  render(): import("lit-html").TemplateResult<1>;
23
24
  private renderDiff;
24
25
  toggleDiff(version: number, prevVersion?: number): Promise<void>;
25
- firstUpdated(): void;
26
- refresh(): Promise<void>;
27
26
  revertBoardVersion(version: number): void;
28
27
  close(): void;
29
28
  }
@@ -5,7 +5,7 @@ import gql from 'graphql-tag';
5
5
  import { css, html, LitElement } from 'lit';
6
6
  import { customElement, property, state } from 'lit/decorators.js';
7
7
  import { i18next } from '@operato/i18n';
8
- import { client } from '@operato/graphql';
8
+ import { client, QueryController } from '@operato/graphql';
9
9
  import { privileged } from '@things-factory/auth-base/dist-client/index.js';
10
10
  /**
11
11
  * 보드 버전 이력 패널.
@@ -20,7 +20,21 @@ import { privileged } from '@things-factory/auth-base/dist-client/index.js';
20
20
  let BoardVersions = class BoardVersions extends LitElement {
21
21
  constructor() {
22
22
  super(...arguments);
23
- this.versions = [];
23
+ /* The board's released versions, read for the board shown (ADR-0190). */
24
+ this.released = new QueryController(this, gql `
25
+ query FetchBoardVersionsById($id: String!) {
26
+ boardVersions(id: $id) {
27
+ id
28
+ version
29
+ thumbnail
30
+ comment
31
+ updater {
32
+ name
33
+ }
34
+ updatedAt
35
+ }
36
+ }
37
+ `, { variables: () => (this.boardId ? { id: this.boardId } : undefined) });
24
38
  /** version → 컴포넌트 diff 결과(펼쳐진 경우만) */
25
39
  this.diffs = {};
26
40
  }
@@ -241,6 +255,9 @@ let BoardVersions = class BoardVersions extends LitElement {
241
255
  }
242
256
  `
243
257
  ]; }
258
+ get versions() {
259
+ return this.released.data?.boardVersions || [];
260
+ }
244
261
  render() {
245
262
  if (this.versions.length == 0) {
246
263
  /* 빈 상태는 프레임워크 공통 부품(ox-empty-note)을 사용 — 자체 구현 금지 */
@@ -355,33 +372,6 @@ let BoardVersions = class BoardVersions extends LitElement {
355
372
  });
356
373
  this.diffs = { ...this.diffs, [version]: response.data.boardVersionDiff };
357
374
  }
358
- firstUpdated() {
359
- this.refresh();
360
- }
361
- async refresh() {
362
- if (!this.boardId) {
363
- return;
364
- }
365
- const response = (await client.query({
366
- query: gql `
367
- query FetchBoardVersionsById($id: String!) {
368
- boardVersions(id: $id) {
369
- id
370
- version
371
- thumbnail
372
- comment
373
- updater {
374
- name
375
- }
376
- updatedAt
377
- }
378
- }
379
- `,
380
- variables: { id: this.boardId },
381
- fetchPolicy: 'no-cache'
382
- })).data;
383
- this.versions = response.boardVersions || [];
384
- }
385
375
  revertBoardVersion(version) {
386
376
  this.dispatchEvent(new CustomEvent('revert-board-version', {
387
377
  detail: {
@@ -401,10 +391,6 @@ __decorate([
401
391
  property({ type: String }),
402
392
  __metadata("design:type", String)
403
393
  ], BoardVersions.prototype, "boardId", void 0);
404
- __decorate([
405
- state(),
406
- __metadata("design:type", Array)
407
- ], BoardVersions.prototype, "versions", void 0);
408
394
  __decorate([
409
395
  state(),
410
396
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"board-versions.js","sourceRoot":"","sources":["../../client/viewparts/board-versions.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-empty-note.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { client } from '@operato/graphql'\n\nimport { privileged } from '@things-factory/auth-base/dist-client/index.js'\n\n/**\n * 보드 버전 이력 패널.\n *\n * - 릴리즈된 버전 목록(썸네일·버전배지·코멘트·작성자/시각)\n * - 각 버전을 \"앞 버전\"과 비교하는 diff(체인지로그)\n * - 과거 버전을 draft 로 복사(revert)\n *\n * 카드 상단: 썸네일(절반) 좌측 + 태그(버전·최신·작성자·시각) 우측.\n * 카드 하단: 코멘트 · 액션(diff/revert) · diff 패널 (전체 폭).\n */\n@customElement('board-versions')\nexport class BoardVersions extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n overflow-y: auto;\n box-sizing: border-box;\n background-color: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n font-size: 12px;\n line-height: 1.35;\n padding: var(--spacing-medium, 12px);\n }\n\n [list] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n [card] {\n display: flex;\n flex-direction: column;\n gap: 7px;\n padding: 10px;\n border: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n border-radius: 10px;\n background: var(--md-sys-color-surface-container-low, var(--md-sys-color-surface));\n text-align: start;\n }\n [card][latest] {\n border-color: var(--md-sys-color-primary);\n }\n\n /* 상단: 썸네일(좌, 절반) + 태그(우) */\n [top] {\n display: flex;\n gap: 10px;\n align-items: stretch;\n }\n [thumb] {\n flex: 0 0 48%;\n max-width: 48%;\n height: 88px;\n border-radius: 8px;\n overflow: hidden;\n background: var(--md-sys-color-surface-variant, rgba(0, 0, 0, 0.04));\n display: flex;\n align-items: center;\n justify-content: center;\n }\n [thumb] img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n [thumb] md-icon {\n opacity: 0.4;\n --md-icon-size: 26px;\n }\n\n [tags] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 5px;\n }\n\n /* 아이콘 + 텍스트 수평 중심 정렬 공통 */\n [ver],\n [latest-tag],\n [meta],\n button {\n display: inline-flex;\n align-items: center;\n }\n\n [badges] {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 5px 6px;\n }\n [ver] {\n gap: 3px;\n font-weight: 700;\n font-size: 11px;\n color: var(--md-sys-color-on-primary);\n background: var(--md-sys-color-primary);\n border-radius: 999px;\n padding: 1px 8px;\n }\n [ver] md-icon {\n --md-icon-size: 13px;\n }\n [latest-tag] {\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--md-sys-color-primary);\n border: 1px solid var(--md-sys-color-primary);\n border-radius: 999px;\n padding: 0 6px;\n line-height: 1.5;\n }\n [meta] {\n gap: 4px;\n font-size: 10.5px;\n opacity: 0.68;\n min-width: 0;\n max-width: 100%;\n }\n [meta] [name] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n [meta] md-icon {\n --md-icon-size: 13px;\n flex: 0 0 auto;\n }\n\n /* 코멘트: 밀도 높은 카드에서 시선을 덜 끌도록 accent 제거한 조용한 보조 텍스트 */\n [comment] {\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant, inherit);\n opacity: 0.72;\n padding: 0;\n }\n [comment][empty] {\n opacity: 0.42;\n font-style: italic;\n }\n\n [actions] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 1px;\n }\n button {\n cursor: pointer;\n font: inherit;\n font-size: 11px;\n gap: 4px;\n border: 1px solid var(--md-sys-color-outline, rgba(0, 0, 0, 0.2));\n background: transparent;\n color: inherit;\n border-radius: 999px;\n padding: 2px 11px;\n }\n button:hover {\n background: var(--md-sys-color-surface-variant, rgba(0, 0, 0, 0.05));\n }\n button md-icon {\n --md-icon-size: 14px;\n }\n button[revert] {\n margin-left: auto;\n color: var(--md-sys-color-primary);\n border-color: var(--md-sys-color-primary);\n }\n\n [diff] {\n margin-top: 3px;\n font-size: 11px;\n border-top: 1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n padding-top: 5px;\n max-height: 220px;\n overflow-y: auto;\n }\n [summary] {\n display: flex;\n gap: 5px;\n margin-bottom: 5px;\n }\n [summary] span {\n border-radius: 999px;\n padding: 0 7px;\n font-weight: 700;\n font-size: 10.5px;\n border: 1px solid currentColor;\n }\n [add] {\n color: var(--md-sys-color-primary, #2e7d32);\n }\n [del] {\n color: var(--md-sys-color-error, #b00020);\n }\n [mod] {\n color: var(--status-warning-color, #b26a00);\n }\n [change] {\n display: block;\n padding: 1px 0;\n }\n [change][del] {\n text-decoration: line-through;\n opacity: 0.85;\n }\n [change] small {\n opacity: 0.65;\n }\n [muted] {\n opacity: 0.6;\n font-style: italic;\n }\n\n ox-empty-note {\n padding: 40px 12px;\n }\n `\n ]\n\n @property({ type: String }) boardId?: string\n\n @state() versions: any[] = []\n /** version → 컴포넌트 diff 결과(펼쳐진 경우만) */\n @state() diffs: { [version: number]: any } = {}\n\n render() {\n if (this.versions.length == 0) {\n /* 빈 상태는 프레임워크 공통 부품(ox-empty-note)을 사용 — 자체 구현 금지 */\n return html`\n <ox-empty-note icon=\"history\" title=${i18next.t('text.no released version information available')}>\n </ox-empty-note>\n `\n }\n\n return html`\n <div list>\n ${this.versions.map(\n (version, index) => html`\n <div card ?latest=${index === 0}>\n <div top>\n <div thumb>\n ${version.thumbnail\n ? html`<img src=${version.thumbnail} alt=\"v${version.version}\" />`\n : html`<md-icon>dashboard</md-icon>`}\n </div>\n <div tags>\n <div badges>\n <span ver><md-icon>sell</md-icon>v${version.version}</span>\n ${index === 0 ? html`<span latest-tag>${i18next.t('text.latest')}</span>` : ''}\n </div>\n <span meta>\n <md-icon>person</md-icon>\n <span name title=${version.updater?.name || 'anonymous'}\n >${version.updater?.name || 'anonymous'}</span\n >\n </span>\n <span meta><md-icon>schedule</md-icon>${new Date(version.updatedAt).toLocaleString()}</span>\n </div>\n </div>\n\n ${version.comment\n ? html`<div comment>${version.comment}</div>`\n : html`<div comment empty>${i18next.t('text.no comment')}</div>`}\n\n <div actions>\n <button @click=${() => this.toggleDiff(version.version, this.versions[index + 1]?.version)}>\n <md-icon>difference</md-icon>${i18next.t('button.diff with previous')}\n </button>\n ${privileged(\n { privilege: 'mutation', category: 'board' },\n html`\n <button revert @click=${() => this.revertBoardVersion(version.version)}>\n <md-icon>settings_backup_restore</md-icon>${i18next.t('button.copy to draft')}\n </button>\n `\n )}\n </div>\n\n ${this.diffs[version.version] ? this.renderDiff(this.diffs[version.version]) : ''}\n </div>\n `\n )}\n </div>\n `\n }\n\n private renderDiff(diff: any) {\n if (diff.earliest) {\n return html`<div diff><span muted>${i18next.t('text.initial version all new')}</span></div>`\n }\n\n const componentDiffs = diff.componentDiffs || []\n if (componentDiffs.length == 0) {\n return html`<div diff><span muted>${i18next.t('text.no difference from previous')}</span></div>`\n }\n\n const label = (d: any) => (d.refid == null ? d.type || 'scene' : `${d.type || 'component'} #${d.refid}`)\n\n return html`\n <div diff>\n <div summary>\n <span add>+${diff.addedCount}</span>\n <span del>−${diff.removedCount}</span>\n <span mod>~${diff.modifiedCount}</span>\n </div>\n ${componentDiffs.map((d: any) => {\n if (d.changeType == 'added') return html`<span change add>+ ${label(d)}</span>`\n if (d.changeType == 'removed') return html`<span change del>− ${label(d)}</span>`\n return html`<span change mod>~ ${label(d)} <small>(${(d.changedProps || []).join(', ')})</small></span>`\n })}\n </div>\n `\n }\n\n async toggleDiff(version: number, prevVersion?: number) {\n if (this.diffs[version]) {\n const { [version]: _removed, ...rest } = this.diffs\n this.diffs = rest\n return\n }\n\n // 앞 버전과 비교 = \"이 버전이 무엇을 바꿨나\". 최초 버전은 앞 버전이 없어 전체 신규.\n if (prevVersion === undefined || prevVersion === null) {\n this.diffs = { ...this.diffs, [version]: { earliest: true } }\n return\n }\n\n const response = await client.query({\n query: gql`\n query BoardVersionDiff($id: String!, $base: Int!, $to: Int!) {\n boardVersionDiff(id: $id, version: $base, toVersion: $to) {\n fromVersion\n toVersion\n addedCount\n removedCount\n modifiedCount\n componentDiffs {\n refid\n type\n changeType\n changedProps\n }\n }\n }\n `,\n variables: { id: this.boardId, base: prevVersion, to: version },\n fetchPolicy: 'no-cache'\n })\n\n this.diffs = { ...this.diffs, [version]: response.data.boardVersionDiff }\n }\n\n firstUpdated() {\n this.refresh()\n }\n\n async refresh() {\n if (!this.boardId) {\n return\n }\n\n const response = (\n await client.query({\n query: gql`\n query FetchBoardVersionsById($id: String!) {\n boardVersions(id: $id) {\n id\n version\n thumbnail\n comment\n updater {\n name\n }\n updatedAt\n }\n }\n `,\n variables: { id: this.boardId },\n fetchPolicy: 'no-cache'\n })\n ).data\n\n this.versions = response.boardVersions || []\n }\n\n revertBoardVersion(version: number) {\n this.dispatchEvent(\n new CustomEvent('revert-board-version', {\n detail: {\n id: this.boardId,\n version\n },\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"board-versions.js","sourceRoot":"","sources":["../../client/viewparts/board-versions.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-empty-note.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { client, QueryController } from '@operato/graphql'\n\nimport { privileged } from '@things-factory/auth-base/dist-client/index.js'\n\n/**\n * 보드 버전 이력 패널.\n *\n * - 릴리즈된 버전 목록(썸네일·버전배지·코멘트·작성자/시각)\n * - 각 버전을 \"앞 버전\"과 비교하는 diff(체인지로그)\n * - 과거 버전을 draft 로 복사(revert)\n *\n * 카드 상단: 썸네일(절반) 좌측 + 태그(버전·최신·작성자·시각) 우측.\n * 카드 하단: 코멘트 · 액션(diff/revert) · diff 패널 (전체 폭).\n */\n@customElement('board-versions')\nexport class BoardVersions extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n overflow-y: auto;\n box-sizing: border-box;\n background-color: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n font-size: 12px;\n line-height: 1.35;\n padding: var(--spacing-medium, 12px);\n }\n\n [list] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n [card] {\n display: flex;\n flex-direction: column;\n gap: 7px;\n padding: 10px;\n border: 1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n border-radius: 10px;\n background: var(--md-sys-color-surface-container-low, var(--md-sys-color-surface));\n text-align: start;\n }\n [card][latest] {\n border-color: var(--md-sys-color-primary);\n }\n\n /* 상단: 썸네일(좌, 절반) + 태그(우) */\n [top] {\n display: flex;\n gap: 10px;\n align-items: stretch;\n }\n [thumb] {\n flex: 0 0 48%;\n max-width: 48%;\n height: 88px;\n border-radius: 8px;\n overflow: hidden;\n background: var(--md-sys-color-surface-variant, rgba(0, 0, 0, 0.04));\n display: flex;\n align-items: center;\n justify-content: center;\n }\n [thumb] img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n [thumb] md-icon {\n opacity: 0.4;\n --md-icon-size: 26px;\n }\n\n [tags] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 5px;\n }\n\n /* 아이콘 + 텍스트 수평 중심 정렬 공통 */\n [ver],\n [latest-tag],\n [meta],\n button {\n display: inline-flex;\n align-items: center;\n }\n\n [badges] {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 5px 6px;\n }\n [ver] {\n gap: 3px;\n font-weight: 700;\n font-size: 11px;\n color: var(--md-sys-color-on-primary);\n background: var(--md-sys-color-primary);\n border-radius: 999px;\n padding: 1px 8px;\n }\n [ver] md-icon {\n --md-icon-size: 13px;\n }\n [latest-tag] {\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--md-sys-color-primary);\n border: 1px solid var(--md-sys-color-primary);\n border-radius: 999px;\n padding: 0 6px;\n line-height: 1.5;\n }\n [meta] {\n gap: 4px;\n font-size: 10.5px;\n opacity: 0.68;\n min-width: 0;\n max-width: 100%;\n }\n [meta] [name] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n [meta] md-icon {\n --md-icon-size: 13px;\n flex: 0 0 auto;\n }\n\n /* 코멘트: 밀도 높은 카드에서 시선을 덜 끌도록 accent 제거한 조용한 보조 텍스트 */\n [comment] {\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant, inherit);\n opacity: 0.72;\n padding: 0;\n }\n [comment][empty] {\n opacity: 0.42;\n font-style: italic;\n }\n\n [actions] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 1px;\n }\n button {\n cursor: pointer;\n font: inherit;\n font-size: 11px;\n gap: 4px;\n border: 1px solid var(--md-sys-color-outline, rgba(0, 0, 0, 0.2));\n background: transparent;\n color: inherit;\n border-radius: 999px;\n padding: 2px 11px;\n }\n button:hover {\n background: var(--md-sys-color-surface-variant, rgba(0, 0, 0, 0.05));\n }\n button md-icon {\n --md-icon-size: 14px;\n }\n button[revert] {\n margin-left: auto;\n color: var(--md-sys-color-primary);\n border-color: var(--md-sys-color-primary);\n }\n\n [diff] {\n margin-top: 3px;\n font-size: 11px;\n border-top: 1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, 0.12));\n padding-top: 5px;\n max-height: 220px;\n overflow-y: auto;\n }\n [summary] {\n display: flex;\n gap: 5px;\n margin-bottom: 5px;\n }\n [summary] span {\n border-radius: 999px;\n padding: 0 7px;\n font-weight: 700;\n font-size: 10.5px;\n border: 1px solid currentColor;\n }\n [add] {\n color: var(--md-sys-color-primary, #2e7d32);\n }\n [del] {\n color: var(--md-sys-color-error, #b00020);\n }\n [mod] {\n color: var(--status-warning-color, #b26a00);\n }\n [change] {\n display: block;\n padding: 1px 0;\n }\n [change][del] {\n text-decoration: line-through;\n opacity: 0.85;\n }\n [change] small {\n opacity: 0.65;\n }\n [muted] {\n opacity: 0.6;\n font-style: italic;\n }\n\n ox-empty-note {\n padding: 40px 12px;\n }\n `\n ]\n\n @property({ type: String }) boardId?: string\n\n /* The board's released versions, read for the board shown (ADR-0190). */\n private released = new QueryController(\n this,\n gql`\n query FetchBoardVersionsById($id: String!) {\n boardVersions(id: $id) {\n id\n version\n thumbnail\n comment\n updater {\n name\n }\n updatedAt\n }\n }\n `,\n { variables: () => (this.boardId ? { id: this.boardId } : undefined) }\n )\n\n get versions(): any[] {\n return this.released.data?.boardVersions || []\n }\n\n /** version → 컴포넌트 diff 결과(펼쳐진 경우만) */\n @state() diffs: { [version: number]: any } = {}\n\n render() {\n if (this.versions.length == 0) {\n /* 빈 상태는 프레임워크 공통 부품(ox-empty-note)을 사용 — 자체 구현 금지 */\n return html`\n <ox-empty-note icon=\"history\" title=${i18next.t('text.no released version information available')}>\n </ox-empty-note>\n `\n }\n\n return html`\n <div list>\n ${this.versions.map(\n (version, index) => html`\n <div card ?latest=${index === 0}>\n <div top>\n <div thumb>\n ${version.thumbnail\n ? html`<img src=${version.thumbnail} alt=\"v${version.version}\" />`\n : html`<md-icon>dashboard</md-icon>`}\n </div>\n <div tags>\n <div badges>\n <span ver><md-icon>sell</md-icon>v${version.version}</span>\n ${index === 0 ? html`<span latest-tag>${i18next.t('text.latest')}</span>` : ''}\n </div>\n <span meta>\n <md-icon>person</md-icon>\n <span name title=${version.updater?.name || 'anonymous'}\n >${version.updater?.name || 'anonymous'}</span\n >\n </span>\n <span meta><md-icon>schedule</md-icon>${new Date(version.updatedAt).toLocaleString()}</span>\n </div>\n </div>\n\n ${version.comment\n ? html`<div comment>${version.comment}</div>`\n : html`<div comment empty>${i18next.t('text.no comment')}</div>`}\n\n <div actions>\n <button @click=${() => this.toggleDiff(version.version, this.versions[index + 1]?.version)}>\n <md-icon>difference</md-icon>${i18next.t('button.diff with previous')}\n </button>\n ${privileged(\n { privilege: 'mutation', category: 'board' },\n html`\n <button revert @click=${() => this.revertBoardVersion(version.version)}>\n <md-icon>settings_backup_restore</md-icon>${i18next.t('button.copy to draft')}\n </button>\n `\n )}\n </div>\n\n ${this.diffs[version.version] ? this.renderDiff(this.diffs[version.version]) : ''}\n </div>\n `\n )}\n </div>\n `\n }\n\n private renderDiff(diff: any) {\n if (diff.earliest) {\n return html`<div diff><span muted>${i18next.t('text.initial version all new')}</span></div>`\n }\n\n const componentDiffs = diff.componentDiffs || []\n if (componentDiffs.length == 0) {\n return html`<div diff><span muted>${i18next.t('text.no difference from previous')}</span></div>`\n }\n\n const label = (d: any) => (d.refid == null ? d.type || 'scene' : `${d.type || 'component'} #${d.refid}`)\n\n return html`\n <div diff>\n <div summary>\n <span add>+${diff.addedCount}</span>\n <span del>−${diff.removedCount}</span>\n <span mod>~${diff.modifiedCount}</span>\n </div>\n ${componentDiffs.map((d: any) => {\n if (d.changeType == 'added') return html`<span change add>+ ${label(d)}</span>`\n if (d.changeType == 'removed') return html`<span change del>− ${label(d)}</span>`\n return html`<span change mod>~ ${label(d)} <small>(${(d.changedProps || []).join(', ')})</small></span>`\n })}\n </div>\n `\n }\n\n async toggleDiff(version: number, prevVersion?: number) {\n if (this.diffs[version]) {\n const { [version]: _removed, ...rest } = this.diffs\n this.diffs = rest\n return\n }\n\n // 앞 버전과 비교 = \"이 버전이 무엇을 바꿨나\". 최초 버전은 앞 버전이 없어 전체 신규.\n if (prevVersion === undefined || prevVersion === null) {\n this.diffs = { ...this.diffs, [version]: { earliest: true } }\n return\n }\n\n const response = await client.query({\n query: gql`\n query BoardVersionDiff($id: String!, $base: Int!, $to: Int!) {\n boardVersionDiff(id: $id, version: $base, toVersion: $to) {\n fromVersion\n toVersion\n addedCount\n removedCount\n modifiedCount\n componentDiffs {\n refid\n type\n changeType\n changedProps\n }\n }\n }\n `,\n variables: { id: this.boardId, base: prevVersion, to: version },\n fetchPolicy: 'no-cache'\n })\n\n this.diffs = { ...this.diffs, [version]: response.data.boardVersionDiff }\n }\n\n revertBoardVersion(version: number) {\n this.dispatchEvent(\n new CustomEvent('revert-board-version', {\n detail: {\n id: this.boardId,\n version\n },\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/board-ui",
3
- "version": "10.1.256",
3
+ "version": "10.1.258",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -31,8 +31,8 @@
31
31
  "@operato/app": "^10.29.43",
32
32
  "@operato/attachment": "^10.29.43",
33
33
  "@operato/board": "^10.29.57",
34
- "@operato/data-grist": "^10.29.43",
35
- "@operato/graphql": "^10.29.43",
34
+ "@operato/data-grist": "^10.29.69",
35
+ "@operato/graphql": "^10.29.69",
36
36
  "@operato/help": "^10.29.43",
37
37
  "@operato/i18n": "^10.0.0",
38
38
  "@operato/input": "^10.29.43",
@@ -41,15 +41,15 @@
41
41
  "@operato/popup": "^10.29.43",
42
42
  "@operato/pull-to-refresh": "^10.0.0",
43
43
  "@operato/scene-ops": "^10.14.1",
44
- "@operato/shell": "^10.29.60",
44
+ "@operato/shell": "^10.29.69",
45
45
  "@operato/styles": "^10.0.0",
46
46
  "@operato/utils": "^10.29.43",
47
- "@things-factory/ai-assistant": "^10.1.256",
48
- "@things-factory/barcode-base": "^10.1.256",
49
- "@things-factory/board-ai": "^10.1.256",
50
- "@things-factory/fav-base": "^10.1.256",
51
- "@things-factory/setting-base": "^10.1.256",
47
+ "@things-factory/ai-assistant": "^10.1.258",
48
+ "@things-factory/barcode-base": "^10.1.258",
49
+ "@things-factory/board-ai": "^10.1.258",
50
+ "@things-factory/fav-base": "^10.1.258",
51
+ "@things-factory/setting-base": "^10.1.258",
52
52
  "@things-factory/utils": "^10.1.179"
53
53
  },
54
- "gitHead": "2fd641697190ce6e87bcf454a60b2321553e8110"
54
+ "gitHead": "c7b7e3b4e9aa1b36a246ccee312a4124a50924dd"
55
55
  }