@things-factory/worklist 10.1.25 → 10.1.26

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 (48) hide show
  1. package/dist-client/components/activity-approval-ribon.js +3 -2
  2. package/dist-client/components/activity-approval-ribon.js.map +1 -1
  3. package/dist-client/components/activity-starter-form.js +4 -7
  4. package/dist-client/components/activity-starter-form.js.map +1 -1
  5. package/dist-client/components/decision-slots.d.ts +1 -1
  6. package/dist-client/components/decision-slots.js +1 -2
  7. package/dist-client/components/decision-slots.js.map +1 -1
  8. package/dist-client/components/state-ribon.js +2 -1
  9. package/dist-client/components/state-ribon.js.map +1 -1
  10. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -1
  11. package/dist-client/pages/activity-approval/activity-approval-page.js +28 -17
  12. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  13. package/dist-client/pages/activity-approval/approval-gate.d.ts +21 -0
  14. package/dist-client/pages/activity-approval/approval-gate.js +9 -0
  15. package/dist-client/pages/activity-approval/approval-gate.js.map +1 -0
  16. package/dist-client/pages/activity-catalog/activity-catalog-page.d.ts +2 -1
  17. package/dist-client/pages/activity-catalog/activity-catalog-page.js +19 -4
  18. package/dist-client/pages/activity-catalog/activity-catalog-page.js.map +1 -1
  19. package/dist-client/pages/installable-activity/installable-activity-list-page.js +5 -1
  20. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  21. package/dist-client/tsconfig.tsbuildinfo +1 -0
  22. package/dist-server/service/activity/activity-decision-key-item-type.d.ts +3 -6
  23. package/dist-server/service/activity/activity-decision-key-item-type.js +3 -6
  24. package/dist-server/service/activity/activity-decision-key-item-type.js.map +1 -1
  25. package/dist-server/service/activity/activity-query.d.ts +2 -0
  26. package/dist-server/service/activity/activity-query.js +12 -0
  27. package/dist-server/service/activity/activity-query.js.map +1 -1
  28. package/dist-server/service/activity/decision-key-declaration.d.ts +34 -2
  29. package/dist-server/service/activity/decision-key-declaration.js +14 -2
  30. package/dist-server/service/activity/decision-key-declaration.js.map +1 -1
  31. package/dist-server/service/activity/index.d.ts +1 -1
  32. package/dist-server/service/activity-instance/index.d.ts +1 -1
  33. package/dist-server/service/activity-template/index.d.ts +1 -1
  34. package/dist-server/service/activity-thread/index.d.ts +1 -1
  35. package/dist-server/service/index.d.ts +3 -3
  36. package/dist-server/service/installable-activity/installable-activity-query.d.ts +4 -0
  37. package/dist-server/service/installable-activity/installable-activity-query.js +23 -0
  38. package/dist-server/service/installable-activity/installable-activity-query.js.map +1 -1
  39. package/dist-server/service/installable-activity/installable-activity.d.ts +3 -2
  40. package/dist-server/service/installable-activity/installable-activity.js +1 -1
  41. package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
  42. package/dist-server/tsconfig.tsbuildinfo +1 -0
  43. package/package.json +12 -11
  44. package/translations/en.json +21 -20
  45. package/translations/ja.json +22 -21
  46. package/translations/ko.json +22 -21
  47. package/translations/ms.json +22 -21
  48. package/translations/zh.json +22 -21
@@ -34,8 +34,9 @@ export declare class InstallableActivity {
34
34
  * to an approver says nothing useful. This field is the sentence that person actually needs:
35
35
  * when the item reaches them, and what happens once they approve it.
36
36
  *
37
- * i18n keys are welcome here — the catalog runs it through i18next, so a module can either put
38
- * the sentence in directly or point at a key it already ships.
37
+ * Plain sentences, never keys. A translation is read from `guideTKeys` — one key per line,
38
+ * computed from `name` — with the sentence here as its default. A value that could be either a key
39
+ * or a sentence leaves no way to count which keys a locale is missing.
39
40
  */
40
41
  guide?: string[];
41
42
  category?: string;
@@ -36,7 +36,7 @@ tslib_1.__decorate([
36
36
  tslib_1.__decorate([
37
37
  (0, type_graphql_1.Field)(type => [String], {
38
38
  nullable: true,
39
- description: 'What this work is, for the person who receives it. Plain sentences or i18n keys.'
39
+ description: 'What this work is, for the person who receives it. Plain sentences; translated through guideTKeys.'
40
40
  }),
41
41
  tslib_1.__metadata("design:type", Array)
42
42
  ], InstallableActivity.prototype, "guide", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"installable-activity.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, Int, ObjectType } from 'type-graphql'\n\nimport {\n Activity,\n ActivityStartingType,\n ActivityType,\n ActivityUIType,\n MultipleInstanceType\n} from '../activity/activity.js'\nimport { ActivityModelItem } from '../activity/activity-model-type.js'\nimport { ActivityDecisionKeyItem } from '../activity/activity-decision-key-item-type.js'\nimport { ActivityReadiness } from './activity-readiness.js'\nimport { UpdateActivityInstanceStateAddendum } from '../../controllers/common.js'\n\n@ObjectType({ description: 'Entity for InstallableActivity' })\nexport class InstallableActivity {\n /**\n * The key. **Not a name to show anyone.**\n *\n * The callback is found by this value (`activityInstance.activity.name`), so renaming it stops\n * the callback from running — an approval completes and the effect never happens, with nothing\n * on screen to say so. plant hit exactly that on 2026-09-01.\n */\n @Field({ nullable: true })\n name?: string\n\n /**\n * What to call this work on screen, when the key is not something a person reads.\n *\n * The catalog showed 「MES Disposition Approval」 among twenty-three Korean cards because the key\n * was the only name it had. Declared work already carried a `label` for this; built work had\n * nowhere to put one, so the identifier leaked into the screen.\n *\n * Optional. Without it the catalog falls back to the key, which is right for activities whose\n * key already reads as a name.\n */\n @Field({ nullable: true, description: 'What to call this work on screen, when the key is not readable' })\n label?: string\n\n @Field({ nullable: true, description: 'Release information of the Activity' })\n release?: string\n\n @Field({ nullable: true, description: 'Provider information of the Activity' })\n provider?: string\n\n /** One line for developers, in English, like every other GraphQL description in this repo. */\n @Field({ nullable: true })\n description?: string\n\n /**\n * What this work is, **in the words of the person who receives it.**\n *\n * `description` is written for us and it is English by convention, so a Korean screen showing it\n * to an approver says nothing useful. This field is the sentence that person actually needs:\n * when the item reaches them, and what happens once they approve it.\n *\n * i18n keys are welcome here — the catalog runs it through i18next, so a module can either put\n * the sentence in directly or point at a key it already ships.\n */\n @Field(type => [String], {\n nullable: true,\n description: 'What this work is, for the person who receives it. Plain sentences or i18n keys.'\n })\n guide?: string[]\n\n @Field({ nullable: true })\n category?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n priority?: number = 1\n\n @Field({ nullable: true })\n startingType?: ActivityStartingType\n\n @Field({\n nullable: true,\n description:\n 'Parallel or sequential are properties as a multi-instance activity, otherwise it means a single instance.'\n })\n multiple?: MultipleInstanceType\n\n @Field(type => [ActivityModelItem], { nullable: true })\n model?: ActivityModelItem[]\n\n /**\n * Which input values an approver judges by. See Activity.decisionKeys.\n *\n * A field declared here reaches the Activity row only if it is named in ACTIVITY_ROW_FIELDS and\n * the entity has a column for it. It used to be a spread, which dropped what it did not recognise\n * and reported success; naming the fields means a new one has to be wired over on purpose.\n */\n @Field(type => [ActivityDecisionKeyItem], { nullable: true })\n decisionKeys?: ActivityDecisionKeyItem[]\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field({ nullable: true })\n reportType?: ActivityUIType\n\n @Field({ nullable: true })\n reportSource?: string\n\n @Field(type => String, { nullable: true })\n thumbnail?: string\n\n @Field(type => Activity, { nullable: true })\n activity?: Activity\n\n /**\n * **이 도메인이 이 단계를 쓰나** — 세워진 양식의 결재선에 결재자가 있나.\n *\n * 결재선은 양식이 아니라 **그 현장이 정하는 것**이다(installActivity 머리말). 그래서 같은 업무가\n * 어느 공장에서는 결재를 받고 어느 공장에서는 그냥 지나간다.\n *\n * 그 사실이 지금까지 **기동 로그 한 줄**에만 있었다 — 「결재선 비어 있음 miratek, system」. 로그는\n * 기동할 때 한 번 지나가고 그 뒤로 아무 데도 없다. 사람이 조치해야 하는 사실의 집이 아니다.\n *\n * 세지 않는 것 둘을 적어 둔다.\n *\n * - **사람 수가 아니라 단계 수다.** 역할로 걸린 한 단계는 그 역할을 가진 여러 사람이 본다. 「3명」\n * 이라고 적으면 틀린 수를 말하게 된다.\n * - **참조는 세지 않는다.** 참조는 결재를 막지 않으므로, 참조만 있는 결재선은 결재자가 없는 것과\n * 같다(needsApproval). 세면 「이 단계를 쓴다」로 읽히는데 실제로는 그냥 지나간다.\n *\n * 비어 있다는 것이 무슨 일을 뜻하는지는 **업무마다 다르다** — 부적합 처분은 상신이 막히고, 정비\n * 완료 확인은 확인 없이 닫힌다. 그 결과는 각 업무의 guide 가 말할 자리다. 이 칸은 사실만 낸다.\n */\n @Field(type => Int, {\n nullable: true,\n description: 'How many approval steps this activity has in this domain. Steps, not people; references excluded.'\n })\n approvalSteps?: number\n\n /**\n * What the registering module says about how far along this type is.\n *\n * Declared, not computed — see ActivityReadiness. Missing means nobody has said, which the\n * screen shows as 「선언 없음」 rather than as a zero.\n */\n @Field(type => ActivityReadiness, { nullable: true })\n readiness?: ActivityReadiness\n\n callback?: (content: any, addendum: UpdateActivityInstanceStateAddendum, context: ResolverContext) => void\n}\n"]}
1
+ {"version":3,"file":"installable-activity.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, Int, ObjectType } from 'type-graphql'\n\nimport {\n Activity,\n ActivityStartingType,\n ActivityType,\n ActivityUIType,\n MultipleInstanceType\n} from '../activity/activity.js'\nimport { ActivityModelItem } from '../activity/activity-model-type.js'\nimport { ActivityDecisionKeyItem } from '../activity/activity-decision-key-item-type.js'\nimport { ActivityReadiness } from './activity-readiness.js'\nimport { UpdateActivityInstanceStateAddendum } from '../../controllers/common.js'\n\n@ObjectType({ description: 'Entity for InstallableActivity' })\nexport class InstallableActivity {\n /**\n * The key. **Not a name to show anyone.**\n *\n * The callback is found by this value (`activityInstance.activity.name`), so renaming it stops\n * the callback from running — an approval completes and the effect never happens, with nothing\n * on screen to say so. plant hit exactly that on 2026-09-01.\n */\n @Field({ nullable: true })\n name?: string\n\n /**\n * What to call this work on screen, when the key is not something a person reads.\n *\n * The catalog showed 「MES Disposition Approval」 among twenty-three Korean cards because the key\n * was the only name it had. Declared work already carried a `label` for this; built work had\n * nowhere to put one, so the identifier leaked into the screen.\n *\n * Optional. Without it the catalog falls back to the key, which is right for activities whose\n * key already reads as a name.\n */\n @Field({ nullable: true, description: 'What to call this work on screen, when the key is not readable' })\n label?: string\n\n @Field({ nullable: true, description: 'Release information of the Activity' })\n release?: string\n\n @Field({ nullable: true, description: 'Provider information of the Activity' })\n provider?: string\n\n /** One line for developers, in English, like every other GraphQL description in this repo. */\n @Field({ nullable: true })\n description?: string\n\n /**\n * What this work is, **in the words of the person who receives it.**\n *\n * `description` is written for us and it is English by convention, so a Korean screen showing it\n * to an approver says nothing useful. This field is the sentence that person actually needs:\n * when the item reaches them, and what happens once they approve it.\n *\n * Plain sentences, never keys. A translation is read from `guideTKeys` — one key per line,\n * computed from `name` — with the sentence here as its default. A value that could be either a key\n * or a sentence leaves no way to count which keys a locale is missing.\n */\n @Field(type => [String], {\n nullable: true,\n description: 'What this work is, for the person who receives it. Plain sentences; translated through guideTKeys.'\n })\n guide?: string[]\n\n @Field({ nullable: true })\n category?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n priority?: number = 1\n\n @Field({ nullable: true })\n startingType?: ActivityStartingType\n\n @Field({\n nullable: true,\n description:\n 'Parallel or sequential are properties as a multi-instance activity, otherwise it means a single instance.'\n })\n multiple?: MultipleInstanceType\n\n @Field(type => [ActivityModelItem], { nullable: true })\n model?: ActivityModelItem[]\n\n /**\n * Which input values an approver judges by. See Activity.decisionKeys.\n *\n * A field declared here reaches the Activity row only if it is named in ACTIVITY_ROW_FIELDS and\n * the entity has a column for it. It used to be a spread, which dropped what it did not recognise\n * and reported success; naming the fields means a new one has to be wired over on purpose.\n */\n @Field(type => [ActivityDecisionKeyItem], { nullable: true })\n decisionKeys?: ActivityDecisionKeyItem[]\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field({ nullable: true })\n reportType?: ActivityUIType\n\n @Field({ nullable: true })\n reportSource?: string\n\n @Field(type => String, { nullable: true })\n thumbnail?: string\n\n @Field(type => Activity, { nullable: true })\n activity?: Activity\n\n /**\n * **이 도메인이 이 단계를 쓰나** — 세워진 양식의 결재선에 결재자가 있나.\n *\n * 결재선은 양식이 아니라 **그 현장이 정하는 것**이다(installActivity 머리말). 그래서 같은 업무가\n * 어느 공장에서는 결재를 받고 어느 공장에서는 그냥 지나간다.\n *\n * 그 사실이 지금까지 **기동 로그 한 줄**에만 있었다 — 「결재선 비어 있음 miratek, system」. 로그는\n * 기동할 때 한 번 지나가고 그 뒤로 아무 데도 없다. 사람이 조치해야 하는 사실의 집이 아니다.\n *\n * 세지 않는 것 둘을 적어 둔다.\n *\n * - **사람 수가 아니라 단계 수다.** 역할로 걸린 한 단계는 그 역할을 가진 여러 사람이 본다. 「3명」\n * 이라고 적으면 틀린 수를 말하게 된다.\n * - **참조는 세지 않는다.** 참조는 결재를 막지 않으므로, 참조만 있는 결재선은 결재자가 없는 것과\n * 같다(needsApproval). 세면 「이 단계를 쓴다」로 읽히는데 실제로는 그냥 지나간다.\n *\n * 비어 있다는 것이 무슨 일을 뜻하는지는 **업무마다 다르다** — 부적합 처분은 상신이 막히고, 정비\n * 완료 확인은 확인 없이 닫힌다. 그 결과는 각 업무의 guide 가 말할 자리다. 이 칸은 사실만 낸다.\n */\n @Field(type => Int, {\n nullable: true,\n description: 'How many approval steps this activity has in this domain. Steps, not people; references excluded.'\n })\n approvalSteps?: number\n\n /**\n * What the registering module says about how far along this type is.\n *\n * Declared, not computed — see ActivityReadiness. Missing means nobody has said, which the\n * screen shows as 「선언 없음」 rather than as a zero.\n */\n @Field(type => ActivityReadiness, { nullable: true })\n readiness?: ActivityReadiness\n\n callback?: (content: any, addendum: UpdateActivityInstanceStateAddendum, context: ResolverContext) => void\n}\n"]}