@elementor/editor-controls 4.3.0-1008 → 4.3.0-1009

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.js CHANGED
@@ -8299,6 +8299,10 @@ var CHIP_TRIGGER_KEYS = /* @__PURE__ */ new Set([" ", ","]);
8299
8299
  function isValidEmail(email) {
8300
8300
  return import_schema.z.string().email().safeParse(email).success;
8301
8301
  }
8302
+ var FORM_FIELD_SHORTCODE_PATTERN = /^\[[^[\]]+]$/;
8303
+ function isFormFieldShortcode(value) {
8304
+ return FORM_FIELD_SHORTCODE_PATTERN.test(value);
8305
+ }
8302
8306
  var shouldShowMentionsInfo = () => {
8303
8307
  if (!(0, import_utils9.hasProInstalled)()) {
8304
8308
  return true;
@@ -8311,14 +8315,26 @@ var shouldShowMentionsInfo = () => {
8311
8315
  };
8312
8316
 
8313
8317
  // src/controls/email-form-action-control/email-chips-field.tsx
8314
- var EmailChipsControl = createControl(({ placeholder }) => {
8318
+ var isValidRecipient = (address) => isValidEmail(address) || isFormFieldShortcode(address);
8319
+ function resolveMention(raw, suggestions) {
8320
+ if (!raw.startsWith("@")) {
8321
+ return raw;
8322
+ }
8323
+ const match = suggestions.find((suggestion) => createMentionPattern(suggestion.value, "start").test(raw));
8324
+ return match ? `[${match.value}]` : raw;
8325
+ }
8326
+ var EmailChipsControl = createControl(({ placeholder, suggestions = [] }) => {
8315
8327
  const { value, setValue, disabled } = useBoundProp(import_editor_props65.stringArrayPropTypeUtil);
8316
8328
  const [inputValue, setInputValue] = (0, import_react69.useState)("");
8317
8329
  const items2 = value || [];
8318
8330
  const selectedValues = items2.map((item) => import_editor_props65.stringPropTypeUtil.extract(item)).filter((val) => val !== null);
8331
+ const suggestionOptions = (0, import_react69.useMemo)(
8332
+ () => suggestions.map((suggestion) => `[${suggestion.value}]`),
8333
+ [suggestions]
8334
+ );
8319
8335
  const tryAddChip = (raw) => {
8320
- const address = raw.trim();
8321
- if (!address || selectedValues.includes(address) || !isValidEmail(address)) {
8336
+ const address = resolveMention(raw.trim(), suggestions);
8337
+ if (!address || selectedValues.includes(address) || !isValidRecipient(address)) {
8322
8338
  return;
8323
8339
  }
8324
8340
  setValue([...items2, import_editor_props65.stringPropTypeUtil.create(address)]);
@@ -8327,8 +8343,8 @@ var EmailChipsControl = createControl(({ placeholder }) => {
8327
8343
  const handleChange = (_, newValue) => {
8328
8344
  const updated = [];
8329
8345
  for (const entry of newValue) {
8330
- const address = entry.trim();
8331
- if (!address || !isValidEmail(address)) {
8346
+ const address = resolveMention(entry.trim(), suggestions);
8347
+ if (!address || !isValidRecipient(address)) {
8332
8348
  continue;
8333
8349
  }
8334
8350
  updated.push(import_editor_props65.stringPropTypeUtil.create(address));
@@ -8363,7 +8379,12 @@ var EmailChipsControl = createControl(({ placeholder }) => {
8363
8379
  },
8364
8380
  value: selectedValues,
8365
8381
  onChange: handleChange,
8366
- options: [],
8382
+ options: suggestionOptions,
8383
+ filterOptions: (options, state) => {
8384
+ const query = state.inputValue.trim().replace(/^@/, "").toLowerCase();
8385
+ return query ? options.filter((option) => option.toLowerCase().includes(query)) : options;
8386
+ },
8387
+ filterSelectedOptions: true,
8367
8388
  onBlur: handleBlur,
8368
8389
  getOptionLabel: (option) => option,
8369
8390
  isOptionEqualToValue: (option, val) => option === val,
@@ -8372,7 +8393,7 @@ var EmailChipsControl = createControl(({ placeholder }) => {
8372
8393
  }
8373
8394
  ));
8374
8395
  });
8375
- var EmailChipsField = ({ fieldLabel, placeholder }) => /* @__PURE__ */ React116.createElement(import_ui100.Grid, { container: true, direction: "column", gap: 0.5 }, /* @__PURE__ */ React116.createElement(import_ui100.Grid, { item: true }, /* @__PURE__ */ React116.createElement(ControlFormLabel, null, fieldLabel)), /* @__PURE__ */ React116.createElement(import_ui100.Grid, { item: true }, /* @__PURE__ */ React116.createElement(EmailChipsControl, { placeholder })));
8396
+ var EmailChipsField = ({ fieldLabel, placeholder, suggestions }) => /* @__PURE__ */ React116.createElement(import_ui100.Grid, { container: true, direction: "column", gap: 0.5 }, /* @__PURE__ */ React116.createElement(import_ui100.Grid, { item: true }, /* @__PURE__ */ React116.createElement(ControlFormLabel, null, fieldLabel)), /* @__PURE__ */ React116.createElement(import_ui100.Grid, { item: true }, /* @__PURE__ */ React116.createElement(EmailChipsControl, { placeholder, suggestions })));
8376
8397
 
8377
8398
  // src/controls/email-form-action-control/email-field.tsx
8378
8399
  var React117 = __toESM(require("react"));
@@ -8380,7 +8401,17 @@ var import_ui101 = require("@elementor/ui");
8380
8401
  var EmailField = ({ bind, label, placeholder }) => /* @__PURE__ */ React117.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React117.createElement(import_ui101.Grid, { container: true, direction: "column", gap: 0.5 }, /* @__PURE__ */ React117.createElement(import_ui101.Grid, { item: true }, /* @__PURE__ */ React117.createElement(ControlFormLabel, null, label)), /* @__PURE__ */ React117.createElement(import_ui101.Grid, { item: true }, /* @__PURE__ */ React117.createElement(TextControl, { placeholder }))));
8381
8402
 
8382
8403
  // src/controls/email-form-action-control/fields.tsx
8383
- var SendToField = ({ placeholder }) => /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "to" }, /* @__PURE__ */ React118.createElement(EmailChipsField, { fieldLabel: (0, import_i18n57.__)("Send to", "elementor"), placeholder }));
8404
+ var SendToField = ({ placeholder }) => {
8405
+ const suggestions = useFormFieldSuggestions({ inputType: "email" });
8406
+ return /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "to" }, /* @__PURE__ */ React118.createElement(import_ui102.Stack, { gap: 0.5 }, /* @__PURE__ */ React118.createElement(
8407
+ EmailChipsField,
8408
+ {
8409
+ fieldLabel: (0, import_i18n57.__)("Send to", "elementor"),
8410
+ placeholder,
8411
+ suggestions
8412
+ }
8413
+ ), shouldShowMentionsInfo() && /* @__PURE__ */ React118.createElement(import_editor_ui15.InfoAlert, null, (0, import_i18n57.__)("Type @ or an email field name to insert its submitted value.", "elementor"))));
8414
+ };
8384
8415
  var SubjectField = () => /* @__PURE__ */ React118.createElement(
8385
8416
  EmailField,
8386
8417
  {
@@ -8424,8 +8455,14 @@ var ReplyToField = () => {
8424
8455
  }
8425
8456
  ))));
8426
8457
  };
8427
- var CcField = () => /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "cc" }, /* @__PURE__ */ React118.createElement(EmailChipsField, { fieldLabel: (0, import_i18n57.__)("Cc", "elementor") }));
8428
- var BccField = () => /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "bcc" }, /* @__PURE__ */ React118.createElement(EmailChipsField, { fieldLabel: (0, import_i18n57.__)("Bcc", "elementor") }));
8458
+ var CcField = () => {
8459
+ const suggestions = useFormFieldSuggestions({ inputType: "email" });
8460
+ return /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "cc" }, /* @__PURE__ */ React118.createElement(EmailChipsField, { fieldLabel: (0, import_i18n57.__)("Cc", "elementor"), suggestions }));
8461
+ };
8462
+ var BccField = () => {
8463
+ const suggestions = useFormFieldSuggestions({ inputType: "email" });
8464
+ return /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "bcc" }, /* @__PURE__ */ React118.createElement(EmailChipsField, { fieldLabel: (0, import_i18n57.__)("Bcc", "elementor"), suggestions }));
8465
+ };
8429
8466
  var MetaDataField = () => /* @__PURE__ */ React118.createElement(PropKeyProvider, { bind: "meta-data" }, /* @__PURE__ */ React118.createElement(import_ui102.Stack, { gap: 0.5 }, /* @__PURE__ */ React118.createElement(ControlFormLabel, null, (0, import_i18n57.__)("Metadata", "elementor")), /* @__PURE__ */ React118.createElement(
8430
8467
  ChipsControl,
8431
8468
  {