@swipefindercom/finder-sdk 1.0.25 → 1.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/finder-sdk.esm.js +356 -231
- package/dist/finder-sdk.umd.js +1 -1
- package/dist/types/components/CardCategories/CardCategories.d.ts +10 -0
- package/dist/types/components/CardCategories/CardCategories.d.ts.map +1 -0
- package/dist/types/components/CardWrapper/CardWrapper.d.ts.map +1 -1
- package/dist/types/components/FiltersDrawer/FiltersDrawer.d.ts +2 -1
- package/dist/types/components/FiltersDrawer/FiltersDrawer.d.ts.map +1 -1
- package/dist/types/containers/InteractiveFeed/InteractiveFeed.d.ts.map +1 -1
- package/dist/types/containers/MainBootstrap/MainBootstrap.d.ts +4 -0
- package/dist/types/containers/MainBootstrap/MainBootstrap.d.ts.map +1 -1
- package/dist/types/contexts/AppStateContext.d.ts.map +1 -1
- package/dist/types/contexts/DataContext.d.ts +5 -0
- package/dist/types/contexts/DataContext.d.ts.map +1 -1
- package/dist/types/contexts/MonitoringContext.d.ts +2 -0
- package/dist/types/contexts/MonitoringContext.d.ts.map +1 -1
- package/dist/types/contexts/UIContext.d.ts +3 -0
- package/dist/types/contexts/UIContext.d.ts.map +1 -1
- package/dist/types/contexts/index.d.ts +4 -0
- package/dist/types/contexts/index.d.ts.map +1 -1
- package/dist/types/services/DataService.d.ts +12 -1
- package/dist/types/services/DataService.d.ts.map +1 -1
- package/dist/types/services/MonitorService.d.ts +1 -1
- package/dist/types/services/MonitorService.d.ts.map +1 -1
- package/package.json +1 -1
- package/LICENSE +0 -22
package/dist/finder-sdk.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(){if(typeof document!=="undefined"){var s=document.createElement("style");s.textContent="._card_doqsx_2{position:absolute;width:100%;height:100%;left:0;top:0;background-color:#fff;box-shadow:0 2px 8px #0003;overflow:hidden;transition:transform .3s ease;cursor:default;transform-origin:50% 100%;will-change:transform;z-index:1}._cardContent_doqsx_18{position:absolute;z-index:2;bottom:0;left:0;width:100%;height:100%;color:#fff}._gradientBottom_doqsx_29{position:absolute;z-index:1;bottom:0;left:0;width:100%;height:120px;background:linear-gradient(transparent,#000);pointer-events:none}._gradientTop_doqsx_41{position:absolute;z-index:1;top:0;left:0;width:100%;height:120px;background:linear-gradient(rgba(0,0,0,1),transparent);pointer-events:none}._cardName_doqsx_52{position:absolute;left:0;bottom:10%;font-weight:700;font-size:22px;padding:0 20px;text-shadow:1px 1px 2px rgba(0,0,0,.8);width:100%;text-align:left;white-space:pre-wrap}._image_trs4h_2{width:100%;height:100%;object-fit:cover}._videoContainer_119iz_3{width:100%;height:100%;position:relative;overflow:hidden}._cardVideo_119iz_10{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;z-index:1}._swipeableCard_14c6z_1{position:relative;width:100%;height:100%;will-change:transform,opacity;backface-visibility:hidden;-webkit-backface-visibility:hidden;touch-action:none;user-select:none;-webkit-user-select:none;pointer-events:auto}._swipeableCard_14c6z_1>*{pointer-events:none}._swipeableCard_14c6z_1 video,._swipeableCard_14c6z_1 img{pointer-events:none}._swipeHeadline_14c6z_25{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:24px;font-weight:700;color:#fff;z-index:200000}._ctaTooltip_1mai4_2{position:absolute;z-index:110;font-size:12px;top:0;right:-2px;background-color:#fff;color:#333;padding:10px 14px;border-radius:8px;font-weight:800;text-align:center;width:max-content;transition:opacity .3s ease;pointer-events:none;animation:_ctaTooltipBounce_1mai4_1 2s infinite;box-shadow:0 0 16px 1px #000;white-space:pre-line}._ctaTooltipArrow_1mai4_22{position:absolute;bottom:-8px;width:16px;height:16px;transform:translate(50%) rotate(45deg);z-index:0}@keyframes _ctaTooltipBounce_1mai4_1{0%,20%,50%,80%,to{transform:translateY(calc(-100% - 16px))}40%{transform:translateY(calc(-100% - 24px))}60%{transform:translateY(calc(-100% - 20px))}}._verticalEmojisButtons_14t5d_2{position:absolute;display:flex;flex-direction:column;align-items:center;z-index:100}._buttonContainer_14t5d_11{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:8px 0}._button_14t5d_11{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 5px #0003;background-color:#fff;position:relative;-webkit-user-select:none;user-select:none;transition:transform .2s ease,background-color .2s ease;outline:none;border:none;-webkit-tap-highlight-color:transparent}._button_14t5d_11:focus,._button_14t5d_11:active{outline:none;border:none}._emojiIcon_14t5d_45{width:35px;height:35px;display:block;outline:none;pointer-events:none;position:relative;z-index:2}._buttonLabel_14t5d_56{white-space:pre-wrap;margin-top:5px}._buttonAnimation_14t5d_62{transform:scale(1.3);z-index:101;position:relative}._buttonAnimation_14t5d_62:before{content:\"\";position:absolute;top:-5px;left:-5px;right:-5px;bottom:-5px;border-radius:50%;border:5px solid rgba(255,255,255,.5);z-index:1}._buttonLikeAnimation_14t5d_80{background-color:#4cd964!important;transform:scale(1.3)!important}._buttonDislikeAnimation_14t5d_85{background-color:#ff3b30!important;transform:scale(1.3)!important}._buttonMaybeAnimation_14t5d_90{background-color:#fc0!important;transform:scale(1.3)!important}._buttonSeenAnimation_14t5d_95{background-color:#007aff!important;transform:scale(1.3)!important}._contrastMode_14t5d_101 ._buttonContainer_14t5d_11{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:8px 0}._contrastModeButton_14t5d_109{background-color:#fffc!important;border:2px solid black!important;box-shadow:0 0 8px #00000080!important}._contrastModeButton_14t5d_109:hover{background-color:#fff!important}._contrastModeLabel_14t5d_119{color:#fff!important;text-shadow:1px 1px 3px black,-1px -1px 3px black,1px -1px 3px black,-1px 1px 3px black!important;font-weight:700!important;font-size:12px!important;text-align:center!important;display:block!important;margin-top:5px!important;text-transform:uppercase}._contrastModeLike_14t5d_130,._contrastModeDislike_14t5d_135,._contrastModeMaybe_14t5d_140,._contrastModeSeen_14t5d_145{color:#fff!important;filter:brightness(1.5)!important}._sideButtonsContainer_jjr9u_2{position:absolute;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;z-index:100;pointer-events:none}._sideButtonsWrapper_jjr9u_16{position:relative;width:100%;height:100%;display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto 1fr auto;padding:15px;box-sizing:border-box}._sideButtonContainer_jjr9u_28{display:flex;align-items:center;flex-direction:column;gap:4px}._sideButtonLeft_jjr9u_36{grid-column:1;grid-row:2;margin-right:auto;justify-self:start;align-self:center}._sideButtonRight_jjr9u_45{grid-column:3;grid-row:2;margin-left:auto;justify-self:end;align-self:center}._sideButtonTop_jjr9u_54{grid-column:2;grid-row:1;justify-self:center;align-self:start}._sideButtonBottom_jjr9u_62{grid-column:2;grid-row:3;justify-self:center;align-self:end}._sideButton_jjr9u_2{border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px solid rgba(255,255,255,.4);background-color:#ffffffb3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 4px 12px #0000004d;transition:all .3s ease;-webkit-tap-highlight-color:transparent;pointer-events:auto;padding:0;margin:0;gap:4px}._sideButton_jjr9u_2:hover{border-color:#fff;background-color:#ffffffe6}._buttonContent_jjr9u_95{position:relative;display:flex;align-items:center;justify-content:center}._arrowWrapper_jjr9u_103,._emojiWrapper_jjr9u_104{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}._arrowWrapper_jjr9u_103 svg{color:#000}._arrowRight_jjr9u_120{transform:rotate(0)}._arrowLeft_jjr9u_124{transform:rotate(180deg)}._arrowUp_jjr9u_128{transform:rotate(-90deg)}._arrowDown_jjr9u_132{transform:rotate(90deg)}._emojiIcon_jjr9u_137{pointer-events:none;user-select:none;-webkit-user-select:none}._buttonLabel_jjr9u_144{white-space:pre-wrap;text-align:center;color:#000;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;line-height:1.2;user-select:none;-webkit-user-select:none;margin-top:0}@keyframes _moveRight_jjr9u_1{0%{transform:rotate(0) translate(0);opacity:.7}10%{transform:rotate(0) translate(6px);opacity:1}15%{transform:rotate(0) translate(12px);opacity:1}20%{transform:rotate(0) translate(12px);opacity:1}25%{transform:rotate(0) translate(0);opacity:.7}25.01%,to{transform:rotate(0) translate(0);opacity:.7}}@keyframes _moveLeft_jjr9u_1{0%,24.99%{transform:rotate(180deg) translate(0);opacity:.7}25%{transform:rotate(180deg) translate(0);opacity:.7}35%{transform:rotate(180deg) translate(6px);opacity:1}40%{transform:rotate(180deg) translate(12px);opacity:1}45%{transform:rotate(180deg) translate(12px);opacity:1}50%{transform:rotate(180deg) translate(0);opacity:.7}50.01%,to{transform:rotate(180deg) translate(0);opacity:.7}}@keyframes _moveUp_jjr9u_1{0%,49.99%{transform:rotate(-90deg) translate(0);opacity:.7}50%{transform:rotate(-90deg) translate(0);opacity:.7}60%{transform:rotate(-90deg) translate(6px);opacity:1}65%{transform:rotate(-90deg) translate(12px);opacity:1}70%{transform:rotate(-90deg) translate(12px);opacity:1}75%{transform:rotate(-90deg) translate(0);opacity:.7}75.01%,to{transform:rotate(-90deg) translate(0);opacity:.7}}@keyframes _moveDown_jjr9u_1{0%,74.99%{transform:rotate(90deg) translate(0);opacity:.7}75%{transform:rotate(90deg) translate(0);opacity:.7}85%{transform:rotate(90deg) translate(6px);opacity:1}90%{transform:rotate(90deg) translate(12px);opacity:1}95%{transform:rotate(90deg) translate(12px);opacity:1}to{transform:rotate(90deg) translate(0);opacity:.7}}._sideButton_jjr9u_2.like-btn ._arrowWrapper_jjr9u_103 svg._arrowRight_jjr9u_120{animation:_moveRight_jjr9u_1 8s infinite}._sideButton_jjr9u_2.dislike-btn ._arrowWrapper_jjr9u_103 svg._arrowLeft_jjr9u_124{animation:_moveLeft_jjr9u_1 8s infinite}._sideButton_jjr9u_2.maybe-btn ._arrowWrapper_jjr9u_103 svg._arrowUp_jjr9u_128{animation:_moveUp_jjr9u_1 8s infinite}._sideButton_jjr9u_2.seen-btn ._arrowWrapper_jjr9u_103 svg._arrowDown_jjr9u_132{animation:_moveDown_jjr9u_1 8s infinite}._horizontalCtaTooltip_1slua_1{position:absolute;transform:translate(-50%) translateY(-25%);left:50%;padding:10px 15px;border-radius:6px;font-weight:500;text-align:center;z-index:100;transition:opacity .3s ease;box-shadow:0 2px 8px #0003;animation:_horizontalCtaTooltipPulse_1slua_1 2s infinite ease-in-out;white-space:pre-line;background-color:#fff;color:#333;font-size:12px}._contrastMode_1slua_19 ._horizontalCtaTooltip_1slua_1{background-color:#00000080;color:#fff;border:1px solid white;font-weight:600}@keyframes _horizontalCtaTooltipPulse_1slua_1{0%{transform:translate(-50%) translateY(-25%) scale(1)}50%{transform:translate(-50%) translateY(-25%) scale(1.1)}to{transform:translate(-50%) translateY(-25%) scale(1)}}._sideButtonsContainer_1kkly_2{position:absolute;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;z-index:100;pointer-events:none}._sideButtonsWrapper_1kkly_16{position:relative;width:100%;height:100%;display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto 1fr auto;padding:15px;box-sizing:border-box}._sideButtonContainer_1kkly_28{display:flex;align-items:center;flex-direction:column;gap:4px}._sideButtonLeft_1kkly_36{grid-column:1;grid-row:2;margin-right:auto;justify-self:start;align-self:center}._sideButtonRight_1kkly_45{grid-column:3;grid-row:2;margin-left:auto;justify-self:end;align-self:center}._sideButtonTop_1kkly_54{grid-column:2;grid-row:1;justify-self:center;align-self:start}._sideButtonBottom_1kkly_62{grid-column:2;grid-row:3;justify-self:center;align-self:end}._sideButton_1kkly_2{border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px solid rgba(255,255,255,.4);background-color:#ffffffb3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 4px 12px #0000004d;transition:all .3s ease;-webkit-tap-highlight-color:transparent;pointer-events:auto;padding:0;margin:0;gap:4px;-webkit-touch-callout:none;-webkit-user-select:none;touch-action:manipulation;cursor:pointer}._sideButton_1kkly_2:hover{border-color:#fff;background-color:#ffffffe6}._buttonContent_1kkly_99{position:relative;display:flex;align-items:center;justify-content:center}._buttonContent_1kkly_99 svg{color:#000}._buttonLabel_1kkly_111{white-space:pre-wrap;text-align:center;color:#000;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;line-height:1.2;user-select:none;-webkit-user-select:none;margin-top:0}._arrowRight_1kkly_126{transform:rotate(0)}._arrowLeft_1kkly_130{transform:rotate(180deg)}._arrowUp_1kkly_134{transform:rotate(-90deg)}._arrowDown_1kkly_138{transform:rotate(90deg)}@keyframes _moveRight_1kkly_1{0%{transform:rotate(0) translate(0);opacity:.7}10%{transform:rotate(0) translate(6px);opacity:1}15%{transform:rotate(0) translate(12px);opacity:1}20%{transform:rotate(0) translate(12px);opacity:1}25%{transform:rotate(0) translate(0);opacity:.7}25.01%,to{transform:rotate(0) translate(0);opacity:.7}}@keyframes _moveLeft_1kkly_1{0%,24.99%{transform:rotate(180deg) translate(0);opacity:.7}25%{transform:rotate(180deg) translate(0);opacity:.7}35%{transform:rotate(180deg) translate(6px);opacity:1}40%{transform:rotate(180deg) translate(12px);opacity:1}45%{transform:rotate(180deg) translate(12px);opacity:1}50%{transform:rotate(180deg) translate(0);opacity:.7}50.01%,to{transform:rotate(180deg) translate(0);opacity:.7}}@keyframes _moveUp_1kkly_1{0%,49.99%{transform:rotate(-90deg) translate(0);opacity:.7}50%{transform:rotate(-90deg) translate(0);opacity:.7}60%{transform:rotate(-90deg) translate(6px);opacity:1}65%{transform:rotate(-90deg) translate(12px);opacity:1}70%{transform:rotate(-90deg) translate(12px);opacity:1}75%{transform:rotate(-90deg) translate(0);opacity:.7}75.01%,to{transform:rotate(-90deg) translate(0);opacity:.7}}@keyframes _moveDown_1kkly_1{0%,74.99%{transform:rotate(90deg) translate(0);opacity:.7}75%{transform:rotate(90deg) translate(0);opacity:.7}85%{transform:rotate(90deg) translate(6px);opacity:1}90%{transform:rotate(90deg) translate(12px);opacity:1}95%{transform:rotate(90deg) translate(12px);opacity:1}to{transform:rotate(90deg) translate(0);opacity:.7}}._sideButton_1kkly_2.like-btn ._buttonContent_1kkly_99 svg._arrowRight_1kkly_126{animation:_moveRight_1kkly_1 8s infinite}._sideButton_1kkly_2.dislike-btn ._buttonContent_1kkly_99 svg._arrowLeft_1kkly_130{animation:_moveLeft_1kkly_1 8s infinite}._sideButton_1kkly_2.maybe-btn ._buttonContent_1kkly_99 svg._arrowUp_1kkly_134{animation:_moveUp_1kkly_1 8s infinite}._sideButton_1kkly_2.seen-btn ._buttonContent_1kkly_99 svg._arrowDown_1kkly_138{animation:_moveDown_1kkly_1 8s infinite}._tooltipWrapper_1kkly_277{grid-column:2;grid-row:2;display:flex;align-items:center;justify-content:center}._swipeTutorialOverlay_1dy8n_2{position:relative;width:100%;height:100%;left:0;top:0;z-index:100;pointer-events:none}._handContainer_1dy8n_16{position:relative;height:100%}._handWrapper_1dy8n_25{position:relative;left:50%;transform:translate(-50%,-50%)}._handIcon_1dy8n_32{filter:drop-shadow(0 4px 8px rgba(0,0,0,.3));opacity:.9;width:100%;height:100%}._handLabelWrapper_1dy8n_39{position:absolute;top:55%;left:40%;width:50%;height:38%;display:flex;align-items:center;justify-content:center;z-index:1;overflow:hidden}._handLabel_1dy8n_39{display:block;line-height:1;text-wrap:wrap;text-align:center;word-wrap:normal;overflow:hidden;font-weight:600}._swipeableFeed_jamse_1{position:relative;width:100%;height:100%;overflow:hidden}._swipeableFeedCards_jamse_8{position:relative;width:100%;height:100%}._swipeableFeedCards_jamse_8>*{position:absolute;top:0;left:0;width:100%;height:100%}._swipeableFeedEmpty_jamse_22{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#666;font-size:16px;text-align:center}._swipeTutorialContainer_jamse_33{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:150}._volumeControl_r52gg_2{position:absolute;z-index:1100;display:flex;align-items:center;gap:8px;margin:0}._volumeControlTopLeft_r52gg_12{top:10px;left:10px}._volumeControlTopRight_r52gg_17{top:10px;right:10px;flex-direction:row-reverse}._volumeControlBottomLeft_r52gg_23{bottom:80px;left:15px}._volumeControlBottomRight_r52gg_28{bottom:80px;right:15px;flex-direction:row-reverse}._volumeControlButton_r52gg_34{width:auto;height:30px;cursor:pointer;background-color:#0006;border-radius:50%;transition:background-color .2s ease;display:flex;align-items:center;justify-content:center;padding:4px;box-sizing:border-box;flex-shrink:0}._volumeControlButton_r52gg_34:hover{background-color:#000000b3}._volumeControlButton_r52gg_34 img{width:100%;height:100%;object-fit:contain}._volumeSlider_r52gg_60{background-color:#0006;border-radius:20px;padding:8px 12px;display:flex;align-items:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .2s ease}._volumeSlider_r52gg_60:hover{background-color:#000000b3}._volumeControl_r52gg_2:hover ._volumeSlider_r52gg_60{opacity:1;pointer-events:auto}._volumeSliderInput_r52gg_81{width:100px;height:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}._volumeSliderInput_r52gg_81::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:transform .1s ease}._volumeSliderInput_r52gg_81::-webkit-slider-thumb:hover{transform:scale(1.2)}._volumeSliderInput_r52gg_81::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none;transition:transform .1s ease}._volumeSliderInput_r52gg_81::-moz-range-thumb:hover{transform:scale(1.2)}._historyButton_1xf6c_1{border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:1000;box-shadow:16px 20px 8px #00000026,inset -4px -4px 10px #0003;background-image:linear-gradient(135deg,#fff3,#0003);outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}._historyCardsContent_1xf6c_17{margin:12px 0}._historyButton_1xf6c_1:focus{outline:none}._historyButton_1xf6c_1:active{outline:none;-webkit-tap-highlight-color:transparent}._historyButton_1xf6c_1:focus-visible{outline:none}._historyButton_1xf6c_1 img{pointer-events:none}._tooltip_1xf6c_39{display:flex;z-index:110;line-height:1.2;padding:10px 14px;position:absolute;top:0;border-radius:8px;font-weight:800;text-align:center;width:max-content;transition:opacity .3s ease;box-shadow:0 0 16px 1px #000;left:50%;white-space:pre-line;transform:translate(-50%) translateY(calc(-100% - 16px));animation:_historyButtonTooltipBounce_1xf6c_1 2s infinite}._tooltipArrow_1xf6c_59{position:absolute;bottom:-8px;left:50%;width:16px;height:16px;transform:translate(-50%) rotate(45deg);z-index:0}@keyframes _historyButtonTooltipBounce_1xf6c_1{0%,20%,50%,80%,to{transform:translate(-50%) translateY(calc(-100% - 16px))}40%{transform:translate(-50%) translateY(calc(-100% - 24px))}60%{transform:translate(-50%) translateY(calc(-100% - 20px))}}._drawerOverlay_1eftt_2{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:999;opacity:0;visibility:hidden;transition:opacity .5s ease,visibility .5s ease}._drawerOverlayScoped_1eftt_16{position:absolute;top:0;left:0;right:0;bottom:0}._drawerOverlayVisible_1eftt_24{opacity:1;visibility:visible}._drawer_1eftt_2{position:fixed;bottom:0;left:0;right:0;height:80%;background:#fff;border-radius:20px 20px 0 0;z-index:1000;transform:translateY(100%);transition:transform .6s cubic-bezier(.25,.46,.45,.94);box-shadow:0 -8px 32px #0003;display:flex;flex-direction:column;overflow:hidden}._drawerScoped_1eftt_48{position:absolute;bottom:0;left:0;right:0}._drawerOpen_1eftt_55{transform:translateY(0)}._drawerHandle_1eftt_60{width:40px;height:4px;background-color:#0003;border-radius:2px;margin:12px auto 8px;flex-shrink:0;transition:background-color .2s ease}._drawerHandle_1eftt_60:hover{background-color:#0000004d}._drawerEmojisContainer_1eftt_75{display:flex;justify-content:space-between;padding:16px 20px;border-bottom:1px solid rgba(0,0,0,.1);flex-shrink:0}._drawerEmojiItem_1eftt_84{display:flex;flex-direction:column;align-items:center;gap:8px}._drawerEmojiItemActive_1eftt_91 ._drawerEmojiLabel_1eftt_91{color:#000;font-weight:700}._drawerEmojiButton_1eftt_97{display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;background:#fffc;border:2px solid rgba(0,0,0,.2);cursor:pointer;transition:all .3s ease;width:50px;height:50px;box-shadow:0 2px 8px #00000026;-webkit-tap-highlight-color:transparent}._drawerEmojiButtonActive_1eftt_113{background:#fff;border:3px solid rgba(0,0,0,.6);box-shadow:0 4px 12px #00000040;transform:scale(1.1)}._drawerEmojiLikeActive_1eftt_125{border-color:#4caf50;background:#4caf5026;box-shadow:0 4px 12px #4caf504d}._drawerEmojiDislikeActive_1eftt_135{border-color:#f44336;background:#f4433626;box-shadow:0 4px 12px #f443364d}._drawerEmojiMaybeActive_1eftt_145{border-color:#ff9800;background:#ff980026;box-shadow:0 4px 12px #ff98004d}._drawerEmojiSeenActive_1eftt_155{border-color:#2196f3;background:#2196f326;box-shadow:0 4px 12px #2196f34d}._drawerEmojiIcon_1eftt_162{width:32px;height:32px;object-fit:contain}._drawerEmojiLabel_1eftt_91{font-size:11px;font-weight:600;color:#000c;text-align:center;line-height:1.2;text-transform:uppercase;letter-spacing:.5px;white-space:pre-wrap}._drawerEmojiLike_1eftt_121:hover{border-color:#4caf50;background:#4caf501a}._drawerEmojiDislike_1eftt_131:hover{border-color:#f44336;background:#f443361a}._drawerEmojiMaybe_1eftt_141:hover{border-color:#ff9800;background:#ff98001a}._drawerEmojiSeen_1eftt_151:hover{border-color:#2196f3;background:#2196f31a}._drawerContent_1eftt_202{flex:1;padding:20px;-webkit-overflow-scrolling:touch;overflow-y:auto}._drawerCloseButton_1eftt_210{background:linear-gradient(135deg,#ff6b6b,#ee5a52);color:#fff;border:none;padding:12px 24px;margin:20px;border-radius:25px;font-size:16px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:all .3s ease;box-shadow:0 4px 16px #ff6b6b4d;outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-self:center;min-height:48px;white-space:pre-wrap}._drawerCloseButton_1eftt_210:hover{transform:translateY(-2px);box-shadow:0 6px 20px #ff6b6b66}._drawerCloseButton_1eftt_210:active{transform:translateY(0);box-shadow:0 2px 8px #ff6b6b4d}._drawerCloseButton_1eftt_210:focus{outline:none}._drawerCloseButton_1eftt_210:focus-visible{outline:2px solid rgba(255,107,107,.5);outline-offset:2px}._drawerCloseIcon_1eftt_255{width:16px;height:16px;filter:brightness(0) invert(1)}@media (max-width: 768px){._drawer_1eftt_2{height:80%;border-radius:30px 30px 0 0}._drawerContent_1eftt_202{padding:16px}._drawerCloseButton_1eftt_210{margin:16px;padding:10px 20px;font-size:14px}}@media (max-width: 480px){._drawer_1eftt_2{height:80%;border-radius:30px 30px 0 0}._drawerContent_1eftt_202{padding:12px}._drawerCloseButton_1eftt_210{margin:12px;font-size:14px}}._cardListContainer_zrmnf_2{padding:20px;overscroll-behavior-y:contain;touch-action:pan-y;overflow-y:auto;height:100%;box-sizing:border-box}._cardListContainerNoPadding_zrmnf_11{padding:0;box-sizing:border-box}._summaryGridContainer_zrmnf_17{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:20px;box-sizing:border-box}._summaryGridItem_zrmnf_26{aspect-ratio:1;border-radius:8px;overflow:hidden;background:#0000000d;cursor:default}._summaryGridItemClickable_zrmnf_34{cursor:pointer}._gridPlaceholder_zrmnf_39{width:100%;height:100%;background:#f2f2f2;display:flex;align-items:center;justify-content:center;font-size:12px;color:#181818}._gridItemImage_zrmnf_51{width:100%;height:100%;object-fit:cover}._summaryCardItem_zrmnf_58{display:flex;gap:8px;padding:12px;border-radius:8px;background:#f2f2f2;color:#181818;margin-bottom:8px;align-items:center;cursor:default}._summaryCardItemClickable_zrmnf_70{cursor:pointer}._cardItemImage_zrmnf_75{width:60px;height:60px;border-radius:6px;object-fit:cover;flex-shrink:0}._cardItemPlaceholder_zrmnf_84{width:60px;height:60px;border-radius:6px;background:#d9d9d9;display:flex;align-items:center;justify-content:center;font-size:12px;color:#00000080;flex-shrink:0}._cardItemContent_zrmnf_98{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}._cardItemTitle_zrmnf_107{margin:0 0 2px;font-size:14px;font-weight:600;line-height:1.2;text-align:left}._cardItemPrice_zrmnf_116{margin:0;font-size:12px;color:#000000b3;line-height:1.2}._summaryContainer_1gtok_3{display:flex;flex-direction:column;height:100%;width:100%;background-color:#fff;overflow:hidden;position:relative}._summaryShareButtonFixed_1gtok_14{position:absolute;bottom:10px;right:10px;width:45px;height:45px;font-size:12px;text-transform:uppercase;border-radius:50%;background-color:#2196f3;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026;transition:all .3s ease;z-index:1000;-webkit-tap-highlight-color:transparent}._summaryShareButtonFixed_1gtok_14:hover{background-color:#1976d2;box-shadow:0 6px 16px #0003;transform:scale(1.05)}._summaryShareButtonFixed_1gtok_14:active{transform:scale(.95);box-shadow:0 2px 8px #00000026}._summaryShareButtonFixed_1gtok_14 ._shareIcon_1gtok_47{width:24px;height:24px;filter:brightness(0) invert(1)}._summaryExplaination_1gtok_54{gap:8px;padding:12px;border-radius:8px;align-items:center;margin:12px 20px 0;font-size:14px;font-weight:600;line-height:1.2;text-align:center;justify-content:center;white-space:pre-wrap;background:#f2f2f2;color:#181818}._summaryTabs_1gtok_71{display:flex;justify-content:center;padding:16px 20px;background-color:#f5f5f5;border-bottom:1px solid #e0e0e0}._summaryTab_1gtok_71{display:flex;flex-direction:column;align-items:center;cursor:pointer;transition:all .3s ease;text-align:center;padding:0 5px;-webkit-tap-highlight-color:transparent}._summaryEmojiItem_1gtok_96{display:flex;flex-direction:column;align-items:center;gap:8px}._summaryEmojiButton_1gtok_108{display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;background:#fffc;border:2px solid rgba(0,0,0,.2);cursor:pointer;transition:all .3s ease;width:40px;height:40px;box-shadow:0 2px 8px #00000026;-webkit-tap-highlight-color:transparent}._summaryEmojiButtonActive_1gtok_124{background:#fff;border:3px solid rgba(0,0,0,.6);box-shadow:0 4px 12px #00000040;transform:scale(1.1)}._summaryEmojiLikeActive_1gtok_136{border-color:#4caf50;background:#4caf5026;box-shadow:0 4px 12px #4caf504d}._summaryEmojiDislikeActive_1gtok_146{border-color:#f44336;background:#f4433626;box-shadow:0 4px 12px #f443364d}._summaryEmojiMaybeActive_1gtok_156{border-color:#ff9800;background:#ff980026;box-shadow:0 4px 12px #ff98004d}._summaryEmojiSeenActive_1gtok_166{border-color:#2196f3;background:#2196f326;box-shadow:0 4px 12px #2196f34d}._summaryEmojiLike_1gtok_132:hover{border-color:#4caf50;background:#4caf501a}._summaryEmojiDislike_1gtok_142:hover{border-color:#f44336;background:#f443361a}._summaryEmojiMaybe_1gtok_152:hover{border-color:#ff9800;background:#ff98001a}._summaryEmojiSeen_1gtok_162:hover{border-color:#2196f3;background:#2196f31a}._summaryEmojiIcon_1gtok_194{width:28px;height:28px;object-fit:contain}._summaryEmojiLabel_1gtok_201{font-size:11px;font-weight:600;color:#000c;text-align:center;line-height:1.2;text-transform:uppercase;letter-spacing:.5px}._summaryEmojiItemActive_1gtok_103 ._summaryEmojiLabel_1gtok_201{color:#000;font-weight:700}._summaryContent_1gtok_217{flex:1;overflow:hidden;position:relative;background-color:#fff;min-height:0}._summaryPanel_1gtok_226{display:none;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow-y:auto;min-height:0;box-sizing:border-box;overscroll-behavior:contain}._summaryPanelActive_1gtok_241{display:block}._summaryEmptyState_1gtok_246{text-align:center;padding:40px 20px;color:#181818}._summaryEmptyStateText_1gtok_252{margin:0 0 16px;font-size:18px;font-weight:600}._historyDrawerContent_x0jj6_1,._historyDrawerContent_x0jj6_1 .summary-container{height:100%;display:flex;flex-direction:column;overflow:hidden}._historyDrawerEmpty_x0jj6_15{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px 20px;text-align:center;color:#666}._historyDrawerEmpty_x0jj6_15 p{margin:8px 0;font-size:16px}._historyDrawerEmptyHint_x0jj6_31{font-size:14px;color:#999}._historyDrawerTitle_x0jj6_36{margin:0 0 16px;padding:20px 20px 0;font-size:20px;font-weight:700;color:#333}._historyDrawerList_x0jj6_44{height:100%;display:flex;flex-direction:column;overflow:hidden}._historyDrawerList_x0jj6_44 .card-list-container{flex:1;overflow-y:auto}._historyDrawerGrouped_x0jj6_56{height:100%;display:flex;flex-direction:column;overflow-y:auto}._historyDrawerGroup_x0jj6_56{margin-bottom:24px}._historyDrawerGroup_x0jj6_56:last-child{margin-bottom:0}._historyDrawerGroupTitle_x0jj6_71{margin:0 0 12px;padding:20px 20px 0;font-size:18px;font-weight:700;color:#333}._historyDrawerGroup_x0jj6_56:first-child ._historyDrawerGroupTitle_x0jj6_71{padding-top:20px}._historyDrawerGroup_x0jj6_56 .card-list-container{padding-top:0}._historyDrawer_x0jj6_1 .drawer-content{padding:20px 0}._historyDrawer_x0jj6_1 .drawer-content .summary-tabs,._historyDrawer_x0jj6_1 .drawer-content .summary-content{background-color:transparent!important}._filtersButton_qio2f_1{position:absolute;z-index:1000;min-width:80px;height:40px;padding:8px 16px;border:none;border-radius:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:14px;font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;text-align:center;white-space:pre-wrap;background-image:linear-gradient(135deg,#ffffff1a,#0000001a);transition:all .3s ease;box-shadow:0 4px 8px #00000026}._filtersButton_qio2f_1:hover{box-shadow:0 6px 12px #0003;transform:translateY(-1px)}._filtersButton_qio2f_1:active{transform:translateY(1px);box-shadow:0 2px 4px #00000026}._filtersButton_qio2f_1:focus{outline:none}._filtersButton_qio2f_1:focus-visible{outline:none}._filtersLeft_qio2f_46{left:20px;right:auto}._filtersMiddle_qio2f_51{left:50%;right:auto;transform:translate(-50%)}._filtersRight_qio2f_57{left:auto;right:20px}._filtersIcon_qio2f_63{pointer-events:none;flex-shrink:0}._content_hci8k_2{padding:12px 20px}._title_hci8k_7{margin:0 0 12px;font-size:16px;font-weight:600;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;white-space:pre-wrap}._categories_hci8k_17{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:0}._pill_hci8k_25{display:inline-flex;align-items:center;padding:6px 12px;border-radius:20px;cursor:pointer;font-size:13px;font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;transition:all .2s ease;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}._noCategories_hci8k_40{width:100%;color:#999;font-style:italic;text-align:center;padding:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}._cardsCounter_1h26d_1{width:100%;text-align:left;font-size:14px;font-weight:700;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.8);padding:5px 5px 5px 21px;pointer-events:none;white-space:pre-wrap}._logo_1rzq2_1{display:block;height:auto;max-width:100%;-webkit-user-select:none;user-select:none;pointer-events:none}._container_18bki_1{position:absolute}._interactiveFeed_1wsuw_1,._swippingJourney_15509_1{position:relative;width:100%;height:100%;overflow:hidden}._mainBootstrap_1rzog_1{width:100%;height:100%;position:relative}:root{--media-object-fit: cover}*{margin:0;padding:0;box-sizing:border-box;font-family:Arial,sans-serif}body{touch-action:pan-y;-webkit-user-select:none;user-select:none}";document.head.appendChild(s);}})();import React, { createContext, useRef, useContext, useId, useEffect, useCallback, useLayoutEffect, useMemo, useInsertionEffect, forwardRef, Fragment, createElement, Component, useState, useImperativeHandle } from "react";
|
|
1
|
+
(function(){if(typeof document!=="undefined"){var s=document.createElement("style");s.textContent="._card_doqsx_2{position:absolute;width:100%;height:100%;left:0;top:0;background-color:#fff;box-shadow:0 2px 8px #0003;overflow:hidden;transition:transform .3s ease;cursor:default;transform-origin:50% 100%;will-change:transform;z-index:1}._cardContent_doqsx_18{position:absolute;z-index:2;bottom:0;left:0;width:100%;height:100%;color:#fff}._gradientBottom_doqsx_29{position:absolute;z-index:1;bottom:0;left:0;width:100%;height:120px;background:linear-gradient(transparent,#000);pointer-events:none}._gradientTop_doqsx_41{position:absolute;z-index:1;top:0;left:0;width:100%;height:120px;background:linear-gradient(rgba(0,0,0,1),transparent);pointer-events:none}._cardName_doqsx_52{position:absolute;left:0;bottom:10%;font-weight:700;font-size:22px;padding:0 20px;text-shadow:1px 1px 2px rgba(0,0,0,.8);width:100%;text-align:left;white-space:pre-wrap}._categories_1237w_1{display:flex;flex-wrap:wrap;gap:6px;padding:0 20px 12px;position:absolute;left:0;bottom:0;width:100%;box-sizing:border-box}._categoryBadge_1237w_13{display:inline-block;padding:3px 10px;background-color:#fff3;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:12px;font-size:11px;font-weight:500;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.5);white-space:nowrap;line-height:1.4}._filterButton_1237w_28{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background-color:#fff3;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:12px;cursor:pointer;flex-shrink:0;pointer-events:auto}._filterIcon_1237w_45{width:12px;height:12px;filter:brightness(0) invert(1)}._image_trs4h_2{width:100%;height:100%;object-fit:cover}._videoContainer_119iz_3{width:100%;height:100%;position:relative;overflow:hidden}._cardVideo_119iz_10{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;z-index:1}._swipeableCard_14c6z_1{position:relative;width:100%;height:100%;will-change:transform,opacity;backface-visibility:hidden;-webkit-backface-visibility:hidden;touch-action:none;user-select:none;-webkit-user-select:none;pointer-events:auto}._swipeableCard_14c6z_1>*{pointer-events:none}._swipeableCard_14c6z_1 video,._swipeableCard_14c6z_1 img{pointer-events:none}._swipeHeadline_14c6z_25{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:24px;font-weight:700;color:#fff;z-index:200000}._ctaTooltip_1mai4_2{position:absolute;z-index:110;font-size:12px;top:0;right:-2px;background-color:#fff;color:#333;padding:10px 14px;border-radius:8px;font-weight:800;text-align:center;width:max-content;transition:opacity .3s ease;pointer-events:none;animation:_ctaTooltipBounce_1mai4_1 2s infinite;box-shadow:0 0 16px 1px #000;white-space:pre-line}._ctaTooltipArrow_1mai4_22{position:absolute;bottom:-8px;width:16px;height:16px;transform:translate(50%) rotate(45deg);z-index:0}@keyframes _ctaTooltipBounce_1mai4_1{0%,20%,50%,80%,to{transform:translateY(calc(-100% - 16px))}40%{transform:translateY(calc(-100% - 24px))}60%{transform:translateY(calc(-100% - 20px))}}._verticalEmojisButtons_14t5d_2{position:absolute;display:flex;flex-direction:column;align-items:center;z-index:100}._buttonContainer_14t5d_11{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:8px 0}._button_14t5d_11{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 5px #0003;background-color:#fff;position:relative;-webkit-user-select:none;user-select:none;transition:transform .2s ease,background-color .2s ease;outline:none;border:none;-webkit-tap-highlight-color:transparent}._button_14t5d_11:focus,._button_14t5d_11:active{outline:none;border:none}._emojiIcon_14t5d_45{width:35px;height:35px;display:block;outline:none;pointer-events:none;position:relative;z-index:2}._buttonLabel_14t5d_56{white-space:pre-wrap;margin-top:5px}._buttonAnimation_14t5d_62{transform:scale(1.3);z-index:101;position:relative}._buttonAnimation_14t5d_62:before{content:\"\";position:absolute;top:-5px;left:-5px;right:-5px;bottom:-5px;border-radius:50%;border:5px solid rgba(255,255,255,.5);z-index:1}._buttonLikeAnimation_14t5d_80{background-color:#4cd964!important;transform:scale(1.3)!important}._buttonDislikeAnimation_14t5d_85{background-color:#ff3b30!important;transform:scale(1.3)!important}._buttonMaybeAnimation_14t5d_90{background-color:#fc0!important;transform:scale(1.3)!important}._buttonSeenAnimation_14t5d_95{background-color:#007aff!important;transform:scale(1.3)!important}._contrastMode_14t5d_101 ._buttonContainer_14t5d_11{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:8px 0}._contrastModeButton_14t5d_109{background-color:#fffc!important;border:2px solid black!important;box-shadow:0 0 8px #00000080!important}._contrastModeButton_14t5d_109:hover{background-color:#fff!important}._contrastModeLabel_14t5d_119{color:#fff!important;text-shadow:1px 1px 3px black,-1px -1px 3px black,1px -1px 3px black,-1px 1px 3px black!important;font-weight:700!important;font-size:12px!important;text-align:center!important;display:block!important;margin-top:5px!important;text-transform:uppercase}._contrastModeLike_14t5d_130,._contrastModeDislike_14t5d_135,._contrastModeMaybe_14t5d_140,._contrastModeSeen_14t5d_145{color:#fff!important;filter:brightness(1.5)!important}._sideButtonsContainer_jjr9u_2{position:absolute;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;z-index:100;pointer-events:none}._sideButtonsWrapper_jjr9u_16{position:relative;width:100%;height:100%;display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto 1fr auto;padding:15px;box-sizing:border-box}._sideButtonContainer_jjr9u_28{display:flex;align-items:center;flex-direction:column;gap:4px}._sideButtonLeft_jjr9u_36{grid-column:1;grid-row:2;margin-right:auto;justify-self:start;align-self:center}._sideButtonRight_jjr9u_45{grid-column:3;grid-row:2;margin-left:auto;justify-self:end;align-self:center}._sideButtonTop_jjr9u_54{grid-column:2;grid-row:1;justify-self:center;align-self:start}._sideButtonBottom_jjr9u_62{grid-column:2;grid-row:3;justify-self:center;align-self:end}._sideButton_jjr9u_2{border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px solid rgba(255,255,255,.4);background-color:#ffffffb3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 4px 12px #0000004d;transition:all .3s ease;-webkit-tap-highlight-color:transparent;pointer-events:auto;padding:0;margin:0;gap:4px}._sideButton_jjr9u_2:hover{border-color:#fff;background-color:#ffffffe6}._buttonContent_jjr9u_95{position:relative;display:flex;align-items:center;justify-content:center}._arrowWrapper_jjr9u_103,._emojiWrapper_jjr9u_104{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}._arrowWrapper_jjr9u_103 svg{color:#000}._arrowRight_jjr9u_120{transform:rotate(0)}._arrowLeft_jjr9u_124{transform:rotate(180deg)}._arrowUp_jjr9u_128{transform:rotate(-90deg)}._arrowDown_jjr9u_132{transform:rotate(90deg)}._emojiIcon_jjr9u_137{pointer-events:none;user-select:none;-webkit-user-select:none}._buttonLabel_jjr9u_144{white-space:pre-wrap;text-align:center;color:#000;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;line-height:1.2;user-select:none;-webkit-user-select:none;margin-top:0}@keyframes _moveRight_jjr9u_1{0%{transform:rotate(0) translate(0);opacity:.7}10%{transform:rotate(0) translate(6px);opacity:1}15%{transform:rotate(0) translate(12px);opacity:1}20%{transform:rotate(0) translate(12px);opacity:1}25%{transform:rotate(0) translate(0);opacity:.7}25.01%,to{transform:rotate(0) translate(0);opacity:.7}}@keyframes _moveLeft_jjr9u_1{0%,24.99%{transform:rotate(180deg) translate(0);opacity:.7}25%{transform:rotate(180deg) translate(0);opacity:.7}35%{transform:rotate(180deg) translate(6px);opacity:1}40%{transform:rotate(180deg) translate(12px);opacity:1}45%{transform:rotate(180deg) translate(12px);opacity:1}50%{transform:rotate(180deg) translate(0);opacity:.7}50.01%,to{transform:rotate(180deg) translate(0);opacity:.7}}@keyframes _moveUp_jjr9u_1{0%,49.99%{transform:rotate(-90deg) translate(0);opacity:.7}50%{transform:rotate(-90deg) translate(0);opacity:.7}60%{transform:rotate(-90deg) translate(6px);opacity:1}65%{transform:rotate(-90deg) translate(12px);opacity:1}70%{transform:rotate(-90deg) translate(12px);opacity:1}75%{transform:rotate(-90deg) translate(0);opacity:.7}75.01%,to{transform:rotate(-90deg) translate(0);opacity:.7}}@keyframes _moveDown_jjr9u_1{0%,74.99%{transform:rotate(90deg) translate(0);opacity:.7}75%{transform:rotate(90deg) translate(0);opacity:.7}85%{transform:rotate(90deg) translate(6px);opacity:1}90%{transform:rotate(90deg) translate(12px);opacity:1}95%{transform:rotate(90deg) translate(12px);opacity:1}to{transform:rotate(90deg) translate(0);opacity:.7}}._sideButton_jjr9u_2.like-btn ._arrowWrapper_jjr9u_103 svg._arrowRight_jjr9u_120{animation:_moveRight_jjr9u_1 8s infinite}._sideButton_jjr9u_2.dislike-btn ._arrowWrapper_jjr9u_103 svg._arrowLeft_jjr9u_124{animation:_moveLeft_jjr9u_1 8s infinite}._sideButton_jjr9u_2.maybe-btn ._arrowWrapper_jjr9u_103 svg._arrowUp_jjr9u_128{animation:_moveUp_jjr9u_1 8s infinite}._sideButton_jjr9u_2.seen-btn ._arrowWrapper_jjr9u_103 svg._arrowDown_jjr9u_132{animation:_moveDown_jjr9u_1 8s infinite}._horizontalCtaTooltip_1slua_1{position:absolute;transform:translate(-50%) translateY(-25%);left:50%;padding:10px 15px;border-radius:6px;font-weight:500;text-align:center;z-index:100;transition:opacity .3s ease;box-shadow:0 2px 8px #0003;animation:_horizontalCtaTooltipPulse_1slua_1 2s infinite ease-in-out;white-space:pre-line;background-color:#fff;color:#333;font-size:12px}._contrastMode_1slua_19 ._horizontalCtaTooltip_1slua_1{background-color:#00000080;color:#fff;border:1px solid white;font-weight:600}@keyframes _horizontalCtaTooltipPulse_1slua_1{0%{transform:translate(-50%) translateY(-25%) scale(1)}50%{transform:translate(-50%) translateY(-25%) scale(1.1)}to{transform:translate(-50%) translateY(-25%) scale(1)}}._sideButtonsContainer_1kkly_2{position:absolute;width:100%;height:100%;left:0;top:0;display:flex;justify-content:center;align-items:center;z-index:100;pointer-events:none}._sideButtonsWrapper_1kkly_16{position:relative;width:100%;height:100%;display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto 1fr auto;padding:15px;box-sizing:border-box}._sideButtonContainer_1kkly_28{display:flex;align-items:center;flex-direction:column;gap:4px}._sideButtonLeft_1kkly_36{grid-column:1;grid-row:2;margin-right:auto;justify-self:start;align-self:center}._sideButtonRight_1kkly_45{grid-column:3;grid-row:2;margin-left:auto;justify-self:end;align-self:center}._sideButtonTop_1kkly_54{grid-column:2;grid-row:1;justify-self:center;align-self:start}._sideButtonBottom_1kkly_62{grid-column:2;grid-row:3;justify-self:center;align-self:end}._sideButton_1kkly_2{border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px solid rgba(255,255,255,.4);background-color:#ffffffb3;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 4px 12px #0000004d;transition:all .3s ease;-webkit-tap-highlight-color:transparent;pointer-events:auto;padding:0;margin:0;gap:4px;-webkit-touch-callout:none;-webkit-user-select:none;touch-action:manipulation;cursor:pointer}._sideButton_1kkly_2:hover{border-color:#fff;background-color:#ffffffe6}._buttonContent_1kkly_99{position:relative;display:flex;align-items:center;justify-content:center}._buttonContent_1kkly_99 svg{color:#000}._buttonLabel_1kkly_111{white-space:pre-wrap;text-align:center;color:#000;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;line-height:1.2;user-select:none;-webkit-user-select:none;margin-top:0}._arrowRight_1kkly_126{transform:rotate(0)}._arrowLeft_1kkly_130{transform:rotate(180deg)}._arrowUp_1kkly_134{transform:rotate(-90deg)}._arrowDown_1kkly_138{transform:rotate(90deg)}@keyframes _moveRight_1kkly_1{0%{transform:rotate(0) translate(0);opacity:.7}10%{transform:rotate(0) translate(6px);opacity:1}15%{transform:rotate(0) translate(12px);opacity:1}20%{transform:rotate(0) translate(12px);opacity:1}25%{transform:rotate(0) translate(0);opacity:.7}25.01%,to{transform:rotate(0) translate(0);opacity:.7}}@keyframes _moveLeft_1kkly_1{0%,24.99%{transform:rotate(180deg) translate(0);opacity:.7}25%{transform:rotate(180deg) translate(0);opacity:.7}35%{transform:rotate(180deg) translate(6px);opacity:1}40%{transform:rotate(180deg) translate(12px);opacity:1}45%{transform:rotate(180deg) translate(12px);opacity:1}50%{transform:rotate(180deg) translate(0);opacity:.7}50.01%,to{transform:rotate(180deg) translate(0);opacity:.7}}@keyframes _moveUp_1kkly_1{0%,49.99%{transform:rotate(-90deg) translate(0);opacity:.7}50%{transform:rotate(-90deg) translate(0);opacity:.7}60%{transform:rotate(-90deg) translate(6px);opacity:1}65%{transform:rotate(-90deg) translate(12px);opacity:1}70%{transform:rotate(-90deg) translate(12px);opacity:1}75%{transform:rotate(-90deg) translate(0);opacity:.7}75.01%,to{transform:rotate(-90deg) translate(0);opacity:.7}}@keyframes _moveDown_1kkly_1{0%,74.99%{transform:rotate(90deg) translate(0);opacity:.7}75%{transform:rotate(90deg) translate(0);opacity:.7}85%{transform:rotate(90deg) translate(6px);opacity:1}90%{transform:rotate(90deg) translate(12px);opacity:1}95%{transform:rotate(90deg) translate(12px);opacity:1}to{transform:rotate(90deg) translate(0);opacity:.7}}._sideButton_1kkly_2.like-btn ._buttonContent_1kkly_99 svg._arrowRight_1kkly_126{animation:_moveRight_1kkly_1 8s infinite}._sideButton_1kkly_2.dislike-btn ._buttonContent_1kkly_99 svg._arrowLeft_1kkly_130{animation:_moveLeft_1kkly_1 8s infinite}._sideButton_1kkly_2.maybe-btn ._buttonContent_1kkly_99 svg._arrowUp_1kkly_134{animation:_moveUp_1kkly_1 8s infinite}._sideButton_1kkly_2.seen-btn ._buttonContent_1kkly_99 svg._arrowDown_1kkly_138{animation:_moveDown_1kkly_1 8s infinite}._tooltipWrapper_1kkly_277{grid-column:2;grid-row:2;display:flex;align-items:center;justify-content:center}._swipeTutorialOverlay_1dy8n_2{position:relative;width:100%;height:100%;left:0;top:0;z-index:100;pointer-events:none}._handContainer_1dy8n_16{position:relative;height:100%}._handWrapper_1dy8n_25{position:relative;left:50%;transform:translate(-50%,-50%)}._handIcon_1dy8n_32{filter:drop-shadow(0 4px 8px rgba(0,0,0,.3));opacity:.9;width:100%;height:100%}._handLabelWrapper_1dy8n_39{position:absolute;top:55%;left:40%;width:50%;height:38%;display:flex;align-items:center;justify-content:center;z-index:1;overflow:hidden}._handLabel_1dy8n_39{display:block;line-height:1;text-wrap:wrap;text-align:center;word-wrap:normal;overflow:hidden;font-weight:600}._swipeableFeed_jamse_1{position:relative;width:100%;height:100%;overflow:hidden}._swipeableFeedCards_jamse_8{position:relative;width:100%;height:100%}._swipeableFeedCards_jamse_8>*{position:absolute;top:0;left:0;width:100%;height:100%}._swipeableFeedEmpty_jamse_22{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#666;font-size:16px;text-align:center}._swipeTutorialContainer_jamse_33{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:150}._volumeControl_r52gg_2{position:absolute;z-index:1100;display:flex;align-items:center;gap:8px;margin:0}._volumeControlTopLeft_r52gg_12{top:10px;left:10px}._volumeControlTopRight_r52gg_17{top:10px;right:10px;flex-direction:row-reverse}._volumeControlBottomLeft_r52gg_23{bottom:80px;left:15px}._volumeControlBottomRight_r52gg_28{bottom:80px;right:15px;flex-direction:row-reverse}._volumeControlButton_r52gg_34{width:auto;height:30px;cursor:pointer;background-color:#0006;border-radius:50%;transition:background-color .2s ease;display:flex;align-items:center;justify-content:center;padding:4px;box-sizing:border-box;flex-shrink:0}._volumeControlButton_r52gg_34:hover{background-color:#000000b3}._volumeControlButton_r52gg_34 img{width:100%;height:100%;object-fit:contain}._volumeSlider_r52gg_60{background-color:#0006;border-radius:20px;padding:8px 12px;display:flex;align-items:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .2s ease}._volumeSlider_r52gg_60:hover{background-color:#000000b3}._volumeControl_r52gg_2:hover ._volumeSlider_r52gg_60{opacity:1;pointer-events:auto}._volumeSliderInput_r52gg_81{width:100px;height:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}._volumeSliderInput_r52gg_81::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;transition:transform .1s ease}._volumeSliderInput_r52gg_81::-webkit-slider-thumb:hover{transform:scale(1.2)}._volumeSliderInput_r52gg_81::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;cursor:pointer;border:none;transition:transform .1s ease}._volumeSliderInput_r52gg_81::-moz-range-thumb:hover{transform:scale(1.2)}._historyButton_1xf6c_1{border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:1000;box-shadow:16px 20px 8px #00000026,inset -4px -4px 10px #0003;background-image:linear-gradient(135deg,#fff3,#0003);outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}._historyCardsContent_1xf6c_17{margin:12px 0}._historyButton_1xf6c_1:focus{outline:none}._historyButton_1xf6c_1:active{outline:none;-webkit-tap-highlight-color:transparent}._historyButton_1xf6c_1:focus-visible{outline:none}._historyButton_1xf6c_1 img{pointer-events:none}._tooltip_1xf6c_39{display:flex;z-index:110;line-height:1.2;padding:10px 14px;position:absolute;top:0;border-radius:8px;font-weight:800;text-align:center;width:max-content;transition:opacity .3s ease;box-shadow:0 0 16px 1px #000;left:50%;white-space:pre-line;transform:translate(-50%) translateY(calc(-100% - 16px));animation:_historyButtonTooltipBounce_1xf6c_1 2s infinite}._tooltipArrow_1xf6c_59{position:absolute;bottom:-8px;left:50%;width:16px;height:16px;transform:translate(-50%) rotate(45deg);z-index:0}@keyframes _historyButtonTooltipBounce_1xf6c_1{0%,20%,50%,80%,to{transform:translate(-50%) translateY(calc(-100% - 16px))}40%{transform:translate(-50%) translateY(calc(-100% - 24px))}60%{transform:translate(-50%) translateY(calc(-100% - 20px))}}._drawerOverlay_1eftt_2{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:999;opacity:0;visibility:hidden;transition:opacity .5s ease,visibility .5s ease}._drawerOverlayScoped_1eftt_16{position:absolute;top:0;left:0;right:0;bottom:0}._drawerOverlayVisible_1eftt_24{opacity:1;visibility:visible}._drawer_1eftt_2{position:fixed;bottom:0;left:0;right:0;height:80%;background:#fff;border-radius:20px 20px 0 0;z-index:1000;transform:translateY(100%);transition:transform .6s cubic-bezier(.25,.46,.45,.94);box-shadow:0 -8px 32px #0003;display:flex;flex-direction:column;overflow:hidden}._drawerScoped_1eftt_48{position:absolute;bottom:0;left:0;right:0}._drawerOpen_1eftt_55{transform:translateY(0)}._drawerHandle_1eftt_60{width:40px;height:4px;background-color:#0003;border-radius:2px;margin:12px auto 8px;flex-shrink:0;transition:background-color .2s ease}._drawerHandle_1eftt_60:hover{background-color:#0000004d}._drawerEmojisContainer_1eftt_75{display:flex;justify-content:space-between;padding:16px 20px;border-bottom:1px solid rgba(0,0,0,.1);flex-shrink:0}._drawerEmojiItem_1eftt_84{display:flex;flex-direction:column;align-items:center;gap:8px}._drawerEmojiItemActive_1eftt_91 ._drawerEmojiLabel_1eftt_91{color:#000;font-weight:700}._drawerEmojiButton_1eftt_97{display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;background:#fffc;border:2px solid rgba(0,0,0,.2);cursor:pointer;transition:all .3s ease;width:50px;height:50px;box-shadow:0 2px 8px #00000026;-webkit-tap-highlight-color:transparent}._drawerEmojiButtonActive_1eftt_113{background:#fff;border:3px solid rgba(0,0,0,.6);box-shadow:0 4px 12px #00000040;transform:scale(1.1)}._drawerEmojiLikeActive_1eftt_125{border-color:#4caf50;background:#4caf5026;box-shadow:0 4px 12px #4caf504d}._drawerEmojiDislikeActive_1eftt_135{border-color:#f44336;background:#f4433626;box-shadow:0 4px 12px #f443364d}._drawerEmojiMaybeActive_1eftt_145{border-color:#ff9800;background:#ff980026;box-shadow:0 4px 12px #ff98004d}._drawerEmojiSeenActive_1eftt_155{border-color:#2196f3;background:#2196f326;box-shadow:0 4px 12px #2196f34d}._drawerEmojiIcon_1eftt_162{width:32px;height:32px;object-fit:contain}._drawerEmojiLabel_1eftt_91{font-size:11px;font-weight:600;color:#000c;text-align:center;line-height:1.2;text-transform:uppercase;letter-spacing:.5px;white-space:pre-wrap}._drawerEmojiLike_1eftt_121:hover{border-color:#4caf50;background:#4caf501a}._drawerEmojiDislike_1eftt_131:hover{border-color:#f44336;background:#f443361a}._drawerEmojiMaybe_1eftt_141:hover{border-color:#ff9800;background:#ff98001a}._drawerEmojiSeen_1eftt_151:hover{border-color:#2196f3;background:#2196f31a}._drawerContent_1eftt_202{flex:1;padding:20px;-webkit-overflow-scrolling:touch;overflow-y:auto}._drawerCloseButton_1eftt_210{background:linear-gradient(135deg,#ff6b6b,#ee5a52);color:#fff;border:none;padding:12px 24px;margin:20px;border-radius:25px;font-size:16px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:all .3s ease;box-shadow:0 4px 16px #ff6b6b4d;outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-self:center;min-height:48px;white-space:pre-wrap}._drawerCloseButton_1eftt_210:hover{transform:translateY(-2px);box-shadow:0 6px 20px #ff6b6b66}._drawerCloseButton_1eftt_210:active{transform:translateY(0);box-shadow:0 2px 8px #ff6b6b4d}._drawerCloseButton_1eftt_210:focus{outline:none}._drawerCloseButton_1eftt_210:focus-visible{outline:2px solid rgba(255,107,107,.5);outline-offset:2px}._drawerCloseIcon_1eftt_255{width:16px;height:16px;filter:brightness(0) invert(1)}@media (max-width: 768px){._drawer_1eftt_2{height:80%;border-radius:30px 30px 0 0}._drawerContent_1eftt_202{padding:16px}._drawerCloseButton_1eftt_210{margin:16px;padding:10px 20px;font-size:14px}}@media (max-width: 480px){._drawer_1eftt_2{height:80%;border-radius:30px 30px 0 0}._drawerContent_1eftt_202{padding:12px}._drawerCloseButton_1eftt_210{margin:12px;font-size:14px}}._cardListContainer_zrmnf_2{padding:20px;overscroll-behavior-y:contain;touch-action:pan-y;overflow-y:auto;height:100%;box-sizing:border-box}._cardListContainerNoPadding_zrmnf_11{padding:0;box-sizing:border-box}._summaryGridContainer_zrmnf_17{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:20px;box-sizing:border-box}._summaryGridItem_zrmnf_26{aspect-ratio:1;border-radius:8px;overflow:hidden;background:#0000000d;cursor:default}._summaryGridItemClickable_zrmnf_34{cursor:pointer}._gridPlaceholder_zrmnf_39{width:100%;height:100%;background:#f2f2f2;display:flex;align-items:center;justify-content:center;font-size:12px;color:#181818}._gridItemImage_zrmnf_51{width:100%;height:100%;object-fit:cover}._summaryCardItem_zrmnf_58{display:flex;gap:8px;padding:12px;border-radius:8px;background:#f2f2f2;color:#181818;margin-bottom:8px;align-items:center;cursor:default}._summaryCardItemClickable_zrmnf_70{cursor:pointer}._cardItemImage_zrmnf_75{width:60px;height:60px;border-radius:6px;object-fit:cover;flex-shrink:0}._cardItemPlaceholder_zrmnf_84{width:60px;height:60px;border-radius:6px;background:#d9d9d9;display:flex;align-items:center;justify-content:center;font-size:12px;color:#00000080;flex-shrink:0}._cardItemContent_zrmnf_98{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}._cardItemTitle_zrmnf_107{margin:0 0 2px;font-size:14px;font-weight:600;line-height:1.2;text-align:left}._cardItemPrice_zrmnf_116{margin:0;font-size:12px;color:#000000b3;line-height:1.2}._summaryContainer_1gtok_3{display:flex;flex-direction:column;height:100%;width:100%;background-color:#fff;overflow:hidden;position:relative}._summaryShareButtonFixed_1gtok_14{position:absolute;bottom:10px;right:10px;width:45px;height:45px;font-size:12px;text-transform:uppercase;border-radius:50%;background-color:#2196f3;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026;transition:all .3s ease;z-index:1000;-webkit-tap-highlight-color:transparent}._summaryShareButtonFixed_1gtok_14:hover{background-color:#1976d2;box-shadow:0 6px 16px #0003;transform:scale(1.05)}._summaryShareButtonFixed_1gtok_14:active{transform:scale(.95);box-shadow:0 2px 8px #00000026}._summaryShareButtonFixed_1gtok_14 ._shareIcon_1gtok_47{width:24px;height:24px;filter:brightness(0) invert(1)}._summaryExplaination_1gtok_54{gap:8px;padding:12px;border-radius:8px;align-items:center;margin:12px 20px 0;font-size:14px;font-weight:600;line-height:1.2;text-align:center;justify-content:center;white-space:pre-wrap;background:#f2f2f2;color:#181818}._summaryTabs_1gtok_71{display:flex;justify-content:center;padding:16px 20px;background-color:#f5f5f5;border-bottom:1px solid #e0e0e0}._summaryTab_1gtok_71{display:flex;flex-direction:column;align-items:center;cursor:pointer;transition:all .3s ease;text-align:center;padding:0 5px;-webkit-tap-highlight-color:transparent}._summaryEmojiItem_1gtok_96{display:flex;flex-direction:column;align-items:center;gap:8px}._summaryEmojiButton_1gtok_108{display:flex;align-items:center;justify-content:center;padding:0;border-radius:50%;background:#fffc;border:2px solid rgba(0,0,0,.2);cursor:pointer;transition:all .3s ease;width:40px;height:40px;box-shadow:0 2px 8px #00000026;-webkit-tap-highlight-color:transparent}._summaryEmojiButtonActive_1gtok_124{background:#fff;border:3px solid rgba(0,0,0,.6);box-shadow:0 4px 12px #00000040;transform:scale(1.1)}._summaryEmojiLikeActive_1gtok_136{border-color:#4caf50;background:#4caf5026;box-shadow:0 4px 12px #4caf504d}._summaryEmojiDislikeActive_1gtok_146{border-color:#f44336;background:#f4433626;box-shadow:0 4px 12px #f443364d}._summaryEmojiMaybeActive_1gtok_156{border-color:#ff9800;background:#ff980026;box-shadow:0 4px 12px #ff98004d}._summaryEmojiSeenActive_1gtok_166{border-color:#2196f3;background:#2196f326;box-shadow:0 4px 12px #2196f34d}._summaryEmojiLike_1gtok_132:hover{border-color:#4caf50;background:#4caf501a}._summaryEmojiDislike_1gtok_142:hover{border-color:#f44336;background:#f443361a}._summaryEmojiMaybe_1gtok_152:hover{border-color:#ff9800;background:#ff98001a}._summaryEmojiSeen_1gtok_162:hover{border-color:#2196f3;background:#2196f31a}._summaryEmojiIcon_1gtok_194{width:28px;height:28px;object-fit:contain}._summaryEmojiLabel_1gtok_201{font-size:11px;font-weight:600;color:#000c;text-align:center;line-height:1.2;text-transform:uppercase;letter-spacing:.5px}._summaryEmojiItemActive_1gtok_103 ._summaryEmojiLabel_1gtok_201{color:#000;font-weight:700}._summaryContent_1gtok_217{flex:1;overflow:hidden;position:relative;background-color:#fff;min-height:0}._summaryPanel_1gtok_226{display:none;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow-y:auto;min-height:0;box-sizing:border-box;overscroll-behavior:contain}._summaryPanelActive_1gtok_241{display:block}._summaryEmptyState_1gtok_246{text-align:center;padding:40px 20px;color:#181818}._summaryEmptyStateText_1gtok_252{margin:0 0 16px;font-size:18px;font-weight:600}._historyDrawerContent_x0jj6_1,._historyDrawerContent_x0jj6_1 .summary-container{height:100%;display:flex;flex-direction:column;overflow:hidden}._historyDrawerEmpty_x0jj6_15{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px 20px;text-align:center;color:#666}._historyDrawerEmpty_x0jj6_15 p{margin:8px 0;font-size:16px}._historyDrawerEmptyHint_x0jj6_31{font-size:14px;color:#999}._historyDrawerTitle_x0jj6_36{margin:0 0 16px;padding:20px 20px 0;font-size:20px;font-weight:700;color:#333}._historyDrawerList_x0jj6_44{height:100%;display:flex;flex-direction:column;overflow:hidden}._historyDrawerList_x0jj6_44 .card-list-container{flex:1;overflow-y:auto}._historyDrawerGrouped_x0jj6_56{height:100%;display:flex;flex-direction:column;overflow-y:auto}._historyDrawerGroup_x0jj6_56{margin-bottom:24px}._historyDrawerGroup_x0jj6_56:last-child{margin-bottom:0}._historyDrawerGroupTitle_x0jj6_71{margin:0 0 12px;padding:20px 20px 0;font-size:18px;font-weight:700;color:#333}._historyDrawerGroup_x0jj6_56:first-child ._historyDrawerGroupTitle_x0jj6_71{padding-top:20px}._historyDrawerGroup_x0jj6_56 .card-list-container{padding-top:0}._historyDrawer_x0jj6_1 .drawer-content{padding:20px 0}._historyDrawer_x0jj6_1 .drawer-content .summary-tabs,._historyDrawer_x0jj6_1 .drawer-content .summary-content{background-color:transparent!important}._filtersButton_qio2f_1{position:absolute;z-index:1000;min-width:80px;height:40px;padding:8px 16px;border:none;border-radius:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;outline:none;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:14px;font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;text-align:center;white-space:pre-wrap;background-image:linear-gradient(135deg,#ffffff1a,#0000001a);transition:all .3s ease;box-shadow:0 4px 8px #00000026}._filtersButton_qio2f_1:hover{box-shadow:0 6px 12px #0003;transform:translateY(-1px)}._filtersButton_qio2f_1:active{transform:translateY(1px);box-shadow:0 2px 4px #00000026}._filtersButton_qio2f_1:focus{outline:none}._filtersButton_qio2f_1:focus-visible{outline:none}._filtersLeft_qio2f_46{left:20px;right:auto}._filtersMiddle_qio2f_51{left:50%;right:auto;transform:translate(-50%)}._filtersRight_qio2f_57{left:auto;right:20px}._filtersIcon_qio2f_63{pointer-events:none;flex-shrink:0}._content_bjs2p_2{padding:12px 20px}._title_bjs2p_7{margin:0 0 12px;font-size:16px;font-weight:600;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;white-space:pre-wrap}._categories_bjs2p_17{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:0}._pill_bjs2p_25{display:inline-flex;align-items:center;padding:6px 12px;border-radius:20px;cursor:pointer;font-size:13px;font-weight:500;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;transition:all .2s ease;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}._noCategories_bjs2p_40{width:100%;color:#999;font-style:italic;text-align:center;padding:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}._confirmButton_bjs2p_50{display:block;width:100%;margin-top:16px;padding:12px 0;border:none;border-radius:12px;background-color:#007bff;color:#fff;font-size:14px;font-weight:600;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;cursor:pointer;transition:background-color .2s ease;-webkit-tap-highlight-color:transparent}._confirmButton_bjs2p_50:hover{background-color:#0056b3}._cardsCounter_1h26d_1{width:100%;text-align:left;font-size:14px;font-weight:700;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.8);padding:5px 5px 5px 21px;pointer-events:none;white-space:pre-wrap}._logo_1rzq2_1{display:block;height:auto;max-width:100%;-webkit-user-select:none;user-select:none;pointer-events:none}._container_18bki_1{position:absolute}._interactiveFeed_1wsuw_1,._swippingJourney_15509_1{position:relative;width:100%;height:100%;overflow:hidden}._mainBootstrap_1rzog_1{width:100%;height:100%;position:relative}:root{--media-object-fit: cover}*{margin:0;padding:0;box-sizing:border-box;font-family:Arial,sans-serif}body{touch-action:pan-y;-webkit-user-select:none;user-select:none}";document.head.appendChild(s);}})();import React, { createContext, useRef, useContext, useId, useEffect, useCallback, useLayoutEffect, useMemo, useInsertionEffect, forwardRef, Fragment, createElement, Component, useState, useImperativeHandle } from "react";
|
|
2
2
|
import { createRoot } from "react-dom/client";
|
|
3
3
|
import { jsxs, jsx, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
4
4
|
const LayoutGroupContext = createContext({});
|
|
@@ -7593,19 +7593,227 @@ const cardContent = "_cardContent_doqsx_18";
|
|
|
7593
7593
|
const gradientBottom = "_gradientBottom_doqsx_29";
|
|
7594
7594
|
const gradientTop = "_gradientTop_doqsx_41";
|
|
7595
7595
|
const cardName = "_cardName_doqsx_52";
|
|
7596
|
-
const styles$
|
|
7596
|
+
const styles$p = {
|
|
7597
7597
|
card,
|
|
7598
7598
|
cardContent,
|
|
7599
7599
|
gradientBottom,
|
|
7600
7600
|
gradientTop,
|
|
7601
7601
|
cardName
|
|
7602
7602
|
};
|
|
7603
|
+
const DataContext = createContext(void 0);
|
|
7604
|
+
const DataProvider = ({
|
|
7605
|
+
children,
|
|
7606
|
+
dataService,
|
|
7607
|
+
finderId,
|
|
7608
|
+
backendUrl,
|
|
7609
|
+
presetCategoryIds,
|
|
7610
|
+
initialCards = [],
|
|
7611
|
+
initialFinder = null,
|
|
7612
|
+
initialCategories = []
|
|
7613
|
+
}) => {
|
|
7614
|
+
const hasPresetCategories = Array.isArray(presetCategoryIds) && presetCategoryIds.length > 0;
|
|
7615
|
+
const isInitiallyLoaded = useRef(false);
|
|
7616
|
+
const [cards, setCards] = useState(initialCards);
|
|
7617
|
+
const [finder, setFinder] = useState(initialFinder);
|
|
7618
|
+
const [categories2, setCategories] = useState(initialCategories);
|
|
7619
|
+
const [loading, setLoading] = useState(false);
|
|
7620
|
+
const [error, setError] = useState(null);
|
|
7621
|
+
const loadFinder = useCallback(async () => {
|
|
7622
|
+
if (!finderId || !backendUrl) {
|
|
7623
|
+
setError("finderId and backendUrl are required to load finder");
|
|
7624
|
+
return;
|
|
7625
|
+
}
|
|
7626
|
+
setLoading(true);
|
|
7627
|
+
setError(null);
|
|
7628
|
+
try {
|
|
7629
|
+
const result = await dataService.loadFinderFromApi(finderId, backendUrl, presetCategoryIds);
|
|
7630
|
+
setFinder(result.finder);
|
|
7631
|
+
setCards(result.cards);
|
|
7632
|
+
setCategories(result.categories);
|
|
7633
|
+
} catch (err) {
|
|
7634
|
+
const errorMessage = err instanceof Error ? err.message : "Failed to load finder";
|
|
7635
|
+
setError(errorMessage);
|
|
7636
|
+
console.error("Error loading finder:", err);
|
|
7637
|
+
} finally {
|
|
7638
|
+
setLoading(false);
|
|
7639
|
+
isInitiallyLoaded.current = true;
|
|
7640
|
+
}
|
|
7641
|
+
}, [dataService, finderId, backendUrl, presetCategoryIds]);
|
|
7642
|
+
useEffect(() => {
|
|
7643
|
+
loadFinder();
|
|
7644
|
+
}, [loadFinder]);
|
|
7645
|
+
const loadCardsByCategories = useCallback(async (categoryIds) => {
|
|
7646
|
+
if (!finderId || !backendUrl) {
|
|
7647
|
+
return;
|
|
7648
|
+
}
|
|
7649
|
+
setLoading(true);
|
|
7650
|
+
setError(null);
|
|
7651
|
+
try {
|
|
7652
|
+
const result = await dataService.loadCardsByCategories(finderId, backendUrl, categoryIds);
|
|
7653
|
+
setCards(result.cards);
|
|
7654
|
+
setCategories(result.categories);
|
|
7655
|
+
} catch (err) {
|
|
7656
|
+
const errorMessage = err instanceof Error ? err.message : "Failed to load cards";
|
|
7657
|
+
setError(errorMessage);
|
|
7658
|
+
console.error("Error loading cards by categories:", err);
|
|
7659
|
+
} finally {
|
|
7660
|
+
setLoading(false);
|
|
7661
|
+
}
|
|
7662
|
+
}, [dataService, finderId, backendUrl]);
|
|
7663
|
+
const value = {
|
|
7664
|
+
cards,
|
|
7665
|
+
finder,
|
|
7666
|
+
categories: categories2,
|
|
7667
|
+
loading,
|
|
7668
|
+
error,
|
|
7669
|
+
isInitiallyLoaded: isInitiallyLoaded.current,
|
|
7670
|
+
hasPresetCategories,
|
|
7671
|
+
setCards,
|
|
7672
|
+
setFinder,
|
|
7673
|
+
setCategories,
|
|
7674
|
+
loadFinder,
|
|
7675
|
+
loadCardsByCategories
|
|
7676
|
+
};
|
|
7677
|
+
return /* @__PURE__ */ jsx(DataContext.Provider, { value, children });
|
|
7678
|
+
};
|
|
7679
|
+
const useData = () => {
|
|
7680
|
+
const context = useContext(DataContext);
|
|
7681
|
+
if (context === void 0) {
|
|
7682
|
+
throw new Error("useData must be used within a DataProvider");
|
|
7683
|
+
}
|
|
7684
|
+
return context;
|
|
7685
|
+
};
|
|
7686
|
+
const UIContext = createContext(void 0);
|
|
7687
|
+
const UIProvider = ({ children }) => {
|
|
7688
|
+
var _a, _b, _c, _d;
|
|
7689
|
+
const { finder } = useData();
|
|
7690
|
+
const [buttonsVisible, setButtonsVisible] = useState(false);
|
|
7691
|
+
const [summaryVisible, setSummaryVisible] = useState(false);
|
|
7692
|
+
const [ctaTooltipVisible, setCtaTooltipVisible] = useState(false);
|
|
7693
|
+
const [selectedCategories, setSelectedCategories] = useState([]);
|
|
7694
|
+
const [logoVisible, setLogoVisible] = useState(true);
|
|
7695
|
+
const [tutorialVisible, setTutorialVisible] = useState(false);
|
|
7696
|
+
const [isFiltersDrawerOpen, setIsFiltersDrawerOpen] = useState(false);
|
|
7697
|
+
useEffect(() => {
|
|
7698
|
+
var _a2;
|
|
7699
|
+
console.log("finder?.navigation?.tutorial", finder == null ? void 0 : finder.tutorial);
|
|
7700
|
+
setTutorialVisible(((_a2 = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _a2.enabled) ?? false);
|
|
7701
|
+
}, [
|
|
7702
|
+
(_a = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _a.enabled,
|
|
7703
|
+
(_b = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _b.size,
|
|
7704
|
+
(_c = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _c.color,
|
|
7705
|
+
(_d = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _d.opacity
|
|
7706
|
+
]);
|
|
7707
|
+
console.log("tutorialVisible3", tutorialVisible);
|
|
7708
|
+
const showButtons = useCallback(() => {
|
|
7709
|
+
setButtonsVisible(true);
|
|
7710
|
+
}, []);
|
|
7711
|
+
const hideButtons = useCallback(() => {
|
|
7712
|
+
setButtonsVisible(false);
|
|
7713
|
+
}, []);
|
|
7714
|
+
const showSummary = useCallback(() => {
|
|
7715
|
+
setSummaryVisible(true);
|
|
7716
|
+
}, []);
|
|
7717
|
+
const hideSummary = useCallback(() => {
|
|
7718
|
+
setSummaryVisible(false);
|
|
7719
|
+
}, []);
|
|
7720
|
+
const showCtaTooltip = useCallback(() => {
|
|
7721
|
+
setCtaTooltipVisible(true);
|
|
7722
|
+
}, []);
|
|
7723
|
+
const hideCtaTooltip = useCallback(() => {
|
|
7724
|
+
setCtaTooltipVisible(false);
|
|
7725
|
+
}, []);
|
|
7726
|
+
const toggleLogo = useCallback((visible) => {
|
|
7727
|
+
setLogoVisible(visible);
|
|
7728
|
+
}, []);
|
|
7729
|
+
const showTutorial = useCallback(() => {
|
|
7730
|
+
setTutorialVisible(true);
|
|
7731
|
+
}, []);
|
|
7732
|
+
const hideTutorial = useCallback(() => {
|
|
7733
|
+
setTutorialVisible(false);
|
|
7734
|
+
}, []);
|
|
7735
|
+
const openFiltersDrawer = useCallback(() => {
|
|
7736
|
+
setIsFiltersDrawerOpen(true);
|
|
7737
|
+
}, []);
|
|
7738
|
+
const closeFiltersDrawer = useCallback(() => {
|
|
7739
|
+
setIsFiltersDrawerOpen(false);
|
|
7740
|
+
}, []);
|
|
7741
|
+
const value = {
|
|
7742
|
+
buttonsVisible,
|
|
7743
|
+
summaryVisible,
|
|
7744
|
+
ctaTooltipVisible,
|
|
7745
|
+
selectedCategories,
|
|
7746
|
+
logoVisible,
|
|
7747
|
+
tutorialVisible,
|
|
7748
|
+
isFiltersDrawerOpen,
|
|
7749
|
+
showButtons,
|
|
7750
|
+
hideButtons,
|
|
7751
|
+
showSummary,
|
|
7752
|
+
hideSummary,
|
|
7753
|
+
showCtaTooltip,
|
|
7754
|
+
hideCtaTooltip,
|
|
7755
|
+
setSelectedCategories,
|
|
7756
|
+
toggleLogo,
|
|
7757
|
+
showTutorial,
|
|
7758
|
+
hideTutorial,
|
|
7759
|
+
openFiltersDrawer,
|
|
7760
|
+
closeFiltersDrawer
|
|
7761
|
+
};
|
|
7762
|
+
return /* @__PURE__ */ jsx(UIContext.Provider, { value, children });
|
|
7763
|
+
};
|
|
7764
|
+
const useUI = () => {
|
|
7765
|
+
const context = useContext(UIContext);
|
|
7766
|
+
if (context === void 0) {
|
|
7767
|
+
throw new Error("useUI must be used within a UIProvider");
|
|
7768
|
+
}
|
|
7769
|
+
return context;
|
|
7770
|
+
};
|
|
7771
|
+
const filterIcon$1 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='currentColor'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpolygon%20points='22,3%202,3%2010,12.46%2010,19%2014,21%2014,12.46'%3e%3c/polygon%3e%3c/svg%3e";
|
|
7772
|
+
const categories$1 = "_categories_1237w_1";
|
|
7773
|
+
const categoryBadge = "_categoryBadge_1237w_13";
|
|
7774
|
+
const filterButton = "_filterButton_1237w_28";
|
|
7775
|
+
const filterIcon = "_filterIcon_1237w_45";
|
|
7776
|
+
const styles$o = {
|
|
7777
|
+
categories: categories$1,
|
|
7778
|
+
categoryBadge,
|
|
7779
|
+
filterButton,
|
|
7780
|
+
filterIcon
|
|
7781
|
+
};
|
|
7782
|
+
const CardCategories = ({
|
|
7783
|
+
categoryIds,
|
|
7784
|
+
categories: categories2
|
|
7785
|
+
}) => {
|
|
7786
|
+
const { openFiltersDrawer } = useUI();
|
|
7787
|
+
const { hasPresetCategories } = useData();
|
|
7788
|
+
const resolved = useMemo(() => {
|
|
7789
|
+
return categoryIds.slice(0, 3).map((id2) => categories2.find((c) => c.id === id2)).filter((c) => Boolean(c));
|
|
7790
|
+
}, [categoryIds, categories2]);
|
|
7791
|
+
if (resolved.length === 0) return null;
|
|
7792
|
+
return /* @__PURE__ */ jsxs("div", { className: styles$o.categories, children: [
|
|
7793
|
+
resolved.map((category) => /* @__PURE__ */ jsx("span", { className: styles$o.categoryBadge, children: category.name }, category.id)),
|
|
7794
|
+
!hasPresetCategories && /* @__PURE__ */ jsx(
|
|
7795
|
+
"button",
|
|
7796
|
+
{
|
|
7797
|
+
type: "button",
|
|
7798
|
+
className: styles$o.filterButton,
|
|
7799
|
+
onPointerDown: (e) => e.stopPropagation(),
|
|
7800
|
+
onClick: (e) => {
|
|
7801
|
+
e.stopPropagation();
|
|
7802
|
+
openFiltersDrawer();
|
|
7803
|
+
},
|
|
7804
|
+
"aria-label": "Filters",
|
|
7805
|
+
children: /* @__PURE__ */ jsx("img", { src: filterIcon$1, alt: "", className: styles$o.filterIcon })
|
|
7806
|
+
}
|
|
7807
|
+
)
|
|
7808
|
+
] });
|
|
7809
|
+
};
|
|
7603
7810
|
const CardWrapper = ({
|
|
7604
7811
|
card: card2,
|
|
7605
7812
|
cardUIConfig,
|
|
7606
7813
|
className = "",
|
|
7607
7814
|
children
|
|
7608
7815
|
}) => {
|
|
7816
|
+
const { categories: categories2 } = useData();
|
|
7609
7817
|
const { gradient, title: title2 } = cardUIConfig;
|
|
7610
7818
|
const gradientColor = gradient.color || "rgba(0, 0, 0, 1)";
|
|
7611
7819
|
const getGradientClasses = () => {
|
|
@@ -7623,13 +7831,13 @@ const CardWrapper = ({
|
|
|
7623
7831
|
"div",
|
|
7624
7832
|
{
|
|
7625
7833
|
id: card2.id || void 0,
|
|
7626
|
-
className: `${styles$
|
|
7834
|
+
className: `${styles$p.card} ${className}`.trim(),
|
|
7627
7835
|
children: [
|
|
7628
7836
|
children,
|
|
7629
7837
|
gradients.showBottom && /* @__PURE__ */ jsx(
|
|
7630
7838
|
"div",
|
|
7631
7839
|
{
|
|
7632
|
-
className: styles$
|
|
7840
|
+
className: styles$p.gradientBottom,
|
|
7633
7841
|
style: {
|
|
7634
7842
|
background: `linear-gradient(transparent, ${gradientColor})`
|
|
7635
7843
|
}
|
|
@@ -7638,23 +7846,32 @@ const CardWrapper = ({
|
|
|
7638
7846
|
gradients.showTop && /* @__PURE__ */ jsx(
|
|
7639
7847
|
"div",
|
|
7640
7848
|
{
|
|
7641
|
-
className: styles$
|
|
7849
|
+
className: styles$p.gradientTop,
|
|
7642
7850
|
style: {
|
|
7643
7851
|
background: `linear-gradient(${gradientColor}, transparent)`
|
|
7644
7852
|
}
|
|
7645
7853
|
}
|
|
7646
7854
|
),
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
|
|
7657
|
-
|
|
7855
|
+
/* @__PURE__ */ jsxs("div", { className: styles$p.cardContent, children: [
|
|
7856
|
+
card2.categoryIds && card2.categoryIds.length > 0 && /* @__PURE__ */ jsx(
|
|
7857
|
+
CardCategories,
|
|
7858
|
+
{
|
|
7859
|
+
categoryIds: card2.categoryIds,
|
|
7860
|
+
categories: categories2
|
|
7861
|
+
}
|
|
7862
|
+
),
|
|
7863
|
+
title2.enabled && /* @__PURE__ */ jsx(
|
|
7864
|
+
"div",
|
|
7865
|
+
{
|
|
7866
|
+
className: styles$p.cardName,
|
|
7867
|
+
style: {
|
|
7868
|
+
fontSize: `${title2.textSize}px`,
|
|
7869
|
+
bottom: `${title2.positionBottom}%`
|
|
7870
|
+
},
|
|
7871
|
+
children: card2.title || ""
|
|
7872
|
+
}
|
|
7873
|
+
)
|
|
7874
|
+
] })
|
|
7658
7875
|
]
|
|
7659
7876
|
}
|
|
7660
7877
|
);
|
|
@@ -26409,17 +26626,19 @@ const FiltersButton = ({
|
|
|
26409
26626
|
}
|
|
26410
26627
|
);
|
|
26411
26628
|
};
|
|
26412
|
-
const content = "
|
|
26413
|
-
const title = "
|
|
26414
|
-
const categories = "
|
|
26415
|
-
const pill = "
|
|
26416
|
-
const noCategories = "
|
|
26629
|
+
const content = "_content_bjs2p_2";
|
|
26630
|
+
const title = "_title_bjs2p_7";
|
|
26631
|
+
const categories = "_categories_bjs2p_17";
|
|
26632
|
+
const pill = "_pill_bjs2p_25";
|
|
26633
|
+
const noCategories = "_noCategories_bjs2p_40";
|
|
26634
|
+
const confirmButton = "_confirmButton_bjs2p_50";
|
|
26417
26635
|
const styles$6 = {
|
|
26418
26636
|
content,
|
|
26419
26637
|
title,
|
|
26420
26638
|
categories,
|
|
26421
26639
|
pill,
|
|
26422
|
-
noCategories
|
|
26640
|
+
noCategories,
|
|
26641
|
+
confirmButton
|
|
26423
26642
|
};
|
|
26424
26643
|
const FiltersDrawer = ({
|
|
26425
26644
|
isOpen,
|
|
@@ -26432,26 +26651,37 @@ const FiltersDrawer = ({
|
|
|
26432
26651
|
className = ""
|
|
26433
26652
|
}) => {
|
|
26434
26653
|
const { drawerCategoriesTitle, drawerCloseButtonText } = filtersUIConfig;
|
|
26435
|
-
const
|
|
26654
|
+
const [localSelected, setLocalSelected] = useState(externalSelectedCategories);
|
|
26436
26655
|
const [hoveredPillId, setHoveredPillId] = useState(null);
|
|
26656
|
+
useEffect(() => {
|
|
26657
|
+
if (isOpen) {
|
|
26658
|
+
setLocalSelected(externalSelectedCategories);
|
|
26659
|
+
}
|
|
26660
|
+
}, [isOpen]);
|
|
26661
|
+
const localSelectedSet = new Set(localSelected);
|
|
26437
26662
|
const toggleCategorySelection = (categoryId) => {
|
|
26438
|
-
|
|
26439
|
-
|
|
26440
|
-
|
|
26441
|
-
|
|
26442
|
-
|
|
26443
|
-
|
|
26663
|
+
setLocalSelected((prev) => {
|
|
26664
|
+
if (categoryId === "all") {
|
|
26665
|
+
return [];
|
|
26666
|
+
}
|
|
26667
|
+
const set = new Set(prev);
|
|
26668
|
+
if (set.has(categoryId)) {
|
|
26669
|
+
set.delete(categoryId);
|
|
26444
26670
|
} else {
|
|
26445
|
-
|
|
26671
|
+
set.add(categoryId);
|
|
26446
26672
|
}
|
|
26447
|
-
|
|
26673
|
+
return Array.from(set);
|
|
26674
|
+
});
|
|
26675
|
+
};
|
|
26676
|
+
const handleConfirm = () => {
|
|
26448
26677
|
if (onFilterChange) {
|
|
26449
|
-
onFilterChange(
|
|
26678
|
+
onFilterChange(localSelected);
|
|
26450
26679
|
}
|
|
26680
|
+
onClose();
|
|
26451
26681
|
};
|
|
26452
26682
|
const getPillStyle = (categoryId, isActive) => {
|
|
26453
26683
|
const isHovered = hoveredPillId === categoryId;
|
|
26454
|
-
const isAllActive = categoryId === "all" &&
|
|
26684
|
+
const isAllActive = categoryId === "all" && localSelectedSet.size === 0;
|
|
26455
26685
|
return {
|
|
26456
26686
|
background: isActive || isAllActive ? "#007bff" : isHovered ? "#e9ecef" : "#f5f5f5",
|
|
26457
26687
|
color: isActive || isAllActive ? "white" : "#666",
|
|
@@ -26468,8 +26698,7 @@ const FiltersDrawer = ({
|
|
|
26468
26698
|
maxHeight: "70%",
|
|
26469
26699
|
className,
|
|
26470
26700
|
showHandle: true,
|
|
26471
|
-
showCloseButton:
|
|
26472
|
-
closeButtonText: drawerCloseButtonText,
|
|
26701
|
+
showCloseButton: false,
|
|
26473
26702
|
scoped,
|
|
26474
26703
|
children: /* @__PURE__ */ jsxs("div", { className: styles$6.content, children: [
|
|
26475
26704
|
/* @__PURE__ */ jsx("h3", { className: styles$6.title, children: drawerCategoriesTitle }),
|
|
@@ -26478,7 +26707,7 @@ const FiltersDrawer = ({
|
|
|
26478
26707
|
"div",
|
|
26479
26708
|
{
|
|
26480
26709
|
className: styles$6.pill,
|
|
26481
|
-
style: getPillStyle("all",
|
|
26710
|
+
style: getPillStyle("all", localSelectedSet.size === 0),
|
|
26482
26711
|
onMouseEnter: () => setHoveredPillId("all"),
|
|
26483
26712
|
onMouseLeave: () => setHoveredPillId(null),
|
|
26484
26713
|
onClick: () => toggleCategorySelection("all"),
|
|
@@ -26489,7 +26718,7 @@ const FiltersDrawer = ({
|
|
|
26489
26718
|
"div",
|
|
26490
26719
|
{
|
|
26491
26720
|
className: styles$6.pill,
|
|
26492
|
-
style: getPillStyle(category.id,
|
|
26721
|
+
style: getPillStyle(category.id, localSelectedSet.has(category.id)),
|
|
26493
26722
|
onMouseEnter: () => setHoveredPillId(category.id),
|
|
26494
26723
|
onMouseLeave: () => setHoveredPillId(null),
|
|
26495
26724
|
onClick: () => toggleCategorySelection(category.id),
|
|
@@ -26497,7 +26726,16 @@ const FiltersDrawer = ({
|
|
|
26497
26726
|
},
|
|
26498
26727
|
category.id
|
|
26499
26728
|
))
|
|
26500
|
-
] }) })
|
|
26729
|
+
] }) }),
|
|
26730
|
+
/* @__PURE__ */ jsx(
|
|
26731
|
+
"button",
|
|
26732
|
+
{
|
|
26733
|
+
type: "button",
|
|
26734
|
+
className: styles$6.confirmButton,
|
|
26735
|
+
onClick: handleConfirm,
|
|
26736
|
+
children: drawerCloseButtonText
|
|
26737
|
+
}
|
|
26738
|
+
)
|
|
26501
26739
|
] })
|
|
26502
26740
|
}
|
|
26503
26741
|
);
|
|
@@ -26585,67 +26823,6 @@ const Positioned = ({
|
|
|
26585
26823
|
};
|
|
26586
26824
|
return /* @__PURE__ */ jsx("div", { className: `${styles$3.container} ${className}`.trim(), style: containerStyle, children });
|
|
26587
26825
|
};
|
|
26588
|
-
const DataContext = createContext(void 0);
|
|
26589
|
-
const DataProvider = ({
|
|
26590
|
-
children,
|
|
26591
|
-
dataService,
|
|
26592
|
-
finderId,
|
|
26593
|
-
backendUrl,
|
|
26594
|
-
initialCards = [],
|
|
26595
|
-
initialFinder = null,
|
|
26596
|
-
initialCategories = []
|
|
26597
|
-
}) => {
|
|
26598
|
-
const isInitiallyLoaded = useRef(false);
|
|
26599
|
-
const [cards, setCards] = useState(initialCards);
|
|
26600
|
-
const [finder, setFinder] = useState(initialFinder);
|
|
26601
|
-
const [categories2, setCategories] = useState(initialCategories);
|
|
26602
|
-
const [loading, setLoading] = useState(false);
|
|
26603
|
-
const [error, setError] = useState(null);
|
|
26604
|
-
const loadFinder = useCallback(async () => {
|
|
26605
|
-
if (!finderId || !backendUrl) {
|
|
26606
|
-
setError("finderId and backendUrl are required to load finder");
|
|
26607
|
-
return;
|
|
26608
|
-
}
|
|
26609
|
-
setLoading(true);
|
|
26610
|
-
setError(null);
|
|
26611
|
-
try {
|
|
26612
|
-
const result = await dataService.loadFinderFromApi(finderId, backendUrl);
|
|
26613
|
-
setFinder(result.finder);
|
|
26614
|
-
setCards(result.cards);
|
|
26615
|
-
setCategories(result.categories);
|
|
26616
|
-
} catch (err) {
|
|
26617
|
-
const errorMessage = err instanceof Error ? err.message : "Failed to load finder";
|
|
26618
|
-
setError(errorMessage);
|
|
26619
|
-
console.error("Error loading finder:", err);
|
|
26620
|
-
} finally {
|
|
26621
|
-
setLoading(false);
|
|
26622
|
-
isInitiallyLoaded.current = true;
|
|
26623
|
-
}
|
|
26624
|
-
}, [dataService, finderId, backendUrl]);
|
|
26625
|
-
useEffect(() => {
|
|
26626
|
-
loadFinder();
|
|
26627
|
-
}, [loadFinder]);
|
|
26628
|
-
const value = {
|
|
26629
|
-
cards,
|
|
26630
|
-
finder,
|
|
26631
|
-
categories: categories2,
|
|
26632
|
-
loading,
|
|
26633
|
-
error,
|
|
26634
|
-
isInitiallyLoaded: isInitiallyLoaded.current,
|
|
26635
|
-
setCards,
|
|
26636
|
-
setFinder,
|
|
26637
|
-
setCategories,
|
|
26638
|
-
loadFinder
|
|
26639
|
-
};
|
|
26640
|
-
return /* @__PURE__ */ jsx(DataContext.Provider, { value, children });
|
|
26641
|
-
};
|
|
26642
|
-
const useData = () => {
|
|
26643
|
-
const context = useContext(DataContext);
|
|
26644
|
-
if (context === void 0) {
|
|
26645
|
-
throw new Error("useData must be used within a DataProvider");
|
|
26646
|
-
}
|
|
26647
|
-
return context;
|
|
26648
|
-
};
|
|
26649
26826
|
const AppStateContext = createContext(void 0);
|
|
26650
26827
|
const AppStateProvider = ({
|
|
26651
26828
|
children
|
|
@@ -26710,22 +26887,12 @@ const AppStateProvider = ({
|
|
|
26710
26887
|
const setCards = useCallback((cards) => {
|
|
26711
26888
|
setAllCards(cards);
|
|
26712
26889
|
setFilteredCards(cards);
|
|
26713
|
-
|
|
26890
|
+
setCurrentCardIndex(0);
|
|
26891
|
+
setNoMoreCards(false);
|
|
26892
|
+
}, []);
|
|
26893
|
+
const handleSetSelectedCategories = useCallback((categoryIds) => {
|
|
26894
|
+
setSelectedCategories(categoryIds);
|
|
26714
26895
|
}, []);
|
|
26715
|
-
useEffect(() => {
|
|
26716
|
-
let newFilteredCards;
|
|
26717
|
-
if (selectedCategories.length === 0) {
|
|
26718
|
-
newFilteredCards = [...allCards];
|
|
26719
|
-
} else {
|
|
26720
|
-
newFilteredCards = allCards.filter((card2) => {
|
|
26721
|
-
return card2.categoryIds && card2.categoryIds.some((categoryId) => selectedCategories.includes(categoryId));
|
|
26722
|
-
});
|
|
26723
|
-
}
|
|
26724
|
-
setFilteredCards(newFilteredCards);
|
|
26725
|
-
if (allCards.length > 0) {
|
|
26726
|
-
setCurrentCardIndex(0);
|
|
26727
|
-
}
|
|
26728
|
-
}, [selectedCategories, allCards]);
|
|
26729
26896
|
const value = {
|
|
26730
26897
|
currentCardIndex,
|
|
26731
26898
|
swipeHistory,
|
|
@@ -26752,7 +26919,7 @@ const AppStateProvider = ({
|
|
|
26752
26919
|
toggleMute,
|
|
26753
26920
|
showLogo,
|
|
26754
26921
|
setCards,
|
|
26755
|
-
setSelectedCategories
|
|
26922
|
+
setSelectedCategories: handleSetSelectedCategories
|
|
26756
26923
|
};
|
|
26757
26924
|
return /* @__PURE__ */ jsx(AppStateContext.Provider, { value, children });
|
|
26758
26925
|
};
|
|
@@ -26767,11 +26934,12 @@ const MonitoringContext = createContext(void 0);
|
|
|
26767
26934
|
const MonitoringProvider = ({
|
|
26768
26935
|
children,
|
|
26769
26936
|
monitorService,
|
|
26770
|
-
finderId
|
|
26937
|
+
finderId,
|
|
26938
|
+
collectEvents = true
|
|
26771
26939
|
}) => {
|
|
26772
26940
|
const [sessionId] = useState(() => crypto.randomUUID());
|
|
26773
26941
|
const cardImpressionStartTimesRef = useRef({});
|
|
26774
|
-
const [lastConsentState, setLastConsentState] = useState(
|
|
26942
|
+
const [lastConsentState, setLastConsentState] = useState(collectEvents);
|
|
26775
26943
|
const eventBufferRef = useRef([]);
|
|
26776
26944
|
const flushEventBuffer = useCallback(() => {
|
|
26777
26945
|
const eventBufferCopy = [...eventBufferRef.current];
|
|
@@ -26892,81 +27060,6 @@ const interactiveFeed = "_interactiveFeed_1wsuw_1";
|
|
|
26892
27060
|
const styles$2 = {
|
|
26893
27061
|
interactiveFeed
|
|
26894
27062
|
};
|
|
26895
|
-
const UIContext = createContext(void 0);
|
|
26896
|
-
const UIProvider = ({ children }) => {
|
|
26897
|
-
var _a, _b, _c, _d;
|
|
26898
|
-
const { finder } = useData();
|
|
26899
|
-
const [buttonsVisible, setButtonsVisible] = useState(false);
|
|
26900
|
-
const [summaryVisible, setSummaryVisible] = useState(false);
|
|
26901
|
-
const [ctaTooltipVisible, setCtaTooltipVisible] = useState(false);
|
|
26902
|
-
const [selectedCategories, setSelectedCategories] = useState([]);
|
|
26903
|
-
const [logoVisible, setLogoVisible] = useState(true);
|
|
26904
|
-
const [tutorialVisible, setTutorialVisible] = useState(false);
|
|
26905
|
-
useEffect(() => {
|
|
26906
|
-
var _a2;
|
|
26907
|
-
console.log("finder?.navigation?.tutorial", finder == null ? void 0 : finder.tutorial);
|
|
26908
|
-
setTutorialVisible(((_a2 = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _a2.enabled) ?? false);
|
|
26909
|
-
}, [
|
|
26910
|
-
(_a = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _a.enabled,
|
|
26911
|
-
(_b = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _b.size,
|
|
26912
|
-
(_c = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _c.color,
|
|
26913
|
-
(_d = finder == null ? void 0 : finder.tutorial) == null ? void 0 : _d.opacity
|
|
26914
|
-
]);
|
|
26915
|
-
console.log("tutorialVisible3", tutorialVisible);
|
|
26916
|
-
const showButtons = useCallback(() => {
|
|
26917
|
-
setButtonsVisible(true);
|
|
26918
|
-
}, []);
|
|
26919
|
-
const hideButtons = useCallback(() => {
|
|
26920
|
-
setButtonsVisible(false);
|
|
26921
|
-
}, []);
|
|
26922
|
-
const showSummary = useCallback(() => {
|
|
26923
|
-
setSummaryVisible(true);
|
|
26924
|
-
}, []);
|
|
26925
|
-
const hideSummary = useCallback(() => {
|
|
26926
|
-
setSummaryVisible(false);
|
|
26927
|
-
}, []);
|
|
26928
|
-
const showCtaTooltip = useCallback(() => {
|
|
26929
|
-
setCtaTooltipVisible(true);
|
|
26930
|
-
}, []);
|
|
26931
|
-
const hideCtaTooltip = useCallback(() => {
|
|
26932
|
-
setCtaTooltipVisible(false);
|
|
26933
|
-
}, []);
|
|
26934
|
-
const toggleLogo = useCallback((visible) => {
|
|
26935
|
-
setLogoVisible(visible);
|
|
26936
|
-
}, []);
|
|
26937
|
-
const showTutorial = useCallback(() => {
|
|
26938
|
-
setTutorialVisible(true);
|
|
26939
|
-
}, []);
|
|
26940
|
-
const hideTutorial = useCallback(() => {
|
|
26941
|
-
setTutorialVisible(false);
|
|
26942
|
-
}, []);
|
|
26943
|
-
const value = {
|
|
26944
|
-
buttonsVisible,
|
|
26945
|
-
summaryVisible,
|
|
26946
|
-
ctaTooltipVisible,
|
|
26947
|
-
selectedCategories,
|
|
26948
|
-
logoVisible,
|
|
26949
|
-
tutorialVisible,
|
|
26950
|
-
showButtons,
|
|
26951
|
-
hideButtons,
|
|
26952
|
-
showSummary,
|
|
26953
|
-
hideSummary,
|
|
26954
|
-
showCtaTooltip,
|
|
26955
|
-
hideCtaTooltip,
|
|
26956
|
-
setSelectedCategories,
|
|
26957
|
-
toggleLogo,
|
|
26958
|
-
showTutorial,
|
|
26959
|
-
hideTutorial
|
|
26960
|
-
};
|
|
26961
|
-
return /* @__PURE__ */ jsx(UIContext.Provider, { value, children });
|
|
26962
|
-
};
|
|
26963
|
-
const useUI = () => {
|
|
26964
|
-
const context = useContext(UIContext);
|
|
26965
|
-
if (context === void 0) {
|
|
26966
|
-
throw new Error("useUI must be used within a UIProvider");
|
|
26967
|
-
}
|
|
26968
|
-
return context;
|
|
26969
|
-
};
|
|
26970
27063
|
const InteractiveFeed = ({
|
|
26971
27064
|
cards: initialCards,
|
|
26972
27065
|
categories: categories2 = [],
|
|
@@ -27011,7 +27104,8 @@ const InteractiveFeed = ({
|
|
|
27011
27104
|
sendImpressionEvent,
|
|
27012
27105
|
startCardImpression
|
|
27013
27106
|
} = useMonitoring();
|
|
27014
|
-
const { tutorialVisible, hideTutorial } = useUI();
|
|
27107
|
+
const { tutorialVisible, hideTutorial, isFiltersDrawerOpen, openFiltersDrawer, closeFiltersDrawer } = useUI();
|
|
27108
|
+
const { loadCardsByCategories, hasPresetCategories } = useData();
|
|
27015
27109
|
useEffect(() => {
|
|
27016
27110
|
if ((logoUIConfig == null ? void 0 : logoUIConfig.url) && logoUIConfig.autoHideTimeout > 0) {
|
|
27017
27111
|
showLogo(logoUIConfig.autoHideTimeout);
|
|
@@ -27021,13 +27115,13 @@ const InteractiveFeed = ({
|
|
|
27021
27115
|
setCards(initialCards);
|
|
27022
27116
|
}, [initialCards, setCards]);
|
|
27023
27117
|
const [isHistoryDrawerOpen, setIsHistoryDrawerOpen] = useState(false);
|
|
27024
|
-
const
|
|
27025
|
-
const handleFilterChange = useCallback((selectedCategoryIds) => {
|
|
27118
|
+
const handleFilterChange = useCallback(async (selectedCategoryIds) => {
|
|
27026
27119
|
setSelectedCategories(selectedCategoryIds);
|
|
27120
|
+
await loadCardsByCategories(selectedCategoryIds);
|
|
27027
27121
|
if (onFilterChange) {
|
|
27028
27122
|
onFilterChange(selectedCategoryIds);
|
|
27029
27123
|
}
|
|
27030
|
-
}, [setSelectedCategories, onFilterChange]);
|
|
27124
|
+
}, [setSelectedCategories, loadCardsByCategories, onFilterChange]);
|
|
27031
27125
|
const shouldShowHistoryButton = useMemo(() => {
|
|
27032
27126
|
return currentCardIndex > 0;
|
|
27033
27127
|
}, [currentCardIndex]);
|
|
@@ -27044,11 +27138,11 @@ const InteractiveFeed = ({
|
|
|
27044
27138
|
setIsHistoryDrawerOpen(false);
|
|
27045
27139
|
}, []);
|
|
27046
27140
|
const handleOpenFilters = useCallback(() => {
|
|
27047
|
-
|
|
27048
|
-
}, []);
|
|
27141
|
+
openFiltersDrawer();
|
|
27142
|
+
}, [openFiltersDrawer]);
|
|
27049
27143
|
const handleCloseFiltersDrawer = useCallback(() => {
|
|
27050
|
-
|
|
27051
|
-
}, []);
|
|
27144
|
+
closeFiltersDrawer();
|
|
27145
|
+
}, [closeFiltersDrawer]);
|
|
27052
27146
|
return /* @__PURE__ */ jsxs("div", { className: styles$2.interactiveFeed, children: [
|
|
27053
27147
|
/* @__PURE__ */ jsx(
|
|
27054
27148
|
SwipeableFeed,
|
|
@@ -27101,7 +27195,7 @@ const InteractiveFeed = ({
|
|
|
27101
27195
|
)
|
|
27102
27196
|
}
|
|
27103
27197
|
),
|
|
27104
|
-
filtersUIConfig.enabled && /* @__PURE__ */ jsx(
|
|
27198
|
+
filtersUIConfig.enabled && !hasPresetCategories && /* @__PURE__ */ jsx(
|
|
27105
27199
|
Positioned,
|
|
27106
27200
|
{
|
|
27107
27201
|
x: `${filtersUIConfig.buttonLeftPosition}%`,
|
|
@@ -27117,7 +27211,7 @@ const InteractiveFeed = ({
|
|
|
27117
27211
|
)
|
|
27118
27212
|
}
|
|
27119
27213
|
),
|
|
27120
|
-
|
|
27214
|
+
!hasPresetCategories && /* @__PURE__ */ jsx(
|
|
27121
27215
|
FiltersDrawer,
|
|
27122
27216
|
{
|
|
27123
27217
|
isOpen: isFiltersDrawerOpen,
|
|
@@ -27250,16 +27344,13 @@ const SwippingJourney = ({
|
|
|
27250
27344
|
};
|
|
27251
27345
|
class MonitorService {
|
|
27252
27346
|
/**
|
|
27253
|
-
* Get monitor URL from window
|
|
27347
|
+
* Get monitor URL from window or environment variable
|
|
27254
27348
|
*/
|
|
27255
27349
|
getMonitorUrl() {
|
|
27256
|
-
if (typeof window
|
|
27257
|
-
|
|
27350
|
+
if (typeof window !== "undefined" && window.SWIPEFINDER_CAMPAIGN_MONITOR_URL) {
|
|
27351
|
+
return window.SWIPEFINDER_CAMPAIGN_MONITOR_URL;
|
|
27258
27352
|
}
|
|
27259
|
-
|
|
27260
|
-
throw new Error("SWIPEFINDER_CAMPAIGN_MONITOR_URL is not set");
|
|
27261
|
-
}
|
|
27262
|
-
return window.SWIPEFINDER_CAMPAIGN_MONITOR_URL;
|
|
27353
|
+
throw new Error("SWIPEFINDER_CAMPAIGN_MONITOR_URL is not set.");
|
|
27263
27354
|
}
|
|
27264
27355
|
/**
|
|
27265
27356
|
* Send monitoring event to API
|
|
@@ -27273,9 +27364,9 @@ class MonitorService {
|
|
|
27273
27364
|
"Content-Type": "application/json"
|
|
27274
27365
|
},
|
|
27275
27366
|
body: JSON.stringify({
|
|
27367
|
+
session_id: params.sessionId,
|
|
27276
27368
|
finder_id: params.finderId,
|
|
27277
27369
|
event_type: params.event,
|
|
27278
|
-
session_id: params.sessionId,
|
|
27279
27370
|
card_id: params.cardId,
|
|
27280
27371
|
card_view_duration: params.cardViewDuration,
|
|
27281
27372
|
swipe_direction: params.direction
|
|
@@ -27356,7 +27447,9 @@ const AppProviders = ({
|
|
|
27356
27447
|
monitorService,
|
|
27357
27448
|
dataService,
|
|
27358
27449
|
backendUrl,
|
|
27359
|
-
finderId
|
|
27450
|
+
finderId,
|
|
27451
|
+
presetCategoryIds,
|
|
27452
|
+
collectEvents
|
|
27360
27453
|
}) => {
|
|
27361
27454
|
return /* @__PURE__ */ jsx(
|
|
27362
27455
|
DataProvider,
|
|
@@ -27364,11 +27457,13 @@ const AppProviders = ({
|
|
|
27364
27457
|
dataService,
|
|
27365
27458
|
finderId,
|
|
27366
27459
|
backendUrl,
|
|
27460
|
+
presetCategoryIds,
|
|
27367
27461
|
children: /* @__PURE__ */ jsx(AppStateProvider, { children: /* @__PURE__ */ jsx(UIProvider, { children: /* @__PURE__ */ jsx(
|
|
27368
27462
|
MonitoringProvider,
|
|
27369
27463
|
{
|
|
27370
27464
|
monitorService,
|
|
27371
27465
|
finderId,
|
|
27466
|
+
collectEvents,
|
|
27372
27467
|
children
|
|
27373
27468
|
}
|
|
27374
27469
|
) }) })
|
|
@@ -27380,7 +27475,9 @@ const MainBootstrap = ({
|
|
|
27380
27475
|
dataService,
|
|
27381
27476
|
backendUrl,
|
|
27382
27477
|
finderId,
|
|
27383
|
-
|
|
27478
|
+
categories: categories2,
|
|
27479
|
+
className = "",
|
|
27480
|
+
collectEvents = true
|
|
27384
27481
|
}) => {
|
|
27385
27482
|
return /* @__PURE__ */ jsx("div", { className: classNames(styles.mainBootstrap, className), children: /* @__PURE__ */ jsx(
|
|
27386
27483
|
AppProviders,
|
|
@@ -27389,15 +27486,38 @@ const MainBootstrap = ({
|
|
|
27389
27486
|
dataService,
|
|
27390
27487
|
backendUrl,
|
|
27391
27488
|
finderId,
|
|
27489
|
+
presetCategoryIds: categories2,
|
|
27490
|
+
collectEvents,
|
|
27392
27491
|
children: /* @__PURE__ */ jsx(SwippingJourney, {})
|
|
27393
27492
|
}
|
|
27394
27493
|
) });
|
|
27395
27494
|
};
|
|
27396
27495
|
class DataService {
|
|
27496
|
+
/**
|
|
27497
|
+
* Map raw API card items to Card types
|
|
27498
|
+
*/
|
|
27499
|
+
mapCards(items) {
|
|
27500
|
+
return items.map((card2) => {
|
|
27501
|
+
if (card2.type === "image") {
|
|
27502
|
+
const { image: image2, ...rest } = card2;
|
|
27503
|
+
return {
|
|
27504
|
+
...rest,
|
|
27505
|
+
imageUrl: image2 || card2.imageUrl || ""
|
|
27506
|
+
};
|
|
27507
|
+
} else if (card2.type === "video") {
|
|
27508
|
+
const { video, ...rest } = card2;
|
|
27509
|
+
return {
|
|
27510
|
+
...rest,
|
|
27511
|
+
videoUrl: video || card2.videoUrl || ""
|
|
27512
|
+
};
|
|
27513
|
+
}
|
|
27514
|
+
return card2;
|
|
27515
|
+
});
|
|
27516
|
+
}
|
|
27397
27517
|
/**
|
|
27398
27518
|
* Load finder from API
|
|
27399
27519
|
*/
|
|
27400
|
-
async loadFinderFromApi(finderId, backendUrl) {
|
|
27520
|
+
async loadFinderFromApi(finderId, backendUrl, categoryIds) {
|
|
27401
27521
|
try {
|
|
27402
27522
|
const apiUrl = `${backendUrl}/api/finders/${finderId}/queue`;
|
|
27403
27523
|
const response = await fetch(apiUrl, {
|
|
@@ -27405,31 +27525,15 @@ class DataService {
|
|
|
27405
27525
|
headers: {
|
|
27406
27526
|
"Content-Type": "application/json"
|
|
27407
27527
|
},
|
|
27408
|
-
body: JSON.stringify({ categories: [], exclude: [] })
|
|
27528
|
+
body: JSON.stringify({ categories: categoryIds && categoryIds.length > 0 ? categoryIds : [], exclude: [] })
|
|
27409
27529
|
});
|
|
27410
27530
|
if (!response.ok) {
|
|
27411
27531
|
throw new Error(`API returned status: ${response.status}`);
|
|
27412
27532
|
}
|
|
27413
27533
|
const apiData = await response.json();
|
|
27414
|
-
const mappedCards = apiData.cards.items.map((card2) => {
|
|
27415
|
-
if (card2.type === "image") {
|
|
27416
|
-
const { image: image2, ...rest } = card2;
|
|
27417
|
-
return {
|
|
27418
|
-
...rest,
|
|
27419
|
-
imageUrl: image2 || card2.imageUrl || ""
|
|
27420
|
-
};
|
|
27421
|
-
} else if (card2.type === "video") {
|
|
27422
|
-
const { video, ...rest } = card2;
|
|
27423
|
-
return {
|
|
27424
|
-
...rest,
|
|
27425
|
-
videoUrl: video || card2.videoUrl || ""
|
|
27426
|
-
};
|
|
27427
|
-
}
|
|
27428
|
-
return card2;
|
|
27429
|
-
});
|
|
27430
27534
|
return {
|
|
27431
27535
|
finder: apiData.finder,
|
|
27432
|
-
cards:
|
|
27536
|
+
cards: this.mapCards(apiData.cards.items),
|
|
27433
27537
|
categories: apiData.categories
|
|
27434
27538
|
};
|
|
27435
27539
|
} catch (error) {
|
|
@@ -27441,6 +27545,27 @@ class DataService {
|
|
|
27441
27545
|
};
|
|
27442
27546
|
}
|
|
27443
27547
|
}
|
|
27548
|
+
/**
|
|
27549
|
+
* Load cards filtered by categories from API
|
|
27550
|
+
*/
|
|
27551
|
+
async loadCardsByCategories(finderId, backendUrl, categoryIds) {
|
|
27552
|
+
const apiUrl = `${backendUrl}/api/finders/${finderId}/queue`;
|
|
27553
|
+
const response = await fetch(apiUrl, {
|
|
27554
|
+
method: "POST",
|
|
27555
|
+
headers: {
|
|
27556
|
+
"Content-Type": "application/json"
|
|
27557
|
+
},
|
|
27558
|
+
body: JSON.stringify({ categories: categoryIds, exclude: [] })
|
|
27559
|
+
});
|
|
27560
|
+
if (!response.ok) {
|
|
27561
|
+
throw new Error(`API returned status: ${response.status}`);
|
|
27562
|
+
}
|
|
27563
|
+
const apiData = await response.json();
|
|
27564
|
+
return {
|
|
27565
|
+
cards: this.mapCards(apiData.cards.items),
|
|
27566
|
+
categories: apiData.categories
|
|
27567
|
+
};
|
|
27568
|
+
}
|
|
27444
27569
|
}
|
|
27445
27570
|
function initSwipeFinder(options) {
|
|
27446
27571
|
const { backendUrl, finderId, element, ...config } = options;
|