@wix/form-public 0.521.0 → 0.523.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/index.cjs CHANGED
@@ -258,7 +258,7 @@ function deriveError(validation, error, options) {
258
258
  if (!error) {
259
259
  return error;
260
260
  }
261
- return derivePatternError(error) ?? deriveCharacterLengthError(validation, error) ?? deriveItemsCountError(validation, error) ?? deriveNumericValueError(validation, error) ?? deriveDateFieldError(validation, error, options?.value) ?? deriveDateTimeFieldError(validation, error, options?.value) ?? error;
261
+ return derivePatternError(error) ?? deriveCharacterLengthError(validation, error) ?? deriveItemsCountError(validation, error) ?? deriveNumericValueError(validation, error) ?? deriveDateTimeFieldError(validation, error, options?.value) ?? deriveDateFieldError(validation, error, options?.value) ?? error;
262
262
  }
263
263
  function derivePatternError(error) {
264
264
  if (!error || error.errorType !== types.ErrorType.PATTERN_ERROR) {
@@ -61275,6 +61275,18 @@ var SignaturePad = class _SignaturePad extends SignatureEventTarget {
61275
61275
  }
61276
61276
  };
61277
61277
  var useId2 = typeof React173__default.default.useId === "function" ? React173__default.default.useId : () => React173.useRef(generateUUID()).current;
61278
+ var hasUploadTab = ({ properties }) => properties.uploadEnabled === true;
61279
+ var isForceableSignature = (field, mode) => field.fieldType === FIELD_TYPES.SIGNATURE && !field.properties.hidden && !field.properties.disabled && !field.properties.readOnly && (mode !== "upload" || hasUploadTab(field));
61280
+ var byLayoutPosition2 = (first2, second) => first2.layout.row - second.layout.row || first2.layout.column - second.layout.column;
61281
+ var useForcedSignatureMode = (fieldId) => {
61282
+ const forcedMode = useElementProps().signatureContainer?.signatureMode;
61283
+ const formView = React173.useContext(FormViewContext);
61284
+ const firstSignatureId = React173.useMemo(() => formView && !formView.parentId && forcedMode ? formView.fields.filter((field) => isForceableSignature(field, forcedMode)).sort(byLayoutPosition2)[0]?.id : void 0, [
61285
+ formView,
61286
+ forcedMode
61287
+ ]);
61288
+ return firstSignatureId === fieldId ? forcedMode : void 0;
61289
+ };
61278
61290
 
61279
61291
  // ../form-fields/dist/esm/ui/signature-field/signature-types.js
61280
61292
  var SignatureFormat = /* @__PURE__ */ (function(SignatureFormat2) {
@@ -61805,8 +61817,14 @@ var Signature = ({ children }) => {
61805
61817
  renderDescription: () => /* @__PURE__ */ React173__default.default.createElement(React173__default.default.Fragment, null, errorElement, descriptionElement)
61806
61818
  });
61807
61819
  };
61808
- var Input14 = ({ children }) => {
61809
- const { value, onChange, target, readOnly } = useFieldPropsV2();
61820
+ var VIEW_BY_FORCED_MODE = {
61821
+ [SignatureMode.DRAW]: SignatureView.DRAW,
61822
+ [SignatureMode.TYPE]: SignatureView.TYPE,
61823
+ [SignatureMode.UPLOAD]: SignatureView.UPLOAD
61824
+ };
61825
+ var Input14 = ({ children, className }) => {
61826
+ const { id: id6, value, onChange, target, readOnly } = useFieldPropsV2();
61827
+ const forcedMode = useForcedSignatureMode(id6);
61810
61828
  const { signatureMode, setSignatureMode, handleClear, clearable, signatureView, signatureValueForView, handleChange, handleBeforeChange } = useSignatureField({
61811
61829
  target,
61812
61830
  value,
@@ -61815,16 +61833,19 @@ var Input14 = ({ children }) => {
61815
61833
  const headerElement = findChildOfType(children, Input14.Header);
61816
61834
  const valueElement = findChildOfType(children, Input14.Value);
61817
61835
  const internalProps = {
61818
- signatureMode,
61836
+ signatureMode: forcedMode ?? signatureMode,
61819
61837
  setSignatureMode,
61820
61838
  handleClear,
61821
61839
  clearable,
61822
- signatureView,
61823
- signatureValueForView,
61840
+ signatureView: forcedMode ? VIEW_BY_FORCED_MODE[forcedMode] : signatureView,
61841
+ signatureValueForView: forcedMode ? void 0 : signatureValueForView,
61824
61842
  handleChange,
61825
61843
  handleBeforeChange
61826
61844
  };
61827
- return /* @__PURE__ */ React173__default.default.createElement(React173__default.default.Fragment, null, !readOnly && applyInternalProps(headerElement, internalProps), applyInternalProps(valueElement, internalProps));
61845
+ return /* @__PURE__ */ React173__default.default.createElement("div", {
61846
+ className,
61847
+ "data-hook": "signature-container"
61848
+ }, !readOnly && applyInternalProps(headerElement, internalProps), applyInternalProps(valueElement, internalProps));
61828
61849
  };
61829
61850
  var Header = ({ children, className, ...internal }) => {
61830
61851
  const { signatureMode, setSignatureMode, clearable, handleClear } = internal;
@@ -62127,51 +62148,67 @@ var TypeValue = ({ className, placeholder, ...internal }) => {
62127
62148
  className
62128
62149
  });
62129
62150
  };
62130
- var HIDDEN_FILE_INPUT_STYLE = {
62131
- display: "none"
62132
- };
62133
- var Upload = ({ children, className, imageAlt, ...internal }) => {
62151
+ var Upload = ({ children, className, ...internal }) => {
62134
62152
  const { value, onChange, disabled, readOnly, onBlur, onFocus } = internal;
62135
- const { inputId } = useFieldAttributes();
62136
- const surfaceProps = useSurfaceProps();
62153
+ const { labelId, ariaDescribedBy } = useFieldAttributes();
62137
62154
  const buttonElement = findChildOfType(children, Upload.Button);
62138
- const fileInputRef = React173.useRef(null);
62139
- const handleFileChange = React173.useCallback((event) => {
62140
- const files = event.target.files;
62141
- if (!files || files.length === 0) {
62155
+ const previewElement = findChildOfType(children, Upload.Preview);
62156
+ const handleFiles = React173.useCallback((files) => {
62157
+ const file = files[0];
62158
+ if (!file) {
62142
62159
  onChange(null);
62143
62160
  return;
62144
62161
  }
62145
- const file = files[0];
62146
62162
  const fileReader = new FileReader();
62147
- fileReader.onload = function() {
62148
- onChange(dataUrlToWixFile(this.result, file.name));
62163
+ fileReader.onload = () => {
62164
+ onChange(dataUrlToWixFile(fileReader.result, file.name));
62149
62165
  };
62150
62166
  fileReader.readAsDataURL(file);
62151
62167
  }, [
62152
62168
  onChange
62153
62169
  ]);
62154
62170
  const hasUploadedImage = value && isExternalImage(value);
62155
- return /* @__PURE__ */ React173__default.default.createElement("div", {
62171
+ if (hasUploadedImage) {
62172
+ return applyInternalProps(previewElement, {
62173
+ value
62174
+ }) ?? null;
62175
+ }
62176
+ return /* @__PURE__ */ React173__default.default.createElement(reactAriaComponents.DropZone, {
62156
62177
  className,
62157
- "data-has-value": hasUploadedImage || void 0,
62158
- ...surfaceProps
62159
- }, /* @__PURE__ */ React173__default.default.createElement("input", {
62160
- ref: fileInputRef,
62161
- type: "file",
62162
- accept: "image/*",
62163
- onChange: handleFileChange,
62164
- disabled: disabled || readOnly,
62165
- style: HIDDEN_FILE_INPUT_STYLE,
62166
- "aria-hidden": "true",
62167
- tabIndex: -1
62168
- }), !hasUploadedImage && applyInternalProps(buttonElement, {
62169
- fileInputRef,
62178
+ isDisabled: disabled || readOnly,
62179
+ "aria-labelledby": labelId,
62180
+ "aria-describedby": ariaDescribedBy,
62181
+ "data-hook": "signature-upload-drop-zone",
62182
+ onDrop: async (event) => {
62183
+ for (const item of event.items) {
62184
+ if (item.kind === "file" && item.type.startsWith("image/")) {
62185
+ const file = await item.getFile();
62186
+ if (file) {
62187
+ handleFiles([
62188
+ file
62189
+ ]);
62190
+ return;
62191
+ }
62192
+ }
62193
+ }
62194
+ }
62195
+ }, applyInternalProps(buttonElement, {
62196
+ onSelectFiles: handleFiles,
62170
62197
  disabled,
62171
62198
  readOnly,
62172
62199
  onBlur,
62173
62200
  onFocus
62174
- }), hasUploadedImage && (value.url ? /* @__PURE__ */ React173__default.default.createElement("img", {
62201
+ }));
62202
+ };
62203
+ var UploadPreview = ({ className, imageAlt, ...internal }) => {
62204
+ const { value } = internal;
62205
+ const { inputId } = useFieldAttributes();
62206
+ const surfaceProps = useSurfaceProps();
62207
+ return /* @__PURE__ */ React173__default.default.createElement("div", {
62208
+ className,
62209
+ "data-has-value": true,
62210
+ ...surfaceProps
62211
+ }, value.url ? /* @__PURE__ */ React173__default.default.createElement("img", {
62175
62212
  id: inputId,
62176
62213
  src: value.url,
62177
62214
  alt: value.displayName || imageAlt,
@@ -62179,30 +62216,44 @@ var Upload = ({ children, className, imageAlt, ...internal }) => {
62179
62216
  }) : /* @__PURE__ */ React173__default.default.createElement("span", {
62180
62217
  id: inputId,
62181
62218
  "data-hook": "signature-image"
62182
- }, value.displayName || imageAlt)));
62219
+ }, value.displayName || imageAlt));
62183
62220
  };
62184
- var UploadButton = ({ children, className, ...internal }) => {
62185
- const { fileInputRef, disabled, readOnly, onBlur, onFocus } = internal;
62221
+ var UploadButton = ({ children, className, onHoverStart, onHoverEnd, ...internal }) => {
62222
+ const { onSelectFiles, disabled, readOnly, onBlur, onFocus } = internal;
62186
62223
  const { inputId, ariaDescribedBy, labelId } = useFieldAttributes();
62187
62224
  const textId = useId2();
62188
- const handlePress = React173.useCallback(() => {
62189
- fileInputRef.current?.click();
62190
- }, [
62191
- fileInputRef
62192
- ]);
62193
- return /* @__PURE__ */ React173__default.default.createElement(reactAriaComponents.Button, {
62225
+ const hasTextElement = Boolean(findChildOfType(children, UploadButton.Text));
62226
+ const content = hasTextElement ? React173.Children.map(children, (child) => /* @__PURE__ */ React173.isValidElement(child) && child.type === UploadButton.Text ? applyInternalProps(child, {
62227
+ textId
62228
+ }) : child) : /* @__PURE__ */ React173__default.default.createElement("span", {
62229
+ id: textId
62230
+ }, children);
62231
+ return /* @__PURE__ */ React173__default.default.createElement(reactAriaComponents.FileTrigger, {
62232
+ acceptedFileTypes: [
62233
+ "image/*"
62234
+ ],
62235
+ onSelect: (fileList) => {
62236
+ onSelectFiles(fileList ? Array.from(fileList) : []);
62237
+ }
62238
+ }, /* @__PURE__ */ React173__default.default.createElement(reactAriaComponents.Button, {
62194
62239
  id: inputId,
62195
- onPress: handlePress,
62196
62240
  onBlur,
62197
62241
  onFocus,
62198
62242
  isDisabled: disabled || readOnly,
62199
62243
  "aria-labelledby": `${labelId} ${textId}`,
62200
62244
  "aria-describedby": ariaDescribedBy,
62201
62245
  "data-hook": "signature-upload",
62246
+ className,
62247
+ onHoverStart,
62248
+ onHoverEnd
62249
+ }, content));
62250
+ };
62251
+ var UploadButtonText = ({ children, className, ...internal }) => {
62252
+ const { textId } = internal;
62253
+ return /* @__PURE__ */ React173__default.default.createElement("span", {
62254
+ id: textId,
62202
62255
  className
62203
- }, /* @__PURE__ */ React173__default.default.createElement("span", {
62204
- id: textId
62205
- }, children));
62256
+ }, children);
62206
62257
  };
62207
62258
  Signature.Label = Label;
62208
62259
  Signature.Input = Input14;
@@ -62219,7 +62270,9 @@ Value2.Canvas = Canvas;
62219
62270
  Value2.Type = Type4;
62220
62271
  Value2.Upload = Upload;
62221
62272
  Type4.Value = TypeValue;
62273
+ Upload.Preview = UploadPreview;
62222
62274
  Upload.Button = UploadButton;
62275
+ UploadButton.Text = UploadButtonText;
62223
62276
  function ProgressCircle(props2) {
62224
62277
  const strokeWidth = 4;
62225
62278
  const radius = `calc(50% - ${strokeWidth / 2}px)`;