@yoobic/yobi 8.3.0-44 → 8.3.0-45

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 (46) hide show
  1. package/dist/cjs/{form-choice-helpers-b2ec494b.js → form-choice-helpers-e28efa04.js} +1 -1
  2. package/dist/cjs/yoo-form-choice-button.cjs.entry.js +1 -1
  3. package/dist/cjs/yoo-form-choice-card.cjs.entry.js +1 -1
  4. package/dist/cjs/yoo-form-choice-chat.cjs.entry.js +1 -1
  5. package/dist/cjs/yoo-form-choice-image.cjs.entry.js +1 -1
  6. package/dist/cjs/yoo-form-choice-radio.cjs.entry.js +1 -1
  7. package/dist/cjs/yoo-form-connect.cjs.entry.js +2 -1
  8. package/dist/cjs/yoo-form-swipe-cards.cjs.entry.js +1 -1
  9. package/dist/cjs/yoo-form-text-editor.cjs.entry.js +63 -45
  10. package/dist/cjs/yoo-input-bar.cjs.entry.js +12948 -12743
  11. package/dist/cjs/yoo-login.cjs.entry.js +1 -1
  12. package/dist/cjs/yoo-scratch-card-creator.cjs.entry.js +1 -3
  13. package/dist/cjs/yoo-videoplayer-videojs.cjs.entry.js +3 -3
  14. package/dist/collection/components/form/form-choice/form-choice-helpers.js +1 -1
  15. package/dist/collection/components/form/form-connect/form-connect.js +2 -1
  16. package/dist/collection/components/form/form-swipe-cards/form-swipe-cards.css +1 -1
  17. package/dist/collection/components/form-creator/scratch-card-creator/scratch-card-creator.js +1 -3
  18. package/dist/collection/feature-platform/login/login/login.css +1 -2
  19. package/dist/design-system/{form-choice-helpers-800a6124.js → form-choice-helpers-b6936c42.js} +1 -1
  20. package/dist/design-system/yoo-form-choice-button.entry.js +1 -1
  21. package/dist/design-system/yoo-form-choice-card.entry.js +1 -1
  22. package/dist/design-system/yoo-form-choice-chat.entry.js +1 -1
  23. package/dist/design-system/yoo-form-choice-image.entry.js +1 -1
  24. package/dist/design-system/yoo-form-choice-radio.entry.js +1 -1
  25. package/dist/design-system/yoo-form-connect.entry.js +2 -1
  26. package/dist/design-system/yoo-form-swipe-cards.entry.js +1 -1
  27. package/dist/design-system/yoo-form-text-editor.entry.js +63 -45
  28. package/dist/design-system/yoo-input-bar.entry.js +12948 -12743
  29. package/dist/design-system/yoo-login.entry.js +1 -1
  30. package/dist/design-system/yoo-scratch-card-creator.entry.js +1 -3
  31. package/dist/design-system/yoo-videoplayer-videojs.entry.js +3 -3
  32. package/dist/esm/{form-choice-helpers-800a6124.js → form-choice-helpers-b6936c42.js} +1 -1
  33. package/dist/esm/yoo-form-choice-button.entry.js +1 -1
  34. package/dist/esm/yoo-form-choice-card.entry.js +1 -1
  35. package/dist/esm/yoo-form-choice-chat.entry.js +1 -1
  36. package/dist/esm/yoo-form-choice-image.entry.js +1 -1
  37. package/dist/esm/yoo-form-choice-radio.entry.js +1 -1
  38. package/dist/esm/yoo-form-connect.entry.js +2 -1
  39. package/dist/esm/yoo-form-swipe-cards.entry.js +1 -1
  40. package/dist/esm/yoo-form-text-editor.entry.js +63 -45
  41. package/dist/esm/yoo-input-bar.entry.js +12948 -12743
  42. package/dist/esm/yoo-login.entry.js +1 -1
  43. package/dist/esm/yoo-scratch-card-creator.entry.js +1 -3
  44. package/dist/esm/yoo-videoplayer-videojs.entry.js +3 -3
  45. package/dist/types/home/runner/work/yoobic-ng-6/yoobic-ng-6/design-system/stencil/.stencil/shared/interfaces/src/entities/custom-app/custom-app.interface.d.ts +10 -3
  46. package/package.json +1 -1
@@ -160,7 +160,7 @@ function prepareChoice(choiceElement) {
160
160
  }
161
161
  function hasWarnings(values, choiceElement, warningMsgs) {
162
162
  const duplicateMessage = 'NODUPLICATEVALUES';
163
- const hasDuplicatedValues = draggableTagsHelpers.hasDuplicates(values);
163
+ const hasDuplicatedValues = draggableTagsHelpers.hasDuplicates(values === null || values === void 0 ? void 0 : values.map(v => (v === null || v === void 0 ? void 0 : v.text) || v));
164
164
  draggableTagsHelpers.showWarningAlert(choiceElement.host, hasDuplicatedValues || !!(warningMsgs === null || warningMsgs === void 0 ? void 0 : warningMsgs.length), hasDuplicatedValues ? duplicateMessage : warningMsgs === null || warningMsgs === void 0 ? void 0 : warningMsgs[0]);
165
165
  return hasDuplicatedValues && (warningMsgs === null || warningMsgs === void 0 ? void 0 : warningMsgs.length) > 0;
166
166
  }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-2e1afd31.js');
6
6
  require('./index-9dd76b79.js');
7
7
  const highcharts = require('./highcharts-874d9bd2.js');
8
- const formChoiceHelpers = require('./form-choice-helpers-b2ec494b.js');
8
+ const formChoiceHelpers = require('./form-choice-helpers-e28efa04.js');
9
9
  const overlays = require('./overlays-046b4f60.js');
10
10
  require('./lodash-72d493b9.js');
11
11
  require('./_commonjsHelpers-94df2ea7.js');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const formChoiceHelpers = require('./form-choice-helpers-b2ec494b.js');
5
+ const formChoiceHelpers = require('./form-choice-helpers-e28efa04.js');
6
6
  require('./index-9dd76b79.js');
7
7
  require('./overlays-046b4f60.js');
8
8
  require('./lodash-72d493b9.js');
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-2e1afd31.js');
6
6
  const index$1 = require('./index-f6133645.js');
7
7
  require('./index-9dd76b79.js');
8
- const formChoiceHelpers = require('./form-choice-helpers-b2ec494b.js');
8
+ const formChoiceHelpers = require('./form-choice-helpers-e28efa04.js');
9
9
  const overlays = require('./overlays-046b4f60.js');
10
10
  require('./lodash-72d493b9.js');
11
11
  require('./draggable-tags-helpers-078374f4.js');
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-2e1afd31.js');
6
6
  require('./index-9dd76b79.js');
7
7
  const commonHelpers = require('./common-helpers-bfdca115.js');
8
- const formChoiceHelpers = require('./form-choice-helpers-b2ec494b.js');
8
+ const formChoiceHelpers = require('./form-choice-helpers-e28efa04.js');
9
9
  const overlays = require('./overlays-046b4f60.js');
10
10
  require('./lodash-72d493b9.js');
11
11
  require('./draggable-tags-helpers-078374f4.js');
@@ -6,7 +6,7 @@ const index = require('./index-2e1afd31.js');
6
6
  require('./index-9dd76b79.js');
7
7
  const lodash = require('./lodash-72d493b9.js');
8
8
  const formInputHelpers = require('./form-input-helpers-651487c0.js');
9
- const formChoiceHelpers = require('./form-choice-helpers-b2ec494b.js');
9
+ const formChoiceHelpers = require('./form-choice-helpers-e28efa04.js');
10
10
  const overlays = require('./overlays-046b4f60.js');
11
11
  require('./index-f6133645.js');
12
12
  require('./common-helpers-bfdca115.js');
@@ -101,9 +101,10 @@ const YooFormConnectComponent = class {
101
101
  (_a = this.draggableElements) === null || _a === void 0 ? void 0 : _a.forEach(e => this.initDraggableActions(e));
102
102
  }
103
103
  async scrollToRevealGame() {
104
+ var _a;
104
105
  const GAP_PADDING = 8;
105
106
  const scrollElement = this.host.closest('yoo-ion-scroll');
106
- if (scrollElement && this.values.length === 2) {
107
+ if (scrollElement && ((_a = this.values) === null || _a === void 0 ? void 0 : _a.length) === 2) {
107
108
  const setScrollableHeight = () => {
108
109
  const getHeight = (el) => { var _a; return (_a = el === null || el === void 0 ? void 0 : el.getBoundingClientRect()) === null || _a === void 0 ? void 0 : _a.height; };
109
110
  const formHeight = getHeight(this.host.closest('yoo-form-input-container'));
@@ -12,7 +12,7 @@ const formInputHelpers = require('./form-input-helpers-651487c0.js');
12
12
  const overlays = require('./overlays-046b4f60.js');
13
13
  require('./_commonjsHelpers-94df2ea7.js');
14
14
 
15
- const formSwipeCardsCss = ".accent{color:var(--accent, #276ef1);fill:var(--accent, #276ef1)}.app-color{color:var(--app-color, #5a30f4);fill:var(--app-color, #5a30f4)}.danger{color:var(--danger, #d44333);fill:var(--danger, #d44333)}.dark{color:var(--dark, #000000);fill:var(--dark, #000000)}.energized{color:var(--energized, #ffc043);fill:var(--energized, #ffc043)}.info{color:var(--info, #d84c96);fill:var(--info, #d84c96)}.light{color:var(--light, #ffffff);fill:var(--light, #ffffff)}.stable{color:var(--stable, #adadad);fill:var(--stable, #adadad)}.stable-alt{color:var(--stable-alt, #d0d0d0);fill:var(--stable-alt, #d0d0d0)}.stable-light{color:var(--stable-light, #f1f1f1);fill:var(--stable-light, #f1f1f1)}.stable-ultralight{color:var(--stable-ultralight, #fafafa);fill:var(--stable-ultralight, #fafafa)}.success{color:var(--success, #3aa76d);fill:var(--success, #3aa76d)}.text-color{color:var(--text-color, #807f83);fill:var(--text-color, #807f83)}.warning{color:var(--warning, #ed6e33);fill:var(--warning, #ed6e33)}.wood{color:var(--wood, #99644c);fill:var(--wood, #99644c)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.hidden{display:none !important}.flex{display:-ms-flexbox !important;display:flex !important}.block{display:block !important}:host{position:relative;display:block;height:100%}:host yoo-banner{height:0}:host #instructions{height:100%;-webkit-transition:opacity 1s ease-in-out;transition:opacity 1s ease-in-out}:host #instructions #header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}:host #instructions #header #title{font-weight:bold}:host #instructions #categories{display:inline-grid;grid-template-columns:1fr 0.5fr 1fr;width:100%;margin:var(--spacing-24, 1.5rem) 0;text-align:center}:host #instructions #categories .category{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;padding:0;color:var(--stable, #adadad)}:host #instructions #categories .category p{max-width:75%;margin:auto;padding:var(--spacing-16, 1rem) 0;font-weight:bold}:host #instructions #categories .category yoo-tag{margin:0 auto}:host #instructions yoo-button{position:absolute;right:0;bottom:0;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box}:host #instructions #document{background-color:var(--light, #ffffff)}:host #instructions #document .document-title{padding:0 var(--spacing-16, 1rem);font-size:var(--font-size-16, 1rem)}:host #instructions #document yoo-form-document{--outer-container-padding:cssvar(spacing-16) cssvar(spacing-16);width:calc(100% - var(--spacing-16, 1rem))}:host [direction].card{z-index:5;-webkit-transition:-webkit-transform 0.35s !important;transition:-webkit-transform 0.35s !important;transition:transform 0.35s !important;transition:transform 0.35s, -webkit-transform 0.35s !important;-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}:host [direction].card.current .content-category{color:var(--light, #ffffff);opacity:1 !important;-webkit-transition:opacity 0.35s linear;transition:opacity 0.35s linear}:host [direction].card.current.card+.card{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}:host [direction].card.current.card+.card .content-image,:host [direction].card.current.card+.card .content-text{opacity:1 !important}:host [direction].card.current.card+.card+.card{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}:host [direction].card.current.card+.card+.card+.card{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}:host [direction=left]#game,:host [direction=left].current>.content-category{background-color:var(--app-color, #5a30f4) !important}:host [direction=left].current{-webkit-transform:translate(0%, 9%) scale(1) rotate(-3.5deg) !important;transform:translate(0%, 9%) scale(1) rotate(-3.5deg) !important}:host [direction=right]#game,:host [direction=right].current>.content-category{background-color:var(--warning, #ed6e33) !important}:host [direction=right].current{-webkit-transform:translate(0%, 9%) scale(1) rotate(3.5deg) !important;transform:translate(0%, 9%) scale(1) rotate(3.5deg) !important}:host #game{position:relative;width:100%;background-color:var(--dark, #000000);-webkit-transition:background-color 0.25s ease-in-out;transition:background-color 0.25s ease-in-out}:host #game #end-message{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:calc(100% - 4rem);max-width:25rem;color:var(--light, #ffffff);font-size:var(--font-size-18, 1.125rem);text-align:center;visibility:hidden;opacity:0;-webkit-transition:opacity 0.5s ease-in-out;transition:opacity 0.5s ease-in-out}:host #game #end-message.rtl{top:50%;right:50%;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}:host #game #end-message yoo-lottie{width:30%;margin:0 auto}:host #game #end-message div{padding:var(--spacing-16, 1rem) 0;font-weight:bold;font-size:var(--font-size-24, 1.5rem)}:host #game #end-message.active{visibility:visible;opacity:1}:host #game:after{display:block;height:0;padding-top:85%;content:\"\"}:host #cards{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;width:65%;max-width:16rem;height:100%;margin-top:var(--spacing-16, 1rem)}:host #cards.rtl{top:50%;right:50%;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}:host #cards .card{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;max-width:16rem;height:100%;max-height:21.3333333333rem;margin:0 auto;overflow:hidden;color:var(--dark, #000000);font-size:var(--font-size-28, 1.75rem);text-align:center;background-color:var(--stable-light, #f1f1f1);border-radius:var(--border-radius-08, 0.5rem);-webkit-box-shadow:var(--shadow-05, -0.375rem -0.375rem 0.5rem 0 rgba(0, 0, 0, 0.1));box-shadow:var(--shadow-05, -0.375rem -0.375rem 0.5rem 0 rgba(0, 0, 0, 0.1));-webkit-transition:opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;transition:opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;transition:transform 0.25s, opacity 0.25s, background-color 0.25s;transition:transform 0.25s, opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;will-change:transform, opacity}:host #cards .card:not([direction]){-webkit-transform:translate(0, -5%) scale(0.85);transform:translate(0, -5%) scale(0.85);opacity:0}:host #cards .card.current{z-index:3}:host #cards .card.current:not(.revealing){-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1;-webkit-transition-delay:200ms;transition-delay:200ms}:host #cards .card.current.revealing{-webkit-animation:\"current\" 0.25s ease-in-out;animation:\"current\" 0.25s ease-in-out;-webkit-animation-delay:150ms;animation-delay:150ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes current{to{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}}@keyframes current{to{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}}:host #cards .card.second{z-index:2}:host #cards .card.second:not(.revealing){-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1;-webkit-transition-delay:400ms;transition-delay:400ms}:host #cards .card.second.revealing{-webkit-animation:\"second\" 0.25s ease-in-out;animation:\"second\" 0.25s ease-in-out;-webkit-animation-delay:300ms;animation-delay:300ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes second{to{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}}@keyframes second{to{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}}:host #cards .card.third{z-index:1}:host #cards .card.third:not(.revealing){-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1;-webkit-transition-delay:600ms;transition-delay:600ms}:host #cards .card.third.revealing{-webkit-animation:\"third\" 0.25s ease-in-out;animation:\"third\" 0.25s ease-in-out;-webkit-animation-delay:450ms;animation-delay:450ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes third{to{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}}@keyframes third{to{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}}:host #cards .card.current .content-image,:host #cards .card.current .content-text,:host #cards .card[direction] .content-image,:host #cards .card[direction] .content-text{opacity:1 !important}:host #cards .card[swiped]{-webkit-animation:fade-out 1s ease-out;animation:fade-out 1s ease-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}:host #cards .card[swiped=left]{-webkit-transform:translate(-100%, 15%) rotate(-15deg);transform:translate(-100%, 15%) rotate(-15deg)}:host #cards .card[swiped=right]{-webkit-transform:translate(100%, 15%) rotate(15deg);transform:translate(100%, 15%) rotate(15deg)}:host #cards .card [class^=content]{position:absolute;width:100%;height:100%;word-break:break-word;opacity:0}:host #cards .card .content-category,:host #cards .card .content-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:var(--spacing-16, 1rem)}:host #cards .card .content-image{-webkit-transition:opacity 0.25s linear;transition:opacity 0.25s linear}:host #cards .card[type=image] yoo-img{height:100%}:host #cards .card[type=textimage] .content-image{top:0;bottom:3.5rem}:host #cards .card[type=textimage] .content-image yoo-img{height:calc(100% - 3.5rem)}:host #cards .card[type=textimage] .content-text,:host #cards .card[type=textimage] .content-category{bottom:0;height:3.5rem}:host #actions{position:absolute;left:50%;z-index:1;display:inline-grid;grid-template-columns:1fr 1fr 1fr;width:100%;max-width:85%;line-height:2.5;-webkit-transform:translate(-50%, 80%);transform:translate(-50%, 80%)}:host #actions .action{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;text-align:center}:host([readonly]){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}:host([readonly]) .category-title{margin-bottom:var(--spacing-08, 0.5rem)}:host([readonly]) ul{display:grid;grid-gap:var(--spacing-16, 1rem);grid-template-columns:repeat(auto-fill, 6rem);margin:0;padding-left:0;list-style:none}:host([readonly]) ul+.category-title{margin-top:var(--spacing-16, 1rem)}:host([readonly]) ul li{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;height:8rem;overflow:hidden;border-style:solid;border-width:var(--border-width-01, 0.0625rem);border-radius:var(--border-radius-08, 0.5rem)}:host([readonly]) ul li.invalid{border-color:var(--danger, #d44333)}:host([readonly]) ul li.invalid yoo-img::before{position:absolute;width:100%;height:100%;background:var(--danger-20, rgba(212, 67, 51, 0.2));content:\"\"}:host([readonly]) ul li.invalid yoo-truncate{background:var(--danger, #d44333)}:host([readonly]) ul li.valid{border-color:var(--success, #3aa76d)}:host([readonly]) ul li.valid yoo-img::before{position:absolute;width:100%;height:100%;background:var(--success-20, rgba(58, 167, 109, 0.2));content:\"\"}:host([readonly]) ul li.valid yoo-truncate{background:var(--success, #3aa76d)}:host([readonly]) ul li yoo-img{position:relative;-ms-flex-positive:1;flex-grow:1}:host([readonly]) ul li yoo-truncate{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;color:var(--light, #ffffff);font-size:var(--font-size-14, 0.875rem)}:host([readonly]) ul li yoo-truncate:only-child{--max-lines:4;height:100%;padding:0 var(--spacing-08, 0.5rem)}:host([readonly]) ul li yoo-truncate:not(:only-child){--max-lines:1;height:2.125rem;padding:0 var(--spacing-04, 0.25rem)}:host([animated]) #game{-webkit-animation:show 0.5s ease-in-out forwards;animation:show 0.5s ease-in-out forwards}@-webkit-keyframes show{from{-webkit-transform:scale(0.85);transform:scale(0.85);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes show{from{-webkit-transform:scale(0.85);transform:scale(0.85);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}:host([animated]) .action.hide>*{-webkit-animation:fadeOut 0.75s ease-in-out forwards;animation:fadeOut 0.75s ease-in-out forwards}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}:host([animated]) .action:not(.hide)>*{-webkit-animation:fadeIn 0.75s ease-in-out forwards;animation:fadeIn 0.75s ease-in-out forwards}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}:host([animated]) .action yoo-button{-webkit-transition:-webkit-transform 0.8s linear;transition:-webkit-transform 0.8s linear;transition:transform 0.8s linear;transition:transform 0.8s linear, -webkit-transform 0.8s linear}:host([live-preview]),:host(.mobile){min-height:70vh}:host([live-preview]) #instructions #header,:host(.mobile) #instructions #header{padding:var(--spacing-16, 1rem);background:var(--dark, #000000);border-radius:var(--border-radius-04, 0.25rem)}:host([live-preview]) #instructions #header #title,:host(.mobile) #instructions #header #title{color:var(--light, #ffffff);font-weight:bold;font-size:var(--font-size-28, 1.75rem)}:host([live-preview]) #instructions yoo-button,:host(.mobile) #instructions yoo-button{position:absolute;bottom:0;width:-webkit-fill-available;width:-moz-available;width:stretch}:host(.web:not([live-preview])) #instructions{position:relative}:host(.web:not([live-preview])) #instructions yoo-icon[name=swipe-explanation]{width:5rem;height:5rem;margin:auto;--inner-width:5rem;--inner-height:5rem}:host(.web:not([live-preview])) #instructions yoo-button{position:fixed;right:var(--spacing-32, 2rem);bottom:var(--spacing-16, 1rem);z-index:1;-webkit-transform:translateY(-50%);transform:translateY(-50%)}:host(.web:not([live-preview])) #game{height:60%;max-height:21rem}:host(.web:not([live-preview])) #game #cards{top:5%;margin-top:unset;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0)}:host(.web:not([live-preview])) #actions{-ms-flex-align:start;align-items:start;max-width:unset;margin-top:2.5%;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0)}:host(.web:not([live-preview])) #actions .action:nth-child(2){-ms-flex-item-align:end;align-self:end}:host(.web:not([live-preview])) #header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:var(--spacing-08, 0.5rem) var(--spacing-16, 1rem);line-height:1.75;text-align:center;background-color:var(--stable-ultralight, #fafafa)}:host(.web:not([live-preview])) #header #title{color:var(--dark, #000000) !important;font-weight:bold;font-size:var(--font-size-28, 1.75rem)}";
15
+ const formSwipeCardsCss = ".accent{color:var(--accent, #276ef1);fill:var(--accent, #276ef1)}.app-color{color:var(--app-color, #5a30f4);fill:var(--app-color, #5a30f4)}.danger{color:var(--danger, #d44333);fill:var(--danger, #d44333)}.dark{color:var(--dark, #000000);fill:var(--dark, #000000)}.energized{color:var(--energized, #ffc043);fill:var(--energized, #ffc043)}.info{color:var(--info, #d84c96);fill:var(--info, #d84c96)}.light{color:var(--light, #ffffff);fill:var(--light, #ffffff)}.stable{color:var(--stable, #adadad);fill:var(--stable, #adadad)}.stable-alt{color:var(--stable-alt, #d0d0d0);fill:var(--stable-alt, #d0d0d0)}.stable-light{color:var(--stable-light, #f1f1f1);fill:var(--stable-light, #f1f1f1)}.stable-ultralight{color:var(--stable-ultralight, #fafafa);fill:var(--stable-ultralight, #fafafa)}.success{color:var(--success, #3aa76d);fill:var(--success, #3aa76d)}.text-color{color:var(--text-color, #807f83);fill:var(--text-color, #807f83)}.warning{color:var(--warning, #ed6e33);fill:var(--warning, #ed6e33)}.wood{color:var(--wood, #99644c);fill:var(--wood, #99644c)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.hidden{display:none !important}.flex{display:-ms-flexbox !important;display:flex !important}.block{display:block !important}:host{position:relative;display:block;height:100%}:host yoo-banner{height:0}:host #instructions{height:100%;-webkit-transition:opacity 1s ease-in-out;transition:opacity 1s ease-in-out}:host #instructions #header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}:host #instructions #header #title{font-weight:bold}:host #instructions #categories{display:inline-grid;grid-template-columns:1fr 0.5fr 1fr;width:100%;margin:var(--spacing-24, 1.5rem) 0;text-align:center}:host #instructions #categories .category{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;padding:0;color:var(--stable, #adadad)}:host #instructions #categories .category p{max-width:75%;margin:auto;padding:var(--spacing-16, 1rem) 0;font-weight:bold}:host #instructions #categories .category yoo-tag{margin:0 auto}:host #instructions yoo-button{position:absolute;right:0;bottom:0;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box}:host #instructions #document{background-color:var(--light, #ffffff)}:host #instructions #document .document-title{padding:0 var(--spacing-16, 1rem);font-size:var(--font-size-16, 1rem)}:host #instructions #document yoo-form-document{--outer-container-padding:cssvar(spacing-16) cssvar(spacing-16);width:calc(100% - var(--spacing-16, 1rem))}:host [direction].card{z-index:5;-webkit-transition:-webkit-transform 0.35s !important;transition:-webkit-transform 0.35s !important;transition:transform 0.35s !important;transition:transform 0.35s, -webkit-transform 0.35s !important;-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}:host [direction].card.current .content-category{color:var(--light, #ffffff);opacity:1 !important;-webkit-transition:opacity 0.35s linear;transition:opacity 0.35s linear}:host [direction].card.current.card+.card{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}:host [direction].card.current.card+.card .content-image,:host [direction].card.current.card+.card .content-text{opacity:1 !important}:host [direction].card.current.card+.card+.card{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}:host [direction].card.current.card+.card+.card+.card{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}:host [direction=left]#game,:host [direction=left].current>.content-category{background-color:var(--app-color, #5a30f4) !important}:host [direction=left].current{-webkit-transform:translate(0%, 9%) scale(1) rotate(-3.5deg) !important;transform:translate(0%, 9%) scale(1) rotate(-3.5deg) !important}:host [direction=right]#game,:host [direction=right].current>.content-category{background-color:var(--warning, #ed6e33) !important}:host [direction=right].current{-webkit-transform:translate(0%, 9%) scale(1) rotate(3.5deg) !important;transform:translate(0%, 9%) scale(1) rotate(3.5deg) !important}:host #game{position:relative;width:100%;background-color:var(--dark, #000000);-webkit-transition:background-color 0.25s ease-in-out;transition:background-color 0.25s ease-in-out}:host #game #end-message{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:calc(100% - 4rem);max-width:25rem;color:var(--light, #ffffff);font-size:var(--font-size-18, 1.125rem);text-align:center;visibility:hidden;opacity:0;-webkit-transition:opacity 0.5s ease-in-out;transition:opacity 0.5s ease-in-out}:host #game #end-message.rtl{top:50%;right:50%;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}:host #game #end-message yoo-lottie{width:30%;margin:0 auto}:host #game #end-message div{padding:var(--spacing-16, 1rem) 0;font-weight:bold;font-size:var(--font-size-24, 1.5rem)}:host #game #end-message.active{visibility:visible;opacity:1}:host #game:after{display:block;height:0;padding-top:85%;content:\"\"}:host #cards{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;width:65%;max-width:16rem;height:100%;margin-top:var(--spacing-16, 1rem)}:host #cards.rtl{top:50%;right:50%;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}:host #cards .card{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;max-width:16rem;height:100%;max-height:21.3333333333rem;margin:0 auto;overflow:hidden;color:var(--dark, #000000);font-size:var(--font-size-28, 1.75rem);text-align:center;background-color:var(--stable-light, #f1f1f1);border-radius:var(--border-radius-08, 0.5rem);-webkit-box-shadow:var(--shadow-05, -0.375rem -0.375rem 0.5rem 0 rgba(0, 0, 0, 0.1));box-shadow:var(--shadow-05, -0.375rem -0.375rem 0.5rem 0 rgba(0, 0, 0, 0.1));-webkit-transition:opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;transition:opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;transition:transform 0.25s, opacity 0.25s, background-color 0.25s;transition:transform 0.25s, opacity 0.25s, background-color 0.25s, -webkit-transform 0.25s;will-change:transform, opacity}:host #cards .card:not([direction]){-webkit-transform:translate(0, -5%) scale(0.85);transform:translate(0, -5%) scale(0.85);opacity:0}:host #cards .card.current{z-index:3}:host #cards .card.current:not(.revealing){-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1;-webkit-transition-delay:200ms;transition-delay:200ms}:host #cards .card.current.revealing{-webkit-animation:\"current\" 0.25s ease-in-out;animation:\"current\" 0.25s ease-in-out;-webkit-animation-delay:150ms;animation-delay:150ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes current{to{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}}@keyframes current{to{-webkit-transform:translate(0%, 9%) scale(1);transform:translate(0%, 9%) scale(1);opacity:1}}:host #cards .card.second{z-index:2}:host #cards .card.second:not(.revealing){-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1;-webkit-transition-delay:400ms;transition-delay:400ms}:host #cards .card.second.revealing{-webkit-animation:\"second\" 0.25s ease-in-out;animation:\"second\" 0.25s ease-in-out;-webkit-animation-delay:300ms;animation-delay:300ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes second{to{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}}@keyframes second{to{-webkit-transform:translate(0%, 3.5%) scale(0.95);transform:translate(0%, 3.5%) scale(0.95);opacity:1}}:host #cards .card.third{z-index:1}:host #cards .card.third:not(.revealing){-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1;-webkit-transition-delay:600ms;transition-delay:600ms}:host #cards .card.third.revealing{-webkit-animation:\"third\" 0.25s ease-in-out;animation:\"third\" 0.25s ease-in-out;-webkit-animation-delay:450ms;animation-delay:450ms;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes third{to{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}}@keyframes third{to{-webkit-transform:translate(0%, -2%) scale(0.9);transform:translate(0%, -2%) scale(0.9);opacity:1}}:host #cards .card.current .content-image,:host #cards .card.current .content-text,:host #cards .card[direction] .content-image,:host #cards .card[direction] .content-text{opacity:1 !important}:host #cards .card[swiped]{-webkit-animation:fade-out 1s ease-out;animation:fade-out 1s ease-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}:host #cards .card[swiped=left]{-webkit-transform:translate(-100%, 15%) rotate(-15deg);transform:translate(-100%, 15%) rotate(-15deg)}:host #cards .card[swiped=right]{-webkit-transform:translate(100%, 15%) rotate(15deg);transform:translate(100%, 15%) rotate(15deg)}:host #cards .card [class^=content]{position:absolute;width:100%;height:100%;word-break:break-word;opacity:0}:host #cards .card .content-category,:host #cards .card .content-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:var(--spacing-16, 1rem)}:host #cards .card .content-image{-webkit-transition:opacity 0.25s linear;transition:opacity 0.25s linear}:host #cards .card[type=image] yoo-img{height:100%}:host #cards .card[type=textimage] .content-image{top:0;bottom:3.5rem}:host #cards .card[type=textimage] .content-image yoo-img{height:calc(100% - 3.5rem)}:host #cards .card[type=textimage] .content-text,:host #cards .card[type=textimage] .content-category{bottom:0;height:3.5rem}:host #actions{position:absolute;left:50%;z-index:1;display:inline-grid;grid-template-columns:1fr 1fr 1fr;width:100%;max-width:85%;line-height:2.5;-webkit-transform:translate(-50%, 80%);transform:translate(-50%, 80%)}:host #actions .action{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;text-align:center}:host([readonly]){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}:host([readonly]) .category-title{margin-bottom:var(--spacing-08, 0.5rem)}:host([readonly]) ul{display:grid;grid-gap:var(--spacing-16, 1rem);grid-template-columns:repeat(auto-fill, 6rem);margin:0;padding-left:0;list-style:none}:host([readonly]) ul+.category-title{margin-top:var(--spacing-16, 1rem)}:host([readonly]) ul li{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;height:8rem;overflow:hidden;border-style:solid;border-width:var(--border-width-01, 0.0625rem);border-radius:var(--border-radius-08, 0.5rem)}:host([readonly]) ul li.invalid{border-color:var(--danger, #d44333)}:host([readonly]) ul li.invalid yoo-img::before{position:absolute;width:100%;height:100%;background:var(--danger-20, rgba(212, 67, 51, 0.2));content:\"\"}:host([readonly]) ul li.invalid yoo-truncate{background:var(--danger, #d44333)}:host([readonly]) ul li.valid{border-color:var(--success, #3aa76d)}:host([readonly]) ul li.valid yoo-img::before{position:absolute;width:100%;height:100%;background:var(--success-20, rgba(58, 167, 109, 0.2));content:\"\"}:host([readonly]) ul li.valid yoo-truncate{background:var(--success, #3aa76d)}:host([readonly]) ul li yoo-img{position:relative;-ms-flex-positive:1;flex-grow:1}:host([readonly]) ul li yoo-truncate{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;color:var(--light, #ffffff);font-size:var(--font-size-14, 0.875rem)}:host([readonly]) ul li yoo-truncate:only-child{--max-lines:4;height:100%;padding:0 var(--spacing-08, 0.5rem)}:host([readonly]) ul li yoo-truncate:not(:only-child){--max-lines:1;height:2.125rem;padding:0 var(--spacing-04, 0.25rem)}:host([animated]) #game{-webkit-animation:show 0.5s ease-in-out forwards;animation:show 0.5s ease-in-out forwards}@-webkit-keyframes show{from{-webkit-transform:scale(0.85);transform:scale(0.85);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes show{from{-webkit-transform:scale(0.85);transform:scale(0.85);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}:host([animated]) .action.hide>*{-webkit-animation:fadeOut 0.75s ease-in-out forwards;animation:fadeOut 0.75s ease-in-out forwards}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}:host([animated]) .action:not(.hide)>*{-webkit-animation:fadeIn 0.75s ease-in-out forwards;animation:fadeIn 0.75s ease-in-out forwards}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}:host([animated]) .action yoo-button{-webkit-transition:-webkit-transform 0.8s linear;transition:-webkit-transform 0.8s linear;transition:transform 0.8s linear;transition:transform 0.8s linear, -webkit-transform 0.8s linear}:host([live-preview]),:host(.mobile){min-height:60vh}:host([live-preview]) #instructions #header,:host(.mobile) #instructions #header{padding:var(--spacing-16, 1rem);background:var(--dark, #000000);border-radius:var(--border-radius-04, 0.25rem)}:host([live-preview]) #instructions #header #title,:host(.mobile) #instructions #header #title{color:var(--light, #ffffff);font-weight:bold;font-size:var(--font-size-28, 1.75rem)}:host([live-preview]) #instructions yoo-button,:host(.mobile) #instructions yoo-button{position:absolute;bottom:0;width:-webkit-fill-available;width:-moz-available;width:stretch}:host(.web:not([live-preview])) #instructions{position:relative}:host(.web:not([live-preview])) #instructions yoo-icon[name=swipe-explanation]{width:5rem;height:5rem;margin:auto;--inner-width:5rem;--inner-height:5rem}:host(.web:not([live-preview])) #instructions yoo-button{position:fixed;right:var(--spacing-32, 2rem);bottom:var(--spacing-16, 1rem);z-index:1;-webkit-transform:translateY(-50%);transform:translateY(-50%)}:host(.web:not([live-preview])) #game{height:60%;max-height:21rem}:host(.web:not([live-preview])) #game #cards{top:5%;margin-top:unset;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0)}:host(.web:not([live-preview])) #actions{-ms-flex-align:start;align-items:start;max-width:unset;margin-top:2.5%;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0)}:host(.web:not([live-preview])) #actions .action:nth-child(2){-ms-flex-item-align:end;align-self:end}:host(.web:not([live-preview])) #header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:var(--spacing-08, 0.5rem) var(--spacing-16, 1rem);line-height:1.75;text-align:center;background-color:var(--stable-ultralight, #fafafa)}:host(.web:not([live-preview])) #header #title{color:var(--dark, #000000) !important;font-weight:bold;font-size:var(--font-size-28, 1.75rem)}";
16
16
 
17
17
  const YooFormSwipeCardsComponent = class {
18
18
  constructor(hostRef) {
@@ -20372,7 +20372,7 @@ NoWorkResult.default = NoWorkResult;
20372
20372
 
20373
20373
  class Processor {
20374
20374
  constructor(plugins = []) {
20375
- this.version = '8.4.13';
20375
+ this.version = '8.4.14';
20376
20376
  this.plugins = this.normalize(plugins);
20377
20377
  }
20378
20378
 
@@ -20515,25 +20515,27 @@ function postcss(...plugins) {
20515
20515
  }
20516
20516
 
20517
20517
  postcss.plugin = function plugin(name, initializer) {
20518
- // eslint-disable-next-line no-console
20519
- if (console && console.warn) {
20518
+ let warningPrinted = false;
20519
+ function creator(...args) {
20520
20520
  // eslint-disable-next-line no-console
20521
- console.warn(
20522
- name +
20523
- ': postcss.plugin was deprecated. Migration guide:\n' +
20524
- 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
20525
- );
20526
- if (overlays.process_1.env.LANG && overlays.process_1.env.LANG.startsWith('cn')) {
20527
- /* c8 ignore next 7 */
20521
+ if (console && console.warn && !warningPrinted) {
20522
+ warningPrinted = true;
20528
20523
  // eslint-disable-next-line no-console
20529
20524
  console.warn(
20530
20525
  name +
20531
- ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
20532
- 'https://www.w3ctech.com/topic/2226'
20526
+ ': postcss.plugin was deprecated. Migration guide:\n' +
20527
+ 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
20533
20528
  );
20529
+ if (overlays.process_1.env.LANG && overlays.process_1.env.LANG.startsWith('cn')) {
20530
+ /* c8 ignore next 7 */
20531
+ // eslint-disable-next-line no-console
20532
+ console.warn(
20533
+ name +
20534
+ ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
20535
+ 'https://www.w3ctech.com/topic/2226'
20536
+ );
20537
+ }
20534
20538
  }
20535
- }
20536
- function creator(...args) {
20537
20539
  let transformer = initializer(...args);
20538
20540
  transformer.postcssPlugin = name;
20539
20541
  transformer.postcssVersion = new processor().version;
@@ -20875,7 +20877,6 @@ function sanitizeHtml(html, options, _recursing) {
20875
20877
  delete frame.attribs[a];
20876
20878
  return;
20877
20879
  }
20878
- let parsed;
20879
20880
  // check allowedAttributesMap for the element and attribute and modify the value
20880
20881
  // as necessary if there are specific values defined.
20881
20882
  let passedAllowedAttributesMapCheck = false;
@@ -20923,14 +20924,14 @@ function sanitizeHtml(html, options, _recursing) {
20923
20924
  let allowed = true;
20924
20925
 
20925
20926
  try {
20926
- const parsed = new URL(value);
20927
+ const parsed = parseUrl(value);
20927
20928
 
20928
20929
  if (options.allowedScriptHostnames || options.allowedScriptDomains) {
20929
20930
  const allowedHostname = (options.allowedScriptHostnames || []).find(function (hostname) {
20930
- return hostname === parsed.hostname;
20931
+ return hostname === parsed.url.hostname;
20931
20932
  });
20932
20933
  const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) {
20933
- return parsed.hostname === domain || parsed.hostname.endsWith(`.${domain}`);
20934
+ return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
20934
20935
  });
20935
20936
  allowed = allowedHostname || allowedDomain;
20936
20937
  }
@@ -20947,29 +20948,9 @@ function sanitizeHtml(html, options, _recursing) {
20947
20948
  if (name === 'iframe' && a === 'src') {
20948
20949
  let allowed = true;
20949
20950
  try {
20950
- // Chrome accepts \ as a substitute for / in the // at the
20951
- // start of a URL, so rewrite accordingly to prevent exploit.
20952
- // Also drop any whitespace at that point in the URL
20953
- value = value.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, '$1//');
20954
- if (value.startsWith('relative:')) {
20955
- // An attempt to exploit our workaround for base URLs being
20956
- // mandatory for relative URL validation in the WHATWG
20957
- // URL parser, reject it
20958
- throw new Error('relative: exploit attempt');
20959
- }
20960
- // naughtyHref is in charge of whether protocol relative URLs
20961
- // are cool. Here we are concerned just with allowed hostnames and
20962
- // whether to allow relative URLs.
20963
- //
20964
- // Build a placeholder "base URL" against which any reasonable
20965
- // relative URL may be parsed successfully
20966
- let base = 'relative://relative-site';
20967
- for (let i = 0; (i < 100); i++) {
20968
- base += `/${i}`;
20969
- }
20970
- const parsed = new URL(value, base);
20971
- const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:';
20972
- if (isRelativeUrl) {
20951
+ const parsed = parseUrl(value);
20952
+
20953
+ if (parsed.isRelativeUrl) {
20973
20954
  // default value of allowIframeRelativeUrls is true
20974
20955
  // unless allowedIframeHostnames or allowedIframeDomains specified
20975
20956
  allowed = has(options, 'allowIframeRelativeUrls')
@@ -20977,10 +20958,10 @@ function sanitizeHtml(html, options, _recursing) {
20977
20958
  : (!options.allowedIframeHostnames && !options.allowedIframeDomains);
20978
20959
  } else if (options.allowedIframeHostnames || options.allowedIframeDomains) {
20979
20960
  const allowedHostname = (options.allowedIframeHostnames || []).find(function (hostname) {
20980
- return hostname === parsed.hostname;
20961
+ return hostname === parsed.url.hostname;
20981
20962
  });
20982
20963
  const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) {
20983
- return parsed.hostname === domain || parsed.hostname.endsWith(`.${domain}`);
20964
+ return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
20984
20965
  });
20985
20966
  allowed = allowedHostname || allowedDomain;
20986
20967
  }
@@ -20995,7 +20976,7 @@ function sanitizeHtml(html, options, _recursing) {
20995
20976
  }
20996
20977
  if (a === 'srcset') {
20997
20978
  try {
20998
- parsed = parseSrcset(value);
20979
+ let parsed = parseSrcset(value);
20999
20980
  parsed.forEach(function(value) {
21000
20981
  if (naughtyHref('srcset', value.url)) {
21001
20982
  value.evil = true;
@@ -21221,7 +21202,17 @@ function sanitizeHtml(html, options, _recursing) {
21221
21202
  // Clobber any comments in URLs, which the browser might
21222
21203
  // interpret inside an XML data island, allowing
21223
21204
  // a javascript: URL to be snuck through
21224
- href = href.replace(/<!--.*?-->/g, '');
21205
+ while (true) {
21206
+ const firstIndex = href.indexOf('<!--');
21207
+ if (firstIndex === -1) {
21208
+ break;
21209
+ }
21210
+ const lastIndex = href.indexOf('-->', firstIndex + 4);
21211
+ if (lastIndex === -1) {
21212
+ break;
21213
+ }
21214
+ href = href.substring(0, firstIndex) + href.substring(lastIndex + 3);
21215
+ }
21225
21216
  // Case insensitive so we don't get faked out by JAVASCRIPT #1
21226
21217
  // Allow more characters after the first so we don't get faked
21227
21218
  // out by certain schemes browsers accept
@@ -21244,6 +21235,33 @@ function sanitizeHtml(html, options, _recursing) {
21244
21235
  return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;
21245
21236
  }
21246
21237
 
21238
+ function parseUrl(value) {
21239
+ value = value.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, '$1//');
21240
+ if (value.startsWith('relative:')) {
21241
+ // An attempt to exploit our workaround for base URLs being
21242
+ // mandatory for relative URL validation in the WHATWG
21243
+ // URL parser, reject it
21244
+ throw new Error('relative: exploit attempt');
21245
+ }
21246
+ // naughtyHref is in charge of whether protocol relative URLs
21247
+ // are cool. Here we are concerned just with allowed hostnames and
21248
+ // whether to allow relative URLs.
21249
+ //
21250
+ // Build a placeholder "base URL" against which any reasonable
21251
+ // relative URL may be parsed successfully
21252
+ let base = 'relative://relative-site';
21253
+ for (let i = 0; (i < 100); i++) {
21254
+ base += `/${i}`;
21255
+ }
21256
+
21257
+ const parsed = new URL(value, base);
21258
+
21259
+ const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:';
21260
+ return {
21261
+ isRelativeUrl,
21262
+ url: parsed
21263
+ };
21264
+ }
21247
21265
  /**
21248
21266
  * Filters user input css properties by allowlisted regex attributes.
21249
21267
  * Modifies the abstractSyntaxTree object.