@happyvertical/smrt-manufacturing 0.53.6 → 0.54.0
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.
- package/AGENTS.md +1 -2
- package/README.md +3 -4
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -2
- package/dist/smrt-knowledge.json +5 -7
- package/dist/svelte/components/AssemblyForm.svelte +423 -52
- package/dist/svelte/components/AssemblyForm.svelte.d.ts +17 -32
- package/dist/svelte/components/AssemblyForm.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AssemblyList.svelte +18 -12
- package/dist/svelte/components/AssemblyList.svelte.d.ts +2 -13
- package/dist/svelte/components/AssemblyList.svelte.d.ts.map +1 -1
- package/dist/svelte/i18n.d.ts +23 -0
- package/dist/svelte/i18n.d.ts.map +1 -1
- package/dist/svelte/i18n.js +23 -0
- package/dist/svelte/index.d.ts +4 -4
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +4 -4
- package/dist/svelte/types.d.ts +95 -0
- package/dist/svelte/types.d.ts.map +1 -1
- package/dist/svelte/types.js +127 -0
- package/package.json +8 -9
package/dist/svelte/i18n.d.ts
CHANGED
|
@@ -31,6 +31,29 @@ export declare const M: {
|
|
|
31
31
|
readonly 'manufacturing.operation_form.cancel': "manufacturing.operation_form.cancel";
|
|
32
32
|
readonly 'manufacturing.operation_form.error_code': "manufacturing.operation_form.error_code";
|
|
33
33
|
readonly 'manufacturing.operation_form.error_name': "manufacturing.operation_form.error_name";
|
|
34
|
+
readonly 'manufacturing.assembly_form.name': "manufacturing.assembly_form.name";
|
|
35
|
+
readonly 'manufacturing.assembly_form.description': "manufacturing.assembly_form.description";
|
|
36
|
+
readonly 'manufacturing.assembly_form.category': "manufacturing.assembly_form.category";
|
|
37
|
+
readonly 'manufacturing.assembly_form.part_reference': "manufacturing.assembly_form.part_reference";
|
|
38
|
+
readonly 'manufacturing.assembly_form.part_reference_help': "manufacturing.assembly_form.part_reference_help";
|
|
39
|
+
readonly 'manufacturing.assembly_form.price': "manufacturing.assembly_form.price";
|
|
40
|
+
readonly 'manufacturing.assembly_form.price_help': "manufacturing.assembly_form.price_help";
|
|
41
|
+
readonly 'manufacturing.assembly_form.labour': "manufacturing.assembly_form.labour";
|
|
42
|
+
readonly 'manufacturing.assembly_form.labour_help': "manufacturing.assembly_form.labour_help";
|
|
43
|
+
readonly 'manufacturing.assembly_form.operation': "manufacturing.assembly_form.operation";
|
|
44
|
+
readonly 'manufacturing.assembly_form.operation_help': "manufacturing.assembly_form.operation_help";
|
|
45
|
+
readonly 'manufacturing.assembly_form.operation_none': "manufacturing.assembly_form.operation_none";
|
|
46
|
+
readonly 'manufacturing.assembly_form.operation_retired': "manufacturing.assembly_form.operation_retired";
|
|
47
|
+
readonly 'manufacturing.assembly_form.operation_unknown': "manufacturing.assembly_form.operation_unknown";
|
|
48
|
+
readonly 'manufacturing.assembly_form.tags': "manufacturing.assembly_form.tags";
|
|
49
|
+
readonly 'manufacturing.assembly_form.tags_help': "manufacturing.assembly_form.tags_help";
|
|
50
|
+
readonly 'manufacturing.assembly_form.submit_add': "manufacturing.assembly_form.submit_add";
|
|
51
|
+
readonly 'manufacturing.assembly_form.submit_edit': "manufacturing.assembly_form.submit_edit";
|
|
52
|
+
readonly 'manufacturing.assembly_form.saving': "manufacturing.assembly_form.saving";
|
|
53
|
+
readonly 'manufacturing.assembly_form.cancel': "manufacturing.assembly_form.cancel";
|
|
54
|
+
readonly 'manufacturing.assembly_form.error_name': "manufacturing.assembly_form.error_name";
|
|
55
|
+
readonly 'manufacturing.assembly_form.error_price': "manufacturing.assembly_form.error_price";
|
|
56
|
+
readonly 'manufacturing.assembly_form.error_labour': "manufacturing.assembly_form.error_labour";
|
|
34
57
|
readonly 'manufacturing.assembly_list.caption': "manufacturing.assembly_list.caption";
|
|
35
58
|
readonly 'manufacturing.assembly_list.empty': "manufacturing.assembly_list.empty";
|
|
36
59
|
readonly 'manufacturing.assembly_list.name': "manufacturing.assembly_list.name";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4JZ,CAAC"}
|
package/dist/svelte/i18n.js
CHANGED
|
@@ -32,6 +32,29 @@ export const M = defineMessages({
|
|
|
32
32
|
'manufacturing.operation_form.cancel': 'Cancel',
|
|
33
33
|
'manufacturing.operation_form.error_code': 'Enter a code.',
|
|
34
34
|
'manufacturing.operation_form.error_name': 'Enter a name.',
|
|
35
|
+
'manufacturing.assembly_form.name': 'Name',
|
|
36
|
+
'manufacturing.assembly_form.description': 'Description',
|
|
37
|
+
'manufacturing.assembly_form.category': 'Category',
|
|
38
|
+
'manufacturing.assembly_form.part_reference': 'Part reference',
|
|
39
|
+
'manufacturing.assembly_form.part_reference_help': 'Optional. Your own drawing or part number, alongside the SKU code.',
|
|
40
|
+
'manufacturing.assembly_form.price': 'Price',
|
|
41
|
+
'manufacturing.assembly_form.price_help': 'Amount in {currency}.',
|
|
42
|
+
'manufacturing.assembly_form.labour': 'Estimated labour (minutes)',
|
|
43
|
+
'manufacturing.assembly_form.labour_help': 'Whole minutes to build one unit. 0 means not estimated.',
|
|
44
|
+
'manufacturing.assembly_form.operation': 'Default operation',
|
|
45
|
+
'manufacturing.assembly_form.operation_help': 'Optional. The operation work on this assembly is booked to by default.',
|
|
46
|
+
'manufacturing.assembly_form.operation_none': 'None',
|
|
47
|
+
'manufacturing.assembly_form.operation_retired': '{label} (retired)',
|
|
48
|
+
'manufacturing.assembly_form.operation_unknown': 'Unknown operation ({id})',
|
|
49
|
+
'manufacturing.assembly_form.tags': 'Tags',
|
|
50
|
+
'manufacturing.assembly_form.tags_help': 'Optional. Separate tags with commas.',
|
|
51
|
+
'manufacturing.assembly_form.submit_add': 'Add assembly',
|
|
52
|
+
'manufacturing.assembly_form.submit_edit': 'Save changes',
|
|
53
|
+
'manufacturing.assembly_form.saving': 'Saving...',
|
|
54
|
+
'manufacturing.assembly_form.cancel': 'Cancel',
|
|
55
|
+
'manufacturing.assembly_form.error_name': 'Enter a name.',
|
|
56
|
+
'manufacturing.assembly_form.error_price': 'Enter a price of zero or more, with no more decimals than the currency has.',
|
|
57
|
+
'manufacturing.assembly_form.error_labour': 'Enter a whole number of minutes, zero or more.',
|
|
35
58
|
'manufacturing.assembly_list.caption': 'Assemblies',
|
|
36
59
|
'manufacturing.assembly_list.empty': 'No assemblies',
|
|
37
60
|
'manufacturing.assembly_list.name': 'Name',
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @happyvertical/smrt-manufacturing/svelte
|
|
3
3
|
*
|
|
4
4
|
* Props-driven Svelte 5 surfaces: the managed list of operations (a list with
|
|
5
|
-
* retire and reinstate, and a form), and assemblies (a list, a
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* retire and reinstate, and a form), and assemblies (a list, a form, and a
|
|
6
|
+
* bill-of-materials editor whose sub-assemblies expand to their own bills),
|
|
7
|
+
* production runs with their progress and completion reporting, and
|
|
8
8
|
* the read-only exploded requirements of a bill. Hosts load data through the
|
|
9
9
|
* package services and collections and pass plain view objects.
|
|
10
10
|
* Auto-registers components with ModuleUIRegistry on import.
|
|
@@ -29,5 +29,5 @@ export type OperationFormProps = ComponentProps<typeof OperationForm>;
|
|
|
29
29
|
export type OperationListProps = ComponentProps<typeof OperationList>;
|
|
30
30
|
export type ProductionRunListProps = ComponentProps<typeof ProductionRunList>;
|
|
31
31
|
export type RequirementsTreeProps = ComponentProps<typeof RequirementsTree>;
|
|
32
|
-
export { type AssemblyView, type BomComponentOption, type BomEditorLine, type BomLineDraft, type BomLineDraftField, type BomLineInput, type BomLineValidation, type CompletionQtyValidation, type ComponentKind, componentKindLabelKey, isProductionRunOpen, type OperationFormDraft, type OperationFormField, type OperationFormInitial, type OperationFormValidation, type OperationFormValues, type OperationView, operationStatusBadgeKey, type ProductionRunStatus, type ProductionRunView, productionRunStatusLabelKey, productionRunStatusTone, type RequirementLineView, type RequirementTotalView, splitLabourMinutes, toAssemblyView, toBomEditorLine, toBomEditorLines, toProductionRunView, toRequirementTotals, toRequirementTree, validateBomLineInput, validateCompletionQty, validateOperationForm, } from './types.js';
|
|
32
|
+
export { type AssemblyFieldPolicy, type AssemblyFormDraft, type AssemblyFormField, type AssemblyFormInitial, type AssemblyFormInvalidField, type AssemblyFormValidation, type AssemblyFormValues, type AssemblyView, assemblyFormDraft, type BomComponentOption, type BomEditorLine, type BomLineDraft, type BomLineDraftField, type BomLineInput, type BomLineValidation, type CompletionQtyValidation, type ComponentKind, componentKindLabelKey, currencyExponent, formatPriceInput, isProductionRunOpen, keepProtectedFields, type OperationFormDraft, type OperationFormField, type OperationFormInitial, type OperationFormValidation, type OperationFormValues, type OperationView, operationStatusBadgeKey, type ProductionRunStatus, type ProductionRunView, productionRunStatusLabelKey, productionRunStatusTone, type RequirementLineView, type RequirementTotalView, splitLabourMinutes, toAssemblyView, toBomEditorLine, toBomEditorLines, toProductionRunView, toRequirementTotals, toRequirementTree, validateAssemblyForm, validateBomLineInput, validateCompletionQty, validateOperationForm, } from './types.js';
|
|
33
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9D,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9E,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE5E,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9D,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9E,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE5E,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
package/dist/svelte/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @happyvertical/smrt-manufacturing/svelte
|
|
3
3
|
*
|
|
4
4
|
* Props-driven Svelte 5 surfaces: the managed list of operations (a list with
|
|
5
|
-
* retire and reinstate, and a form), and assemblies (a list, a
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* retire and reinstate, and a form), and assemblies (a list, a form, and a
|
|
6
|
+
* bill-of-materials editor whose sub-assemblies expand to their own bills),
|
|
7
|
+
* production runs with their progress and completion reporting, and
|
|
8
8
|
* the read-only exploded requirements of a bill. Hosts load data through the
|
|
9
9
|
* package services and collections and pass plain view objects.
|
|
10
10
|
* Auto-registers components with ModuleUIRegistry on import.
|
|
@@ -22,7 +22,7 @@ import OperationList from './components/OperationList.svelte';
|
|
|
22
22
|
import ProductionRunList from './components/ProductionRunList.svelte';
|
|
23
23
|
import RequirementsTree from './components/RequirementsTree.svelte';
|
|
24
24
|
export { AssemblyForm, AssemblyList, BomEditor, BomStructureTree, OperationForm, OperationList, ProductionRunList, RequirementsTree, };
|
|
25
|
-
export { componentKindLabelKey, isProductionRunOpen, operationStatusBadgeKey, productionRunStatusLabelKey, productionRunStatusTone, splitLabourMinutes, toAssemblyView, toBomEditorLine, toBomEditorLines, toProductionRunView, toRequirementTotals, toRequirementTree, validateBomLineInput, validateCompletionQty, validateOperationForm, } from './types.js';
|
|
25
|
+
export { assemblyFormDraft, componentKindLabelKey, currencyExponent, formatPriceInput, isProductionRunOpen, keepProtectedFields, operationStatusBadgeKey, productionRunStatusLabelKey, productionRunStatusTone, splitLabourMinutes, toAssemblyView, toBomEditorLine, toBomEditorLines, toProductionRunView, toRequirementTotals, toRequirementTree, validateAssemblyForm, validateBomLineInput, validateCompletionQty, validateOperationForm, } from './types.js';
|
|
26
26
|
// Auto-register with ModuleUIRegistry
|
|
27
27
|
ModuleUIRegistry.registerModule(MANUFACTURING_MODULE_META);
|
|
28
28
|
ModuleUIRegistry.register('@happyvertical/smrt-manufacturing', 'operation-list', OperationList);
|
package/dist/svelte/types.d.ts
CHANGED
|
@@ -58,6 +58,101 @@ export interface OperationFormDraft {
|
|
|
58
58
|
export declare function operationStatusBadgeKey(isActive: boolean): string;
|
|
59
59
|
/** Trim a form draft and check the required fields: code and name. */
|
|
60
60
|
export declare function validateOperationForm(draft: Readonly<Partial<OperationFormDraft>>): OperationFormValidation;
|
|
61
|
+
/**
|
|
62
|
+
* The part of a resolved field policy `AssemblyList` reads: each field's
|
|
63
|
+
* visibility. smrt-fields' `ResolvedObjectFieldPolicy` satisfies it.
|
|
64
|
+
*/
|
|
65
|
+
export interface AssemblyFieldPolicy {
|
|
66
|
+
fields: Readonly<Record<string, {
|
|
67
|
+
visibility?: string;
|
|
68
|
+
} | undefined>>;
|
|
69
|
+
}
|
|
70
|
+
/** A field of `AssemblyForm`, named as `Assembly` and `Product` name it. */
|
|
71
|
+
export type AssemblyFormField = 'name' | 'description' | 'category' | 'partReference' | 'price' | 'estimatedLabourMinutes' | 'defaultOperationId' | 'tags';
|
|
72
|
+
/** Existing values passed to `AssemblyForm` when editing; an `Assembly` satisfies it. */
|
|
73
|
+
export interface AssemblyFormInitial {
|
|
74
|
+
name: string;
|
|
75
|
+
description: string;
|
|
76
|
+
category: string;
|
|
77
|
+
partReference: string;
|
|
78
|
+
/** Catalog price in integer minor units (cents). */
|
|
79
|
+
price: number;
|
|
80
|
+
/** Labour to build one unit, in whole minutes. */
|
|
81
|
+
estimatedLabourMinutes: number;
|
|
82
|
+
/** The default `Operation` id, or `null` for none. */
|
|
83
|
+
defaultOperationId: string | null;
|
|
84
|
+
tags: readonly string[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* What `AssemblyForm` hands to `onsubmit`; text is trimmed. A hidden or
|
|
88
|
+
* read-only field carries its initial value unchanged (a default for a new
|
|
89
|
+
* assembly), so a host can save every key or only the ones that differ.
|
|
90
|
+
*/
|
|
91
|
+
export interface AssemblyFormValues {
|
|
92
|
+
name: string;
|
|
93
|
+
description: string;
|
|
94
|
+
category: string;
|
|
95
|
+
partReference: string;
|
|
96
|
+
/** Integer minor units (cents). */
|
|
97
|
+
price: number;
|
|
98
|
+
/** A whole number of minutes, zero or more. */
|
|
99
|
+
estimatedLabourMinutes: number;
|
|
100
|
+
/** The chosen `Operation` id, or `null` for none. */
|
|
101
|
+
defaultOperationId: string | null;
|
|
102
|
+
tags: string[];
|
|
103
|
+
}
|
|
104
|
+
/** A field `validateAssemblyForm` can reject. */
|
|
105
|
+
export type AssemblyFormInvalidField = 'name' | 'price' | 'estimatedLabourMinutes';
|
|
106
|
+
/** The raw text `AssemblyForm` collects, before trimming and checks. */
|
|
107
|
+
export interface AssemblyFormDraft {
|
|
108
|
+
name: string;
|
|
109
|
+
description: string;
|
|
110
|
+
category: string;
|
|
111
|
+
partReference: string;
|
|
112
|
+
/** Major units as typed, e.g. `1250.00`. */
|
|
113
|
+
price: string;
|
|
114
|
+
estimatedLabourMinutes: string;
|
|
115
|
+
/** Empty for none. */
|
|
116
|
+
defaultOperationId: string;
|
|
117
|
+
/** Comma-separated. */
|
|
118
|
+
tags: string;
|
|
119
|
+
}
|
|
120
|
+
/** Result of {@link validateAssemblyForm}. */
|
|
121
|
+
export type AssemblyFormValidation = {
|
|
122
|
+
ok: true;
|
|
123
|
+
values: AssemblyFormValues;
|
|
124
|
+
} | {
|
|
125
|
+
ok: false;
|
|
126
|
+
invalid: AssemblyFormInvalidField[];
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* The number of decimal places in a currency's minor unit (2 for USD, 0 for
|
|
130
|
+
* JPY, 3 for KWD), as `Intl` knows it; 2 when the code is not recognized.
|
|
131
|
+
*/
|
|
132
|
+
export declare function currencyExponent(currency: string): number;
|
|
133
|
+
/**
|
|
134
|
+
* Format integer minor units as the major-unit text the price field shows,
|
|
135
|
+
* with `exponent` decimals. A negative value keeps its sign so validation
|
|
136
|
+
* reports it instead of replacing it.
|
|
137
|
+
*/
|
|
138
|
+
export declare function formatPriceInput(minorUnits: number, exponent?: number): string;
|
|
139
|
+
/** The draft `AssemblyForm` starts from for an assembly, or a blank one. */
|
|
140
|
+
export declare function assemblyFormDraft(initial: AssemblyFormInitial | null, exponent?: number): AssemblyFormDraft;
|
|
141
|
+
/**
|
|
142
|
+
* `values` with every field in `protectedFields` replaced by its initial
|
|
143
|
+
* value, exactly as stored (not trimmed or re-split), or its default for a
|
|
144
|
+
* new assembly. A hidden or read-only field is never rewritten by the form.
|
|
145
|
+
*/
|
|
146
|
+
export declare function keepProtectedFields(values: AssemblyFormValues, initial: AssemblyFormInitial | null, protectedFields: readonly AssemblyFormField[]): AssemblyFormValues;
|
|
147
|
+
/**
|
|
148
|
+
* Trim a form draft and check it the way the model does: the name is
|
|
149
|
+
* required, the labour estimate is a whole number of minutes of zero or more
|
|
150
|
+
* (empty counts as zero), and the price is an amount of zero or more with at
|
|
151
|
+
* most `exponent` decimals (empty counts as zero; 2 unless the currency says
|
|
152
|
+
* otherwise). Fields in `skip` (hidden or
|
|
153
|
+
* read-only in the form) are not checked.
|
|
154
|
+
*/
|
|
155
|
+
export declare function validateAssemblyForm(draft: Readonly<Partial<AssemblyFormDraft>>, skip?: readonly AssemblyFormField[], exponent?: number): AssemblyFormValidation;
|
|
61
156
|
export type { ComponentKind };
|
|
62
157
|
/** One row of {@link AssemblyList}. */
|
|
63
158
|
export interface AssemblyView {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/svelte/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/svelte/types.ts"],"names":[],"mappings":"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"}
|
package/dist/svelte/types.js
CHANGED
|
@@ -33,6 +33,133 @@ export function validateOperationForm(draft) {
|
|
|
33
33
|
},
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* The number of decimal places in a currency's minor unit (2 for USD, 0 for
|
|
38
|
+
* JPY, 3 for KWD), as `Intl` knows it; 2 when the code is not recognized.
|
|
39
|
+
*/
|
|
40
|
+
export function currencyExponent(currency) {
|
|
41
|
+
try {
|
|
42
|
+
return (new Intl.NumberFormat('en', {
|
|
43
|
+
style: 'currency',
|
|
44
|
+
currency,
|
|
45
|
+
}).resolvedOptions().maximumFractionDigits ?? 2);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return 2;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Format integer minor units as the major-unit text the price field shows,
|
|
53
|
+
* with `exponent` decimals. A negative value keeps its sign so validation
|
|
54
|
+
* reports it instead of replacing it.
|
|
55
|
+
*/
|
|
56
|
+
export function formatPriceInput(minorUnits, exponent = 2) {
|
|
57
|
+
if (!Number.isSafeInteger(minorUnits))
|
|
58
|
+
return formatPriceInput(0, exponent);
|
|
59
|
+
const sign = minorUnits < 0 ? '-' : '';
|
|
60
|
+
const abs = Math.abs(minorUnits);
|
|
61
|
+
if (exponent <= 0)
|
|
62
|
+
return `${sign}${abs}`;
|
|
63
|
+
const scale = 10 ** exponent;
|
|
64
|
+
const whole = Math.floor(abs / scale);
|
|
65
|
+
return `${sign}${whole}.${String(abs - whole * scale).padStart(exponent, '0')}`;
|
|
66
|
+
}
|
|
67
|
+
/** The draft `AssemblyForm` starts from for an assembly, or a blank one. */
|
|
68
|
+
export function assemblyFormDraft(initial, exponent = 2) {
|
|
69
|
+
return {
|
|
70
|
+
name: initial?.name ?? '',
|
|
71
|
+
description: initial?.description ?? '',
|
|
72
|
+
category: initial?.category ?? '',
|
|
73
|
+
partReference: initial?.partReference ?? '',
|
|
74
|
+
price: formatPriceInput(initial?.price ?? 0, exponent),
|
|
75
|
+
estimatedLabourMinutes: String(initial?.estimatedLabourMinutes ?? 0),
|
|
76
|
+
defaultOperationId: initial?.defaultOperationId ?? '',
|
|
77
|
+
tags: (initial?.tags ?? []).join(', '),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* `values` with every field in `protectedFields` replaced by its initial
|
|
82
|
+
* value, exactly as stored (not trimmed or re-split), or its default for a
|
|
83
|
+
* new assembly. A hidden or read-only field is never rewritten by the form.
|
|
84
|
+
*/
|
|
85
|
+
export function keepProtectedFields(values, initial, protectedFields) {
|
|
86
|
+
const kept = { ...values };
|
|
87
|
+
const original = {
|
|
88
|
+
name: initial?.name ?? '',
|
|
89
|
+
description: initial?.description ?? '',
|
|
90
|
+
category: initial?.category ?? '',
|
|
91
|
+
partReference: initial?.partReference ?? '',
|
|
92
|
+
price: initial?.price ?? 0,
|
|
93
|
+
estimatedLabourMinutes: initial?.estimatedLabourMinutes ?? 0,
|
|
94
|
+
defaultOperationId: initial?.defaultOperationId ?? null,
|
|
95
|
+
tags: [...(initial?.tags ?? [])],
|
|
96
|
+
};
|
|
97
|
+
for (const field of protectedFields) {
|
|
98
|
+
kept[field] = original[field];
|
|
99
|
+
}
|
|
100
|
+
return kept;
|
|
101
|
+
}
|
|
102
|
+
function parseTags(raw) {
|
|
103
|
+
const tags = [];
|
|
104
|
+
for (const part of raw.split(',')) {
|
|
105
|
+
const tag = part.trim();
|
|
106
|
+
if (tag && !tags.includes(tag))
|
|
107
|
+
tags.push(tag);
|
|
108
|
+
}
|
|
109
|
+
return tags;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Trim a form draft and check it the way the model does: the name is
|
|
113
|
+
* required, the labour estimate is a whole number of minutes of zero or more
|
|
114
|
+
* (empty counts as zero), and the price is an amount of zero or more with at
|
|
115
|
+
* most `exponent` decimals (empty counts as zero; 2 unless the currency says
|
|
116
|
+
* otherwise). Fields in `skip` (hidden or
|
|
117
|
+
* read-only in the form) are not checked.
|
|
118
|
+
*/
|
|
119
|
+
export function validateAssemblyForm(draft, skip = [], exponent = 2) {
|
|
120
|
+
const invalid = [];
|
|
121
|
+
const name = textOf(draft.name);
|
|
122
|
+
const minutesText = textOf(draft.estimatedLabourMinutes);
|
|
123
|
+
const priceText = textOf(draft.price);
|
|
124
|
+
let estimatedLabourMinutes = 0;
|
|
125
|
+
if (minutesText !== '') {
|
|
126
|
+
estimatedLabourMinutes = /^\d+$/.test(minutesText)
|
|
127
|
+
? Number(minutesText)
|
|
128
|
+
: Number.NaN;
|
|
129
|
+
}
|
|
130
|
+
let price = 0;
|
|
131
|
+
if (priceText !== '') {
|
|
132
|
+
const match = new RegExp(exponent > 0 ? `^(\\d+)(?:\\.(\\d{1,${exponent}}))?$` : '^(\\d+)$').exec(priceText);
|
|
133
|
+
price = match
|
|
134
|
+
? Number(match[1]) * 10 ** exponent +
|
|
135
|
+
Number((match[2] ?? '').padEnd(exponent, '0') || 0)
|
|
136
|
+
: Number.NaN;
|
|
137
|
+
}
|
|
138
|
+
if (!name && !skip.includes('name'))
|
|
139
|
+
invalid.push('name');
|
|
140
|
+
if (!Number.isSafeInteger(price) && !skip.includes('price'))
|
|
141
|
+
invalid.push('price');
|
|
142
|
+
if (!Number.isSafeInteger(estimatedLabourMinutes) &&
|
|
143
|
+
!skip.includes('estimatedLabourMinutes'))
|
|
144
|
+
invalid.push('estimatedLabourMinutes');
|
|
145
|
+
if (invalid.length > 0)
|
|
146
|
+
return { ok: false, invalid };
|
|
147
|
+
return {
|
|
148
|
+
ok: true,
|
|
149
|
+
values: {
|
|
150
|
+
name,
|
|
151
|
+
description: textOf(draft.description),
|
|
152
|
+
category: textOf(draft.category),
|
|
153
|
+
partReference: textOf(draft.partReference),
|
|
154
|
+
price: Number.isSafeInteger(price) ? price : 0,
|
|
155
|
+
estimatedLabourMinutes: Number.isSafeInteger(estimatedLabourMinutes)
|
|
156
|
+
? estimatedLabourMinutes
|
|
157
|
+
: 0,
|
|
158
|
+
defaultOperationId: textOf(draft.defaultOperationId) || null,
|
|
159
|
+
tags: parseTags(draft.tags ?? ''),
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
36
163
|
/**
|
|
37
164
|
* Build an {@link AssemblyView} from an `Assembly` plus the facts the list
|
|
38
165
|
* shows that live on its neighbours: its SKU codes and its active bill.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-manufacturing",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.0",
|
|
4
4
|
"smrtJsdoc": "strict",
|
|
5
5
|
"description": "Bills of materials, cost rollup, and production-order operations for the SMRT framework — strictly industry-neutral",
|
|
6
6
|
"type": "module",
|
|
@@ -32,13 +32,12 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@happyvertical/logger": "^0.100.3",
|
|
35
|
-
"@happyvertical/smrt-core": "0.
|
|
36
|
-
"@happyvertical/smrt-
|
|
37
|
-
"@happyvertical/smrt-
|
|
38
|
-
"@happyvertical/smrt-
|
|
39
|
-
"@happyvertical/smrt-
|
|
40
|
-
"@happyvertical/smrt-
|
|
41
|
-
"@happyvertical/smrt-ui": "0.53.6",
|
|
35
|
+
"@happyvertical/smrt-core": "0.54.0",
|
|
36
|
+
"@happyvertical/smrt-inventory": "0.54.0",
|
|
37
|
+
"@happyvertical/smrt-products": "0.54.0",
|
|
38
|
+
"@happyvertical/smrt-tenancy": "0.54.0",
|
|
39
|
+
"@happyvertical/smrt-types": "0.54.0",
|
|
40
|
+
"@happyvertical/smrt-ui": "0.54.0",
|
|
42
41
|
"@happyvertical/sql": "^0.100.3"
|
|
43
42
|
},
|
|
44
43
|
"peerDependencies": {
|
|
@@ -50,7 +49,7 @@
|
|
|
50
49
|
}
|
|
51
50
|
},
|
|
52
51
|
"devDependencies": {
|
|
53
|
-
"@happyvertical/smrt-vitest": "0.
|
|
52
|
+
"@happyvertical/smrt-vitest": "0.54.0",
|
|
54
53
|
"@sveltejs/package": "^2.5.8",
|
|
55
54
|
"@sveltejs/vite-plugin-svelte": "^7.3.0",
|
|
56
55
|
"@types/node": "24.13.6",
|