@adcops/autocore-react 3.3.87 → 3.3.90

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 (112) hide show
  1. package/dist/assets/AxisC.d.ts +4 -0
  2. package/dist/assets/AxisC.d.ts.map +1 -0
  3. package/dist/assets/AxisC.js +1 -0
  4. package/dist/assets/AxisX.js +1 -1
  5. package/dist/assets/AxisY.js +1 -1
  6. package/dist/assets/AxisZ.js +1 -1
  7. package/dist/assets/JogXNeg.d.ts +4 -0
  8. package/dist/assets/JogXNeg.d.ts.map +1 -0
  9. package/dist/assets/JogXNeg.js +1 -0
  10. package/dist/assets/JogXPos.d.ts +4 -0
  11. package/dist/assets/JogXPos.d.ts.map +1 -0
  12. package/dist/assets/JogXPos.js +1 -0
  13. package/dist/assets/JogYNeg.d.ts +4 -0
  14. package/dist/assets/JogYNeg.d.ts.map +1 -0
  15. package/dist/assets/JogYNeg.js +1 -0
  16. package/dist/assets/JogYPos.d.ts +4 -0
  17. package/dist/assets/JogYPos.d.ts.map +1 -0
  18. package/dist/assets/JogYPos.js +1 -0
  19. package/dist/assets/JogZNeg.d.ts +4 -0
  20. package/dist/assets/JogZNeg.d.ts.map +1 -0
  21. package/dist/assets/JogZNeg.js +1 -0
  22. package/dist/assets/JogZPos.d.ts +4 -0
  23. package/dist/assets/JogZPos.d.ts.map +1 -0
  24. package/dist/assets/JogZPos.js +1 -0
  25. package/dist/assets/Off.d.ts +4 -0
  26. package/dist/assets/Off.d.ts.map +1 -0
  27. package/dist/assets/Off.js +1 -0
  28. package/dist/assets/On.d.ts +4 -0
  29. package/dist/assets/On.d.ts.map +1 -0
  30. package/dist/assets/On.js +1 -0
  31. package/dist/assets/index.d.ts +6 -0
  32. package/dist/assets/index.d.ts.map +1 -1
  33. package/dist/assets/index.js +1 -1
  34. package/dist/assets/svg/off.svg +2 -0
  35. package/dist/assets/svg/on.svg +11 -0
  36. package/dist/components/JogPanel.d.ts +2 -2
  37. package/dist/components/JogPanel.d.ts.map +1 -1
  38. package/dist/components/JogPanel.js +1 -1
  39. package/dist/components/ams/AmsProvider.d.ts +10 -0
  40. package/dist/components/ams/AmsProvider.d.ts.map +1 -1
  41. package/dist/components/ams/AssetDetailView.js +1 -1
  42. package/dist/components/ams/AssetEditDialog.d.ts.map +1 -1
  43. package/dist/components/ams/AssetEditDialog.js +1 -1
  44. package/dist/components/ams/AssetRegistryTable.css +12 -0
  45. package/dist/components/ams/AssetRegistryTable.d.ts +1 -0
  46. package/dist/components/ams/AssetRegistryTable.d.ts.map +1 -1
  47. package/dist/components/ams/AssetRegistryTable.js +1 -1
  48. package/dist/components/forms/FormRow.js +1 -1
  49. package/dist/components/forms/FormSection.js +1 -1
  50. package/dist/components/forms/forms.css +18 -18
  51. package/dist/components/tis/ConfigurationDialog.d.ts +21 -0
  52. package/dist/components/tis/ConfigurationDialog.d.ts.map +1 -0
  53. package/dist/components/tis/ConfigurationDialog.js +1 -0
  54. package/dist/components/tis/ResultHistoryTable.js +1 -1
  55. package/dist/components/tis/TestDataView.d.ts +27 -0
  56. package/dist/components/tis/TestDataView.d.ts.map +1 -1
  57. package/dist/components/tis/TestDataView.js +1 -1
  58. package/dist/components/tis/TestSetupForm.d.ts +37 -0
  59. package/dist/components/tis/TestSetupForm.d.ts.map +1 -1
  60. package/dist/components/tis/TestSetupForm.js +1 -1
  61. package/dist/components/tis/TisProvider.d.ts +25 -0
  62. package/dist/components/tis/TisProvider.d.ts.map +1 -1
  63. package/dist/components/tis/TisProvider.js +1 -1
  64. package/dist/components/tis-editor/TisConfigEditor.css +20 -0
  65. package/dist/components/tis-editor/editor/ConfigurationsEditor.d.ts +19 -0
  66. package/dist/components/tis-editor/editor/ConfigurationsEditor.d.ts.map +1 -0
  67. package/dist/components/tis-editor/editor/ConfigurationsEditor.js +1 -0
  68. package/dist/components/tis-editor/editor/MethodFormEditor.d.ts.map +1 -1
  69. package/dist/components/tis-editor/editor/MethodFormEditor.js +1 -1
  70. package/dist/components/tis-editor/types.d.ts +13 -0
  71. package/dist/components/tis-editor/types.d.ts.map +1 -1
  72. package/dist/components/tis-editor/validation.d.ts.map +1 -1
  73. package/dist/components/tis-editor/validation.js +1 -1
  74. package/dist/themes/adc-dark/blue/theme.css +3 -2
  75. package/dist/themes/adc-dark/blue/theme.css.map +1 -1
  76. package/package.json +2 -1
  77. package/src/assets/AxisC.tsx +38 -0
  78. package/src/assets/AxisX.tsx +32 -32
  79. package/src/assets/AxisY.tsx +34 -34
  80. package/src/assets/AxisZ.tsx +31 -31
  81. package/src/assets/JogXNeg.tsx +30 -0
  82. package/src/assets/JogXPos.tsx +30 -0
  83. package/src/assets/JogYNeg.tsx +30 -0
  84. package/src/assets/JogYPos.tsx +30 -0
  85. package/src/assets/JogZNeg.tsx +30 -0
  86. package/src/assets/JogZPos.tsx +30 -0
  87. package/src/assets/Off.tsx +14 -0
  88. package/src/assets/On.tsx +26 -0
  89. package/src/assets/index.ts +6 -0
  90. package/src/assets/svg/off.svg +2 -0
  91. package/src/assets/svg/on.svg +11 -0
  92. package/src/components/JogPanel.tsx +18 -28
  93. package/src/components/ams/AmsProvider.tsx +10 -0
  94. package/src/components/ams/AssetDetailView.tsx +1 -1
  95. package/src/components/ams/AssetEditDialog.tsx +25 -10
  96. package/src/components/ams/AssetRegistryTable.css +12 -0
  97. package/src/components/ams/AssetRegistryTable.tsx +68 -12
  98. package/src/components/forms/FormRow.tsx +6 -6
  99. package/src/components/forms/FormSection.tsx +6 -6
  100. package/src/components/forms/forms.css +18 -18
  101. package/src/components/tis/ConfigurationDialog.tsx +128 -0
  102. package/src/components/tis/ResultHistoryTable.tsx +2 -2
  103. package/src/components/tis/TestDataView.tsx +83 -1
  104. package/src/components/tis/TestSetupForm.tsx +167 -10
  105. package/src/components/tis/TisProvider.tsx +53 -0
  106. package/src/components/tis-editor/TisConfigEditor.css +20 -0
  107. package/src/components/tis-editor/editor/ConfigurationsEditor.tsx +242 -0
  108. package/src/components/tis-editor/editor/MethodFormEditor.tsx +4 -0
  109. package/src/components/tis-editor/types.ts +14 -0
  110. package/src/components/tis-editor/validation.ts +29 -0
  111. package/src/themes/adc-dark/_extensions.scss +1 -0
  112. package/src/themes/theme-base/components/panel/_fieldset.scss +2 -2
@@ -1,32 +1,32 @@
1
- /*
2
- * Copyright (C) 2025 Automated Design Corp. All Rights Reserved.
3
- * Created Date: 2025-08-28 11:28:14
4
- * -----
5
- * Last Modified: 2025-08-28 11:39:53
6
- * -----
7
- *
8
- */
9
-
10
- import type { SVGProps } from "react";
11
-
12
- export const SvgAxisZ = (props: SVGProps<SVGSVGElement>) => (
13
- <svg
14
- xmlns="http://www.w3.org/2000/svg"
15
- width="24"
16
- height="24"
17
- viewBox="0 0 24 24"
18
- fill="none"
19
- stroke="currentColor"
20
- strokeWidth="2"
21
- strokeLinecap="round"
22
- strokeLinejoin="round"
23
- {...props}
24
- >
25
- {/* Bi-directional vertical arrow */}
26
- <path d="M18 2v20M15 5l3-3 3 3M15 19l3 3 3-3" />
27
- {/* Letter Z */}
28
- <path d="M1 4h10l-10 15h10" />
29
- </svg>
30
- );
31
-
1
+ /*
2
+ * Copyright (C) 2025 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2025-08-28 11:28:14
4
+ * -----
5
+ * Last Modified: 2025-08-28 11:39:53
6
+ * -----
7
+ *
8
+ */
9
+
10
+ import type { SVGProps } from "react";
11
+
12
+ export const SvgAxisZ = (props: SVGProps<SVGSVGElement>) => (
13
+ <svg
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ width="24"
16
+ height="24"
17
+ viewBox="0 0 24 24"
18
+ fill="none"
19
+ stroke="currentColor"
20
+ strokeWidth="2"
21
+ strokeLinecap="round"
22
+ strokeLinejoin="round"
23
+ {...props}
24
+ >
25
+ {/* Bi-directional vertical arrow */}
26
+ <path d="M18 4v16M14 8l4-4 4 4M14 16l4 4 4-4" />
27
+ {/* Larger Letter Z */}
28
+ <path d="M2 10h6l-6 6h6" />
29
+ </svg>
30
+ );
31
+
32
32
  export default SvgAxisZ;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogXNeg = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Triangle pointing left (X negative) */}
24
+ <path d="M10 6 3 12 10 18Z" fill="currentColor" />
25
+ {/* Letter X */}
26
+ <path d="M14 6l8 12M22 6l-8 12" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogXNeg;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogXPos = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Letter X */}
24
+ <path d="M2 6l8 12M10 6l-8 12" />
25
+ {/* Triangle pointing right (X positive) */}
26
+ <path d="M14 6 21 12 14 18Z" fill="currentColor" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogXPos;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogYPos = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Triangle pointing toward the upper-right corner (Y positive, into the mill) */}
24
+ <path d="M21 3 21 11 13 3Z" fill="currentColor" />
25
+ {/* Letter Y (lower-left) */}
26
+ <path d="M4 12l3 4 3-4M7 16v5" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogYPos;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogYNeg = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Letter Y (upper-right) */}
24
+ <path d="M20 3l-3 4-3-4M17 7v5" />
25
+ {/* Triangle pointing toward the lower-left corner (Y negative, out of the mill) */}
26
+ <path d="M3 21 3 13 11 21Z" fill="currentColor" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogYNeg;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogZNeg = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Letter Z */}
24
+ <path d="M6 2h12L6 10h12" />
25
+ {/* Triangle pointing down (Z negative) */}
26
+ <path d="M5 14h14l-7 7Z" fill="currentColor" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogZNeg;
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const SvgJogZPos = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ width="24"
14
+ height="24"
15
+ viewBox="0 0 24 24"
16
+ fill="none"
17
+ stroke="currentColor"
18
+ strokeWidth="2"
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ {...props}
22
+ >
23
+ {/* Triangle pointing up (Z positive) */}
24
+ <path d="M5 10 12 3 19 10Z" fill="currentColor" />
25
+ {/* Letter Z */}
26
+ <path d="M6 14h12L6 22h12" />
27
+ </svg>
28
+ );
29
+
30
+ export default SvgJogZPos;
@@ -0,0 +1,14 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export const Off = (props: SVGProps<SVGSVGElement>) => (
4
+ <svg
5
+ viewBox="0 0 354.487 354.487"
6
+ fill="currentColor"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ {...props}
9
+ >
10
+ <path d="M177.241,0C79.504,0,0,79.51,0,177.241c0,97.736,79.51,177.246,177.241,177.246c97.731,0,177.246-79.516,177.246-177.246 C354.487,79.504,274.979,0,177.241,0z M177.241,311.444c-73.994,0-134.198-60.203-134.198-134.203 c0-73.995,60.204-134.199,134.198-134.199c74,0,134.204,60.204,134.204,134.199C311.445,251.241,251.241,311.444,177.241,311.444z" />
11
+ </svg>
12
+ );
13
+
14
+ export default Off;
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2026-06-02
4
+ * -----
5
+ *
6
+ */
7
+
8
+ import type { SVGProps } from "react";
9
+
10
+ export const On = (props: SVGProps<SVGSVGElement>) => (
11
+ <svg
12
+ viewBox="0 0 72 72"
13
+ fill="none"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ {...props}
16
+ >
17
+ <path
18
+ d="M36 16L36 56"
19
+ stroke="currentColor"
20
+ strokeLinecap="round"
21
+ strokeWidth={3.6}
22
+ />
23
+ </svg>
24
+ );
25
+
26
+ export default On;
@@ -3,6 +3,12 @@ export { default as Distance } from "./Distance";
3
3
  export { default as JogLong } from "./JogLong";
4
4
  export { default as JogMedium } from "./JogMedium";
5
5
  export { default as JogShort } from "./JogShort";
6
+ export { default as JogXPos } from "./JogXPos";
7
+ export { default as JogXNeg } from "./JogXNeg";
8
+ export { default as JogYPos } from "./JogYPos";
9
+ export { default as JogYNeg } from "./JogYNeg";
10
+ export { default as JogZPos } from "./JogZPos";
11
+ export { default as JogZNeg } from "./JogZNeg";
6
12
  export { default as PythonLogo } from "./PythonLogo";
7
13
  export { default as Rotation3D } from "./Rotation3D";
8
14
  export { default as RotationCcw } from "./RotationCcw";
@@ -0,0 +1,2 @@
1
+ <svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg"
2
+ xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 354.487 354.487" xml:space="preserve"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <g> <path d="M177.241,0C79.504,0,0,79.51,0,177.241c0,97.736,79.51,177.246,177.241,177.246c97.731,0,177.246-79.516,177.246-177.246 C354.487,79.504,274.979,0,177.241,0z M177.241,311.444c-73.994,0-134.198-60.203-134.198-134.203 c0-73.995,60.204-134.199,134.198-134.199c74,0,134.204,60.204,134.204,134.199C311.445,251.241,251.241,311.444,177.241,311.444z"></path> </g> </g></svg>
@@ -0,0 +1,11 @@
1
+ <svg viewBox="0 0 72 72" id="emoji" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
3
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" stroke="#CCCCCC"
4
+ stroke-width="0.43200000000000005"></g>
5
+ <g id="SVGRepo_iconCarrier">
6
+ <g id="color"></g>
7
+ <g id="line">
8
+ <path stroke="#000000" stroke-linecap="round" stroke-width="3.6" d="M36 16L36 56"></path>
9
+ </g>
10
+ </g>
11
+ </svg>
@@ -19,6 +19,7 @@ import { Distance, JogShort, JogMedium, JogLong } from '../assets';
19
19
  import { Speed, SpeedSlow, SpeedMedium, SpeedFast } from '../assets';
20
20
  import { RotationCcwA, RotationCcwB, RotationCcwC } from '../assets';
21
21
  import { RotationCwA, RotationCwB, RotationCwC } from '../assets';
22
+ import { JogXPos, JogXNeg, JogYPos, JogYNeg, JogZPos, JogZNeg } from '../assets';
22
23
 
23
24
  /**
24
25
  * Enumerates the source button or action when an event occurs.
@@ -125,9 +126,9 @@ interface JogPanelState {
125
126
  * A default jog button configuration for linear 3D motion.
126
127
  */
127
128
  export const DefaultLinearJogButtons : (JogPanelButtonDefinition | undefined)[][] = [
128
- [{ icon: "pi pi-arrow-up-left", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, undefined],
129
+ [undefined, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, { icon: "pi pi-arrow-down-left", action: JogPanelAction.yNegative, alt: "Y Negative" }],
129
130
  [{ icon: "pi pi-arrow-left", action: JogPanelAction.xNegative, alt: "X Negative" }, undefined, { icon: "pi pi-arrow-right", action: JogPanelAction.xPositive, alt: "X Positive" }],
130
- [undefined, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, { icon: "pi pi-arrow-down-right", action: JogPanelAction.yNegative, alt: "Y Negative" }],
131
+ [{ icon: "pi pi-arrow-up-right", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, undefined],
131
132
  ];
132
133
 
133
134
  /**
@@ -156,9 +157,9 @@ export const DefaultRotationJogButtons : (JogPanelButtonDefinition | undefined)[
156
157
  * Example:
157
158
  * ```
158
159
  * export const kDefaultButtonDefinitions : (JogPanelButtonDefinition | undefined)[][] = [
159
- * [{ icon: "pi pi-arrow-up-left", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, undefined],
160
+ * [undefined, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, { icon: "pi pi-arrow-down-left", action: JogPanelAction.yNegative, alt: "Y Negative" }],
160
161
  * [{ icon: "pi pi-arrow-left", action: JogPanelAction.xNegative, alt: "X Negative" }, undefined, { icon: "pi pi-arrow-right", action: JogPanelAction.xPositive, alt: "X Positive" }],
161
- * [undefined, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, { icon: "pi pi-arrow-down-right", action: JogPanelAction.yNegative, alt: "Y Negative" }],
162
+ * [{ icon: "pi pi-arrow-up-right", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, undefined],
162
163
  * ];
163
164
  * ```
164
165
  *
@@ -249,22 +250,22 @@ export class JogPanel extends React.Component<JogPanelProps, JogPanelState> {
249
250
  return <i/>
250
251
  }
251
252
  else if (action == JogPanelAction.xNegative) {
252
- return <i className="pi pi-arrow-left" />
253
+ return <JogXNeg />
253
254
  }
254
255
  else if (action == JogPanelAction.xPositive) {
255
- return <i className="pi pi-arrow-right" />
256
+ return <JogXPos />
256
257
  }
257
258
  else if (action == JogPanelAction.yNegative) {
258
- return <i className="pi pi-arrow-up-left" />
259
+ return <JogYNeg />
259
260
  }
260
261
  else if (action == JogPanelAction.yPositive) {
261
- return <i className="pi pi-arrow-down-right" />
262
+ return <JogYPos />
262
263
  }
263
264
  else if (action == JogPanelAction.zNegative) {
264
- return <i className="pi pi-up" />
265
+ return <JogZNeg />
265
266
  }
266
267
  else if (action == JogPanelAction.zPositive) {
267
- return <i className="pi pi-down" />
268
+ return <JogZPos />
268
269
  }
269
270
  else if (action == JogPanelAction.aNegative) {
270
271
  return <RotationCcwA />
@@ -299,24 +300,13 @@ export class JogPanel extends React.Component<JogPanelProps, JogPanelState> {
299
300
 
300
301
  const action = this.props.buttonDefinitions[row][col]?.action;
301
302
 
302
- if (action !== undefined && action < JogPanelAction.aPositive ) {
303
- return <Button
304
- key={`${row}-${col}`}
305
- icon={this.props.buttonDefinitions[row][col]?.icon}
306
- tooltip={this.props.buttonDefinitions[row][col]?.alt}
307
- onClick={() => this.handleClicked(action)}
308
- className="button-item"
309
- />
310
- }
311
- else {
312
- return <Button
313
- key={`${row}-${col}`}
314
- tooltip={this.props.buttonDefinitions[row][col]?.alt}
315
- onClick={() => this.handleClicked(action)}
316
- className="button-item"
317
- icon={() => this.actionToIcon(action)}/>
318
- }
319
-
303
+ return <Button
304
+ key={`${row}-${col}`}
305
+ tooltip={this.props.buttonDefinitions[row][col]?.alt}
306
+ onClick={() => this.handleClicked(action)}
307
+ className="button-item"
308
+ icon={() => this.actionToIcon(action)}/>
309
+
320
310
  }
321
311
  else {
322
312
  return <Button icon="pi" key={`${row}-${col}`} disabled={true} className="button-item empty-slot" />
@@ -55,6 +55,16 @@ export interface AmsRole {
55
55
  * feeding NI bridge channel calibration). Empty for purely
56
56
  * test-method-driven roles. */
57
57
  used_by_modules: string[];
58
+ /** Optional per-field seed values declared on the asset_ref's
59
+ * `defaults` map. AIS uses these to pre-fill nameplate inputs when
60
+ * the operator creates a new asset for this role — the operator
61
+ * confirms or edits, the values are never enforced. Absent when no
62
+ * asset_ref declared defaults (the common case, since built-in
63
+ * load_cell etc. didn't support defaults before the feature
64
+ * landed). Keys are field names from the asset_type's schema;
65
+ * values are untyped JSON (numbers, strings, booleans) matching
66
+ * the field's declared `type`. */
67
+ defaults?: Record<string, any>;
58
68
  }
59
69
  export type AmsRoleRegistry = { [assetType: string]: AmsRole[] };
60
70
 
@@ -235,7 +235,7 @@ export const AssetDetailView: React.FC = () => {
235
235
  <Button label="Edit" icon="pi pi-pencil"
236
236
  outlined
237
237
  onClick={() => setEditDialogOpen(true)}
238
- tooltip="Edit role, nameplate, and per-axis values. Type, serial, and install date are immutable."
238
+ tooltip="Edit serial, role, nameplate, and per-axis values. Type and install date are immutable."
239
239
  tooltipOptions={{ position: 'left' }}
240
240
  />
241
241
  {asset.status === 'active' && (
@@ -9,12 +9,13 @@
9
9
  * `asset.current_calibration_id` is non-null. Posts via
10
10
  * `ams.update_calibration` (server enforces "current only"). Tab
11
11
  * is hidden entirely for assets that never had a calibration —
12
- * "+ Calibration" on <AssetDetailView> is the path to add one.
12
+ * "Calibration" on <AssetDetailView> is the path to add one.
13
13
  *
14
- * The server treats `asset_id`, `asset_type`, `serial`, and
15
- * `install_date` as immutable; the read-only header strip mirrors
16
- * that. Status stays out of this dialog because the Retire button on
17
- * <AssetDetailView> already owns that transition.
14
+ * The server treats `asset_id`, `asset_type`, and `install_date` as
15
+ * immutable; the read-only header strip mirrors that. `serial` is
16
+ * editable (free-form traceability metadata) so a mis-keyed serial can
17
+ * be corrected here. Status stays out of this dialog because the Retire
18
+ * button on <AssetDetailView> already owns that transition.
18
19
  *
19
20
  * Save commits the Asset tab first, then (if a calibration is loaded)
20
21
  * the Calibration tab. Either failure surfaces inline and stops; the
@@ -175,6 +176,7 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
175
176
  // effect below.
176
177
  const [roleSelection, setRoleSelection] = useState<string>('');
177
178
  const [location, setLocation] = useState<string>('');
179
+ const [serial, setSerial] = useState<string>('');
178
180
  const [customFields, setCustomFields] =
179
181
  useState<Record<string, string>>({});
180
182
  const [subLocationFields, setSubLocationFields] =
@@ -215,6 +217,9 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
215
217
  setSubmitting(false);
216
218
  setActiveTab(0);
217
219
 
220
+ // Serial: free-form, editable so operators can correct a typo.
221
+ setSerial(typeof asset.serial === 'string' ? asset.serial : '');
222
+
218
223
  // Role: pick the dropdown option when the asset's location
219
224
  // matches a declared role; otherwise route into ROLE_OTHER so
220
225
  // the operator can keep the current custom string.
@@ -365,6 +370,7 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
365
370
  const payload: any = {
366
371
  asset_id: asset.asset_id,
367
372
  location,
373
+ serial,
368
374
  custom,
369
375
  };
370
376
  if (subLocations) payload.sub_locations = subLocations;
@@ -481,10 +487,11 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
481
487
  </>
482
488
  }
483
489
  >
484
- {/* Read-only context strip — type, serial, install_date.
485
- The server treats these as immutable; surfacing them
486
- here keeps the operator oriented without inviting an
487
- edit that would silently no-op. */}
490
+ {/* Read-only context strip — type, install_date. The server
491
+ treats these as immutable; surfacing them here keeps the
492
+ operator oriented without inviting an edit that would
493
+ silently no-op. Serial moved into the editable Asset tab
494
+ below so operators can correct a mis-entered serial. */}
488
495
  <div style={{ display: 'grid',
489
496
  gridTemplateColumns: 'auto 1fr',
490
497
  gap: '0.25rem 1rem',
@@ -492,7 +499,6 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
492
499
  color: 'var(--text-secondary-color)',
493
500
  marginBottom: '0.75rem' }}>
494
501
  <span>Type</span> <span>{typeLabel}</span>
495
- <span>Serial</span> <span>{asset.serial || <em>(none)</em>}</span>
496
502
  {asset.install_date && (
497
503
  <>
498
504
  <span>Installed</span>
@@ -507,6 +513,15 @@ export const AssetEditDialog: React.FC<AssetEditDialogProps> = ({
507
513
  gridTemplateColumns: 'auto 1fr',
508
514
  gap: '0.5rem 1rem',
509
515
  alignItems: 'center' }}>
516
+ {/* Serial — free-form manufacturer metadata. Editable so
517
+ a mis-entered serial can be corrected after the fact. */}
518
+ <label>Serial</label>
519
+ <InputText
520
+ value={serial}
521
+ placeholder="(none)"
522
+ onChange={(e) => setSerial(e.target.value)}
523
+ />
524
+
510
525
  {/* Role field. Asset types referenced only by_id_field
511
526
  (no by_location asset_ref) come back with an empty
512
527
  role list — we hide the row entirely so the operator
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Touch-friendly row sizing for the AMS asset list.
3
+ *
4
+ * The shop-floor HMI is a touchscreen and operators were mis-tapping
5
+ * the dense default DataTable rows. Adding vertical padding to each
6
+ * body cell enlarges the per-row touch target without changing the
7
+ * column layout or text size.
8
+ */
9
+ .ams-asset-table .p-datatable-tbody > tr > td {
10
+ padding-top: 0.9rem;
11
+ padding-bottom: 0.9rem;
12
+ }