gitextract_zxt6lxx8/ ├── .browserslistrc ├── .editorconfig ├── .eslintrc.js ├── .github/ │ ├── CODEOWNERS │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── add-label.yaml │ ├── cd.yaml │ ├── ci.yaml │ ├── pr-closed.yaml │ ├── tag-with-comment.yaml │ └── update-changelog.yaml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .storybook/ │ ├── decorators.tsx │ ├── main.ts │ ├── preview.ts │ └── public/ │ └── mockServiceWorker.js ├── .stylelintrc.json ├── .swcrc ├── .vscode/ │ └── settings.json ├── CHANGELOG-archive-201911.md ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MIGRATION.md ├── README.md ├── chromatic.config.json ├── codecov.yml ├── examples/ │ ├── nextjs-app/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ └── template.tsx │ │ ├── lib/ │ │ │ ├── registry.tsx │ │ │ └── theme.tsx │ │ ├── next.config.mjs │ │ ├── package.json │ │ └── tsconfig.json │ └── nextjs-pages/ │ ├── .gitignore │ ├── README.md │ ├── next.config.mjs │ ├── package.json │ ├── pages/ │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ └── index.tsx │ └── tsconfig.json ├── global.d.ts ├── jest-setup.js ├── jest.config.js ├── lerna.json ├── package.json ├── packages/ │ ├── ab-experiments/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── google-optimize-context/ │ │ │ │ ├── README.md │ │ │ │ ├── context.tsx │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── triple-ab-experiment-context/ │ │ │ ├── README.md │ │ │ ├── context.tsx │ │ │ ├── index.ts │ │ │ └── service.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── constants/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── regex.test.ts │ │ │ └── regex.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── fetcher/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── add-fetchers-to-gssp.test.ts │ │ │ ├── add-fetchers-to-gssp.ts │ │ │ ├── auth-guarded-methods.ts │ │ │ ├── factories.test.ts │ │ │ ├── factories.ts │ │ │ ├── fetcher.ts │ │ │ ├── index.ts │ │ │ ├── make-request-params.test.ts │ │ │ ├── make-request-params.ts │ │ │ ├── methods.ts │ │ │ ├── response-handler.ts │ │ │ ├── safe-parse-json.test.ts │ │ │ ├── safe-parse-json.ts │ │ │ ├── server-fetch.ts │ │ │ ├── session-refresh.ts │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── i18n/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── interpolate.ts │ │ │ ├── locales/ │ │ │ │ ├── en.ts │ │ │ │ ├── index.ts │ │ │ │ ├── ja.ts │ │ │ │ ├── ko.ts │ │ │ │ └── zh-TW.ts │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── intersection-observer/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── lazy-loaded-intersection-observer.tsx │ │ │ ├── static-intersection-observer.tsx │ │ │ └── use-intersection.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── meta-tags/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app-router/ │ │ │ │ ├── generate-apple-smart-banner-meta.ts │ │ │ │ ├── generate-common-meta.ts │ │ │ │ ├── generate-essential-content-meta.ts │ │ │ │ ├── generate-facebook-app-link-meta.ts │ │ │ │ ├── generate-facebook-open-graph-meta.ts │ │ │ │ ├── generate-triple-default-meta.ts │ │ │ │ └── index.ts │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── pages-router/ │ │ │ │ ├── apple-smart-banner-meta.tsx │ │ │ │ ├── common-meta.tsx │ │ │ │ ├── essential-content-meta.test.tsx │ │ │ │ ├── essential-content-meta.tsx │ │ │ │ ├── facebook-app-link-meta.tsx │ │ │ │ ├── facebook-open-graph-meta.tsx │ │ │ │ ├── index.ts │ │ │ │ └── theme-color-meta.tsx │ │ │ ├── structured-data/ │ │ │ │ ├── article-script.tsx │ │ │ │ ├── breadcrumb-list-script.tsx │ │ │ │ ├── discussion-forum-posting-script.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── local-business-script.tsx │ │ │ │ ├── product-script.tsx │ │ │ │ ├── qa-page-script.tsx │ │ │ │ └── review-script.tsx │ │ │ ├── types/ │ │ │ │ ├── index.ts │ │ │ │ ├── schema.ts │ │ │ │ └── structured-data-script-props.ts │ │ │ └── utils.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── middlewares/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── chain.ts │ │ │ ├── index.ts │ │ │ ├── refresh-session/ │ │ │ │ ├── index.ts │ │ │ │ ├── next-13.ts │ │ │ │ └── next-14.ts │ │ │ ├── set-web-device-id.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── apply-set-cookie.ts │ │ │ ├── get-domain.ts │ │ │ └── get-triple-app.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── react-hooks/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── hooks.stories.tsx │ │ │ ├── index.ts │ │ │ ├── mocks/ │ │ │ │ └── lottie.sample.json │ │ │ ├── use-body-scroll-lock.ts │ │ │ ├── use-debounce.test.ts │ │ │ ├── use-debounce.ts │ │ │ ├── use-error-handler.ts │ │ │ ├── use-fetch.ts │ │ │ ├── use-interval.test.ts │ │ │ ├── use-interval.ts │ │ │ ├── use-local-storage.test.ts │ │ │ ├── use-local-storage.ts │ │ │ ├── use-lottie.tsx │ │ │ ├── use-scroll-to-anchor.ts │ │ │ ├── use-scroll-to-element.ts │ │ │ ├── use-session-storage.test.ts │ │ │ ├── use-session-storage.ts │ │ │ └── use-visibility-change.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── router/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── common/ │ │ │ │ ├── add-web-url-base.test.tsx │ │ │ │ ├── add-web-url-base.ts │ │ │ │ ├── default-router.ts │ │ │ │ ├── disabled-link-notifier.test.tsx │ │ │ │ ├── disabled-link-notifier.ts │ │ │ │ ├── router-guarded-link.test.tsx │ │ │ │ ├── router-guarded-link.tsx │ │ │ │ ├── target.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-rel.test.ts │ │ │ │ └── use-rel.ts │ │ │ ├── external/ │ │ │ │ ├── hook.ts │ │ │ │ ├── href-handler.ts │ │ │ │ ├── index.ts │ │ │ │ ├── link.tsx │ │ │ │ └── utils.ts │ │ │ ├── href-to-props/ │ │ │ │ ├── index.ts │ │ │ │ ├── use-href-to-props.test.tsx │ │ │ │ └── use-href-to-props.ts │ │ │ ├── index.ts │ │ │ ├── links/ │ │ │ │ ├── index.ts │ │ │ │ ├── use-make-inlink.ts │ │ │ │ ├── use-make-outlink.ts │ │ │ │ ├── use-open-inlink.test.ts │ │ │ │ ├── use-open-inlink.ts │ │ │ │ ├── use-open-native-link.test.tsx │ │ │ │ ├── use-open-native-link.ts │ │ │ │ ├── use-open-outlink.test.ts │ │ │ │ └── use-open-outlink.ts │ │ │ ├── local/ │ │ │ │ ├── base-path.test.ts │ │ │ │ ├── base-path.ts │ │ │ │ ├── hook.ts │ │ │ │ ├── href-handler.ts │ │ │ │ ├── index.ts │ │ │ │ └── link.tsx │ │ │ └── navigate/ │ │ │ ├── canonization.spec.ts │ │ │ ├── canonization.ts │ │ │ ├── index.ts │ │ │ ├── use-isomorphic-navigate.ts │ │ │ ├── use-navigate.test.tsx │ │ │ └── use-navigate.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── scroll-to-element/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── scroll-position-calculators.test.ts │ │ │ ├── scroll-position-calculators.ts │ │ │ ├── scroll-to-element.ts │ │ │ ├── scroll.ts │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── standard-action-handler/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── converse.tsx │ │ │ ├── copy-to-clipboard.ts │ │ │ ├── fetch-api.ts │ │ │ ├── handler.ts │ │ │ ├── hook.ts │ │ │ ├── image-download.ts │ │ │ ├── index.ts │ │ │ ├── initialize.ts │ │ │ ├── invoke-cta.ts │ │ │ ├── new-window.test.ts │ │ │ ├── new-window.ts │ │ │ ├── require-triple-client.tsx │ │ │ ├── scroll-to-element.ts │ │ │ ├── serial.ts │ │ │ ├── services/ │ │ │ │ ├── copy.ts │ │ │ │ └── share.ts │ │ │ ├── share.ts │ │ │ ├── show-toast.ts │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── tds-theme/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── foundations/ │ │ │ │ └── colors.ts │ │ │ ├── global-style.ts │ │ │ ├── index.ts │ │ │ ├── styled.ts │ │ │ └── theme/ │ │ │ ├── default.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── tds-ui/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── commons.ts │ │ │ ├── components/ │ │ │ │ ├── accordion/ │ │ │ │ │ ├── accordion-content.tsx │ │ │ │ │ ├── accordion-context.tsx │ │ │ │ │ ├── accordion-folded.tsx │ │ │ │ │ ├── accordion-title.tsx │ │ │ │ │ ├── accordion.stories.tsx │ │ │ │ │ ├── accordion.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── action-sheet/ │ │ │ │ │ ├── action-sheet-body.tsx │ │ │ │ │ ├── action-sheet-context.tsx │ │ │ │ │ ├── action-sheet-item.tsx │ │ │ │ │ ├── action-sheet-overlay.tsx │ │ │ │ │ ├── action-sheet-title.tsx │ │ │ │ │ ├── action-sheet.stories.tsx │ │ │ │ │ ├── action-sheet.test.tsx │ │ │ │ │ ├── action-sheet.tsx │ │ │ │ │ ├── constants.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── action-sheet-select/ │ │ │ │ │ ├── action-sheet-select-button.tsx │ │ │ │ │ ├── action-sheet-select-context.tsx │ │ │ │ │ ├── action-sheet-select-option.tsx │ │ │ │ │ ├── action-sheet-select-options.tsx │ │ │ │ │ ├── action-sheet-select.stories.tsx │ │ │ │ │ ├── action-sheet-select.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── alert/ │ │ │ │ │ ├── alert.stories.tsx │ │ │ │ │ ├── alert.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── button/ │ │ │ │ │ ├── basic-button.tsx │ │ │ │ │ ├── button-base.test.tsx │ │ │ │ │ ├── button-base.tsx │ │ │ │ │ ├── button-container.ts │ │ │ │ │ ├── button-group.ts │ │ │ │ │ ├── button-icon.tsx │ │ │ │ │ ├── button.stories.tsx │ │ │ │ │ ├── button.tsx │ │ │ │ │ ├── icon-button.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── normal-button.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── carousel/ │ │ │ │ │ ├── carousel-item.tsx │ │ │ │ │ ├── carousel.stories.tsx │ │ │ │ │ ├── carousel.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── mocks/ │ │ │ │ │ └── carousel.sample.json │ │ │ │ ├── checkbox/ │ │ │ │ │ ├── checkbox-base.tsx │ │ │ │ │ ├── checkbox.stories.tsx │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── checkbox-group/ │ │ │ │ │ ├── checkbox-group-context.tsx │ │ │ │ │ ├── checkbox-group-error.tsx │ │ │ │ │ ├── checkbox-group-help.tsx │ │ │ │ │ ├── checkbox-group-label.tsx │ │ │ │ │ ├── checkbox-group.stories.tsx │ │ │ │ │ ├── checkbox-group.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-checkbox-group.tsx │ │ │ │ ├── confirm/ │ │ │ │ │ ├── confirm.stories.tsx │ │ │ │ │ ├── confirm.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── confirm-selector/ │ │ │ │ │ ├── confirm-selector-base.tsx │ │ │ │ │ ├── confirm-selector.stories.tsx │ │ │ │ │ ├── confirm-selector.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── container/ │ │ │ │ │ ├── container.stories.tsx │ │ │ │ │ ├── container.test.tsx │ │ │ │ │ ├── container.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── content-elements/ │ │ │ │ │ ├── content-elements.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── drawer/ │ │ │ │ │ ├── drawer.stories.tsx │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── drawer-button/ │ │ │ │ │ ├── drawer-button.stories.tsx │ │ │ │ │ ├── drawer-button.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── fieldset/ │ │ │ │ │ ├── fieldset-context.tsx │ │ │ │ │ ├── fieldset-legend.tsx │ │ │ │ │ ├── fieldset.stories.tsx │ │ │ │ │ ├── fieldset.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-fieldset.tsx │ │ │ │ ├── flex-box/ │ │ │ │ │ ├── flex-box.stories.tsx │ │ │ │ │ ├── flex-box.test.tsx │ │ │ │ │ ├── flex-box.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── form-field/ │ │ │ │ │ ├── form-field-context.tsx │ │ │ │ │ ├── form-field-error.tsx │ │ │ │ │ ├── form-field-help.tsx │ │ │ │ │ ├── form-field-label.tsx │ │ │ │ │ ├── form-field.stories.tsx │ │ │ │ │ ├── form-field.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-form-field-state.ts │ │ │ │ ├── gender-selector/ │ │ │ │ │ ├── gender-selector-item.tsx │ │ │ │ │ ├── gender-selector.stories.tsx │ │ │ │ │ ├── gender-selector.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── hr/ │ │ │ │ │ ├── hr.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── icon/ │ │ │ │ │ ├── icon.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── image/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── circular.ts │ │ │ │ │ ├── context.tsx │ │ │ │ │ ├── fixed-dimensions-frame.tsx │ │ │ │ │ ├── fixed-ratio-frame.tsx │ │ │ │ │ ├── image.stories.tsx │ │ │ │ │ ├── image.tsx │ │ │ │ │ ├── img.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── link-indicator.tsx │ │ │ │ │ ├── optimized-img.tsx │ │ │ │ │ ├── overlay.tsx │ │ │ │ │ ├── placeholder.tsx │ │ │ │ │ └── source-url.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── input/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input.stories.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── label/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── label.stories.tsx │ │ │ │ │ └── label.tsx │ │ │ │ ├── list/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list.stories.tsx │ │ │ │ │ ├── list.test.tsx │ │ │ │ │ └── list.tsx │ │ │ │ ├── long-clickable/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── long-clickable.stories.tsx │ │ │ │ │ └── long-clickable.tsx │ │ │ │ ├── modal/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── modal-action.tsx │ │ │ │ │ ├── modal-actions.tsx │ │ │ │ │ ├── modal-body.tsx │ │ │ │ │ ├── modal-context.tsx │ │ │ │ │ ├── modal-description.tsx │ │ │ │ │ ├── modal-title.tsx │ │ │ │ │ ├── modal.stories.tsx │ │ │ │ │ ├── modal.test.tsx │ │ │ │ │ └── modal.tsx │ │ │ │ ├── navbar/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── navbar.stories.tsx │ │ │ │ │ ├── navbar.tsx │ │ │ │ │ ├── search-navbar.stories.tsx │ │ │ │ │ └── search-navbar.tsx │ │ │ │ ├── numeric-spinner/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── numeric-spinner-base.tsx │ │ │ │ │ ├── numeric-spinner.stories.tsx │ │ │ │ │ └── numeric-spinner.tsx │ │ │ │ ├── popup/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── popup.stories.tsx │ │ │ │ │ ├── popup.test.tsx │ │ │ │ │ └── popup.tsx │ │ │ │ ├── radio/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── radio-base.tsx │ │ │ │ │ ├── radio.stories.tsx │ │ │ │ │ └── radio.tsx │ │ │ │ ├── radio-group/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── radio-group-context.tsx │ │ │ │ │ ├── radio-group-error.tsx │ │ │ │ │ ├── radio-group-help.tsx │ │ │ │ │ ├── radio-group-label.tsx │ │ │ │ │ ├── radio-group.stories.tsx │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ └── use-radio-group.tsx │ │ │ │ ├── rating/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rating.stories.tsx │ │ │ │ │ └── rating.tsx │ │ │ │ ├── responsive/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── responsive.test.tsx │ │ │ │ │ └── responsive.tsx │ │ │ │ ├── section/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── section.stories.tsx │ │ │ │ │ ├── section.test.tsx │ │ │ │ │ └── section.tsx │ │ │ │ ├── segment/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── segment.stories.tsx │ │ │ │ │ └── segment.tsx │ │ │ │ ├── select/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── select.stories.tsx │ │ │ │ │ └── select.tsx │ │ │ │ ├── skeleton/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── skeleton.stories.tsx │ │ │ │ │ └── skeleton.tsx │ │ │ │ ├── slider/ │ │ │ │ │ ├── handle.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── range-slider.stories.tsx │ │ │ │ │ ├── range-slider.tsx │ │ │ │ │ ├── single-slider.stories.tsx │ │ │ │ │ ├── single-slider.tsx │ │ │ │ │ ├── slider-base.tsx │ │ │ │ │ ├── track.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── spinner/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rolling-spinner.stories.tsx │ │ │ │ │ ├── rolling-spinner.tsx │ │ │ │ │ ├── spinner.stories.tsx │ │ │ │ │ └── spinner.tsx │ │ │ │ ├── stack/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── stack.stories.tsx │ │ │ │ │ ├── stack.test.tsx │ │ │ │ │ └── stack.tsx │ │ │ │ ├── sticky-header/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── sticky-header.stories.tsx │ │ │ │ │ ├── sticky-header.test.tsx │ │ │ │ │ └── sticky-header.tsx │ │ │ │ ├── table/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── table.stories.tsx │ │ │ │ │ └── table.tsx │ │ │ │ ├── tabs/ │ │ │ │ │ ├── basic-tab-list.tsx │ │ │ │ │ ├── basic-tab.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── pointing-tab-context.tsx │ │ │ │ │ ├── pointing-tab-list.tsx │ │ │ │ │ ├── pointing-tab.tsx │ │ │ │ │ ├── rounded-tab-list.tsx │ │ │ │ │ ├── rounded-tab.tsx │ │ │ │ │ ├── tab-base.tsx │ │ │ │ │ ├── tab-list-base.tsx │ │ │ │ │ ├── tab-list.tsx │ │ │ │ │ ├── tab-panel.tsx │ │ │ │ │ ├── tab.tsx │ │ │ │ │ ├── tabs-context.tsx │ │ │ │ │ ├── tabs.stories.tsx │ │ │ │ │ ├── tabs.test.tsx │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── tag/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tag.stories.tsx │ │ │ │ │ └── tag.tsx │ │ │ │ ├── text/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── text.stories.tsx │ │ │ │ │ ├── text.test.tsx │ │ │ │ │ ├── text.tsx │ │ │ │ │ └── typography.tsx │ │ │ │ ├── textarea/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── textarea.stories.tsx │ │ │ │ │ └── textarea.tsx │ │ │ │ ├── tooltip/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tooltip.stories.tsx │ │ │ │ │ └── tooltip.tsx │ │ │ │ ├── video/ │ │ │ │ │ ├── context.tsx │ │ │ │ │ ├── controls.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mute-unmute-button.tsx │ │ │ │ │ ├── play-pause-button.tsx │ │ │ │ │ ├── seeker.tsx │ │ │ │ │ ├── sources.tsx │ │ │ │ │ ├── use-video-control.ts │ │ │ │ │ ├── use-video-ref.ts │ │ │ │ │ ├── utils.tsx │ │ │ │ │ ├── video-element.tsx │ │ │ │ │ ├── video-frame.tsx │ │ │ │ │ ├── video.stories.tsx │ │ │ │ │ └── video.tsx │ │ │ │ └── visually-hidden/ │ │ │ │ ├── index.ts │ │ │ │ ├── visually-hidden.test.tsx │ │ │ │ └── visually-hidden.tsx │ │ │ ├── index.ts │ │ │ ├── mixins/ │ │ │ │ ├── border-radius.ts │ │ │ │ ├── box.ts │ │ │ │ ├── centered.ts │ │ │ │ ├── clearing.ts │ │ │ │ ├── ellipsis.ts │ │ │ │ ├── horizontal-scroll.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layering.ts │ │ │ │ ├── margin-padding.ts │ │ │ │ ├── max-lines.ts │ │ │ │ ├── positioning.ts │ │ │ │ ├── safe-area.ts │ │ │ │ └── text-style.ts │ │ │ └── utils/ │ │ │ ├── merge-refs.ts │ │ │ ├── should-forward-prop.ts │ │ │ └── unit.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── tds-widget/ │ │ ├── .eslintignore │ │ ├── .prettierignore │ │ ├── .stylelintignore │ │ ├── package.json │ │ ├── src/ │ │ │ ├── ad-banners/ │ │ │ │ ├── api.ts │ │ │ │ ├── content-details-banner.tsx │ │ │ │ ├── horizontal-entity.tsx │ │ │ │ ├── horizontal-list-view.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── list-section.ts │ │ │ │ ├── list-top-banners.tsx │ │ │ │ ├── typing.ts │ │ │ │ ├── vertical-entity.tsx │ │ │ │ └── vertical-list-view.tsx │ │ │ ├── app-banner/ │ │ │ │ ├── app-banner.stories.tsx │ │ │ │ ├── app-banner.tsx │ │ │ │ └── index.ts │ │ │ ├── app-installation-cta/ │ │ │ │ ├── article-card-cta.tsx │ │ │ │ ├── banner-cta.stories.tsx │ │ │ │ ├── banner-cta.tsx │ │ │ │ ├── chatbot-cta.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── elements.tsx │ │ │ │ ├── floating-button-cta.stories.tsx │ │ │ │ ├── floating-button-cta.tsx │ │ │ │ ├── image-banner.stories.tsx │ │ │ │ ├── image-banner.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── interfaces.ts │ │ │ │ ├── service.ts │ │ │ │ ├── text-banner.stories.tsx │ │ │ │ └── text-banner.tsx │ │ │ ├── author/ │ │ │ │ ├── author-intro.tsx │ │ │ │ ├── author.stories.tsx │ │ │ │ ├── author.tsx │ │ │ │ └── index.ts │ │ │ ├── booking-completion/ │ │ │ │ ├── booking-completion.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── chat/ │ │ │ │ ├── bubble/ │ │ │ │ │ ├── altered.tsx │ │ │ │ │ ├── bubble-ui.tsx │ │ │ │ │ ├── bubble.stories.tsx │ │ │ │ │ ├── bubble.tsx │ │ │ │ │ ├── button.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── full-text-message-view.tsx │ │ │ │ │ ├── image.tsx │ │ │ │ │ ├── images.stories.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── item/ │ │ │ │ │ │ ├── image.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── text.tsx │ │ │ │ │ ├── nol/ │ │ │ │ │ │ ├── bubble-ui.tsx │ │ │ │ │ │ ├── coupon.tsx │ │ │ │ │ │ ├── full-text-view/ │ │ │ │ │ │ │ ├── elements.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── styles.ts │ │ │ │ │ ├── parent/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── parent-message.tsx │ │ │ │ │ │ ├── parent-ui.tsx │ │ │ │ │ │ └── parent.stories.tsx │ │ │ │ │ ├── product.tsx │ │ │ │ │ ├── rich.tsx │ │ │ │ │ ├── text.tsx │ │ │ │ │ └── type.ts │ │ │ │ ├── bubble-container/ │ │ │ │ │ ├── bubble-container.stories.tsx │ │ │ │ │ ├── bubble-container.tsx │ │ │ │ │ ├── bubble-info.tsx │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── icons.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── chat/ │ │ │ │ │ ├── chat-room-messages/ │ │ │ │ │ │ ├── chat-api-service.ts │ │ │ │ │ │ ├── chat-message-context.tsx │ │ │ │ │ │ ├── chat-room-messages-provider.tsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── messages.tsx │ │ │ │ │ │ ├── use-chat-room-messages.ts │ │ │ │ │ │ ├── use-pending-intersections.ts │ │ │ │ │ │ ├── use-scroll.tsx │ │ │ │ │ │ └── use-unread-messages.ts │ │ │ │ │ ├── chat-scroll-container.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── messages-reducer.ts │ │ │ │ │ ├── room-context.tsx │ │ │ │ │ └── scroll-context.tsx │ │ │ │ ├── expired/ │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── expired.stories.tsx │ │ │ │ │ ├── expired.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── icons/ │ │ │ │ │ ├── ExclamationMarkIcon.tsx │ │ │ │ │ ├── arrow-bottom-16-icon.tsx │ │ │ │ │ ├── arrow-right-icon.tsx │ │ │ │ │ ├── arrow-top-icon.tsx │ │ │ │ │ ├── reply-meesage-icon.tsx │ │ │ │ │ ├── reply-message-icon.tsx │ │ │ │ │ ├── select-photo-icon.tsx │ │ │ │ │ ├── send-icon.tsx │ │ │ │ │ ├── talk-icon.tsx │ │ │ │ │ └── text-full-view-arrow-icon.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── input-area/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── input-area-ui/ │ │ │ │ │ │ ├── elements.ts │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── input-area.stories.tsx │ │ │ │ │ ├── nol-input-area-ui/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── use-input-resize-observer.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── hooks.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reducer.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── messages/ │ │ │ │ │ ├── date-divider.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── messages.stories.tsx │ │ │ │ │ ├── type.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── navbar/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── navbar.stories.tsx │ │ │ │ ├── nol-theme-provider/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── converter.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── nol-theme-provider.tsx │ │ │ │ ├── preview/ │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preview.stories.tsx │ │ │ │ │ ├── preview.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── reservation-info/ │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reservation-info.stories.tsx │ │ │ │ │ └── reservation-info.tsx │ │ │ │ ├── scroll-buttons-area/ │ │ │ │ │ ├── elements.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── scroll-buttons.tsx │ │ │ │ ├── types/ │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── image.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ ├── pusher.ts │ │ │ │ │ ├── room.ts │ │ │ │ │ ├── ui.ts │ │ │ │ │ ├── unread.ts │ │ │ │ │ └── user.ts │ │ │ │ └── utils/ │ │ │ │ ├── a-tag-navigator.ts │ │ │ │ ├── image.ts │ │ │ │ ├── index.ts │ │ │ │ ├── profile.ts │ │ │ │ └── user.ts │ │ │ ├── content-sharing/ │ │ │ │ ├── content-sharing.stories.tsx │ │ │ │ ├── content-sharing.tsx │ │ │ │ └── index.ts │ │ │ ├── date-picker/ │ │ │ │ ├── constants.ts │ │ │ │ ├── date-styles.stories.tsx │ │ │ │ ├── day-picker.stories.tsx │ │ │ │ ├── day-picker.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── mixins.ts │ │ │ │ ├── picker-frame.ts │ │ │ │ ├── range-picker-v2/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── picker-frame.ts │ │ │ │ │ └── range-picker.tsx │ │ │ │ ├── range-picker-v2.stories.tsx │ │ │ │ ├── range-picker.stories.tsx │ │ │ │ ├── range-picker.test.tsx │ │ │ │ ├── range-picker.tsx │ │ │ │ ├── service.ts │ │ │ │ ├── use-disabled-days.ts │ │ │ │ ├── use-public-holidays.ts │ │ │ │ └── utils.ts │ │ │ ├── directions-finder/ │ │ │ │ ├── ask-to-the-local.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── direction-buttons.tsx │ │ │ │ ├── directions-finder.stories.tsx │ │ │ │ └── index.ts │ │ │ ├── flicking-carousel/ │ │ │ │ ├── arrow-icon.tsx │ │ │ │ ├── flicking-carousel.stories.tsx │ │ │ │ ├── flicking-carousel.tsx │ │ │ │ ├── index.ts │ │ │ │ └── mocks/ │ │ │ │ └── carousel.sample.json │ │ │ ├── footer/ │ │ │ │ ├── elements/ │ │ │ │ │ ├── awards.tsx │ │ │ │ │ ├── button-area/ │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── dropdown.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── company-info.tsx │ │ │ │ │ ├── divider.tsx │ │ │ │ │ ├── extra-link-group.tsx │ │ │ │ │ └── link-group.tsx │ │ │ │ ├── footers/ │ │ │ │ │ ├── default-footer.tsx │ │ │ │ │ ├── footer.stories.tsx │ │ │ │ │ ├── logo-footer.stories.tsx │ │ │ │ │ └── logo-footer.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ └── footer.json │ │ │ │ └── utils/ │ │ │ │ ├── constants.ts │ │ │ │ ├── type.ts │ │ │ │ └── use-footer-info.tsx │ │ │ ├── hub-form/ │ │ │ │ ├── cell.tsx │ │ │ │ ├── cta.tsx │ │ │ │ ├── hub-form.stories.tsx │ │ │ │ ├── hub-form.tsx │ │ │ │ └── index.ts │ │ │ ├── image-carousel/ │ │ │ │ ├── carousel.tsx │ │ │ │ ├── content.tsx │ │ │ │ ├── image-carousel.stories.tsx │ │ │ │ ├── image-carousel.tsx │ │ │ │ ├── image-content.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── image-carousel.sample.json │ │ │ │ │ └── video-carousel.sample.json │ │ │ │ ├── page-label.tsx │ │ │ │ ├── types.ts │ │ │ │ └── video-content.tsx │ │ │ ├── image-source/ │ │ │ │ ├── image-source.tsx │ │ │ │ └── index.ts │ │ │ ├── image-viewer/ │ │ │ │ ├── detail-viewer/ │ │ │ │ │ ├── image.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── video.tsx │ │ │ │ ├── image-viewer.stories.tsx │ │ │ │ ├── image-viewer.tsx │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── listing-filter/ │ │ │ │ ├── index.ts │ │ │ │ ├── listing-filter-expanding-filter-entry.stories.tsx │ │ │ │ ├── listing-filter-filter-entry.stories.tsx │ │ │ │ ├── listing-filter-primary-filter-entry.stories.tsx │ │ │ │ ├── listing-filter.stories.tsx │ │ │ │ └── listing-filter.tsx │ │ │ ├── location-properties/ │ │ │ │ ├── index.tsx │ │ │ │ ├── location-properties.stories.tsx │ │ │ │ ├── location-properties.tsx │ │ │ │ └── property-item.tsx │ │ │ ├── map/ │ │ │ │ ├── focus-tracker.tsx │ │ │ │ ├── index.test.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── map-view.tsx │ │ │ │ ├── map.stories.tsx │ │ │ │ ├── mock.ts │ │ │ │ ├── mocks/ │ │ │ │ │ └── hotel-recommandations.json │ │ │ │ ├── overlay/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── markers/ │ │ │ │ │ │ ├── flexible-marker.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── poi-dot-marker.tsx │ │ │ │ │ │ └── primary-marker/ │ │ │ │ │ │ ├── bubble-marker.tsx │ │ │ │ │ │ ├── circle-marker/ │ │ │ │ │ │ │ ├── circle-marker-base.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── dot-marker.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── pin-marker/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── pin-marker.tsx │ │ │ │ │ ├── polygon.tsx │ │ │ │ │ └── polyline.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utilities.ts │ │ │ ├── media/ │ │ │ │ ├── index.ts │ │ │ │ └── media.tsx │ │ │ ├── nearby-pois/ │ │ │ │ ├── index.ts │ │ │ │ ├── nearby-pois.stories.tsx │ │ │ │ ├── nearby-pois.tsx │ │ │ │ ├── poi-entry.tsx │ │ │ │ ├── reducer.ts │ │ │ │ ├── service.ts │ │ │ │ └── types.ts │ │ │ ├── poi-detail/ │ │ │ │ ├── actions/ │ │ │ │ │ ├── actions.stories.tsx │ │ │ │ │ ├── actions.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tooltip/ │ │ │ │ │ └── tooltip.tsx │ │ │ │ ├── area-names.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── copy-action-sheet-item.tsx │ │ │ │ ├── copy-action-sheet.tsx │ │ │ │ ├── detail-header/ │ │ │ │ │ ├── business-hours-icons.tsx │ │ │ │ │ ├── business-hours-note.tsx │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── detail-header-v2/ │ │ │ │ │ ├── index.test.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── detail-header-v2.stories.tsx │ │ │ │ ├── detail-header.stories.tsx │ │ │ │ ├── image-carousel/ │ │ │ │ │ ├── carousel-section.tsx │ │ │ │ │ ├── carousel.tsx │ │ │ │ │ ├── cta-overlay.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── note.tsx │ │ │ │ │ └── placeholder.tsx │ │ │ │ ├── image-carousel.stories.tsx │ │ │ │ ├── images-provider.tsx │ │ │ │ ├── images-reducer.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── inventory-item.json │ │ │ │ │ └── recommended-articles.json │ │ │ │ ├── recommended-articles/ │ │ │ │ │ ├── api-client.ts │ │ │ │ │ ├── article-entry.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── more-button.tsx │ │ │ │ │ ├── recommended-articles.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── recommended-articles.stories.tsx │ │ │ │ ├── types.ts │ │ │ │ └── use-fetch-images.tsx │ │ │ ├── poi-list-elements/ │ │ │ │ ├── carousel-element.tsx │ │ │ │ ├── compact-poi-list-element.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── extended-poi-list-element.tsx │ │ │ │ ├── get-type-names.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── hotels.sample.json │ │ │ │ │ └── pois.sample.json │ │ │ │ ├── poi-card-element/ │ │ │ │ │ ├── direction-button.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── poi-card-element.tsx │ │ │ │ ├── poi-card-element.stories.tsx │ │ │ │ ├── poi-carousel-element.stories.tsx │ │ │ │ ├── poi-list-element.stories.tsx │ │ │ │ ├── poi-list-element.tsx │ │ │ │ └── types.ts │ │ │ ├── pricing/ │ │ │ │ ├── fixed-pricing-v2/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── purchase-button-loading-indicator.tsx │ │ │ │ │ └── purchase-button.tsx │ │ │ │ ├── fixed-pricing-v2.stories.tsx │ │ │ │ ├── fixed-pricing.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── pricing.stories.tsx │ │ │ │ └── pricing.tsx │ │ │ ├── public-header/ │ │ │ │ ├── categories.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── extra-action-item.tsx │ │ │ │ ├── extra-action-separator.tsx │ │ │ │ ├── extra-actions-container.tsx │ │ │ │ ├── header-menu-button.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── public-header-deeplink.tsx │ │ │ │ ├── public-header.spec.tsx │ │ │ │ ├── public-header.stories.tsx │ │ │ │ ├── public-header.tsx │ │ │ │ ├── side-menu/ │ │ │ │ │ ├── auth-button.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── menu-list.tsx │ │ │ │ │ ├── overlay.tsx │ │ │ │ │ ├── profile.tsx │ │ │ │ │ └── type.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-auto-hide.ts │ │ │ │ └── use-deeplink-href.ts │ │ │ ├── recommended-contents/ │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ └── recommended-contents.sample.json │ │ │ │ ├── recommended-contents.stories.tsx │ │ │ │ └── recommended-contents.tsx │ │ │ ├── replies/ │ │ │ │ ├── auto-resizing-textarea.tsx │ │ │ │ ├── context.tsx │ │ │ │ ├── guide-text.tsx │ │ │ │ ├── hook.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── not-exist-replies.tsx │ │ │ │ │ └── reply.tsx │ │ │ │ ├── register.test.tsx │ │ │ │ ├── register.tsx │ │ │ │ ├── replies-api-client.test.ts │ │ │ │ ├── replies-api-client.ts │ │ │ │ ├── replies.stories.tsx │ │ │ │ ├── replies.tsx │ │ │ │ ├── reply-tree-manipulators.test.tsx │ │ │ │ ├── reply-tree-manipulators.ts │ │ │ │ ├── reply.test.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── resource-list-elements/ │ │ │ │ ├── extended-resource-list-element.stories.tsx │ │ │ │ ├── extended-resource-list-element.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── resource-list-element-stats.stories.tsx │ │ │ │ ├── resource-list-element-stats.tsx │ │ │ │ ├── review-scrap-stat.stories.tsx │ │ │ │ └── review-scrap-stat.tsx │ │ │ ├── review/ │ │ │ │ ├── components/ │ │ │ │ │ ├── filter-context.tsx │ │ │ │ │ ├── filter.tsx │ │ │ │ │ ├── full-list-button.tsx │ │ │ │ │ ├── infinite-list/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── infinite-list.tsx │ │ │ │ │ │ ├── latest-reviews-infinite.tsx │ │ │ │ │ │ ├── popular-reviews-infinite.tsx │ │ │ │ │ │ ├── rating-infinite-list.tsx │ │ │ │ │ │ ├── services.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── mileage-button.tsx │ │ │ │ │ ├── my-review-action-sheet.tsx │ │ │ │ │ ├── others-review-action-sheet.tsx │ │ │ │ │ ├── review-element/ │ │ │ │ │ │ ├── badges.tsx │ │ │ │ │ │ ├── comment.tsx │ │ │ │ │ │ ├── foldable-comment.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── media/ │ │ │ │ │ │ │ ├── compare-media.ts │ │ │ │ │ │ │ ├── elements.ts │ │ │ │ │ │ │ ├── image.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── media-wrapper.tsx │ │ │ │ │ │ │ ├── medium.tsx │ │ │ │ │ │ │ └── video.tsx │ │ │ │ │ │ ├── pinned-message.tsx │ │ │ │ │ │ ├── purchaseInfo.tsx │ │ │ │ │ │ └── user.tsx │ │ │ │ │ ├── review-placeholder-with-rating.tsx │ │ │ │ │ ├── reviews-shorten.tsx │ │ │ │ │ ├── reviews.tsx │ │ │ │ │ ├── shorten-list/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── latest-reviews.tsx │ │ │ │ │ │ ├── popular-reviews.tsx │ │ │ │ │ │ ├── rating-reviews.tsx │ │ │ │ │ │ ├── reviews-list.tsx │ │ │ │ │ │ ├── services.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── sorting-context.tsx │ │ │ │ │ ├── sorting-options-action-sheet.tsx │ │ │ │ │ ├── sorting-options.tsx │ │ │ │ │ ├── types.tsx │ │ │ │ │ └── write-button.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── data/ │ │ │ │ │ └── graphql/ │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── generated.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mutation.graphql │ │ │ │ │ └── query.graphql │ │ │ │ ├── index.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── review-element.duo-images.json │ │ │ │ │ ├── review-element.duo-videos.json │ │ │ │ │ ├── review-element.mono-image.json │ │ │ │ │ ├── review-element.mono-video.json │ │ │ │ │ ├── review-element.more-images.json │ │ │ │ │ ├── review-element.more-vidoes.json │ │ │ │ │ ├── review-element.penta-images.json │ │ │ │ │ ├── review-element.quad-images.json │ │ │ │ │ ├── review-element.tri-images.json │ │ │ │ │ ├── review-element.tri-videos.json │ │ │ │ │ └── reviews.ts │ │ │ │ ├── review-element.stories.tsx │ │ │ │ ├── reviews-placeholder.stories.tsx │ │ │ │ ├── reviews-shorten.stories.tsx │ │ │ │ ├── reviews.stories.tsx │ │ │ │ ├── services/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── use-client-actions.tsx │ │ │ │ │ └── use-reviews.ts │ │ │ │ └── utils.ts │ │ │ ├── scrap/ │ │ │ │ ├── constants.ts │ │ │ │ ├── context.ts │ │ │ │ ├── index.ts │ │ │ │ ├── provider.tsx │ │ │ │ ├── reducer.ts │ │ │ │ ├── services.ts │ │ │ │ ├── types.ts │ │ │ │ └── use-scrap.ts │ │ │ ├── scrap-button/ │ │ │ │ ├── hooks.ts │ │ │ │ ├── index.ts │ │ │ │ ├── outline-scrap-button.stories.tsx │ │ │ │ ├── outline-scrap-button.tsx │ │ │ │ ├── overlay-scrap-button.stories.tsx │ │ │ │ ├── overlay-scrap-button.tsx │ │ │ │ ├── scrap-button-mask.test.tsx │ │ │ │ ├── scrap-button-mask.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── search/ │ │ │ │ ├── index.ts │ │ │ │ ├── search.stories.tsx │ │ │ │ └── search.tsx │ │ │ ├── social-reviews/ │ │ │ │ ├── external-links.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── social-review.tsx │ │ │ │ └── social-reviews.stories.tsx │ │ │ ├── static-map/ │ │ │ │ ├── index.ts │ │ │ │ ├── static-map.stories.tsx │ │ │ │ └── static-map.tsx │ │ │ └── user-verification/ │ │ │ ├── confirmation-services.test.ts │ │ │ ├── confirmation-services.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── use-user-verification.test.ts │ │ │ ├── use-user-verification.ts │ │ │ ├── verification-request.stories.tsx │ │ │ ├── verification-request.tsx │ │ │ ├── verified-message.spec.tsx │ │ │ └── verified-message.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-document/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── animation.stories.tsx │ │ │ ├── elements/ │ │ │ │ ├── anchor.tsx │ │ │ │ ├── animation.tsx │ │ │ │ ├── coupon/ │ │ │ │ │ ├── coupon-download-buttons.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── modals.tsx │ │ │ │ │ ├── utils.test.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── embedded.tsx │ │ │ │ ├── external-video.tsx │ │ │ │ ├── images.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── itinerary/ │ │ │ │ │ ├── badge.ts │ │ │ │ │ ├── icons.tsx │ │ │ │ │ ├── itinerary-map.tsx │ │ │ │ │ ├── poi-card.tsx │ │ │ │ │ ├── save-to-itinerary.tsx │ │ │ │ │ ├── tag-label.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── use-computed-itineraries.ts │ │ │ │ │ ├── use-computed-map.ts │ │ │ │ │ ├── use-handle-add-pois-to-trip.ts │ │ │ │ │ ├── use-safety-poi.ts │ │ │ │ │ └── with-type-circle-badge.tsx │ │ │ │ ├── itinerary.tsx │ │ │ │ ├── links.tsx │ │ │ │ ├── list.tsx │ │ │ │ ├── note.tsx │ │ │ │ ├── pois.tsx │ │ │ │ ├── regions.tsx │ │ │ │ ├── shared/ │ │ │ │ │ ├── display-containers.tsx │ │ │ │ │ ├── document-carousel.tsx │ │ │ │ │ ├── generate-click-handler.ts │ │ │ │ │ └── resource-list.tsx │ │ │ │ ├── sticky-tabs.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── text/ │ │ │ │ │ ├── headings.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plain.tsx │ │ │ │ └── tna/ │ │ │ │ ├── index.tsx │ │ │ │ ├── price-policy-coupon-info.tsx │ │ │ │ ├── product.tsx │ │ │ │ ├── slot.tsx │ │ │ │ ├── types.ts │ │ │ │ └── use-generate-coupon.ts │ │ │ ├── heading.stories.tsx │ │ │ ├── hr.stories.tsx │ │ │ ├── images.stories.tsx │ │ │ ├── index.ts │ │ │ ├── links.stories.tsx │ │ │ ├── list.stories.tsx │ │ │ ├── mocks/ │ │ │ │ ├── hotel.sample.json │ │ │ │ ├── images-frame.sample.json │ │ │ │ ├── images.sample.json │ │ │ │ ├── pois.sample.json │ │ │ │ ├── slots.sample.json │ │ │ │ ├── triple-document.embedded.json │ │ │ │ ├── triple-document.itinerary.json │ │ │ │ ├── triple-document.regions.json │ │ │ │ └── triple-document.sample.json │ │ │ ├── pois.stories.tsx │ │ │ ├── prop-context/ │ │ │ │ ├── deep-link.ts │ │ │ │ ├── guest-mode.ts │ │ │ │ ├── image-click-handler.ts │ │ │ │ ├── image-source.ts │ │ │ │ ├── link-click-handler.ts │ │ │ │ ├── media-config.tsx │ │ │ │ └── resource-click-handler.ts │ │ │ ├── tna-slot.stories.tsx │ │ │ ├── triple-document.stories.tsx │ │ │ ├── triple-document.tsx │ │ │ ├── types.ts │ │ │ └── use-resource-event-tracker.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-email-document/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── common/ │ │ │ │ ├── box.ts │ │ │ │ ├── fluid-table.tsx │ │ │ │ ├── handlebars-anchor.tsx │ │ │ │ ├── index.ts │ │ │ │ └── reset.ts │ │ │ ├── components/ │ │ │ │ ├── index.ts │ │ │ │ ├── preview.test.tsx │ │ │ │ └── preview.tsx │ │ │ ├── elements/ │ │ │ │ ├── dividers.test.tsx │ │ │ │ ├── dividers.tsx │ │ │ │ ├── embedded.test.tsx │ │ │ │ ├── embedded.tsx │ │ │ │ ├── heading.test.tsx │ │ │ │ ├── heading.tsx │ │ │ │ ├── images.test.tsx │ │ │ │ ├── images.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── links.test.tsx │ │ │ │ ├── links.tsx │ │ │ │ ├── note.test.tsx │ │ │ │ ├── note.tsx │ │ │ │ ├── text.test.tsx │ │ │ │ └── text.tsx │ │ │ ├── embedded.stories.tsx │ │ │ ├── full-email-template.tsx │ │ │ ├── heading.stories.tsx │ │ │ ├── hr.stories.tsx │ │ │ ├── images.stories.tsx │ │ │ ├── index.ts │ │ │ ├── links.stories.tsx │ │ │ ├── note.stories.tsx │ │ │ ├── preview.stories.tsx │ │ │ ├── text.stories.tsx │ │ │ ├── triple-email-document.test.tsx │ │ │ └── triple-email-document.tsx │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-fallback-action/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── constant.ts │ │ │ ├── index.ts │ │ │ ├── triple-fallback-action-remover.tsx │ │ │ ├── triple-fallback-action.test.tsx │ │ │ ├── triple-fallback-action.tsx │ │ │ └── use-triple-fallback-action-remover.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-header/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── frame/ │ │ │ │ ├── common.ts │ │ │ │ ├── effects/ │ │ │ │ │ ├── common.ts │ │ │ │ │ ├── flying.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rotate.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── zoom.tsx │ │ │ │ ├── frame.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── index.ts │ │ │ │ └── text.tsx │ │ │ ├── index.ts │ │ │ ├── layer/ │ │ │ │ ├── index.ts │ │ │ │ ├── layer.tsx │ │ │ │ └── transitions/ │ │ │ │ ├── fade-in-out.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── marquee.tsx │ │ │ │ ├── rolling.tsx │ │ │ │ └── slide.tsx │ │ │ ├── lottie/ │ │ │ │ ├── index.ts │ │ │ │ ├── lottie.tsx │ │ │ │ └── use-lottie.ts │ │ │ ├── mocks/ │ │ │ │ ├── framer-type.sample.json │ │ │ │ └── lottie-type.sample.json │ │ │ ├── motion-container.ts │ │ │ ├── service.ts │ │ │ ├── triple-header.stories.tsx │ │ │ ├── triple-header.tsx │ │ │ └── types.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-web/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client-app/ │ │ │ │ ├── context.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-client-app-actions.mdx │ │ │ │ ├── use-client-app-actions.test.tsx │ │ │ │ ├── use-client-app-actions.ts │ │ │ │ ├── use-client-app-callback.mdx │ │ │ │ ├── use-client-app-callback.test.tsx │ │ │ │ ├── use-client-app-callback.ts │ │ │ │ ├── use-client-app.mdx │ │ │ │ ├── use-client-app.test.tsx │ │ │ │ ├── use-client-app.ts │ │ │ │ ├── use-feature-flag.mdx │ │ │ │ ├── use-feature-flag.test.tsx │ │ │ │ └── use-feature-flag.ts │ │ │ ├── env/ │ │ │ │ ├── context.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-env.mdx │ │ │ │ ├── use-env.test.tsx │ │ │ │ └── use-env.ts │ │ │ ├── event-tracking/ │ │ │ │ ├── context.ts │ │ │ │ ├── index.ts │ │ │ │ ├── libs/ │ │ │ │ │ └── firebase-analytics.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-set-firebase-user-id.mdx │ │ │ │ ├── use-set-firebase-user-id.ts │ │ │ │ ├── use-track-event-with-metadata.mdx │ │ │ │ ├── use-track-event-with-metadata.ts │ │ │ │ ├── use-track-event.mdx │ │ │ │ ├── use-track-event.ts │ │ │ │ ├── use-track-screen.mdx │ │ │ │ ├── use-track-screen.ts │ │ │ │ ├── use-triple-web-device-id.ts │ │ │ │ ├── use-utm.mdx │ │ │ │ ├── use-utm.ts │ │ │ │ └── utils/ │ │ │ │ ├── track-event.ts │ │ │ │ └── track-screen.ts │ │ │ ├── hash-router/ │ │ │ │ ├── context.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── use-hash-router.mdx │ │ │ │ └── use-hash-router.ts │ │ │ ├── i18n/ │ │ │ │ ├── context.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-i18n.mdx │ │ │ │ ├── use-i18n.test.tsx │ │ │ │ ├── use-i18n.ts │ │ │ │ ├── use-translation.mdx │ │ │ │ ├── use-translation.test.tsx │ │ │ │ └── use-translation.ts │ │ │ ├── index.ts │ │ │ ├── modal/ │ │ │ │ ├── app-install-cta-modal-context.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── app-install-cta-modal.tsx │ │ │ │ │ └── login-cta-modal.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── context.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── login-cta-modal-context.ts │ │ │ │ ├── types.ts │ │ │ │ ├── use-app-install-cta-modal.mdx │ │ │ │ ├── use-app-install-cta-modal.ts │ │ │ │ ├── use-login-cta-modal.mdx │ │ │ │ └── use-login-cta-modal.ts │ │ │ ├── providers/ │ │ │ │ ├── app-install-cta-modal-provider.tsx │ │ │ │ ├── event-metadata-provider.tsx │ │ │ │ ├── event-tracking-provider.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── login-cta-modal-provider.tsx │ │ │ │ └── triple-web.tsx │ │ │ ├── session/ │ │ │ │ ├── context.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── types.tsx │ │ │ │ ├── use-login.mdx │ │ │ │ ├── use-login.ts │ │ │ │ ├── use-logout.mdx │ │ │ │ ├── use-logout.ts │ │ │ │ ├── use-session-availability.mdx │ │ │ │ ├── use-session-availability.test.tsx │ │ │ │ ├── use-session-availability.ts │ │ │ │ ├── use-session-callback.mdx │ │ │ │ ├── use-session-callback.test.tsx │ │ │ │ ├── use-session-callback.ts │ │ │ │ ├── use-session.mdx │ │ │ │ ├── use-session.test.tsx │ │ │ │ ├── use-session.ts │ │ │ │ └── utils/ │ │ │ │ ├── redirect.spec.ts │ │ │ │ └── redirect.ts │ │ │ └── user-agent/ │ │ │ ├── context.tsx │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── use-user-agent.mdx │ │ │ ├── use-user-agent.test.tsx │ │ │ └── use-user-agent.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-web-nextjs/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── initializers/ │ │ │ │ ├── client-app.ts │ │ │ │ ├── index.ts │ │ │ │ ├── session.ts │ │ │ │ └── user-agent.ts │ │ │ └── providers/ │ │ │ ├── app-install-cta-modal-provider.mdx │ │ │ ├── app-install-cta-modal-provider.tsx │ │ │ ├── event-metadata-provider.mdx │ │ │ ├── event-metadata-provider.tsx │ │ │ ├── event-tracking-provider.mdx │ │ │ ├── event-tracking-provider.tsx │ │ │ ├── index.ts │ │ │ ├── login-cta-modal-provider.mdx │ │ │ ├── login-cta-modal-provider.tsx │ │ │ ├── triple-web.mdx │ │ │ └── triple-web.tsx │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-web-nextjs-pages/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── helpers/ │ │ │ │ ├── client-app.ts │ │ │ │ ├── session.ts │ │ │ │ └── user-agent.ts │ │ │ ├── index.ts │ │ │ ├── initializers/ │ │ │ │ ├── client-app.ts │ │ │ │ ├── index.ts │ │ │ │ ├── session.ts │ │ │ │ └── user-agent.ts │ │ │ ├── providers/ │ │ │ │ ├── app-install-cta-modal-provider.mdx │ │ │ │ ├── app-install-cta-modal-provider.tsx │ │ │ │ ├── event-metadata-provider.mdx │ │ │ │ ├── event-metadata-provider.tsx │ │ │ │ ├── event-tracking-provider.mdx │ │ │ │ ├── event-tracking-provider.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── login-cta-modal-provider.mdx │ │ │ │ ├── login-cta-modal-provider.tsx │ │ │ │ ├── triple-web.mdx │ │ │ │ └── triple-web.tsx │ │ │ └── ssr-utils/ │ │ │ ├── auth-guard.test.ts │ │ │ ├── auth-guard.ts │ │ │ ├── get-client-app.ts │ │ │ ├── get-session-availability.ts │ │ │ ├── get-user-agent.ts │ │ │ ├── index.ts │ │ │ └── put-invalid-session-id-remover.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-web-test-utils/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── create-test-wrapper.tsx │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── triple-web-utils/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── check-client-app.test.ts │ │ │ ├── check-client-app.ts │ │ │ ├── index.ts │ │ │ ├── regex.ts │ │ │ ├── user-agent.ts │ │ │ └── user.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── type-definitions/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── geojson.ts │ │ │ ├── image.ts │ │ │ ├── index.ts │ │ │ ├── inventory-item.ts │ │ │ ├── listing-poi.ts │ │ │ ├── translated-property.ts │ │ │ └── triple-document.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ └── view-utilities/ │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── debounce.ts │ │ ├── derive-current-state-and-count.ts │ │ ├── find-folded-position.ts │ │ ├── format-number.spec.ts │ │ ├── format-number.ts │ │ ├── generate-deep-link/ │ │ │ ├── README.md │ │ │ ├── index.ts │ │ │ ├── make-deep-link-generator.test.ts │ │ │ ├── make-deep-link-generator.ts │ │ │ ├── param-injectors.test.ts │ │ │ └── param-injectors.ts │ │ ├── generate-share-image-url.ts │ │ ├── index.ts │ │ ├── measure-distance.spec.ts │ │ ├── measure-distance.ts │ │ ├── normalize-query-keys/ │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── routelist/ │ │ │ ├── index.ts │ │ │ ├── routelist.spec.ts │ │ │ └── routelist.ts │ │ ├── strict-query/ │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── timestamp.ts │ │ ├── url.spec.ts │ │ └── url.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── vite.config.mts ├── pnpm-workspace.yaml ├── renovate.json ├── scripts/ │ └── changelog.js ├── stories/ │ └── introduction.mdx ├── tsconfig.json ├── tsconfig.test.json └── vite.config.mts