@olenbetong/synergi-react 2.1.2 → 2.3.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.
Files changed (197) hide show
  1. package/dist/esm/ob.react.css +1189 -27
  2. package/dist/esm/ob.react.js +45612 -708
  3. package/dist/esm/ob.react.min.css +24 -1
  4. package/dist/esm/ob.react.min.css.map +3 -3
  5. package/dist/esm/ob.react.min.js +253 -1
  6. package/dist/esm/ob.react.min.js.map +4 -4
  7. package/dist/iife/ob.react.css +1189 -27
  8. package/dist/iife/ob.react.js +45625 -720
  9. package/dist/iife/ob.react.min.css +24 -1
  10. package/dist/iife/ob.react.min.css.map +3 -3
  11. package/dist/iife/ob.react.min.js +253 -1
  12. package/dist/iife/ob.react.min.js.map +4 -4
  13. package/dist/styles/styles.css +1 -1
  14. package/dist/styles/styles.css.map +1 -1
  15. package/{src → es/components}/ColorCard/index.css +10 -6
  16. package/es/{DateNavigator → components/DateNavigator}/index.js +2 -0
  17. package/es/components/FilePond.d.ts +44 -0
  18. package/es/components/FilePond.js +205 -0
  19. package/es/{PageBanner → components/PageBanner}/index.js +0 -1
  20. package/es/{Sidebar → components/Sidebar}/index.d.ts +2 -2
  21. package/es/{SplitContainer → components/SplitContainer}/index.js +3 -3
  22. package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.css +18 -16
  23. package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.js +4 -2
  24. package/es/elements/ElementDamage/DamageFormButtons.d.ts +9 -0
  25. package/es/elements/ElementDamage/DamageFormButtons.js +7 -0
  26. package/es/elements/ElementDamage/DescriptionInput.d.ts +14 -0
  27. package/es/elements/ElementDamage/DescriptionInput.js +44 -0
  28. package/es/elements/ElementDamage/DuplicateDamage/DesktopView.d.ts +7 -0
  29. package/es/elements/ElementDamage/DuplicateDamage/DesktopView.js +16 -0
  30. package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.d.ts +10 -0
  31. package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.js +12 -0
  32. package/es/elements/ElementDamage/DuplicateDamage/PhoneView.d.ts +6 -0
  33. package/es/elements/ElementDamage/DuplicateDamage/PhoneView.js +8 -0
  34. package/es/elements/ElementDamage/DuplicateDamage/index.d.ts +36 -0
  35. package/es/elements/ElementDamage/DuplicateDamage/index.js +40 -0
  36. package/es/elements/ElementDamage/ElementNumberTextField.d.ts +10 -0
  37. package/es/elements/ElementDamage/ElementNumberTextField.js +18 -0
  38. package/es/elements/ElementDamage/HiddenDamageFields.d.ts +6 -0
  39. package/es/elements/ElementDamage/HiddenDamageFields.js +4 -0
  40. package/es/elements/ElementDamage/RegisterFix.d.ts +14 -0
  41. package/es/elements/ElementDamage/RegisterFix.js +45 -0
  42. package/es/elements/ElementDamage/SubmitButtons.d.ts +20 -0
  43. package/es/elements/ElementDamage/SubmitButtons.js +7 -0
  44. package/es/elements/ElementDamage/TransportElementSelect.d.ts +7 -0
  45. package/es/elements/ElementDamage/TransportElementSelect.js +16 -0
  46. package/es/elements/ElementDamage/index.css +3 -0
  47. package/es/elements/ElementLookup.d.ts +20 -0
  48. package/es/elements/ElementLookup.js +30 -0
  49. package/es/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.d.ts +2 -0
  50. package/es/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.js +5 -0
  51. package/es/elements/ElementLookupDialog/BarcodeScanner/Error.d.ts +4 -0
  52. package/es/elements/ElementLookupDialog/BarcodeScanner/Error.js +33 -0
  53. package/es/elements/ElementLookupDialog/BarcodeScanner/index.d.ts +10 -0
  54. package/es/elements/ElementLookupDialog/BarcodeScanner/index.js +37 -0
  55. package/es/elements/ElementLookupDialog/BarcodeScanner/useScanner.d.ts +16 -0
  56. package/es/elements/ElementLookupDialog/BarcodeScanner/useScanner.js +135 -0
  57. package/es/elements/ElementLookupDialog/HIDScanner/index.css +17 -0
  58. package/es/elements/ElementLookupDialog/HIDScanner/index.d.ts +4 -0
  59. package/es/elements/ElementLookupDialog/HIDScanner/index.js +36 -0
  60. package/es/elements/ElementLookupDialog/HIDScanner/useHIDScanner.d.ts +1 -0
  61. package/es/elements/ElementLookupDialog/HIDScanner/useHIDScanner.js +27 -0
  62. package/es/elements/ElementLookupDialog/Manual/ManualForm.d.ts +12 -0
  63. package/es/elements/ElementLookupDialog/Manual/ManualForm.js +48 -0
  64. package/es/elements/ElementLookupDialog/getElement.d.ts +23 -0
  65. package/es/elements/ElementLookupDialog/getElement.js +55 -0
  66. package/es/elements/ElementLookupDialog/index.d.ts +24 -0
  67. package/es/elements/ElementLookupDialog/index.js +97 -0
  68. package/es/elements/ElementLookupDialog/utils/Giai.d.ts +52 -0
  69. package/es/elements/ElementLookupDialog/utils/Giai.js +158 -0
  70. package/es/elements/ElementLookupDialog/utils/beep.d.ts +10 -0
  71. package/es/elements/ElementLookupDialog/utils/beep.js +20 -0
  72. package/es/elements/ProjectSelect.d.ts +23 -0
  73. package/es/elements/ProjectSelect.js +42 -0
  74. package/es/elements/data/dsAttachments.d.ts +15 -0
  75. package/es/elements/data/dsAttachments.js +85 -0
  76. package/es/elements/data/dsCurrentAttachment.d.ts +13 -0
  77. package/es/elements/data/dsCurrentAttachment.js +75 -0
  78. package/es/elements/data/dsDamages.d.ts +25 -0
  79. package/es/elements/data/dsDamages.js +127 -0
  80. package/es/elements/data/dsDamagesDuplicateCheck.d.ts +2 -0
  81. package/es/elements/data/dsDamagesDuplicateCheck.js +3 -0
  82. package/es/elements/data/dsElements.d.ts +8 -0
  83. package/es/elements/data/dsElements.js +47 -0
  84. package/es/elements/data/dsProjects.d.ts +8 -0
  85. package/es/elements/data/dsProjects.js +51 -0
  86. package/es/elements/data/dsReportProjects.d.ts +2 -0
  87. package/es/elements/data/dsReportProjects.js +3 -0
  88. package/es/elements/data/dsTransportElements.d.ts +10 -0
  89. package/es/elements/data/dsTransportElements.js +57 -0
  90. package/es/elements/data/index.d.ts +11 -0
  91. package/es/elements/data/index.js +11 -0
  92. package/es/elements/data/procApproveDamage.d.ts +2 -0
  93. package/es/elements/data/procApproveDamage.js +18 -0
  94. package/es/elements/data/procDeleteAttachment.d.ts +2 -0
  95. package/es/elements/data/procDeleteAttachment.js +18 -0
  96. package/es/elements/data/procDeleteDamage.d.ts +2 -0
  97. package/es/elements/data/procDeleteDamage.js +18 -0
  98. package/es/elements/data/procRemoveDamageFix.d.ts +2 -0
  99. package/es/elements/data/procRemoveDamageFix.js +18 -0
  100. package/es/elements/data/procRestoreAttachments.d.ts +2 -0
  101. package/es/elements/data/procRestoreAttachments.js +18 -0
  102. package/es/elements/index.d.ts +9 -0
  103. package/es/elements/index.js +9 -0
  104. package/es/index.css +1 -1
  105. package/es/index.d.ts +12 -11
  106. package/es/index.js +12 -11
  107. package/package.json +16 -40
  108. package/src/{Checkbox → components/Checkbox}/index.tsx +1 -1
  109. package/{es → src/components}/ColorCard/index.css +10 -6
  110. package/src/{DateNavigator → components/DateNavigator}/index.tsx +2 -0
  111. package/src/components/FilePond.tsx +312 -0
  112. package/src/{LinkedCardList → components/LinkedCardList}/index.scss +1 -1
  113. package/src/{PageBanner → components/PageBanner}/index.scss +1 -1
  114. package/src/{PageBanner → components/PageBanner}/index.tsx +0 -1
  115. package/src/{ProgressBar → components/ProgressBar}/index.scss +1 -1
  116. package/src/{Sidebar → components/Sidebar}/index.tsx +3 -2
  117. package/src/{SplitContainer → components/SplitContainer}/index.tsx +1 -1
  118. package/src/{ValueToggleGroup → components/ValueToggleGroup}/index.css +18 -16
  119. package/src/{ValueToggleGroup → components/ValueToggleGroup}/index.tsx +2 -1
  120. package/src/elements/ElementDamage/DamageFormButtons.tsx +35 -0
  121. package/src/elements/ElementDamage/DescriptionInput.tsx +111 -0
  122. package/src/elements/ElementDamage/DuplicateDamage/DesktopView.tsx +75 -0
  123. package/src/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.tsx +65 -0
  124. package/src/elements/ElementDamage/DuplicateDamage/PhoneView.tsx +42 -0
  125. package/src/elements/ElementDamage/DuplicateDamage/index.tsx +105 -0
  126. package/src/elements/ElementDamage/ElementNumberTextField.tsx +41 -0
  127. package/src/elements/ElementDamage/HiddenDamageFields.tsx +13 -0
  128. package/src/elements/ElementDamage/RegisterFix.tsx +100 -0
  129. package/src/elements/ElementDamage/SubmitButtons.tsx +40 -0
  130. package/src/elements/ElementDamage/TransportElementSelect.tsx +52 -0
  131. package/src/elements/ElementDamage/index.css +3 -0
  132. package/src/elements/ElementLookup.tsx +90 -0
  133. package/src/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.tsx +12 -0
  134. package/src/elements/ElementLookupDialog/BarcodeScanner/Error.tsx +46 -0
  135. package/src/elements/ElementLookupDialog/BarcodeScanner/index.tsx +75 -0
  136. package/src/elements/ElementLookupDialog/BarcodeScanner/useScanner.ts +170 -0
  137. package/src/elements/ElementLookupDialog/HIDScanner/index.css +17 -0
  138. package/src/elements/ElementLookupDialog/HIDScanner/index.tsx +67 -0
  139. package/src/elements/ElementLookupDialog/HIDScanner/useHIDScanner.ts +30 -0
  140. package/src/elements/ElementLookupDialog/Manual/ManualForm.tsx +110 -0
  141. package/src/elements/ElementLookupDialog/getElement.ts +89 -0
  142. package/src/elements/ElementLookupDialog/index.tsx +211 -0
  143. package/src/elements/ElementLookupDialog/utils/Giai.ts +209 -0
  144. package/src/elements/ElementLookupDialog/utils/beep.ts +35 -0
  145. package/src/elements/ProjectSelect.tsx +128 -0
  146. package/src/elements/data/dsAttachments.ts +101 -0
  147. package/src/elements/data/dsCurrentAttachment.ts +89 -0
  148. package/src/elements/data/dsDamages.ts +166 -0
  149. package/src/elements/data/dsDamagesDuplicateCheck.ts +4 -0
  150. package/src/elements/data/dsElements.ts +56 -0
  151. package/src/elements/data/dsProjects.ts +60 -0
  152. package/src/elements/data/dsReportProjects.ts +4 -0
  153. package/src/elements/data/dsTransportElements.ts +68 -0
  154. package/src/elements/data/index.ts +11 -0
  155. package/src/elements/data/procApproveDamage.ts +19 -0
  156. package/src/elements/data/procDeleteAttachment.ts +19 -0
  157. package/src/elements/data/procDeleteDamage.ts +19 -0
  158. package/src/elements/data/procRemoveDamageFix.ts +19 -0
  159. package/src/elements/data/procRestoreAttachments.ts +19 -0
  160. package/src/elements/index.ts +9 -0
  161. package/src/index.scss +10 -10
  162. package/src/index.ts +13 -13
  163. /package/es/{Checkbox → components/Checkbox}/index.css +0 -0
  164. /package/es/{Checkbox → components/Checkbox}/index.d.ts +0 -0
  165. /package/es/{Checkbox → components/Checkbox}/index.js +0 -0
  166. /package/es/{ColorCard → components/ColorCard}/index.d.ts +0 -0
  167. /package/es/{ColorCard → components/ColorCard}/index.js +0 -0
  168. /package/es/{DateNavigator → components/DateNavigator}/index.css +0 -0
  169. /package/es/{DateNavigator → components/DateNavigator}/index.d.ts +0 -0
  170. /package/es/{LinkedCardList → components/LinkedCardList}/index.css +0 -0
  171. /package/es/{LinkedCardList → components/LinkedCardList}/index.d.ts +0 -0
  172. /package/es/{LinkedCardList → components/LinkedCardList}/index.js +0 -0
  173. /package/es/{PageBanner → components/PageBanner}/index.css +0 -0
  174. /package/es/{PageBanner → components/PageBanner}/index.d.ts +0 -0
  175. /package/es/{Portal → components/Portal}/index.d.ts +0 -0
  176. /package/es/{Portal → components/Portal}/index.js +0 -0
  177. /package/es/{ProgressBar → components/ProgressBar}/index.css +0 -0
  178. /package/es/{ProgressBar → components/ProgressBar}/index.d.ts +0 -0
  179. /package/es/{ProgressBar → components/ProgressBar}/index.js +0 -0
  180. /package/es/{Sidebar → components/Sidebar}/index.css +0 -0
  181. /package/es/{Sidebar → components/Sidebar}/index.js +0 -0
  182. /package/es/{Spinner → components/Spinner}/index.css +0 -0
  183. /package/es/{Spinner → components/Spinner}/index.d.ts +0 -0
  184. /package/es/{Spinner → components/Spinner}/index.js +0 -0
  185. /package/es/{SplitContainer → components/SplitContainer}/index.css +0 -0
  186. /package/es/{SplitContainer → components/SplitContainer}/index.d.ts +0 -0
  187. /package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.d.ts +0 -0
  188. /package/src/{Checkbox → components/Checkbox}/index.scss +0 -0
  189. /package/src/{ColorCard → components/ColorCard}/index.tsx +0 -0
  190. /package/src/{DateNavigator → components/DateNavigator}/index.css +0 -0
  191. /package/src/{LinkedCardList → components/LinkedCardList}/index.tsx +0 -0
  192. /package/src/{Portal → components/Portal}/index.tsx +0 -0
  193. /package/src/{ProgressBar → components/ProgressBar}/index.tsx +0 -0
  194. /package/src/{Sidebar → components/Sidebar}/index.scss +0 -0
  195. /package/src/{Spinner → components/Spinner}/index.css +0 -0
  196. /package/src/{Spinner → components/Spinner}/index.tsx +0 -0
  197. /package/src/{SplitContainer → components/SplitContainer}/index.scss +0 -0
@@ -0,0 +1,9 @@
1
+ export * from "./data/index.js";
2
+ export * from "./ElementDamage/DescriptionInput.js";
3
+ export * from "./ElementDamage/DuplicateDamage/index.js";
4
+ export * from "./ElementDamage/ElementNumberTextField.js";
5
+ export * from "./ElementDamage/HiddenDamageFields.js";
6
+ export * from "./ElementDamage/RegisterFix.js";
7
+ export * from "./ElementDamage/SubmitButtons.js";
8
+ export * from "./ElementLookup.js";
9
+ export * from "./ElementLookupDialog/index.js";
@@ -0,0 +1,9 @@
1
+ export * from "./data/index.js";
2
+ export * from "./ElementDamage/DescriptionInput.js";
3
+ export * from "./ElementDamage/DuplicateDamage/index.js";
4
+ export * from "./ElementDamage/ElementNumberTextField.js";
5
+ export * from "./ElementDamage/HiddenDamageFields.js";
6
+ export * from "./ElementDamage/RegisterFix.js";
7
+ export * from "./ElementDamage/SubmitButtons.js";
8
+ export * from "./ElementLookup.js";
9
+ export * from "./ElementLookupDialog/index.js";
package/es/index.css CHANGED
@@ -1 +1 @@
1
- .ObCheckbox-root{--check-width: 2rem;--bg-color: var(--brand-dark, rgba(42, 65, 50, 0.5));--bg-color-hover: var(--brand-primary, rgba(42, 65, 50, 0.8));--bg-color-selected: var(--brand-light);display:inline-block;height:var(--check-width);margin-bottom:0}.ObCheckbox-root:focus-within .ObCheckbox-box{border:.1rem solid #000}.ObCheckbox-root.Ob-disabled{--bg-color: rgba(150, 150, 150, 0.5);--bg-color-hover: var(--bg-color)}.ObCheckbox-box{position:relative;background:var(--bg-color);transition:background 300ms ease;overflow:hidden;border-radius:calc(var(--check-width)/15);height:var(--check-width);width:var(--check-width)}.ObCheckbox-box:hover{background:var(--bg-color-hover)}.ObCheckbox-label{position:relative;margin-bottom:0;overflow:hidden}.ObCheckbox-label:focus{outline:none}.ObCheckbox-mark{color:#fff;display:inline-block;font-size:calc(var(--check-width)*.4);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transition:all 300ms ease-in-out;transition-delay:0ms;transform:translate(-50%, -50%) scale(6)}.ObCheckbox-input{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.ObCheckbox-input:focus{outline:none}.ObCheckbox-label{display:flex;gap:.5rem;align-items:center;overflow:visible}.ObCheckbox-root.Ob-reverse .ObCheckbox-label{flex-direction:row-reverse}.ObCheckbox-input:checked:not(:disabled)+.ObCheckbox-label .ObCheckbox-box{animation:animOn 600ms 1 forwards}.ObCheckbox-input:checked:not(:disabled)+.ObCheckbox-label .ObCheckbox-box{background:var(--bg-color-selected)}.ObCheckbox-input:checked+.ObCheckbox-label .ObCheckbox-box .ObCheckbox-mark{transform:translate(-50%, -50%) scale(1);transition-delay:200ms;opacity:1}.ObCheckbox-root.Ob-disabled .ObCheckbox-box{cursor:not-allowed}@keyframes animOn{40%{transform:scaleY(0.4) scaleX(2)}50%{transform:scaleY(1.2) scaleX(0.6)}60%{transform:scaleY(0.8) scaleX(1.4)}70%{transform:scaleY(1.1) scaleX(0.9)}100%{transform:scaleY(1) scaleX(1)}}.ObColorCard-root{--bg-color-border: black;--bg-color-main: white;--bg-size: 0.75rem;--card-color: rgb(0, 0, 0);display:flex;align-items:stretch;min-height:10rem;overflow:hidden;border-radius:.25rem;box-shadow:0 1px 12px rgba(0, 0, 0, 0.15),0 1px 6px rgba(0, 0, 0, 0.25);color:#666;background-image:linear-gradient(to right, var(--bg-color-border), var(--bg-color-border) var(--bg-size), var(--bg-color-main) var(--bg-size), var(--bg-color-main));font-family:"Variable Bahnschrift","Bahnschrift","Open Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;transition:all ease-in-out 300ms;cursor:pointer;&:nth-of-type(5n + 1){--bg-color-border: rgb(178, 108, 190)}&:nth-of-type(5n + 2){--bg-color-border: rgb(79, 164, 61)}&:nth-of-type(5n + 3){--bg-color-border: rgb(246, 170, 23)}&:nth-of-type(5n + 4){--bg-color-border: rgb(218, 93, 83)}&:nth-of-type(5n + 5){--bg-color-border: rgb(23, 162, 184)}&:hover,&:focus{--bg-color-main: #f5f5f5;box-shadow:0 3px 18px rgba(0, 0, 0, 0.15),0 3px 12px rgba(0, 0, 0, 0.25);text-decoration:none}}@media screen and (min-width: 48rem){.ObColorCard-root{font-size:1.2rem}}.ObColorCard-column{display:flex;flex:1 1 100%;flex-direction:column;justify-content:space-between;margin:1rem 0;padding:.5rem 1.5rem .5rem 1rem;overflow:hidden;text-overflow:ellipsis;&:first-child{margin-left:var(--bg-size, 0.75rem)}&.ObColorCard-minor{flex:0 0 4rem;border-right:1px solid #e3e3e3;transition:margin ease-in-out 300ms}}@media screen and (min-width: 48rem){&.ObColorCard-minor{flex:0 0 8rem}}.ObColorCard-detailLabel{color:dimgray;font-size:.8rem;text-transform:uppercase}.ObColorCard-detail{&:not(:last-child){margin-right:1.5rem}&.ObColorCard-primary,&.ObColorCard-primary .ObColorCard-detailValue{font-size:1.25rem;font-weight:300}&.ObColorCard-primary .ObColorCard-detailValue{color:unset}}@media screen and (min-width: 48rem){.ObColorCard-detail{font-size:1rem}}.ObColorCard-detailValue{color:#555}.ObColorCard-stepList{display:flex;flex-direction:column;gap:1rem}.ObColorCard-step{position:relative;text-box-trim:trim-both;display:flex;align-items:flex-start;gap:.5rem}.ObColorCard-step::before{flex:.6em 0 0;content:"";position:relative;top:.25em;width:.6em;height:.6em;background:white;border:2px solid var(--bg-color-border, #999);border-radius:50%;box-sizing:border-box;z-index:1}.ObColorCard-step:not(:last-child)::after{content:"";position:absolute;top:1em;left:calc(.3em - 1px);height:calc(100% - .95em + 1rem + .0625em);border-left:2px dotted #999;z-index:0}:root{--ob-datenavigator-height: 3rem}.ObDateNavigator-icon{display:inline-block;svg{width:.625em;position:relative;top:-1px}}.ObDateNavigator-root{background-color:hsl(220, 20%, 96%);background-color:var(--block-header-color-bg);display:flex;font-size:1rem;outline:none;&:focus-visible{outline:2px solid var(--brand-dark, #336699);outline-offset:2px}}.ObDateNavigator-arrow{display:flex;align-items:center;flex:0 0 var(--ob-datenavigator-height);justify-content:center;height:var(--ob-datenavigator-height);cursor:pointer;text-align:center;&:hover:not(:disabled){background-color:#e3e3e3;background-color:var(--block-header-button-hover)}&:disabled{cursor:not-allowed;color:rgba(0 0 0/0.2)}}.ObDateNavigator-arrowLeft{border-right:1px solid #ddd;order:1}.ObDateNavigator-arrowRight{border-left:1px solid #ddd;order:3}.ObDateNavigator-date{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;order:2;height:var(--ob-datenavigator-height);text-align:center}.ObDateNavigator-today{order:4;padding:0 1rem;height:var(--ob-datenavigator-height);display:flex;align-items:center;justify-content:center;font-size:.875rem;color:var(--brand-dark, #336699);text-transform:uppercase;cursor:pointer;text-wrap:nowrap;border-left:1px solid #ddd;&:hover:not(:disabled){background-color:var(--block-header-button-hover)}&:focus-visible{outline:2px solid var(--brand-dark, #336699);outline-offset:2px}}:root{--ob-linked-list-bullet-size: 0.7em;--ob-linked-list-line-width: 0.2em}.ObLinkedList-root{list-style-type:none;margin-left:0;padding-left:0}.ObLinkedList-item{display:flex;align-items:center;flex-direction:row}.ObLinkedList-leftColumn{flex:1 1 4em;font-size:.75em;padding:0 1em;text-align:center}.ObLinkedList-rightColumn{flex:1 1 100%;padding:1em 1em 1em 1.5em}.ObLinkedList-line{display:flex;align-self:stretch;flex:0 0 .2em;background:#fff;position:relative}.ObLinkedList-bullet{background:#fff;border:1px solid rgba(50,50,50,.25);border-radius:.55em;height:.7em;width:.7em;position:absolute;left:0;top:50%;transform:translate(calc(-1 * var(--ob-linked-list-bullet-size) / 2 + var(--ob-linked-list-line-width) / 2), -50%)}.ObLinkedList-card{display:block;background:#fff;border:1px solid;border-color:#e5e6e9 #dfe0e4 #d0d1d5;border-radius:.1875em;color:inherit;cursor:pointer;flex:100% 1 1;position:relative}.ObLinkedList-card::before{border-bottom:.5em solid rgba(0,0,0,0);border-right:1em solid #fff;border-top:.5em solid rgba(0,0,0,0);content:" ";filter:drop-shadow(-1px 0px 1px rgba(50, 50, 50, 0.2));height:1em;left:-1em;margin-top:-0.5em;position:absolute;top:50%;width:1em}.ObLinkedList-card:hover{background-color:hsl(220,20%,94%) !important;color:inherit;text-decoration:inherit}.ObLinkedList-card:hover::before{border-right-color:hsl(220,20%,94%) !important}.ObPageBanner-root{background-color:hsl(186,72%,24%);background-color:var(--brand-dark);box-shadow:0px 8px 8px rgba(0,0,0,.2);color:#fff}.ObPageBanner-root a{color:hsl(200,50%,80%)}.ObPageBanner-inner{display:flex;align-items:center;flex-direction:column}@media screen and (min-width: 768px){.ObPageBanner-inner{align-items:flex-start;flex-direction:row}}.ObPageBanner-plantTitle{font-size:2rem}@media screen and (min-width: 992px){.ObPageBanner-plantTitle{font-size:3rem}}.ObPageBanner-bannerImage{align-self:stretch;background-color:#ddd;display:inline-block;height:20vh;object-fit:cover;object-position:center center;width:100%}@media screen and (min-width: 576px){.ObPageBanner-bannerImage{align-self:center;margin:0;margin-right:1rem;border:.4rem solid #fff;border-radius:50%;height:150px;width:150px}}@media screen and (min-width: 992px){.ObPageBanner-bannerImage{height:250px;width:250px}}.ObPageBanner-bannerTitle{margin-bottom:1rem;margin-top:1rem;font-size:2rem}@media screen and (min-width: 768px){.ObPageBanner-bannerTitle{margin-top:0}}@media screen and (min-width: 992px){.ObPageBanner-bannerTitle{font-size:3rem}}.ObPageBanner-tabList.sticky{position:-webkit-sticky;position:sticky;top:0;z-index:1000}.ObPageBanner-tabListInner{overflow-x:auto;scrollbar-width:thin;white-space:nowrap}.ObPageBanner-tab{border-bottom:.25rem solid rgba(0,0,0,0);display:inline-block;margin-top:.5rem;min-width:8rem;padding:.5rem 1rem;text-align:center;text-transform:capitalize}.ObPageBanner-tab.active{border-color:#fff}.ObProgressBar-root{height:1.5em;width:100%;appearance:none;-webkit-appearance:none;background-color:#f5f5f5;border:none;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,.2) inset;color:#4169e1;position:relative}.ObProgressBar-root::-webkit-progress-bar{background-color:#f5f5f5;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,.2) inset}.ObProgressBar-root::-webkit-progress-value{background-image:linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),linear-gradient(left, var(--brand-primary), var(--brand-light));background-image:-webkit-linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),-webkit-linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),-webkit-linear-gradient(left, var(--brand-primary), var(--brand-light));background-size:35px 20px,100% 100%,100% 100%;border-radius:3px;position:relative;transition:width .5s ease-out}.ObProgressBar-root::-webkit-progress-value:after{background-color:#fff;content:"";border-radius:100%;height:5px;position:absolute;right:7px;top:7px;width:5px}.ObProgressBar-root::-moz-progress-bar{background-image:linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),linear-gradient(left, var(--brand-primary), var(--brand-light));background-image:-moz-linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),-moz-linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),-moz-linear-gradient(left, var(--brand-primary), var(--brand-light));background-size:35px 20px,100% 100%,100% 100%;border-radius:3px;transition:width .5s ease-out}.ObSidebar-root{position:fixed;bottom:0;left:0;top:0;z-index:2;background-color:#fff;transform:translateX(-100%);transition:transform .2s ease-out;will-change:transform}.ObSidebar-root.Ob-right{left:unset;right:0;transform:translateX(100%)}.ObSidebar-root{overflow-y:auto}.ObSidebar-root.Ob-open{transform:translateX(0)}.ObSidebar-root.ObSidebar-shadow{box-shadow:2px 2px 4px rgba(0,0,0,.15)}.ObSidebar-root.ObSidebar-shadow.Ob-right{box-shadow:-2px 2px 4px rgba(0,0,0,.15)}.ObSidebar-overlay{position:fixed;bottom:0;left:0;right:0;top:0;z-index:1;opacity:0;visibility:hidden;transition:opacity .3s ease-out,visibility .3s ease-out;background-color:rgba(0,0,0,.3)}.ObSidebar-overlay.Ob-open{opacity:1;visibility:visible}.ObSpinner-wrapper,.ObSpinner-fullPage{--bullet-size: 0.5em}.ObSpinner-root{display:inline-block}.ObSpinner-fullPage{display:flex;align-items:center;justify-content:center;height:100vh;width:100vw}.ObSpinner-spinner{display:inline-block;height:calc(var(--bullet-size)*1.5);position:relative;width:calc(var(--bullet-size)*5)}.ObSpinner-bullet{animation-timing-function:cubic-bezier(0, 1, 1, 0);background:#666;border-radius:50%;height:var(--bullet-size);position:absolute;top:.2rem;width:var(--bullet-size);&:nth-child(1){animation:scaleAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*.5)}&:nth-child(2){animation:translateAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*.5)}&:nth-child(3){animation:translateAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*2.4)}&:nth-child(4){animation:scaleAnimation .6s infinite ease-in-out reverse;left:calc(var(--bullet-size)*4)}}@keyframes scaleAnimation{from{transform:scale(0)}to{transform:scale(1)}}@keyframes translateAnimation{from{transform:translate(0, 0)}to{transform:translate(calc(var(--bullet-size) * 1.65), 0)}}.😖{display:initial}.ObSplitContainer-root{display:flex;flex-direction:column;height:100%;width:100%}.ObSplitContainer-root.horizontal{flex-direction:row}.ObSplitContainer-panel{overflow:hidden}.ObSplitContainer-divider{flex:0 0 .5rem;background-color:rgba(0,0,0,0);line-height:.75;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.ObSplitContainer-divider:focus{background-color:rgba(0,0,0,.3)}.ObSplitContainer-root.horizontal>.ObSplitContainer-divider{cursor:ew-resize;writing-mode:vertical-lr}.ObSplitContainer-panel.dragging{pointer-events:none}.ObValueToggleGroup{padding:.25rem;border:2px solid rgb(0 0 0/0.2);border-radius:4px;display:flex;gap:.25rem;flex-wrap:wrap;&.vertical{flex-direction:column;align-items:center;& .ObValueToggleOption{width:100%;& .ObValueToggleLabel{width:100%;text-align:center}}}&:focus-within{border-color:rgb(0 0 0/0.8)}}.ObValueToggleOption{display:flex;align-items:center;margin:0;position:relative}.ObValueToggleOption input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.ObValueToggleLabel{font-size:.8em;margin:0 .2em;padding:.3em .5em;text-transform:uppercase;transition:background .2s ease,color .2s ease;border-radius:4px}.ObValueToggleOption:hover input:not(:disabled)+.ObValueToggleLabel{cursor:pointer;background:#ccc}.ObValueToggleOption input:checked+.ObValueToggleLabel{--color-bg: var(--brand-dark);background-color:var(--color-bg);color:white;cursor:default}.ObValueToggleOption input:disabled+.ObValueToggleLabel{color:rgb(0 0 0/0.5)}.ObValueToggleOption input:checked:focus-visible+.ObValueToggleLabel{--color-bg: var(--brand-light);outline:2px solid var(--brand-light)}.ObValueToggleOption input:checked:hover+.ObValueToggleLabel{background-color:var(--color-bg)}
1
+ .ObCheckbox-root{--check-width: 2rem;--bg-color: var(--brand-dark, rgba(42, 65, 50, 0.5));--bg-color-hover: var(--brand-primary, rgba(42, 65, 50, 0.8));--bg-color-selected: var(--brand-light);display:inline-block;height:var(--check-width);margin-bottom:0}.ObCheckbox-root:focus-within .ObCheckbox-box{border:.1rem solid #000}.ObCheckbox-root.Ob-disabled{--bg-color: rgba(150, 150, 150, 0.5);--bg-color-hover: var(--bg-color)}.ObCheckbox-box{position:relative;background:var(--bg-color);transition:background 300ms ease;overflow:hidden;border-radius:calc(var(--check-width)/15);height:var(--check-width);width:var(--check-width)}.ObCheckbox-box:hover{background:var(--bg-color-hover)}.ObCheckbox-label{position:relative;margin-bottom:0;overflow:hidden}.ObCheckbox-label:focus{outline:none}.ObCheckbox-mark{color:#fff;display:inline-block;font-size:calc(var(--check-width)*.4);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transition:all 300ms ease-in-out;transition-delay:0ms;transform:translate(-50%, -50%) scale(6)}.ObCheckbox-input{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.ObCheckbox-input:focus{outline:none}.ObCheckbox-label{display:flex;gap:.5rem;align-items:center;overflow:visible}.ObCheckbox-root.Ob-reverse .ObCheckbox-label{flex-direction:row-reverse}.ObCheckbox-input:checked:not(:disabled)+.ObCheckbox-label .ObCheckbox-box{animation:animOn 600ms 1 forwards}.ObCheckbox-input:checked:not(:disabled)+.ObCheckbox-label .ObCheckbox-box{background:var(--bg-color-selected)}.ObCheckbox-input:checked+.ObCheckbox-label .ObCheckbox-box .ObCheckbox-mark{transform:translate(-50%, -50%) scale(1);transition-delay:200ms;opacity:1}.ObCheckbox-root.Ob-disabled .ObCheckbox-box{cursor:not-allowed}@keyframes animOn{40%{transform:scaleY(0.4) scaleX(2)}50%{transform:scaleY(1.2) scaleX(0.6)}60%{transform:scaleY(0.8) scaleX(1.4)}70%{transform:scaleY(1.1) scaleX(0.9)}100%{transform:scaleY(1) scaleX(1)}}.ObColorCard-root{--bg-color-border: black;--bg-color-main: white;--bg-size: 0.75rem;--card-color: rgb(0, 0, 0);display:flex;align-items:stretch;min-height:10rem;overflow:hidden;border-radius:.25rem;box-shadow:0 1px 12px rgba(0, 0, 0, 0.15),0 1px 6px rgba(0, 0, 0, 0.25);color:#666;background-image:linear-gradient(to right, var(--bg-color-border), var(--bg-color-border) var(--bg-size), var(--bg-color-main) var(--bg-size), var(--bg-color-main));font-family:"Variable Bahnschrift","Bahnschrift","Open Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;transition:all ease-in-out 300ms;cursor:pointer;&:nth-of-type(5n + 1){--bg-color-border: rgb(178, 108, 190)}&:nth-of-type(5n + 2){--bg-color-border: rgb(79, 164, 61)}&:nth-of-type(5n + 3){--bg-color-border: rgb(246, 170, 23)}&:nth-of-type(5n + 4){--bg-color-border: rgb(218, 93, 83)}&:nth-of-type(5n + 5){--bg-color-border: rgb(23, 162, 184)}&:hover,&:focus{--bg-color-main: #f5f5f5;box-shadow:0 3px 18px rgba(0, 0, 0, 0.15),0 3px 12px rgba(0, 0, 0, 0.25);text-decoration:none}}@media screen and (min-width: 48rem){.ObColorCard-root{font-size:1.2rem}}.ObColorCard-column{display:flex;flex:1 1 100%;flex-direction:column;justify-content:space-between;margin:1rem 0;padding:.5rem 1.5rem .5rem 1rem;overflow:hidden;text-overflow:ellipsis;&:first-child{margin-left:var(--bg-size, 0.75rem)}&.ObColorCard-minor{flex:0 0 4rem;border-right:1px solid #e3e3e3;transition:margin ease-in-out 300ms}}@media screen and (min-width: 48rem){&.ObColorCard-minor{flex:0 0 8rem}}.ObColorCard-detailValue{color:#555}.ObColorCard-detailLabel{color:dimgray;font-size:.8rem;text-transform:uppercase}.ObColorCard-detail{&:not(:last-child){margin-right:1.5rem}&.ObColorCard-primary,&.ObColorCard-primary .ObColorCard-detailValue{font-size:1.25rem;font-weight:300}&.ObColorCard-primary .ObColorCard-detailValue{color:unset}}@media screen and (min-width: 48rem){.ObColorCard-detail{font-size:1rem}}.ObColorCard-stepList{display:flex;flex-direction:column;gap:1rem}.ObColorCard-step{position:relative;text-box-trim:trim-both;display:flex;align-items:flex-start;gap:.5rem}.ObColorCard-step::before{flex:.6em 0 0;content:"";position:relative;top:.25em;width:.6em;height:.6em;background:white;border:2px solid var(--bg-color-border, #999);border-radius:50%;box-sizing:border-box;z-index:1}.ObColorCard-step:not(:last-child)::after{content:"";position:absolute;top:1em;left:calc(.3em - 1px);height:calc(100% - .95em + 1rem + .0625em);border-left:2px dotted #999;z-index:0}:root{--ob-datenavigator-height: 3rem}.ObDateNavigator-icon{display:inline-block;svg{width:.625em;position:relative;top:-1px}}.ObDateNavigator-root{background-color:hsl(220, 20%, 96%);background-color:var(--block-header-color-bg);display:flex;font-size:1rem;outline:none;&:focus-visible{outline:2px solid var(--brand-dark, #336699);outline-offset:2px}}.ObDateNavigator-arrow{display:flex;align-items:center;flex:0 0 var(--ob-datenavigator-height);justify-content:center;height:var(--ob-datenavigator-height);cursor:pointer;text-align:center;&:hover:not(:disabled){background-color:#e3e3e3;background-color:var(--block-header-button-hover)}&:disabled{cursor:not-allowed;color:rgba(0 0 0/0.2)}}.ObDateNavigator-arrowLeft{border-right:1px solid #ddd;order:1}.ObDateNavigator-arrowRight{border-left:1px solid #ddd;order:3}.ObDateNavigator-date{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;order:2;height:var(--ob-datenavigator-height);text-align:center}.ObDateNavigator-today{order:4;padding:0 1rem;height:var(--ob-datenavigator-height);display:flex;align-items:center;justify-content:center;font-size:.875rem;color:var(--brand-dark, #336699);text-transform:uppercase;cursor:pointer;text-wrap:nowrap;border-left:1px solid #ddd;&:hover:not(:disabled){background-color:var(--block-header-button-hover)}&:focus-visible{outline:2px solid var(--brand-dark, #336699);outline-offset:2px}}:root{--ob-linked-list-bullet-size: 0.7em;--ob-linked-list-line-width: 0.2em}.ObLinkedList-root{list-style-type:none;margin-left:0;padding-left:0}.ObLinkedList-item{display:flex;align-items:center;flex-direction:row}.ObLinkedList-leftColumn{flex:1 1 4em;font-size:.75em;padding:0 1em;text-align:center}.ObLinkedList-rightColumn{flex:1 1 100%;padding:1em 1em 1em 1.5em}.ObLinkedList-line{display:flex;align-self:stretch;flex:0 0 .2em;background:#fff;position:relative}.ObLinkedList-bullet{background:#fff;border:1px solid rgba(50,50,50,.25);border-radius:.55em;height:.7em;width:.7em;position:absolute;left:0;top:50%;transform:translate(calc(-1 * var(--ob-linked-list-bullet-size) / 2 + var(--ob-linked-list-line-width) / 2), -50%)}.ObLinkedList-card{display:block;background:#fff;border:1px solid;border-color:#e5e6e9 #dfe0e4 #d0d1d5;border-radius:.1875em;color:inherit;cursor:pointer;flex:100% 1 1;position:relative}.ObLinkedList-card::before{border-bottom:.5em solid rgba(0,0,0,0);border-right:1em solid #fff;border-top:.5em solid rgba(0,0,0,0);content:" ";filter:drop-shadow(-1px 0px 1px rgba(50, 50, 50, 0.2));height:1em;left:-1em;margin-top:-0.5em;position:absolute;top:50%;width:1em}.ObLinkedList-card:hover{background-color:hsl(220,20%,94%) !important;color:inherit;text-decoration:inherit}.ObLinkedList-card:hover::before{border-right-color:hsl(220,20%,94%) !important}.ObPageBanner-root{background-color:hsl(186,72%,24%);background-color:var(--brand-dark);box-shadow:0px 8px 8px rgba(0,0,0,.2);color:#fff}.ObPageBanner-root a{color:hsl(200,50%,80%)}.ObPageBanner-inner{display:flex;align-items:center;flex-direction:column}@media screen and (min-width: 768px){.ObPageBanner-inner{align-items:flex-start;flex-direction:row}}.ObPageBanner-plantTitle{font-size:2rem}@media screen and (min-width: 992px){.ObPageBanner-plantTitle{font-size:3rem}}.ObPageBanner-bannerImage{align-self:stretch;background-color:#ddd;display:inline-block;height:20vh;object-fit:cover;object-position:center center;width:100%}@media screen and (min-width: 576px){.ObPageBanner-bannerImage{align-self:center;margin:0;margin-right:1rem;border:.4rem solid #fff;border-radius:50%;height:150px;width:150px}}@media screen and (min-width: 992px){.ObPageBanner-bannerImage{height:250px;width:250px}}.ObPageBanner-bannerTitle{margin-bottom:1rem;margin-top:1rem;font-size:2rem}@media screen and (min-width: 768px){.ObPageBanner-bannerTitle{margin-top:0}}@media screen and (min-width: 992px){.ObPageBanner-bannerTitle{font-size:3rem}}.ObPageBanner-tabList.sticky{position:-webkit-sticky;position:sticky;top:0;z-index:1000}.ObPageBanner-tabListInner{overflow-x:auto;scrollbar-width:thin;white-space:nowrap}.ObPageBanner-tab{border-bottom:.25rem solid rgba(0,0,0,0);display:inline-block;margin-top:.5rem;min-width:8rem;padding:.5rem 1rem;text-align:center;text-transform:capitalize}.ObPageBanner-tab.active{border-color:#fff}.ObProgressBar-root{height:1.5em;width:100%;appearance:none;-webkit-appearance:none;background-color:#f5f5f5;border:none;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,.2) inset;color:#4169e1;position:relative}.ObProgressBar-root::-webkit-progress-bar{background-color:#f5f5f5;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,.2) inset}.ObProgressBar-root::-webkit-progress-value{background-image:linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),linear-gradient(left, var(--brand-primary), var(--brand-light));background-image:-webkit-linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),-webkit-linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),-webkit-linear-gradient(left, var(--brand-primary), var(--brand-light));background-size:35px 20px,100% 100%,100% 100%;border-radius:3px;position:relative;transition:width .5s ease-out}.ObProgressBar-root::-webkit-progress-value:after{background-color:#fff;content:"";border-radius:100%;height:5px;position:absolute;right:7px;top:7px;width:5px}.ObProgressBar-root::-moz-progress-bar{background-image:linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),linear-gradient(left, var(--brand-primary), var(--brand-light));background-image:-moz-linear-gradient(135deg, transparent, transparent 33%, rgba(0, 0, 0, 0.1) 33%, rgba(0, 0, 0, 0.1) 66%, transparent 66%),-moz-linear-gradient(top, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.2)),-moz-linear-gradient(left, var(--brand-primary), var(--brand-light));background-size:35px 20px,100% 100%,100% 100%;border-radius:3px;transition:width .5s ease-out}.ObSidebar-root{position:fixed;bottom:0;left:0;top:0;z-index:2;background-color:#fff;transform:translateX(-100%);transition:transform .2s ease-out;will-change:transform}.ObSidebar-root.Ob-right{left:unset;right:0;transform:translateX(100%)}.ObSidebar-root{overflow-y:auto}.ObSidebar-root.Ob-open{transform:translateX(0)}.ObSidebar-root.ObSidebar-shadow{box-shadow:2px 2px 4px rgba(0,0,0,.15)}.ObSidebar-root.ObSidebar-shadow.Ob-right{box-shadow:-2px 2px 4px rgba(0,0,0,.15)}.ObSidebar-overlay{position:fixed;bottom:0;left:0;right:0;top:0;z-index:1;opacity:0;visibility:hidden;transition:opacity .3s ease-out,visibility .3s ease-out;background-color:rgba(0,0,0,.3)}.ObSidebar-overlay.Ob-open{opacity:1;visibility:visible}.ObSpinner-wrapper,.ObSpinner-fullPage{--bullet-size: 0.5em}.ObSpinner-root{display:inline-block}.ObSpinner-fullPage{display:flex;align-items:center;justify-content:center;height:100vh;width:100vw}.ObSpinner-spinner{display:inline-block;height:calc(var(--bullet-size)*1.5);position:relative;width:calc(var(--bullet-size)*5)}.ObSpinner-bullet{animation-timing-function:cubic-bezier(0, 1, 1, 0);background:#666;border-radius:50%;height:var(--bullet-size);position:absolute;top:.2rem;width:var(--bullet-size);&:nth-child(1){animation:scaleAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*.5)}&:nth-child(2){animation:translateAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*.5)}&:nth-child(3){animation:translateAnimation .6s infinite ease-in-out;left:calc(var(--bullet-size)*2.4)}&:nth-child(4){animation:scaleAnimation .6s infinite ease-in-out reverse;left:calc(var(--bullet-size)*4)}}@keyframes scaleAnimation{from{transform:scale(0)}to{transform:scale(1)}}@keyframes translateAnimation{from{transform:translate(0, 0)}to{transform:translate(calc(var(--bullet-size) * 1.65), 0)}}.😖{display:initial}.ObSplitContainer-root{display:flex;flex-direction:column;height:100%;width:100%}.ObSplitContainer-root.horizontal{flex-direction:row}.ObSplitContainer-panel{overflow:hidden}.ObSplitContainer-divider{flex:0 0 .5rem;background-color:rgba(0,0,0,0);line-height:.75;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.ObSplitContainer-divider:focus{background-color:rgba(0,0,0,.3)}.ObSplitContainer-root.horizontal>.ObSplitContainer-divider{cursor:ew-resize;writing-mode:vertical-lr}.ObSplitContainer-panel.dragging{pointer-events:none}.ObValueToggleOption{display:flex;align-items:center;margin:0;position:relative}.ObValueToggleLabel{font-size:.8em;margin:0 .2em;padding:.3em .5em;text-transform:uppercase;transition:background .2s ease,color .2s ease;border-radius:4px}.ObValueToggleGroup{padding:.25rem;border:2px solid rgb(0 0 0/0.2);border-radius:4px;display:flex;gap:.25rem;flex-wrap:wrap;&.vertical{flex-direction:column;align-items:center;& .ObValueToggleOption{width:100%;& .ObValueToggleLabel{width:100%;text-align:center}}}&:focus-within{border-color:rgb(0 0 0/0.8)}}.ObValueToggleOption input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.ObValueToggleOption:hover input:not(:disabled)+.ObValueToggleLabel{cursor:pointer;background:#ccc}.ObValueToggleOption input:checked+.ObValueToggleLabel{--color-bg: var(--brand-dark);background-color:var(--color-bg);color:white;cursor:default}.ObValueToggleOption input:disabled+.ObValueToggleLabel{color:rgb(0 0 0/0.5)}.ObValueToggleOption input:checked:focus-visible+.ObValueToggleLabel{--color-bg: var(--brand-light);outline:2px solid var(--brand-light)}.ObValueToggleOption input:checked:hover+.ObValueToggleLabel{background-color:var(--color-bg)}
package/es/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- export { Checkbox, type CheckboxProps } from "./Checkbox/index.js";
2
- export { ColorCard, CardColumn, CardDetail, CardLabel, CardStep, CardStepList } from "./ColorCard/index.js";
3
- export { DateNavigator } from "./DateNavigator/index.js";
4
- export { Card, LinkedList, LinkedListItem } from "./LinkedCardList/index.js";
5
- export { BannerImage as PageBannerImage, type BannerImageProps, PageBanner, type PageBannerProps, Tab as PageBannerTab, type TabProps as PageBannerTabProps, TabList as PageBannerTabList, type TabListProps as PageBannerTabListProps, Title as PageBannerTitle, type TitleProps as PageBannerTitleProps, } from "./PageBanner/index.js";
6
- export { Portal } from "./Portal/index.js";
7
- export { ProgressBar } from "./ProgressBar/index.js";
8
- export { Sidebar, type SidebarProps } from "./Sidebar/index.js";
9
- export { Spinner, type SpinnerProps } from "./Spinner/index.js";
10
- export { SplitContainer, type SplitContainerProps } from "./SplitContainer/index.js";
1
+ export { Checkbox, type CheckboxProps } from "./components/Checkbox/index.js";
2
+ export { CardColumn, CardDetail, CardLabel, CardStep, CardStepList, ColorCard } from "./components/ColorCard/index.js";
3
+ export { DateNavigator } from "./components/DateNavigator/index.js";
4
+ export * from "./components/FilePond.js";
5
+ export { Card, LinkedList, LinkedListItem } from "./components/LinkedCardList/index.js";
6
+ export { BannerImage as PageBannerImage, type BannerImageProps, PageBanner, type PageBannerProps, Tab as PageBannerTab, TabList as PageBannerTabList, type TabListProps as PageBannerTabListProps, type TabProps as PageBannerTabProps, Title as PageBannerTitle, type TitleProps as PageBannerTitleProps, } from "./components/PageBanner/index.js";
7
+ export { Portal } from "./components/Portal/index.js";
8
+ export { ProgressBar } from "./components/ProgressBar/index.js";
9
+ export { Sidebar, type SidebarProps } from "./components/Sidebar/index.js";
10
+ export { Spinner, type SpinnerProps } from "./components/Spinner/index.js";
11
+ export { SplitContainer, type SplitContainerProps } from "./components/SplitContainer/index.js";
12
+ export { ValueToggleGroup, type ValueToggleGroupProps } from "./components/ValueToggleGroup/index.js";
11
13
  export { useTranslation } from "./useTranslation/index.js";
12
- export { ValueToggleGroup, type ValueToggleGroupProps } from "./ValueToggleGroup/index.js";
package/es/index.js CHANGED
@@ -1,12 +1,13 @@
1
- export { Checkbox } from "./Checkbox/index.js";
2
- export { ColorCard, CardColumn, CardDetail, CardLabel, CardStep, CardStepList } from "./ColorCard/index.js";
3
- export { DateNavigator } from "./DateNavigator/index.js";
4
- export { Card, LinkedList, LinkedListItem } from "./LinkedCardList/index.js";
5
- export { BannerImage as PageBannerImage, PageBanner, Tab as PageBannerTab, TabList as PageBannerTabList, Title as PageBannerTitle, } from "./PageBanner/index.js";
6
- export { Portal } from "./Portal/index.js";
7
- export { ProgressBar } from "./ProgressBar/index.js";
8
- export { Sidebar } from "./Sidebar/index.js";
9
- export { Spinner } from "./Spinner/index.js";
10
- export { SplitContainer } from "./SplitContainer/index.js";
1
+ export { Checkbox } from "./components/Checkbox/index.js";
2
+ export { CardColumn, CardDetail, CardLabel, CardStep, CardStepList, ColorCard } from "./components/ColorCard/index.js";
3
+ export { DateNavigator } from "./components/DateNavigator/index.js";
4
+ export * from "./components/FilePond.js";
5
+ export { Card, LinkedList, LinkedListItem } from "./components/LinkedCardList/index.js";
6
+ export { BannerImage as PageBannerImage, PageBanner, Tab as PageBannerTab, TabList as PageBannerTabList, Title as PageBannerTitle, } from "./components/PageBanner/index.js";
7
+ export { Portal } from "./components/Portal/index.js";
8
+ export { ProgressBar } from "./components/ProgressBar/index.js";
9
+ export { Sidebar } from "./components/Sidebar/index.js";
10
+ export { Spinner } from "./components/Spinner/index.js";
11
+ export { SplitContainer } from "./components/SplitContainer/index.js";
12
+ export { ValueToggleGroup } from "./components/ValueToggleGroup/index.js";
11
13
  export { useTranslation } from "./useTranslation/index.js";
12
- export { ValueToggleGroup } from "./ValueToggleGroup/index.js";
package/package.json CHANGED
@@ -1,48 +1,16 @@
1
1
  {
2
2
  "name": "@olenbetong/synergi-react",
3
- "version": "2.1.2",
3
+ "version": "2.3.0",
4
4
  "description": "Standalone React component for SynergiWeb and Partner Portal",
5
5
  "type": "module",
6
- "types": "./es/index.d.ts",
7
6
  "exports": {
8
7
  ".": {
8
+ "types": "./es/index.d.ts",
9
9
  "import": "./es/index.js"
10
10
  },
11
- "./Checkbox": {
12
- "import": "./es/Checkbox/index.js"
13
- },
14
- "./ColorCard": {
15
- "import": "./es/ColorCard/index.js"
16
- },
17
- "./DateNavigator": {
18
- "import": "./es/DateNavigator/index.js"
19
- },
20
- "./LinkedCardList": {
21
- "import": "./es/LinkedCardList/index.js"
22
- },
23
- "./PageBanner": {
24
- "import": "./es/PageBanner/index.js"
25
- },
26
- "./Portal": {
27
- "import": "./es/Portal/index.js"
28
- },
29
- "./ProgressBar": {
30
- "import": "./es/ProgressBar/index.js"
31
- },
32
- "./Sidebar": {
33
- "import": "./es/Sidebar/index.js"
34
- },
35
- "./Spinner": {
36
- "import": "./es/Spinner/index.js"
37
- },
38
- "./SplitContainer": {
39
- "import": "./es/SplitContainer/index.js"
40
- },
41
- "./useTranslation": {
42
- "import": "./es/useTranslation/index.js"
43
- },
44
- "./ValueToggle": {
45
- "import": "./es/ValueToggle/index.js"
11
+ "./elements": {
12
+ "types": "./es/features/elements/index.d.ts",
13
+ "import": "./es/features/elements/index.js"
46
14
  }
47
15
  },
48
16
  "files": [
@@ -59,10 +27,18 @@
59
27
  },
60
28
  "sideEffects": false,
61
29
  "dependencies": {
30
+ "@emotion/styled": "^11.14.1",
62
31
  "clsx": "^2.1.1",
32
+ "dynamsoft-javascript-barcode": "6.5.4",
33
+ "filepond": "^4.32.9",
34
+ "filepond-plugin-file-poster": "^2.5.2",
35
+ "filepond-plugin-image-exif-orientation": "^1.0.11",
36
+ "filepond-plugin-image-preview": "^4.6.12",
37
+ "filepond-plugin-image-resize": "^2.0.10",
38
+ "filepond-plugin-image-transform": "^3.8.7",
63
39
  "localforage": "^1.10.0",
64
40
  "mitt": "^3.0.1",
65
- "@olenbetong/appframe-core": "2.11.8"
41
+ "@olenbetong/appframe-core": "2.11.9"
66
42
  },
67
43
  "repository": {
68
44
  "type": "git",
@@ -78,9 +54,9 @@
78
54
  "devDependencies": {
79
55
  "replace-in-files": "^3.0.0"
80
56
  },
57
+ "optionalDependencies": {},
81
58
  "scripts": {
82
- "build": "pnpm run build:tsc && pnpm run build:tsc:post && pnpm run build:esbuild && pnpm run build:sass && pnpm run build:sass:components",
83
- "build:esbuild": "node --no-warnings ../../scripts/packages-esbuild.ts",
59
+ "build": "pnpm run build:tsc && pnpm run build:tsc:post && pnpm run build:sass && pnpm run build:sass:components",
84
60
  "build:sass": "sass ./src/index.scss ./dist/styles/styles.css --source-map-urls=relative --style compressed",
85
61
  "build:sass:components": "node ./scripts/buildSassComponents.mjs",
86
62
  "build:tsc:post": "node ./scripts/replaceCss.mjs",
@@ -1,7 +1,7 @@
1
1
  import "./index.scss";
2
2
 
3
3
  import clsx from "clsx";
4
- import { type HTMLAttributes, forwardRef, useEffect, useId, useRef } from "react";
4
+ import { forwardRef, type HTMLAttributes, useEffect, useId, useRef } from "react";
5
5
 
6
6
  function Mark(props: HTMLAttributes<SVGElement>) {
7
7
  return (
@@ -9,7 +9,9 @@
9
9
  min-height: 10rem;
10
10
  overflow: hidden;
11
11
  border-radius: 0.25rem;
12
- box-shadow: 0 1px 12px rgba(0, 0, 0, 0.15), 0 1px 6px rgba(0, 0, 0, 0.25);
12
+ box-shadow:
13
+ 0 1px 12px rgba(0, 0, 0, 0.15),
14
+ 0 1px 6px rgba(0, 0, 0, 0.25);
13
15
  color: #666;
14
16
  background-image: linear-gradient(
15
17
  to right,
@@ -55,7 +57,9 @@
55
57
  &:hover,
56
58
  &:focus {
57
59
  --bg-color-main: #f5f5f5;
58
- box-shadow: 0 3px 18px rgba(0, 0, 0, 0.15), 0 3px 12px rgba(0, 0, 0, 0.25);
60
+ box-shadow:
61
+ 0 3px 18px rgba(0, 0, 0, 0.15),
62
+ 0 3px 12px rgba(0, 0, 0, 0.25);
59
63
  text-decoration: none;
60
64
  }
61
65
 
@@ -89,6 +93,10 @@
89
93
  }
90
94
  }
91
95
 
96
+ .ObColorCard-detailValue {
97
+ color: #555555;
98
+ }
99
+
92
100
  .ObColorCard-detailLabel {
93
101
  color: #696969;
94
102
  font-size: 0.8rem;
@@ -115,10 +123,6 @@
115
123
  }
116
124
  }
117
125
 
118
- .ObColorCard-detailValue {
119
- color: #555555;
120
- }
121
-
122
126
  .ObColorCard-stepList {
123
127
  display: flex;
124
128
  flex-direction: column;
@@ -169,6 +169,8 @@ export function DateNavigator({
169
169
 
170
170
  return (
171
171
  // biome-ignore lint/a11y/noNoninteractiveTabindex: I hate this component
172
+ // biome-ignore lint/a11y/noStaticElementInteractions: legacy component
173
+ // biome-ignore lint/a11y/useAriaPropsSupportedByRole: legacy component
172
174
  <div className="ObDateNavigator-root" onKeyDown={handleKeyDown} tabIndex={0} aria-label="Date navigator">
173
175
  <Arrow direction="left" onClick={() => updateDate(new Date(dateUtc - oneDay))} disabled={disablePrev} />
174
176
  <div className="ObDateNavigator-date">{text}</div>
@@ -0,0 +1,312 @@
1
+ import "filepond-plugin-file-poster/dist/filepond-plugin-file-poster.css";
2
+ import "filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css";
3
+ import "filepond/dist/filepond.css";
4
+
5
+ import { getLocalizedString } from "@olenbetong/appframe-core";
6
+ import type { DataObject } from "@olenbetong/appframe-data";
7
+ import { useData, useFetchData } from "@olenbetong/appframe-react";
8
+
9
+ import {
10
+ create,
11
+ type FilePondErrorDescription,
12
+ type FilePondFile,
13
+ type FilePondInitialFile,
14
+ type FilePond as FilePondInstance,
15
+ type FilePondOptions,
16
+ FileStatus,
17
+ registerPlugin,
18
+ } from "filepond";
19
+ import FilePondPluginImageExifOrientation from "filepond-plugin-image-exif-orientation";
20
+ import FilePondPluginImagePreview from "filepond-plugin-image-preview";
21
+ import FilePondPluginImageResize from "filepond-plugin-image-resize";
22
+ import FilePondPluginImageTransform from "filepond-plugin-image-transform";
23
+ import { type RefObject, useEffect, useMemo, useRef } from "react";
24
+
25
+ export { registerPlugin, FileStatus };
26
+
27
+ registerPlugin(
28
+ FilePondPluginImageExifOrientation,
29
+ FilePondPluginImageResize,
30
+ FilePondPluginImagePreview,
31
+ FilePondPluginImageTransform,
32
+ );
33
+
34
+ let isMostLikelyMobile =
35
+ navigator.userAgent.match(/Android/i) ||
36
+ navigator.userAgent.match(/iPhone/i) ||
37
+ navigator.userAgent.match(/iPad/i) ||
38
+ navigator.userAgent.match(/iPod/i);
39
+
40
+ const labels = {
41
+ labelIdle: isMostLikelyMobile
42
+ ? getLocalizedString("Take a photo, or upload an existing image/file")
43
+ : getLocalizedString('Drag & Drop your files or <span class="filepond--label-action"> Browse </span>'),
44
+ labelInvalidField: getLocalizedString("Field contains invalid files"),
45
+ labelFileWaitingForSize: getLocalizedString("Waiting for size"),
46
+ labelFileSizeNotAvailable: getLocalizedString("Size not available"),
47
+ labelFileLoading: getLocalizedString("Loading"),
48
+ labelFileLoadError: getLocalizedString("Error during load"),
49
+ labelFileProcessing: getLocalizedString("Uploading"),
50
+ labelFileProcessingComplete: getLocalizedString("Upload complete"),
51
+ labelFileProcessingAborted: getLocalizedString("Upload cancelled"),
52
+ labelFileProcessingError: getLocalizedString("Error during upload"),
53
+ labelFileProcessingRevertError: getLocalizedString("Error during revert"),
54
+ labelFileRemoveError: getLocalizedString("Error during remove"),
55
+ labelTapToCancel: getLocalizedString("tap to cancel"),
56
+ labelTapToRetry: getLocalizedString("tap to retry"),
57
+ labelTapToUndo: getLocalizedString("tap to undo"),
58
+ labelButtonRemoveItem: getLocalizedString("Remove"),
59
+ labelButtonAbortItemLoad: getLocalizedString("Abort"),
60
+ labelButtonRetryItemLoad: getLocalizedString("Retry"),
61
+ labelButtonAbortItemProcessing: getLocalizedString("Cancel"),
62
+ labelButtonUndoItemProcessing: getLocalizedString("Undo"),
63
+ labelButtonRetryItemProcessing: getLocalizedString("Retry"),
64
+ labelButtonProcessItem: getLocalizedString("Upload"),
65
+ labelMaxFileSizeExceeded: getLocalizedString("File is too large"),
66
+ labelMaxFileSize: getLocalizedString("Maximum file size is {filesize}"),
67
+ labelMaxTotalFileSizeExceeded: getLocalizedString("Maximum total size exceeded"),
68
+ labelMaxTotalFileSize: getLocalizedString("Maximum total file size is {filesize}"),
69
+ labelFileTypeNotAllowed: getLocalizedString("File of invalid type"),
70
+ fileValidateTypeLabelExpectedTypes: getLocalizedString("Expects {allButLastType} or {lastType}"),
71
+ imageValidateSizeLabelFormatError: getLocalizedString("Image type not supported"),
72
+ imageValidateSizeLabelImageSizeTooSmall: getLocalizedString("Image is too small"),
73
+ imageValidateSizeLabelImageSizeTooBig: getLocalizedString("Image is too big"),
74
+ imageValidateSizeLabelExpectedMinSize: getLocalizedString("Minimum size is {minWidth} × {minHeight}"),
75
+ imageValidateSizeLabelExpectedMaxSize: getLocalizedString("Maximum size is {maxWidth} × {maxHeight}"),
76
+ imageValidateSizeLabelImageResolutionTooLow: getLocalizedString("Resolution is too low"),
77
+ imageValidateSizeLabelImageResolutionTooHigh: getLocalizedString("Resolution is too high"),
78
+ imageValidateSizeLabelExpectedMinResolution: getLocalizedString("Minimum resolution is {minResolution}"),
79
+ imageValidateSizeLabelExpectedMaxResolution: getLocalizedString("Maximum resolution is {maxResolution}"),
80
+ };
81
+
82
+ type FilePondProps<T extends Record<string, unknown>> = React.HTMLProps<HTMLInputElement> & {
83
+ dataObject: DataObject<T>;
84
+ fields: Partial<T>;
85
+ onUploadStart: () => void;
86
+ onFileUploaded: (error: FilePondErrorDescription | null, file: FilePondFile) => void;
87
+ onFinishedUploads: () => void;
88
+ onError: (error: string) => void;
89
+ onFileRemoved?: (primKey: string) => void;
90
+ /**
91
+ * If the file should be uploaded to a blob field, set the field name here
92
+ */
93
+ fieldName?: string;
94
+ /**
95
+ * If the file should be added to an existing record, set the prim key here
96
+ */
97
+ primKey?: string;
98
+ /**
99
+ * If a reference to the file input element is needed, pass a ref here.
100
+ */
101
+ inputRef?: RefObject<HTMLInputElement>;
102
+ /**
103
+ * Options to pass to FilePond
104
+ */
105
+ filePondOptions?: Partial<FilePondOptions>;
106
+ attachmentPrimKeys?: string[];
107
+ whereClause?: string;
108
+ };
109
+
110
+ function getFileUrl<T extends Record<string, unknown>>(
111
+ dataObject: DataObject<T>,
112
+ fieldName?: string,
113
+ primKey?: string,
114
+ action = "upload",
115
+ ) {
116
+ let url =
117
+ action === "upload"
118
+ ? dataObject.dataHandler.getUploadUrl()
119
+ : dataObject.dataHandler.getFileStoreURL(primKey ?? "", fieldName ?? "");
120
+
121
+ if (action === "upload") {
122
+ url += "/";
123
+ }
124
+
125
+ return url?.replaceAll("//", "/") ?? "";
126
+ }
127
+
128
+ type FileStoreDataObjectRecord = {
129
+ PrimKey: string;
130
+ FileName: string | null;
131
+ FileSize: number | null;
132
+ FileRef: string | null;
133
+ ElementRef: string | null;
134
+ Damage: boolean;
135
+ DamageID: number | null;
136
+ };
137
+
138
+ export function FilePond<T extends FileStoreDataObjectRecord>({
139
+ dataObject,
140
+ fields,
141
+ onUploadStart,
142
+ onFileUploaded,
143
+ onFinishedUploads,
144
+ onFileRemoved,
145
+ onError,
146
+ fieldName,
147
+ filePondOptions,
148
+ primKey,
149
+ attachmentPrimKeys,
150
+ whereClause,
151
+ inputRef: inputRefProp,
152
+ ...props
153
+ }: FilePondProps<T>) {
154
+ let inputRef = useRef<HTMLInputElement>(null);
155
+ let pondRef = useRef<FilePondInstance | null>(null);
156
+ let filesData = useData(dataObject);
157
+ let { data: filesFetched } = useFetchData(dataObject, whereClause ?? "1=2");
158
+ let files = useMemo(() => {
159
+ if (whereClause) {
160
+ return filesFetched;
161
+ }
162
+ return filesData;
163
+ }, [whereClause, filesFetched, filesData]);
164
+ let clearFilesRef = useRef(false);
165
+
166
+ useEffect(() => {
167
+ return () => {
168
+ pondRef.current?.destroy();
169
+ pondRef.current = null;
170
+ };
171
+ }, []);
172
+
173
+ useEffect(() => {
174
+ async function removeUploadedFile(source: string, load: () => void, error: (error: string) => void) {
175
+ // this method is also called when we clear the files on data object
176
+ // refresh. Haven't found any elegant way to work around that, so instead
177
+ // we set this ref to true when we remove the files to have a way
178
+ // to discover why the files are being removed
179
+ if (clearFilesRef.current) return;
180
+
181
+ let { dataHandler } = dataObject;
182
+ try {
183
+ let result = await dataHandler.destroy({
184
+ PrimKey: source,
185
+ } as Partial<T>);
186
+
187
+ if (result) {
188
+ onFileRemoved?.(source);
189
+ load();
190
+ } else {
191
+ error("Failed to delete file on server. Delete request returned false");
192
+ }
193
+ } catch (err: any) {
194
+ error(
195
+ err.responseText ??
196
+ err.statusText ??
197
+ err.message ??
198
+ "Failed to delete file on server but no error was returned.",
199
+ );
200
+ }
201
+ }
202
+
203
+ let options: FilePondOptions = {
204
+ allowMultiple: Boolean(props.multiple),
205
+ allowImageResize: true,
206
+ imageResizeMode: "contain",
207
+ imageResizeTargetWidth: 2400,
208
+ imageResizeTargetHeight: 2400,
209
+ imageResizeUpscale: false,
210
+ ...labels,
211
+ onaddfilestart: (file) => {
212
+ if (file.status !== 5 && file.status !== 6 && file.status !== 10) {
213
+ onUploadStart();
214
+ }
215
+ },
216
+ onprocessfile: (error, file) => {
217
+ onFileUploaded(error, file);
218
+
219
+ let refFiles = pondRef.current?.getFiles();
220
+ let found = refFiles?.find(
221
+ (file) => file.status !== 2 && file.status !== 5 && file.status !== 6 && file.status !== 10,
222
+ );
223
+
224
+ if (found === undefined) {
225
+ onFinishedUploads();
226
+ }
227
+ },
228
+ onprocessfiles: () => onFinishedUploads(),
229
+ onerror: (error) => onError(error.body),
230
+ beforeRemoveFile: () => {
231
+ if (confirm(getLocalizedString("Are you sure you want to remove this file?"))) {
232
+ return true;
233
+ }
234
+
235
+ return false;
236
+ },
237
+ server: {
238
+ load: getFileUrl(dataObject, fieldName, primKey, "view"),
239
+ restore: getFileUrl(dataObject, fieldName, primKey, "view"),
240
+
241
+ revert: removeUploadedFile,
242
+ remove: removeUploadedFile,
243
+
244
+ process: {
245
+ url: getFileUrl(dataObject, fieldName),
246
+ ondata: (formData) => {
247
+ let masterChildCriteria = dataObject.getParameter("masterChildCriteria");
248
+ let allFields = { ...masterChildCriteria, ...fields };
249
+
250
+ for (let [field, value] of Object.entries(allFields)) {
251
+ if (value !== undefined) {
252
+ formData.append(field, String(value));
253
+ }
254
+ }
255
+
256
+ return formData;
257
+ },
258
+ onload: (response) => JSON.parse(response),
259
+ },
260
+ },
261
+ ...filePondOptions,
262
+ };
263
+
264
+ if (pondRef.current) {
265
+ pondRef.current.setOptions(options);
266
+ } else {
267
+ pondRef.current = create(inputRefProp?.current ?? inputRef.current ?? undefined, options);
268
+ }
269
+ }, [
270
+ dataObject,
271
+ props.multiple,
272
+ fields,
273
+ fieldName,
274
+ primKey,
275
+ inputRefProp,
276
+ filePondOptions,
277
+ onError,
278
+ onFileUploaded,
279
+ onUploadStart,
280
+ onFinishedUploads,
281
+ onFileRemoved,
282
+ ]);
283
+
284
+ useEffect(() => {
285
+ if (pondRef.current) {
286
+ files.forEach((file, index) => {
287
+ let options: { index: number } & Partial<FilePondInitialFile["options"]> = {
288
+ index,
289
+ type: "local",
290
+ };
291
+
292
+ pondRef.current?.addFile(file.PrimKey, options);
293
+ });
294
+ }
295
+
296
+ return () => {
297
+ // Indicate that we are clearing the files because data has changed,
298
+ // to prevent the remove callback from deleting the files
299
+ clearFilesRef.current = true;
300
+ pondRef.current?.removeFiles();
301
+ clearFilesRef.current = false;
302
+ };
303
+ }, [files]);
304
+
305
+ return (
306
+ <div className="filepond--wrapper">
307
+ {attachmentPrimKeys && <input type="hidden" name="AttachmentPrimkeys" value={attachmentPrimKeys} />}
308
+
309
+ <input type="file" {...props} name="File" ref={inputRefProp ?? inputRef} />
310
+ </div>
311
+ );
312
+ }
@@ -1,4 +1,4 @@
1
- @use "../styles/variables";
1
+ @use "../../styles/variables";
2
2
 
3
3
  $bullet-size: 0.7em;
4
4
  $line-width: 0.2em;
@@ -1,4 +1,4 @@
1
- @use "../styles/variables";
1
+ @use "../../styles/variables";
2
2
 
3
3
  .ObPageBanner-root {
4
4
  background-color: variables.$brand-primary;
@@ -26,7 +26,6 @@ export const BannerImage = React.forwardRef<HTMLImageElement, BannerImageProps>(
26
26
  ref,
27
27
  ) {
28
28
  const { className, ...other } = props;
29
- // biome-ignore lint/a11y/useAltText: should be provided by the user
30
29
  return <img ref={ref} className={clsx("ObPageBanner-bannerImage", className)} alt="" {...other} />;
31
30
  });
32
31
 
@@ -1,4 +1,4 @@
1
- @use "../styles/variables";
1
+ @use "../../styles/variables";
2
2
 
3
3
  .ObProgressBar-root {
4
4
  height: 1.5em;
@@ -3,10 +3,10 @@ import "./index.scss";
3
3
  import clsx from "clsx";
4
4
  import { useEffect, useRef, useState } from "react";
5
5
 
6
- export type SidebarProps = React.HTMLProps<HTMLDivElement> & {
6
+ export type SidebarProps = React.HTMLAttributes<HTMLDivElement> & {
7
7
  open?: boolean;
8
8
  onClose?: () => void;
9
- overlayProps: React.HTMLProps<HTMLDivElement>;
9
+ overlayProps?: React.HTMLAttributes<HTMLDivElement>;
10
10
  pullRight?: boolean;
11
11
  shadow?: boolean;
12
12
  };
@@ -106,6 +106,7 @@ export function Sidebar(props: SidebarProps) {
106
106
  >
107
107
  {(open || !hidden) && children}
108
108
  </div>
109
+ {/** biome-ignore lint/a11y/noStaticElementInteractions: legacy component */}
109
110
  <div
110
111
  role="presentation"
111
112
  tabIndex={-1}