@operato/dataset 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (65) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/demo/favicon.ico +0 -0
  3. package/demo/index.html +338 -0
  4. package/demo/ox-data-ooc-brief-view-test.html +338 -0
  5. package/dist/src/ox-data-entry-view.js +2 -1
  6. package/dist/src/ox-data-entry-view.js.map +1 -1
  7. package/dist/src/ox-data-ooc-badge.d.ts +9 -0
  8. package/dist/src/ox-data-ooc-badge.js +66 -0
  9. package/dist/src/ox-data-ooc-badge.js.map +1 -0
  10. package/dist/src/ox-data-ooc-brief-view.d.ts +2 -0
  11. package/dist/src/ox-data-ooc-brief-view.js +8 -110
  12. package/dist/src/ox-data-ooc-brief-view.js.map +1 -1
  13. package/dist/src/ox-data-ooc-correction-part.d.ts +9 -0
  14. package/dist/src/ox-data-ooc-correction-part.js +99 -0
  15. package/dist/src/ox-data-ooc-correction-part.js.map +1 -0
  16. package/dist/src/ox-data-ooc-history.d.ts +10 -0
  17. package/dist/src/ox-data-ooc-history.js +72 -0
  18. package/dist/src/ox-data-ooc-history.js.map +1 -0
  19. package/dist/src/ox-data-ooc-view.d.ts +1 -0
  20. package/dist/src/ox-data-ooc-view.js +6 -89
  21. package/dist/src/ox-data-ooc-view.js.map +1 -1
  22. package/dist/src/ox-data-sample-subgroup-view.js +1 -1
  23. package/dist/src/ox-data-sample-subgroup-view.js.map +1 -1
  24. package/dist/src/ox-data-sample-view.js +41 -30
  25. package/dist/src/ox-data-sample-view.js.map +1 -1
  26. package/dist/src/ox-data-summary-view.js +1 -1
  27. package/dist/src/ox-data-summary-view.js.map +1 -1
  28. package/dist/src/types.d.ts +57 -9
  29. package/dist/src/types.js.map +1 -1
  30. package/dist/src/usecase/spc/index.d.ts +1 -0
  31. package/dist/src/usecase/spc/index.js +8 -0
  32. package/dist/src/usecase/spc/index.js.map +1 -0
  33. package/dist/src/usecase/spc/ox-data-use-case-spc.d.ts +7 -0
  34. package/dist/src/usecase/spc/ox-data-use-case-spc.js +102 -0
  35. package/dist/src/usecase/spc/ox-data-use-case-spc.js.map +1 -0
  36. package/dist/src/usecase/spc/ox-input-spc-limits.d.ts +44 -0
  37. package/dist/src/usecase/spc/ox-input-spc-limits.js +193 -0
  38. package/dist/src/usecase/spc/ox-input-spc-limits.js.map +1 -0
  39. package/dist/src/usecase/spc/ox-property-editor-spc-limits.d.ts +6 -0
  40. package/dist/src/usecase/spc/ox-property-editor-spc-limits.js +24 -0
  41. package/dist/src/usecase/spc/ox-property-editor-spc-limits.js.map +1 -0
  42. package/dist/stories/ox-data-ooc-view.stories.js +2 -0
  43. package/dist/stories/ox-data-ooc-view.stories.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +24 -9
  46. package/src/ox-data-entry-view.ts +2 -1
  47. package/src/ox-data-ooc-badge.ts +64 -0
  48. package/src/ox-data-ooc-brief-view.ts +9 -120
  49. package/src/ox-data-ooc-correction-part.ts +107 -0
  50. package/src/ox-data-ooc-history.ts +74 -0
  51. package/src/ox-data-ooc-view.ts +6 -91
  52. package/src/ox-data-sample-subgroup-view.ts +1 -1
  53. package/src/ox-data-sample-view.ts +41 -30
  54. package/src/ox-data-summary-view.ts +1 -1
  55. package/src/types.ts +76 -27
  56. package/src/usecase/spc/index.ts +10 -0
  57. package/src/usecase/spc/ox-data-use-case-spc.ts +147 -0
  58. package/src/usecase/spc/ox-input-spc-limits.ts +182 -0
  59. package/src/usecase/spc/ox-property-editor-spc-limits.ts +23 -0
  60. package/stories/ox-data-ooc-view.stories.ts +2 -0
  61. package/themes/grist-theme.css +1 -1
  62. package/translations/en.json +1 -0
  63. package/translations/ko.json +1 -0
  64. package/translations/ms.json +142 -70
  65. package/translations/zh.json +146 -75
@@ -22,7 +22,7 @@ let OxDataSummaryView = class OxDataSummaryView extends LitElement {
22
22
  <tr>
23
23
  <th item>${i18next.t('field.item')}</th>
24
24
  <th>${i18next.t('field.description')}</th>
25
- <th>${i18next.t('field.stat-function')}</th>
25
+ <th>${i18next.t('field.finalizing-function')}</th>
26
26
  <th>${i18next.t('field.unit')}</th>
27
27
  <th value>${i18next.t('field.value')}</th>
28
28
  <th>${i18next.t('field.spec')}</th>
@@ -1 +1 @@
1
- {"version":3,"file":"ox-data-summary-view.js","sourceRoot":"","sources":["../../src/ox-data-summary-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-file.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nimport { DataSummary, DataSpecLimitSet } from './types.js'\nimport { OxDataUseCase } from './usecase/ox-data-use-case.js'\n\n@customElement('ox-data-summary-view')\nexport class OxDataSummaryView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n text-transform: capitalize;\n }\n [page-description] {\n margin: var(--page-description-margin);\n opacity: 0.7;\n font: var(--page-description-font);\n color: var(--secondary-color);\n text-transform: capitalize;\n }\n [page-description] * {\n vertical-align: middle;\n }\n [page-description] mwc-icon {\n margin-top: -2px;\n font-size: 0.9rem;\n color: var(--page-description-color);\n }\n\n table {\n border-collapse: collapse;\n margin-bottom: var(--margin-default);\n }\n th {\n padding: var(--th-padding);\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n text-transform: var(--th-text-transform);\n font: var(--th-font);\n color: var(--th-color);\n text-align: left;\n }\n th[item] {\n min-width: 100px;\n }\n th[value] {\n min-width: 100px;\n }\n tr {\n background-color: var(--tr-background-color);\n }\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n tr[ooc],\n tr[oos] {\n background-color: #fefbdf;\n }\n td {\n border-bottom: var(--td-border-bottom);\n padding: var(--td-padding);\n font: var(--td-font);\n color: var(--td-color);\n }\n td[name] {\n font-weight: bold;\n }\n td mwc-icon {\n color: var(--status-danger-color);\n }\n\n pre {\n tab-size: 2;\n }\n `\n\n @property({ type: Object }) dataSummary?: DataSummary\n\n render() {\n if (!this.dataSummary) {\n return html``\n }\n\n const { name, description, date, period, summary = {}, dataItems = [], useCase } = this.dataSummary\n const useCaseNames = useCase?.split(',').filter(useCase => useCase.trim()) || []\n\n return html` <h2>${name}</h2>\n <p page-description>\n <mwc-icon>info_outline</mwc-icon> ${description}<br />\n <mwc-icon>alarm</mwc-icon> ${i18next.t('field.date')}: ${date} ${period}\n </p>\n\n <form>\n <table>\n <tr>\n <th item>${i18next.t('field.item')}</th>\n <th>${i18next.t('field.description')}</th>\n <th>${i18next.t('field.stat-function')}</th>\n <th>${i18next.t('field.unit')}</th>\n <th value>${i18next.t('field.value')}</th>\n <th>${i18next.t('field.spec')}</th>\n </tr>\n ${dataItems\n .filter(dataItem => dataItem.stat)\n .map(dataItem => {\n const { name = '', tag = '', description = '', stat, unit = '', spec = {}, type } = dataItem\n const value = summary[tag]\n\n return html`\n <tr>\n <td name>${name}</td>\n <td>${description}</td>\n <td>${stat}</td>\n <td>${unit}</td>\n <td>${this.buildValue(type, value)}</td>\n <td><pre>${this.buildSpec(useCaseNames, spec)}</pre></td>\n </tr>\n `\n })}\n </table>\n </form>`\n }\n\n private buildSpec(useCaseNames: string[], spec: DataSpecLimitSet): string {\n return OxDataUseCase.elaborateDataItemSpec(useCaseNames, spec)\n }\n\n private buildValue(type: string, value: any | any[]) {\n if (value === undefined) {\n return ''\n }\n const values = value instanceof Array ? value : [value]\n\n const elements = values.map((v: any, idx) => {\n switch (typeof v) {\n case 'boolean':\n return html` <input type=\"checkbox\" .checked=${v} disabled />`\n break\n\n default:\n if (type == 'date') {\n return new Date(v).toLocaleDateString()\n } else if (type == 'datetime') {\n return new Date(v).toLocaleString()\n }\n return v ?? ''\n }\n })\n\n return typeof values[0] === 'boolean' ? elements : elements.join(', ')\n }\n}\n"]}
1
+ {"version":3,"file":"ox-data-summary-view.js","sourceRoot":"","sources":["../../src/ox-data-summary-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-file.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nimport { DataSummary, DataSpecLimitSet } from './types.js'\nimport { OxDataUseCase } from './usecase/ox-data-use-case.js'\n\n@customElement('ox-data-summary-view')\nexport class OxDataSummaryView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n text-transform: capitalize;\n }\n [page-description] {\n margin: var(--page-description-margin);\n opacity: 0.7;\n font: var(--page-description-font);\n color: var(--secondary-color);\n text-transform: capitalize;\n }\n [page-description] * {\n vertical-align: middle;\n }\n [page-description] mwc-icon {\n margin-top: -2px;\n font-size: 0.9rem;\n color: var(--page-description-color);\n }\n\n table {\n border-collapse: collapse;\n margin-bottom: var(--margin-default);\n }\n th {\n padding: var(--th-padding);\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n text-transform: var(--th-text-transform);\n font: var(--th-font);\n color: var(--th-color);\n text-align: left;\n }\n th[item] {\n min-width: 100px;\n }\n th[value] {\n min-width: 100px;\n }\n tr {\n background-color: var(--tr-background-color);\n }\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n tr[ooc],\n tr[oos] {\n background-color: #fefbdf;\n }\n td {\n border-bottom: var(--td-border-bottom);\n padding: var(--td-padding);\n font: var(--td-font);\n color: var(--td-color);\n }\n td[name] {\n font-weight: bold;\n }\n td mwc-icon {\n color: var(--status-danger-color);\n }\n\n pre {\n tab-size: 2;\n }\n `\n\n @property({ type: Object }) dataSummary?: DataSummary\n\n render() {\n if (!this.dataSummary) {\n return html``\n }\n\n const { name, description, date, period, summary = {}, dataItems = [], useCase } = this.dataSummary\n const useCaseNames = useCase?.split(',').filter(useCase => useCase.trim()) || []\n\n return html` <h2>${name}</h2>\n <p page-description>\n <mwc-icon>info_outline</mwc-icon> ${description}<br />\n <mwc-icon>alarm</mwc-icon> ${i18next.t('field.date')}: ${date} ${period}\n </p>\n\n <form>\n <table>\n <tr>\n <th item>${i18next.t('field.item')}</th>\n <th>${i18next.t('field.description')}</th>\n <th>${i18next.t('field.finalizing-function')}</th>\n <th>${i18next.t('field.unit')}</th>\n <th value>${i18next.t('field.value')}</th>\n <th>${i18next.t('field.spec')}</th>\n </tr>\n ${dataItems\n .filter(dataItem => dataItem.stat)\n .map(dataItem => {\n const { name = '', tag = '', description = '', stat, unit = '', spec = {}, type } = dataItem\n const value = summary[tag]\n\n return html`\n <tr>\n <td name>${name}</td>\n <td>${description}</td>\n <td>${stat}</td>\n <td>${unit}</td>\n <td>${this.buildValue(type, value)}</td>\n <td><pre>${this.buildSpec(useCaseNames, spec)}</pre></td>\n </tr>\n `\n })}\n </table>\n </form>`\n }\n\n private buildSpec(useCaseNames: string[], spec: DataSpecLimitSet): string {\n return OxDataUseCase.elaborateDataItemSpec(useCaseNames, spec)\n }\n\n private buildValue(type: string, value: any | any[]) {\n if (value === undefined) {\n return ''\n }\n const values = value instanceof Array ? value : [value]\n\n const elements = values.map((v: any, idx) => {\n switch (typeof v) {\n case 'boolean':\n return html` <input type=\"checkbox\" .checked=${v} disabled />`\n break\n\n default:\n if (type == 'date') {\n return new Date(v).toLocaleDateString()\n } else if (type == 'datetime') {\n return new Date(v).toLocaleString()\n }\n return v ?? ''\n }\n })\n\n return typeof values[0] === 'boolean' ? elements : elements.join(', ')\n }\n}\n"]}
@@ -1,12 +1,24 @@
1
+ /**
2
+ * Represents a selectable option with a text label and a value.
3
+ */
1
4
  export type SelectOption = {
2
5
  text: string;
3
6
  value: string;
4
7
  };
8
+ /**
9
+ * An array of selectable options.
10
+ */
5
11
  export type SelectOptions = SelectOption[];
12
+ /**
13
+ * Defines the options and additional properties for a type.
14
+ */
6
15
  export type TypeOptions = {
7
16
  options?: SelectOptions;
8
17
  [prop: string]: any;
9
18
  };
19
+ /**
20
+ * Describes the structure and properties of a data item.
21
+ */
10
22
  export type DataItem = {
11
23
  name: string;
12
24
  description: string;
@@ -26,6 +38,9 @@ export type DataItem = {
26
38
  };
27
39
  };
28
40
  };
41
+ /**
42
+ * Defines the structure of a dataset, including its name, description, type, use case, and data items.
43
+ */
29
44
  export type DataSet = {
30
45
  name: string;
31
46
  description: string;
@@ -39,6 +54,9 @@ export type DataSet = {
39
54
  };
40
55
  };
41
56
  };
57
+ /**
58
+ * Describes the definition of a data specification, including its type, label, name, and optional properties.
59
+ */
42
60
  export type DataSpecDefinition = {
43
61
  type: string;
44
62
  label: string;
@@ -47,42 +65,65 @@ export type DataSpecDefinition = {
47
65
  [option: string]: any;
48
66
  };
49
67
  };
68
+ /**
69
+ * Describes a use case definition, including its name, description, help text, and specifications.
70
+ */
50
71
  export type UseCaseDefinition = {
51
72
  name: string;
52
73
  description: string;
53
74
  help: string;
54
75
  specs: DataSpecDefinition[];
55
76
  };
77
+ /**
78
+ * Represents the limits for a data specification.
79
+ */
56
80
  export type DataSpecLimit = {
57
81
  [limit: string]: number | string | string[] | boolean;
58
82
  };
83
+ /**
84
+ * A set of data specification limits, keyed by use case.
85
+ */
59
86
  export type DataSpecLimitSet = {
60
87
  [useCase: string]: DataSpecLimit;
61
88
  };
89
+ /**
90
+ * Represents a collection of data, keyed by a tag.
91
+ */
62
92
  export type DataCollection = {
63
93
  [tag: string]: any;
64
94
  };
95
+ /**
96
+ * Represents a judgment on data, indicating if it is out of control or out of specification.
97
+ */
65
98
  export type Judgment = {
66
99
  [tag: string]: {
67
100
  ooc: boolean;
68
101
  oos: boolean;
69
102
  };
70
103
  };
104
+ /**
105
+ * Describes a data sample, including its name, description, use case, and associated data and judgments.
106
+ */
71
107
  export type DataSample = {
72
- name: string;
73
- description: string;
74
- useCase: string;
108
+ name?: string;
109
+ description?: string;
110
+ useCase?: string;
75
111
  data?: DataCollection;
76
112
  judgment?: Judgment;
77
113
  dataItems?: DataItem[];
78
- quota: number;
79
- workDate: string;
80
- workShift: string;
81
- collectedAt: Date;
114
+ quota?: number;
115
+ workDate?: string;
116
+ workShift?: string;
117
+ collectedAt?: Date;
118
+ reviewActivityInstance?: any;
119
+ dataOoc?: DataOoc;
82
120
  };
83
121
  export type DataOocState = 'ISSUED' | 'REVIEWED' | 'CORRECTED';
122
+ /**
123
+ * Extends DataSample with additional fields specific to an out of control state, including state, corrective actions, and review history.
124
+ */
84
125
  export type DataOoc = DataSample & {
85
- state: DataOocState;
126
+ state?: DataOocState;
86
127
  correctiveInstruction?: string;
87
128
  correctiveAction?: string;
88
129
  reviewer?: {
@@ -95,7 +136,7 @@ export type DataOoc = DataSample & {
95
136
  name: string;
96
137
  };
97
138
  correctedAt?: Date;
98
- history: {
139
+ history?: {
99
140
  user: {
100
141
  id: string;
101
142
  name: string;
@@ -104,7 +145,11 @@ export type DataOoc = DataSample & {
104
145
  comment: string;
105
146
  timestamp: number;
106
147
  }[];
148
+ resolveActivityInstance?: any;
107
149
  };
150
+ /**
151
+ * Describes a summary of data, including its name, description, relevant data items, and key metrics.
152
+ */
108
153
  export type DataSummary = {
109
154
  name: string;
110
155
  description: string;
@@ -124,6 +169,9 @@ export type DataSummary = {
124
169
  [key: string]: any;
125
170
  };
126
171
  };
172
+ /**
173
+ * Represents the result of an evaluation, indicating if data is out of specification or out of control.
174
+ */
127
175
  export type EvaluationResult = {
128
176
  oos: boolean;
129
177
  ooc: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SelectOption = { text: string; value: string }\nexport type SelectOptions = SelectOption[]\nexport type TypeOptions = {\n options?: SelectOptions\n [prop: string]: any\n}\n\nexport type DataItem = {\n name: string\n description: string\n sequence: number\n tag: string\n group: string\n type: string\n stat: string\n active: boolean\n options: TypeOptions\n unit: string\n quota: number\n hidden: boolean\n spec: {\n [useCase: string]: {\n [limit: string]: number | string | string[] | boolean\n }\n }\n}\n\nexport type DataSet = {\n name: string\n description: string\n type: 'manual' | 'automatic'\n useCase: string\n active: boolean\n dataItems: DataItem[]\n spec: { [dataItem: string]: { [useCase: string]: any } }\n}\n\nexport type DataSpecDefinition = {\n type: string\n label: string\n name: string\n property?: { [option: string]: any }\n}\n\nexport type UseCaseDefinition = {\n name: string\n description: string\n help: string\n specs: DataSpecDefinition[]\n}\n\nexport type DataSpecLimit = {\n [limit: string]: number | string | string[] | boolean\n}\n\nexport type DataSpecLimitSet = {\n [useCase: string]: DataSpecLimit\n}\n\nexport type DataCollection = {\n [tag: string]: any\n}\n\nexport type Judgment = {\n [tag: string]: {\n ooc: boolean\n oos: boolean\n }\n}\n\nexport type DataSample = {\n name: string\n description: string\n useCase: string\n data?: DataCollection\n judgment?: Judgment\n dataItems?: DataItem[]\n quota: number\n workDate: string\n workShift: string\n collectedAt: Date\n}\n\nexport type DataOocState = 'ISSUED' | 'REVIEWED' | 'CORRECTED'\n\nexport type DataOoc = DataSample & {\n state: DataOocState\n correctiveInstruction?: string\n correctiveAction?: string\n reviewer?: {\n id: string\n name: string\n }\n reviewedAt?: Date\n corrector?: {\n id: string\n name: string\n }\n correctedAt?: Date\n history: {\n user: {\n id: string\n name: string\n }\n state: DataOocState\n comment: string\n timestamp: number\n }[]\n}\n\nexport type DataSummary = {\n name: string\n description: string\n dataItems?: DataItem[]\n date?: string\n period?: string\n key01?: string\n key02?: string\n key03?: string\n key04?: string\n key05?: string\n count?: number\n countOoc?: number\n countOos?: number\n useCase?: string\n summary?: { [key: string]: any }\n}\n\nexport type EvaluationResult = { oos: boolean; ooc: boolean }\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Represents a selectable option with a text label and a value.\n */\nexport type SelectOption = {\n text: string\n value: string\n}\n/**\n * An array of selectable options.\n */\nexport type SelectOptions = SelectOption[]\n/**\n * Defines the options and additional properties for a type.\n */\nexport type TypeOptions = {\n options?: SelectOptions\n [prop: string]: any\n}\n/**\n * Describes the structure and properties of a data item.\n */\nexport type DataItem = {\n name: string\n description: string\n sequence: number\n tag: string\n group: string\n type: string\n stat: string\n active: boolean\n options: TypeOptions\n unit: string\n quota: number\n hidden: boolean\n spec: {\n [useCase: string]: {\n [limit: string]: number | string | string[] | boolean\n }\n }\n}\n/**\n * Defines the structure of a dataset, including its name, description, type, use case, and data items.\n */\nexport type DataSet = {\n name: string\n description: string\n type: 'manual' | 'automatic'\n useCase: string\n active: boolean\n dataItems: DataItem[]\n spec: {\n [dataItem: string]: {\n [useCase: string]: any\n }\n }\n}\n/**\n * Describes the definition of a data specification, including its type, label, name, and optional properties.\n */\nexport type DataSpecDefinition = {\n type: string\n label: string\n name: string\n property?: {\n [option: string]: any\n }\n}\n/**\n * Describes a use case definition, including its name, description, help text, and specifications.\n */\nexport type UseCaseDefinition = {\n name: string\n description: string\n help: string\n specs: DataSpecDefinition[]\n}\n/**\n * Represents the limits for a data specification.\n */\nexport type DataSpecLimit = {\n [limit: string]: number | string | string[] | boolean\n}\n/**\n * A set of data specification limits, keyed by use case.\n */\nexport type DataSpecLimitSet = {\n [useCase: string]: DataSpecLimit\n}\n/**\n * Represents a collection of data, keyed by a tag.\n */\nexport type DataCollection = {\n [tag: string]: any\n}\n/**\n * Represents a judgment on data, indicating if it is out of control or out of specification.\n */\nexport type Judgment = {\n [tag: string]: {\n ooc: boolean\n oos: boolean\n }\n}\n/**\n * Describes a data sample, including its name, description, use case, and associated data and judgments.\n */\nexport type DataSample = {\n name?: string\n description?: string\n useCase?: string\n data?: DataCollection\n judgment?: Judgment\n dataItems?: DataItem[]\n quota?: number\n workDate?: string\n workShift?: string\n collectedAt?: Date\n reviewActivityInstance?: any\n dataOoc?: DataOoc\n}\nexport type DataOocState = 'ISSUED' | 'REVIEWED' | 'CORRECTED'\n/**\n * Extends DataSample with additional fields specific to an out of control state, including state, corrective actions, and review history.\n */\nexport type DataOoc = DataSample & {\n state?: DataOocState\n correctiveInstruction?: string\n correctiveAction?: string\n reviewer?: {\n id: string\n name: string\n }\n reviewedAt?: Date\n corrector?: {\n id: string\n name: string\n }\n correctedAt?: Date\n history?: {\n user: {\n id: string\n name: string\n }\n state: DataOocState\n comment: string\n timestamp: number\n }[]\n resolveActivityInstance?: any\n}\n/**\n * Describes a summary of data, including its name, description, relevant data items, and key metrics.\n */\nexport type DataSummary = {\n name: string\n description: string\n dataItems?: DataItem[]\n date?: string\n period?: string\n key01?: string\n key02?: string\n key03?: string\n key04?: string\n key05?: string\n count?: number\n countOoc?: number\n countOos?: number\n useCase?: string\n summary?: {\n [key: string]: any\n }\n}\n/**\n * Represents the result of an evaluation, indicating if data is out of specification or out of control.\n */\nexport type EvaluationResult = {\n oos: boolean\n ooc: boolean\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ /* Here, only the common module of client and server is imported/exported. Be careful not to use a module dedicated to client or server. */
2
+ import { OxDataUseCase } from '../ox-data-use-case';
3
+ import { OxDataUseCaseSPC } from './ox-data-use-case-spc';
4
+ // OxPropertyEditor.register({
5
+ // 'spc-limits': 'ox-property-editor-spc-limits'
6
+ // })
7
+ OxDataUseCase.registerUseCase('SPC', new OxDataUseCaseSPC());
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/usecase/spc/index.ts"],"names":[],"mappings":"AAAA,2IAA2I;AAE3I,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,8BAA8B;AAC9B,kDAAkD;AAClD,KAAK;AAEL,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAA","sourcesContent":["/* Here, only the common module of client and server is imported/exported. Be careful not to use a module dedicated to client or server. */\n\nimport { OxDataUseCase } from '../ox-data-use-case'\nimport { OxDataUseCaseSPC } from './ox-data-use-case-spc'\n\n// OxPropertyEditor.register({\n// 'spc-limits': 'ox-property-editor-spc-limits'\n// })\n\nOxDataUseCase.registerUseCase('SPC', new OxDataUseCaseSPC())\n"]}
@@ -0,0 +1,7 @@
1
+ import { DataItem, EvaluationResult, UseCaseDefinition } from '../../types';
2
+ import { OxDataUseCase } from '../ox-data-use-case.js';
3
+ export declare class OxDataUseCaseSPC extends OxDataUseCase {
4
+ getSpecification(dataItem: DataItem): UseCaseDefinition;
5
+ evaluate(spec: any, values: any | any[]): EvaluationResult | undefined;
6
+ elaborateUseCaseSpec(limits: any): string | undefined;
7
+ }
@@ -0,0 +1,102 @@
1
+ import i18next from 'i18next'; // Since this is a common module, @operato/i18n was deliberately avoided.
2
+ import { OxDataUseCase } from '../ox-data-use-case.js';
3
+ export class OxDataUseCaseSPC extends OxDataUseCase {
4
+ getSpecification(dataItem) {
5
+ return {
6
+ name: 'SPC',
7
+ description: 'Critical Control Point Data Spec',
8
+ help: '',
9
+ specs: [
10
+ {
11
+ type: 'spc-limits' /* A value which seperates acceptability from unacceptability */,
12
+ label: 'critical-limits',
13
+ name: 'criticalLimits',
14
+ property: dataItem
15
+ },
16
+ {
17
+ type: 'spc-limits',
18
+ label: 'target-limits',
19
+ name: 'targetLimits',
20
+ property: dataItem
21
+ }
22
+ ]
23
+ };
24
+ }
25
+ evaluate(spec, values) {
26
+ if (!spec || typeof values === 'undefined') {
27
+ return;
28
+ }
29
+ if (!(values instanceof Array)) {
30
+ values = [values];
31
+ }
32
+ const { minimum: criticalMinimum, maximum: criticalMaximum, acceptables: criticalAcceptables } = spec['criticalLimits'] || {};
33
+ const { minimum: targetMinimum, maximum: targetMaximum, acceptables: targetAcceptables } = spec['targetLimits'] || {};
34
+ var oos = false;
35
+ var ooc = false;
36
+ for (let i = 0; i < values.length; i++) {
37
+ const value = values[i];
38
+ if (criticalMinimum != null && value < criticalMinimum) {
39
+ oos = true;
40
+ break;
41
+ }
42
+ if (criticalMaximum != null && value > criticalMaximum) {
43
+ oos = true;
44
+ break;
45
+ }
46
+ if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {
47
+ oos = true;
48
+ break;
49
+ }
50
+ }
51
+ for (let i = 0; i < values.length; i++) {
52
+ const value = values[i];
53
+ if (targetMinimum != null && value < targetMinimum) {
54
+ ooc = true;
55
+ break;
56
+ }
57
+ if (targetMaximum != null && value > targetMaximum) {
58
+ ooc = true;
59
+ break;
60
+ }
61
+ if (targetAcceptables != null && !targetAcceptables.includes(value)) {
62
+ ooc = true;
63
+ break;
64
+ }
65
+ }
66
+ return { oos, ooc };
67
+ }
68
+ elaborateUseCaseSpec(limits) {
69
+ if (!limits) {
70
+ return;
71
+ }
72
+ var text = '';
73
+ const { minimum: criticalMinimum, maximum: criticalMaximum, acceptables: criticalAcceptables } = limits['criticalLimits'] || {};
74
+ if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {
75
+ text += `${i18next.t('label.critical-limits')}\n`;
76
+ }
77
+ if (criticalMinimum != null) {
78
+ text += `\t${i18next.t('label.minimum value')} : ${criticalMinimum}\n`;
79
+ }
80
+ if (criticalMaximum != null) {
81
+ text += `\t${i18next.t('label.maximum value')} : ${criticalMaximum}\n`;
82
+ }
83
+ if (criticalAcceptables != null) {
84
+ text += `\t${i18next.t('label.acceptables')} : ${criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables}\n`;
85
+ }
86
+ const { minimum: targetMinimum, maximum: targetMaximum, acceptables: targetAcceptables } = limits['targetLimits'] || {};
87
+ if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {
88
+ text += `${i18next.t('label.target-limits')}\n`;
89
+ }
90
+ if (targetMinimum != null) {
91
+ text += `\t${i18next.t('label.minimum value')} : ${targetMinimum}\n`;
92
+ }
93
+ if (targetMaximum != null) {
94
+ text += `\t${i18next.t('label.maximum value')} : ${targetMaximum}\n`;
95
+ }
96
+ if (targetAcceptables != null) {
97
+ text += `\t${i18next.t('label.acceptables')} : ${targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables}\n`;
98
+ }
99
+ return text;
100
+ }
101
+ }
102
+ //# sourceMappingURL=ox-data-use-case-spc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-use-case-spc.js","sourceRoot":"","sources":["../../../../src/usecase/spc/ox-data-use-case-spc.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseSPC extends OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'SPC',\n description: 'Critical Control Point Data Spec',\n help: '',\n specs: [\n {\n type: 'spc-limits' /* A value which seperates acceptability from unacceptability */,\n label: 'critical-limits',\n name: 'criticalLimits',\n property: dataItem\n },\n {\n type: 'spc-limits',\n label: 'target-limits',\n name: 'targetLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any | any[]): EvaluationResult | undefined {\n if (!spec || typeof values === 'undefined') {\n return\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = spec['criticalLimits'] || {}\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = spec['targetLimits'] || {}\n\n var oos = false\n var ooc = false\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (criticalMinimum != null && value < criticalMinimum) {\n oos = true\n break\n }\n\n if (criticalMaximum != null && value > criticalMaximum) {\n oos = true\n break\n }\n\n if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {\n oos = true\n break\n }\n }\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (targetMinimum != null && value < targetMinimum) {\n ooc = true\n break\n }\n\n if (targetMaximum != null && value > targetMaximum) {\n ooc = true\n break\n }\n\n if (targetAcceptables != null && !targetAcceptables.includes(value)) {\n ooc = true\n break\n }\n }\n\n return { oos, ooc }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = limits['criticalLimits'] || {}\n\n if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {\n text += `${i18next.t('label.critical-limits')}\\n`\n }\n\n if (criticalMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${criticalMinimum}\\n`\n }\n if (criticalMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${criticalMaximum}\\n`\n }\n if (criticalAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables\n }\\n`\n }\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = limits['targetLimits'] || {}\n\n if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {\n text += `${i18next.t('label.target-limits')}\\n`\n }\n\n if (targetMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${targetMinimum}\\n`\n }\n if (targetMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${targetMaximum}\\n`\n }\n if (targetAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { LitElement } from 'lit';
5
+ export declare enum DataItemType {
6
+ number = "number",
7
+ text = "text",
8
+ boolean = "boolean",
9
+ select = "select",
10
+ file = "file"
11
+ }
12
+ export type SpcLimitValue = {
13
+ minimum?: number;
14
+ maximum?: number;
15
+ acceptables?: string[] | boolean[];
16
+ };
17
+ /**
18
+ element for SPC limits
19
+
20
+ Example:
21
+
22
+ <ox-input-spc-limits
23
+ .value=${value}
24
+ .type=${type}>
25
+ </ox-input-spc-limits>
26
+ */
27
+ export declare class OxInputSpcLimits extends LitElement {
28
+ static styles: import("lit").CSSResult;
29
+ value: SpcLimitValue;
30
+ type: DataItemType;
31
+ unit?: string;
32
+ options: {
33
+ options?: {
34
+ text: string;
35
+ value: string;
36
+ }[];
37
+ };
38
+ minimum: HTMLInputElement;
39
+ maximum: HTMLInputElement;
40
+ checkedAll: NodeListOf<HTMLInputElement>;
41
+ firstUpdated(): void;
42
+ render(): import("lit").TemplateResult<1>;
43
+ private onChange;
44
+ }
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import { css, html, LitElement } from 'lit';
6
+ import { customElement, property, query, queryAll } from 'lit/decorators.js';
7
+ import { i18next } from '@operato/i18n';
8
+ export var DataItemType;
9
+ (function (DataItemType) {
10
+ DataItemType["number"] = "number";
11
+ DataItemType["text"] = "text";
12
+ DataItemType["boolean"] = "boolean";
13
+ DataItemType["select"] = "select";
14
+ DataItemType["file"] = "file";
15
+ })(DataItemType || (DataItemType = {}));
16
+ /**
17
+ element for SPC limits
18
+
19
+ Example:
20
+
21
+ <ox-input-spc-limits
22
+ .value=${value}
23
+ .type=${type}>
24
+ </ox-input-spc-limits>
25
+ */
26
+ let OxInputSpcLimits = class OxInputSpcLimits extends LitElement {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.value = {};
30
+ this.type = DataItemType.number;
31
+ this.options = {};
32
+ }
33
+ firstUpdated() {
34
+ this.renderRoot.addEventListener('change', this.onChange.bind(this));
35
+ }
36
+ render() {
37
+ var _a, _b;
38
+ const { minimum, maximum, acceptables = [] } = this.value || {};
39
+ return html `
40
+ <div>
41
+ ${this.type === DataItemType.number
42
+ ? html `
43
+ <label>
44
+ <div name>${i18next.t('text.minimum value')}</div>
45
+ <input type="number" name="minimum" .value=${String(minimum)} />
46
+ <div unit>${this.unit}</div>
47
+ </select>
48
+ </label>
49
+ <label>
50
+ <div name>${i18next.t('text.maximum value')}</div>
51
+ <input type="number" name="maximum" .value=${String(maximum)} />
52
+ <div unit>${this.unit}</div>
53
+ </label>
54
+ `
55
+ : this.type === DataItemType.select
56
+ ? html `
57
+ <!-- <div>Acceptables</div> -->
58
+ ${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.map(option => html `
59
+ <div>
60
+ <input
61
+ type="checkbox"
62
+ data-value=${option.value}
63
+ ?checked=${acceptables.includes(option.value)}
64
+ />
65
+ <span>${option.text}</span>
66
+ <span value>(${option.value})</span>
67
+ </div>
68
+ `)}
69
+ `
70
+ : this.type === DataItemType.boolean
71
+ ? html `
72
+ <div>
73
+ <input type="checkbox" data-value=${true} ?checked=${acceptables.includes(true)} />
74
+ <span value>true</span>
75
+ </div>
76
+ <div>
77
+ <input type="checkbox" data-value=${false} ?checked=${acceptables.includes(false)} />
78
+ <span value>false</span>
79
+ </div>
80
+ `
81
+ : html ` <div properties>${i18next.t('text.no properties to set')}</div> `}
82
+ </div>
83
+ `;
84
+ }
85
+ onChange(e) {
86
+ if (this.type === DataItemType.number) {
87
+ this.value = {
88
+ minimum: this.minimum.valueAsNumber,
89
+ maximum: this.maximum.valueAsNumber
90
+ };
91
+ }
92
+ else if (this.type === DataItemType.select) {
93
+ this.value = {
94
+ acceptables: Array.from(this.checkedAll).map(checked => {
95
+ const x = checked.getAttribute('data-value');
96
+ console.log(x);
97
+ return x;
98
+ })
99
+ };
100
+ }
101
+ else if (this.type === DataItemType.boolean) {
102
+ this.value = {
103
+ acceptables: Array.from(this.checkedAll).map(checked => {
104
+ const x = checked.getAttribute('data-value') === 'true';
105
+ console.log(x);
106
+ return x;
107
+ })
108
+ };
109
+ }
110
+ else {
111
+ this.value = {};
112
+ }
113
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }));
114
+ }
115
+ };
116
+ OxInputSpcLimits.styles = css `
117
+ :host {
118
+ display: flex;
119
+ flex-direction: column;
120
+ align-content: center;
121
+ }
122
+
123
+ label {
124
+ margin: 0 var(--margin-default) var(--margin-default) 0;
125
+ }
126
+
127
+ label div > * {
128
+ vertical-align: middle;
129
+ }
130
+
131
+ button {
132
+ width: 20px;
133
+ text-align: center;
134
+ }
135
+
136
+ div[name],
137
+ input[type='checkbox'] + span {
138
+ display: inline-block;
139
+ font: var(--label-font);
140
+ color: var(--label-color);
141
+ text-align: right;
142
+ }
143
+ input,
144
+ select {
145
+ border: var(--input-field-border);
146
+ border-radius: var(--input-field-border-radius);
147
+ padding: var(--input-field-padding);
148
+ font: var(--input-field-font);
149
+ }
150
+
151
+ input[type='checkbox'] {
152
+ width: initial;
153
+ }
154
+ input[checked] + span {
155
+ font-weight: bold;
156
+ }
157
+ [unit],
158
+ [value] {
159
+ display: inline-block;
160
+ opacity: 0.7;
161
+ font: var(--form-sublabel-font);
162
+ }
163
+ [properties] {
164
+ font: var(--input-field-font);
165
+ color: var(--label-color);
166
+ }
167
+ `;
168
+ __decorate([
169
+ property({ type: Object })
170
+ ], OxInputSpcLimits.prototype, "value", void 0);
171
+ __decorate([
172
+ property({ type: String })
173
+ ], OxInputSpcLimits.prototype, "type", void 0);
174
+ __decorate([
175
+ property({ type: String })
176
+ ], OxInputSpcLimits.prototype, "unit", void 0);
177
+ __decorate([
178
+ property({ type: Object })
179
+ ], OxInputSpcLimits.prototype, "options", void 0);
180
+ __decorate([
181
+ query('[name=minimum]')
182
+ ], OxInputSpcLimits.prototype, "minimum", void 0);
183
+ __decorate([
184
+ query('[name=maximum]')
185
+ ], OxInputSpcLimits.prototype, "maximum", void 0);
186
+ __decorate([
187
+ queryAll('[type=checkbox]:checked')
188
+ ], OxInputSpcLimits.prototype, "checkedAll", void 0);
189
+ OxInputSpcLimits = __decorate([
190
+ customElement('ox-input-spc-limits')
191
+ ], OxInputSpcLimits);
192
+ export { OxInputSpcLimits };
193
+ //# sourceMappingURL=ox-input-spc-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-spc-limits.js","sourceRoot":"","sources":["../../../../src/usecase/spc/ox-input-spc-limits.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAll } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nexport enum DataItemType {\n number = 'number',\n text = 'text',\n boolean = 'boolean',\n select = 'select',\n file = 'file'\n}\n\nexport type SpcLimitValue = {\n minimum?: number\n maximum?: number\n acceptables?: string[] | boolean[]\n}\n\n/**\n element for SPC limits\n \n Example:\n \n <ox-input-spc-limits\n .value=${value}\n .type=${type}>\n </ox-input-spc-limits>\n */\n@customElement('ox-input-spc-limits')\nexport class OxInputSpcLimits extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n }\n\n label {\n margin: 0 var(--margin-default) var(--margin-default) 0;\n }\n\n label div > * {\n vertical-align: middle;\n }\n\n button {\n width: 20px;\n text-align: center;\n }\n\n div[name],\n input[type='checkbox'] + span {\n display: inline-block;\n font: var(--label-font);\n color: var(--label-color);\n text-align: right;\n }\n input,\n select {\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n\n input[type='checkbox'] {\n width: initial;\n }\n input[checked] + span {\n font-weight: bold;\n }\n [unit],\n [value] {\n display: inline-block;\n opacity: 0.7;\n font: var(--form-sublabel-font);\n }\n [properties] {\n font: var(--input-field-font);\n color: var(--label-color);\n }\n `\n\n @property({ type: Object }) value: SpcLimitValue = {}\n @property({ type: String }) type: DataItemType = DataItemType.number\n @property({ type: String }) unit?: string\n @property({ type: Object }) options: { options?: { text: string; value: string }[] } = {}\n\n @query('[name=minimum]') minimum!: HTMLInputElement\n @query('[name=maximum]') maximum!: HTMLInputElement\n @queryAll('[type=checkbox]:checked') checkedAll!: NodeListOf<HTMLInputElement>\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this.onChange.bind(this))\n }\n\n render() {\n const { minimum, maximum, acceptables = [] } = this.value || {}\n\n return html`\n <div>\n ${this.type === DataItemType.number\n ? html`\n <label>\n <div name>${i18next.t('text.minimum value')}</div>\n <input type=\"number\" name=\"minimum\" .value=${String(minimum)} />\n <div unit>${this.unit}</div>\n </select>\n </label>\n <label>\n <div name>${i18next.t('text.maximum value')}</div>\n <input type=\"number\" name=\"maximum\" .value=${String(maximum)} />\n <div unit>${this.unit}</div>\n </label>\n `\n : this.type === DataItemType.select\n ? html`\n <!-- <div>Acceptables</div> -->\n ${this.options?.options?.map(\n option => html`\n <div>\n <input\n type=\"checkbox\"\n data-value=${option.value}\n ?checked=${(acceptables as string[]).includes(option.value)}\n />\n <span>${option.text}</span>\n <span value>(${option.value})</span>\n </div>\n `\n )}\n `\n : this.type === DataItemType.boolean\n ? html`\n <div>\n <input type=\"checkbox\" data-value=${true} ?checked=${(acceptables as boolean[]).includes(true)} />\n <span value>true</span>\n </div>\n <div>\n <input type=\"checkbox\" data-value=${false} ?checked=${(acceptables as boolean[]).includes(false)} />\n <span value>false</span>\n </div>\n `\n : html` <div properties>${i18next.t('text.no properties to set')}</div> `}\n </div>\n `\n }\n\n private onChange(e: Event) {\n if (this.type === DataItemType.number) {\n this.value = {\n minimum: this.minimum.valueAsNumber,\n maximum: this.maximum.valueAsNumber\n }\n } else if (this.type === DataItemType.select) {\n this.value = {\n acceptables: Array.from(this.checkedAll).map(checked => {\n const x = checked.getAttribute('data-value')!\n console.log(x)\n return x\n })\n }\n } else if (this.type === DataItemType.boolean) {\n this.value = {\n acceptables: Array.from(this.checkedAll).map(checked => {\n const x = checked.getAttribute('data-value')! === 'true'\n console.log(x)\n return x\n })\n }\n } else {\n this.value = {}\n }\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import './ox-input-spc-limits.js';
2
+ import { TemplateResult } from 'lit';
3
+ import { OxPropertyEditor, PropertySpec } from '@operato/property-editor';
4
+ export declare class OxPropertyEditorSpcLimits extends OxPropertyEditor {
5
+ editorTemplate(value: any, spec: PropertySpec): TemplateResult;
6
+ }
@@ -0,0 +1,24 @@
1
+ import { __decorate } from "tslib";
2
+ import './ox-input-spc-limits.js';
3
+ import { html } from 'lit';
4
+ import { customElement } from 'lit/decorators.js';
5
+ import { OxPropertyEditor } from '@operato/property-editor';
6
+ let OxPropertyEditorSpcLimits = class OxPropertyEditorSpcLimits extends OxPropertyEditor {
7
+ editorTemplate(value, spec) {
8
+ const { type, options, unit } = spec.property || {};
9
+ return html `
10
+ <ox-input-spc-limits
11
+ id="editor"
12
+ .value=${value}
13
+ .type=${type}
14
+ .unit=${unit}
15
+ .options=${options}
16
+ ></ox-input-spc-limits>
17
+ `;
18
+ }
19
+ };
20
+ OxPropertyEditorSpcLimits = __decorate([
21
+ customElement('ox-property-editor-spc-limits')
22
+ ], OxPropertyEditorSpcLimits);
23
+ export { OxPropertyEditorSpcLimits };
24
+ //# sourceMappingURL=ox-property-editor-spc-limits.js.map