@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.
- package/dist/esm/ob.react.css +1189 -27
- package/dist/esm/ob.react.js +45612 -708
- package/dist/esm/ob.react.min.css +24 -1
- package/dist/esm/ob.react.min.css.map +3 -3
- package/dist/esm/ob.react.min.js +253 -1
- package/dist/esm/ob.react.min.js.map +4 -4
- package/dist/iife/ob.react.css +1189 -27
- package/dist/iife/ob.react.js +45625 -720
- package/dist/iife/ob.react.min.css +24 -1
- package/dist/iife/ob.react.min.css.map +3 -3
- package/dist/iife/ob.react.min.js +253 -1
- package/dist/iife/ob.react.min.js.map +4 -4
- package/dist/styles/styles.css +1 -1
- package/dist/styles/styles.css.map +1 -1
- package/{src → es/components}/ColorCard/index.css +10 -6
- package/es/{DateNavigator → components/DateNavigator}/index.js +2 -0
- package/es/components/FilePond.d.ts +44 -0
- package/es/components/FilePond.js +205 -0
- package/es/{PageBanner → components/PageBanner}/index.js +0 -1
- package/es/{Sidebar → components/Sidebar}/index.d.ts +2 -2
- package/es/{SplitContainer → components/SplitContainer}/index.js +3 -3
- package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.css +18 -16
- package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.js +4 -2
- package/es/elements/ElementDamage/DamageFormButtons.d.ts +9 -0
- package/es/elements/ElementDamage/DamageFormButtons.js +7 -0
- package/es/elements/ElementDamage/DescriptionInput.d.ts +14 -0
- package/es/elements/ElementDamage/DescriptionInput.js +44 -0
- package/es/elements/ElementDamage/DuplicateDamage/DesktopView.d.ts +7 -0
- package/es/elements/ElementDamage/DuplicateDamage/DesktopView.js +16 -0
- package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.d.ts +10 -0
- package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.js +12 -0
- package/es/elements/ElementDamage/DuplicateDamage/PhoneView.d.ts +6 -0
- package/es/elements/ElementDamage/DuplicateDamage/PhoneView.js +8 -0
- package/es/elements/ElementDamage/DuplicateDamage/index.d.ts +36 -0
- package/es/elements/ElementDamage/DuplicateDamage/index.js +40 -0
- package/es/elements/ElementDamage/ElementNumberTextField.d.ts +10 -0
- package/es/elements/ElementDamage/ElementNumberTextField.js +18 -0
- package/es/elements/ElementDamage/HiddenDamageFields.d.ts +6 -0
- package/es/elements/ElementDamage/HiddenDamageFields.js +4 -0
- package/es/elements/ElementDamage/RegisterFix.d.ts +14 -0
- package/es/elements/ElementDamage/RegisterFix.js +45 -0
- package/es/elements/ElementDamage/SubmitButtons.d.ts +20 -0
- package/es/elements/ElementDamage/SubmitButtons.js +7 -0
- package/es/elements/ElementDamage/TransportElementSelect.d.ts +7 -0
- package/es/elements/ElementDamage/TransportElementSelect.js +16 -0
- package/es/elements/ElementDamage/index.css +3 -0
- package/es/elements/ElementLookup.d.ts +20 -0
- package/es/elements/ElementLookup.js +30 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.d.ts +2 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.js +5 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/Error.d.ts +4 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/Error.js +33 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/index.d.ts +10 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/index.js +37 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/useScanner.d.ts +16 -0
- package/es/elements/ElementLookupDialog/BarcodeScanner/useScanner.js +135 -0
- package/es/elements/ElementLookupDialog/HIDScanner/index.css +17 -0
- package/es/elements/ElementLookupDialog/HIDScanner/index.d.ts +4 -0
- package/es/elements/ElementLookupDialog/HIDScanner/index.js +36 -0
- package/es/elements/ElementLookupDialog/HIDScanner/useHIDScanner.d.ts +1 -0
- package/es/elements/ElementLookupDialog/HIDScanner/useHIDScanner.js +27 -0
- package/es/elements/ElementLookupDialog/Manual/ManualForm.d.ts +12 -0
- package/es/elements/ElementLookupDialog/Manual/ManualForm.js +48 -0
- package/es/elements/ElementLookupDialog/getElement.d.ts +23 -0
- package/es/elements/ElementLookupDialog/getElement.js +55 -0
- package/es/elements/ElementLookupDialog/index.d.ts +24 -0
- package/es/elements/ElementLookupDialog/index.js +97 -0
- package/es/elements/ElementLookupDialog/utils/Giai.d.ts +52 -0
- package/es/elements/ElementLookupDialog/utils/Giai.js +158 -0
- package/es/elements/ElementLookupDialog/utils/beep.d.ts +10 -0
- package/es/elements/ElementLookupDialog/utils/beep.js +20 -0
- package/es/elements/ProjectSelect.d.ts +23 -0
- package/es/elements/ProjectSelect.js +42 -0
- package/es/elements/data/dsAttachments.d.ts +15 -0
- package/es/elements/data/dsAttachments.js +85 -0
- package/es/elements/data/dsCurrentAttachment.d.ts +13 -0
- package/es/elements/data/dsCurrentAttachment.js +75 -0
- package/es/elements/data/dsDamages.d.ts +25 -0
- package/es/elements/data/dsDamages.js +127 -0
- package/es/elements/data/dsDamagesDuplicateCheck.d.ts +2 -0
- package/es/elements/data/dsDamagesDuplicateCheck.js +3 -0
- package/es/elements/data/dsElements.d.ts +8 -0
- package/es/elements/data/dsElements.js +47 -0
- package/es/elements/data/dsProjects.d.ts +8 -0
- package/es/elements/data/dsProjects.js +51 -0
- package/es/elements/data/dsReportProjects.d.ts +2 -0
- package/es/elements/data/dsReportProjects.js +3 -0
- package/es/elements/data/dsTransportElements.d.ts +10 -0
- package/es/elements/data/dsTransportElements.js +57 -0
- package/es/elements/data/index.d.ts +11 -0
- package/es/elements/data/index.js +11 -0
- package/es/elements/data/procApproveDamage.d.ts +2 -0
- package/es/elements/data/procApproveDamage.js +18 -0
- package/es/elements/data/procDeleteAttachment.d.ts +2 -0
- package/es/elements/data/procDeleteAttachment.js +18 -0
- package/es/elements/data/procDeleteDamage.d.ts +2 -0
- package/es/elements/data/procDeleteDamage.js +18 -0
- package/es/elements/data/procRemoveDamageFix.d.ts +2 -0
- package/es/elements/data/procRemoveDamageFix.js +18 -0
- package/es/elements/data/procRestoreAttachments.d.ts +2 -0
- package/es/elements/data/procRestoreAttachments.js +18 -0
- package/es/elements/index.d.ts +9 -0
- package/es/elements/index.js +9 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +12 -11
- package/es/index.js +12 -11
- package/package.json +16 -40
- package/src/{Checkbox → components/Checkbox}/index.tsx +1 -1
- package/{es → src/components}/ColorCard/index.css +10 -6
- package/src/{DateNavigator → components/DateNavigator}/index.tsx +2 -0
- package/src/components/FilePond.tsx +312 -0
- package/src/{LinkedCardList → components/LinkedCardList}/index.scss +1 -1
- package/src/{PageBanner → components/PageBanner}/index.scss +1 -1
- package/src/{PageBanner → components/PageBanner}/index.tsx +0 -1
- package/src/{ProgressBar → components/ProgressBar}/index.scss +1 -1
- package/src/{Sidebar → components/Sidebar}/index.tsx +3 -2
- package/src/{SplitContainer → components/SplitContainer}/index.tsx +1 -1
- package/src/{ValueToggleGroup → components/ValueToggleGroup}/index.css +18 -16
- package/src/{ValueToggleGroup → components/ValueToggleGroup}/index.tsx +2 -1
- package/src/elements/ElementDamage/DamageFormButtons.tsx +35 -0
- package/src/elements/ElementDamage/DescriptionInput.tsx +111 -0
- package/src/elements/ElementDamage/DuplicateDamage/DesktopView.tsx +75 -0
- package/src/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.tsx +65 -0
- package/src/elements/ElementDamage/DuplicateDamage/PhoneView.tsx +42 -0
- package/src/elements/ElementDamage/DuplicateDamage/index.tsx +105 -0
- package/src/elements/ElementDamage/ElementNumberTextField.tsx +41 -0
- package/src/elements/ElementDamage/HiddenDamageFields.tsx +13 -0
- package/src/elements/ElementDamage/RegisterFix.tsx +100 -0
- package/src/elements/ElementDamage/SubmitButtons.tsx +40 -0
- package/src/elements/ElementDamage/TransportElementSelect.tsx +52 -0
- package/src/elements/ElementDamage/index.css +3 -0
- package/src/elements/ElementLookup.tsx +90 -0
- package/src/elements/ElementLookupDialog/BarcodeScanner/DeadIcon.tsx +12 -0
- package/src/elements/ElementLookupDialog/BarcodeScanner/Error.tsx +46 -0
- package/src/elements/ElementLookupDialog/BarcodeScanner/index.tsx +75 -0
- package/src/elements/ElementLookupDialog/BarcodeScanner/useScanner.ts +170 -0
- package/src/elements/ElementLookupDialog/HIDScanner/index.css +17 -0
- package/src/elements/ElementLookupDialog/HIDScanner/index.tsx +67 -0
- package/src/elements/ElementLookupDialog/HIDScanner/useHIDScanner.ts +30 -0
- package/src/elements/ElementLookupDialog/Manual/ManualForm.tsx +110 -0
- package/src/elements/ElementLookupDialog/getElement.ts +89 -0
- package/src/elements/ElementLookupDialog/index.tsx +211 -0
- package/src/elements/ElementLookupDialog/utils/Giai.ts +209 -0
- package/src/elements/ElementLookupDialog/utils/beep.ts +35 -0
- package/src/elements/ProjectSelect.tsx +128 -0
- package/src/elements/data/dsAttachments.ts +101 -0
- package/src/elements/data/dsCurrentAttachment.ts +89 -0
- package/src/elements/data/dsDamages.ts +166 -0
- package/src/elements/data/dsDamagesDuplicateCheck.ts +4 -0
- package/src/elements/data/dsElements.ts +56 -0
- package/src/elements/data/dsProjects.ts +60 -0
- package/src/elements/data/dsReportProjects.ts +4 -0
- package/src/elements/data/dsTransportElements.ts +68 -0
- package/src/elements/data/index.ts +11 -0
- package/src/elements/data/procApproveDamage.ts +19 -0
- package/src/elements/data/procDeleteAttachment.ts +19 -0
- package/src/elements/data/procDeleteDamage.ts +19 -0
- package/src/elements/data/procRemoveDamageFix.ts +19 -0
- package/src/elements/data/procRestoreAttachments.ts +19 -0
- package/src/elements/index.ts +9 -0
- package/src/index.scss +10 -10
- package/src/index.ts +13 -13
- /package/es/{Checkbox → components/Checkbox}/index.css +0 -0
- /package/es/{Checkbox → components/Checkbox}/index.d.ts +0 -0
- /package/es/{Checkbox → components/Checkbox}/index.js +0 -0
- /package/es/{ColorCard → components/ColorCard}/index.d.ts +0 -0
- /package/es/{ColorCard → components/ColorCard}/index.js +0 -0
- /package/es/{DateNavigator → components/DateNavigator}/index.css +0 -0
- /package/es/{DateNavigator → components/DateNavigator}/index.d.ts +0 -0
- /package/es/{LinkedCardList → components/LinkedCardList}/index.css +0 -0
- /package/es/{LinkedCardList → components/LinkedCardList}/index.d.ts +0 -0
- /package/es/{LinkedCardList → components/LinkedCardList}/index.js +0 -0
- /package/es/{PageBanner → components/PageBanner}/index.css +0 -0
- /package/es/{PageBanner → components/PageBanner}/index.d.ts +0 -0
- /package/es/{Portal → components/Portal}/index.d.ts +0 -0
- /package/es/{Portal → components/Portal}/index.js +0 -0
- /package/es/{ProgressBar → components/ProgressBar}/index.css +0 -0
- /package/es/{ProgressBar → components/ProgressBar}/index.d.ts +0 -0
- /package/es/{ProgressBar → components/ProgressBar}/index.js +0 -0
- /package/es/{Sidebar → components/Sidebar}/index.css +0 -0
- /package/es/{Sidebar → components/Sidebar}/index.js +0 -0
- /package/es/{Spinner → components/Spinner}/index.css +0 -0
- /package/es/{Spinner → components/Spinner}/index.d.ts +0 -0
- /package/es/{Spinner → components/Spinner}/index.js +0 -0
- /package/es/{SplitContainer → components/SplitContainer}/index.css +0 -0
- /package/es/{SplitContainer → components/SplitContainer}/index.d.ts +0 -0
- /package/es/{ValueToggleGroup → components/ValueToggleGroup}/index.d.ts +0 -0
- /package/src/{Checkbox → components/Checkbox}/index.scss +0 -0
- /package/src/{ColorCard → components/ColorCard}/index.tsx +0 -0
- /package/src/{DateNavigator → components/DateNavigator}/index.css +0 -0
- /package/src/{LinkedCardList → components/LinkedCardList}/index.tsx +0 -0
- /package/src/{Portal → components/Portal}/index.tsx +0 -0
- /package/src/{ProgressBar → components/ProgressBar}/index.tsx +0 -0
- /package/src/{Sidebar → components/Sidebar}/index.scss +0 -0
- /package/src/{Spinner → components/Spinner}/index.css +0 -0
- /package/src/{Spinner → components/Spinner}/index.tsx +0 -0
- /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 {
|
|
3
|
-
export { DateNavigator } from "./DateNavigator/index.js";
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
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 {
|
|
3
|
-
export { DateNavigator } from "./DateNavigator/index.js";
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
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.
|
|
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
|
-
"./
|
|
12
|
-
"
|
|
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.
|
|
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:
|
|
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,
|
|
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:
|
|
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:
|
|
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
|
+
}
|
|
@@ -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
|
|
|
@@ -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.
|
|
6
|
+
export type SidebarProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
7
7
|
open?: boolean;
|
|
8
8
|
onClose?: () => void;
|
|
9
|
-
overlayProps
|
|
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}
|