@wordpress/components 32.5.0 → 32.5.2-next.v.202604091042.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +18 -4
  4. package/build/autocomplete/autocompleter-ui.cjs +75 -79
  5. package/build/autocomplete/autocompleter-ui.cjs.map +2 -2
  6. package/build/autocomplete/get-autocomplete-match.cjs +91 -0
  7. package/build/autocomplete/get-autocomplete-match.cjs.map +7 -0
  8. package/build/autocomplete/index.cjs +104 -107
  9. package/build/autocomplete/index.cjs.map +3 -3
  10. package/build/box-control/index.cjs +0 -8
  11. package/build/box-control/index.cjs.map +2 -2
  12. package/build/box-control/utils.cjs +1 -10
  13. package/build/box-control/utils.cjs.map +2 -2
  14. package/build/calendar/utils/use-localization-props.cjs +3 -2
  15. package/build/calendar/utils/use-localization-props.cjs.map +2 -2
  16. package/build/custom-select-control/index.cjs.map +3 -3
  17. package/build/custom-select-control-v2/custom-select.cjs +2 -2
  18. package/build/custom-select-control-v2/custom-select.cjs.map +2 -2
  19. package/build/custom-select-control-v2/index.cjs.map +3 -3
  20. package/build/sandbox/index.cjs +2 -2
  21. package/build/sandbox/index.cjs.map +2 -2
  22. package/build/validated-form-controls/control-with-error.cjs +12 -8
  23. package/build/validated-form-controls/control-with-error.cjs.map +2 -2
  24. package/build-module/autocomplete/autocompleter-ui.mjs +74 -78
  25. package/build-module/autocomplete/autocompleter-ui.mjs.map +2 -2
  26. package/build-module/autocomplete/get-autocomplete-match.mjs +56 -0
  27. package/build-module/autocomplete/get-autocomplete-match.mjs.map +7 -0
  28. package/build-module/autocomplete/index.mjs +103 -107
  29. package/build-module/autocomplete/index.mjs.map +3 -3
  30. package/build-module/box-control/index.mjs +1 -9
  31. package/build-module/box-control/index.mjs.map +2 -2
  32. package/build-module/box-control/utils.mjs +1 -9
  33. package/build-module/box-control/utils.mjs.map +2 -2
  34. package/build-module/calendar/utils/use-localization-props.mjs +3 -2
  35. package/build-module/calendar/utils/use-localization-props.mjs.map +2 -2
  36. package/build-module/custom-select-control/index.mjs +2 -2
  37. package/build-module/custom-select-control/index.mjs.map +2 -2
  38. package/build-module/custom-select-control-v2/custom-select.mjs +2 -2
  39. package/build-module/custom-select-control-v2/custom-select.mjs.map +2 -2
  40. package/build-module/custom-select-control-v2/index.mjs +2 -2
  41. package/build-module/custom-select-control-v2/index.mjs.map +2 -2
  42. package/build-module/sandbox/index.mjs +2 -2
  43. package/build-module/sandbox/index.mjs.map +2 -2
  44. package/build-module/validated-form-controls/control-with-error.mjs +12 -8
  45. package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
  46. package/build-style/style-rtl.css +0 -3
  47. package/build-style/style.css +0 -3
  48. package/build-types/autocomplete/autocompleter-ui.d.ts +2 -2
  49. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  50. package/build-types/autocomplete/get-autocomplete-match.d.ts +11 -0
  51. package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
  52. package/build-types/autocomplete/index.d.ts +8 -0
  53. package/build-types/autocomplete/index.d.ts.map +1 -1
  54. package/build-types/autocomplete/test/get-autocomplete-match.d.ts +2 -0
  55. package/build-types/autocomplete/test/get-autocomplete-match.d.ts.map +1 -0
  56. package/build-types/autocomplete/types.d.ts +23 -9
  57. package/build-types/autocomplete/types.d.ts.map +1 -1
  58. package/build-types/box-control/index.d.ts.map +1 -1
  59. package/build-types/box-control/utils.d.ts +7 -16
  60. package/build-types/box-control/utils.d.ts.map +1 -1
  61. package/build-types/button/stories/index.story.d.ts +0 -1
  62. package/build-types/button/stories/index.story.d.ts.map +1 -1
  63. package/build-types/calendar/utils/use-localization-props.d.ts +3 -3
  64. package/build-types/calendar/utils/use-localization-props.d.ts.map +1 -1
  65. package/build-types/custom-gradient-picker/constants.d.ts +2 -2
  66. package/build-types/custom-select-control-v2/custom-select.d.ts +3 -3
  67. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  68. package/build-types/custom-select-control-v2/types.d.ts +1 -1
  69. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  70. package/build-types/font-size-picker/constants.d.ts +2 -2
  71. package/build-types/font-size-picker/constants.d.ts.map +1 -1
  72. package/build-types/palette-edit/index.d.ts +1 -1
  73. package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
  74. package/package.json +21 -21
  75. package/src/alignment-matrix-control/README.md +1 -1
  76. package/src/angle-picker-control/style.module.scss +1 -0
  77. package/src/autocomplete/README.md +2 -2
  78. package/src/autocomplete/autocompleter-ui.native.js +166 -173
  79. package/src/autocomplete/autocompleter-ui.tsx +114 -116
  80. package/src/autocomplete/get-autocomplete-match.ts +115 -0
  81. package/src/autocomplete/index.tsx +129 -208
  82. package/src/autocomplete/test/get-autocomplete-match.ts +338 -0
  83. package/src/autocomplete/test/index.tsx +112 -4
  84. package/src/autocomplete/types.ts +17 -10
  85. package/src/box-control/index.tsx +1 -19
  86. package/src/box-control/utils.ts +1 -19
  87. package/src/button/README.md +1 -1
  88. package/src/button/stories/index.story.tsx +0 -1
  89. package/src/button/style.scss +0 -6
  90. package/src/calendar/utils/use-localization-props.ts +3 -4
  91. package/src/custom-select-control/index.tsx +3 -3
  92. package/src/custom-select-control-v2/custom-select.tsx +4 -4
  93. package/src/custom-select-control-v2/index.tsx +2 -2
  94. package/src/custom-select-control-v2/types.ts +1 -1
  95. package/src/divider/README.md +5 -6
  96. package/src/flex/stories/index.story.tsx +1 -1
  97. package/src/form-file-upload/README.md +3 -3
  98. package/src/gradient-picker/README.md +2 -2
  99. package/src/h-stack/README.md +10 -15
  100. package/src/h-stack/stories/index.story.tsx +2 -2
  101. package/src/heading/stories/index.story.tsx +1 -1
  102. package/src/higher-order/with-focus-outside/index.native.js +21 -20
  103. package/src/icon/README.md +1 -1
  104. package/src/menu/README.md +2 -2
  105. package/src/mobile/utils/get-px-from-css-unit.native.js +1 -1
  106. package/src/sandbox/index.native.js +2 -2
  107. package/src/sandbox/index.tsx +2 -2
  108. package/src/tabs/README.md +6 -6
  109. package/src/text/stories/index.story.tsx +1 -1
  110. package/src/toolbar/toolbar-button/toolbar-button-container.native.js +3 -1
  111. package/src/tree-select/README.md +1 -1
  112. package/src/v-stack/README.md +10 -15
  113. package/src/v-stack/stories/index.story.tsx +2 -2
  114. package/src/validated-form-controls/control-with-error.tsx +17 -12
  115. package/src/validated-form-controls/test/control-with-error.tsx +28 -1
  116. package/src/view/README.md +2 -5
  117. package/src/button/stories/style.css +0 -8
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/calendar/utils/use-localization-props.ts"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\n/**\n * Internal dependencies\n */\n\nfunction isLocaleRTL(localeCode) {\n const localeObj = new Intl.Locale(localeCode);\n if ('getTextInfo' in localeObj) {\n // @ts-expect-error - getTextInfo is not typed yet\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n return localeObj.getTextInfo().direction === 'rtl';\n }\n return ['ar',\n // Arabic\n 'he',\n // Hebrew\n 'fa',\n // Persian (Farsi)\n 'ur',\n // Urdu\n 'ps',\n // Pashto\n 'syr',\n // Syriac\n 'dv',\n // Divehi\n 'ku',\n // Kurdish (Sorani)\n 'yi' // Yiddish\n ].includes(localeObj.language);\n}\n\n/**\n * Returns localization props for the calendar components.\n *\n * Notes:\n * - the following props should be intended as defaults, and should\n * be overridden by consumer props if listed as public props.\n * - It is possible for the translated strings to use a different locale\n * than the formatted dates and the computed `dir`. This is because the\n * translation function doesn't expose the locale used for the translated\n * strings, meaning that the dates are formatted using the `locale` prop.\n * For a correct localized experience, consumers should make sure that\n * translation context and `locale` prop are consistent.\n * @param props\n * @param props.locale\n * @param props.timeZone\n * @param props.mode\n */\nexport const useLocalizationProps = ({\n locale,\n timeZone,\n mode\n}) => {\n return useMemo(() => {\n // ie. April 2025\n const monthNameFormatter = new Intl.DateTimeFormat(locale.code, {\n year: 'numeric',\n month: 'long',\n timeZone\n });\n // ie. M, T, W, T, F, S, S\n const weekdayNarrowFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'narrow',\n timeZone\n });\n // ie. Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday\n const weekdayLongFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'long',\n timeZone\n });\n // ie. Monday, April 29, 2025\n const fullDateFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone\n });\n\n // Note: the following props should be intended as defaults, and should\n // be overridden by consumer props if listed as public props.\n return {\n 'aria-label': mode === 'single' ? __('Date calendar') : __('Date range calendar'),\n labels: {\n /**\n * The label for the month grid.\n * @param date\n */\n labelGrid: date => monthNameFormatter.format(date),\n /**\n * The label for the gridcell, when the calendar is not interactive.\n * @param date\n * @param modifiers\n */\n labelGridcell: (date, modifiers) => {\n const formattedDate = fullDateFormatter.format(date);\n let label = formattedDate;\n if (modifiers?.today) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('Today, %s'), formattedDate);\n }\n return label;\n },\n /** The label for the \"next month\" button. */\n labelNext: () => __('Go to the Next Month'),\n /** The label for the \"previous month\" button. */\n labelPrevious: () => __('Go to the Previous Month'),\n /**\n * The label for the day button.\n * @param date\n * @param modifiers\n */\n labelDayButton: (date, modifiers) => {\n const formattedDate = fullDateFormatter.format(date);\n let label = formattedDate;\n if (modifiers?.today) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('Today, %s'), formattedDate);\n }\n if (modifiers?.selected) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('%s, selected'), formattedDate);\n }\n return label;\n },\n /**\n * The label for the weekday.\n * @param date\n */\n labelWeekday: date => weekdayLongFormatter.format(date)\n },\n locale,\n dir: isLocaleRTL(locale.code) ? 'rtl' : 'ltr',\n formatters: {\n formatWeekdayName: date => {\n return weekdayNarrowFormatter.format(date);\n },\n formatCaption: date => {\n return monthNameFormatter.format(date);\n }\n },\n timeZone\n };\n }, [locale, timeZone, mode]);\n};"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAC5B,qBAAwB;AAKxB,SAAS,YAAY,YAAY;AAC/B,QAAM,YAAY,IAAI,KAAK,OAAO,UAAU;AAC5C,MAAI,iBAAiB,WAAW;AAG9B,WAAO,UAAU,YAAY,EAAE,cAAc;AAAA,EAC/C;AACA,SAAO;AAAA,IAAC;AAAA;AAAA,IAER;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,EACA,EAAE,SAAS,UAAU,QAAQ;AAC/B;AAmBO,IAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,aAAO,wBAAQ,MAAM;AAEnB,UAAM,qBAAqB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAC9D,MAAM;AAAA,MACN,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAED,UAAM,yBAAyB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAClE,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,uBAAuB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAChE,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,oBAAoB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAC7D,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAID,WAAO;AAAA,MACL,cAAc,SAAS,eAAW,gBAAG,eAAe,QAAI,gBAAG,qBAAqB;AAAA,MAChF,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,QAKN,WAAW,UAAQ,mBAAmB,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMjD,eAAe,CAAC,MAAM,cAAc;AAClC,gBAAM,gBAAgB,kBAAkB,OAAO,IAAI;AACnD,cAAI,QAAQ;AACZ,cAAI,WAAW,OAAO;AACpB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,WAAW;AAAA,cAAG;AAAA,YAAa;AAAA,UAChC;AACA,iBAAO;AAAA,QACT;AAAA;AAAA,QAEA,WAAW,UAAM,gBAAG,sBAAsB;AAAA;AAAA,QAE1C,eAAe,UAAM,gBAAG,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMlD,gBAAgB,CAAC,MAAM,cAAc;AACnC,gBAAM,gBAAgB,kBAAkB,OAAO,IAAI;AACnD,cAAI,QAAQ;AACZ,cAAI,WAAW,OAAO;AACpB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,WAAW;AAAA,cAAG;AAAA,YAAa;AAAA,UAChC;AACA,cAAI,WAAW,UAAU;AACvB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,cAAc;AAAA,cAAG;AAAA,YAAa;AAAA,UACnC;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,cAAc,UAAQ,qBAAqB,OAAO,IAAI;AAAA,MACxD;AAAA,MACA;AAAA,MACA,KAAK,YAAY,OAAO,IAAI,IAAI,QAAQ;AAAA,MACxC,YAAY;AAAA,QACV,mBAAmB,UAAQ;AACzB,iBAAO,uBAAuB,OAAO,IAAI;AAAA,QAC3C;AAAA,QACA,eAAe,UAAQ;AACrB,iBAAO,mBAAmB,OAAO,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAC7B;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\n/**\n * Internal dependencies\n */\n\nfunction isLocaleRTL(localeCode) {\n const localeObj = new Intl.Locale(localeCode);\n const direction = localeObj.getTextInfo?.().direction;\n if (direction) {\n return direction === 'rtl';\n }\n return ['ar',\n // Arabic\n 'he',\n // Hebrew\n 'fa',\n // Persian (Farsi)\n 'ur',\n // Urdu\n 'ps',\n // Pashto\n 'syr',\n // Syriac\n 'dv',\n // Divehi\n 'ku',\n // Kurdish (Sorani)\n 'yi' // Yiddish\n ].includes(localeObj.language);\n}\n\n/**\n * Returns localization props for the calendar components.\n *\n * Notes:\n * - the following props should be intended as defaults, and should\n * be overridden by consumer props if listed as public props.\n * - It is possible for the translated strings to use a different locale\n * than the formatted dates and the computed `dir`. This is because the\n * translation function doesn't expose the locale used for the translated\n * strings, meaning that the dates are formatted using the `locale` prop.\n * For a correct localized experience, consumers should make sure that\n * translation context and `locale` prop are consistent.\n * @param props\n * @param props.locale\n * @param props.timeZone\n * @param props.mode\n */\nexport const useLocalizationProps = ({\n locale,\n timeZone,\n mode\n}) => {\n return useMemo(() => {\n // ie. April 2025\n const monthNameFormatter = new Intl.DateTimeFormat(locale.code, {\n year: 'numeric',\n month: 'long',\n timeZone\n });\n // ie. M, T, W, T, F, S, S\n const weekdayNarrowFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'narrow',\n timeZone\n });\n // ie. Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday\n const weekdayLongFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'long',\n timeZone\n });\n // ie. Monday, April 29, 2025\n const fullDateFormatter = new Intl.DateTimeFormat(locale.code, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone\n });\n\n // Note: the following props should be intended as defaults, and should\n // be overridden by consumer props if listed as public props.\n return {\n 'aria-label': mode === 'single' ? __('Date calendar') : __('Date range calendar'),\n labels: {\n /**\n * The label for the month grid.\n * @param date\n */\n labelGrid: date => monthNameFormatter.format(date),\n /**\n * The label for the gridcell, when the calendar is not interactive.\n * @param date\n * @param modifiers\n */\n labelGridcell: (date, modifiers) => {\n const formattedDate = fullDateFormatter.format(date);\n let label = formattedDate;\n if (modifiers?.today) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('Today, %s'), formattedDate);\n }\n return label;\n },\n /** The label for the \"next month\" button. */\n labelNext: () => __('Go to the Next Month'),\n /** The label for the \"previous month\" button. */\n labelPrevious: () => __('Go to the Previous Month'),\n /**\n * The label for the day button.\n * @param date\n * @param modifiers\n */\n labelDayButton: (date, modifiers) => {\n const formattedDate = fullDateFormatter.format(date);\n let label = formattedDate;\n if (modifiers?.today) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('Today, %s'), formattedDate);\n }\n if (modifiers?.selected) {\n label = sprintf(\n // translators: %s is the full date (e.g. \"Monday, April 29, 2025\")\n __('%s, selected'), formattedDate);\n }\n return label;\n },\n /**\n * The label for the weekday.\n * @param date\n */\n labelWeekday: date => weekdayLongFormatter.format(date)\n },\n locale,\n dir: isLocaleRTL(locale.code) ? 'rtl' : 'ltr',\n formatters: {\n formatWeekdayName: date => {\n return weekdayNarrowFormatter.format(date);\n },\n formatCaption: date => {\n return monthNameFormatter.format(date);\n }\n },\n timeZone\n };\n }, [locale, timeZone, mode]);\n};"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA4B;AAC5B,qBAAwB;AAKxB,SAAS,YAAY,YAAY;AAC/B,QAAM,YAAY,IAAI,KAAK,OAAO,UAAU;AAC5C,QAAM,YAAY,UAAU,cAAc,EAAE;AAC5C,MAAI,WAAW;AACb,WAAO,cAAc;AAAA,EACvB;AACA,SAAO;AAAA,IAAC;AAAA;AAAA,IAER;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,EACA,EAAE,SAAS,UAAU,QAAQ;AAC/B;AAmBO,IAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,aAAO,wBAAQ,MAAM;AAEnB,UAAM,qBAAqB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAC9D,MAAM;AAAA,MACN,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAED,UAAM,yBAAyB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAClE,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,uBAAuB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAChE,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,oBAAoB,IAAI,KAAK,eAAe,OAAO,MAAM;AAAA,MAC7D,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAID,WAAO;AAAA,MACL,cAAc,SAAS,eAAW,gBAAG,eAAe,QAAI,gBAAG,qBAAqB;AAAA,MAChF,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,QAKN,WAAW,UAAQ,mBAAmB,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMjD,eAAe,CAAC,MAAM,cAAc;AAClC,gBAAM,gBAAgB,kBAAkB,OAAO,IAAI;AACnD,cAAI,QAAQ;AACZ,cAAI,WAAW,OAAO;AACpB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,WAAW;AAAA,cAAG;AAAA,YAAa;AAAA,UAChC;AACA,iBAAO;AAAA,QACT;AAAA;AAAA,QAEA,WAAW,UAAM,gBAAG,sBAAsB;AAAA;AAAA,QAE1C,eAAe,UAAM,gBAAG,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMlD,gBAAgB,CAAC,MAAM,cAAc;AACnC,gBAAM,gBAAgB,kBAAkB,OAAO,IAAI;AACnD,cAAI,QAAQ;AACZ,cAAI,WAAW,OAAO;AACpB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,WAAW;AAAA,cAAG;AAAA,YAAa;AAAA,UAChC;AACA,cAAI,WAAW,UAAU;AACvB,wBAAQ;AAAA;AAAA,kBAER,gBAAG,cAAc;AAAA,cAAG;AAAA,YAAa;AAAA,UACnC;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,cAAc,UAAQ,qBAAqB,OAAO,IAAI;AAAA,MACxD;AAAA,MACA;AAAA,MACA,KAAK,YAAY,OAAO,IAAI,IAAI,QAAQ;AAAA,MACxC,YAAY;AAAA,QACV,mBAAmB,UAAQ;AACzB,iBAAO,uBAAuB,OAAO,IAAI;AAAA,QAC3C;AAAA,QACA,eAAe,UAAQ;AACrB,iBAAO,mBAAmB,OAAO,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAC7B;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/custom-select-control/index.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport _CustomSelect from '../custom-select-control-v2/custom-select';\nimport CustomSelectItem from '../custom-select-control-v2/item';\nimport * as Styled from '../custom-select-control-v2/styles';\nimport { VisuallyHidden } from '../visually-hidden';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction useDeprecatedProps({\n __experimentalShowSelectedHint,\n ...otherProps\n}) {\n return {\n showSelectedHint: __experimentalShowSelectedHint,\n ...otherProps\n };\n}\n\n// The removal of `__experimentalHint` in favour of `hint` doesn't happen in\n// the `useDeprecatedProps` hook in order not to break consumers that rely\n// on object identity (see https://github.com/WordPress/gutenberg/pull/63248#discussion_r1672213131)\nfunction applyOptionDeprecations({\n __experimentalHint,\n ...rest\n}) {\n return {\n hint: __experimentalHint,\n ...rest\n };\n}\nfunction getDescribedBy(currentName, describedBy) {\n if (describedBy) {\n return describedBy;\n }\n\n // translators: %s: The selected option.\n return sprintf(__('Currently selected: %s'), currentName);\n}\nfunction CustomSelectControl(props) {\n const {\n __next40pxDefaultSize = false,\n __shouldNotWarnDeprecated36pxSize,\n describedBy,\n options,\n onChange,\n size = 'default',\n value,\n className: classNameProp,\n showSelectedHint = false,\n ...restProps\n } = useDeprecatedProps(props);\n maybeWarnDeprecated36pxSize({\n componentName: 'CustomSelectControl',\n __next40pxDefaultSize,\n size,\n __shouldNotWarnDeprecated36pxSize\n });\n const descriptionId = useInstanceId(CustomSelectControl, 'custom-select-control__description');\n\n // Forward props + store from v2 implementation\n const store = Ariakit.useSelectStore({\n async setValue(nextValue) {\n const nextOption = options.find(item => item.key === nextValue);\n if (!onChange || !nextOption) {\n return;\n }\n\n // Executes the logic in a microtask after the popup is closed.\n // This is simply to ensure the isOpen state matches the one from the\n // previous legacy implementation.\n await Promise.resolve();\n const state = store.getState();\n const changeObject = {\n highlightedIndex: state.renderedItems.findIndex(item => item.value === nextValue),\n inputValue: '',\n isOpen: state.open,\n selectedItem: nextOption,\n type: ''\n };\n onChange(changeObject);\n },\n value: value?.key,\n // Setting the first option as a default value when no value is provided\n // is already done natively by the underlying Ariakit component,\n // but doing this explicitly avoids the `onChange` callback from firing\n // on initial render, thus making this implementation closer to the v1.\n defaultValue: options[0]?.key\n });\n const children = options.map(applyOptionDeprecations).map(({\n name,\n key,\n hint,\n style,\n className\n }) => {\n const withHint = /*#__PURE__*/_jsxs(Styled.WithHintItemWrapper, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n children: name\n }), /*#__PURE__*/_jsx(Styled.WithHintItemHint, {\n // Keeping the classname for legacy reasons\n className: \"components-custom-select-control__item-hint\",\n children: hint\n })]\n });\n return /*#__PURE__*/_jsx(CustomSelectItem, {\n value: key,\n children: hint ? withHint : name,\n style: style,\n className: clsx(className,\n // Keeping the classnames for legacy reasons\n 'components-custom-select-control__item', {\n 'has-hint': hint\n })\n }, key);\n });\n const currentValue = Ariakit.useStoreState(store, 'value');\n const selectedOption = options?.map(applyOptionDeprecations)?.find(({\n key\n }) => currentValue === key) ?? options[0];\n const renderSelectedValue = () => {\n if (!showSelectedHint || !selectedOption.hint) {\n return selectedOption?.name;\n }\n return /*#__PURE__*/_jsxs(Styled.SelectedExperimentalHintWrapper, {\n children: [selectedOption?.name, /*#__PURE__*/_jsx(Styled.SelectedExperimentalHintItem, {\n // Keeping the classname for legacy reasons\n className: \"components-custom-select-control__hint\",\n children: selectedOption?.hint\n })]\n });\n };\n const translatedSize = (() => {\n if (__next40pxDefaultSize && size === 'default' || size === '__unstable-large') {\n return 'default';\n }\n if (!__next40pxDefaultSize && size === 'default') {\n return 'compact';\n }\n return size;\n })();\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(_CustomSelect, {\n \"aria-describedby\": descriptionId,\n renderSelectedValue: renderSelectedValue,\n size: translatedSize,\n store: store,\n className: clsx(\n // Keeping the classname for legacy reasons\n 'components-custom-select-control', classNameProp),\n isLegacy: true,\n ...restProps,\n children: children\n }), /*#__PURE__*/_jsx(VisuallyHidden, {\n children: /*#__PURE__*/_jsx(\"span\", {\n id: descriptionId,\n children: getDescribedBy(selectedOption?.name, describedBy)\n })\n })]\n });\n}\nexport default CustomSelectControl;"],
5
- "mappings": "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",
6
- "names": ["_jsxs", "_jsx", "CustomSelectItem", "clsx", "_Fragment", "_CustomSelect"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport CustomSelect from '../custom-select-control-v2/custom-select';\nimport CustomSelectItem from '../custom-select-control-v2/item';\nimport * as Styled from '../custom-select-control-v2/styles';\nimport { VisuallyHidden } from '../visually-hidden';\nimport { maybeWarnDeprecated36pxSize } from '../utils/deprecated-36px-size';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction useDeprecatedProps({\n __experimentalShowSelectedHint,\n ...otherProps\n}) {\n return {\n showSelectedHint: __experimentalShowSelectedHint,\n ...otherProps\n };\n}\n\n// The removal of `__experimentalHint` in favour of `hint` doesn't happen in\n// the `useDeprecatedProps` hook in order not to break consumers that rely\n// on object identity (see https://github.com/WordPress/gutenberg/pull/63248#discussion_r1672213131)\nfunction applyOptionDeprecations({\n __experimentalHint,\n ...rest\n}) {\n return {\n hint: __experimentalHint,\n ...rest\n };\n}\nfunction getDescribedBy(currentName, describedBy) {\n if (describedBy) {\n return describedBy;\n }\n\n // translators: %s: The selected option.\n return sprintf(__('Currently selected: %s'), currentName);\n}\nfunction CustomSelectControl(props) {\n const {\n __next40pxDefaultSize = false,\n __shouldNotWarnDeprecated36pxSize,\n describedBy,\n options,\n onChange,\n size = 'default',\n value,\n className: classNameProp,\n showSelectedHint = false,\n ...restProps\n } = useDeprecatedProps(props);\n maybeWarnDeprecated36pxSize({\n componentName: 'CustomSelectControl',\n __next40pxDefaultSize,\n size,\n __shouldNotWarnDeprecated36pxSize\n });\n const descriptionId = useInstanceId(CustomSelectControl, 'custom-select-control__description');\n\n // Forward props + store from v2 implementation\n const store = Ariakit.useSelectStore({\n async setValue(nextValue) {\n const nextOption = options.find(item => item.key === nextValue);\n if (!onChange || !nextOption) {\n return;\n }\n\n // Executes the logic in a microtask after the popup is closed.\n // This is simply to ensure the isOpen state matches the one from the\n // previous legacy implementation.\n await Promise.resolve();\n const state = store.getState();\n const changeObject = {\n highlightedIndex: state.renderedItems.findIndex(item => item.value === nextValue),\n inputValue: '',\n isOpen: state.open,\n selectedItem: nextOption,\n type: ''\n };\n onChange(changeObject);\n },\n value: value?.key,\n // Setting the first option as a default value when no value is provided\n // is already done natively by the underlying Ariakit component,\n // but doing this explicitly avoids the `onChange` callback from firing\n // on initial render, thus making this implementation closer to the v1.\n defaultValue: options[0]?.key\n });\n const children = options.map(applyOptionDeprecations).map(({\n name,\n key,\n hint,\n style,\n className\n }) => {\n const withHint = /*#__PURE__*/_jsxs(Styled.WithHintItemWrapper, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n children: name\n }), /*#__PURE__*/_jsx(Styled.WithHintItemHint, {\n // Keeping the classname for legacy reasons\n className: \"components-custom-select-control__item-hint\",\n children: hint\n })]\n });\n return /*#__PURE__*/_jsx(CustomSelectItem, {\n value: key,\n children: hint ? withHint : name,\n style: style,\n className: clsx(className,\n // Keeping the classnames for legacy reasons\n 'components-custom-select-control__item', {\n 'has-hint': hint\n })\n }, key);\n });\n const currentValue = Ariakit.useStoreState(store, 'value');\n const selectedOption = options?.map(applyOptionDeprecations)?.find(({\n key\n }) => currentValue === key) ?? options[0];\n const renderSelectedValue = () => {\n if (!showSelectedHint || !selectedOption.hint) {\n return selectedOption?.name;\n }\n return /*#__PURE__*/_jsxs(Styled.SelectedExperimentalHintWrapper, {\n children: [selectedOption?.name, /*#__PURE__*/_jsx(Styled.SelectedExperimentalHintItem, {\n // Keeping the classname for legacy reasons\n className: \"components-custom-select-control__hint\",\n children: selectedOption?.hint\n })]\n });\n };\n const translatedSize = (() => {\n if (__next40pxDefaultSize && size === 'default' || size === '__unstable-large') {\n return 'default';\n }\n if (!__next40pxDefaultSize && size === 'default') {\n return 'compact';\n }\n return size;\n })();\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(CustomSelect, {\n \"aria-describedby\": descriptionId,\n renderSelectedValue: renderSelectedValue,\n size: translatedSize,\n store: store,\n className: clsx(\n // Keeping the classname for legacy reasons\n 'components-custom-select-control', classNameProp),\n isLegacy: true,\n ...restProps,\n children: children\n }), /*#__PURE__*/_jsx(VisuallyHidden, {\n children: /*#__PURE__*/_jsx(\"span\", {\n id: descriptionId,\n children: getDescribedBy(selectedOption?.name, describedBy)\n })\n })]\n });\n}\nexport default CustomSelectControl;"],
5
+ "mappings": "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",
6
+ "names": ["_jsxs", "_jsx", "CustomSelectItem", "clsx", "_Fragment", "CustomSelect"]
7
7
  }
@@ -77,7 +77,7 @@ var CustomSelectButton = ({
77
77
  children: computedRenderSelectedValue(currentValue)
78
78
  });
79
79
  };
80
- function _CustomSelect(props) {
80
+ function CustomSelect(props) {
81
81
  const {
82
82
  children,
83
83
  hideLabelFromVision = false,
@@ -138,7 +138,7 @@ function _CustomSelect(props) {
138
138
  })
139
139
  );
140
140
  }
141
- var custom_select_default = _CustomSelect;
141
+ var custom_select_default = CustomSelect;
142
142
  // Annotate the CommonJS export names for ESM import in node:
143
143
  0 && (module.exports = {
144
144
  CustomSelectContext
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/custom-select-control-v2/custom-select.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { createContext, useCallback, useMemo } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { VisuallyHidden } from '../visually-hidden';\nimport * as Styled from './styles';\nimport InputBase from '../input-control/input-base';\nimport SelectControlChevronDown from '../select-control/chevron-down';\nimport BaseControl from '../base-control';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const CustomSelectContext = createContext(undefined);\nCustomSelectContext.displayName = 'CustomSelectContext';\nfunction defaultRenderSelectedValue(value) {\n const isValueEmpty = Array.isArray(value) ? value.length === 0 : value === undefined || value === null;\n if (isValueEmpty) {\n return __('Select an item');\n }\n if (Array.isArray(value)) {\n return value.length === 1 ? value[0] : sprintf(\n // translators: %d: number of items selected (it will always be 2 or more items)\n _n('%d item selected', '%d items selected', value.length), value.length);\n }\n return value;\n}\nconst CustomSelectButton = ({\n renderSelectedValue,\n size = 'default',\n store,\n ...restProps\n}) => {\n const {\n value: currentValue\n } = Ariakit.useStoreState(store);\n const computedRenderSelectedValue = useMemo(() => renderSelectedValue ?? defaultRenderSelectedValue, [renderSelectedValue]);\n return /*#__PURE__*/_jsx(Styled.Select, {\n ...restProps,\n size: size,\n hasCustomRenderProp: !!renderSelectedValue,\n store: store,\n children: computedRenderSelectedValue(currentValue)\n });\n};\nfunction _CustomSelect(props) {\n const {\n children,\n hideLabelFromVision = false,\n label,\n size,\n store,\n className,\n isLegacy = false,\n ...restProps\n } = props;\n const onSelectPopoverKeyDown = useCallback(e => {\n if (isLegacy) {\n e.stopPropagation();\n }\n }, [isLegacy]);\n const contextValue = useMemo(() => ({\n store,\n size\n }), [store, size]);\n return (\n /*#__PURE__*/\n // Where should `restProps` be forwarded to?\n _jsxs(\"div\", {\n className: className,\n children: [/*#__PURE__*/_jsx(Ariakit.SelectLabel, {\n store: store,\n render: hideLabelFromVision ?\n /*#__PURE__*/\n // @ts-expect-error `children` are passed via the render prop\n _jsx(VisuallyHidden, {}) :\n /*#__PURE__*/\n // @ts-expect-error `children` are passed via the render prop\n _jsx(BaseControl.VisualLabel, {\n as: \"div\"\n }),\n children: label\n }), /*#__PURE__*/_jsxs(InputBase, {\n __next40pxDefaultSize: true,\n size: size,\n suffix: /*#__PURE__*/_jsx(SelectControlChevronDown, {}),\n children: [/*#__PURE__*/_jsx(CustomSelectButton, {\n ...restProps,\n size: size,\n store: store\n // Match legacy behavior (move selection rather than open the popover)\n ,\n showOnKeyDown: !isLegacy\n }), /*#__PURE__*/_jsx(Styled.SelectPopover, {\n gutter: 12,\n store: store,\n sameWidth: true,\n slide: false,\n onKeyDown: onSelectPopoverKeyDown\n // Match legacy behavior\n ,\n flip: !isLegacy,\n children: /*#__PURE__*/_jsx(CustomSelectContext.Provider, {\n value: contextValue,\n children: children\n })\n })]\n })]\n })\n );\n}\nexport default _CustomSelect;"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,cAAyB;AAKzB,qBAAoD;AACpD,kBAAgC;AAKhC,6BAA+B;AAC/B,aAAwB;AACxB,wBAAsB;AACtB,0BAAqC;AACrC,0BAAwB;AACxB,yBAA2C;AACpC,IAAM,0BAAsB,8BAAc,MAAS;AAC1D,oBAAoB,cAAc;AAClC,SAAS,2BAA2B,OAAO;AACzC,QAAM,eAAe,MAAM,QAAQ,KAAK,IAAI,MAAM,WAAW,IAAI,UAAU,UAAa,UAAU;AAClG,MAAI,cAAc;AAChB,eAAO,gBAAG,gBAAgB;AAAA,EAC5B;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,WAAW,IAAI,MAAM,CAAC,QAAI;AAAA;AAAA,UAEvC,gBAAG,oBAAoB,qBAAqB,MAAM,MAAM;AAAA,MAAG,MAAM;AAAA,IAAM;AAAA,EACzE;AACA,SAAO;AACT;AACA,IAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM;AAAA,IACJ,OAAO;AAAA,EACT,IAAY,sBAAc,KAAK;AAC/B,QAAM,kCAA8B,wBAAQ,MAAM,uBAAuB,4BAA4B,CAAC,mBAAmB,CAAC;AAC1H,SAAoB,uCAAAA,KAAY,eAAQ;AAAA,IACtC,GAAG;AAAA,IACH;AAAA,IACA,qBAAqB,CAAC,CAAC;AAAA,IACvB;AAAA,IACA,UAAU,4BAA4B,YAAY;AAAA,EACpD,CAAC;AACH;AACA,SAAS,cAAc,OAAO;AAC5B,QAAM;AAAA,IACJ;AAAA,IACA,sBAAsB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,6BAAyB,4BAAY,OAAK;AAC9C,QAAI,UAAU;AACZ,QAAE,gBAAgB;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AACb,QAAM,mBAAe,wBAAQ,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,EACF,IAAI,CAAC,OAAO,IAAI,CAAC;AACjB;AAAA;AAAA,IAGE,uCAAAC,MAAM,OAAO;AAAA,MACX;AAAA,MACA,UAAU,CAAc,uCAAAD,KAAa,qBAAa;AAAA,QAChD;AAAA,QACA,QAAQ;AAAA;AAAA,UAGR,uCAAAA,KAAK,uCAAgB,CAAC,CAAC;AAAA;AAAA;AAAA,UAGvB,uCAAAA,KAAK,oBAAAE,QAAY,aAAa;AAAA,YAC5B,IAAI;AAAA,UACN,CAAC;AAAA;AAAA,QACD,UAAU;AAAA,MACZ,CAAC,GAAgB,uCAAAD,MAAM,kBAAAE,SAAW;AAAA,QAChC,uBAAuB;AAAA,QACvB;AAAA,QACA,QAAqB,uCAAAH,KAAK,oBAAAI,SAA0B,CAAC,CAAC;AAAA,QACtD,UAAU,CAAc,uCAAAJ,KAAK,oBAAoB;AAAA,UAC/C,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UAGA,eAAe,CAAC;AAAA,QAClB,CAAC,GAAgB,uCAAAA,KAAY,sBAAe;AAAA,UAC1C,QAAQ;AAAA,UACR;AAAA,UACA,WAAW;AAAA,UACX,OAAO;AAAA,UACP,WAAW;AAAA,UAGX,MAAM,CAAC;AAAA,UACP,UAAuB,uCAAAA,KAAK,oBAAoB,UAAU;AAAA,YACxD,OAAO;AAAA,YACP;AAAA,UACF,CAAC;AAAA,QACH,CAAC,CAAC;AAAA,MACJ,CAAC,CAAC;AAAA,IACJ,CAAC;AAAA;AAEL;AACA,IAAO,wBAAQ;",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { createContext, useCallback, useMemo } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { VisuallyHidden } from '../visually-hidden';\nimport * as Styled from './styles';\nimport InputBase from '../input-control/input-base';\nimport SelectControlChevronDown from '../select-control/chevron-down';\nimport BaseControl from '../base-control';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const CustomSelectContext = createContext(undefined);\nCustomSelectContext.displayName = 'CustomSelectContext';\nfunction defaultRenderSelectedValue(value) {\n const isValueEmpty = Array.isArray(value) ? value.length === 0 : value === undefined || value === null;\n if (isValueEmpty) {\n return __('Select an item');\n }\n if (Array.isArray(value)) {\n return value.length === 1 ? value[0] : sprintf(\n // translators: %d: number of items selected (it will always be 2 or more items)\n _n('%d item selected', '%d items selected', value.length), value.length);\n }\n return value;\n}\nconst CustomSelectButton = ({\n renderSelectedValue,\n size = 'default',\n store,\n ...restProps\n}) => {\n const {\n value: currentValue\n } = Ariakit.useStoreState(store);\n const computedRenderSelectedValue = useMemo(() => renderSelectedValue ?? defaultRenderSelectedValue, [renderSelectedValue]);\n return /*#__PURE__*/_jsx(Styled.Select, {\n ...restProps,\n size: size,\n hasCustomRenderProp: !!renderSelectedValue,\n store: store,\n children: computedRenderSelectedValue(currentValue)\n });\n};\nfunction CustomSelect(props) {\n const {\n children,\n hideLabelFromVision = false,\n label,\n size,\n store,\n className,\n isLegacy = false,\n ...restProps\n } = props;\n const onSelectPopoverKeyDown = useCallback(e => {\n if (isLegacy) {\n e.stopPropagation();\n }\n }, [isLegacy]);\n const contextValue = useMemo(() => ({\n store,\n size\n }), [store, size]);\n return (\n /*#__PURE__*/\n // Where should `restProps` be forwarded to?\n _jsxs(\"div\", {\n className: className,\n children: [/*#__PURE__*/_jsx(Ariakit.SelectLabel, {\n store: store,\n render: hideLabelFromVision ?\n /*#__PURE__*/\n // @ts-expect-error `children` are passed via the render prop\n _jsx(VisuallyHidden, {}) :\n /*#__PURE__*/\n // @ts-expect-error `children` are passed via the render prop\n _jsx(BaseControl.VisualLabel, {\n as: \"div\"\n }),\n children: label\n }), /*#__PURE__*/_jsxs(InputBase, {\n __next40pxDefaultSize: true,\n size: size,\n suffix: /*#__PURE__*/_jsx(SelectControlChevronDown, {}),\n children: [/*#__PURE__*/_jsx(CustomSelectButton, {\n ...restProps,\n size: size,\n store: store\n // Match legacy behavior (move selection rather than open the popover)\n ,\n showOnKeyDown: !isLegacy\n }), /*#__PURE__*/_jsx(Styled.SelectPopover, {\n gutter: 12,\n store: store,\n sameWidth: true,\n slide: false,\n onKeyDown: onSelectPopoverKeyDown\n // Match legacy behavior\n ,\n flip: !isLegacy,\n children: /*#__PURE__*/_jsx(CustomSelectContext.Provider, {\n value: contextValue,\n children: children\n })\n })]\n })]\n })\n );\n}\nexport default CustomSelect;"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,cAAyB;AAKzB,qBAAoD;AACpD,kBAAgC;AAKhC,6BAA+B;AAC/B,aAAwB;AACxB,wBAAsB;AACtB,0BAAqC;AACrC,0BAAwB;AACxB,yBAA2C;AACpC,IAAM,0BAAsB,8BAAc,MAAS;AAC1D,oBAAoB,cAAc;AAClC,SAAS,2BAA2B,OAAO;AACzC,QAAM,eAAe,MAAM,QAAQ,KAAK,IAAI,MAAM,WAAW,IAAI,UAAU,UAAa,UAAU;AAClG,MAAI,cAAc;AAChB,eAAO,gBAAG,gBAAgB;AAAA,EAC5B;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,WAAW,IAAI,MAAM,CAAC,QAAI;AAAA;AAAA,UAEvC,gBAAG,oBAAoB,qBAAqB,MAAM,MAAM;AAAA,MAAG,MAAM;AAAA,IAAM;AAAA,EACzE;AACA,SAAO;AACT;AACA,IAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM;AAAA,IACJ,OAAO;AAAA,EACT,IAAY,sBAAc,KAAK;AAC/B,QAAM,kCAA8B,wBAAQ,MAAM,uBAAuB,4BAA4B,CAAC,mBAAmB,CAAC;AAC1H,SAAoB,uCAAAA,KAAY,eAAQ;AAAA,IACtC,GAAG;AAAA,IACH;AAAA,IACA,qBAAqB,CAAC,CAAC;AAAA,IACvB;AAAA,IACA,UAAU,4BAA4B,YAAY;AAAA,EACpD,CAAC;AACH;AACA,SAAS,aAAa,OAAO;AAC3B,QAAM;AAAA,IACJ;AAAA,IACA,sBAAsB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,6BAAyB,4BAAY,OAAK;AAC9C,QAAI,UAAU;AACZ,QAAE,gBAAgB;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AACb,QAAM,mBAAe,wBAAQ,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,EACF,IAAI,CAAC,OAAO,IAAI,CAAC;AACjB;AAAA;AAAA,IAGE,uCAAAC,MAAM,OAAO;AAAA,MACX;AAAA,MACA,UAAU,CAAc,uCAAAD,KAAa,qBAAa;AAAA,QAChD;AAAA,QACA,QAAQ;AAAA;AAAA,UAGR,uCAAAA,KAAK,uCAAgB,CAAC,CAAC;AAAA;AAAA;AAAA,UAGvB,uCAAAA,KAAK,oBAAAE,QAAY,aAAa;AAAA,YAC5B,IAAI;AAAA,UACN,CAAC;AAAA;AAAA,QACD,UAAU;AAAA,MACZ,CAAC,GAAgB,uCAAAD,MAAM,kBAAAE,SAAW;AAAA,QAChC,uBAAuB;AAAA,QACvB;AAAA,QACA,QAAqB,uCAAAH,KAAK,oBAAAI,SAA0B,CAAC,CAAC;AAAA,QACtD,UAAU,CAAc,uCAAAJ,KAAK,oBAAoB;AAAA,UAC/C,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UAGA,eAAe,CAAC;AAAA,QAClB,CAAC,GAAgB,uCAAAA,KAAY,sBAAe;AAAA,UAC1C,QAAQ;AAAA,UACR;AAAA,UACA,WAAW;AAAA,UACX,OAAO;AAAA,UACP,WAAW;AAAA,UAGX,MAAM,CAAC;AAAA,UACP,UAAuB,uCAAAA,KAAK,oBAAoB,UAAU;AAAA,YACxD,OAAO;AAAA,YACP;AAAA,UACF,CAAC;AAAA,QACH,CAAC,CAAC;AAAA,MACJ,CAAC,CAAC;AAAA,IACJ,CAAC;AAAA;AAEL;AACA,IAAO,wBAAQ;",
6
6
  "names": ["_jsx", "_jsxs", "BaseControl", "InputBase", "SelectControlChevronDown"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/custom-select-control-v2/index.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\n/**\n * Internal dependencies\n */\nimport _CustomSelect from './custom-select';\nimport Item from './item';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CustomSelectControlV2(props) {\n const {\n defaultValue,\n onChange,\n value,\n ...restProps\n } = props;\n // Forward props + store from v2 implementation\n const store = Ariakit.useSelectStore({\n setValue: nextValue => onChange?.(nextValue),\n defaultValue,\n value\n });\n return /*#__PURE__*/_jsx(_CustomSelect, {\n ...restProps,\n store: store\n });\n}\nCustomSelectControlV2.Item = Item;\nexport default CustomSelectControlV2;"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,cAAyB;AAIzB,2BAA0B;AAC1B,kBAAiB;AACjB,yBAA4B;AAC5B,SAAS,sBAAsB,OAAO;AACpC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,QAAgB,uBAAe;AAAA,IACnC,UAAU,eAAa,WAAW,SAAS;AAAA,IAC3C;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAoB,uCAAAA,KAAK,qBAAAC,SAAe;AAAA,IACtC,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH;AACA,sBAAsB,OAAO,YAAAC;AAC7B,IAAO,mCAAQ;",
6
- "names": ["_jsx", "_CustomSelect", "Item"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\n/**\n * Internal dependencies\n */\nimport CustomSelect from './custom-select';\nimport Item from './item';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CustomSelectControlV2(props) {\n const {\n defaultValue,\n onChange,\n value,\n ...restProps\n } = props;\n // Forward props + store from v2 implementation\n const store = Ariakit.useSelectStore({\n setValue: nextValue => onChange?.(nextValue),\n defaultValue,\n value\n });\n return /*#__PURE__*/_jsx(CustomSelect, {\n ...restProps,\n store: store\n });\n}\nCustomSelectControlV2.Item = Item;\nexport default CustomSelectControlV2;"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,cAAyB;AAIzB,2BAAyB;AACzB,kBAAiB;AACjB,yBAA4B;AAC5B,SAAS,sBAAsB,OAAO;AACpC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,QAAgB,uBAAe;AAAA,IACnC,UAAU,eAAa,WAAW,SAAS;AAAA,IAC3C;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAoB,uCAAAA,KAAK,qBAAAC,SAAc;AAAA,IACrC,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH;AACA,sBAAsB,OAAO,YAAAC;AAC7B,IAAO,mCAAQ;",
6
+ "names": ["_jsx", "CustomSelect", "Item"]
7
7
  }
@@ -107,7 +107,7 @@ function SandBox({
107
107
  function isFrameAccessible() {
108
108
  try {
109
109
  return !!ref.current?.contentDocument?.body;
110
- } catch (e) {
110
+ } catch {
111
111
  return false;
112
112
  }
113
113
  }
@@ -172,7 +172,7 @@ function SandBox({
172
172
  if ("string" === typeof data) {
173
173
  try {
174
174
  data = JSON.parse(data);
175
- } catch (e) {
175
+ } catch {
176
176
  }
177
177
  }
178
178
  if ("resize" !== data.action) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/sandbox/index.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { renderToString, useRef, useState, useEffect } from '@wordpress/element';\nimport { useFocusableIframe, useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst observeAndResizeJS = function () {\n const {\n MutationObserver\n } = window;\n if (!MutationObserver || !document.body || !window.parent) {\n return;\n }\n function sendResize() {\n const clientBoundingRect = document.body.getBoundingClientRect();\n window.parent.postMessage({\n action: 'resize',\n width: clientBoundingRect.width,\n height: clientBoundingRect.height\n }, '*');\n }\n const observer = new MutationObserver(sendResize);\n observer.observe(document.body, {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n });\n window.addEventListener('load', sendResize, true);\n\n // Hack: Remove viewport unit styles, as these are relative\n // the iframe root and interfere with our mechanism for\n // determining the unconstrained page bounds.\n function removeViewportStyles(ruleOrNode) {\n if (ruleOrNode.style) {\n ['width', 'height', 'minHeight', 'maxHeight'].forEach(function (style) {\n if (/^\\\\d+(vw|vh|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)$/.test(ruleOrNode.style[style])) {\n ruleOrNode.style[style] = '';\n }\n });\n }\n }\n Array.prototype.forEach.call(document.querySelectorAll('[style]'), removeViewportStyles);\n Array.prototype.forEach.call(document.styleSheets, function (stylesheet) {\n Array.prototype.forEach.call(stylesheet.cssRules || stylesheet.rules, removeViewportStyles);\n });\n document.body.style.position = 'absolute';\n document.body.style.width = '100%';\n document.body.setAttribute('data-resizable-iframe-connected', '');\n sendResize();\n\n // Resize events can change the width of elements with 100% width, but we don't\n // get an DOM mutations for that, so do the resize when the window is resized, too.\n window.addEventListener('resize', sendResize, true);\n};\n\n// TODO: These styles shouldn't be coupled with WordPress.\nconst style = `\n\tbody {\n\t\tmargin: 0;\n\t}\n\thtml,\n\tbody,\n\tbody > div {\n\t\twidth: 100%;\n\t}\n\thtml.wp-has-aspect-ratio,\n\tbody.wp-has-aspect-ratio,\n\tbody.wp-has-aspect-ratio > div,\n\tbody.wp-has-aspect-ratio > div iframe {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow: hidden; /* If it has an aspect ratio, it shouldn't scroll. */\n\t}\n\tbody > div > * {\n\t\tmargin-top: 0 !important; /* Has to have !important to override inline styles. */\n\t\tmargin-bottom: 0 !important;\n\t}\n`;\n\n/**\n * This component provides an isolated environment for arbitrary HTML via iframes.\n *\n * ```jsx\n * import { SandBox } from '@wordpress/components';\n *\n * const MySandBox = () => (\n * \t<SandBox html=\"<p>Content</p>\" title=\"SandBox\" type=\"embed\" />\n * );\n * ```\n */\nfunction SandBox({\n html = '',\n title = '',\n type,\n styles = [],\n scripts = [],\n onFocus,\n tabIndex\n}) {\n const ref = useRef(null);\n const [width, setWidth] = useState(0);\n const [height, setHeight] = useState(0);\n function isFrameAccessible() {\n try {\n return !!ref.current?.contentDocument?.body;\n } catch (e) {\n return false;\n }\n }\n function trySandBox(forceRerender = false) {\n if (!isFrameAccessible()) {\n return;\n }\n const {\n contentDocument,\n ownerDocument\n } = ref.current;\n if (!forceRerender && null !== contentDocument?.body.getAttribute('data-resizable-iframe-connected')) {\n return;\n }\n\n // Put the html snippet into a html document, and then write it to the iframe's document\n // we can use this in the future to inject custom styles or scripts.\n // Scripts go into the body rather than the head, to support embedded content such as Instagram\n // that expect the scripts to be part of the body.\n const htmlDoc = /*#__PURE__*/_jsxs(\"html\", {\n lang: ownerDocument.documentElement.lang,\n className: type,\n children: [/*#__PURE__*/_jsxs(\"head\", {\n children: [/*#__PURE__*/_jsx(\"title\", {\n children: title\n }), /*#__PURE__*/_jsx(\"style\", {\n dangerouslySetInnerHTML: {\n __html: style\n }\n }), styles.map((rules, i) => /*#__PURE__*/_jsx(\"style\", {\n dangerouslySetInnerHTML: {\n __html: rules\n }\n }, i))]\n }), /*#__PURE__*/_jsxs(\"body\", {\n \"data-resizable-iframe-connected\": \"data-resizable-iframe-connected\",\n className: type,\n children: [/*#__PURE__*/_jsx(\"div\", {\n dangerouslySetInnerHTML: {\n __html: html\n }\n }), /*#__PURE__*/_jsx(\"script\", {\n type: \"text/javascript\",\n dangerouslySetInnerHTML: {\n __html: `(${observeAndResizeJS.toString()})();`\n }\n }), scripts.map(src => /*#__PURE__*/_jsx(\"script\", {\n src: src\n }, src))]\n })]\n });\n\n // Writing the document like this makes it act in the same way as if it was\n // loaded over the network, so DOM creation and mutation, script execution, etc.\n // all work as expected.\n contentDocument.open();\n contentDocument.write('<!DOCTYPE html>' + renderToString(htmlDoc));\n contentDocument.close();\n }\n useEffect(() => {\n trySandBox();\n function tryNoForceSandBox() {\n trySandBox(false);\n }\n function checkMessageForResize(event) {\n const iframe = ref.current;\n\n // Verify that the mounted element is the source of the message.\n if (!iframe || iframe.contentWindow !== event.source) {\n return;\n }\n\n // Attempt to parse the message data as JSON if passed as string.\n let data = event.data || {};\n if ('string' === typeof data) {\n try {\n data = JSON.parse(data);\n } catch (e) {}\n }\n\n // Update the state only if the message is formatted as we expect,\n // i.e. as an object with a 'resize' action.\n if ('resize' !== data.action) {\n return;\n }\n setWidth(data.width);\n setHeight(data.height);\n }\n const iframe = ref.current;\n const defaultView = iframe?.ownerDocument?.defaultView;\n\n // This used to be registered using <iframe onLoad={} />, but it made the iframe blank\n // after reordering the containing block. See these two issues for more details:\n // https://github.com/WordPress/gutenberg/issues/6146\n // https://github.com/facebook/react/issues/18752\n iframe?.addEventListener('load', tryNoForceSandBox, false);\n defaultView?.addEventListener('message', checkMessageForResize);\n return () => {\n iframe?.removeEventListener('load', tryNoForceSandBox, false);\n defaultView?.removeEventListener('message', checkMessageForResize);\n };\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, []);\n useEffect(() => {\n trySandBox();\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, [title, styles, scripts]);\n useEffect(() => {\n trySandBox(true);\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, [html, type]);\n return /*#__PURE__*/_jsx(\"iframe\", {\n ref: useMergeRefs([ref, useFocusableIframe()]),\n title: title,\n tabIndex: tabIndex,\n className: \"components-sandbox\",\n sandbox: \"allow-scripts allow-same-origin allow-presentation\",\n onFocus: onFocus,\n width: Math.ceil(width),\n height: Math.ceil(height)\n });\n}\nexport default SandBox;"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { renderToString, useRef, useState, useEffect } from '@wordpress/element';\nimport { useFocusableIframe, useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst observeAndResizeJS = function () {\n const {\n MutationObserver\n } = window;\n if (!MutationObserver || !document.body || !window.parent) {\n return;\n }\n function sendResize() {\n const clientBoundingRect = document.body.getBoundingClientRect();\n window.parent.postMessage({\n action: 'resize',\n width: clientBoundingRect.width,\n height: clientBoundingRect.height\n }, '*');\n }\n const observer = new MutationObserver(sendResize);\n observer.observe(document.body, {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n });\n window.addEventListener('load', sendResize, true);\n\n // Hack: Remove viewport unit styles, as these are relative\n // the iframe root and interfere with our mechanism for\n // determining the unconstrained page bounds.\n function removeViewportStyles(ruleOrNode) {\n if (ruleOrNode.style) {\n ['width', 'height', 'minHeight', 'maxHeight'].forEach(function (style) {\n if (/^\\\\d+(vw|vh|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)$/.test(ruleOrNode.style[style])) {\n ruleOrNode.style[style] = '';\n }\n });\n }\n }\n Array.prototype.forEach.call(document.querySelectorAll('[style]'), removeViewportStyles);\n Array.prototype.forEach.call(document.styleSheets, function (stylesheet) {\n Array.prototype.forEach.call(stylesheet.cssRules || stylesheet.rules, removeViewportStyles);\n });\n document.body.style.position = 'absolute';\n document.body.style.width = '100%';\n document.body.setAttribute('data-resizable-iframe-connected', '');\n sendResize();\n\n // Resize events can change the width of elements with 100% width, but we don't\n // get an DOM mutations for that, so do the resize when the window is resized, too.\n window.addEventListener('resize', sendResize, true);\n};\n\n// TODO: These styles shouldn't be coupled with WordPress.\nconst style = `\n\tbody {\n\t\tmargin: 0;\n\t}\n\thtml,\n\tbody,\n\tbody > div {\n\t\twidth: 100%;\n\t}\n\thtml.wp-has-aspect-ratio,\n\tbody.wp-has-aspect-ratio,\n\tbody.wp-has-aspect-ratio > div,\n\tbody.wp-has-aspect-ratio > div iframe {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow: hidden; /* If it has an aspect ratio, it shouldn't scroll. */\n\t}\n\tbody > div > * {\n\t\tmargin-top: 0 !important; /* Has to have !important to override inline styles. */\n\t\tmargin-bottom: 0 !important;\n\t}\n`;\n\n/**\n * This component provides an isolated environment for arbitrary HTML via iframes.\n *\n * ```jsx\n * import { SandBox } from '@wordpress/components';\n *\n * const MySandBox = () => (\n * \t<SandBox html=\"<p>Content</p>\" title=\"SandBox\" type=\"embed\" />\n * );\n * ```\n */\nfunction SandBox({\n html = '',\n title = '',\n type,\n styles = [],\n scripts = [],\n onFocus,\n tabIndex\n}) {\n const ref = useRef(null);\n const [width, setWidth] = useState(0);\n const [height, setHeight] = useState(0);\n function isFrameAccessible() {\n try {\n return !!ref.current?.contentDocument?.body;\n } catch {\n return false;\n }\n }\n function trySandBox(forceRerender = false) {\n if (!isFrameAccessible()) {\n return;\n }\n const {\n contentDocument,\n ownerDocument\n } = ref.current;\n if (!forceRerender && null !== contentDocument?.body.getAttribute('data-resizable-iframe-connected')) {\n return;\n }\n\n // Put the html snippet into a html document, and then write it to the iframe's document\n // we can use this in the future to inject custom styles or scripts.\n // Scripts go into the body rather than the head, to support embedded content such as Instagram\n // that expect the scripts to be part of the body.\n const htmlDoc = /*#__PURE__*/_jsxs(\"html\", {\n lang: ownerDocument.documentElement.lang,\n className: type,\n children: [/*#__PURE__*/_jsxs(\"head\", {\n children: [/*#__PURE__*/_jsx(\"title\", {\n children: title\n }), /*#__PURE__*/_jsx(\"style\", {\n dangerouslySetInnerHTML: {\n __html: style\n }\n }), styles.map((rules, i) => /*#__PURE__*/_jsx(\"style\", {\n dangerouslySetInnerHTML: {\n __html: rules\n }\n }, i))]\n }), /*#__PURE__*/_jsxs(\"body\", {\n \"data-resizable-iframe-connected\": \"data-resizable-iframe-connected\",\n className: type,\n children: [/*#__PURE__*/_jsx(\"div\", {\n dangerouslySetInnerHTML: {\n __html: html\n }\n }), /*#__PURE__*/_jsx(\"script\", {\n type: \"text/javascript\",\n dangerouslySetInnerHTML: {\n __html: `(${observeAndResizeJS.toString()})();`\n }\n }), scripts.map(src => /*#__PURE__*/_jsx(\"script\", {\n src: src\n }, src))]\n })]\n });\n\n // Writing the document like this makes it act in the same way as if it was\n // loaded over the network, so DOM creation and mutation, script execution, etc.\n // all work as expected.\n contentDocument.open();\n contentDocument.write('<!DOCTYPE html>' + renderToString(htmlDoc));\n contentDocument.close();\n }\n useEffect(() => {\n trySandBox();\n function tryNoForceSandBox() {\n trySandBox(false);\n }\n function checkMessageForResize(event) {\n const iframe = ref.current;\n\n // Verify that the mounted element is the source of the message.\n if (!iframe || iframe.contentWindow !== event.source) {\n return;\n }\n\n // Attempt to parse the message data as JSON if passed as string.\n let data = event.data || {};\n if ('string' === typeof data) {\n try {\n data = JSON.parse(data);\n } catch {}\n }\n\n // Update the state only if the message is formatted as we expect,\n // i.e. as an object with a 'resize' action.\n if ('resize' !== data.action) {\n return;\n }\n setWidth(data.width);\n setHeight(data.height);\n }\n const iframe = ref.current;\n const defaultView = iframe?.ownerDocument?.defaultView;\n\n // This used to be registered using <iframe onLoad={} />, but it made the iframe blank\n // after reordering the containing block. See these two issues for more details:\n // https://github.com/WordPress/gutenberg/issues/6146\n // https://github.com/facebook/react/issues/18752\n iframe?.addEventListener('load', tryNoForceSandBox, false);\n defaultView?.addEventListener('message', checkMessageForResize);\n return () => {\n iframe?.removeEventListener('load', tryNoForceSandBox, false);\n defaultView?.removeEventListener('message', checkMessageForResize);\n };\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, []);\n useEffect(() => {\n trySandBox();\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, [title, styles, scripts]);\n useEffect(() => {\n trySandBox(true);\n // Passing `exhaustive-deps` will likely involve a more detailed refactor.\n // See https://github.com/WordPress/gutenberg/pull/44378\n }, [html, type]);\n return /*#__PURE__*/_jsx(\"iframe\", {\n ref: useMergeRefs([ref, useFocusableIframe()]),\n title: title,\n tabIndex: tabIndex,\n className: \"components-sandbox\",\n sandbox: \"allow-scripts allow-same-origin allow-presentation\",\n onFocus: onFocus,\n width: Math.ceil(width),\n height: Math.ceil(height)\n });\n}\nexport default SandBox;"],
5
+ "mappings": "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",
6
6
  "names": ["style", "_jsxs", "_jsx", "iframe"]
7
7
  }
@@ -28,17 +28,21 @@ var import_element = require("@wordpress/element");
28
28
  var import_validity_indicator = require("./validity-indicator.cjs");
29
29
  var import_jsx_runtime = require("react/jsx-runtime");
30
30
  function appendRequiredIndicator(label, required, markWhenOptional) {
31
+ let suffix;
31
32
  if (required && !markWhenOptional) {
32
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
33
- children: [label, " ", `(${(0, import_i18n.__)("Required")})`]
34
- });
33
+ suffix = `(${(0, import_i18n.__)("Required")})`;
34
+ } else if (!required && markWhenOptional) {
35
+ suffix = `(${(0, import_i18n.__)("Optional")})`;
35
36
  }
36
- if (!required && markWhenOptional) {
37
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
38
- children: [label, " ", `(${(0, import_i18n.__)("Optional")})`]
39
- });
37
+ if (!suffix) {
38
+ return label;
40
39
  }
41
- return label;
40
+ if (typeof label === "string") {
41
+ return `${label} ${suffix}`;
42
+ }
43
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
44
+ children: [label, " ", suffix]
45
+ });
42
46
  }
43
47
  var VALIDITY_VISIBLE_ATTRIBUTE = "data-validity-visible";
44
48
  var className = "components-validated-control";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/validated-form-controls/control-with-error.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { cloneElement, forwardRef, useEffect, useId, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nimport { ValidityIndicator } from './validity-indicator';\nimport { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nfunction appendRequiredIndicator(label, required, markWhenOptional) {\n if (required && !markWhenOptional) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [label, \" \", `(${__('Required')})`]\n });\n }\n if (!required && markWhenOptional) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [label, \" \", `(${__('Optional')})`]\n });\n }\n return label;\n}\nconst VALIDITY_VISIBLE_ATTRIBUTE = 'data-validity-visible';\nconst className = 'components-validated-control';\n\n/**\n * HTML elements that support the Constraint Validation API.\n *\n * Here, we exclude HTMLButtonElement because although it does technically support the API,\n * normal buttons are actually exempted from any validation.\n * @see https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Form_validation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement/willValidate\n */\n\nfunction UnforwardedControlWithError({\n required,\n markWhenOptional,\n customValidity,\n getValidityTarget,\n children\n}, forwardedRef) {\n const [errorMessage, setErrorMessage] = useState();\n const [statusMessage, setStatusMessage] = useState();\n const [showMessage, setShowMessage] = useState(false);\n const [isTouched, setIsTouched] = useState(false);\n\n // Ensure that error messages are visible when an `invalid` event is triggered,\n // e.g. when a form is submitted or reportValidity() is called.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n const handler = () => {\n setShowMessage(true);\n validityTarget?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, '');\n };\n validityTarget?.addEventListener('invalid', handler);\n return () => validityTarget?.removeEventListener('invalid', handler);\n }, [getValidityTarget]);\n\n // Suppress the native error popover, while keeping the focus behavior intact.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n const suppressNativePopover = event => {\n event.preventDefault();\n const target = event.target;\n const firstErrorInForm = Array.from(target.form?.elements ?? []).find(el => !el.validity.valid);\n if (!target.form || firstErrorInForm === target) {\n target.focus();\n }\n };\n\n // Radio inputs need special handling because all radio inputs with the\n // same `name` will be marked as invalid. Without this handling, the last radio option\n // will be focused with an unsuppressed native popover.\n const radioSibilings = validityTarget?.type === 'radio' && validityTarget?.name ? Array.from(validityTarget?.closest(`.${className}`)?.querySelectorAll(`input[type=\"radio\"][name=\"${validityTarget?.name}\"]`) ?? []).filter(sibling => sibling !== validityTarget) : [];\n validityTarget?.addEventListener('invalid', suppressNativePopover);\n radioSibilings.forEach(sibling => sibling.addEventListener('invalid', suppressNativePopover));\n return () => {\n validityTarget?.removeEventListener('invalid', suppressNativePopover);\n radioSibilings.forEach(sibling => sibling.removeEventListener('invalid', suppressNativePopover));\n };\n }, [getValidityTarget]);\n\n // Handle validity messages.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n if (!customValidity?.type) {\n validityTarget?.setCustomValidity('');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage(undefined);\n return;\n }\n switch (customValidity.type) {\n case 'validating':\n {\n validityTarget?.setCustomValidity('');\n setErrorMessage(undefined);\n setStatusMessage({\n type: 'validating',\n message: customValidity.message\n });\n break;\n }\n case 'valid':\n {\n validityTarget?.setCustomValidity('');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage({\n type: 'valid',\n message: customValidity.message\n });\n break;\n }\n case 'invalid':\n {\n validityTarget?.setCustomValidity(customValidity.message ?? '');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage(undefined);\n break;\n }\n }\n }, [customValidity, getValidityTarget]);\n\n // Show messages if field has been touched (i.e. has blurred at least once),\n // or validation has been triggered by the consumer/user.\n useEffect(() => {\n if (!isTouched || showMessage) {\n return;\n }\n if (customValidity?.type === 'validating') {\n // Don't show validating indicators for quick calls that take less than 1 sec.\n const timer = setTimeout(() => {\n setShowMessage(true);\n }, 1000);\n return () => clearTimeout(timer);\n }\n setShowMessage(true);\n }, [isTouched, customValidity?.type, showMessage]);\n\n // Mark blurred fields as touched.\n const onBlur = event => {\n if (isTouched) {\n return;\n }\n\n // Only consider \"blurred from the component\" if focus has fully left the wrapping div.\n // This prevents unnecessary blurs from components with multiple focusable elements.\n if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {\n setIsTouched(true);\n getValidityTarget()?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, '');\n }\n };\n const messageId = useId();\n const message = (() => {\n if (errorMessage) {\n return /*#__PURE__*/_jsx(ValidityIndicator, {\n id: messageId,\n type: \"invalid\",\n message: errorMessage\n });\n }\n if (statusMessage?.type) {\n return /*#__PURE__*/_jsx(ValidityIndicator, {\n id: messageId,\n type: statusMessage.type,\n message: statusMessage.message\n });\n }\n return null;\n })();\n const visibleMessage = showMessage ? message : null;\n\n // Imperatively manage `aria-describedby` on the validity target so we\n // merge with any value the child control sets internally (e.g. from a\n // `help` prop), rather than competing with it at the props level.\n useEffect(() => {\n const target = getValidityTarget();\n if (!target) {\n return;\n }\n function setDescribedBy(el, shouldAdd) {\n const ids = (el.getAttribute('aria-describedby') ?? '').split(' ').filter(id => id && id !== messageId);\n if (shouldAdd) {\n ids.push(messageId);\n }\n if (ids.length) {\n el.setAttribute('aria-describedby', ids.join(' '));\n } else {\n el.removeAttribute('aria-describedby');\n }\n }\n setDescribedBy(target, !!visibleMessage);\n return () => setDescribedBy(target, false);\n }, [visibleMessage, messageId, getValidityTarget]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n ref: forwardedRef,\n onBlur: onBlur,\n children: [cloneElement(children, {\n label: appendRequiredIndicator(children.props.label, required, markWhenOptional),\n required\n }), /*#__PURE__*/_jsx(\"div\", {\n \"aria-live\": \"polite\",\n children: visibleMessage\n })]\n });\n}\nexport const ControlWithError = forwardRef(UnforwardedControlWithError);\nControlWithError.displayName = 'ControlWithError';"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { cloneElement, forwardRef, useEffect, useId, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nimport { ValidityIndicator } from './validity-indicator';\nimport { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nfunction appendRequiredIndicator(label, required, markWhenOptional) {\n let suffix;\n if (required && !markWhenOptional) {\n suffix = `(${__('Required')})`;\n } else if (!required && markWhenOptional) {\n suffix = `(${__('Optional')})`;\n }\n if (!suffix) {\n return label;\n }\n if (typeof label === 'string') {\n return `${label} ${suffix}`;\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [label, \" \", suffix]\n });\n}\nconst VALIDITY_VISIBLE_ATTRIBUTE = 'data-validity-visible';\nconst className = 'components-validated-control';\n\n/**\n * HTML elements that support the Constraint Validation API.\n *\n * Here, we exclude HTMLButtonElement because although it does technically support the API,\n * normal buttons are actually exempted from any validation.\n * @see https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/Form_validation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement/willValidate\n */\n\nfunction UnforwardedControlWithError({\n required,\n markWhenOptional,\n customValidity,\n getValidityTarget,\n children\n}, forwardedRef) {\n const [errorMessage, setErrorMessage] = useState();\n const [statusMessage, setStatusMessage] = useState();\n const [showMessage, setShowMessage] = useState(false);\n const [isTouched, setIsTouched] = useState(false);\n\n // Ensure that error messages are visible when an `invalid` event is triggered,\n // e.g. when a form is submitted or reportValidity() is called.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n const handler = () => {\n setShowMessage(true);\n validityTarget?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, '');\n };\n validityTarget?.addEventListener('invalid', handler);\n return () => validityTarget?.removeEventListener('invalid', handler);\n }, [getValidityTarget]);\n\n // Suppress the native error popover, while keeping the focus behavior intact.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n const suppressNativePopover = event => {\n event.preventDefault();\n const target = event.target;\n const firstErrorInForm = Array.from(target.form?.elements ?? []).find(el => !el.validity.valid);\n if (!target.form || firstErrorInForm === target) {\n target.focus();\n }\n };\n\n // Radio inputs need special handling because all radio inputs with the\n // same `name` will be marked as invalid. Without this handling, the last radio option\n // will be focused with an unsuppressed native popover.\n const radioSibilings = validityTarget?.type === 'radio' && validityTarget?.name ? Array.from(validityTarget?.closest(`.${className}`)?.querySelectorAll(`input[type=\"radio\"][name=\"${validityTarget?.name}\"]`) ?? []).filter(sibling => sibling !== validityTarget) : [];\n validityTarget?.addEventListener('invalid', suppressNativePopover);\n radioSibilings.forEach(sibling => sibling.addEventListener('invalid', suppressNativePopover));\n return () => {\n validityTarget?.removeEventListener('invalid', suppressNativePopover);\n radioSibilings.forEach(sibling => sibling.removeEventListener('invalid', suppressNativePopover));\n };\n }, [getValidityTarget]);\n\n // Handle validity messages.\n useEffect(() => {\n const validityTarget = getValidityTarget();\n if (!customValidity?.type) {\n validityTarget?.setCustomValidity('');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage(undefined);\n return;\n }\n switch (customValidity.type) {\n case 'validating':\n {\n validityTarget?.setCustomValidity('');\n setErrorMessage(undefined);\n setStatusMessage({\n type: 'validating',\n message: customValidity.message\n });\n break;\n }\n case 'valid':\n {\n validityTarget?.setCustomValidity('');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage({\n type: 'valid',\n message: customValidity.message\n });\n break;\n }\n case 'invalid':\n {\n validityTarget?.setCustomValidity(customValidity.message ?? '');\n setErrorMessage(validityTarget?.validationMessage);\n setStatusMessage(undefined);\n break;\n }\n }\n }, [customValidity, getValidityTarget]);\n\n // Show messages if field has been touched (i.e. has blurred at least once),\n // or validation has been triggered by the consumer/user.\n useEffect(() => {\n if (!isTouched || showMessage) {\n return;\n }\n if (customValidity?.type === 'validating') {\n // Don't show validating indicators for quick calls that take less than 1 sec.\n const timer = setTimeout(() => {\n setShowMessage(true);\n }, 1000);\n return () => clearTimeout(timer);\n }\n setShowMessage(true);\n }, [isTouched, customValidity?.type, showMessage]);\n\n // Mark blurred fields as touched.\n const onBlur = event => {\n if (isTouched) {\n return;\n }\n\n // Only consider \"blurred from the component\" if focus has fully left the wrapping div.\n // This prevents unnecessary blurs from components with multiple focusable elements.\n if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {\n setIsTouched(true);\n getValidityTarget()?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, '');\n }\n };\n const messageId = useId();\n const message = (() => {\n if (errorMessage) {\n return /*#__PURE__*/_jsx(ValidityIndicator, {\n id: messageId,\n type: \"invalid\",\n message: errorMessage\n });\n }\n if (statusMessage?.type) {\n return /*#__PURE__*/_jsx(ValidityIndicator, {\n id: messageId,\n type: statusMessage.type,\n message: statusMessage.message\n });\n }\n return null;\n })();\n const visibleMessage = showMessage ? message : null;\n\n // Imperatively manage `aria-describedby` on the validity target so we\n // merge with any value the child control sets internally (e.g. from a\n // `help` prop), rather than competing with it at the props level.\n useEffect(() => {\n const target = getValidityTarget();\n if (!target) {\n return;\n }\n function setDescribedBy(el, shouldAdd) {\n const ids = (el.getAttribute('aria-describedby') ?? '').split(' ').filter(id => id && id !== messageId);\n if (shouldAdd) {\n ids.push(messageId);\n }\n if (ids.length) {\n el.setAttribute('aria-describedby', ids.join(' '));\n } else {\n el.removeAttribute('aria-describedby');\n }\n }\n setDescribedBy(target, !!visibleMessage);\n return () => setDescribedBy(target, false);\n }, [visibleMessage, messageId, getValidityTarget]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n ref: forwardedRef,\n onBlur: onBlur,\n children: [cloneElement(children, {\n label: appendRequiredIndicator(children.props.label, required, markWhenOptional),\n required\n }), /*#__PURE__*/_jsx(\"div\", {\n \"aria-live\": \"polite\",\n children: visibleMessage\n })]\n });\n}\nexport const ControlWithError = forwardRef(UnforwardedControlWithError);\nControlWithError.displayName = 'ControlWithError';"],
5
+ "mappings": "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",
6
6
  "names": ["_jsxs", "_Fragment", "_jsx"]
7
7
  }
@@ -41,92 +41,88 @@ function ListBox({
41
41
  }, option.key))
42
42
  });
43
43
  }
44
- function getAutoCompleterUI(autocompleter) {
44
+ function AutocompleterUI({
45
+ autocompleter,
46
+ filterValue,
47
+ instanceId,
48
+ listBoxId,
49
+ className,
50
+ selectedIndex,
51
+ onChangeOptions,
52
+ onSelect,
53
+ reset,
54
+ contentRef
55
+ }) {
45
56
  const useItems = autocompleter.useItems ?? getDefaultUseItems(autocompleter);
46
- function AutocompleterUI({
47
- filterValue,
48
- instanceId,
49
- listBoxId,
50
- className,
51
- selectedIndex,
52
- onChangeOptions,
53
- onSelect,
54
- onReset,
55
- reset,
56
- contentRef
57
- }) {
58
- const [items] = useItems(filterValue);
59
- const popoverAnchor = useAnchor({
60
- editableContentElement: contentRef.current
61
- });
62
- const [needsA11yCompat, setNeedsA11yCompat] = useState(false);
63
- const popoverRef = useRef(null);
64
- const popoverRefs = useMergeRefs([popoverRef, useRefEffect((node) => {
65
- if (!contentRef.current) {
66
- return;
67
- }
68
- setNeedsA11yCompat(node.ownerDocument !== contentRef.current.ownerDocument);
69
- }, [contentRef])]);
70
- useOnClickOutside(popoverRef, reset);
71
- const debouncedSpeak = useDebounce(speak, 500);
72
- function announce(options) {
73
- if (!debouncedSpeak) {
74
- return;
75
- }
76
- if (!!options.length) {
77
- if (filterValue) {
78
- debouncedSpeak(sprintf(
79
- /* translators: %d: number of results. */
80
- _n("%d result found, use up and down arrow keys to navigate.", "%d results found, use up and down arrow keys to navigate.", options.length),
81
- options.length
82
- ), "assertive");
83
- } else {
84
- debouncedSpeak(sprintf(
85
- /* translators: %d: number of results. */
86
- _n("Initial %d result loaded. Type to filter all available results. Use up and down arrow keys to navigate.", "Initial %d results loaded. Type to filter all available results. Use up and down arrow keys to navigate.", options.length),
87
- options.length
88
- ), "assertive");
89
- }
57
+ const [items] = useItems(filterValue);
58
+ const popoverAnchor = useAnchor({
59
+ editableContentElement: contentRef.current
60
+ });
61
+ const [needsA11yCompat, setNeedsA11yCompat] = useState(false);
62
+ const popoverRef = useRef(null);
63
+ const popoverRefs = useMergeRefs([popoverRef, useRefEffect((node) => {
64
+ if (!contentRef.current) {
65
+ return;
66
+ }
67
+ setNeedsA11yCompat(node.ownerDocument !== contentRef.current.ownerDocument);
68
+ }, [contentRef])]);
69
+ useOnClickOutside(popoverRef, reset);
70
+ const debouncedSpeak = useDebounce(speak, 500);
71
+ function announce(options) {
72
+ if (!debouncedSpeak) {
73
+ return;
74
+ }
75
+ if (!!options.length) {
76
+ if (filterValue) {
77
+ debouncedSpeak(sprintf(
78
+ /* translators: %d: number of results. */
79
+ _n("%d result found, use up and down arrow keys to navigate.", "%d results found, use up and down arrow keys to navigate.", options.length),
80
+ options.length
81
+ ), "assertive");
90
82
  } else {
91
- debouncedSpeak(__("No results."), "assertive");
83
+ debouncedSpeak(sprintf(
84
+ /* translators: %d: number of results. */
85
+ _n("Initial %d result loaded. Type to filter all available results. Use up and down arrow keys to navigate.", "Initial %d results loaded. Type to filter all available results. Use up and down arrow keys to navigate.", options.length),
86
+ options.length
87
+ ), "assertive");
92
88
  }
89
+ } else {
90
+ debouncedSpeak(__("No results."), "assertive");
93
91
  }
94
- useLayoutEffect(() => {
95
- onChangeOptions(items);
96
- announce(items);
97
- }, [items]);
98
- if (items.length === 0) {
99
- return null;
100
- }
101
- return /* @__PURE__ */ _jsxs(_Fragment, {
102
- children: [/* @__PURE__ */ _jsx(Popover, {
103
- offset: 8,
104
- focusOnMount: false,
105
- onClose: onReset,
106
- placement: "top-start",
107
- className: "components-autocomplete__popover",
108
- anchor: popoverAnchor,
109
- ref: popoverRefs,
110
- children: /* @__PURE__ */ _jsx(ListBox, {
111
- items,
112
- onSelect,
113
- selectedIndex,
114
- instanceId,
115
- listBoxId,
116
- className
117
- })
118
- }), contentRef.current && needsA11yCompat && createPortal(/* @__PURE__ */ _jsx(ListBox, {
92
+ }
93
+ useLayoutEffect(() => {
94
+ onChangeOptions(items);
95
+ announce(items);
96
+ }, [items]);
97
+ if (items.length === 0) {
98
+ return null;
99
+ }
100
+ return /* @__PURE__ */ _jsxs(_Fragment, {
101
+ children: [/* @__PURE__ */ _jsx(Popover, {
102
+ offset: 8,
103
+ focusOnMount: false,
104
+ placement: "top-start",
105
+ className: "components-autocomplete__popover",
106
+ anchor: popoverAnchor,
107
+ ref: popoverRefs,
108
+ children: /* @__PURE__ */ _jsx(ListBox, {
119
109
  items,
120
110
  onSelect,
121
111
  selectedIndex,
122
112
  instanceId,
123
113
  listBoxId,
124
- className,
125
- Component: VisuallyHidden
126
- }), contentRef.current.ownerDocument.body)]
127
- });
128
- }
129
- return AutocompleterUI;
114
+ className
115
+ })
116
+ }), contentRef.current && needsA11yCompat && createPortal(/* @__PURE__ */ _jsx(ListBox, {
117
+ items,
118
+ onSelect,
119
+ selectedIndex,
120
+ instanceId,
121
+ listBoxId,
122
+ className,
123
+ Component: VisuallyHidden
124
+ }), contentRef.current.ownerDocument.body)]
125
+ });
130
126
  }
131
127
  function useOnClickOutside(ref, handler) {
132
128
  useEffect(() => {
@@ -145,6 +141,6 @@ function useOnClickOutside(ref, handler) {
145
141
  }, [handler, ref]);
146
142
  }
147
143
  export {
148
- getAutoCompleterUI
144
+ AutocompleterUI
149
145
  };
150
146
  //# sourceMappingURL=autocompleter-ui.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/autocomplete/autocompleter-ui.tsx"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\nimport { createPortal } from 'react-dom';\n\n/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useRef, useEffect, useState } from '@wordpress/element';\nimport { useAnchor } from '@wordpress/rich-text';\nimport { useDebounce, useMergeRefs, useRefEffect } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport getDefaultUseItems from './get-default-use-items';\nimport Button from '../button';\nimport Popover from '../popover';\nimport { VisuallyHidden } from '../visually-hidden';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ListBox({\n items,\n onSelect,\n selectedIndex,\n instanceId,\n listBoxId,\n className,\n Component = 'div'\n}) {\n return /*#__PURE__*/_jsx(Component, {\n id: listBoxId,\n role: \"listbox\",\n className: \"components-autocomplete__results\",\n children: items.map((option, index) => /*#__PURE__*/_jsx(Button, {\n id: `components-autocomplete-item-${instanceId}-${option.key}`,\n role: \"option\",\n __next40pxDefaultSize: true,\n \"aria-selected\": index === selectedIndex,\n accessibleWhenDisabled: true,\n disabled: option.isDisabled,\n className: clsx('components-autocomplete__result', className, {\n // Unused, for backwards compatibility.\n 'is-selected': index === selectedIndex\n }),\n variant: index === selectedIndex ? 'primary' : undefined,\n onClick: () => onSelect(option),\n children: option.label\n }, option.key))\n });\n}\nexport function getAutoCompleterUI(autocompleter) {\n const useItems = autocompleter.useItems ?? getDefaultUseItems(autocompleter);\n function AutocompleterUI({\n filterValue,\n instanceId,\n listBoxId,\n className,\n selectedIndex,\n onChangeOptions,\n onSelect,\n onReset,\n reset,\n contentRef\n }) {\n const [items] = useItems(filterValue);\n const popoverAnchor = useAnchor({\n editableContentElement: contentRef.current\n });\n const [needsA11yCompat, setNeedsA11yCompat] = useState(false);\n const popoverRef = useRef(null);\n const popoverRefs = useMergeRefs([popoverRef, useRefEffect(node => {\n if (!contentRef.current) {\n return;\n }\n\n // If the popover is rendered in a different document than\n // the content, we need to duplicate the options list in the\n // content document so that it's available to the screen\n // readers, which check the DOM ID based aria-* attributes.\n setNeedsA11yCompat(node.ownerDocument !== contentRef.current.ownerDocument);\n }, [contentRef])]);\n useOnClickOutside(popoverRef, reset);\n const debouncedSpeak = useDebounce(speak, 500);\n function announce(options) {\n if (!debouncedSpeak) {\n return;\n }\n if (!!options.length) {\n if (filterValue) {\n debouncedSpeak(sprintf(/* translators: %d: number of results. */\n _n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', options.length), options.length), 'assertive');\n } else {\n debouncedSpeak(sprintf(/* translators: %d: number of results. */\n _n('Initial %d result loaded. Type to filter all available results. Use up and down arrow keys to navigate.', 'Initial %d results loaded. Type to filter all available results. Use up and down arrow keys to navigate.', options.length), options.length), 'assertive');\n }\n } else {\n debouncedSpeak(__('No results.'), 'assertive');\n }\n }\n useLayoutEffect(() => {\n onChangeOptions(items);\n announce(items);\n // We want to avoid introducing unexpected side effects.\n // See https://github.com/WordPress/gutenberg/pull/41820\n }, [items]);\n if (items.length === 0) {\n return null;\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Popover, {\n offset: 8,\n focusOnMount: false,\n onClose: onReset,\n placement: \"top-start\",\n className: \"components-autocomplete__popover\",\n anchor: popoverAnchor,\n ref: popoverRefs,\n children: /*#__PURE__*/_jsx(ListBox, {\n items: items,\n onSelect: onSelect,\n selectedIndex: selectedIndex,\n instanceId: instanceId,\n listBoxId: listBoxId,\n className: className\n })\n }), contentRef.current && needsA11yCompat && createPortal(/*#__PURE__*/_jsx(ListBox, {\n items: items,\n onSelect: onSelect,\n selectedIndex: selectedIndex,\n instanceId: instanceId,\n listBoxId: listBoxId,\n className: className,\n Component: VisuallyHidden\n }), contentRef.current.ownerDocument.body)]\n });\n }\n return AutocompleterUI;\n}\nfunction useOnClickOutside(ref, handler) {\n useEffect(() => {\n const listener = event => {\n // Do nothing if clicking ref's element or descendent elements, or if the ref is not referencing an element\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [handler, ref]);\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\nimport { createPortal } from 'react-dom';\n\n/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useRef, useEffect, useState } from '@wordpress/element';\nimport { useAnchor } from '@wordpress/rich-text';\nimport { useDebounce, useMergeRefs, useRefEffect } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport getDefaultUseItems from './get-default-use-items';\nimport Button from '../button';\nimport Popover from '../popover';\nimport { VisuallyHidden } from '../visually-hidden';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ListBox({\n items,\n onSelect,\n selectedIndex,\n instanceId,\n listBoxId,\n className,\n Component = 'div'\n}) {\n return /*#__PURE__*/_jsx(Component, {\n id: listBoxId,\n role: \"listbox\",\n className: \"components-autocomplete__results\",\n children: items.map((option, index) => /*#__PURE__*/_jsx(Button, {\n id: `components-autocomplete-item-${instanceId}-${option.key}`,\n role: \"option\",\n __next40pxDefaultSize: true,\n \"aria-selected\": index === selectedIndex,\n accessibleWhenDisabled: true,\n disabled: option.isDisabled,\n className: clsx('components-autocomplete__result', className, {\n // Unused, for backwards compatibility.\n 'is-selected': index === selectedIndex\n }),\n variant: index === selectedIndex ? 'primary' : undefined,\n onClick: () => onSelect(option),\n children: option.label\n }, option.key))\n });\n}\nexport function AutocompleterUI({\n autocompleter,\n filterValue,\n instanceId,\n listBoxId,\n className,\n selectedIndex,\n onChangeOptions,\n onSelect,\n reset,\n contentRef\n}) {\n // The useItems hook is derived from the autocompleter prop. This is safe\n // because the parent renders this component with key={autocompleter.name},\n // ensuring a fresh mount (and stable hook identity) when the completer changes.\n const useItems = autocompleter.useItems ?? getDefaultUseItems(autocompleter);\n // eslint-disable-next-line react-compiler/react-compiler\n const [items] = useItems(filterValue);\n const popoverAnchor = useAnchor({\n editableContentElement: contentRef.current\n });\n const [needsA11yCompat, setNeedsA11yCompat] = useState(false);\n const popoverRef = useRef(null);\n const popoverRefs = useMergeRefs([popoverRef, useRefEffect(node => {\n if (!contentRef.current) {\n return;\n }\n\n // If the popover is rendered in a different document than\n // the content, we need to duplicate the options list in the\n // content document so that it's available to the screen\n // readers, which check the DOM ID based aria-* attributes.\n setNeedsA11yCompat(node.ownerDocument !== contentRef.current.ownerDocument);\n }, [contentRef])]);\n useOnClickOutside(popoverRef, reset);\n const debouncedSpeak = useDebounce(speak, 500);\n function announce(options) {\n if (!debouncedSpeak) {\n return;\n }\n if (!!options.length) {\n if (filterValue) {\n debouncedSpeak(sprintf(/* translators: %d: number of results. */\n _n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', options.length), options.length), 'assertive');\n } else {\n debouncedSpeak(sprintf(/* translators: %d: number of results. */\n _n('Initial %d result loaded. Type to filter all available results. Use up and down arrow keys to navigate.', 'Initial %d results loaded. Type to filter all available results. Use up and down arrow keys to navigate.', options.length), options.length), 'assertive');\n }\n } else {\n debouncedSpeak(__('No results.'), 'assertive');\n }\n }\n useLayoutEffect(() => {\n onChangeOptions(items);\n announce(items);\n // We want to avoid introducing unexpected side effects.\n // See https://github.com/WordPress/gutenberg/pull/41820\n }, [items]);\n if (items.length === 0) {\n return null;\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Popover, {\n offset: 8,\n focusOnMount: false,\n placement: \"top-start\",\n className: \"components-autocomplete__popover\",\n anchor: popoverAnchor,\n ref: popoverRefs,\n children: /*#__PURE__*/_jsx(ListBox, {\n items: items,\n onSelect: onSelect,\n selectedIndex: selectedIndex,\n instanceId: instanceId,\n listBoxId: listBoxId,\n className: className\n })\n }), contentRef.current && needsA11yCompat && createPortal(/*#__PURE__*/_jsx(ListBox, {\n items: items,\n onSelect: onSelect,\n selectedIndex: selectedIndex,\n instanceId: instanceId,\n listBoxId: listBoxId,\n className: className,\n Component: VisuallyHidden\n }), contentRef.current.ownerDocument.body)]\n });\n}\nfunction useOnClickOutside(ref, handler) {\n useEffect(() => {\n const listener = event => {\n // Do nothing if clicking ref's element or descendent elements, or if the ref is not referencing an element\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [handler, ref]);\n}"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }