@oneblink/apps-react 8.12.0-beta.1 → 8.12.0-beta.10

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 (29) hide show
  1. package/dist/components/ImageCropper/CropModal.d.ts +2 -2
  2. package/dist/components/ImageCropper/CropModal.js +6 -6
  3. package/dist/components/ImageCropper/CropModal.js.map +1 -1
  4. package/dist/components/ImageCropper/index.d.ts +6 -7
  5. package/dist/components/ImageCropper/index.js +101 -51
  6. package/dist/components/ImageCropper/index.js.map +1 -1
  7. package/dist/components/ImageCropper/resource-components.d.ts +1 -8
  8. package/dist/components/ImageCropper/resource-components.js +8 -23
  9. package/dist/components/ImageCropper/resource-components.js.map +1 -1
  10. package/dist/form-elements/FormElementCamera.js +2 -2
  11. package/dist/form-elements/FormElementCamera.js.map +1 -1
  12. package/dist/form-elements/FormElementFile.js +2 -2
  13. package/dist/form-elements/FormElementFile.js.map +1 -1
  14. package/dist/hooks/useFormElementOptions.js +2 -2
  15. package/dist/hooks/useFormElementOptions.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/services/form-validation/validateSubmission.js +3 -1
  19. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  20. package/dist/services/form-validation/validators.js +2 -2
  21. package/dist/services/form-validation/validators.js.map +1 -1
  22. package/dist/services/injectableOptions.d.ts +2 -4
  23. package/dist/services/injectableOptions.js +10 -5
  24. package/dist/services/injectableOptions.js.map +1 -1
  25. package/dist/styles/camera.scss +25 -0
  26. package/dist/styles/modal.scss +2 -1
  27. package/dist/styles.css +255 -1
  28. package/dist/styles.scss +0 -3
  29. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"injectableOptions.js","sourceRoot":"","sources":["../../src/services/injectableOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { submissionService, typeCastService } from '@oneblink/sdk-core'\nimport { localisationService } from '@oneblink/apps'\nimport { v4 as uuidv4 } from 'uuid'\nimport { MiscTypes } from '@oneblink/types'\nimport { TaskContext } from '../hooks/useTaskContext'\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n contextElements,\n contextSubmission,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n contextElements?: FormTypes.FormElement[]\n contextSubmission?: {\n [name: string]: unknown\n }\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: rootSubmission,\n formElements: [...rootFormElements, ...(contextElements || [])],\n replaceRootInjectables(option, submission, formElements) {\n // Replace root level form element values\n const replaceableParams: Parameters<\n typeof localisationService.replaceInjectablesWithElementValues\n >[1] = {\n ...params,\n submission: { ...submission, ...contextSubmission },\n formElements,\n task: params.taskContext.task,\n taskGroup: params.taskContext.taskGroup,\n taskGroupInstance: params.taskContext.taskGroupInstance,\n excludeNestedElements: true,\n }\n const {\n text: label,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInLabel,\n } = localisationService.replaceInjectablesWithElementValues(\n option.label,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInLabel) {\n return\n }\n\n const {\n text: value,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInValue,\n } = localisationService.replaceInjectablesWithElementValues(\n option.value,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInValue) {\n return\n }\n\n return [\n label + ' ' + value,\n value,\n {\n value,\n label,\n },\n ]\n },\n prepareNestedInjectables(option, prepare) {\n return {\n value: prepare(option.value),\n label: prepare(option.label),\n }\n },\n })\n}\n\nexport default function processInjectableOption({\n option,\n submission,\n formElements,\n contextElements,\n contextSubmission,\n taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements?: FormTypes.FormElement[]\n contextSubmission?: {\n [name: string]: unknown\n }\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.ChoiceElementOption[] {\n const options = processInjectableDynamicOption({\n option,\n submission,\n formElements,\n taskContext,\n userProfile,\n contextElements,\n contextSubmission,\n })\n\n const generatedOptions: FormTypes.ChoiceElementOption[] = []\n\n options.forEach(({ label, value }) => {\n generatedOptions.push({\n ...option,\n id: options.size === 1 ? option.id : uuidv4(),\n label,\n value,\n })\n })\n\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\n elements: FormTypes.FormElement[]\n entries: SubmissionTypes.S3SubmissionData['submission'][]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n return elements.map<FormTypes.FormElement>((e) => {\n switch (e.type) {\n case 'page':\n case 'section': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // info elements on other pages/sections will need the parent definition\n contextElements,\n elements: e.elements,\n entries,\n taskContext,\n userProfile,\n }),\n }\n }\n case 'form': {\n if (Array.isArray(e.elements)) {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // sub-forms do not have context of parent elements\n contextElements: e.elements,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n if (entry[e.name]) {\n memo.push(\n entry[\n e.name\n ] as SubmissionTypes.S3SubmissionData['submission'],\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n } else {\n return e\n }\n }\n case 'repeatableSet': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // repeatable set entries may only know about elements within entry\n contextElements,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n const nestedEntries = entry[e.name]\n if (Array.isArray(nestedEntries)) {\n memo.push(\n ...(nestedEntries as SubmissionTypes.S3SubmissionData['submission'][]),\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n }\n default: {\n const optionsElement = typeCastService.formElements.toOptionsElement(e)\n if (optionsElement) {\n return {\n ...optionsElement,\n options: entries.reduce<FormTypes.ChoiceElementOption[]>(\n (newOptions, submission) => {\n optionsElement.options?.forEach((o) => {\n const injected = processInjectableOption({\n option: o,\n submission,\n formElements: elements,\n contextElements,\n taskContext,\n userProfile,\n })\n\n newOptions.push(\n ...injected.filter((generatedOption) => {\n return !newOptions.some(\n (addedOption) =>\n addedOption.value === generatedOption.value,\n )\n }),\n )\n })\n return newOptions\n },\n [],\n ),\n }\n }\n return e\n }\n }\n })\n}\n\nexport function injectOptionsAcrossAllElements({\n submission,\n ...params\n}: {\n elements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n // We iterate over entries as an array of submission objects because\n // child elements of a repeatable set that have injected options\n // need to include all of the injected options from the same elements\n // in sibling entries within the set. Otherwise we will not have the\n // labels for each available option to display the submission.\n return injectOptionsAcrossEntriesElements({\n ...params,\n entries: [submission],\n })\n}\n"]}
1
+ {"version":3,"file":"injectableOptions.js","sourceRoot":"","sources":["../../src/services/injectableOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { submissionService, typeCastService } from '@oneblink/sdk-core'\nimport { localisationService } from '@oneblink/apps'\nimport { v4 as uuidv4 } from 'uuid'\nimport { MiscTypes } from '@oneblink/types'\nimport { TaskContext } from '../hooks/useTaskContext'\ntype Option = Pick<FormTypes.ChoiceElementOption, 'value' | 'label'>\n\nfunction processInjectableDynamicOption({\n option: resource,\n submission: rootSubmission,\n formElements: rootFormElements,\n contextElements,\n contextSubmission,\n ...params\n}: {\n option: Option\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n contextSubmission?: SubmissionTypes.S3SubmissionData['submission']\n}): Map<string, Option> {\n return submissionService.processInjectablesInCustomResource<Option>({\n resource,\n submission: { ...rootSubmission, ...contextSubmission },\n formElements: [...rootFormElements, ...contextElements],\n replaceRootInjectables(option, submission, formElements) {\n // Replace root level form element values\n const replaceableParams: Parameters<\n typeof localisationService.replaceInjectablesWithElementValues\n >[1] = {\n ...params,\n submission,\n formElements,\n task: params.taskContext.task,\n taskGroup: params.taskContext.taskGroup,\n taskGroupInstance: params.taskContext.taskGroupInstance,\n excludeNestedElements: true,\n }\n const {\n text: label,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInLabel,\n } = localisationService.replaceInjectablesWithElementValues(\n option.label,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInLabel) {\n return\n }\n\n const {\n text: value,\n hadAllInjectablesReplaced: hadAllInjectablesReplacedInValue,\n } = localisationService.replaceInjectablesWithElementValues(\n option.value,\n replaceableParams,\n )\n if (!hadAllInjectablesReplacedInValue) {\n return\n }\n\n return [\n label + ' ' + value,\n value,\n {\n value,\n label,\n },\n ]\n },\n prepareNestedInjectables(option, prepare) {\n return {\n value: prepare(option.value),\n label: prepare(option.label),\n }\n },\n })\n}\n\nexport default function processInjectableOption({\n option,\n submission,\n formElements,\n contextElements,\n contextSubmission,\n taskContext,\n userProfile,\n}: {\n option: FormTypes.ChoiceElementOption\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.ChoiceElementOption[] {\n const options = processInjectableDynamicOption({\n option,\n submission,\n formElements,\n taskContext,\n userProfile,\n contextSubmission,\n contextElements,\n })\n\n const generatedOptions: FormTypes.ChoiceElementOption[] = []\n\n options.forEach(({ label, value }) => {\n generatedOptions.push({\n ...option,\n id: options.size === 1 ? option.id : uuidv4(),\n label,\n value,\n })\n })\n return generatedOptions\n}\n\nfunction injectOptionsAcrossEntriesElements({\n contextElements,\n contextSubmission,\n elements,\n entries,\n taskContext,\n userProfile,\n}: {\n contextElements: FormTypes.FormElement[]\n contextSubmission: SubmissionTypes.S3SubmissionData['submission']\n elements: FormTypes.FormElement[]\n entries: SubmissionTypes.S3SubmissionData['submission'][]\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n return elements.map<FormTypes.FormElement>((e) => {\n switch (e.type) {\n case 'page':\n case 'section': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // info elements on other pages/sections will need the parent definition\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries,\n taskContext,\n userProfile,\n }),\n }\n }\n case 'form': {\n if (Array.isArray(e.elements)) {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // sub-forms do not have context of parent elements\n contextElements: e.elements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n if (entry[e.name]) {\n memo.push(\n entry[\n e.name\n ] as SubmissionTypes.S3SubmissionData['submission'],\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n } else {\n return e\n }\n }\n case 'repeatableSet': {\n return {\n ...e,\n elements: injectOptionsAcrossEntriesElements({\n // repeatable set entries may only know about elements within entry\n contextElements,\n contextSubmission,\n elements: e.elements,\n entries: entries.reduce<\n SubmissionTypes.S3SubmissionData['submission'][]\n >((memo, entry) => {\n const nestedEntries = entry[e.name]\n if (Array.isArray(nestedEntries)) {\n memo.push(\n ...(nestedEntries as SubmissionTypes.S3SubmissionData['submission'][]),\n )\n }\n return memo\n }, []),\n taskContext,\n userProfile,\n }),\n }\n }\n default: {\n const optionsElement = typeCastService.formElements.toOptionsElement(e)\n if (optionsElement) {\n return {\n ...optionsElement,\n options: entries.reduce<FormTypes.ChoiceElementOption[]>(\n (newOptions, submission) => {\n optionsElement.options?.forEach((o) => {\n const injected = processInjectableOption({\n option: o,\n submission,\n contextSubmission,\n formElements: elements,\n contextElements,\n taskContext,\n userProfile,\n })\n\n newOptions.push(\n ...injected.filter((generatedOption) => {\n return !newOptions.some(\n (addedOption) =>\n addedOption.value === generatedOption.value,\n )\n }),\n )\n })\n return newOptions\n },\n [],\n ),\n }\n }\n return e\n }\n }\n })\n}\n\nexport function injectOptionsAcrossAllElements({\n submission,\n ...params\n}: {\n elements: FormTypes.FormElement[]\n contextElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n taskContext: TaskContext\n userProfile: MiscTypes.UserProfile | undefined\n}): FormTypes.FormElement[] {\n // We iterate over entries as an array of submission objects because\n // child elements of a repeatable set that have injected options\n // need to include all of the injected options from the same elements\n // in sibling entries within the set. Otherwise we will not have the\n // labels for each available option to display the submission.\n return injectOptionsAcrossEntriesElements({\n ...params,\n contextSubmission: submission,\n entries: [submission],\n })\n}\n"]}
@@ -41,6 +41,7 @@
41
41
  justify-content: center;
42
42
  background: $white;
43
43
  padding: $size-4;
44
+ min-height: 0%;
44
45
  }
45
46
 
46
47
  .ob-annotation__content {
@@ -108,8 +109,32 @@
108
109
  }
109
110
 
110
111
  .ob-cropper__container {
112
+ //
113
+ // Third Party
114
+ //
115
+ --rc-drag-handle-size: 12px;
116
+ --rc-drag-handle-mobile-size: 24px;
117
+ --rc-drag-handle-bg-colour: rgba(0, 0, 0, 0.2);
118
+ --rc-drag-bar-size: 6px; // The invisible grip size of the crop selection edges
119
+ --rc-border-color: rgba(255, 255, 255, 0.7);
120
+ --rc-focus-color: #0088ff;
121
+ @import 'react-image-crop/src/ReactCrop.scss';
122
+
111
123
  width: 100%;
112
124
  height: 100%;
113
125
  display: flex;
114
126
  flex-direction: column;
127
+
128
+ .ob-cropper__cropper-full-height {
129
+ height: 100%;
130
+ }
131
+ .ob-cropper__cropper {
132
+ .ReactCrop__child-wrapper {
133
+ height: 100%;
134
+
135
+ .ob-cropper__image {
136
+ max-height: 100%;
137
+ }
138
+ }
139
+ }
115
140
  }
@@ -1,6 +1,7 @@
1
1
  .modal {
2
2
  // Need this to make sure tool tips do not cover models
3
- z-index: 100000;
3
+
4
+ z-index: 400;
4
5
 
5
6
  @media only screen and (max-width: $tablet) {
6
7
  padding: 0 $size-8;
package/dist/styles.css CHANGED
@@ -7916,7 +7916,7 @@ button on-loading {
7916
7916
  }
7917
7917
 
7918
7918
  .modal {
7919
- z-index: 100000;
7919
+ z-index: 400;
7920
7920
  }
7921
7921
  @media only screen and (max-width: 769px) {
7922
7922
  .modal {
@@ -8148,6 +8148,7 @@ button on-loading {
8148
8148
  justify-content: center;
8149
8149
  background: hsl(0, 0%, 100%);
8150
8150
  padding: 1.5rem;
8151
+ min-height: 0%;
8151
8152
  }
8152
8153
 
8153
8154
  .ob-annotation__content {
@@ -8203,11 +8204,264 @@ button on-loading {
8203
8204
  }
8204
8205
 
8205
8206
  .ob-cropper__container {
8207
+ --rc-drag-handle-size: 12px;
8208
+ --rc-drag-handle-mobile-size: 24px;
8209
+ --rc-drag-handle-bg-colour: rgba(0, 0, 0, 0.2);
8210
+ --rc-drag-bar-size: 6px;
8211
+ --rc-border-color: rgba(255, 255, 255, 0.7);
8212
+ --rc-focus-color: #0088ff;
8206
8213
  width: 100%;
8207
8214
  height: 100%;
8208
8215
  display: flex;
8209
8216
  flex-direction: column;
8210
8217
  }
8218
+ @keyframes marching-ants {
8219
+ 0% {
8220
+ background-position: 0 0, 0 100%, 0 0, 100% 0;
8221
+ }
8222
+ 100% {
8223
+ background-position: 20px 0, -20px 100%, 0 -20px, 100% 20px;
8224
+ }
8225
+ }
8226
+ .ob-cropper__container :root {
8227
+ --rc-drag-handle-size: 12px;
8228
+ --rc-drag-handle-mobile-size: 24px;
8229
+ --rc-drag-handle-bg-colour: rgba(0, 0, 0, 0.2);
8230
+ --rc-drag-bar-size: 6px;
8231
+ --rc-border-color: rgba(255, 255, 255, 0.7);
8232
+ --rc-focus-color: #0088ff;
8233
+ }
8234
+ .ob-cropper__container .ReactCrop {
8235
+ position: relative;
8236
+ display: inline-block;
8237
+ cursor: crosshair;
8238
+ max-width: 100%;
8239
+ }
8240
+ .ob-cropper__container .ReactCrop *, .ob-cropper__container .ReactCrop *::before, .ob-cropper__container .ReactCrop *::after {
8241
+ box-sizing: border-box;
8242
+ }
8243
+ .ob-cropper__container .ReactCrop--disabled, .ob-cropper__container .ReactCrop--locked {
8244
+ cursor: inherit;
8245
+ }
8246
+ .ob-cropper__container .ReactCrop__child-wrapper {
8247
+ overflow: hidden;
8248
+ max-height: inherit;
8249
+ }
8250
+ .ob-cropper__container .ReactCrop__child-wrapper > img, .ob-cropper__container .ReactCrop__child-wrapper > video {
8251
+ display: block;
8252
+ max-width: 100%;
8253
+ max-height: inherit;
8254
+ }
8255
+ .ob-cropper__container .ReactCrop:not(.ob-cropper__container .ReactCrop--disabled) .ob-cropper__container .ReactCrop__child-wrapper > img, .ob-cropper__container .ReactCrop:not(.ob-cropper__container .ReactCrop--disabled) .ob-cropper__container .ReactCrop__child-wrapper > video {
8256
+ touch-action: none;
8257
+ }
8258
+ .ob-cropper__container .ReactCrop:not(.ob-cropper__container .ReactCrop--disabled) .ob-cropper__container .ReactCrop__crop-selection {
8259
+ touch-action: none;
8260
+ }
8261
+ .ob-cropper__container .ReactCrop__crop-mask {
8262
+ position: absolute;
8263
+ top: 0;
8264
+ right: 0;
8265
+ bottom: 0;
8266
+ left: 0;
8267
+ pointer-events: none;
8268
+ width: calc(100% + 0.5px);
8269
+ height: calc(100% + 0.5px);
8270
+ }
8271
+ .ob-cropper__container .ReactCrop__crop-selection {
8272
+ position: absolute;
8273
+ top: 0;
8274
+ left: 0;
8275
+ transform: translate3d(0, 0, 0);
8276
+ cursor: move;
8277
+ }
8278
+ .ReactCrop--disabled .ob-cropper__container .ReactCrop__crop-selection {
8279
+ cursor: inherit;
8280
+ }
8281
+ .ReactCrop--circular-crop .ob-cropper__container .ReactCrop__crop-selection {
8282
+ border-radius: 50%;
8283
+ }
8284
+ .ReactCrop--circular-crop .ob-cropper__container .ReactCrop__crop-selection::after {
8285
+ pointer-events: none;
8286
+ content: "";
8287
+ position: absolute;
8288
+ top: -1px;
8289
+ right: -1px;
8290
+ bottom: -1px;
8291
+ left: -1px;
8292
+ border: 1px solid var(--rc-border-color);
8293
+ opacity: 0.3;
8294
+ }
8295
+ .ReactCrop--no-animate .ob-cropper__container .ReactCrop__crop-selection {
8296
+ outline: 1px dashed white;
8297
+ }
8298
+ .ob-cropper__container .ReactCrop__crop-selection:not(.ReactCrop--no-animate .ob-cropper__container .ReactCrop__crop-selection) {
8299
+ animation: marching-ants 1s;
8300
+ background-image: linear-gradient(to right, #fff 50%, #444 50%), linear-gradient(to right, #fff 50%, #444 50%), linear-gradient(to bottom, #fff 50%, #444 50%), linear-gradient(to bottom, #fff 50%, #444 50%);
8301
+ background-size: 10px 1px, 10px 1px, 1px 10px, 1px 10px;
8302
+ background-position: 0 0, 0 100%, 0 0, 100% 0;
8303
+ background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
8304
+ color: #fff;
8305
+ animation-play-state: running;
8306
+ animation-timing-function: linear;
8307
+ animation-iteration-count: infinite;
8308
+ }
8309
+ .ob-cropper__container .ReactCrop__crop-selection:focus {
8310
+ outline: 2px solid var(--rc-focus-color);
8311
+ outline-offset: -1px;
8312
+ }
8313
+ .ob-cropper__container .ReactCrop--invisible-crop .ob-cropper__container .ReactCrop__crop-mask, .ob-cropper__container .ReactCrop--invisible-crop .ob-cropper__container .ReactCrop__crop-selection {
8314
+ display: none;
8315
+ }
8316
+ .ob-cropper__container .ReactCrop__rule-of-thirds-vt::before, .ob-cropper__container .ReactCrop__rule-of-thirds-vt::after, .ob-cropper__container .ReactCrop__rule-of-thirds-hz::before, .ob-cropper__container .ReactCrop__rule-of-thirds-hz::after {
8317
+ content: "";
8318
+ display: block;
8319
+ position: absolute;
8320
+ background-color: rgba(255, 255, 255, 0.4);
8321
+ }
8322
+ .ob-cropper__container .ReactCrop__rule-of-thirds-vt::before, .ob-cropper__container .ReactCrop__rule-of-thirds-vt::after {
8323
+ width: 1px;
8324
+ height: 100%;
8325
+ }
8326
+ .ob-cropper__container .ReactCrop__rule-of-thirds-vt::before {
8327
+ left: 33.3333%;
8328
+ left: 33.3333333333%;
8329
+ }
8330
+ .ob-cropper__container .ReactCrop__rule-of-thirds-vt::after {
8331
+ left: 66.6666%;
8332
+ left: 66.6666666667%;
8333
+ }
8334
+ .ob-cropper__container .ReactCrop__rule-of-thirds-hz::before, .ob-cropper__container .ReactCrop__rule-of-thirds-hz::after {
8335
+ width: 100%;
8336
+ height: 1px;
8337
+ }
8338
+ .ob-cropper__container .ReactCrop__rule-of-thirds-hz::before {
8339
+ top: 33.3333%;
8340
+ top: 33.3333333333%;
8341
+ }
8342
+ .ob-cropper__container .ReactCrop__rule-of-thirds-hz::after {
8343
+ top: 66.6666%;
8344
+ top: 66.6666666667%;
8345
+ }
8346
+ .ob-cropper__container .ReactCrop__drag-handle {
8347
+ position: absolute;
8348
+ width: var(--rc-drag-handle-size);
8349
+ height: var(--rc-drag-handle-size);
8350
+ background-color: var(--rc-drag-handle-bg-colour);
8351
+ border: 1px solid var(--rc-border-color);
8352
+ }
8353
+ .ob-cropper__container .ReactCrop__drag-handle:focus {
8354
+ background: var(--rc-focus-color);
8355
+ }
8356
+ .ob-cropper__container .ReactCrop .ord-nw {
8357
+ top: 0;
8358
+ left: 0;
8359
+ transform: translate(-50%, -50%);
8360
+ cursor: nw-resize;
8361
+ }
8362
+ .ob-cropper__container .ReactCrop .ord-n {
8363
+ top: 0;
8364
+ left: 50%;
8365
+ transform: translate(-50%, -50%);
8366
+ cursor: n-resize;
8367
+ }
8368
+ .ob-cropper__container .ReactCrop .ord-ne {
8369
+ top: 0;
8370
+ right: 0;
8371
+ transform: translate(50%, -50%);
8372
+ cursor: ne-resize;
8373
+ }
8374
+ .ob-cropper__container .ReactCrop .ord-e {
8375
+ top: 50%;
8376
+ right: 0;
8377
+ transform: translate(50%, -50%);
8378
+ cursor: e-resize;
8379
+ }
8380
+ .ob-cropper__container .ReactCrop .ord-se {
8381
+ bottom: 0;
8382
+ right: 0;
8383
+ transform: translate(50%, 50%);
8384
+ cursor: se-resize;
8385
+ }
8386
+ .ob-cropper__container .ReactCrop .ord-s {
8387
+ bottom: 0;
8388
+ left: 50%;
8389
+ transform: translate(-50%, 50%);
8390
+ cursor: s-resize;
8391
+ }
8392
+ .ob-cropper__container .ReactCrop .ord-sw {
8393
+ bottom: 0;
8394
+ left: 0;
8395
+ transform: translate(-50%, 50%);
8396
+ cursor: sw-resize;
8397
+ }
8398
+ .ob-cropper__container .ReactCrop .ord-w {
8399
+ top: 50%;
8400
+ left: 0;
8401
+ transform: translate(-50%, -50%);
8402
+ cursor: w-resize;
8403
+ }
8404
+ .ob-cropper__container .ReactCrop__disabled .ob-cropper__container .ReactCrop__drag-handle {
8405
+ cursor: inherit;
8406
+ }
8407
+ .ob-cropper__container .ReactCrop__drag-bar {
8408
+ position: absolute;
8409
+ }
8410
+ .ob-cropper__container .ReactCrop__drag-bar.ord-n {
8411
+ top: 0;
8412
+ left: 0;
8413
+ width: 100%;
8414
+ height: var(--rc-drag-bar-size);
8415
+ transform: translateY(-50%);
8416
+ }
8417
+ .ob-cropper__container .ReactCrop__drag-bar.ord-e {
8418
+ right: 0;
8419
+ top: 0;
8420
+ width: var(--rc-drag-bar-size);
8421
+ height: 100%;
8422
+ transform: translateX(50%);
8423
+ }
8424
+ .ob-cropper__container .ReactCrop__drag-bar.ord-s {
8425
+ bottom: 0;
8426
+ left: 0;
8427
+ width: 100%;
8428
+ height: var(--rc-drag-bar-size);
8429
+ transform: translateY(50%);
8430
+ }
8431
+ .ob-cropper__container .ReactCrop__drag-bar.ord-w {
8432
+ top: 0;
8433
+ left: 0;
8434
+ width: var(--rc-drag-bar-size);
8435
+ height: 100%;
8436
+ transform: translateX(-50%);
8437
+ }
8438
+ .ob-cropper__container .ReactCrop--new-crop .ob-cropper__container .ReactCrop__drag-bar, .ob-cropper__container .ReactCrop--new-crop .ob-cropper__container .ReactCrop__drag-handle, .ob-cropper__container .ReactCrop--fixed-aspect .ob-cropper__container .ReactCrop__drag-bar {
8439
+ display: none;
8440
+ }
8441
+ .ob-cropper__container .ReactCrop--fixed-aspect .ob-cropper__container .ReactCrop__drag-handle.ord-n, .ob-cropper__container .ReactCrop--fixed-aspect .ob-cropper__container .ReactCrop__drag-handle.ord-e, .ob-cropper__container .ReactCrop--fixed-aspect .ob-cropper__container .ReactCrop__drag-handle.ord-s, .ob-cropper__container .ReactCrop--fixed-aspect .ob-cropper__container .ReactCrop__drag-handle.ord-w {
8442
+ display: none;
8443
+ }
8444
+ @media (pointer: coarse) {
8445
+ .ob-cropper__container .ReactCrop .ord-n,
8446
+ .ob-cropper__container .ReactCrop .ord-e,
8447
+ .ob-cropper__container .ReactCrop .ord-s,
8448
+ .ob-cropper__container .ReactCrop .ord-w {
8449
+ display: none;
8450
+ }
8451
+ .ob-cropper__container .ReactCrop__drag-handle {
8452
+ width: var(--rc-drag-handle-mobile-size);
8453
+ height: var(--rc-drag-handle-mobile-size);
8454
+ }
8455
+ }
8456
+ .ob-cropper__container .ob-cropper__cropper-full-height {
8457
+ height: 100%;
8458
+ }
8459
+ .ob-cropper__container .ob-cropper__cropper .ReactCrop__child-wrapper {
8460
+ height: 100%;
8461
+ }
8462
+ .ob-cropper__container .ob-cropper__cropper .ReactCrop__child-wrapper .ob-cropper__image {
8463
+ max-height: 100%;
8464
+ }
8211
8465
 
8212
8466
  .ob-quill-content > * {
8213
8467
  cursor: text;
package/dist/styles.scss CHANGED
@@ -148,6 +148,3 @@ $section-padding-mobile: $section-padding-mobile-y $section-padding-mobile-x;
148
148
  @import './styles/nsw-point-address.scss';
149
149
  @import './styles/nsw-point-cadastral-parcel.scss';
150
150
  @import './styles/downloadable-files.scss';
151
- //
152
- // Third Party
153
- //
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/apps-react",
3
3
  "description": "Helper functions for OneBlink apps in ReactJS.",
4
- "version": "8.12.0-beta.1",
4
+ "version": "8.12.0-beta.10",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"
@@ -11,7 +11,7 @@
11
11
  "@emotion/react": "^11.11.3",
12
12
  "@emotion/styled": "^11.11.0",
13
13
  "@nylas/react": "^1.3.1",
14
- "@oneblink/sdk-core": "^8.8.1-beta.3",
14
+ "@oneblink/sdk-core": "^8.9.0-beta.2",
15
15
  "@react-google-maps/api": "2.19.2",
16
16
  "blueimp-load-image": "^5.16.0",
17
17
  "bulma": "^0.9.4",
@@ -32,8 +32,8 @@
32
32
  "morph-expressions": "^1.1.1",
33
33
  "qrcode.react": "^4.1.0",
34
34
  "query-string": "^8.1.0",
35
- "react-easy-crop": "^5.5.0",
36
35
  "react-google-recaptcha": "^3.1.0",
36
+ "react-image-crop": "^11.0.10",
37
37
  "react-input-mask": "^2.0.4",
38
38
  "react-signature-canvas": "^1.0.6",
39
39
  "react-table": "^7.8.0",