From 0b4a10b088e7047102d8e4deb5eee4f6936af9e5 Mon Sep 17 00:00:00 2001 From: Vitaly Rtishchev Date: Tue, 19 Sep 2023 22:29:49 +0400 Subject: [PATCH] Updates --- 404.html | 4 +- 404/index.html | 9 + .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 _next/static/chunks/1300-7220bd7f6a9c82f6.js | 1 + _next/static/chunks/1300-a1599e086a440f9c.js | 1 - _next/static/chunks/main-6b495e28bfbaa813.js | 1 - _next/static/chunks/main-da49d387d19ca122.js | 1 + .../colors-generator-55b397ea41fc6dea.js | 1 - .../colors-generator-7af0078c6aa3ab46.js | 1 + ...b.js => default-props-435f082c9754bd64.js} | 2 +- .../mantine-provider-816e166cf579a4c0.js | 1 + .../mantine-provider-dbf707fe736eae0f.js | 17 - about.html => about/index.html | 4 +- app-shell.html => app-shell/index.html | 2 +- changelog/{7-0-0.html => 7-0-0/index.html} | 234 ++++----- .../index.html} | 4 +- colors-generator.html | 44 -- colors-generator/index.html | 44 ++ combobox.html => combobox/index.html | 2 +- contribute.html => contribute/index.html | 4 +- core/{accordion.html => accordion/index.html} | 14 +- .../index.html} | 32 +- core/affix.html | 34 -- core/affix/index.html | 34 ++ core/{alert.html => alert/index.html} | 6 +- core/{anchor.html => anchor/index.html} | 10 +- core/{app-shell.html => app-shell/index.html} | 26 +- .../index.html} | 4 +- .../index.html} | 14 +- core/{avatar.html => avatar/index.html} | 14 +- .../index.html} | 6 +- core/{badge.html => badge/index.html} | 10 +- .../index.html} | 4 +- core/box.html | 22 - core/box/index.html | 22 + core/breadcrumbs.html | 28 -- core/breadcrumbs/index.html | 28 ++ core/{burger.html => burger/index.html} | 6 +- core/{button.html => button/index.html} | 34 +- core/{card.html => card/index.html} | 12 +- core/{center.html => center/index.html} | 6 +- core/{checkbox.html => checkbox/index.html} | 4 +- core/{chip.html => chip/index.html} | 4 +- core/close-button.html | 28 -- core/close-button/index.html | 28 ++ core/{code.html => code/index.html} | 6 +- core/{collapse.html => collapse/index.html} | 4 +- .../index.html} | 10 +- .../index.html} | 6 +- .../index.html} | 8 +- core/{combobox.html => combobox/index.html} | 24 +- core/{container.html => container/index.html} | 10 +- .../index.html} | 6 +- core/dialog.html | 51 -- core/dialog/index.html | 51 ++ core/{divider.html => divider/index.html} | 4 +- core/{drawer.html => drawer/index.html} | 14 +- core/{fieldset.html => fieldset/index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 8 +- core/{flex.html => flex/index.html} | 6 +- .../index.html} | 8 +- core/{grid.html => grid/index.html} | 8 +- core/{group.html => group/index.html} | 8 +- core/{highlight.html => highlight/index.html} | 8 +- .../index.html} | 4 +- core/{image.html => image/index.html} | 10 +- core/{indicator.html => indicator/index.html} | 4 +- core/{input.html => input/index.html} | 32 +- .../index.html} | 10 +- core/kbd.html | 15 - core/kbd/index.html | 15 + core/{list.html => list/index.html} | 4 +- core/{loader.html => loader/index.html} | 12 +- .../index.html} | 6 +- core/{mark.html => mark/index.html} | 4 +- core/{menu.html => menu/index.html} | 10 +- core/{modal.html => modal/index.html} | 16 +- .../index.html} | 16 +- .../index.html} | 8 +- core/{nav-link.html => nav-link/index.html} | 8 +- .../index.html} | 8 +- .../index.html} | 8 +- core/{overlay.html => overlay/index.html} | 6 +- .../index.html} | 8 +- core/{paper.html => paper/index.html} | 6 +- .../index.html} | 10 +- core/{pill.html => pill/index.html} | 6 +- .../index.html} | 10 +- core/{pin-input.html => pin-input/index.html} | 6 +- core/{popover.html => popover/index.html} | 8 +- core/portal.html | 67 --- core/portal/index.html | 67 +++ core/{progress.html => progress/index.html} | 6 +- core/{radio.html => radio/index.html} | 4 +- core/{rating.html => rating/index.html} | 4 +- .../index.html} | 10 +- .../index.html} | 4 +- .../index.html} | 8 +- core/{select.html => select/index.html} | 16 +- .../index.html} | 8 +- core/{skeleton.html => skeleton/index.html} | 4 +- core/{slider.html => slider/index.html} | 12 +- core/{space.html => space/index.html} | 4 +- core/{spoiler.html => spoiler/index.html} | 4 +- core/{stack.html => stack/index.html} | 8 +- core/{stepper.html => stepper/index.html} | 8 +- core/{switch.html => switch/index.html} | 6 +- core/{table.html => table/index.html} | 6 +- core/{tabs.html => tabs/index.html} | 8 +- .../index.html} | 18 +- .../index.html} | 8 +- core/{text.html => text/index.html} | 14 +- core/{textarea.html => textarea/index.html} | 8 +- .../index.html} | 6 +- core/{timeline.html => timeline/index.html} | 4 +- core/{title.html => title/index.html} | 10 +- core/{tooltip.html => tooltip/index.html} | 8 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 8 +- core/visually-hidden.html | 19 - core/visually-hidden/index.html | 19 + dates/{calendar.html => calendar/index.html} | 18 +- .../index.html} | 12 +- .../index.html} | 16 +- .../index.html} | 44 +- .../index.html} | 16 +- .../index.html} | 6 +- .../index.html} | 6 +- .../index.html} | 16 +- .../index.html} | 6 +- .../index.html} | 6 +- .../index.html} | 16 +- .../index.html} | 4 +- .../index.html} | 4 +- form/{errors.html => errors/index.html} | 6 +- form/{nested.html => nested/index.html} | 6 +- form/{recipes.html => recipes/index.html} | 4 +- form/{status.html => status/index.html} | 6 +- form/{use-form.html => use-form/index.html} | 14 +- .../index.html} | 4 +- .../index.html} | 8 +- form/{values.html => values/index.html} | 6 +- .../index.html | 32 +- guides/{6x-to-7x.html => 6x-to-7x/index.html} | 42 +- guides/{gatsby.html => gatsby/index.html} | 8 +- guides/{icons.html => icons/index.html} | 8 +- .../index.html} | 6 +- guides/{jest.html => jest/index.html} | 10 +- guides/{next.html => next/index.html} | 20 +- .../index.html} | 10 +- guides/{redwood.html => redwood/index.html} | 10 +- guides/{remix.html => remix/index.html} | 10 +- .../{storybook.html => storybook/index.html} | 6 +- .../index.html} | 12 +- guides/{vite.html => vite/index.html} | 10 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 6 +- .../index.html} | 4 +- .../index.html} | 6 +- .../index.html} | 6 +- hooks/use-did-update.html | 14 - hooks/use-did-update/index.html | 14 + .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 6 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 8 +- .../index.html} | 6 +- .../index.html} | 4 +- hooks/use-force-update.html | 22 - hooks/use-force-update/index.html | 22 + .../index.html} | 4 +- hooks/{use-hash.html => use-hash/index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 4 +- .../{use-hover.html => use-hover/index.html} | 4 +- hooks/use-id.html | 29 -- hooks/use-id/index.html | 29 ++ hooks/{use-idle.html => use-idle/index.html} | 4 +- hooks/use-input-state.html | 48 -- hooks/use-input-state/index.html | 48 ++ .../index.html} | 4 +- .../index.html} | 4 +- hooks/use-isomorphic-effect.html | 16 - hooks/use-isomorphic-effect/index.html | 16 + .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 8 +- .../{use-mouse.html => use-mouse/index.html} | 4 +- hooks/{use-move.html => use-move/index.html} | 4 +- .../index.html} | 4 +- hooks/{use-os.html => use-os/index.html} | 4 +- .../index.html} | 4 +- .../index.html} | 6 +- .../index.html} | 4 +- .../{use-queue.html => use-queue/index.html} | 6 +- .../index.html} | 6 +- .../index.html} | 6 +- .../index.html} | 4 +- hooks/use-set-state.html | 23 - hooks/use-set-state/index.html | 23 + hooks/use-shallow-effect.html | 29 -- hooks/use-shallow-effect/index.html | 29 ++ hooks/use-text-selection.html | 20 - hooks/use-text-selection/index.html | 20 + .../index.html} | 4 +- .../index.html} | 4 +- hooks/use-uncontrolled.html | 53 -- hooks/use-uncontrolled/index.html | 53 ++ .../index.html} | 4 +- hooks/use-viewport-size.html | 19 - hooks/use-viewport-size/index.html | 19 + .../index.html} | 4 +- .../index.html} | 4 +- index.html | 6 +- others/{carousel.html => carousel/index.html} | 8 +- .../index.html} | 4 +- others/{dropzone.html => dropzone/index.html} | 6 +- others/{modals.html => modals/index.html} | 6 +- .../index.html} | 14 +- .../{nprogress.html => nprogress/index.html} | 6 +- .../{spotlight.html => spotlight/index.html} | 10 +- others/{tiptap.html => tiptap/index.html} | 12 +- overview.html => overview/index.html | 66 +-- sitemap.xml | 455 +++++++++--------- .../index.html} | 6 +- .../index.html} | 14 +- .../index.html} | 16 +- .../index.html} | 4 +- .../index.html} | 24 +- .../index.html} | 14 +- .../index.html} | 10 +- .../index.html} | 8 +- styles/{rem.html => rem/index.html} | 12 +- .../index.html} | 18 +- styles/{rtl.html => rtl/index.html} | 6 +- .../index.html} | 10 +- styles/{style.html => style/index.html} | 12 +- .../index.html} | 30 +- .../index.html} | 16 +- styles/{unstyled.html => unstyled/index.html} | 10 +- .../index.html} | 24 +- .../index.html} | 22 +- .../index.html | 6 +- .../index.html} | 20 +- theming/{colors.html => colors/index.html} | 22 +- .../index.html} | 8 +- .../index.html} | 4 +- .../index.html} | 60 +-- .../index.html} | 28 +- .../index.html} | 16 +- 260 files changed, 1914 insertions(+), 1950 deletions(-) create mode 100644 404/index.html rename _next/static/{LJ8UVT2kYhT20r4LyREri => 1QUz3aLATlGHLVg4CdVbm}/_buildManifest.js (98%) rename _next/static/{LJ8UVT2kYhT20r4LyREri => 1QUz3aLATlGHLVg4CdVbm}/_ssgManifest.js (100%) create mode 100644 _next/static/chunks/1300-7220bd7f6a9c82f6.js delete mode 100644 _next/static/chunks/1300-a1599e086a440f9c.js delete mode 100644 _next/static/chunks/main-6b495e28bfbaa813.js create mode 100644 _next/static/chunks/main-da49d387d19ca122.js delete mode 100644 _next/static/chunks/pages/colors-generator-55b397ea41fc6dea.js create mode 100644 _next/static/chunks/pages/colors-generator-7af0078c6aa3ab46.js rename _next/static/chunks/pages/theming/{default-props-ca4da7cae68f8fdb.js => default-props-435f082c9754bd64.js} (62%) create mode 100644 _next/static/chunks/pages/theming/mantine-provider-816e166cf579a4c0.js delete mode 100644 _next/static/chunks/pages/theming/mantine-provider-dbf707fe736eae0f.js rename about.html => about/index.html (86%) rename app-shell.html => app-shell/index.html (94%) rename changelog/{7-0-0.html => 7-0-0/index.html} (87%) rename changelog/{previous-versions.html => previous-versions/index.html} (60%) delete mode 100644 colors-generator.html create mode 100644 colors-generator/index.html rename combobox.html => combobox/index.html (63%) rename contribute.html => contribute/index.html (75%) rename core/{accordion.html => accordion/index.html} (82%) rename core/{action-icon.html => action-icon/index.html} (78%) delete mode 100644 core/affix.html create mode 100644 core/affix/index.html rename core/{alert.html => alert/index.html} (60%) rename core/{anchor.html => anchor/index.html} (56%) rename core/{app-shell.html => app-shell/index.html} (66%) rename core/{aspect-ratio.html => aspect-ratio/index.html} (53%) rename core/{autocomplete.html => autocomplete/index.html} (75%) rename core/{avatar.html => avatar/index.html} (71%) rename core/{background-image.html => background-image/index.html} (50%) rename core/{badge.html => badge/index.html} (68%) rename core/{blockquote.html => blockquote/index.html} (52%) delete mode 100644 core/box.html create mode 100644 core/box/index.html delete mode 100644 core/breadcrumbs.html create mode 100644 core/breadcrumbs/index.html rename core/{burger.html => burger/index.html} (50%) rename core/{button.html => button/index.html} (81%) rename core/{card.html => card/index.html} (66%) rename core/{center.html => center/index.html} (52%) rename core/{checkbox.html => checkbox/index.html} (72%) rename core/{chip.html => chip/index.html} (65%) delete mode 100644 core/close-button.html create mode 100644 core/close-button/index.html rename core/{code.html => code/index.html} (52%) rename core/{collapse.html => collapse/index.html} (54%) rename core/{color-input.html => color-input/index.html} (74%) rename core/{color-picker.html => color-picker/index.html} (76%) rename core/{color-swatch.html => color-swatch/index.html} (56%) rename core/{combobox.html => combobox/index.html} (82%) rename core/{container.html => container/index.html} (58%) rename core/{copy-button.html => copy-button/index.html} (52%) delete mode 100644 core/dialog.html create mode 100644 core/dialog/index.html rename core/{divider.html => divider/index.html} (59%) rename core/{drawer.html => drawer/index.html} (70%) rename core/{fieldset.html => fieldset/index.html} (52%) rename core/{file-button.html => file-button/index.html} (56%) rename core/{file-input.html => file-input/index.html} (69%) rename core/{flex.html => flex/index.html} (57%) rename core/{focus-trap.html => focus-trap/index.html} (54%) rename core/{grid.html => grid/index.html} (73%) rename core/{group.html => group/index.html} (58%) rename core/{highlight.html => highlight/index.html} (59%) rename core/{hover-card.html => hover-card/index.html} (61%) rename core/{image.html => image/index.html} (56%) rename core/{indicator.html => indicator/index.html} (63%) rename core/{input.html => input/index.html} (80%) rename core/{json-input.html => json-input/index.html} (64%) delete mode 100644 core/kbd.html create mode 100644 core/kbd/index.html rename core/{list.html => list/index.html} (60%) rename core/{loader.html => loader/index.html} (62%) rename core/{loading-overlay.html => loading-overlay/index.html} (60%) rename core/{mark.html => mark/index.html} (51%) rename core/{menu.html => menu/index.html} (71%) rename core/{modal.html => modal/index.html} (76%) rename core/{multi-select.html => multi-select/index.html} (82%) rename core/{native-select.html => native-select/index.html} (73%) rename core/{nav-link.html => nav-link/index.html} (68%) rename core/{notification.html => notification/index.html} (63%) rename core/{number-input.html => number-input/index.html} (80%) rename core/{overlay.html => overlay/index.html} (58%) rename core/{pagination.html => pagination/index.html} (76%) rename core/{paper.html => paper/index.html} (51%) rename core/{password-input.html => password-input/index.html} (72%) rename core/{pill.html => pill/index.html} (59%) rename core/{pills-input.html => pills-input/index.html} (62%) rename core/{pin-input.html => pin-input/index.html} (60%) rename core/{popover.html => popover/index.html} (75%) delete mode 100644 core/portal.html create mode 100644 core/portal/index.html rename core/{progress.html => progress/index.html} (63%) rename core/{radio.html => radio/index.html} (65%) rename core/{rating.html => rating/index.html} (74%) rename core/{ring-progress.html => ring-progress/index.html} (64%) rename core/{scroll-area.html => scroll-area/index.html} (73%) rename core/{segmented-control.html => segmented-control/index.html} (73%) rename core/{select.html => select/index.html} (81%) rename core/{simple-grid.html => simple-grid/index.html} (54%) rename core/{skeleton.html => skeleton/index.html} (51%) rename core/{slider.html => slider/index.html} (78%) rename core/{space.html => space/index.html} (55%) rename core/{spoiler.html => spoiler/index.html} (52%) rename core/{stack.html => stack/index.html} (51%) rename core/{stepper.html => stepper/index.html} (82%) rename core/{switch.html => switch/index.html} (72%) rename core/{table.html => table/index.html} (68%) rename core/{tabs.html => tabs/index.html} (80%) rename core/{tags-input.html => tags-input/index.html} (80%) rename core/{text-input.html => text-input/index.html} (66%) rename core/{text.html => text/index.html} (69%) rename core/{textarea.html => textarea/index.html} (64%) rename core/{theme-icon.html => theme-icon/index.html} (63%) rename core/{timeline.html => timeline/index.html} (67%) rename core/{title.html => title/index.html} (51%) rename core/{tooltip.html => tooltip/index.html} (77%) rename core/{transition.html => transition/index.html} (53%) rename core/{typography-styles-provider.html => typography-styles-provider/index.html} (53%) rename core/{unstyled-button.html => unstyled-button/index.html} (51%) delete mode 100644 core/visually-hidden.html create mode 100644 core/visually-hidden/index.html rename dates/{calendar.html => calendar/index.html} (76%) rename dates/{date-input.html => date-input/index.html} (74%) rename dates/{date-picker-input.html => date-picker-input/index.html} (76%) rename dates/{date-picker.html => date-picker/index.html} (92%) rename dates/{date-time-picker.html => date-time-picker/index.html} (73%) rename dates/{dates-provider.html => dates-provider/index.html} (62%) rename dates/{getting-started.html => getting-started/index.html} (61%) rename dates/{month-picker-input.html => month-picker-input/index.html} (76%) rename dates/{month-picker.html => month-picker/index.html} (87%) rename dates/{time-input.html => time-input/index.html} (70%) rename dates/{year-picker-input.html => year-picker-input/index.html} (76%) rename dates/{year-picker.html => year-picker/index.html} (85%) rename form/{create-form-context.html => create-form-context/index.html} (61%) rename form/{errors.html => errors/index.html} (66%) rename form/{nested.html => nested/index.html} (71%) rename form/{recipes.html => recipes/index.html} (77%) rename form/{status.html => status/index.html} (65%) rename form/{use-form.html => use-form/index.html} (72%) rename form/{validation.html => validation/index.html} (88%) rename form/{validators.html => validators/index.html} (74%) rename form/{values.html => values/index.html} (76%) rename getting-started.html => getting-started/index.html (83%) rename guides/{6x-to-7x.html => 6x-to-7x/index.html} (72%) rename guides/{gatsby.html => gatsby/index.html} (72%) rename guides/{icons.html => icons/index.html} (65%) rename guides/{javascript.html => javascript/index.html} (57%) rename guides/{jest.html => jest/index.html} (62%) rename guides/{next.html => next/index.html} (68%) rename guides/{polymorphic.html => polymorphic/index.html} (73%) rename guides/{redwood.html => redwood/index.html} (68%) rename guides/{remix.html => remix/index.html} (67%) rename guides/{storybook.html => storybook/index.html} (65%) rename guides/{typescript.html => typescript/index.html} (68%) rename guides/{vite.html => vite/index.html} (66%) rename hooks/{use-click-outside.html => use-click-outside/index.html} (59%) rename hooks/{use-clipboard.html => use-clipboard/index.html} (52%) rename hooks/{use-color-scheme.html => use-color-scheme/index.html} (51%) rename hooks/{use-counter.html => use-counter/index.html} (53%) rename hooks/{use-debounced-state.html => use-debounced-state/index.html} (56%) rename hooks/{use-debounced-value.html => use-debounced-value/index.html} (60%) delete mode 100644 hooks/use-did-update.html create mode 100644 hooks/use-did-update/index.html rename hooks/{use-disclosure.html => use-disclosure/index.html} (50%) rename hooks/{use-document-title.html => use-document-title/index.html} (50%) rename hooks/{use-document-visibility.html => use-document-visibility/index.html} (50%) rename hooks/{use-element-size.html => use-element-size/index.html} (52%) rename hooks/{use-event-listener.html => use-event-listener/index.html} (51%) rename hooks/{use-eye-dropper.html => use-eye-dropper/index.html} (52%) rename hooks/{use-favicon.html => use-favicon/index.html} (51%) rename hooks/{use-focus-return.html => use-focus-return/index.html} (53%) rename hooks/{use-focus-trap.html => use-focus-trap/index.html} (54%) rename hooks/{use-focus-within.html => use-focus-within/index.html} (52%) delete mode 100644 hooks/use-force-update.html create mode 100644 hooks/use-force-update/index.html rename hooks/{use-fullscreen.html => use-fullscreen/index.html} (56%) rename hooks/{use-hash.html => use-hash/index.html} (51%) rename hooks/{use-headroom.html => use-headroom/index.html} (51%) rename hooks/{use-hotkeys.html => use-hotkeys/index.html} (56%) rename hooks/{use-hover.html => use-hover/index.html} (50%) delete mode 100644 hooks/use-id.html create mode 100644 hooks/use-id/index.html rename hooks/{use-idle.html => use-idle/index.html} (57%) delete mode 100644 hooks/use-input-state.html create mode 100644 hooks/use-input-state/index.html rename hooks/{use-intersection.html => use-intersection/index.html} (55%) rename hooks/{use-interval.html => use-interval/index.html} (53%) delete mode 100644 hooks/use-isomorphic-effect.html create mode 100644 hooks/use-isomorphic-effect/index.html rename hooks/{use-list-state.html => use-list-state/index.html} (60%) rename hooks/{use-local-storage.html => use-local-storage/index.html} (58%) rename hooks/{use-logger.html => use-logger/index.html} (50%) rename hooks/{use-media-query.html => use-media-query/index.html} (52%) rename hooks/{use-merged-ref.html => use-merged-ref/index.html} (51%) rename hooks/{use-mouse.html => use-mouse/index.html} (56%) rename hooks/{use-move.html => use-move/index.html} (66%) rename hooks/{use-network.html => use-network/index.html} (54%) rename hooks/{use-os.html => use-os/index.html} (51%) rename hooks/{use-page-leave.html => use-page-leave/index.html} (50%) rename hooks/{use-pagination.html => use-pagination/index.html} (67%) rename hooks/{use-previous.html => use-previous/index.html} (50%) rename hooks/{use-queue.html => use-queue/index.html} (53%) rename hooks/{use-reduced-motion.html => use-reduced-motion/index.html} (51%) rename hooks/{use-resize-observer.html => use-resize-observer/index.html} (52%) rename hooks/{use-scroll-into-view.html => use-scroll-into-view/index.html} (63%) delete mode 100644 hooks/use-set-state.html create mode 100644 hooks/use-set-state/index.html delete mode 100644 hooks/use-shallow-effect.html create mode 100644 hooks/use-shallow-effect/index.html delete mode 100644 hooks/use-text-selection.html create mode 100644 hooks/use-text-selection/index.html rename hooks/{use-timeout.html => use-timeout/index.html} (53%) rename hooks/{use-toggle.html => use-toggle/index.html} (54%) delete mode 100644 hooks/use-uncontrolled.html create mode 100644 hooks/use-uncontrolled/index.html rename hooks/{use-validated-state.html => use-validated-state/index.html} (53%) delete mode 100644 hooks/use-viewport-size.html create mode 100644 hooks/use-viewport-size/index.html rename hooks/{use-window-event.html => use-window-event/index.html} (50%) rename hooks/{use-window-scroll.html => use-window-scroll/index.html} (50%) rename others/{carousel.html => carousel/index.html} (88%) rename others/{code-highlight.html => code-highlight/index.html} (77%) rename others/{dropzone.html => dropzone/index.html} (80%) rename others/{modals.html => modals/index.html} (73%) rename others/{notifications.html => notifications/index.html} (79%) rename others/{nprogress.html => nprogress/index.html} (60%) rename others/{spotlight.html => spotlight/index.html} (77%) rename others/{tiptap.html => tiptap/index.html} (87%) rename overview.html => overview/index.html (86%) rename styles/{color-functions.html => color-functions/index.html} (64%) rename styles/{css-files-list.html => css-files-list/index.html} (81%) rename styles/{css-modules.html => css-modules/index.html} (70%) rename styles/{css-variables-list.html => css-variables-list/index.html} (91%) rename styles/{css-variables.html => css-variables/index.html} (70%) rename styles/{data-attributes.html => data-attributes/index.html} (70%) rename styles/{global-styles.html => global-styles/index.html} (64%) rename styles/{postcss-preset.html => postcss-preset/index.html} (69%) rename styles/{rem.html => rem/index.html} (67%) rename styles/{responsive.html => responsive/index.html} (74%) rename styles/{rtl.html => rtl/index.html} (65%) rename styles/{style-props.html => style-props/index.html} (72%) rename styles/{style.html => style/index.html} (58%) rename styles/{styles-api.html => styles-api/index.html} (77%) rename styles/{styles-performance.html => styles-performance/index.html} (68%) rename styles/{unstyled.html => unstyled/index.html} (61%) rename styles/{vanilla-extract.html => vanilla-extract/index.html} (71%) rename styles/{variants-sizes.html => variants-sizes/index.html} (75%) rename templates-usage.html => templates-usage/index.html (72%) rename theming/{color-schemes.html => color-schemes/index.html} (75%) rename theming/{colors.html => colors/index.html} (91%) rename theming/{default-props.html => default-props/index.html} (67%) rename theming/{default-theme.html => default-theme/index.html} (73%) rename theming/{mantine-provider.html => mantine-provider/index.html} (73%) rename theming/{theme-object.html => theme-object/index.html} (80%) rename theming/{typography.html => typography/index.html} (73%) diff --git a/404.html b/404.html index b8b8080a324..e0a9ad1f211 100644 --- a/404.html +++ b/404.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

404

+

404

Nothing found. If some of the Mantine documentation pages are lining to this page, please let us know by opening an issue. -Otherwise, get back to the home page.

\ No newline at end of file +Otherwise, get back to the home page.

\ No newline at end of file diff --git a/404/index.html b/404/index.html new file mode 100644 index 00000000000..e0a9ad1f211 --- /dev/null +++ b/404/index.html @@ -0,0 +1,9 @@ +404 | Mantine

404

+

Nothing found. If some of the Mantine documentation pages are lining to +this page, please let us know by opening an issue. +Otherwise, get back to the home page.

\ No newline at end of file diff --git a/_next/static/LJ8UVT2kYhT20r4LyREri/_buildManifest.js b/_next/static/1QUz3aLATlGHLVg4CdVbm/_buildManifest.js similarity index 98% rename from _next/static/LJ8UVT2kYhT20r4LyREri/_buildManifest.js rename to _next/static/1QUz3aLATlGHLVg4CdVbm/_buildManifest.js index 78489b79675..6bc6efa198c 100644 --- a/_next/static/LJ8UVT2kYhT20r4LyREri/_buildManifest.js +++ b/_next/static/1QUz3aLATlGHLVg4CdVbm/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(s,e,c,t,a,o,i,r,u,n,h,d,p,k,g,l,b,f,j,m,y,v,x){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[g,n,l,"static/chunks/4039-ad1c33a04f9417e5.js",s,t,a,o,i,h,d,p,b,f,j,"static/css/0b42572dfc0685d6.css","static/chunks/pages/index-430ac76e0cbf38c6.js"],"/404":[s,e,c,"static/chunks/pages/404-603c2fab3de119a8.js"],"/_error":["static/chunks/pages/_error-02cc11fd74b4e5ff.js"],"/about":[s,e,c,"static/css/2c53d1beec745d31.css","static/chunks/pages/about-4f735a0558cb5bb6.js"],"/app-shell":[p,"static/css/1593bbbe851036b7.css","static/chunks/pages/app-shell-61046ac56d7d6c3b.js"],"/changelog/7-0-0":[r,n,s,e,c,o,m,y,"static/chunks/pages/changelog/7-0-0-f8f598f970f00b71.js"],"/changelog/previous-versions":[s,e,c,"static/chunks/pages/changelog/previous-versions-e82db25d087ccbfa.js"],"/colors-generator":["static/chunks/1333-769c51c7075e50db.js","static/css/2f7f36020c7f1b11.css","static/chunks/pages/colors-generator-55b397ea41fc6dea.js"],"/combobox":[o,"static/css/a31c84cc8d06a9d2.css","static/chunks/pages/combobox-b7914902b2865404.js"],"/contribute":[s,e,c,"static/chunks/pages/contribute-3ca7be664099b35c.js"],"/core/accordion":[s,e,c,f,"static/chunks/pages/core/accordion-b4b99801acd7b315.js"],"/core/action-icon":[s,e,c,"static/chunks/pages/core/action-icon-79b1c0fc510cafd4.js"],"/core/affix":[s,e,c,"static/chunks/pages/core/affix-d13994f8b19d8be5.js"],"/core/alert":[s,e,c,"static/chunks/pages/core/alert-cd9141c6f299bea6.js"],"/core/anchor":[s,e,c,"static/chunks/pages/core/anchor-82e9b620f59b11b8.js"],"/core/app-shell":[s,e,c,"static/chunks/pages/core/app-shell-75db0286f5916356.js"],"/core/aspect-ratio":[s,e,c,"static/chunks/pages/core/aspect-ratio-3e67a35da570053e.js"],"/core/autocomplete":[s,e,c,o,"static/chunks/pages/core/autocomplete-086087a4f31b1274.js"],"/core/avatar":[s,e,c,"static/chunks/pages/core/avatar-cd30a65e8ae692b1.js"],"/core/background-image":[s,e,c,"static/chunks/pages/core/background-image-ba0f458efeb0b6aa.js"],"/core/badge":[s,e,c,"static/chunks/pages/core/badge-235a857d9f52bf11.js"],"/core/blockquote":[s,e,c,"static/chunks/pages/core/blockquote-3452a869af889766.js"],"/core/box":[s,e,c,"static/chunks/pages/core/box-8ea1344bcce0d016.js"],"/core/breadcrumbs":[s,e,c,"static/chunks/pages/core/breadcrumbs-d772d03e29259639.js"],"/core/burger":[s,e,c,"static/chunks/pages/core/burger-ac24c3a6db416c1c.js"],"/core/button":[s,e,c,"static/chunks/pages/core/button-a33e546d38fe0d6a.js"],"/core/card":[s,e,c,"static/chunks/pages/core/card-c8480d9c06d586c5.js"],"/core/center":[s,e,c,"static/chunks/pages/core/center-54e40d7f26b7f1d1.js"],"/core/checkbox":[s,e,c,"static/chunks/pages/core/checkbox-824905278fff7202.js"],"/core/chip":[s,e,c,"static/chunks/pages/core/chip-4ee6b49268677a0f.js"],"/core/close-button":[s,e,c,"static/chunks/pages/core/close-button-23b40e01229b2d7e.js"],"/core/code":[s,e,c,"static/chunks/pages/core/code-1ff6131ae9165253.js"],"/core/collapse":[s,e,c,"static/chunks/pages/core/collapse-026c69898bac2522.js"],"/core/color-input":[s,e,c,"static/chunks/pages/core/color-input-27686785638c1f19.js"],"/core/color-picker":[s,e,c,"static/chunks/pages/core/color-picker-8bb28a401b18ebed.js"],"/core/color-swatch":[s,e,c,"static/chunks/pages/core/color-swatch-76eda182c8cba7a5.js"],"/core/combobox":[s,e,c,o,v,"static/chunks/pages/core/combobox-ed1d83eb2b961226.js"],"/core/container":[s,e,c,"static/chunks/pages/core/container-bb8102414079847a.js"],"/core/copy-button":[s,e,c,"static/chunks/pages/core/copy-button-6b75a8c1ae5e1b5a.js"],"/core/dialog":[s,e,c,"static/chunks/pages/core/dialog-b9f2adfdfd793904.js"],"/core/divider":[s,e,c,"static/chunks/pages/core/divider-949faadea829b4ec.js"],"/core/drawer":[s,e,c,a,i,p,"static/chunks/pages/core/drawer-0de49e704be8fb3b.js"],"/core/fieldset":[s,e,c,"static/chunks/pages/core/fieldset-2cbcd26323df7e0b.js"],"/core/file-button":[s,e,c,"static/chunks/pages/core/file-button-f1622f7dc65f0f0d.js"],"/core/file-input":[s,e,c,"static/chunks/pages/core/file-input-551f0a01874cdf8d.js"],"/core/flex":[s,e,c,"static/chunks/pages/core/flex-892ea82bf3fc7ea8.js"],"/core/focus-trap":[s,e,c,"static/chunks/pages/core/focus-trap-16614a71ce652aeb.js"],"/core/grid":[s,e,c,"static/chunks/pages/core/grid-8bdd544306ab120e.js"],"/core/group":[s,e,c,"static/chunks/pages/core/group-ab5178f5d9000411.js"],"/core/highlight":[s,e,c,"static/chunks/pages/core/highlight-fb9dbf4ad91d443e.js"],"/core/hover-card":[s,e,c,"static/chunks/pages/core/hover-card-d3b3454d7ebb9dff.js"],"/core/image":[s,e,c,"static/chunks/pages/core/image-f988d992e3028dbf.js"],"/core/indicator":[s,e,c,"static/chunks/pages/core/indicator-be8a0627db682baa.js"],"/core/input":["static/chunks/8015-669307b9cf02b7fe.js",s,e,c,"static/chunks/pages/core/input-1b125b6fb4c0178d.js"],"/core/json-input":[s,e,c,"static/chunks/pages/core/json-input-8393e299acdc0341.js"],"/core/kbd":[s,e,c,"static/chunks/pages/core/kbd-d240fc4be69b7406.js"],"/core/list":[s,e,c,"static/chunks/pages/core/list-8376dd80ed78ec4b.js"],"/core/loader":[s,e,c,"static/chunks/pages/core/loader-2eed1da239664aeb.js"],"/core/loading-overlay":[s,e,c,a,i,"static/chunks/pages/core/loading-overlay-4b61a17d71713d8c.js"],"/core/mark":[s,e,c,"static/chunks/pages/core/mark-ffe8bf0434c03f92.js"],"/core/menu":[s,e,c,"static/chunks/pages/core/menu-fc9f267dbbc00c03.js"],"/core/modal":[s,e,c,a,i,"static/chunks/pages/core/modal-b80f055f1e8880a7.js"],"/core/multi-select":[s,e,c,o,j,"static/chunks/pages/core/multi-select-6ccab9bb88319b43.js"],"/core/native-select":[s,e,c,"static/chunks/pages/core/native-select-47bd241dbc0df0b4.js"],"/core/nav-link":[s,e,c,"static/chunks/pages/core/nav-link-a62ce78c1e0a69a9.js"],"/core/notification":[s,e,c,"static/chunks/pages/core/notification-dc748cf3d494da97.js"],"/core/number-input":[r,s,e,c,"static/chunks/pages/core/number-input-57173b1bc35757fe.js"],"/core/overlay":[s,e,c,"static/chunks/pages/core/overlay-2df8c5a21a1b6265.js"],"/core/pagination":[s,e,c,d,"static/chunks/pages/core/pagination-612488ec5cdc1903.js"],"/core/paper":[s,e,c,"static/chunks/pages/core/paper-d658195e4c66a4e0.js"],"/core/password-input":[s,e,c,"static/chunks/pages/core/password-input-ddb449653c7b0453.js"],"/core/pill":[s,e,c,"static/chunks/pages/core/pill-986a825a18bb84a3.js"],"/core/pills-input":[s,e,c,o,v,"static/chunks/pages/core/pills-input-1077e0827ab25d6a.js"],"/core/pin-input":[s,e,c,"static/chunks/pages/core/pin-input-3ae37cb4e3944fa1.js"],"/core/popover":[s,e,c,"static/chunks/pages/core/popover-2f7236164916e6a2.js"],"/core/portal":[s,e,c,"static/chunks/pages/core/portal-9deac8e0b0bcbcdf.js"],"/core/progress":[s,e,c,"static/chunks/pages/core/progress-8fb333608ddcc74f.js"],"/core/radio":[s,e,c,"static/chunks/pages/core/radio-35b0475a2e298fc1.js"],"/core/rating":[s,e,c,"static/chunks/pages/core/rating-ec38a83baa651be2.js"],"/core/ring-progress":[s,e,c,"static/chunks/pages/core/ring-progress-24518559ad47be56.js"],"/core/scroll-area":[s,e,c,"static/chunks/pages/core/scroll-area-1d5ff333ecc4ebe6.js"],"/core/segmented-control":[s,e,c,"static/chunks/pages/core/segmented-control-f37e7ca88ae2ee27.js"],"/core/select":[s,e,c,o,"static/chunks/pages/core/select-dd55e68b93d9f6cf.js"],"/core/simple-grid":[s,e,c,"static/chunks/pages/core/simple-grid-b89732a79f1fe01d.js"],"/core/skeleton":[s,e,c,"static/chunks/pages/core/skeleton-96afcb456c337307.js"],"/core/slider":[s,e,c,"static/chunks/pages/core/slider-1be63797778126a7.js"],"/core/space":[s,e,c,"static/chunks/pages/core/space-40fe502bbbca6d4c.js"],"/core/spoiler":[s,e,c,"static/chunks/pages/core/spoiler-d359d8ddbe1a295d.js"],"/core/stack":[s,e,c,"static/chunks/pages/core/stack-da1ec9dca090055f.js"],"/core/stepper":[s,e,c,"static/chunks/pages/core/stepper-83022ee5bad2e6af.js"],"/core/switch":[s,e,c,"static/chunks/pages/core/switch-f2596308b6d41afa.js"],"/core/table":[s,e,c,"static/chunks/pages/core/table-98fde90c1a0f0a65.js"],"/core/tabs":[s,e,c,"static/chunks/pages/core/tabs-baa5d76ab6567869.js"],"/core/tags-input":[s,e,c,o,m,"static/chunks/pages/core/tags-input-71009298ace757e0.js"],"/core/text":[s,e,c,"static/chunks/pages/core/text-98057227ac27eeb2.js"],"/core/text-input":[s,e,c,"static/chunks/pages/core/text-input-b4ba27109341fe04.js"],"/core/textarea":[s,e,c,"static/chunks/pages/core/textarea-337fe3c42e9cc522.js"],"/core/theme-icon":[s,e,c,"static/chunks/pages/core/theme-icon-6fa8a65f3081967b.js"],"/core/timeline":[s,e,c,"static/chunks/pages/core/timeline-8d8da156751d8a75.js"],"/core/title":[s,e,c,"static/chunks/pages/core/title-8dae48ba8bd0bd6e.js"],"/core/tooltip":[s,e,c,"static/chunks/pages/core/tooltip-5caa911ef4125ef8.js"],"/core/transition":[s,e,c,"static/chunks/pages/core/transition-dc716c3c449ce1d2.js"],"/core/typography-styles-provider":[s,e,c,"static/chunks/pages/core/typography-styles-provider-1bdf6cbeedd4f8bb.js"],"/core/unstyled-button":[s,e,c,"static/chunks/pages/core/unstyled-button-7146d474dae0fe5b.js"],"/core/visually-hidden":[s,e,c,"static/chunks/pages/core/visually-hidden-dbd5f7abc439afe7.js"],"/dates/calendar":[s,e,c,t,"static/chunks/pages/dates/calendar-338fc214c6fde174.js"],"/dates/date-input":[s,e,c,t,"static/chunks/pages/dates/date-input-3a36cdfb91382cfe.js"],"/dates/date-picker":[s,e,c,t,k,"static/chunks/pages/dates/date-picker-2840ac260c27d407.js"],"/dates/date-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/date-picker-input-5cb186eebec60a9f.js"],"/dates/date-time-picker":[s,e,c,t,h,"static/chunks/pages/dates/date-time-picker-84bab5e7092c06d1.js"],"/dates/dates-provider":[s,e,c,t,h,"static/chunks/pages/dates/dates-provider-d22e75c2fc37e763.js"],"/dates/getting-started":[s,e,c,t,u,"static/chunks/pages/dates/getting-started-06a462ad7761843d.js"],"/dates/month-picker":[s,e,c,t,k,"static/chunks/pages/dates/month-picker-d4bfdf5e6439984a.js"],"/dates/month-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/month-picker-input-0bec4416ffcce914.js"],"/dates/time-input":[s,e,c,"static/chunks/pages/dates/time-input-680f95fb443f945b.js"],"/dates/year-picker":[s,e,c,t,k,"static/chunks/pages/dates/year-picker-ab25c5daa2c424c0.js"],"/dates/year-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/year-picker-input-7dd09d975f18370a.js"],"/form/create-form-context":[s,e,c,"static/chunks/pages/form/create-form-context-7c64b8d3a043b263.js"],"/form/errors":[s,e,c,"static/chunks/pages/form/errors-9fa5beb0bc21f923.js"],"/form/nested":[s,e,c,a,"static/chunks/pages/form/nested-a27914bb9f6d9ba5.js"],"/form/recipes":["static/chunks/3c425cc6-dcff8cac03b5558f.js","static/chunks/1531-11d35445c5475ac1.js",s,e,c,a,"static/chunks/pages/form/recipes-f5cf776e291626cf.js"],"/form/status":[s,e,c,a,"static/chunks/pages/form/status-4f09aec8dc1b7727.js"],"/form/use-form":[s,e,c,a,"static/chunks/pages/form/use-form-a5f21be50ed46448.js"],"/form/validation":[r,"static/chunks/5060-7540dfb08e46808c.js",s,e,c,a,"static/chunks/pages/form/validation-99f0e1ec19e372aa.js"],"/form/validators":[r,s,e,c,a,"static/chunks/pages/form/validators-26a2fbd77eb58593.js"],"/form/values":[s,e,c,a,"static/chunks/pages/form/values-5b67f1ee8f01ba0e.js"],"/getting-started":[s,e,c,"static/css/7eac7ac93049bfac.css","static/chunks/pages/getting-started-d599a58b1b2d57e5.js"],"/guides/6x-to-7x":[s,e,c,"static/chunks/pages/guides/6x-to-7x-dd0ccf2353b8f509.js"],"/guides/gatsby":[s,e,c,"static/chunks/pages/guides/gatsby-1849339aaa7d5b04.js"],"/guides/icons":[s,e,c,"static/chunks/pages/guides/icons-bb3bdf860e34f5f5.js"],"/guides/javascript":[s,e,c,"static/chunks/pages/guides/javascript-6451fb2a4105e6b9.js"],"/guides/jest":[s,e,c,"static/chunks/pages/guides/jest-a2c47b0728b8b4eb.js"],"/guides/next":[s,e,c,"static/chunks/pages/guides/next-670e1444622eb2a6.js"],"/guides/polymorphic":[s,e,c,"static/chunks/pages/guides/polymorphic-6869c2a748b698b0.js"],"/guides/redwood":[s,e,c,"static/chunks/pages/guides/redwood-fde4340fd64504a1.js"],"/guides/remix":[s,e,c,"static/chunks/pages/guides/remix-6f4ef41250d55d42.js"],"/guides/storybook":[s,e,c,"static/chunks/pages/guides/storybook-49240b71a1938687.js"],"/guides/typescript":[s,e,c,"static/chunks/pages/guides/typescript-a1d7cdd0bae95894.js"],"/guides/vite":[s,e,c,"static/chunks/pages/guides/vite-234e7409487e5120.js"],"/hooks/use-click-outside":[s,e,c,"static/chunks/pages/hooks/use-click-outside-bda81bf5d77ae3ac.js"],"/hooks/use-clipboard":[s,e,c,"static/chunks/pages/hooks/use-clipboard-de060be53aa6e8eb.js"],"/hooks/use-color-scheme":[s,e,c,"static/chunks/pages/hooks/use-color-scheme-ec0707a6f8037d97.js"],"/hooks/use-counter":[s,e,c,"static/chunks/pages/hooks/use-counter-4cc3020cb3b5418d.js"],"/hooks/use-debounced-state":[s,e,c,"static/chunks/pages/hooks/use-debounced-state-5d0d2dbf56edf5d2.js"],"/hooks/use-debounced-value":[s,e,c,"static/chunks/pages/hooks/use-debounced-value-e930c8268c0b0b9b.js"],"/hooks/use-did-update":[s,e,c,"static/chunks/pages/hooks/use-did-update-09efaaceee1f1437.js"],"/hooks/use-disclosure":[s,e,c,"static/chunks/pages/hooks/use-disclosure-9a81a9feadfe6ccb.js"],"/hooks/use-document-title":[s,e,c,"static/chunks/pages/hooks/use-document-title-d205f2419c6eca40.js"],"/hooks/use-document-visibility":[s,e,c,"static/chunks/pages/hooks/use-document-visibility-8fd8db06d182cdf5.js"],"/hooks/use-element-size":[s,e,c,"static/chunks/pages/hooks/use-element-size-c702e63072750746.js"],"/hooks/use-event-listener":[s,e,c,"static/chunks/pages/hooks/use-event-listener-add2decb0f0ef2dd.js"],"/hooks/use-eye-dropper":[s,e,c,"static/chunks/pages/hooks/use-eye-dropper-e6297428dc9e25ac.js"],"/hooks/use-favicon":[s,e,c,"static/chunks/pages/hooks/use-favicon-22724936dbdfc3df.js"],"/hooks/use-focus-return":[s,e,c,a,i,"static/chunks/pages/hooks/use-focus-return-2288497a7a230eb3.js"],"/hooks/use-focus-trap":[s,e,c,"static/chunks/pages/hooks/use-focus-trap-32fc5ea080ae67af.js"],"/hooks/use-focus-within":[s,e,c,"static/chunks/pages/hooks/use-focus-within-4b258234dbf7f56f.js"],"/hooks/use-force-update":[s,e,c,"static/chunks/pages/hooks/use-force-update-72423505c6753afb.js"],"/hooks/use-fullscreen":[s,e,c,"static/chunks/pages/hooks/use-fullscreen-f7e6b3248e9b038e.js"],"/hooks/use-hash":[s,e,c,"static/chunks/pages/hooks/use-hash-8ba8b4f10370c000.js"],"/hooks/use-headroom":[s,e,c,"static/chunks/pages/hooks/use-headroom-fb83e02d2553a017.js"],"/hooks/use-hotkeys":[s,e,c,"static/chunks/pages/hooks/use-hotkeys-7e0da88c9121f7d9.js"],"/hooks/use-hover":[s,e,c,"static/chunks/pages/hooks/use-hover-47e5ac0bde18483d.js"],"/hooks/use-id":[s,e,c,"static/chunks/pages/hooks/use-id-694117ad3971c61e.js"],"/hooks/use-idle":[s,e,c,"static/chunks/pages/hooks/use-idle-b8a11ed995863537.js"],"/hooks/use-input-state":[s,e,c,"static/chunks/pages/hooks/use-input-state-9b37edeb205fd501.js"],"/hooks/use-intersection":[s,e,c,"static/chunks/pages/hooks/use-intersection-71e56d31d6ed4af8.js"],"/hooks/use-interval":[s,e,c,"static/chunks/pages/hooks/use-interval-df9376227430ab78.js"],"/hooks/use-isomorphic-effect":[s,e,c,"static/chunks/pages/hooks/use-isomorphic-effect-480bc69564754df6.js"],"/hooks/use-list-state":[s,e,c,"static/chunks/pages/hooks/use-list-state-b336d42abddc60b3.js"],"/hooks/use-local-storage":[s,e,c,"static/chunks/pages/hooks/use-local-storage-5bd05f1496e68b35.js"],"/hooks/use-logger":[s,e,c,"static/chunks/pages/hooks/use-logger-ccffe95bbcba7589.js"],"/hooks/use-media-query":[s,e,c,"static/chunks/pages/hooks/use-media-query-8de0c29783d41868.js"],"/hooks/use-merged-ref":[s,e,c,"static/chunks/pages/hooks/use-merged-ref-1ee247cf1271bf95.js"],"/hooks/use-mouse":[s,e,c,"static/chunks/pages/hooks/use-mouse-568687c99f8bdf26.js"],"/hooks/use-move":[s,e,c,"static/chunks/pages/hooks/use-move-6c2302746de1b727.js"],"/hooks/use-network":[s,e,c,"static/chunks/pages/hooks/use-network-c71ec4f75dbfd106.js"],"/hooks/use-os":[s,e,c,"static/chunks/pages/hooks/use-os-a559b776eaff431d.js"],"/hooks/use-page-leave":[s,e,c,"static/chunks/pages/hooks/use-page-leave-90fb520af0bb8d85.js"],"/hooks/use-pagination":[s,e,c,d,"static/chunks/pages/hooks/use-pagination-3b99ca7c5e4530f9.js"],"/hooks/use-previous":[s,e,c,"static/chunks/pages/hooks/use-previous-ec274840b068eda0.js"],"/hooks/use-queue":[s,e,c,"static/chunks/pages/hooks/use-queue-82c72f7451ce8dd5.js"],"/hooks/use-reduced-motion":[s,e,c,"static/chunks/pages/hooks/use-reduced-motion-3f7e2612e2d15c8a.js"],"/hooks/use-resize-observer":[s,e,c,"static/chunks/pages/hooks/use-resize-observer-dcdaebfe6625c7a8.js"],"/hooks/use-scroll-into-view":[s,e,c,"static/chunks/pages/hooks/use-scroll-into-view-7f10e118e6507817.js"],"/hooks/use-set-state":[s,e,c,"static/chunks/pages/hooks/use-set-state-7978c1afd5a50761.js"],"/hooks/use-shallow-effect":[s,e,c,"static/chunks/pages/hooks/use-shallow-effect-2a23600a5117eddc.js"],"/hooks/use-text-selection":[s,e,c,"static/chunks/pages/hooks/use-text-selection-d64f768b2561c2e6.js"],"/hooks/use-timeout":[s,e,c,"static/chunks/pages/hooks/use-timeout-bdc6d315b1e3c533.js"],"/hooks/use-toggle":[s,e,c,"static/chunks/pages/hooks/use-toggle-fb8f3fab86583da1.js"],"/hooks/use-uncontrolled":[s,e,c,"static/chunks/pages/hooks/use-uncontrolled-03c95ba36e5aca76.js"],"/hooks/use-validated-state":[s,e,c,"static/chunks/pages/hooks/use-validated-state-fc8998ad2148299f.js"],"/hooks/use-viewport-size":[s,e,c,"static/chunks/pages/hooks/use-viewport-size-6680ecfddbab061d.js"],"/hooks/use-window-event":[s,e,c,"static/chunks/pages/hooks/use-window-event-0c609bf56c040c05.js"],"/hooks/use-window-scroll":[s,e,c,"static/chunks/pages/hooks/use-window-scroll-94e1846e30b2f4e8.js"],"/others/carousel":[n,s,e,c,y,"static/chunks/pages/others/carousel-9f469c680cff716a.js"],"/others/code-highlight":[s,e,c,"static/chunks/pages/others/code-highlight-e7c1cfe8d37c7e48.js"],"/others/dropzone":["static/chunks/761-35955f10110e3a96.js",s,e,c,"static/css/297e354fa1f5a8f9.css","static/chunks/pages/others/dropzone-2f5faa4a1e839679.js"],"/others/modals":[s,e,c,"static/chunks/pages/others/modals-3796bd3b5eb149dd.js"],"/others/notifications":[s,e,c,"static/chunks/pages/others/notifications-8bdaa14feb703f1c.js"],"/others/nprogress":[s,e,c,"static/chunks/pages/others/nprogress-9339f0c6d1d60119.js"],"/others/spotlight":[s,e,c,"static/chunks/pages/others/spotlight-0f7a2d72c079d247.js"],"/others/tiptap":[g,l,"static/chunks/2799-aa8381ffc0207c6d.js",s,e,c,b,"static/chunks/pages/others/tiptap-16018d3dff2c9bf3.js"],"/overview":[s,e,c,x,"static/chunks/pages/overview-e68183f5eb291db4.js"],"/styles/color-functions":[s,e,c,"static/chunks/pages/styles/color-functions-b25b3bda5a5edf7d.js"],"/styles/css-files-list":[s,e,c,"static/chunks/pages/styles/css-files-list-26e30e6d8ad4f468.js"],"/styles/css-modules":[s,e,c,"static/chunks/pages/styles/css-modules-71ab5ac464180f3e.js"],"/styles/css-variables":[s,e,c,"static/chunks/pages/styles/css-variables-a901387ac3cc0aa4.js"],"/styles/css-variables-list":[s,e,c,"static/chunks/pages/styles/css-variables-list-872e863777de53b7.js"],"/styles/data-attributes":[s,e,c,"static/chunks/pages/styles/data-attributes-25cf7c4084961dfc.js"],"/styles/global-styles":[s,e,c,"static/chunks/pages/styles/global-styles-95fe47c111c99603.js"],"/styles/postcss-preset":[s,e,c,"static/chunks/pages/styles/postcss-preset-e3502a0aafaba69b.js"],"/styles/rem":[s,e,c,"static/chunks/pages/styles/rem-c5e0739c34aa0a91.js"],"/styles/responsive":[s,e,c,"static/chunks/pages/styles/responsive-750ebbfd489bd1ce.js"],"/styles/rtl":[s,e,c,"static/chunks/pages/styles/rtl-d40ddfbe0d505869.js"],"/styles/style":[s,e,c,"static/chunks/pages/styles/style-59c48df9291ab1af.js"],"/styles/style-props":[s,e,c,"static/chunks/pages/styles/style-props-1fb959cd43247984.js"],"/styles/styles-api":[s,e,c,"static/chunks/pages/styles/styles-api-5dbfd5697d009a06.js"],"/styles/styles-performance":[s,e,c,"static/chunks/pages/styles/styles-performance-0ae4bc47a8fe3491.js"],"/styles/unstyled":[s,e,c,"static/chunks/pages/styles/unstyled-f1dab855a1ec0cce.js"],"/styles/vanilla-extract":[s,e,c,"static/chunks/pages/styles/vanilla-extract-2d99f12f2f66ae75.js"],"/styles/variants-sizes":[s,e,c,"static/chunks/pages/styles/variants-sizes-c932d28197612170.js"],"/templates-usage":[s,e,c,"static/chunks/pages/templates-usage-8bb5f21805048000.js"],"/theming/color-schemes":[s,e,c,"static/chunks/pages/theming/color-schemes-c986bddd4d4fdcff.js"],"/theming/colors":[s,e,c,x,"static/chunks/pages/theming/colors-e98bfc4e145270b8.js"],"/theming/default-props":[s,e,c,"static/chunks/pages/theming/default-props-ca4da7cae68f8fdb.js"],"/theming/default-theme":[s,e,c,"static/chunks/pages/theming/default-theme-1e7f1a5eb268e915.js"],"/theming/mantine-provider":[s,e,c,"static/chunks/pages/theming/mantine-provider-dbf707fe736eae0f.js"],"/theming/theme-object":[s,e,c,"static/chunks/pages/theming/theme-object-0376ae404aaa70a5.js"],"/theming/typography":[s,e,c,"static/chunks/pages/theming/typography-2397911cfc5ad29c.js"],sortedPages:["/","/404","/_app","/_error","/about","/app-shell","/changelog/7-0-0","/changelog/previous-versions","/colors-generator","/combobox","/contribute","/core/accordion","/core/action-icon","/core/affix","/core/alert","/core/anchor","/core/app-shell","/core/aspect-ratio","/core/autocomplete","/core/avatar","/core/background-image","/core/badge","/core/blockquote","/core/box","/core/breadcrumbs","/core/burger","/core/button","/core/card","/core/center","/core/checkbox","/core/chip","/core/close-button","/core/code","/core/collapse","/core/color-input","/core/color-picker","/core/color-swatch","/core/combobox","/core/container","/core/copy-button","/core/dialog","/core/divider","/core/drawer","/core/fieldset","/core/file-button","/core/file-input","/core/flex","/core/focus-trap","/core/grid","/core/group","/core/highlight","/core/hover-card","/core/image","/core/indicator","/core/input","/core/json-input","/core/kbd","/core/list","/core/loader","/core/loading-overlay","/core/mark","/core/menu","/core/modal","/core/multi-select","/core/native-select","/core/nav-link","/core/notification","/core/number-input","/core/overlay","/core/pagination","/core/paper","/core/password-input","/core/pill","/core/pills-input","/core/pin-input","/core/popover","/core/portal","/core/progress","/core/radio","/core/rating","/core/ring-progress","/core/scroll-area","/core/segmented-control","/core/select","/core/simple-grid","/core/skeleton","/core/slider","/core/space","/core/spoiler","/core/stack","/core/stepper","/core/switch","/core/table","/core/tabs","/core/tags-input","/core/text","/core/text-input","/core/textarea","/core/theme-icon","/core/timeline","/core/title","/core/tooltip","/core/transition","/core/typography-styles-provider","/core/unstyled-button","/core/visually-hidden","/dates/calendar","/dates/date-input","/dates/date-picker","/dates/date-picker-input","/dates/date-time-picker","/dates/dates-provider","/dates/getting-started","/dates/month-picker","/dates/month-picker-input","/dates/time-input","/dates/year-picker","/dates/year-picker-input","/form/create-form-context","/form/errors","/form/nested","/form/recipes","/form/status","/form/use-form","/form/validation","/form/validators","/form/values","/getting-started","/guides/6x-to-7x","/guides/gatsby","/guides/icons","/guides/javascript","/guides/jest","/guides/next","/guides/polymorphic","/guides/redwood","/guides/remix","/guides/storybook","/guides/typescript","/guides/vite","/hooks/use-click-outside","/hooks/use-clipboard","/hooks/use-color-scheme","/hooks/use-counter","/hooks/use-debounced-state","/hooks/use-debounced-value","/hooks/use-did-update","/hooks/use-disclosure","/hooks/use-document-title","/hooks/use-document-visibility","/hooks/use-element-size","/hooks/use-event-listener","/hooks/use-eye-dropper","/hooks/use-favicon","/hooks/use-focus-return","/hooks/use-focus-trap","/hooks/use-focus-within","/hooks/use-force-update","/hooks/use-fullscreen","/hooks/use-hash","/hooks/use-headroom","/hooks/use-hotkeys","/hooks/use-hover","/hooks/use-id","/hooks/use-idle","/hooks/use-input-state","/hooks/use-intersection","/hooks/use-interval","/hooks/use-isomorphic-effect","/hooks/use-list-state","/hooks/use-local-storage","/hooks/use-logger","/hooks/use-media-query","/hooks/use-merged-ref","/hooks/use-mouse","/hooks/use-move","/hooks/use-network","/hooks/use-os","/hooks/use-page-leave","/hooks/use-pagination","/hooks/use-previous","/hooks/use-queue","/hooks/use-reduced-motion","/hooks/use-resize-observer","/hooks/use-scroll-into-view","/hooks/use-set-state","/hooks/use-shallow-effect","/hooks/use-text-selection","/hooks/use-timeout","/hooks/use-toggle","/hooks/use-uncontrolled","/hooks/use-validated-state","/hooks/use-viewport-size","/hooks/use-window-event","/hooks/use-window-scroll","/others/carousel","/others/code-highlight","/others/dropzone","/others/modals","/others/notifications","/others/nprogress","/others/spotlight","/others/tiptap","/overview","/styles/color-functions","/styles/css-files-list","/styles/css-modules","/styles/css-variables","/styles/css-variables-list","/styles/data-attributes","/styles/global-styles","/styles/postcss-preset","/styles/rem","/styles/responsive","/styles/rtl","/styles/style","/styles/style-props","/styles/styles-api","/styles/styles-performance","/styles/unstyled","/styles/vanilla-extract","/styles/variants-sizes","/templates-usage","/theming/color-schemes","/theming/colors","/theming/default-props","/theming/default-theme","/theming/mantine-provider","/theming/theme-object","/theming/typography"]}}("static/chunks/1300-a1599e086a440f9c.js","static/css/38da4a8345682411.css","static/chunks/178-67b6774636d9bfd4.js","static/chunks/3773-9b101a05417aee65.js","static/chunks/1757-14b12002dae37571.js","static/chunks/4485-54fa58b62686123b.js","static/chunks/8945-dced5d0b206191b0.js","static/chunks/4136-6fb5e5d743480d39.js","static/chunks/1080-f9995edff1a2d0ca.js","static/chunks/213-b3723d19cd82f7df.js","static/chunks/9935-a1af4e961299387a.js","static/chunks/7567-d1146e91d1df2c98.js","static/chunks/6-97d8f3d87523372c.js","static/chunks/1035-2078d70242b9f415.js","static/chunks/849baa33-4b0f9eb87903687b.js","static/chunks/2085-bfeaa2af84065661.js","static/chunks/2381-9c97f560cddb868b.js","static/chunks/8126-f58446ccde90abe6.js","static/chunks/7285-35f2fd967e6310ce.js","static/chunks/1347-e8c7bcc60db06dc5.js","static/chunks/9077-a05e7f12524f0a6d.js","static/chunks/9-1e1cb50a06718751.js","static/css/e5f75161ef22fdc6.css"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(s,e,c,t,a,o,i,r,u,n,h,d,p,k,g,l,b,f,j,m,y,v,x){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[g,n,l,"static/chunks/4039-ad1c33a04f9417e5.js",s,t,a,o,i,h,d,p,b,f,j,"static/css/0b42572dfc0685d6.css","static/chunks/pages/index-430ac76e0cbf38c6.js"],"/404":[s,e,c,"static/chunks/pages/404-603c2fab3de119a8.js"],"/_error":["static/chunks/pages/_error-02cc11fd74b4e5ff.js"],"/about":[s,e,c,"static/css/2c53d1beec745d31.css","static/chunks/pages/about-4f735a0558cb5bb6.js"],"/app-shell":[p,"static/css/1593bbbe851036b7.css","static/chunks/pages/app-shell-61046ac56d7d6c3b.js"],"/changelog/7-0-0":[r,n,s,e,c,o,m,y,"static/chunks/pages/changelog/7-0-0-f8f598f970f00b71.js"],"/changelog/previous-versions":[s,e,c,"static/chunks/pages/changelog/previous-versions-e82db25d087ccbfa.js"],"/colors-generator":["static/chunks/1333-769c51c7075e50db.js","static/css/2f7f36020c7f1b11.css","static/chunks/pages/colors-generator-7af0078c6aa3ab46.js"],"/combobox":[o,"static/css/a31c84cc8d06a9d2.css","static/chunks/pages/combobox-b7914902b2865404.js"],"/contribute":[s,e,c,"static/chunks/pages/contribute-3ca7be664099b35c.js"],"/core/accordion":[s,e,c,f,"static/chunks/pages/core/accordion-b4b99801acd7b315.js"],"/core/action-icon":[s,e,c,"static/chunks/pages/core/action-icon-79b1c0fc510cafd4.js"],"/core/affix":[s,e,c,"static/chunks/pages/core/affix-d13994f8b19d8be5.js"],"/core/alert":[s,e,c,"static/chunks/pages/core/alert-cd9141c6f299bea6.js"],"/core/anchor":[s,e,c,"static/chunks/pages/core/anchor-82e9b620f59b11b8.js"],"/core/app-shell":[s,e,c,"static/chunks/pages/core/app-shell-75db0286f5916356.js"],"/core/aspect-ratio":[s,e,c,"static/chunks/pages/core/aspect-ratio-3e67a35da570053e.js"],"/core/autocomplete":[s,e,c,o,"static/chunks/pages/core/autocomplete-086087a4f31b1274.js"],"/core/avatar":[s,e,c,"static/chunks/pages/core/avatar-cd30a65e8ae692b1.js"],"/core/background-image":[s,e,c,"static/chunks/pages/core/background-image-ba0f458efeb0b6aa.js"],"/core/badge":[s,e,c,"static/chunks/pages/core/badge-235a857d9f52bf11.js"],"/core/blockquote":[s,e,c,"static/chunks/pages/core/blockquote-3452a869af889766.js"],"/core/box":[s,e,c,"static/chunks/pages/core/box-8ea1344bcce0d016.js"],"/core/breadcrumbs":[s,e,c,"static/chunks/pages/core/breadcrumbs-d772d03e29259639.js"],"/core/burger":[s,e,c,"static/chunks/pages/core/burger-ac24c3a6db416c1c.js"],"/core/button":[s,e,c,"static/chunks/pages/core/button-a33e546d38fe0d6a.js"],"/core/card":[s,e,c,"static/chunks/pages/core/card-c8480d9c06d586c5.js"],"/core/center":[s,e,c,"static/chunks/pages/core/center-54e40d7f26b7f1d1.js"],"/core/checkbox":[s,e,c,"static/chunks/pages/core/checkbox-824905278fff7202.js"],"/core/chip":[s,e,c,"static/chunks/pages/core/chip-4ee6b49268677a0f.js"],"/core/close-button":[s,e,c,"static/chunks/pages/core/close-button-23b40e01229b2d7e.js"],"/core/code":[s,e,c,"static/chunks/pages/core/code-1ff6131ae9165253.js"],"/core/collapse":[s,e,c,"static/chunks/pages/core/collapse-026c69898bac2522.js"],"/core/color-input":[s,e,c,"static/chunks/pages/core/color-input-27686785638c1f19.js"],"/core/color-picker":[s,e,c,"static/chunks/pages/core/color-picker-8bb28a401b18ebed.js"],"/core/color-swatch":[s,e,c,"static/chunks/pages/core/color-swatch-76eda182c8cba7a5.js"],"/core/combobox":[s,e,c,o,v,"static/chunks/pages/core/combobox-ed1d83eb2b961226.js"],"/core/container":[s,e,c,"static/chunks/pages/core/container-bb8102414079847a.js"],"/core/copy-button":[s,e,c,"static/chunks/pages/core/copy-button-6b75a8c1ae5e1b5a.js"],"/core/dialog":[s,e,c,"static/chunks/pages/core/dialog-b9f2adfdfd793904.js"],"/core/divider":[s,e,c,"static/chunks/pages/core/divider-949faadea829b4ec.js"],"/core/drawer":[s,e,c,a,i,p,"static/chunks/pages/core/drawer-0de49e704be8fb3b.js"],"/core/fieldset":[s,e,c,"static/chunks/pages/core/fieldset-2cbcd26323df7e0b.js"],"/core/file-button":[s,e,c,"static/chunks/pages/core/file-button-f1622f7dc65f0f0d.js"],"/core/file-input":[s,e,c,"static/chunks/pages/core/file-input-551f0a01874cdf8d.js"],"/core/flex":[s,e,c,"static/chunks/pages/core/flex-892ea82bf3fc7ea8.js"],"/core/focus-trap":[s,e,c,"static/chunks/pages/core/focus-trap-16614a71ce652aeb.js"],"/core/grid":[s,e,c,"static/chunks/pages/core/grid-8bdd544306ab120e.js"],"/core/group":[s,e,c,"static/chunks/pages/core/group-ab5178f5d9000411.js"],"/core/highlight":[s,e,c,"static/chunks/pages/core/highlight-fb9dbf4ad91d443e.js"],"/core/hover-card":[s,e,c,"static/chunks/pages/core/hover-card-d3b3454d7ebb9dff.js"],"/core/image":[s,e,c,"static/chunks/pages/core/image-f988d992e3028dbf.js"],"/core/indicator":[s,e,c,"static/chunks/pages/core/indicator-be8a0627db682baa.js"],"/core/input":["static/chunks/8015-669307b9cf02b7fe.js",s,e,c,"static/chunks/pages/core/input-1b125b6fb4c0178d.js"],"/core/json-input":[s,e,c,"static/chunks/pages/core/json-input-8393e299acdc0341.js"],"/core/kbd":[s,e,c,"static/chunks/pages/core/kbd-d240fc4be69b7406.js"],"/core/list":[s,e,c,"static/chunks/pages/core/list-8376dd80ed78ec4b.js"],"/core/loader":[s,e,c,"static/chunks/pages/core/loader-2eed1da239664aeb.js"],"/core/loading-overlay":[s,e,c,a,i,"static/chunks/pages/core/loading-overlay-4b61a17d71713d8c.js"],"/core/mark":[s,e,c,"static/chunks/pages/core/mark-ffe8bf0434c03f92.js"],"/core/menu":[s,e,c,"static/chunks/pages/core/menu-fc9f267dbbc00c03.js"],"/core/modal":[s,e,c,a,i,"static/chunks/pages/core/modal-b80f055f1e8880a7.js"],"/core/multi-select":[s,e,c,o,j,"static/chunks/pages/core/multi-select-6ccab9bb88319b43.js"],"/core/native-select":[s,e,c,"static/chunks/pages/core/native-select-47bd241dbc0df0b4.js"],"/core/nav-link":[s,e,c,"static/chunks/pages/core/nav-link-a62ce78c1e0a69a9.js"],"/core/notification":[s,e,c,"static/chunks/pages/core/notification-dc748cf3d494da97.js"],"/core/number-input":[r,s,e,c,"static/chunks/pages/core/number-input-57173b1bc35757fe.js"],"/core/overlay":[s,e,c,"static/chunks/pages/core/overlay-2df8c5a21a1b6265.js"],"/core/pagination":[s,e,c,d,"static/chunks/pages/core/pagination-612488ec5cdc1903.js"],"/core/paper":[s,e,c,"static/chunks/pages/core/paper-d658195e4c66a4e0.js"],"/core/password-input":[s,e,c,"static/chunks/pages/core/password-input-ddb449653c7b0453.js"],"/core/pill":[s,e,c,"static/chunks/pages/core/pill-986a825a18bb84a3.js"],"/core/pills-input":[s,e,c,o,v,"static/chunks/pages/core/pills-input-1077e0827ab25d6a.js"],"/core/pin-input":[s,e,c,"static/chunks/pages/core/pin-input-3ae37cb4e3944fa1.js"],"/core/popover":[s,e,c,"static/chunks/pages/core/popover-2f7236164916e6a2.js"],"/core/portal":[s,e,c,"static/chunks/pages/core/portal-9deac8e0b0bcbcdf.js"],"/core/progress":[s,e,c,"static/chunks/pages/core/progress-8fb333608ddcc74f.js"],"/core/radio":[s,e,c,"static/chunks/pages/core/radio-35b0475a2e298fc1.js"],"/core/rating":[s,e,c,"static/chunks/pages/core/rating-ec38a83baa651be2.js"],"/core/ring-progress":[s,e,c,"static/chunks/pages/core/ring-progress-24518559ad47be56.js"],"/core/scroll-area":[s,e,c,"static/chunks/pages/core/scroll-area-1d5ff333ecc4ebe6.js"],"/core/segmented-control":[s,e,c,"static/chunks/pages/core/segmented-control-f37e7ca88ae2ee27.js"],"/core/select":[s,e,c,o,"static/chunks/pages/core/select-dd55e68b93d9f6cf.js"],"/core/simple-grid":[s,e,c,"static/chunks/pages/core/simple-grid-b89732a79f1fe01d.js"],"/core/skeleton":[s,e,c,"static/chunks/pages/core/skeleton-96afcb456c337307.js"],"/core/slider":[s,e,c,"static/chunks/pages/core/slider-1be63797778126a7.js"],"/core/space":[s,e,c,"static/chunks/pages/core/space-40fe502bbbca6d4c.js"],"/core/spoiler":[s,e,c,"static/chunks/pages/core/spoiler-d359d8ddbe1a295d.js"],"/core/stack":[s,e,c,"static/chunks/pages/core/stack-da1ec9dca090055f.js"],"/core/stepper":[s,e,c,"static/chunks/pages/core/stepper-83022ee5bad2e6af.js"],"/core/switch":[s,e,c,"static/chunks/pages/core/switch-f2596308b6d41afa.js"],"/core/table":[s,e,c,"static/chunks/pages/core/table-98fde90c1a0f0a65.js"],"/core/tabs":[s,e,c,"static/chunks/pages/core/tabs-baa5d76ab6567869.js"],"/core/tags-input":[s,e,c,o,m,"static/chunks/pages/core/tags-input-71009298ace757e0.js"],"/core/text":[s,e,c,"static/chunks/pages/core/text-98057227ac27eeb2.js"],"/core/text-input":[s,e,c,"static/chunks/pages/core/text-input-b4ba27109341fe04.js"],"/core/textarea":[s,e,c,"static/chunks/pages/core/textarea-337fe3c42e9cc522.js"],"/core/theme-icon":[s,e,c,"static/chunks/pages/core/theme-icon-6fa8a65f3081967b.js"],"/core/timeline":[s,e,c,"static/chunks/pages/core/timeline-8d8da156751d8a75.js"],"/core/title":[s,e,c,"static/chunks/pages/core/title-8dae48ba8bd0bd6e.js"],"/core/tooltip":[s,e,c,"static/chunks/pages/core/tooltip-5caa911ef4125ef8.js"],"/core/transition":[s,e,c,"static/chunks/pages/core/transition-dc716c3c449ce1d2.js"],"/core/typography-styles-provider":[s,e,c,"static/chunks/pages/core/typography-styles-provider-1bdf6cbeedd4f8bb.js"],"/core/unstyled-button":[s,e,c,"static/chunks/pages/core/unstyled-button-7146d474dae0fe5b.js"],"/core/visually-hidden":[s,e,c,"static/chunks/pages/core/visually-hidden-dbd5f7abc439afe7.js"],"/dates/calendar":[s,e,c,t,"static/chunks/pages/dates/calendar-338fc214c6fde174.js"],"/dates/date-input":[s,e,c,t,"static/chunks/pages/dates/date-input-3a36cdfb91382cfe.js"],"/dates/date-picker":[s,e,c,t,k,"static/chunks/pages/dates/date-picker-2840ac260c27d407.js"],"/dates/date-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/date-picker-input-5cb186eebec60a9f.js"],"/dates/date-time-picker":[s,e,c,t,h,"static/chunks/pages/dates/date-time-picker-84bab5e7092c06d1.js"],"/dates/dates-provider":[s,e,c,t,h,"static/chunks/pages/dates/dates-provider-d22e75c2fc37e763.js"],"/dates/getting-started":[s,e,c,t,u,"static/chunks/pages/dates/getting-started-06a462ad7761843d.js"],"/dates/month-picker":[s,e,c,t,k,"static/chunks/pages/dates/month-picker-d4bfdf5e6439984a.js"],"/dates/month-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/month-picker-input-0bec4416ffcce914.js"],"/dates/time-input":[s,e,c,"static/chunks/pages/dates/time-input-680f95fb443f945b.js"],"/dates/year-picker":[s,e,c,t,k,"static/chunks/pages/dates/year-picker-ab25c5daa2c424c0.js"],"/dates/year-picker-input":[s,e,c,t,u,"static/chunks/pages/dates/year-picker-input-7dd09d975f18370a.js"],"/form/create-form-context":[s,e,c,"static/chunks/pages/form/create-form-context-7c64b8d3a043b263.js"],"/form/errors":[s,e,c,"static/chunks/pages/form/errors-9fa5beb0bc21f923.js"],"/form/nested":[s,e,c,a,"static/chunks/pages/form/nested-a27914bb9f6d9ba5.js"],"/form/recipes":["static/chunks/3c425cc6-dcff8cac03b5558f.js","static/chunks/1531-11d35445c5475ac1.js",s,e,c,a,"static/chunks/pages/form/recipes-f5cf776e291626cf.js"],"/form/status":[s,e,c,a,"static/chunks/pages/form/status-4f09aec8dc1b7727.js"],"/form/use-form":[s,e,c,a,"static/chunks/pages/form/use-form-a5f21be50ed46448.js"],"/form/validation":[r,"static/chunks/5060-7540dfb08e46808c.js",s,e,c,a,"static/chunks/pages/form/validation-99f0e1ec19e372aa.js"],"/form/validators":[r,s,e,c,a,"static/chunks/pages/form/validators-26a2fbd77eb58593.js"],"/form/values":[s,e,c,a,"static/chunks/pages/form/values-5b67f1ee8f01ba0e.js"],"/getting-started":[s,e,c,"static/css/7eac7ac93049bfac.css","static/chunks/pages/getting-started-d599a58b1b2d57e5.js"],"/guides/6x-to-7x":[s,e,c,"static/chunks/pages/guides/6x-to-7x-dd0ccf2353b8f509.js"],"/guides/gatsby":[s,e,c,"static/chunks/pages/guides/gatsby-1849339aaa7d5b04.js"],"/guides/icons":[s,e,c,"static/chunks/pages/guides/icons-bb3bdf860e34f5f5.js"],"/guides/javascript":[s,e,c,"static/chunks/pages/guides/javascript-6451fb2a4105e6b9.js"],"/guides/jest":[s,e,c,"static/chunks/pages/guides/jest-a2c47b0728b8b4eb.js"],"/guides/next":[s,e,c,"static/chunks/pages/guides/next-670e1444622eb2a6.js"],"/guides/polymorphic":[s,e,c,"static/chunks/pages/guides/polymorphic-6869c2a748b698b0.js"],"/guides/redwood":[s,e,c,"static/chunks/pages/guides/redwood-fde4340fd64504a1.js"],"/guides/remix":[s,e,c,"static/chunks/pages/guides/remix-6f4ef41250d55d42.js"],"/guides/storybook":[s,e,c,"static/chunks/pages/guides/storybook-49240b71a1938687.js"],"/guides/typescript":[s,e,c,"static/chunks/pages/guides/typescript-a1d7cdd0bae95894.js"],"/guides/vite":[s,e,c,"static/chunks/pages/guides/vite-234e7409487e5120.js"],"/hooks/use-click-outside":[s,e,c,"static/chunks/pages/hooks/use-click-outside-bda81bf5d77ae3ac.js"],"/hooks/use-clipboard":[s,e,c,"static/chunks/pages/hooks/use-clipboard-de060be53aa6e8eb.js"],"/hooks/use-color-scheme":[s,e,c,"static/chunks/pages/hooks/use-color-scheme-ec0707a6f8037d97.js"],"/hooks/use-counter":[s,e,c,"static/chunks/pages/hooks/use-counter-4cc3020cb3b5418d.js"],"/hooks/use-debounced-state":[s,e,c,"static/chunks/pages/hooks/use-debounced-state-5d0d2dbf56edf5d2.js"],"/hooks/use-debounced-value":[s,e,c,"static/chunks/pages/hooks/use-debounced-value-e930c8268c0b0b9b.js"],"/hooks/use-did-update":[s,e,c,"static/chunks/pages/hooks/use-did-update-09efaaceee1f1437.js"],"/hooks/use-disclosure":[s,e,c,"static/chunks/pages/hooks/use-disclosure-9a81a9feadfe6ccb.js"],"/hooks/use-document-title":[s,e,c,"static/chunks/pages/hooks/use-document-title-d205f2419c6eca40.js"],"/hooks/use-document-visibility":[s,e,c,"static/chunks/pages/hooks/use-document-visibility-8fd8db06d182cdf5.js"],"/hooks/use-element-size":[s,e,c,"static/chunks/pages/hooks/use-element-size-c702e63072750746.js"],"/hooks/use-event-listener":[s,e,c,"static/chunks/pages/hooks/use-event-listener-add2decb0f0ef2dd.js"],"/hooks/use-eye-dropper":[s,e,c,"static/chunks/pages/hooks/use-eye-dropper-e6297428dc9e25ac.js"],"/hooks/use-favicon":[s,e,c,"static/chunks/pages/hooks/use-favicon-22724936dbdfc3df.js"],"/hooks/use-focus-return":[s,e,c,a,i,"static/chunks/pages/hooks/use-focus-return-2288497a7a230eb3.js"],"/hooks/use-focus-trap":[s,e,c,"static/chunks/pages/hooks/use-focus-trap-32fc5ea080ae67af.js"],"/hooks/use-focus-within":[s,e,c,"static/chunks/pages/hooks/use-focus-within-4b258234dbf7f56f.js"],"/hooks/use-force-update":[s,e,c,"static/chunks/pages/hooks/use-force-update-72423505c6753afb.js"],"/hooks/use-fullscreen":[s,e,c,"static/chunks/pages/hooks/use-fullscreen-f7e6b3248e9b038e.js"],"/hooks/use-hash":[s,e,c,"static/chunks/pages/hooks/use-hash-8ba8b4f10370c000.js"],"/hooks/use-headroom":[s,e,c,"static/chunks/pages/hooks/use-headroom-fb83e02d2553a017.js"],"/hooks/use-hotkeys":[s,e,c,"static/chunks/pages/hooks/use-hotkeys-7e0da88c9121f7d9.js"],"/hooks/use-hover":[s,e,c,"static/chunks/pages/hooks/use-hover-47e5ac0bde18483d.js"],"/hooks/use-id":[s,e,c,"static/chunks/pages/hooks/use-id-694117ad3971c61e.js"],"/hooks/use-idle":[s,e,c,"static/chunks/pages/hooks/use-idle-b8a11ed995863537.js"],"/hooks/use-input-state":[s,e,c,"static/chunks/pages/hooks/use-input-state-9b37edeb205fd501.js"],"/hooks/use-intersection":[s,e,c,"static/chunks/pages/hooks/use-intersection-71e56d31d6ed4af8.js"],"/hooks/use-interval":[s,e,c,"static/chunks/pages/hooks/use-interval-df9376227430ab78.js"],"/hooks/use-isomorphic-effect":[s,e,c,"static/chunks/pages/hooks/use-isomorphic-effect-480bc69564754df6.js"],"/hooks/use-list-state":[s,e,c,"static/chunks/pages/hooks/use-list-state-b336d42abddc60b3.js"],"/hooks/use-local-storage":[s,e,c,"static/chunks/pages/hooks/use-local-storage-5bd05f1496e68b35.js"],"/hooks/use-logger":[s,e,c,"static/chunks/pages/hooks/use-logger-ccffe95bbcba7589.js"],"/hooks/use-media-query":[s,e,c,"static/chunks/pages/hooks/use-media-query-8de0c29783d41868.js"],"/hooks/use-merged-ref":[s,e,c,"static/chunks/pages/hooks/use-merged-ref-1ee247cf1271bf95.js"],"/hooks/use-mouse":[s,e,c,"static/chunks/pages/hooks/use-mouse-568687c99f8bdf26.js"],"/hooks/use-move":[s,e,c,"static/chunks/pages/hooks/use-move-6c2302746de1b727.js"],"/hooks/use-network":[s,e,c,"static/chunks/pages/hooks/use-network-c71ec4f75dbfd106.js"],"/hooks/use-os":[s,e,c,"static/chunks/pages/hooks/use-os-a559b776eaff431d.js"],"/hooks/use-page-leave":[s,e,c,"static/chunks/pages/hooks/use-page-leave-90fb520af0bb8d85.js"],"/hooks/use-pagination":[s,e,c,d,"static/chunks/pages/hooks/use-pagination-3b99ca7c5e4530f9.js"],"/hooks/use-previous":[s,e,c,"static/chunks/pages/hooks/use-previous-ec274840b068eda0.js"],"/hooks/use-queue":[s,e,c,"static/chunks/pages/hooks/use-queue-82c72f7451ce8dd5.js"],"/hooks/use-reduced-motion":[s,e,c,"static/chunks/pages/hooks/use-reduced-motion-3f7e2612e2d15c8a.js"],"/hooks/use-resize-observer":[s,e,c,"static/chunks/pages/hooks/use-resize-observer-dcdaebfe6625c7a8.js"],"/hooks/use-scroll-into-view":[s,e,c,"static/chunks/pages/hooks/use-scroll-into-view-7f10e118e6507817.js"],"/hooks/use-set-state":[s,e,c,"static/chunks/pages/hooks/use-set-state-7978c1afd5a50761.js"],"/hooks/use-shallow-effect":[s,e,c,"static/chunks/pages/hooks/use-shallow-effect-2a23600a5117eddc.js"],"/hooks/use-text-selection":[s,e,c,"static/chunks/pages/hooks/use-text-selection-d64f768b2561c2e6.js"],"/hooks/use-timeout":[s,e,c,"static/chunks/pages/hooks/use-timeout-bdc6d315b1e3c533.js"],"/hooks/use-toggle":[s,e,c,"static/chunks/pages/hooks/use-toggle-fb8f3fab86583da1.js"],"/hooks/use-uncontrolled":[s,e,c,"static/chunks/pages/hooks/use-uncontrolled-03c95ba36e5aca76.js"],"/hooks/use-validated-state":[s,e,c,"static/chunks/pages/hooks/use-validated-state-fc8998ad2148299f.js"],"/hooks/use-viewport-size":[s,e,c,"static/chunks/pages/hooks/use-viewport-size-6680ecfddbab061d.js"],"/hooks/use-window-event":[s,e,c,"static/chunks/pages/hooks/use-window-event-0c609bf56c040c05.js"],"/hooks/use-window-scroll":[s,e,c,"static/chunks/pages/hooks/use-window-scroll-94e1846e30b2f4e8.js"],"/others/carousel":[n,s,e,c,y,"static/chunks/pages/others/carousel-9f469c680cff716a.js"],"/others/code-highlight":[s,e,c,"static/chunks/pages/others/code-highlight-e7c1cfe8d37c7e48.js"],"/others/dropzone":["static/chunks/761-35955f10110e3a96.js",s,e,c,"static/css/297e354fa1f5a8f9.css","static/chunks/pages/others/dropzone-2f5faa4a1e839679.js"],"/others/modals":[s,e,c,"static/chunks/pages/others/modals-3796bd3b5eb149dd.js"],"/others/notifications":[s,e,c,"static/chunks/pages/others/notifications-8bdaa14feb703f1c.js"],"/others/nprogress":[s,e,c,"static/chunks/pages/others/nprogress-9339f0c6d1d60119.js"],"/others/spotlight":[s,e,c,"static/chunks/pages/others/spotlight-0f7a2d72c079d247.js"],"/others/tiptap":[g,l,"static/chunks/2799-aa8381ffc0207c6d.js",s,e,c,b,"static/chunks/pages/others/tiptap-16018d3dff2c9bf3.js"],"/overview":[s,e,c,x,"static/chunks/pages/overview-e68183f5eb291db4.js"],"/styles/color-functions":[s,e,c,"static/chunks/pages/styles/color-functions-b25b3bda5a5edf7d.js"],"/styles/css-files-list":[s,e,c,"static/chunks/pages/styles/css-files-list-26e30e6d8ad4f468.js"],"/styles/css-modules":[s,e,c,"static/chunks/pages/styles/css-modules-71ab5ac464180f3e.js"],"/styles/css-variables":[s,e,c,"static/chunks/pages/styles/css-variables-a901387ac3cc0aa4.js"],"/styles/css-variables-list":[s,e,c,"static/chunks/pages/styles/css-variables-list-872e863777de53b7.js"],"/styles/data-attributes":[s,e,c,"static/chunks/pages/styles/data-attributes-25cf7c4084961dfc.js"],"/styles/global-styles":[s,e,c,"static/chunks/pages/styles/global-styles-95fe47c111c99603.js"],"/styles/postcss-preset":[s,e,c,"static/chunks/pages/styles/postcss-preset-e3502a0aafaba69b.js"],"/styles/rem":[s,e,c,"static/chunks/pages/styles/rem-c5e0739c34aa0a91.js"],"/styles/responsive":[s,e,c,"static/chunks/pages/styles/responsive-750ebbfd489bd1ce.js"],"/styles/rtl":[s,e,c,"static/chunks/pages/styles/rtl-d40ddfbe0d505869.js"],"/styles/style":[s,e,c,"static/chunks/pages/styles/style-59c48df9291ab1af.js"],"/styles/style-props":[s,e,c,"static/chunks/pages/styles/style-props-1fb959cd43247984.js"],"/styles/styles-api":[s,e,c,"static/chunks/pages/styles/styles-api-5dbfd5697d009a06.js"],"/styles/styles-performance":[s,e,c,"static/chunks/pages/styles/styles-performance-0ae4bc47a8fe3491.js"],"/styles/unstyled":[s,e,c,"static/chunks/pages/styles/unstyled-f1dab855a1ec0cce.js"],"/styles/vanilla-extract":[s,e,c,"static/chunks/pages/styles/vanilla-extract-2d99f12f2f66ae75.js"],"/styles/variants-sizes":[s,e,c,"static/chunks/pages/styles/variants-sizes-c932d28197612170.js"],"/templates-usage":[s,e,c,"static/chunks/pages/templates-usage-8bb5f21805048000.js"],"/theming/color-schemes":[s,e,c,"static/chunks/pages/theming/color-schemes-c986bddd4d4fdcff.js"],"/theming/colors":[s,e,c,x,"static/chunks/pages/theming/colors-e98bfc4e145270b8.js"],"/theming/default-props":[s,e,c,"static/chunks/pages/theming/default-props-435f082c9754bd64.js"],"/theming/default-theme":[s,e,c,"static/chunks/pages/theming/default-theme-1e7f1a5eb268e915.js"],"/theming/mantine-provider":[s,e,c,"static/chunks/pages/theming/mantine-provider-816e166cf579a4c0.js"],"/theming/theme-object":[s,e,c,"static/chunks/pages/theming/theme-object-0376ae404aaa70a5.js"],"/theming/typography":[s,e,c,"static/chunks/pages/theming/typography-2397911cfc5ad29c.js"],sortedPages:["/","/404","/_app","/_error","/about","/app-shell","/changelog/7-0-0","/changelog/previous-versions","/colors-generator","/combobox","/contribute","/core/accordion","/core/action-icon","/core/affix","/core/alert","/core/anchor","/core/app-shell","/core/aspect-ratio","/core/autocomplete","/core/avatar","/core/background-image","/core/badge","/core/blockquote","/core/box","/core/breadcrumbs","/core/burger","/core/button","/core/card","/core/center","/core/checkbox","/core/chip","/core/close-button","/core/code","/core/collapse","/core/color-input","/core/color-picker","/core/color-swatch","/core/combobox","/core/container","/core/copy-button","/core/dialog","/core/divider","/core/drawer","/core/fieldset","/core/file-button","/core/file-input","/core/flex","/core/focus-trap","/core/grid","/core/group","/core/highlight","/core/hover-card","/core/image","/core/indicator","/core/input","/core/json-input","/core/kbd","/core/list","/core/loader","/core/loading-overlay","/core/mark","/core/menu","/core/modal","/core/multi-select","/core/native-select","/core/nav-link","/core/notification","/core/number-input","/core/overlay","/core/pagination","/core/paper","/core/password-input","/core/pill","/core/pills-input","/core/pin-input","/core/popover","/core/portal","/core/progress","/core/radio","/core/rating","/core/ring-progress","/core/scroll-area","/core/segmented-control","/core/select","/core/simple-grid","/core/skeleton","/core/slider","/core/space","/core/spoiler","/core/stack","/core/stepper","/core/switch","/core/table","/core/tabs","/core/tags-input","/core/text","/core/text-input","/core/textarea","/core/theme-icon","/core/timeline","/core/title","/core/tooltip","/core/transition","/core/typography-styles-provider","/core/unstyled-button","/core/visually-hidden","/dates/calendar","/dates/date-input","/dates/date-picker","/dates/date-picker-input","/dates/date-time-picker","/dates/dates-provider","/dates/getting-started","/dates/month-picker","/dates/month-picker-input","/dates/time-input","/dates/year-picker","/dates/year-picker-input","/form/create-form-context","/form/errors","/form/nested","/form/recipes","/form/status","/form/use-form","/form/validation","/form/validators","/form/values","/getting-started","/guides/6x-to-7x","/guides/gatsby","/guides/icons","/guides/javascript","/guides/jest","/guides/next","/guides/polymorphic","/guides/redwood","/guides/remix","/guides/storybook","/guides/typescript","/guides/vite","/hooks/use-click-outside","/hooks/use-clipboard","/hooks/use-color-scheme","/hooks/use-counter","/hooks/use-debounced-state","/hooks/use-debounced-value","/hooks/use-did-update","/hooks/use-disclosure","/hooks/use-document-title","/hooks/use-document-visibility","/hooks/use-element-size","/hooks/use-event-listener","/hooks/use-eye-dropper","/hooks/use-favicon","/hooks/use-focus-return","/hooks/use-focus-trap","/hooks/use-focus-within","/hooks/use-force-update","/hooks/use-fullscreen","/hooks/use-hash","/hooks/use-headroom","/hooks/use-hotkeys","/hooks/use-hover","/hooks/use-id","/hooks/use-idle","/hooks/use-input-state","/hooks/use-intersection","/hooks/use-interval","/hooks/use-isomorphic-effect","/hooks/use-list-state","/hooks/use-local-storage","/hooks/use-logger","/hooks/use-media-query","/hooks/use-merged-ref","/hooks/use-mouse","/hooks/use-move","/hooks/use-network","/hooks/use-os","/hooks/use-page-leave","/hooks/use-pagination","/hooks/use-previous","/hooks/use-queue","/hooks/use-reduced-motion","/hooks/use-resize-observer","/hooks/use-scroll-into-view","/hooks/use-set-state","/hooks/use-shallow-effect","/hooks/use-text-selection","/hooks/use-timeout","/hooks/use-toggle","/hooks/use-uncontrolled","/hooks/use-validated-state","/hooks/use-viewport-size","/hooks/use-window-event","/hooks/use-window-scroll","/others/carousel","/others/code-highlight","/others/dropzone","/others/modals","/others/notifications","/others/nprogress","/others/spotlight","/others/tiptap","/overview","/styles/color-functions","/styles/css-files-list","/styles/css-modules","/styles/css-variables","/styles/css-variables-list","/styles/data-attributes","/styles/global-styles","/styles/postcss-preset","/styles/rem","/styles/responsive","/styles/rtl","/styles/style","/styles/style-props","/styles/styles-api","/styles/styles-performance","/styles/unstyled","/styles/vanilla-extract","/styles/variants-sizes","/templates-usage","/theming/color-schemes","/theming/colors","/theming/default-props","/theming/default-theme","/theming/mantine-provider","/theming/theme-object","/theming/typography"]}}("static/chunks/1300-7220bd7f6a9c82f6.js","static/css/38da4a8345682411.css","static/chunks/178-67b6774636d9bfd4.js","static/chunks/3773-9b101a05417aee65.js","static/chunks/1757-14b12002dae37571.js","static/chunks/4485-54fa58b62686123b.js","static/chunks/8945-dced5d0b206191b0.js","static/chunks/4136-6fb5e5d743480d39.js","static/chunks/1080-f9995edff1a2d0ca.js","static/chunks/213-b3723d19cd82f7df.js","static/chunks/9935-a1af4e961299387a.js","static/chunks/7567-d1146e91d1df2c98.js","static/chunks/6-97d8f3d87523372c.js","static/chunks/1035-2078d70242b9f415.js","static/chunks/849baa33-4b0f9eb87903687b.js","static/chunks/2085-bfeaa2af84065661.js","static/chunks/2381-9c97f560cddb868b.js","static/chunks/8126-f58446ccde90abe6.js","static/chunks/7285-35f2fd967e6310ce.js","static/chunks/1347-e8c7bcc60db06dc5.js","static/chunks/9077-a05e7f12524f0a6d.js","static/chunks/9-1e1cb50a06718751.js","static/css/e5f75161ef22fdc6.css"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/LJ8UVT2kYhT20r4LyREri/_ssgManifest.js b/_next/static/1QUz3aLATlGHLVg4CdVbm/_ssgManifest.js similarity index 100% rename from _next/static/LJ8UVT2kYhT20r4LyREri/_ssgManifest.js rename to _next/static/1QUz3aLATlGHLVg4CdVbm/_ssgManifest.js diff --git a/_next/static/chunks/1300-7220bd7f6a9c82f6.js b/_next/static/chunks/1300-7220bd7f6a9c82f6.js new file mode 100644 index 00000000000..40748422466 --- /dev/null +++ b/_next/static/chunks/1300-7220bd7f6a9c82f6.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1300],{8649:function(e,t,r){"use strict";r.d(t,{$:function(){return B}});var a=r(85893),n=r(67294),o=r(90512),l=r(51227),i=r(82827),s=r(46049),c=r(77048),d=r(74378),u=r(40624),b=r(55899),p=r(65623),m={socialButton:"m-fde4daed",socialButtonSection:"m-1df08738",discordButton:"m-6611c750",twitterButton:"m-a568e357"},f=r(95859),v=r(61830),y=Object.defineProperty,h=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,w=(e,t,r)=>t in e?y(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,O=(e,t)=>{for(var r in t||(t={}))g.call(t,r)&&w(e,r,t[r]);if(h)for(var r of h(t))k.call(t,r)&&w(e,r,t[r]);return e},j=(e,t)=>{var r={};for(var a in e)g.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&h)for(var a of h(e))0>t.indexOf(a)&&k.call(e,a)&&(r[a]=e[a]);return r};function x(e){var{icon:t}=e,r=j(e,["icon"]);return n.createElement(b.z,O({component:"a",target:"_blank",rel:"noopener noreferrer",leftSection:t,radius:"md",classNames:{root:m.socialButton,section:m.socialButtonSection}},r))}function _(e){var{className:t}=e,r=j(e,["className"]);return n.createElement(x,O({className:(0,u.Z)(m.discordButton,t),icon:n.createElement(f.D,{size:16}),href:p.$.discordLink},r),"Join Discord community")}function N(e){var{className:t}=e,r=j(e,["className"]);return n.createElement(x,O({className:(0,u.Z)(m.twitterButton,t),icon:n.createElement(v.Z,{size:16}),href:p.$.twitterLink},r),"Follow Mantine on Twitter")}var P=r(93258),T=r(41664),S=r.n(T),E=r(16951),C=r.n(E);function F(e){let{data:t,title:r}=e,n=t.map((e,t)=>(0,a.jsx)(c.x,{className:C().link,component:"next"===e.type?S():"a",href:e.link,children:e.label},t));return(0,a.jsxs)("div",{className:C().wrapper,children:[(0,a.jsx)(c.x,{className:C().title,children:r}),n]})}let L=[{title:"About",data:[{type:"next",label:"Contribute",link:"/contribute"},{type:"next",label:"About Mantine",link:"/about"},{type:"next",label:"Changelog",link:"/changelog/previous-versions"},{type:"link",label:"Releases",link:p.$.gitHubLinks.releases}]},{title:"Community",data:[{type:"link",label:"Chat on Discord",link:p.$.discordLink},{type:"link",label:"Follow on Twitter",link:p.$.twitterLink},{type:"link",label:"Follow on Github",link:"https://github.com/rtivital"},{type:"link",label:"GitHub discussions",link:p.$.gitHubLinks.discussions}]},{title:"Project",data:[{type:"link",label:"Mantine UI",link:p.$.uiLink},{type:"link",label:"Documentation",link:p.$.docsLink},{type:"link",label:"Github organization",link:p.$.gitHubLinks.organization},{type:"link",label:"npm organization",link:p.$.npmLink}]}];var z=r(80165),I=r.n(z);function B(e){let{withNavbar:t}=e,r=L.map(e=>(0,a.jsx)(F,{data:e.data,title:e.title},e.title));return(0,a.jsxs)("div",{className:I().root,children:[(0,a.jsx)("div",{className:I().spacer}),(0,a.jsx)(l.x,{mod:{"with-navbar":t},className:(0,o.Z)(I().wrapper,i.Z.classNames.fullWidth),children:(0,a.jsxs)(s.W,{size:1100,children:[(0,a.jsxs)("div",{className:I().inner,children:[(0,a.jsxs)("div",{className:I().logoSection,children:[(0,a.jsx)(P.T,{}),(0,a.jsx)(c.x,{className:I().description,fz:"sm",children:"Build fully functional accessible web applications faster than ever"})]}),(0,a.jsx)("div",{className:I().groups,children:r})]}),(0,a.jsx)("div",{className:I().afterFooter,children:(0,a.jsxs)(d.Z,{justify:"space-between",wrap:"wrap",children:[(0,a.jsxs)(c.x,{fz:"xs",className:I().afterFooterNote,children:["Built by ",(0,a.jsx)("a",{href:"https://github.com/rtivital",children:"Vitaly Rtishchev"})," and"," ",(0,a.jsx)("a",{href:"https://github.com/mantinedev/mantine/graphs/contributors",children:"these awesome people"})]}),(0,a.jsxs)("div",{className:I().social,children:[(0,a.jsx)(_,{className:I().socialButton}),(0,a.jsx)(N,{className:I().socialButton})]})]})})]})})]})}},80165:function(e){e.exports={root:"Footer_root__bgmye",spacer:"Footer_spacer__g_thI",wrapper:"Footer_wrapper__chorF",inner:"Footer_inner__Oczlu",logoSection:"Footer_logoSection__VUxg4",description:"Footer_description__b7YOg",title:"Footer_title___pDUp",afterFooter:"Footer_afterFooter__FyXNP",afterFooterNote:"Footer_afterFooterNote__9yART",groups:"Footer_groups__nLTK6",social:"Footer_social__0m1yX",socialButton:"Footer_socialButton__zLzIx"}},16951:function(e){e.exports={wrapper:"LinksGroup_wrapper__54pi4",link:"LinksGroup_link__cg684",title:"LinksGroup_title__maicr"}},46049:function(e,t,r){"use strict";r.d(t,{W:function(){return k}});var a=r(67294),n={root:"m-7485cace"},o=r(75144),l=r(35577),i=r(25637),s=r(51227),c=r(95553),d=r(71350),u=Object.defineProperty,b=Object.getOwnPropertySymbols,p=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable,f=(e,t,r)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,v=(e,t)=>{for(var r in t||(t={}))p.call(t,r)&&f(e,r,t[r]);if(b)for(var r of b(t))m.call(t,r)&&f(e,r,t[r]);return e},y=(e,t)=>{var r={};for(var a in e)p.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&b)for(var a of b(e))0>t.indexOf(a)&&m.call(e,a)&&(r[a]=e[a]);return r};let h={},g=(0,c.Z)((e,{size:t})=>({root:{"--container-size":(0,d.ap)(t,"container-size")}})),k=(0,o.d)((e,t)=>{let r=(0,l.w)("Container",h,e),{classNames:o,className:c,style:d,styles:u,unstyled:b,vars:p,fluid:m}=r,f=y(r,["classNames","className","style","styles","unstyled","vars","fluid"]),k=(0,i.y)({name:"Container",classes:n,props:r,className:c,style:d,classNames:o,styles:u,unstyled:b,vars:p,varsResolver:g});return a.createElement(s.x,v(v({ref:t,mod:{fluid:m}},k("root")),f))});k.classes=n,k.displayName="@mantine/core/Container"},3995:function(e,t,r){"use strict";r.d(t,{m:function(){return em}});var a=r(67294),n=r(32582),o=r(35179),l=r(16371);let[i,s]=(0,l.R)("Tabs component was not found in the tree");var c={root:"m-89d60db1","list--default":"m-576c9d4",list:"m-89d33d6d",panel:"m-b0c91715",tab:"m-4ec4dce6",tabSection:"m-fc420b1f","tab--default":"m-539e827b","list--outline":"m-6772fbd5","tab--outline":"m-b59ab47c","tab--pills":"m-c3381914"},d=r(75144),u=r(35577),b=r(51227),p=Object.defineProperty,m=Object.defineProperties,f=Object.getOwnPropertyDescriptors,v=Object.getOwnPropertySymbols,y=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable,g=(e,t,r)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))y.call(t,r)&&g(e,r,t[r]);if(v)for(var r of v(t))h.call(t,r)&&g(e,r,t[r]);return e},w=(e,t)=>m(e,f(t)),O=(e,t)=>{var r={};for(var a in e)y.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&v)for(var a of v(e))0>t.indexOf(a)&&h.call(e,a)&&(r[a]=e[a]);return r};let j={},x=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsList",j,e),{children:n,className:o,grow:l,justify:i,classNames:c,styles:d,style:p}=r,m=O(r,["children","className","grow","justify","classNames","styles","style"]),f=s();return a.createElement(b.x,w(k(k({},m),f.getStyles("list",{className:o,style:p,classNames:c,styles:d,props:r,variant:f.variant})),{ref:t,role:"tablist",variant:f.variant,mod:{grow:l,orientation:f.orientation,placement:"vertical"===f.orientation&&f.placement,inverted:f.inverted},"aria-orientation":f.orientation,__vars:{"--tabs-justify":i}}),n)});x.classes=c,x.displayName="@mantine/core/TabsList";var _=Object.defineProperty,N=Object.defineProperties,P=Object.getOwnPropertyDescriptors,T=Object.getOwnPropertySymbols,S=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable,C=(e,t,r)=>t in e?_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,F=(e,t)=>{for(var r in t||(t={}))S.call(t,r)&&C(e,r,t[r]);if(T)for(var r of T(t))E.call(t,r)&&C(e,r,t[r]);return e},L=(e,t)=>N(e,P(t)),z=(e,t)=>{var r={};for(var a in e)S.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&T)for(var a of T(e))0>t.indexOf(a)&&E.call(e,a)&&(r[a]=e[a]);return r};let I={},B=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsPanel",I,e),{children:n,className:o,value:l,classNames:i,styles:c,style:d}=r,p=z(r,["children","className","value","classNames","styles","style"]),m=s(),f=m.value===l,v=m.keepMounted?n:f?n:null;return a.createElement(b.x,L(F(F({},p),m.getStyles("panel",{className:o,classNames:i,styles:c,style:[d,f?void 0:{display:"none"}],props:r})),{ref:t,mod:{orientation:m.orientation},role:"tabpanel",id:m.getPanelId(l),"aria-labelledby":m.getTabId(l)}),v)});B.classes=c,B.displayName="@mantine/core/TabsPanel";var $=r(90395),D=r(49441),Z=r(9149),M=r(94975),W=r(93955),A=Object.defineProperty,R=Object.defineProperties,G=Object.getOwnPropertyDescriptors,K=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,U=(e,t,r)=>t in e?A(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,X=(e,t)=>{for(var r in t||(t={}))H.call(t,r)&&U(e,r,t[r]);if(K)for(var r of K(t))V.call(t,r)&&U(e,r,t[r]);return e},q=(e,t)=>R(e,G(t)),J=(e,t)=>{var r={};for(var a in e)H.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&K)for(var a of K(e))0>t.indexOf(a)&&V.call(e,a)&&(r[a]=e[a]);return r};let Y={},Q=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsTab",Y,e),{className:n,children:o,rightSection:l,leftSection:i,value:c,onClick:d,onKeyDown:b,disabled:p,color:m,style:f,classNames:v,styles:y,vars:h}=r,g=J(r,["className","children","rightSection","leftSection","value","onClick","onKeyDown","disabled","color","style","classNames","styles","vars"]),k=(0,D.rZ)(),{dir:w}=(0,Z.gm)(),O=s(),j=c===O.value,x=e=>{O.onChange(O.allowTabDeactivation&&c===O.value?null:c),null==d||d(e)},_={classNames:v,styles:y,props:r};return a.createElement($.k,q(X(X({},g),O.getStyles("tab",X({className:n,style:f,variant:O.variant},_))),{disabled:p,unstyled:O.unstyled,variant:O.variant,mod:{active:j,disabled:p,orientation:O.orientation,inverted:O.inverted,placement:"vertical"===O.orientation&&O.placement},ref:t,role:"tab",id:O.getTabId(c),"aria-selected":j,tabIndex:j||null===O.value?0:-1,"aria-controls":O.getPanelId(c),onClick:x,__vars:{"--tabs-color":m?(0,M.p)(m,k):void 0},onKeyDown:(0,W.R)({siblingSelector:'[role="tab"]',parentSelector:'[role="tablist"]',activateOnFocus:O.activateTabWithKeyboard,loop:O.loop,orientation:O.orientation||"horizontal",dir:w,onKeyDown:b})}),i&&a.createElement("span",q(X({},O.getStyles("tabSection",_)),{"data-position":"left"}),i),o&&a.createElement("span",X({},O.getStyles("tabLabel",_)),o),l&&a.createElement("span",q(X({},O.getStyles("tabSection",_)),{"data-position":"right"}),l))});Q.classes=c,Q.displayName="@mantine/core/TabsTab";var ee=r(25637),et=r(35486),er=r(95553),ea=r(71350),en=Object.defineProperty,eo=Object.getOwnPropertySymbols,el=Object.prototype.hasOwnProperty,ei=Object.prototype.propertyIsEnumerable,es=(e,t,r)=>t in e?en(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ec=(e,t)=>{for(var r in t||(t={}))el.call(t,r)&&es(e,r,t[r]);if(eo)for(var r of eo(t))ei.call(t,r)&&es(e,r,t[r]);return e},ed=(e,t)=>{var r={};for(var a in e)el.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&eo)for(var a of eo(e))0>t.indexOf(a)&&ei.call(e,a)&&(r[a]=e[a]);return r};let eu="Tabs.Tab or Tabs.Panel component was rendered with invalid value or without value",eb={keepMounted:!0,orientation:"horizontal",loop:!0,activateTabWithKeyboard:!0,allowTabDeactivation:!1,unstyled:!1,inverted:!1,variant:"default",placement:"left"},ep=(0,er.Z)((e,{radius:t,color:r})=>({root:{"--tabs-radius":(0,ea.H5)(t),"--tabs-color":(0,M.p)(r,e)}})),em=(0,d.d)((e,t)=>{let r=(0,u.w)("Tabs",eb,e),{defaultValue:l,value:s,onChange:d,orientation:p,children:m,loop:f,id:v,activateTabWithKeyboard:y,allowTabDeactivation:h,variant:g,color:k,radius:w,inverted:O,placement:j,keepMounted:x,classNames:_,styles:N,unstyled:P,className:T,style:S,vars:E}=r,C=ed(r,["defaultValue","value","onChange","orientation","children","loop","id","activateTabWithKeyboard","allowTabDeactivation","variant","color","radius","inverted","placement","keepMounted","classNames","styles","unstyled","className","style","vars"]),F=(0,n.M)(v),[L,z]=(0,o.C)({value:s,defaultValue:l,finalValue:null,onChange:d}),I=(0,ee.y)({name:"Tabs",props:r,classes:c,className:T,style:S,classNames:_,styles:N,unstyled:P,vars:E,varsResolver:ep});return a.createElement(i,{value:{placement:j,value:L,orientation:p,id:F,loop:f,activateTabWithKeyboard:y,getTabId:(0,et.A)(`${F}-tab`,eu),getPanelId:(0,et.A)(`${F}-panel`,eu),onChange:z,allowTabDeactivation:h,variant:g,color:k,radius:w,inverted:O,keepMounted:x,unstyled:P,getStyles:I}},a.createElement(b.x,ec(ec({ref:t,id:F,variant:g,mod:{orientation:p,inverted:"horizontal"===p&&O,placement:"vertical"===p&&j}},I("root")),C),m))});em.classes=c,em.displayName="@mantine/core/Tabs",em.Tab=Q,em.Panel=B,em.List=x},35486:function(e,t,r){"use strict";function a(e,t){return r=>{if("string"!=typeof r||0===r.trim().length)throw Error(t);return`${e}-${r}`}}r.d(t,{A:function(){return a}})},61830:function(e,t,r){"use strict";r.d(t,{Z:function(){return b}});var a=r(67294),n=r(46393),o=Object.defineProperty,l=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=(e,t,r)=>t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,d=(e,t)=>{for(var r in t||(t={}))i.call(t,r)&&c(e,r,t[r]);if(l)for(var r of l(t))s.call(t,r)&&c(e,r,t[r]);return e},u=(e,t)=>{var r={};for(var a in e)i.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&l)for(var a of l(e))0>t.indexOf(a)&&s.call(e,a)&&(r[a]=e[a]);return r};function b(e){var{size:t,style:r}=e,o=u(e,["size","style"]);return a.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 209",fill:"currentColor",style:d({width:(0,n.h)(t),height:(0,n.h)(t)},r)},o),a.createElement("path",{fillRule:"nonzero",d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 01-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 01-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 01-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 00256 25.45"}))}},1287:function(e,t,r){"use strict";r.d(t,{a:function(){return a}});let a={selectors:{root:"Root element",label:"Thumb label",thumb:"Thumb element",trackContainer:"Wraps track element",track:"Slider track",bar:"Track filled part",markWrapper:"Contains `mark` and `markLabel` elements",mark:"Mark displayed on track",markLabel:"Label of the associated mark, displayed below track"},vars:{root:{"--slider-size":"Controls track `height`","--slider-color":"Controls filled track, thumb and marks `background`","--slider-thumb-size":"Controls thumb `width` and `height`","--slider-radius":"Controls `border-radius` of track and thumb"}},modifiers:[{modifier:"data-disabled",selector:["trackContainer","track","bar","thumb","mark"],condition:"`disabled` prop is set"},{modifier:"data-inverted",selector:["track","bar"],condition:"`inverted` prop is set"},{modifier:"data-dragging",selector:"thumb",condition:"slider is being dragged"},{modifier:"data-filled",selector:"mark",condition:"mark position is less or equal slider value"}]}}}]); \ No newline at end of file diff --git a/_next/static/chunks/1300-a1599e086a440f9c.js b/_next/static/chunks/1300-a1599e086a440f9c.js deleted file mode 100644 index d321ecec294..00000000000 --- a/_next/static/chunks/1300-a1599e086a440f9c.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1300],{8649:function(e,t,r){"use strict";r.d(t,{$:function(){return B}});var a=r(85893),n=r(67294),o=r(90512),l=r(51227),i=r(82827),s=r(46049),c=r(77048),d=r(74378),u=r(40624),b=r(55899),p=r(65623),m={socialButton:"m-fde4daed",socialButtonSection:"m-1df08738",discordButton:"m-6611c750",twitterButton:"m-a568e357"},f=r(95859),y=r(61830),v=Object.defineProperty,h=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,w=(e,t,r)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,O=(e,t)=>{for(var r in t||(t={}))g.call(t,r)&&w(e,r,t[r]);if(h)for(var r of h(t))k.call(t,r)&&w(e,r,t[r]);return e},j=(e,t)=>{var r={};for(var a in e)g.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&h)for(var a of h(e))0>t.indexOf(a)&&k.call(e,a)&&(r[a]=e[a]);return r};function x(e){var{icon:t}=e,r=j(e,["icon"]);return n.createElement(b.z,O({component:"a",target:"_blank",rel:"noopener noreferrer",leftSection:t,radius:"md",classNames:{root:m.socialButton,section:m.socialButtonSection}},r))}function _(e){var{className:t}=e,r=j(e,["className"]);return n.createElement(x,O({className:(0,u.Z)(m.discordButton,t),icon:n.createElement(f.D,{size:16}),href:p.$.discordLink},r),"Join Discord community")}function N(e){var{className:t}=e,r=j(e,["className"]);return n.createElement(x,O({className:(0,u.Z)(m.twitterButton,t),icon:n.createElement(y.Z,{size:16}),href:p.$.twitterLink},r),"Follow Mantine on Twitter")}var P=r(93258),T=r(41664),S=r.n(T),E=r(16951),C=r.n(E);function F(e){let{data:t,title:r}=e,n=t.map((e,t)=>(0,a.jsx)(c.x,{className:C().link,component:"next"===e.type?S():"a",href:e.link,children:e.label},t));return(0,a.jsxs)("div",{className:C().wrapper,children:[(0,a.jsx)(c.x,{className:C().title,children:r}),n]})}let L=[{title:"About",data:[{type:"next",label:"Contribute",link:"/pages/contributing/"},{type:"next",label:"About Mantine",link:"/pages/about/"},{type:"next",label:"Changelog",link:"/pages/changelog/"},{type:"link",label:"Releases",link:p.$.gitHubLinks.releases}]},{title:"Community",data:[{type:"link",label:"Chat on Discord",link:p.$.discordLink},{type:"link",label:"Follow on Twitter",link:p.$.twitterLink},{type:"link",label:"Follow on Github",link:"https://github.com/rtivital"},{type:"link",label:"GitHub discussions",link:p.$.gitHubLinks.discussions}]},{title:"Project",data:[{type:"link",label:"Mantine UI",link:p.$.uiLink},{type:"link",label:"Documentation",link:p.$.docsLink},{type:"link",label:"Github organization",link:p.$.gitHubLinks.organization},{type:"link",label:"npm organization",link:p.$.npmLink}]}];var z=r(80165),I=r.n(z);function B(e){let{withNavbar:t}=e,r=L.map(e=>(0,a.jsx)(F,{data:e.data,title:e.title},e.title));return(0,a.jsxs)("div",{className:I().root,children:[(0,a.jsx)("div",{className:I().spacer}),(0,a.jsx)(l.x,{mod:{"with-navbar":t},className:(0,o.Z)(I().wrapper,i.Z.classNames.fullWidth),children:(0,a.jsxs)(s.W,{size:1100,children:[(0,a.jsxs)("div",{className:I().inner,children:[(0,a.jsxs)("div",{className:I().logoSection,children:[(0,a.jsx)(P.T,{}),(0,a.jsx)(c.x,{className:I().description,fz:"sm",children:"Build fully functional accessible web applications faster than ever"})]}),(0,a.jsx)("div",{className:I().groups,children:r})]}),(0,a.jsx)("div",{className:I().afterFooter,children:(0,a.jsxs)(d.Z,{justify:"space-between",wrap:"wrap",children:[(0,a.jsxs)(c.x,{fz:"xs",className:I().afterFooterNote,children:["Built by ",(0,a.jsx)("a",{href:"https://github.com/rtivital",children:"Vitaly Rtishchev"})," and"," ",(0,a.jsx)("a",{href:"https://github.com/mantinedev/mantine/graphs/contributors",children:"these awesome people"})]}),(0,a.jsxs)("div",{className:I().social,children:[(0,a.jsx)(_,{className:I().socialButton}),(0,a.jsx)(N,{className:I().socialButton})]})]})})]})})]})}},80165:function(e){e.exports={root:"Footer_root__bgmye",spacer:"Footer_spacer__g_thI",wrapper:"Footer_wrapper__chorF",inner:"Footer_inner__Oczlu",logoSection:"Footer_logoSection__VUxg4",description:"Footer_description__b7YOg",title:"Footer_title___pDUp",afterFooter:"Footer_afterFooter__FyXNP",afterFooterNote:"Footer_afterFooterNote__9yART",groups:"Footer_groups__nLTK6",social:"Footer_social__0m1yX",socialButton:"Footer_socialButton__zLzIx"}},16951:function(e){e.exports={wrapper:"LinksGroup_wrapper__54pi4",link:"LinksGroup_link__cg684",title:"LinksGroup_title__maicr"}},46049:function(e,t,r){"use strict";r.d(t,{W:function(){return k}});var a=r(67294),n={root:"m-7485cace"},o=r(75144),l=r(35577),i=r(25637),s=r(51227),c=r(95553),d=r(71350),u=Object.defineProperty,b=Object.getOwnPropertySymbols,p=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable,f=(e,t,r)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))p.call(t,r)&&f(e,r,t[r]);if(b)for(var r of b(t))m.call(t,r)&&f(e,r,t[r]);return e},v=(e,t)=>{var r={};for(var a in e)p.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&b)for(var a of b(e))0>t.indexOf(a)&&m.call(e,a)&&(r[a]=e[a]);return r};let h={},g=(0,c.Z)((e,{size:t})=>({root:{"--container-size":(0,d.ap)(t,"container-size")}})),k=(0,o.d)((e,t)=>{let r=(0,l.w)("Container",h,e),{classNames:o,className:c,style:d,styles:u,unstyled:b,vars:p,fluid:m}=r,f=v(r,["classNames","className","style","styles","unstyled","vars","fluid"]),k=(0,i.y)({name:"Container",classes:n,props:r,className:c,style:d,classNames:o,styles:u,unstyled:b,vars:p,varsResolver:g});return a.createElement(s.x,y(y({ref:t,mod:{fluid:m}},k("root")),f))});k.classes=n,k.displayName="@mantine/core/Container"},3995:function(e,t,r){"use strict";r.d(t,{m:function(){return em}});var a=r(67294),n=r(32582),o=r(35179),l=r(16371);let[i,s]=(0,l.R)("Tabs component was not found in the tree");var c={root:"m-89d60db1","list--default":"m-576c9d4",list:"m-89d33d6d",panel:"m-b0c91715",tab:"m-4ec4dce6",tabSection:"m-fc420b1f","tab--default":"m-539e827b","list--outline":"m-6772fbd5","tab--outline":"m-b59ab47c","tab--pills":"m-c3381914"},d=r(75144),u=r(35577),b=r(51227),p=Object.defineProperty,m=Object.defineProperties,f=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertySymbols,v=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable,g=(e,t,r)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))v.call(t,r)&&g(e,r,t[r]);if(y)for(var r of y(t))h.call(t,r)&&g(e,r,t[r]);return e},w=(e,t)=>m(e,f(t)),O=(e,t)=>{var r={};for(var a in e)v.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&y)for(var a of y(e))0>t.indexOf(a)&&h.call(e,a)&&(r[a]=e[a]);return r};let j={},x=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsList",j,e),{children:n,className:o,grow:l,justify:i,classNames:c,styles:d,style:p}=r,m=O(r,["children","className","grow","justify","classNames","styles","style"]),f=s();return a.createElement(b.x,w(k(k({},m),f.getStyles("list",{className:o,style:p,classNames:c,styles:d,props:r,variant:f.variant})),{ref:t,role:"tablist",variant:f.variant,mod:{grow:l,orientation:f.orientation,placement:"vertical"===f.orientation&&f.placement,inverted:f.inverted},"aria-orientation":f.orientation,__vars:{"--tabs-justify":i}}),n)});x.classes=c,x.displayName="@mantine/core/TabsList";var _=Object.defineProperty,N=Object.defineProperties,P=Object.getOwnPropertyDescriptors,T=Object.getOwnPropertySymbols,S=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable,C=(e,t,r)=>t in e?_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,F=(e,t)=>{for(var r in t||(t={}))S.call(t,r)&&C(e,r,t[r]);if(T)for(var r of T(t))E.call(t,r)&&C(e,r,t[r]);return e},L=(e,t)=>N(e,P(t)),z=(e,t)=>{var r={};for(var a in e)S.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&T)for(var a of T(e))0>t.indexOf(a)&&E.call(e,a)&&(r[a]=e[a]);return r};let I={},B=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsPanel",I,e),{children:n,className:o,value:l,classNames:i,styles:c,style:d}=r,p=z(r,["children","className","value","classNames","styles","style"]),m=s(),f=m.value===l,y=m.keepMounted?n:f?n:null;return a.createElement(b.x,L(F(F({},p),m.getStyles("panel",{className:o,classNames:i,styles:c,style:[d,f?void 0:{display:"none"}],props:r})),{ref:t,mod:{orientation:m.orientation},role:"tabpanel",id:m.getPanelId(l),"aria-labelledby":m.getTabId(l)}),y)});B.classes=c,B.displayName="@mantine/core/TabsPanel";var $=r(90395),D=r(49441),Z=r(9149),M=r(94975),W=r(93955),A=Object.defineProperty,R=Object.defineProperties,G=Object.getOwnPropertyDescriptors,K=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,U=(e,t,r)=>t in e?A(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,X=(e,t)=>{for(var r in t||(t={}))H.call(t,r)&&U(e,r,t[r]);if(K)for(var r of K(t))V.call(t,r)&&U(e,r,t[r]);return e},q=(e,t)=>R(e,G(t)),J=(e,t)=>{var r={};for(var a in e)H.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&K)for(var a of K(e))0>t.indexOf(a)&&V.call(e,a)&&(r[a]=e[a]);return r};let Y={},Q=(0,d.d)((e,t)=>{let r=(0,u.w)("TabsTab",Y,e),{className:n,children:o,rightSection:l,leftSection:i,value:c,onClick:d,onKeyDown:b,disabled:p,color:m,style:f,classNames:y,styles:v,vars:h}=r,g=J(r,["className","children","rightSection","leftSection","value","onClick","onKeyDown","disabled","color","style","classNames","styles","vars"]),k=(0,D.rZ)(),{dir:w}=(0,Z.gm)(),O=s(),j=c===O.value,x=e=>{O.onChange(O.allowTabDeactivation&&c===O.value?null:c),null==d||d(e)},_={classNames:y,styles:v,props:r};return a.createElement($.k,q(X(X({},g),O.getStyles("tab",X({className:n,style:f,variant:O.variant},_))),{disabled:p,unstyled:O.unstyled,variant:O.variant,mod:{active:j,disabled:p,orientation:O.orientation,inverted:O.inverted,placement:"vertical"===O.orientation&&O.placement},ref:t,role:"tab",id:O.getTabId(c),"aria-selected":j,tabIndex:j||null===O.value?0:-1,"aria-controls":O.getPanelId(c),onClick:x,__vars:{"--tabs-color":m?(0,M.p)(m,k):void 0},onKeyDown:(0,W.R)({siblingSelector:'[role="tab"]',parentSelector:'[role="tablist"]',activateOnFocus:O.activateTabWithKeyboard,loop:O.loop,orientation:O.orientation||"horizontal",dir:w,onKeyDown:b})}),i&&a.createElement("span",q(X({},O.getStyles("tabSection",_)),{"data-position":"left"}),i),o&&a.createElement("span",X({},O.getStyles("tabLabel",_)),o),l&&a.createElement("span",q(X({},O.getStyles("tabSection",_)),{"data-position":"right"}),l))});Q.classes=c,Q.displayName="@mantine/core/TabsTab";var ee=r(25637),et=r(35486),er=r(95553),ea=r(71350),en=Object.defineProperty,eo=Object.getOwnPropertySymbols,el=Object.prototype.hasOwnProperty,ei=Object.prototype.propertyIsEnumerable,es=(e,t,r)=>t in e?en(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ec=(e,t)=>{for(var r in t||(t={}))el.call(t,r)&&es(e,r,t[r]);if(eo)for(var r of eo(t))ei.call(t,r)&&es(e,r,t[r]);return e},ed=(e,t)=>{var r={};for(var a in e)el.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&eo)for(var a of eo(e))0>t.indexOf(a)&&ei.call(e,a)&&(r[a]=e[a]);return r};let eu="Tabs.Tab or Tabs.Panel component was rendered with invalid value or without value",eb={keepMounted:!0,orientation:"horizontal",loop:!0,activateTabWithKeyboard:!0,allowTabDeactivation:!1,unstyled:!1,inverted:!1,variant:"default",placement:"left"},ep=(0,er.Z)((e,{radius:t,color:r})=>({root:{"--tabs-radius":(0,ea.H5)(t),"--tabs-color":(0,M.p)(r,e)}})),em=(0,d.d)((e,t)=>{let r=(0,u.w)("Tabs",eb,e),{defaultValue:l,value:s,onChange:d,orientation:p,children:m,loop:f,id:y,activateTabWithKeyboard:v,allowTabDeactivation:h,variant:g,color:k,radius:w,inverted:O,placement:j,keepMounted:x,classNames:_,styles:N,unstyled:P,className:T,style:S,vars:E}=r,C=ed(r,["defaultValue","value","onChange","orientation","children","loop","id","activateTabWithKeyboard","allowTabDeactivation","variant","color","radius","inverted","placement","keepMounted","classNames","styles","unstyled","className","style","vars"]),F=(0,n.M)(y),[L,z]=(0,o.C)({value:s,defaultValue:l,finalValue:null,onChange:d}),I=(0,ee.y)({name:"Tabs",props:r,classes:c,className:T,style:S,classNames:_,styles:N,unstyled:P,vars:E,varsResolver:ep});return a.createElement(i,{value:{placement:j,value:L,orientation:p,id:F,loop:f,activateTabWithKeyboard:v,getTabId:(0,et.A)(`${F}-tab`,eu),getPanelId:(0,et.A)(`${F}-panel`,eu),onChange:z,allowTabDeactivation:h,variant:g,color:k,radius:w,inverted:O,keepMounted:x,unstyled:P,getStyles:I}},a.createElement(b.x,ec(ec({ref:t,id:F,variant:g,mod:{orientation:p,inverted:"horizontal"===p&&O,placement:"vertical"===p&&j}},I("root")),C),m))});em.classes=c,em.displayName="@mantine/core/Tabs",em.Tab=Q,em.Panel=B,em.List=x},35486:function(e,t,r){"use strict";function a(e,t){return r=>{if("string"!=typeof r||0===r.trim().length)throw Error(t);return`${e}-${r}`}}r.d(t,{A:function(){return a}})},61830:function(e,t,r){"use strict";r.d(t,{Z:function(){return b}});var a=r(67294),n=r(46393),o=Object.defineProperty,l=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=(e,t,r)=>t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,d=(e,t)=>{for(var r in t||(t={}))i.call(t,r)&&c(e,r,t[r]);if(l)for(var r of l(t))s.call(t,r)&&c(e,r,t[r]);return e},u=(e,t)=>{var r={};for(var a in e)i.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&l)for(var a of l(e))0>t.indexOf(a)&&s.call(e,a)&&(r[a]=e[a]);return r};function b(e){var{size:t,style:r}=e,o=u(e,["size","style"]);return a.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 209",fill:"currentColor",style:d({width:(0,n.h)(t),height:(0,n.h)(t)},r)},o),a.createElement("path",{fillRule:"nonzero",d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 01-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 01-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 01-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 00256 25.45"}))}},1287:function(e,t,r){"use strict";r.d(t,{a:function(){return a}});let a={selectors:{root:"Root element",label:"Thumb label",thumb:"Thumb element",trackContainer:"Wraps track element",track:"Slider track",bar:"Track filled part",markWrapper:"Contains `mark` and `markLabel` elements",mark:"Mark displayed on track",markLabel:"Label of the associated mark, displayed below track"},vars:{root:{"--slider-size":"Controls track `height`","--slider-color":"Controls filled track, thumb and marks `background`","--slider-thumb-size":"Controls thumb `width` and `height`","--slider-radius":"Controls `border-radius` of track and thumb"}},modifiers:[{modifier:"data-disabled",selector:["trackContainer","track","bar","thumb","mark"],condition:"`disabled` prop is set"},{modifier:"data-inverted",selector:["track","bar"],condition:"`inverted` prop is set"},{modifier:"data-dragging",selector:"thumb",condition:"slider is being dragged"},{modifier:"data-filled",selector:"mark",condition:"mark position is less or equal slider value"}]}}}]); \ No newline at end of file diff --git a/_next/static/chunks/main-6b495e28bfbaa813.js b/_next/static/chunks/main-6b495e28bfbaa813.js deleted file mode 100644 index c2b9d72e5a9..00000000000 --- a/_next/static/chunks/main-6b495e28bfbaa813.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[179],{60932:function(e,t){"use strict";function r(e,t,r,n,a,o,i){try{var l=e[o](i),s=l.value}catch(e){r(e);return}l.done?t(s):Promise.resolve(s).then(n,a)}function n(e){return function(){var t=this,n=arguments;return new Promise(function(a,o){var i=e.apply(t,n);function l(e){r(i,a,o,l,s,"next",e)}function s(e){r(i,a,o,l,s,"throw",e)}l(void 0)})}}Object.defineProperty(t,"Z",{enumerable:!0,get:function(){return n}})},6495:function(e,t){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t=0||(a[r]=e[r]);return a}Object.defineProperty(t,"Z",{enumerable:!0,get:function(){return r}})},40037:function(){"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(r){return t.resolve(e()).then(function(){return r})},function(r){return t.resolve(e()).then(function(){throw r})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})})},33468:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addBasePath=function(e,t){return a.normalizePathTrailingSlash(n.addPathPrefix(e,""))};var n=r(44135),a=r(52700);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54465:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addLocale=void 0,r(52700),t.addLocale=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n{let t={};e.forEach(e=>{if("link"===e.type&&e.props["data-optimized-fonts"]){if(document.querySelector('style[data-href="'.concat(e.props["data-href"],'"]')))return;e.props.href=e.props["data-href"],e.props["data-href"]=void 0}let r=t[e.type]||[];r.push(e),t[e.type]=r});let r=t.title?t.title[0]:null,o="";if(r){let{children:e}=r.props;o="string"==typeof e?e:Array.isArray(e)?e.join(""):""}o!==document.title&&(document.title=o),["meta","base","link","style","script"].forEach(e=>{(function(e,t){let r=document.getElementsByTagName("head")[0],o=r.querySelector("meta[name=next-head-count]"),i=Number(o.content),l=[];for(let t=0,r=o.previousElementSibling;t{for(let t=0,r=l.length;t{var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),u.forEach(e=>r.insertBefore(e,o)),o.content=(i-l.length+u.length).toString()})(e,t[e]||[])})}}},t.isEqualNode=a,t.DOMAttributeNames=void 0;let r={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv",noModule:"noModule"};function n(e){let{type:t,props:n}=e,a=document.createElement(t);for(let e in n){if(!n.hasOwnProperty(e)||"children"===e||"dangerouslySetInnerHTML"===e||void 0===n[e])continue;let o=r[e]||e.toLowerCase();"script"===t&&("async"===o||"defer"===o||"noModule"===o)?a[o]=!!n[e]:a.setAttribute(o,n[e])}let{children:o,dangerouslySetInnerHTML:i}=n;return i?a.innerHTML=i.__html||"":o&&(a.textContent="string"==typeof o?o:Array.isArray(o)?o.join(""):""),a}function a(e,t){if(e instanceof HTMLElement&&t instanceof HTMLElement){let r=t.getAttribute("nonce");if(r&&!e.getAttribute("nonce")){let n=t.cloneNode(!0);return n.setAttribute("nonce",""),n.nonce=r,r===e.nonce&&e.isEqualNode(n)}}return e.isEqualNode(t)}t.DOMAttributeNames=r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},84534:function(e,t,r){"use strict";let n,a,o,i,l,s,u,c,d,f,p,h;Object.defineProperty(t,"__esModule",{value:!0});let m=r(91598).Z;Object.defineProperty(t,"__esModule",{value:!0}),t.initialize=function(){return V.apply(this,arguments)},t.hydrate=function(e){return es.apply(this,arguments)},t.emitter=t.router=t.version=void 0;var g=r(60932).Z,y=r(6495).Z,v=r(92648).Z;r(91598).Z,r(40037);var _=v(r(67294)),P=v(r(20745)),b=r(4664),S=v(r(8550)),w=r(72692),E=r(4146),x=r(86238),j=r(94919),C=r(86949),O=r(670),R=r(17345),M=v(r(31831)),A=v(r(70976)),L=v(r(659)),T=r(18483),I=r(80880),N=r(80676),k=r(28730),D=r(82813),B=r(10928),U=r(48245),H=r(60401),F=r(78914),q=v(r(86954));t.version="13.2.1",t.router=n;let W=S.default();t.emitter=W;let Z=e=>[].slice.call(e),z=!1;self.__next_require__=r;class G extends _.default.Component{componentDidCatch(e,t){this.props.fn(e,t)}componentDidMount(){this.scrollToHash(),n.isSsr&&(a.isFallback||a.nextExport&&(x.isDynamicRoute(n.pathname)||location.search||z)||a.props&&a.props.__N_SSG&&(location.search||z))&&n.replace(n.pathname+"?"+String(j.assign(j.urlQueryToSearchParams(n.query),new URLSearchParams(location.search))),o,{_h:1,shallow:!a.isFallback&&!z}).catch(e=>{if(!e.cancelled)throw e})}componentDidUpdate(){this.scrollToHash()}scrollToHash(){let{hash:e}=location;if(!(e=e&&e.substring(1)))return;let t=document.getElementById(e);t&&setTimeout(()=>t.scrollIntoView(),0)}render(){return this.props.children}}function V(){return(V=g(function*(){arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=JSON.parse(document.getElementById("__NEXT_DATA__").textContent),window.__NEXT_DATA__=a,h=a.defaultLocale;let e=a.assetPrefix||"";if(r.p="".concat(e,"/_next/"),C.setConfig({serverRuntimeConfig:{},publicRuntimeConfig:a.runtimeConfig||{}}),o=O.getURL(),B.hasBasePath(o)&&(o=D.removeBasePath(o)),a.scriptLoader){let{initScriptLoader:e}=r(63573);e(a.scriptLoader)}i=new A.default(a.buildId,e);let t=e=>{let[t,r]=e;return i.routeLoader.onEntrypoint(t,r)};return window.__NEXT_P&&window.__NEXT_P.map(e=>setTimeout(()=>t(e),0)),window.__NEXT_P=[],window.__NEXT_P.push=t,(s=M.default()).getIsSsr=()=>n.isSsr,l=document.getElementById("__next"),{assetPrefix:e}})).apply(this,arguments)}function X(e,t){return _.default.createElement(e,Object.assign({},t))}function Y(e){var t;let{children:r}=e;return _.default.createElement(G,{fn:e=>K({App:d,err:e}).catch(e=>console.error("Error rendering page: ",e))},_.default.createElement(U.AppRouterContext.Provider,{value:H.adaptForAppRouterInstance(n)},_.default.createElement(F.SearchParamsContext.Provider,{value:H.adaptForSearchParams(n)},_.default.createElement(H.PathnameContextProviderAdapter,{router:n,isAutoExport:null!=(t=self.__NEXT_DATA__.autoExport)&&t},_.default.createElement(w.RouterContext.Provider,{value:I.makePublicRouterInstance(n)},_.default.createElement(b.HeadManagerContext.Provider,{value:s},_.default.createElement(k.ImageConfigContext.Provider,{value:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}},r)))))))}let $=e=>t=>{let r=y({},t,{Component:p,err:a.err,router:n});return _.default.createElement(Y,null,X(e,r))};function K(e){let{App:t,err:l}=e;return console.error(l),console.error("A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred"),i.loadPage("/_error").then(n=>{let{page:a,styleSheets:o}=n;return(null==u?void 0:u.Component)===a?Promise.resolve().then(()=>m(r(97345))).then(n=>Promise.resolve().then(()=>m(r(74297))).then(r=>(t=r.default,e.App=t,n))).then(e=>({ErrorComponent:e.default,styleSheets:[]})):{ErrorComponent:a,styleSheets:o}}).then(r=>{var i;let{ErrorComponent:s,styleSheets:u}=r,c=$(t),d={Component:s,AppTree:c,router:n,ctx:{err:l,pathname:a.page,query:a.query,asPath:o,AppTree:c}};return Promise.resolve((null==(i=e.props)?void 0:i.err)?e.props:O.loadGetInitialProps(t,d)).then(t=>eo(y({},e,{err:l,Component:s,styleSheets:u,props:t})))})}function J(e){let{callback:t}=e;return _.default.useLayoutEffect(()=>t(),[t]),null}let Q=null,ee=!0;function et(){["beforeRender","afterHydrate","afterRender","routeChange"].forEach(e=>performance.clearMarks(e))}function er(){O.ST&&(performance.mark("afterHydrate"),performance.measure("Next.js-before-hydration","navigationStart","beforeRender"),performance.measure("Next.js-hydration","beforeRender","afterHydrate"),f&&performance.getEntriesByName("Next.js-hydration").forEach(f),et())}function en(){if(!O.ST)return;performance.mark("afterRender");let e=performance.getEntriesByName("routeChange","mark");e.length&&(performance.measure("Next.js-route-change-to-render",e[0].name,"beforeRender"),performance.measure("Next.js-render","beforeRender","afterRender"),f&&(performance.getEntriesByName("Next.js-render").forEach(f),performance.getEntriesByName("Next.js-route-change-to-render").forEach(f)),et(),["Next.js-route-change-to-render","Next.js-render"].forEach(e=>performance.clearMeasures(e)))}function ea(e){let{callbacks:t,children:r}=e;return _.default.useLayoutEffect(()=>t.forEach(e=>e()),[t]),_.default.useEffect(()=>{L.default(f)},[]),r}function eo(e){let t,{App:r,Component:a,props:o,err:i}=e,s="initial"in e?void 0:e.styleSheets;a=a||u.Component,o=o||u.props;let d=y({},o,{Component:a,err:i,router:n});u=d;let f=!1,p=new Promise((e,r)=>{c&&c(),t=()=>{c=null,e()},c=()=>{f=!0,c=null;let e=Error("Cancel rendering route");e.cancelled=!0,r(e)}});function h(){t()}!function(){if(!s)return;let e=Z(document.querySelectorAll("style[data-n-href]")),t=new Set(e.map(e=>e.getAttribute("data-n-href"))),r=document.querySelector("noscript[data-n-css]"),n=null==r?void 0:r.getAttribute("data-n-css");s.forEach(e=>{let{href:r,text:a}=e;if(!t.has(r)){let e=document.createElement("style");e.setAttribute("data-n-href",r),e.setAttribute("media","x"),n&&e.setAttribute("nonce",n),document.head.appendChild(e),e.appendChild(document.createTextNode(a))}})}();let m=_.default.createElement(_.default.Fragment,null,_.default.createElement(J,{callback:function(){if(s&&!f){let e=new Set(s.map(e=>e.href)),t=Z(document.querySelectorAll("style[data-n-href]")),r=t.map(e=>e.getAttribute("data-n-href"));for(let n=0;n{let{href:t}=e,r=document.querySelector('style[data-n-href="'.concat(t,'"]'));r&&(n.parentNode.insertBefore(r,n.nextSibling),n=r)}),Z(document.querySelectorAll("link[data-n-p]")).forEach(e=>{e.parentNode.removeChild(e)})}if(e.scroll){let{x:t,y:r}=e.scroll;E.handleSmoothScroll(()=>{window.scrollTo(t,r)})}}}),_.default.createElement(Y,null,X(r,d),_.default.createElement(R.Portal,{type:"next-route-announcer"},_.default.createElement(T.RouteAnnouncer,null))));return!function(e,t){O.ST&&performance.mark("beforeRender");let r=t(ee?er:en);if(Q){let e=_.default.startTransition;e(()=>{Q.render(r)})}else Q=P.default.hydrateRoot(e,r,{onRecoverableError:q.default}),ee=!1}(l,e=>_.default.createElement(ea,{callbacks:[e,h]},_.default.createElement(_.default.StrictMode,null,m))),p}function ei(e){return el.apply(this,arguments)}function el(){return(el=g(function*(e){if(e.err){yield K(e);return}try{yield eo(e)}catch(r){let t=N.getProperError(r);if(t.cancelled)throw t;yield K(y({},e,{err:t}))}})).apply(this,arguments)}function es(){return(es=g(function*(e){let r=a.err;try{let e=yield i.routeLoader.whenEntrypoint("/_app");if("error"in e)throw e.error;let{component:t,exports:r}=e;d=t,r&&r.reportWebVitals&&(f=e=>{let t,{id:n,name:a,startTime:o,value:i,duration:l,entryType:s,entries:u,attribution:c}=e,d="".concat(Date.now(),"-").concat(Math.floor(Math.random()*(9e12-1))+1e12);u&&u.length&&(t=u[0].startTime);let f={id:n||d,name:a,startTime:o||t,value:null==i?l:i,label:"mark"===s||"measure"===s?"custom":"web-vital"};c&&(f.attribution=c),r.reportWebVitals(f)});let n=yield i.routeLoader.whenEntrypoint(a.page);if("error"in n)throw n.error;p=n.component}catch(e){r=N.getProperError(e)}window.__NEXT_PRELOADREADY&&(yield window.__NEXT_PRELOADREADY(a.dynamicIds)),t.router=n=I.createRouter(a.page,a.query,o,{initialProps:a.props,pageLoader:i,App:d,Component:p,wrapApp:$,err:r,isFallback:Boolean(a.isFallback),subscription:(e,t,r)=>ei(Object.assign({},e,{App:t,scroll:r})),locale:a.locale,locales:a.locales,defaultLocale:h,domainLocales:a.domainLocales,isPreview:a.isPreview}),z=yield n._initialMatchesMiddlewarePromise;let l={App:d,initial:!0,Component:p,props:a.props,err:r};(null==e?void 0:e.beforeRender)&&(yield e.beforeRender()),ei(l)})).apply(this,arguments)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},21783:function(e,t,r){"use strict";var n=r(84534);window.next={version:n.version,get router(){return n.router},emitter:n.emitter},n.initialize({}).then(()=>n.hydrate()).catch(console.error),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},52700:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizePathTrailingSlash=void 0;var n=r(40012),a=r(26727);let o=e=>{if(!e.startsWith("/"))return e;let{pathname:t,query:r,hash:o}=a.parsePath(e);return"".concat(n.removeTrailingSlash(t)).concat(r).concat(o)};t.normalizePathTrailingSlash=o,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},86954:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=e.digest||t.digest,a="function"==typeof reportError?reportError:e=>{window.console.error(e)};r!==n.NEXT_DYNAMIC_NO_SSR_CODE&&a(e)};var n=r(75680);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},70976:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92648).Z,a=r(33468),o=r(18074),i=n(r(27929)),l=r(54465),s=r(86238),u=r(22864),c=r(40012),d=r(82497);t.default=class{getPageList(){return d.getClientBuildManifest().then(e=>e.sortedPages)}getMiddleware(){return window.__MIDDLEWARE_MATCHERS=[],window.__MIDDLEWARE_MATCHERS}getDataHref(e){let{asPath:t,href:r,locale:n}=e,{pathname:d,query:f,search:p}=u.parseRelativeUrl(r),{pathname:h}=u.parseRelativeUrl(t),m=c.removeTrailingSlash(d);if("/"!==m[0])throw Error('Route name should start with a "/", got "'.concat(m,'"'));return(e=>{let t=i.default(c.removeTrailingSlash(l.addLocale(e,n)),".json");return a.addBasePath("/_next/data/".concat(this.buildId).concat(t).concat(p),!0)})(e.skipInterpolation?h:s.isDynamicRoute(m)?o.interpolateAs(d,h,f).result:m)}_isSsg(e){return this.promisedSsgManifest.then(t=>t.has(e))}loadPage(e){return this.routeLoader.loadRoute(e).then(e=>{if("component"in e)return{page:e.component,mod:e.exports,styleSheets:e.styles.map(e=>({href:e.href,text:e.content}))};throw e.error})}prefetch(e){return this.routeLoader.prefetch(e)}constructor(e,t){this.routeLoader=d.createRouteLoader(t),this.buildId=e,this.assetPrefix=t,this.promisedSsgManifest=new Promise(e=>{window.__SSG_MANIFEST?e(window.__SSG_MANIFEST):window.__SSG_MANIFEST_CB=()=>{e(window.__SSG_MANIFEST)}})}},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},659:function(e,t,r){"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;let a=["CLS","FCP","FID","INP","LCP","TTFB"];location.href;let o=!1;function i(e){n&&n(e)}var l=e=>{if(n=e,!o)for(let e of(o=!0,a))try{let t;t||(t=r(78018)),t["on".concat(e)](i)}catch(t){console.warn("Failed to track ".concat(e," web-vital"),t)}};t.default=l,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},17345:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Portal=void 0;var n=r(67294),a=r(73935);let o=e=>{let{children:t,type:r}=e,[o,i]=n.useState(null);return n.useEffect(()=>{let e=document.createElement(r);return document.body.appendChild(e),i(e),()=>{document.body.removeChild(e)}},[r]),o?a.createPortal(t,o):null};t.Portal=o,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82813:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeBasePath=function(e){return(e=e.slice(0)).startsWith("/")||(e="/".concat(e)),e},r(10928),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},66876:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeLocale=function(e,t){return e},r(26727),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44686:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.cancelIdleCallback=t.requestIdleCallback=void 0;let r="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)};t.requestIdleCallback=r;let n="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};t.cancelIdleCallback=n,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},18483:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.RouteAnnouncer=void 0;var n=(0,r(92648).Z)(r(67294)),a=r(80880);let o={border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap",wordWrap:"normal"},i=()=>{let{asPath:e}=a.useRouter(),[t,r]=n.default.useState(""),i=n.default.useRef(e);return n.default.useEffect(()=>{if(i.current!==e){if(i.current=e,document.title)r(document.title);else{var t;let n=document.querySelector("h1"),a=null!=(t=null==n?void 0:n.innerText)?t:null==n?void 0:n.textContent;r(a||e)}}},[e]),n.default.createElement("p",{"aria-live":"assertive",id:"__next-route-announcer__",role:"alert",style:o},t)};t.RouteAnnouncer=i,t.default=i,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82497:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.markAssetError=l,t.isAssetError=function(e){return e&&i in e},t.getClientBuildManifest=c,t.createRouteLoader=function(e){let t=new Map,r=new Map,n=new Map,i=new Map;function c(e){{var t;let n=r.get(e.toString());return n||(document.querySelector('script[src^="'.concat(e,'"]'))?Promise.resolve():(r.set(e.toString(),n=new Promise((r,n)=>{(t=document.createElement("script")).onload=r,t.onerror=()=>n(l(Error("Failed to load script: ".concat(e)))),t.crossOrigin=void 0,t.src=e,document.body.appendChild(t)})),n))}}function f(e){let t=n.get(e);return t||n.set(e,t=fetch(e).then(t=>{if(!t.ok)throw Error("Failed to load stylesheet: ".concat(e));return t.text().then(t=>({href:e,content:t}))}).catch(e=>{throw l(e)})),t}return{whenEntrypoint:e=>o(e,t),onEntrypoint(e,r){(r?Promise.resolve().then(()=>r()).then(e=>({component:e&&e.default||e,exports:e}),e=>({error:e})):Promise.resolve(void 0)).then(r=>{let n=t.get(e);n&&"resolve"in n?r&&(t.set(e,r),n.resolve(r)):(r?t.set(e,r):t.delete(e),i.delete(e))})},loadRoute(r,n){return o(r,i,()=>{let a;return u(d(e,r).then(e=>{let{scripts:n,css:a}=e;return Promise.all([t.has(r)?[]:Promise.all(n.map(c)),Promise.all(a.map(f))])}).then(e=>this.whenEntrypoint(r).then(t=>({entrypoint:t,styles:e[1]}))),3800,l(Error("Route did not complete loading: ".concat(r)))).then(e=>{let{entrypoint:t,styles:r}=e,n=Object.assign({styles:r},t);return"error"in t?t:n}).catch(e=>{if(n)throw e;return{error:e}}).finally(()=>null==a?void 0:a())})},prefetch(t){let r;return(r=navigator.connection)&&(r.saveData||/2g/.test(r.effectiveType))?Promise.resolve():d(e,t).then(e=>Promise.all(s?e.scripts.map(e=>{var t,r,n;return t=e.toString(),r="script",new Promise((e,a)=>{let o='\n link[rel="prefetch"][href^="'.concat(t,'"],\n link[rel="preload"][href^="').concat(t,'"],\n script[src^="').concat(t,'"]');if(document.querySelector(o))return e();n=document.createElement("link"),r&&(n.as=r),n.rel="prefetch",n.crossOrigin=void 0,n.onload=e,n.onerror=()=>a(l(Error("Failed to prefetch: ".concat(t)))),n.href=t,document.head.appendChild(n)})}):[])).then(()=>{a.requestIdleCallback(()=>this.loadRoute(t,!0).catch(()=>{}))}).catch(()=>{})}}},(0,r(92648).Z)(r(27929));var n=r(65407),a=r(44686);function o(e,t,r){let n,a=t.get(e);if(a)return"future"in a?a.future:Promise.resolve(a);let o=new Promise(e=>{n=e});return t.set(e,a={resolve:n,future:o}),r?r().then(e=>(n(e),e)).catch(r=>{throw t.delete(e),r}):o}let i=Symbol("ASSET_LOAD_ERROR");function l(e){return Object.defineProperty(e,i,{})}let s=function(e){try{return e=document.createElement("link"),!!window.MSInputMethodContext&&!!document.documentMode||e.relList.supports("prefetch")}catch(e){return!1}}();function u(e,t,r){return new Promise((n,o)=>{let i=!1;e.then(e=>{i=!0,n(e)}).catch(o),a.requestIdleCallback(()=>setTimeout(()=>{i||o(r)},t))})}function c(){if(self.__BUILD_MANIFEST)return Promise.resolve(self.__BUILD_MANIFEST);let e=new Promise(e=>{let t=self.__BUILD_MANIFEST_CB;self.__BUILD_MANIFEST_CB=()=>{e(self.__BUILD_MANIFEST),t&&t()}});return u(e,3800,l(Error("Failed to load client build manifest")))}function d(e,t){return c().then(r=>{if(!(t in r))throw l(Error("Failed to lookup route: ".concat(t)));let a=r[t].map(t=>e+"/_next/"+encodeURI(t));return{scripts:a.filter(e=>e.endsWith(".js")).map(e=>n.__unsafeCreateTrustedScriptURL(e)),css:a.filter(e=>e.endsWith(".css"))}})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},80880:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Router",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"withRouter",{enumerable:!0,get:function(){return s.default}}),t.useRouter=function(){let e=a.default.useContext(i.RouterContext);if(!e)throw Error("NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted");return e},t.createRouter=function(){for(var e=arguments.length,t=Array(e),r=0;re()),u.readyCallbacks=[],u.router},t.makePublicRouterInstance=function(e){let t={};for(let r of c){if("object"==typeof e[r]){t[r]=Object.assign(Array.isArray(e[r])?[]:{},e[r]);continue}t[r]=e[r]}return t.events=o.default.events,d.forEach(r=>{t[r]=function(){for(var t=arguments.length,n=Array(t),a=0;ao.default.events}),c.forEach(e=>{Object.defineProperty(u,e,{get(){let t=f();return t[e]}})}),d.forEach(e=>{u[e]=function(){for(var t=arguments.length,r=Array(t),n=0;n{u.ready(()=>{o.default.events.on(e,function(){for(var t=arguments.length,r=Array(t),n=0;n{let t=e.id||e.getAttribute("src");p.add(t)})}()},t.default=void 0;var n=r(6495).Z,a=r(92648).Z,o=r(91598).Z,i=r(17273).Z,l=a(r(73935)),s=o(r(67294)),u=r(4664),c=r(31831),d=r(44686);let f=new Map,p=new Set,h=["onLoad","onReady","dangerouslySetInnerHTML","children","onError","strategy"],m=e=>{let{src:t,id:r,onLoad:n=()=>{},onReady:a=null,dangerouslySetInnerHTML:o,children:i="",strategy:l="afterInteractive",onError:s}=e,u=r||t;if(u&&p.has(u))return;if(f.has(t)){p.add(u),f.get(t).then(n,s);return}let d=()=>{a&&a(),p.add(u)},m=document.createElement("script"),g=new Promise((e,t)=>{m.addEventListener("load",function(t){e(),n&&n.call(this,t),d()}),m.addEventListener("error",function(e){t(e)})}).catch(function(e){s&&s(e)});for(let[r,n]of(o?(m.innerHTML=o.__html||"",d()):i?(m.textContent="string"==typeof i?i:Array.isArray(i)?i.join(""):"",d()):t&&(m.src=t,f.set(t,g)),Object.entries(e))){if(void 0===n||h.includes(r))continue;let e=c.DOMAttributeNames[r]||r.toLowerCase();m.setAttribute(e,n)}"worker"===l&&m.setAttribute("type","text/partytown"),m.setAttribute("data-nscript",l),document.body.appendChild(m)};function g(e){let{strategy:t="afterInteractive"}=e;"lazyOnload"===t?window.addEventListener("load",()=>{d.requestIdleCallback(()=>m(e))}):m(e)}function y(e){let{id:t,src:r="",onLoad:a=()=>{},onReady:o=null,strategy:c="afterInteractive",onError:f}=e,h=i(e,["id","src","onLoad","onReady","strategy","onError"]),{updateScripts:g,scripts:y,getIsSsr:v,appDir:_,nonce:P}=s.useContext(u.HeadManagerContext),b=s.useRef(!1);s.useEffect(()=>{let e=t||r;b.current||(o&&e&&p.has(e)&&o(),b.current=!0)},[o,t,r]);let S=s.useRef(!1);if(s.useEffect(()=>{!S.current&&("afterInteractive"===c?m(e):"lazyOnload"===c&&("complete"===document.readyState?d.requestIdleCallback(()=>m(e)):window.addEventListener("load",()=>{d.requestIdleCallback(()=>m(e))})),S.current=!0)},[e,c]),("beforeInteractive"===c||"worker"===c)&&(g?(y[c]=(y[c]||[]).concat([n({id:t,src:r,onLoad:a,onReady:o,onError:f},h)]),g(y)):v&&v()?p.add(t||r):v&&!v()&&m(e)),_){if("beforeInteractive"===c)return r?(l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity}:{as:"script"}),s.default.createElement("script",{nonce:P,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push(".concat(JSON.stringify([r]),")")}})):(h.dangerouslySetInnerHTML&&(h.children=h.dangerouslySetInnerHTML.__html,delete h.dangerouslySetInnerHTML),s.default.createElement("script",{nonce:P,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push(".concat(JSON.stringify([0,n({},h)]),")")}}));"afterInteractive"===c&&r&&l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity}:{as:"script"})}return null}Object.defineProperty(y,"__nextScript",{value:!0}),t.default=y,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},65407:function(e,t){"use strict";let r;Object.defineProperty(t,"__esModule",{value:!0}),t.__unsafeCreateTrustedScriptURL=function(e){var t;return(null==(t=function(){if(void 0===r){var e;r=(null==(e=window.trustedTypes)?void 0:e.createPolicy("nextjs",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e}))||null}return r}())?void 0:t.createScriptURL(e))||e},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},49977:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(t){return n.default.createElement(e,Object.assign({router:a.useRouter()},t))}return t.getInitialProps=e.getInitialProps,t.origGetInitialProps=e.origGetInitialProps,t};var n=(0,r(92648).Z)(r(67294)),a=r(80880);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},74297:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,a=r(60932).Z,o=(0,r(92648).Z)(r(67294)),i=r(670);function l(e){return s.apply(this,arguments)}function s(){return(s=a(function*(e){let{Component:t,ctx:r}=e,n=yield i.loadGetInitialProps(t,r);return{pageProps:n}})).apply(this,arguments)}class u extends(n=o.default.Component){render(){let{Component:e,pageProps:t}=this.props;return o.default.createElement(e,Object.assign({},t))}}u.origGetInitialProps=l,u.getInitialProps=l,t.default=u,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},97345:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,a=r(92648).Z,o=a(r(67294)),i=a(r(83121));let l={400:"Bad Request",404:"This page could not be found",405:"Method Not Allowed",500:"Internal Server Error"};function s(e){let{res:t,err:r}=e,n=t&&t.statusCode?t.statusCode:r?r.statusCode:404;return{statusCode:n}}let u={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block",textAlign:"left"},h1:{display:"inline-block",margin:"0 20px 0 0",paddingRight:23,fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};class c extends(n=o.default.Component){render(){let{statusCode:e,withDarkMode:t=!0}=this.props,r=this.props.title||l[e]||"An unexpected error has occurred";return o.default.createElement("div",{style:u.error},o.default.createElement(i.default,null,o.default.createElement("title",null,e?"".concat(e,": ").concat(r):"Application error: a client-side exception has occurred")),o.default.createElement("div",null,o.default.createElement("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}".concat(t?"@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}":"")}}),e?o.default.createElement("h1",{className:"next-error-h1",style:u.h1},e):null,o.default.createElement("div",{style:u.desc},o.default.createElement("h2",{style:u.h2},this.props.title||e?r:o.default.createElement(o.default.Fragment,null,"Application error: a client-side exception has occurred (see the browser console for more information)"),"."))))}}c.displayName="ErrorPage",c.getInitialProps=s,c.origGetInitialProps=s,t.default=c,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},40610:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AmpStateContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext({});t.AmpStateContext=a},40532:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isInAmpMode=function(){let{ampFirst:e=!1,hybrid:t=!1,hasQuery:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e||t&&r}},48245:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TemplateContext=t.GlobalLayoutRouterContext=t.LayoutRouterContext=t.AppRouterContext=t.CacheStates=void 0;var n,a,o=(0,r(92648).Z)(r(67294));t.CacheStates=n,(a=n||(t.CacheStates=n={})).LAZY_INITIALIZED="LAZYINITIALIZED",a.DATA_FETCH="DATAFETCH",a.READY="READY";let i=o.default.createContext(null);t.AppRouterContext=i;let l=o.default.createContext(null);t.LayoutRouterContext=l;let s=o.default.createContext(null);t.GlobalLayoutRouterContext=s;let u=o.default.createContext(null);t.TemplateContext=u},18659:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.escapeStringRegexp=function(e){return r.test(e)?e.replace(n,"\\$&"):e};let r=/[|\\{}()[\]^$+*?.-]/,n=/[|\\{}()[\]^$+*?.-]/g},4664:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HeadManagerContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext({});t.HeadManagerContext=a},83121:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultHead=c,t.default=void 0;var n=r(6495).Z,a=r(92648).Z,o=(0,r(91598).Z)(r(67294)),i=a(r(31436)),l=r(40610),s=r(4664),u=r(40532);function c(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[o.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(o.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function d(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===o.default.Fragment?e.concat(o.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}r(57238);let f=["name","httpEquiv","charSet","itemProp"];function p(e,t){let{inAmpMode:r}=t;return e.reduce(d,[]).reverse().concat(c(r).reverse()).filter(function(){let e=new Set,t=new Set,r=new Set,n={};return a=>{let o=!0,i=!1;if(a.key&&"number"!=typeof a.key&&a.key.indexOf("$")>0){i=!0;let t=a.key.slice(a.key.indexOf("$")+1);e.has(t)?o=!1:e.add(t)}switch(a.type){case"title":case"base":t.has(a.type)?o=!1:t.add(a.type);break;case"meta":for(let e=0,t=f.length;e{let a=e.key||t;if(!r&&"link"===e.type&&e.props.href&&["https://fonts.googleapis.com/css","https://use.typekit.net/"].some(t=>e.props.href.startsWith(t))){let t=n({},e.props||{});return t["data-href"]=t.href,t.href=void 0,t["data-optimized-fonts"]=!0,o.default.cloneElement(e,t)}return o.default.cloneElement(e,{key:a})})}t.default=function(e){let{children:t}=e,r=o.useContext(l.AmpStateContext),n=o.useContext(s.HeadManagerContext);return o.default.createElement(i.default,{reduceComponentsToState:p,headManager:n,inAmpMode:u.isInAmpMode(r)},t)},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},78914:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LayoutSegmentsContext=t.ParamsContext=t.PathnameContext=t.SearchParamsContext=void 0;var n=r(67294);let a=n.createContext(null);t.SearchParamsContext=a;let o=n.createContext(null);t.PathnameContext=o;let i=n.createContext(null);t.ParamsContext=i;let l=n.createContext(null);t.LayoutSegmentsContext=l},24769:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeLocalePath=function(e,t){let r;let n=e.split("/");return(t||[]).some(t=>!!n[1]&&n[1].toLowerCase()===t.toLowerCase()&&(r=t,n.splice(1,1),e=n.join("/")||"/",!0)),{pathname:e,detectedLocale:r}}},28730:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImageConfigContext=void 0;var n=(0,r(92648).Z)(r(67294)),a=r(10139);let o=n.default.createContext(a.imageConfigDefault);t.ImageConfigContext=o},10139:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.imageConfigDefault=t.VALID_LOADERS=void 0,t.VALID_LOADERS=["default","imgix","cloudinary","akamai","custom"],t.imageConfigDefault={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:60,formats:["image/webp"],dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"inline",remotePatterns:[],unoptimized:!1}},82849:function(e,t){"use strict";function r(e){return Object.prototype.toString.call(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.getObjectClassLabel=r,t.isPlainObject=function(e){if("[object Object]"!==r(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}},75680:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NEXT_DYNAMIC_NO_SSR_CODE=void 0,t.NEXT_DYNAMIC_NO_SSR_CODE="DYNAMIC_SERVER_USAGE"},8550:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){let e=Object.create(null);return{on(t,r){(e[t]||(e[t]=[])).push(r)},off(t,r){e[t]&&e[t].splice(e[t].indexOf(r)>>>0,1)},emit(t){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;a{e(...n)})}}}},6301:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.denormalizePagePath=function(e){let t=a.normalizePathSep(e);return t.startsWith("/index/")&&!n.isDynamicRoute(t)?t.slice(6):"/index"!==t?t:"/"};var n=r(18588),a=r(49997)},49997:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizePathSep=function(e){return e.replace(/\\/g,"/")}},72692:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RouterContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext(null);t.RouterContext=a},60401:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.adaptForAppRouterInstance=function(e){return{back(){e.back()},forward(){e.forward()},refresh(){e.reload()},push(t){e.push(t)},replace(t){e.replace(t)},prefetch(t){e.prefetch(t)}}},t.adaptForSearchParams=function(e){return e.isReady&&e.query?function(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,e);else void 0!==n&&t.append(r,n);return t}(e.query):new URLSearchParams},t.PathnameContextProviderAdapter=function(e){var{children:t,router:r}=e,n=a(e,["children","router"]);let s=o.useRef(n.isAutoExport),u=o.useMemo(()=>{let e;let t=s.current;if(t&&(s.current=!1),l.isDynamicRoute(r.pathname)&&(r.isFallback||t&&!r.isReady))return null;try{e=new URL(r.asPath,"http://f")}catch(e){return"/"}return e.pathname},[r.asPath,r.isFallback,r.isReady,r.pathname]);return o.default.createElement(i.PathnameContext.Provider,{value:u},t)};var n=r(91598).Z,a=r(17273).Z,o=n(r(67294)),i=r(78914),l=r(18588)},41003:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.matchesMiddleware=D,t.createKey=V,t.default=void 0;var n=r(60932).Z,a=r(6495).Z,o=r(92648).Z,i=r(91598).Z,l=r(40012),s=r(82497),u=r(63573),c=i(r(80676)),d=r(6301),f=r(24769),p=o(r(8550)),h=r(670),m=r(86238),g=r(22864);o(r(72431));var y=r(13156),v=r(54903),_=r(67795);r(84643);var P=r(26727),b=r(54465),S=r(66876),w=r(82813),E=r(33468),x=r(10928),j=r(79423),C=r(18756),O=r(57429),R=r(79002),M=r(62139),A=r(21754),L=r(17562),T=r(1978),I=r(18074),N=r(4146);function k(){return Object.assign(Error("Route Cancelled"),{cancelled:!0})}function D(e){return B.apply(this,arguments)}function B(){return(B=n(function*(e){let t=yield Promise.resolve(e.router.pageLoader.getMiddleware());if(!t)return!1;let{pathname:r}=P.parsePath(e.asPath),n=x.hasBasePath(r)?w.removeBasePath(r):r,a=E.addBasePath(b.addLocale(n,e.locale));return t.some(e=>RegExp(e.regexp).test(a))})).apply(this,arguments)}function U(e){let t=h.getLocationOrigin();return e.startsWith(t)?e.substring(t.length):e}function H(e,t,r){let[n,a]=T.resolveHref(e,t,!0),o=h.getLocationOrigin(),i=n.startsWith(o),l=a&&a.startsWith(o);n=U(n),a=a?U(a):a;let s=i?n:E.addBasePath(n),u=r?U(T.resolveHref(e,r)):a||n;return{url:s,as:l?u:E.addBasePath(u)}}function F(e,t){let r=l.removeTrailingSlash(d.denormalizePagePath(e));return"/404"===r||"/_error"===r?e:(t.includes(r)||t.some(t=>{if(m.isDynamicRoute(t)&&v.getRouteRegex(t).re.test(r))return e=t,!0}),l.removeTrailingSlash(e))}function q(e){return W.apply(this,arguments)}function W(){return(W=n(function*(e){let t=yield D(e);if(!t||!e.fetchData)return null;try{let t=yield e.fetchData(),r=yield function(e,t,r){let n={basePath:r.router.basePath,i18n:{locales:r.router.locales},trailingSlash:Boolean(!1)},o=t.headers.get("x-nextjs-rewrite"),i=o||t.headers.get("x-nextjs-matched-path"),u=t.headers.get("x-matched-path");if(!u||i||u.includes("__next_data_catchall")||u.includes("/_error")||u.includes("/404")||(i=u),i){if(i.startsWith("/")){let t=g.parseRelativeUrl(i),a=C.getNextPathnameInfo(t.pathname,{nextConfig:n,parseData:!0}),u=l.removeTrailingSlash(a.pathname);return Promise.all([r.router.pageLoader.getPageList(),s.getClientBuildManifest()]).then(n=>{let[i,{__rewrites:l}]=n,s=b.addLocale(a.pathname,a.locale);if(m.isDynamicRoute(s)||!o&&i.includes(f.normalizeLocalePath(w.removeBasePath(s),r.router.locales).pathname)){let r=C.getNextPathnameInfo(g.parseRelativeUrl(e).pathname,{parseData:!0});s=E.addBasePath(r.pathname),t.pathname=s}if(!i.includes(u)){let e=F(u,i);e!==u&&(u=e)}let c=i.includes(u)?u:F(f.normalizeLocalePath(w.removeBasePath(t.pathname),r.router.locales).pathname,i);if(m.isDynamicRoute(c)){let e=y.getRouteMatcher(v.getRouteRegex(c))(s);Object.assign(t.query,e||{})}return{type:"rewrite",parsedAs:t,resolvedHref:c}})}let t=P.parsePath(e),u=O.formatNextPathnameInfo(a({},C.getNextPathnameInfo(t.pathname,{nextConfig:n,parseData:!0}),{defaultLocale:r.router.defaultLocale,buildId:""}));return Promise.resolve({type:"redirect-external",destination:"".concat(u).concat(t.query).concat(t.hash)})}let c=t.headers.get("x-nextjs-redirect");if(c){if(c.startsWith("/")){let e=P.parsePath(c),t=O.formatNextPathnameInfo(a({},C.getNextPathnameInfo(e.pathname,{nextConfig:n,parseData:!0}),{defaultLocale:r.router.defaultLocale,buildId:""}));return Promise.resolve({type:"redirect-internal",newAs:"".concat(t).concat(e.query).concat(e.hash),newUrl:"".concat(t).concat(e.query).concat(e.hash)})}return Promise.resolve({type:"redirect-external",destination:c})}return Promise.resolve({type:"next"})}(t.dataHref,t.response,e);return{dataHref:t.dataHref,json:t.json,response:t.response,text:t.text,cacheKey:t.cacheKey,effect:r}}catch(e){return null}})).apply(this,arguments)}let Z=Symbol("SSG_DATA_NOT_FOUND");function z(e){try{return JSON.parse(e)}catch(e){return null}}function G(e){var t;let{dataHref:r,inflightCache:n,isPrefetch:a,hasMiddleware:o,isServerRender:i,parseJSON:l,persistCache:u,isBackground:c,unstable_skipClientCache:d}=e,{href:f}=new URL(r,window.location.href),p=e=>(function e(t,r,n){return fetch(t,{credentials:"same-origin",method:n.method||"GET",headers:Object.assign({},n.headers,{"x-nextjs-data":"1"})}).then(a=>!a.ok&&r>1&&a.status>=500?e(t,r-1,n):a)})(r,i?3:1,{headers:Object.assign({},a?{purpose:"prefetch"}:{},a&&o?{"x-middleware-prefetch":"1"}:{}),method:null!=(t=null==e?void 0:e.method)?t:"GET"}).then(t=>t.ok&&(null==e?void 0:e.method)==="HEAD"?{dataHref:r,response:t,text:"",json:{},cacheKey:f}:t.text().then(e=>{if(!t.ok){if(o&&[301,302,307,308].includes(t.status))return{dataHref:r,response:t,text:e,json:{},cacheKey:f};if(!o&&404===t.status){var n;if(null==(n=z(e))?void 0:n.notFound)return{dataHref:r,json:{notFound:Z},response:t,text:e,cacheKey:f}}let a=Error("Failed to load static props");throw i||s.markAssetError(a),a}return{dataHref:r,json:l?z(e):null,response:t,text:e,cacheKey:f}})).then(e=>(u&&"no-cache"!==e.response.headers.get("x-middleware-cache")||delete n[f],e)).catch(e=>{throw d||delete n[f],("Failed to fetch"===e.message||"NetworkError when attempting to fetch resource."===e.message||"Load failed"===e.message)&&s.markAssetError(e),e});return d&&u?p({}).then(e=>(n[f]=Promise.resolve(e),e)):void 0!==n[f]?n[f]:n[f]=p(c?{method:"HEAD"}:{})}function V(){return Math.random().toString(36).slice(2,10)}function X(e){let{url:t,router:r}=e;if(t===E.addBasePath(b.addLocale(r.asPath,r.locale)))throw Error("Invariant: attempted to hard navigate to the same URL ".concat(t," ").concat(location.href));window.location.href=t}let Y=e=>{let{route:t,router:r}=e,n=!1,a=r.clc=()=>{n=!0},o=()=>{if(n){let e=Error('Abort fetching component for route: "'.concat(t,'"'));throw e.cancelled=!0,e}a===r.clc&&(r.clc=null)};return o};class ${reload(){window.location.reload()}back(){window.history.back()}forward(){window.history.forward()}push(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return{url:e,as:t}=H(this,e,t),this.change("pushState",e,t,r)}replace(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return{url:e,as:t}=H(this,e,t),this.change("replaceState",e,t,r)}change(e,t,r,o,i){var d=this;return n(function*(){let n,f;if(!M.isLocalURL(t))return X({url:t,router:d}),!1;let p=1===o._h,j=p||o._shouldResolveHref||P.parsePath(t).pathname===P.parsePath(r).pathname,C=a({},d.state),O=!0!==d.isReady;d.isReady=!0;let A=d.isSsr;if(p||(d.isSsr=!1),p&&d.clc)return!1;let T=C.locale;h.ST&&performance.mark("routeChange");let{shallow:N=!1,scroll:B=!0}=o,U={shallow:N};d._inFlightRoute&&d.clc&&(A||$.events.emit("routeChangeError",k(),d._inFlightRoute,U),d.clc(),d.clc=null),r=E.addBasePath(b.addLocale(x.hasBasePath(r)?w.removeBasePath(r):r,o.locale,d.defaultLocale));let q=S.removeLocale(x.hasBasePath(r)?w.removeBasePath(r):r,C.locale);d._inFlightRoute=r;let W=T!==C.locale;if(!p&&d.onlyAHashChange(q)&&!W){C.asPath=q,$.events.emit("hashChangeStart",r,U),d.changeState(e,t,r,a({},o,{scroll:!1})),B&&d.scrollToHash(q);try{yield d.set(C,d.components[C.route],null)}catch(e){throw c.default(e)&&e.cancelled&&$.events.emit("routeChangeError",e,q,U),e}return $.events.emit("hashChangeComplete",r,U),!0}let z=g.parseRelativeUrl(t),{pathname:G,query:V}=z;try{[n,{__rewrites:f}]=yield Promise.all([d.pageLoader.getPageList(),s.getClientBuildManifest(),d.pageLoader.getMiddleware()])}catch(e){return X({url:r,router:d}),!1}d.urlIsNew(q)||W||(e="replaceState");let Y=r;G=G?l.removeTrailingSlash(w.removeBasePath(G)):G;let K=l.removeTrailingSlash(G),J=r.startsWith("/")&&g.parseRelativeUrl(r).pathname,Q=!!(J&&K!==J&&(!m.isDynamicRoute(K)||!y.getRouteMatcher(v.getRouteRegex(K))(J))),ee=!o.shallow&&(yield D({asPath:r,locale:C.locale,router:d}));if(p&&ee&&(j=!1),j&&"/_error"!==G&&(o._shouldResolveHref=!0,z.pathname=F(G,n),z.pathname===G||(G=z.pathname,z.pathname=E.addBasePath(G),ee||(t=_.formatWithValidation(z)))),!M.isLocalURL(r))return X({url:r,router:d}),!1;Y=S.removeLocale(w.removeBasePath(Y),C.locale),K=l.removeTrailingSlash(G);let et=!1;if(m.isDynamicRoute(K)){let e=g.parseRelativeUrl(Y),n=e.pathname,a=v.getRouteRegex(K);et=y.getRouteMatcher(a)(n);let o=K===n,i=o?I.interpolateAs(K,n,V):{};if(et&&(!o||i.result))o?r=_.formatWithValidation(Object.assign({},e,{pathname:i.result,query:L.omit(V,i.params)})):Object.assign(V,et);else{let e=Object.keys(a.groups).filter(e=>!V[e]&&!a.groups[e].optional);if(e.length>0&&!ee)throw Error((o?"The provided `href` (".concat(t,") value is missing query values (").concat(e.join(", "),") to be interpolated properly. "):"The provided `as` value (".concat(n,") is incompatible with the `href` value (").concat(K,"). "))+"Read more: https://nextjs.org/docs/messages/".concat(o?"href-interpolation-failed":"incompatible-href-as"))}}p||$.events.emit("routeChangeStart",r,U);let er="/404"===d.pathname||"/_error"===d.pathname;try{var en,ea,eo,ei,el,es,eu,ec;let l=yield d.getRouteInfo({route:K,pathname:G,query:V,as:r,resolvedAs:Y,routeProps:U,locale:C.locale,isPreview:C.isPreview,hasMiddleware:ee,unstable_skipClientCache:o.unstable_skipClientCache,isQueryUpdating:p&&!d.isFallback,isMiddlewareRewrite:Q});if("route"in l&&ee){K=G=l.route||K,U.shallow||(V=Object.assign({},l.query||{},V));let e=x.hasBasePath(z.pathname)?w.removeBasePath(z.pathname):z.pathname;if(et&&G!==e&&Object.keys(et).forEach(e=>{et&&V[e]===et[e]&&delete V[e]}),m.isDynamicRoute(G)){let e=!U.shallow&&l.resolvedAs?l.resolvedAs:E.addBasePath(b.addLocale(new URL(r,location.href).pathname,C.locale),!0),t=e;x.hasBasePath(t)&&(t=w.removeBasePath(t));let n=v.getRouteRegex(G),a=y.getRouteMatcher(n)(new URL(t,location.href).pathname);a&&Object.assign(V,a)}}if("type"in l){if("redirect-internal"===l.type)return d.change(e,l.newUrl,l.newAs,o);return X({url:l.destination,router:d}),new Promise(()=>{})}let s=l.Component;if(s&&s.unstable_scriptLoader){let e=[].concat(s.unstable_scriptLoader());e.forEach(e=>{u.handleClientScriptLoad(e.props)})}if((l.__N_SSG||l.__N_SSP)&&l.props){if(l.props.pageProps&&l.props.pageProps.__N_REDIRECT){o.locale=!1;let t=l.props.pageProps.__N_REDIRECT;if(t.startsWith("/")&&!1!==l.props.pageProps.__N_REDIRECT_BASE_PATH){let r=g.parseRelativeUrl(t);r.pathname=F(r.pathname,n);let{url:a,as:i}=H(d,t,t);return d.change(e,a,i,o)}return X({url:t,router:d}),new Promise(()=>{})}if(C.isPreview=!!l.props.__N_PREVIEW,l.props.notFound===Z){let e;try{yield d.fetchComponent("/404"),e="/404"}catch(t){e="/_error"}if(l=yield d.getRouteInfo({route:e,pathname:e,query:V,as:r,resolvedAs:Y,routeProps:{shallow:!1},locale:C.locale,isPreview:C.isPreview}),"type"in l)throw Error("Unexpected middleware effect on /404")}}p&&"/_error"===d.pathname&&(null==(en=self.__NEXT_DATA__.props)?void 0:null==(ea=en.pageProps)?void 0:ea.statusCode)===500&&(null==(eo=l.props)?void 0:eo.pageProps)&&(l.props.pageProps.statusCode=500);let f=o.shallow&&C.route===(null!=(ei=l.route)?ei:K),h=null!=(el=o.scroll)?el:!p&&!f,_=null!=i?i:h?{x:0,y:0}:null,P=a({},C,{route:K,pathname:G,query:V,asPath:q,isFallback:!1});if(p&&er){if(l=yield d.getRouteInfo({route:d.pathname,pathname:d.pathname,query:V,as:r,resolvedAs:Y,routeProps:{shallow:!1},locale:C.locale,isPreview:C.isPreview,isQueryUpdating:p&&!d.isFallback}),"type"in l)throw Error("Unexpected middleware effect on ".concat(d.pathname));"/_error"===d.pathname&&(null==(es=self.__NEXT_DATA__.props)?void 0:null==(eu=es.pageProps)?void 0:eu.statusCode)===500&&(null==(ec=l.props)?void 0:ec.pageProps)&&(l.props.pageProps.statusCode=500);try{yield d.set(P,l,_)}catch(e){throw c.default(e)&&e.cancelled&&$.events.emit("routeChangeError",e,q,U),e}return!0}$.events.emit("beforeHistoryChange",r,U),d.changeState(e,t,r,o);let S=p&&!_&&!O&&!W&&R.compareRouterStates(P,d.state);if(!S){try{yield d.set(P,l,_)}catch(e){if(e.cancelled)l.error=l.error||e;else throw e}if(l.error)throw p||$.events.emit("routeChangeError",l.error,q,U),l.error;p||$.events.emit("routeChangeComplete",r,U),h&&/#.+$/.test(r)&&d.scrollToHash(r)}return!0}catch(e){if(c.default(e)&&e.cancelled)return!1;throw e}})()}changeState(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};("pushState"!==e||h.getURL()!==r)&&(this._shallow=n.shallow,window.history[e]({url:t,as:r,options:n,__N:!0,key:this._key="pushState"!==e?this._key:V()},"",r))}handleRouteInfoError(e,t,r,a,o,i){var l=this;return n(function*(){if(console.error(e),e.cancelled)throw e;if(s.isAssetError(e)||i)throw $.events.emit("routeChangeError",e,a,o),X({url:a,router:l}),k();try{let n;let{page:a,styleSheets:o}=yield l.fetchComponent("/_error"),i={props:n,Component:a,styleSheets:o,err:e,error:e};if(!i.props)try{i.props=yield l.getInitialProps(a,{err:e,pathname:t,query:r})}catch(e){console.error("Error in error page `getInitialProps`: ",e),i.props={}}return i}catch(e){return l.handleRouteInfoError(c.default(e)?e:Error(e+""),t,r,a,o,!0)}})()}getRouteInfo(e){let{route:t,pathname:r,query:o,as:i,resolvedAs:s,routeProps:u,locale:d,hasMiddleware:p,isPreview:h,unstable_skipClientCache:m,isQueryUpdating:g,isMiddlewareRewrite:y}=e;var v=this;return n(function*(){let e=t;try{var P,b,S,E;let t=Y({route:e,router:v}),c=v.components[e];if(u.shallow&&c&&v.route===e)return c;p&&(c=void 0);let x=!c||"initial"in c?void 0:c,C={dataHref:v.pageLoader.getDataHref({href:_.formatWithValidation({pathname:r,query:o}),skipInterpolation:!0,asPath:s,locale:d}),hasMiddleware:!0,isServerRender:v.isSsr,parseJSON:!0,inflightCache:g?v.sbc:v.sdc,persistCache:!h,isPrefetch:!1,unstable_skipClientCache:m,isBackground:g},O=g&&!y?null:yield q({fetchData:()=>G(C),asPath:s,locale:d,router:v}).catch(e=>{if(g)return null;throw e});if(g&&(O?O.json=self.__NEXT_DATA__.props:O={json:self.__NEXT_DATA__.props}),t(),(null==O?void 0:null==(P=O.effect)?void 0:P.type)==="redirect-internal"||(null==O?void 0:null==(b=O.effect)?void 0:b.type)==="redirect-external")return O.effect;if((null==O?void 0:null==(S=O.effect)?void 0:S.type)==="rewrite"){let t=l.removeTrailingSlash(O.effect.resolvedHref),n=yield v.pageLoader.getPageList();if((!g||n.includes(t))&&(e=t,r=O.effect.resolvedHref,o=a({},o,O.effect.parsedAs.query),s=w.removeBasePath(f.normalizeLocalePath(O.effect.parsedAs.pathname,v.locales).pathname),c=v.components[e],u.shallow&&c&&v.route===e&&!p))return a({},c,{route:e})}if(j.isAPIRoute(e))return X({url:i,router:v}),new Promise(()=>{});let R=x||(yield v.fetchComponent(e).then(e=>({Component:e.page,styleSheets:e.styleSheets,__N_SSG:e.mod.__N_SSG,__N_SSP:e.mod.__N_SSP}))),M=null==O?void 0:null==(E=O.response)?void 0:E.headers.get("x-middleware-skip"),A=R.__N_SSG||R.__N_SSP;M&&(null==O?void 0:O.dataHref)&&delete v.sdc[O.dataHref];let{props:L,cacheKey:T}=yield v._getData(n(function*(){if(A){if((null==O?void 0:O.json)&&!M)return{cacheKey:O.cacheKey,props:O.json};let e=(null==O?void 0:O.dataHref)?O.dataHref:v.pageLoader.getDataHref({href:_.formatWithValidation({pathname:r,query:o}),asPath:s,locale:d}),t=yield G({dataHref:e,isServerRender:v.isSsr,parseJSON:!0,inflightCache:M?{}:v.sdc,persistCache:!h,isPrefetch:!1,unstable_skipClientCache:m});return{cacheKey:t.cacheKey,props:t.json||{}}}return{headers:{},props:yield v.getInitialProps(R.Component,{pathname:r,query:o,asPath:i,locale:d,locales:v.locales,defaultLocale:v.defaultLocale})}}));return R.__N_SSP&&C.dataHref&&T&&delete v.sdc[T],v.isPreview||!R.__N_SSG||g||G(Object.assign({},C,{isBackground:!0,persistCache:!1,inflightCache:v.sbc})).catch(()=>{}),L.pageProps=Object.assign({},L.pageProps),R.props=L,R.route=e,R.query=o,R.resolvedAs=s,v.components[e]=R,R}catch(e){return v.handleRouteInfoError(c.getProperError(e),r,o,i,u)}})()}set(e,t,r){return this.state=e,this.sub(t,this.components["/_app"].Component,r)}beforePopState(e){this._bps=e}onlyAHashChange(e){if(!this.asPath)return!1;let[t,r]=this.asPath.split("#"),[n,a]=e.split("#");return!!a&&t===n&&r===a||t===n&&r!==a}scrollToHash(e){let[,t=""]=e.split("#");if(""===t||"top"===t){N.handleSmoothScroll(()=>window.scrollTo(0,0));return}let r=decodeURIComponent(t),n=document.getElementById(r);if(n){N.handleSmoothScroll(()=>n.scrollIntoView());return}let a=document.getElementsByName(r)[0];a&&N.handleSmoothScroll(()=>a.scrollIntoView())}urlIsNew(e){return this.asPath!==e}prefetch(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var o=this;return n(function*(){if(A.isBot(window.navigator.userAgent))return;let n=g.parseRelativeUrl(e),{pathname:i,query:s}=n,u=i,c=yield o.pageLoader.getPageList(),d=t,f=void 0!==r.locale?r.locale||void 0:o.locale,p=yield D({asPath:t,locale:f,router:o});n.pathname=F(n.pathname,c),m.isDynamicRoute(n.pathname)&&(i=n.pathname,n.pathname=i,Object.assign(s,y.getRouteMatcher(v.getRouteRegex(n.pathname))(P.parsePath(t).pathname)||{}),p||(e=_.formatWithValidation(n)));let h=yield q({fetchData:()=>G({dataHref:o.pageLoader.getDataHref({href:_.formatWithValidation({pathname:u,query:s}),skipInterpolation:!0,asPath:d,locale:f}),hasMiddleware:!0,isServerRender:o.isSsr,parseJSON:!0,inflightCache:o.sdc,persistCache:!o.isPreview,isPrefetch:!0}),asPath:t,locale:f,router:o});if((null==h?void 0:h.effect.type)==="rewrite"&&(n.pathname=h.effect.resolvedHref,i=h.effect.resolvedHref,s=a({},s,h.effect.parsedAs.query),d=h.effect.parsedAs.pathname,e=_.formatWithValidation(n)),(null==h?void 0:h.effect.type)==="redirect-external")return;let b=l.removeTrailingSlash(i);yield Promise.all([o.pageLoader._isSsg(b).then(t=>!!t&&G({dataHref:(null==h?void 0:h.json)?null==h?void 0:h.dataHref:o.pageLoader.getDataHref({href:e,asPath:d,locale:f}),isServerRender:!1,parseJSON:!0,inflightCache:o.sdc,persistCache:!o.isPreview,isPrefetch:!0,unstable_skipClientCache:r.unstable_skipClientCache||r.priority&&!0}).then(()=>!1)),o.pageLoader[r.priority?"loadPage":"prefetch"](b)])})()}fetchComponent(e){var t=this;return n(function*(){let r=Y({route:e,router:t});try{let n=yield t.pageLoader.loadPage(e);return r(),n}catch(e){throw r(),e}})()}_getData(e){let t=!1,r=()=>{t=!0};return this.clc=r,e().then(e=>{if(r===this.clc&&(this.clc=null),t){let e=Error("Loading initial props cancelled");throw e.cancelled=!0,e}return e})}_getFlightData(e){return G({dataHref:e,isServerRender:!0,parseJSON:!1,inflightCache:this.sdc,persistCache:!1,isPrefetch:!1}).then(e=>{let{text:t}=e;return{data:t}})}getInitialProps(e,t){let{Component:r}=this.components["/_app"],n=this._wrapApp(r);return t.AppTree=n,h.loadGetInitialProps(r,{AppTree:n,Component:e,router:this,ctx:t})}get route(){return this.state.route}get pathname(){return this.state.pathname}get query(){return this.state.query}get asPath(){return this.state.asPath}get locale(){return this.state.locale}get isFallback(){return this.state.isFallback}get isPreview(){return this.state.isPreview}constructor(e,t,r,{initialProps:n,pageLoader:a,App:o,wrapApp:i,Component:s,err:u,subscription:c,isFallback:d,locale:f,locales:p,defaultLocale:y,domainLocales:v,isPreview:P}){this.sdc={},this.sbc={},this.isFirstPopStateEvent=!0,this._key=V(),this.onPopState=e=>{let t;let{isFirstPopStateEvent:r}=this;this.isFirstPopStateEvent=!1;let n=e.state;if(!n){let{pathname:e,query:t}=this;this.changeState("replaceState",_.formatWithValidation({pathname:E.addBasePath(e),query:t}),h.getURL());return}if(n.__NA){window.location.reload();return}if(!n.__N||r&&this.locale===n.options.locale&&n.as===this.asPath)return;let{url:a,as:o,options:i,key:l}=n;this._key=l;let{pathname:s}=g.parseRelativeUrl(a);(!this.isSsr||o!==E.addBasePath(this.asPath)||s!==E.addBasePath(this.pathname))&&(!this._bps||this._bps(n))&&this.change("replaceState",a,o,Object.assign({},i,{shallow:i.shallow&&this._shallow,locale:i.locale||this.defaultLocale,_h:0}),t)};let b=l.removeTrailingSlash(e);this.components={},"/_error"!==e&&(this.components[b]={Component:s,initial:!0,props:n,err:u,__N_SSG:n&&n.__N_SSG,__N_SSP:n&&n.__N_SSP}),this.components["/_app"]={Component:o,styleSheets:[]},this.events=$.events,this.pageLoader=a;let S=m.isDynamicRoute(e)&&self.__NEXT_DATA__.autoExport;if(this.basePath="",this.sub=c,this.clc=null,this._wrapApp=i,this.isSsr=!0,this.isLocaleDomain=!1,this.isReady=!!(self.__NEXT_DATA__.gssp||self.__NEXT_DATA__.gip||self.__NEXT_DATA__.appGip&&!self.__NEXT_DATA__.gsp||!S&&!self.location.search),this.state={route:b,pathname:e,query:t,asPath:S?e:r,isPreview:!!P,locale:void 0,isFallback:d},this._initialMatchesMiddlewarePromise=Promise.resolve(!1),!r.startsWith("//")){let n={locale:f},a=h.getURL();this._initialMatchesMiddlewarePromise=D({router:this,locale:f,asPath:a}).then(o=>(n._shouldResolveHref=r!==e,this.changeState("replaceState",o?a:_.formatWithValidation({pathname:E.addBasePath(e),query:t}),a,n),o))}window.addEventListener("popstate",this.onPopState)}}$.events=p.default(),t.default=$},34441:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addLocale=function(e,t,r,o){return t&&t!==r&&(o||!a.pathHasPrefix(e.toLowerCase(),"/".concat(t.toLowerCase()))&&!a.pathHasPrefix(e.toLowerCase(),"/api"))?n.addPathPrefix(e,"/".concat(t)):e};var n=r(44135),a=r(93210)},44135:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPathPrefix=function(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:o}=n.parsePath(e);return"".concat(t).concat(r).concat(a).concat(o)};var n=r(26727)},96074:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPathSuffix=function(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:o}=n.parsePath(e);return"".concat(r).concat(t).concat(a).concat(o)};var n=r(26727)},79002:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compareRouterStates=function(e,t){let r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(let n=r.length;n--;){let a=r[n];if("query"===a){let r=Object.keys(e.query);if(r.length!==Object.keys(t.query).length)return!1;for(let n=r.length;n--;){let a=r[n];if(!t.query.hasOwnProperty(a)||e.query[a]!==t.query[a])return!1}}else if(!t.hasOwnProperty(a)||e[a]!==t[a])return!1}return!0}},57429:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatNextPathnameInfo=function(e){let t=i.addLocale(e.pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix);return(e.buildId||!e.trailingSlash)&&(t=n.removeTrailingSlash(t)),e.buildId&&(t=o.addPathSuffix(a.addPathPrefix(t,"/_next/data/".concat(e.buildId)),"/"===e.pathname?"index.json":".json")),t=a.addPathPrefix(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:o.addPathSuffix(t,"/"):n.removeTrailingSlash(t)};var n=r(40012),a=r(44135),o=r(96074),i=r(34441)},67795:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatUrl=o,t.formatWithValidation=function(e){return o(e)},t.urlObjectKeys=void 0;var n=(0,r(91598).Z)(r(94919));let a=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,o=e.protocol||"",i=e.pathname||"",l=e.hash||"",s=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:r&&(u=t+(~r.indexOf(":")?"[".concat(r,"]"):r),e.port&&(u+=":"+e.port)),s&&"object"==typeof s&&(s=String(n.urlQueryToSearchParams(s)));let c=e.search||s&&"?".concat(s)||"";return o&&!o.endsWith(":")&&(o+=":"),e.slashes||(!o||a.test(o))&&!1!==u?(u="//"+(u||""),i&&"/"!==i[0]&&(i="/"+i)):u||(u=""),l&&"#"!==l[0]&&(l="#"+l),c&&"?"!==c[0]&&(c="?"+c),i=i.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),"".concat(o).concat(u).concat(i).concat(c).concat(l)}t.urlObjectKeys=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"]},27929:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r="/"===e?"/index":/^\/index(\/|$)/.test(e)?"/index".concat(e):"".concat(e);return r+t}},18756:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getNextPathnameInfo=function(e,t){var r;let{basePath:i,i18n:l,trailingSlash:s}=null!=(r=t.nextConfig)?r:{},u={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):s};if(i&&o.pathHasPrefix(u.pathname,i)&&(u.pathname=a.removePathPrefix(u.pathname,i),u.basePath=i),!0===t.parseData&&u.pathname.startsWith("/_next/data/")&&u.pathname.endsWith(".json")){let e=u.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/"),t=e[0];u.pathname="index"!==e[1]?"/".concat(e.slice(1).join("/")):"/",u.buildId=t}if(l){let e=n.normalizeLocalePath(u.pathname,l.locales);u.locale=null==e?void 0:e.detectedLocale,u.pathname=(null==e?void 0:e.pathname)||u.pathname}return u};var n=r(24769),a=r(22650),o=r(93210)},4146:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleSmoothScroll=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=document.documentElement,n=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=n}},18588:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSortedRoutes",{enumerable:!0,get:function(){return n.getSortedRoutes}}),Object.defineProperty(t,"isDynamicRoute",{enumerable:!0,get:function(){return a.isDynamicRoute}});var n=r(30566),a=r(86238)},18074:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.interpolateAs=function(e,t,r){let o="",i=a.getRouteRegex(e),l=i.groups,s=(t!==e?n.getRouteMatcher(i)(t):"")||r;o=e;let u=Object.keys(l);return u.every(e=>{let t=s[e]||"",{repeat:r,optional:n}=l[e],a="[".concat(r?"...":"").concat(e,"]");return n&&(a="".concat(t?"":"/","[").concat(a,"]")),r&&!Array.isArray(t)&&(t=[t]),(n||e in s)&&(o=o.replace(a,r?t.map(e=>encodeURIComponent(e)).join("/"):encodeURIComponent(t))||"/")})||(o=""),{params:u,result:o}};var n=r(13156),a=r(54903)},21754:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isBot=function(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(e)}},86238:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDynamicRoute=function(e){return r.test(e)};let r=/\/\[[^/]+?\](?=\/|$)/},62139:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isLocalURL=function(e){if(!n.isAbsoluteUrl(e))return!0;try{let t=n.getLocationOrigin(),r=new URL(e,t);return r.origin===t&&a.hasBasePath(r.pathname)}catch(e){return!1}};var n=r(670),a=r(10928)},17562:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.omit=function(e,t){let r={};return Object.keys(e).forEach(n=>{t.includes(n)||(r[n]=e[n])}),r}},26727:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parsePath=function(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}},22864:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseRelativeUrl=function(e,t){let r=new URL(n.getLocationOrigin()),o=t?new URL(t,r):e.startsWith(".")?new URL(window.location.href):r,{pathname:i,searchParams:l,search:s,hash:u,href:c,origin:d}=new URL(e,o);if(d!==r.origin)throw Error("invariant: invalid relative URL, router received ".concat(e));return{pathname:i,query:a.searchParamsToUrlQuery(l),search:s,hash:u,href:c.slice(r.origin.length)}};var n=r(670),a=r(94919)},93210:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.pathHasPrefix=function(e,t){if("string"!=typeof e)return!1;let{pathname:r}=n.parsePath(e);return r===t||r.startsWith(t+"/")};var n=r(26727)},94919:function(e,t){"use strict";function r(e){return"string"!=typeof e&&("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.searchParamsToUrlQuery=function(e){let t={};return e.forEach((e,r)=>{void 0===t[r]?t[r]=e:Array.isArray(t[r])?t[r].push(e):t[r]=[t[r],e]}),t},t.urlQueryToSearchParams=function(e){let t=new URLSearchParams;return Object.entries(e).forEach(e=>{let[n,a]=e;Array.isArray(a)?a.forEach(e=>t.append(n,r(e))):t.set(n,r(a))}),t},t.assign=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n{Array.from(t.keys()).forEach(t=>e.delete(t)),t.forEach((t,r)=>e.append(r,t))}),e}},22650:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePathPrefix=function(e,t){if(n.pathHasPrefix(e,t)){let r=e.slice(t.length);return r.startsWith("/")?r:"/".concat(r)}return e};var n=r(93210)},40012:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=function(e){return e.replace(/\/$/,"")||"/"}},1978:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resolveHref=function(e,t,r){let d;let f="string"==typeof t?t:a.formatWithValidation(t),p=f.match(/^[a-zA-Z]{1,}:\/\//),h=p?f.slice(p[0].length):f,m=h.split("?");if((m[0]||"").match(/(\/\/|\\)/)){console.error("Invalid href passed to next/router: ".concat(f,", repeated forward-slashes (//) or backslashes \\ are not valid in the href"));let e=i.normalizeRepeatedSlashes(h);f=(p?p[0]:"")+e}if(!s.isLocalURL(f))return r?[f]:f;try{d=new URL(f.startsWith("#")?e.asPath:e.pathname,"http://n")}catch(e){d=new URL("/","http://n")}try{let e=new URL(f,d);e.pathname=l.normalizePathTrailingSlash(e.pathname);let t="";if(u.isDynamicRoute(e.pathname)&&e.searchParams&&r){let r=n.searchParamsToUrlQuery(e.searchParams),{result:i,params:l}=c.interpolateAs(e.pathname,e.pathname,r);i&&(t=a.formatWithValidation({pathname:i,hash:e.hash,query:o.omit(r,l)}))}let i=e.origin===d.origin?e.href.slice(e.origin.length):e.href;return r?[i,t||i]:i}catch(e){return r?[f]:f}};var n=r(94919),a=r(67795),o=r(17562),i=r(670),l=r(52700),s=r(62139),u=r(86238),c=r(18074)},13156:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRouteMatcher=function(e){let{re:t,groups:r}=e;return e=>{let a=t.exec(e);if(!a)return!1;let o=e=>{try{return decodeURIComponent(e)}catch(e){throw new n.DecodeError("failed to decode param")}},i={};return Object.keys(r).forEach(e=>{let t=r[e],n=a[t.pos];void 0!==n&&(i[e]=~n.indexOf("/")?n.split("/").map(e=>o(e)):t.repeat?[o(n)]:o(n))}),i}};var n=r(670)},54903:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRouteRegex=s,t.getNamedRouteRegex=function(e){let t=u(e);return n({},s(e),{namedRegex:"^".concat(t.namedParameterizedRoute,"(?:/)?$"),routeKeys:t.routeKeys})},t.getNamedMiddlewareRegex=function(e,t){let{parameterizedRoute:r}=l(e),{catchAll:n=!0}=t;if("/"===r)return{namedRegex:"^/".concat(n?".*":"","$")};let{namedParameterizedRoute:a}=u(e);return{namedRegex:"^".concat(a).concat(n?"(?:(/.*)?)":"","$")}};var n=r(6495).Z,a=r(18659),o=r(40012);function i(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}function l(e){let t=o.removeTrailingSlash(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{if(!(e.startsWith("[")&&e.endsWith("]")))return"/".concat(a.escapeStringRegexp(e));{let{key:t,optional:a,repeat:o}=i(e.slice(1,-1));return r[t]={pos:n++,repeat:o,optional:a},o?a?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}function s(e){let{parameterizedRoute:t,groups:r}=l(e);return{re:RegExp("^".concat(t,"(?:/)?$")),groups:r}}function u(e){let t,r;let n=o.removeTrailingSlash(e).slice(1).split("/"),l=(t=97,r=1,()=>{let e="";for(let n=0;n122&&(r++,t=97);return e}),s={};return{namedParameterizedRoute:n.map(e=>{if(!(e.startsWith("[")&&e.endsWith("]")))return"/".concat(a.escapeStringRegexp(e));{let{key:t,optional:r,repeat:n}=i(e.slice(1,-1)),a=t.replace(/\W/g,""),o=!1;return(0===a.length||a.length>30)&&(o=!0),isNaN(parseInt(a.slice(0,1)))||(o=!0),o&&(a=l()),s[a]=t,n?r?"(?:/(?<".concat(a,">.+?))?"):"/(?<".concat(a,">.+?)"):"/(?<".concat(a,">[^/]+?)")}}).join(""),routeKeys:s}}},30566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSortedRoutes=function(e){let t=new r;return e.forEach(e=>t.insert(e)),t.smoosh()};class r{insert(e){this._insert(e.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=[...this.children.keys()].sort();null!==this.slugName&&t.splice(t.indexOf("[]"),1),null!==this.restSlugName&&t.splice(t.indexOf("[...]"),1),null!==this.optionalRestSlugName&&t.splice(t.indexOf("[[...]]"),1);let r=t.map(t=>this.children.get(t)._smoosh("".concat(e).concat(t,"/"))).reduce((e,t)=>[...e,...t],[]);if(null!==this.slugName&&r.push(...this.children.get("[]")._smoosh("".concat(e,"[").concat(this.slugName,"]/"))),!this.placeholder){let t="/"===e?"/":e.slice(0,-1);if(null!=this.optionalRestSlugName)throw Error('You cannot define a route with the same specificity as a optional catch-all route ("'.concat(t,'" and "').concat(t,"[[...").concat(this.optionalRestSlugName,']]").'));r.unshift(t)}return null!==this.restSlugName&&r.push(...this.children.get("[...]")._smoosh("".concat(e,"[...").concat(this.restSlugName,"]/"))),null!==this.optionalRestSlugName&&r.push(...this.children.get("[[...]]")._smoosh("".concat(e,"[[...").concat(this.optionalRestSlugName,"]]/"))),r}_insert(e,t,n){if(0===e.length){this.placeholder=!1;return}if(n)throw Error("Catch-all must be the last part of the URL.");let a=e[0];if(a.startsWith("[")&&a.endsWith("]")){let r=a.slice(1,-1),i=!1;if(r.startsWith("[")&&r.endsWith("]")&&(r=r.slice(1,-1),i=!0),r.startsWith("...")&&(r=r.substring(3),n=!0),r.startsWith("[")||r.endsWith("]"))throw Error("Segment names may not start or end with extra brackets ('".concat(r,"')."));if(r.startsWith("."))throw Error("Segment names may not start with erroneous periods ('".concat(r,"')."));function o(e,r){if(null!==e&&e!==r)throw Error("You cannot use different slug names for the same dynamic path ('".concat(e,"' !== '").concat(r,"')."));t.forEach(e=>{if(e===r)throw Error('You cannot have the same slug name "'.concat(r,'" repeat within a single dynamic path'));if(e.replace(/\W/g,"")===a.replace(/\W/g,""))throw Error('You cannot have the slug names "'.concat(e,'" and "').concat(r,'" differ only by non-word symbols within a single dynamic path'))}),t.push(r)}if(n){if(i){if(null!=this.restSlugName)throw Error('You cannot use both an required and optional catch-all route at the same level ("[...'.concat(this.restSlugName,']" and "').concat(e[0],'" ).'));o(this.optionalRestSlugName,r),this.optionalRestSlugName=r,a="[[...]]"}else{if(null!=this.optionalRestSlugName)throw Error('You cannot use both an optional and required catch-all route at the same level ("[[...'.concat(this.optionalRestSlugName,']]" and "').concat(e[0],'").'));o(this.restSlugName,r),this.restSlugName=r,a="[...]"}}else{if(i)throw Error('Optional route parameters are not yet supported ("'.concat(e[0],'").'));o(this.slugName,r),this.slugName=r,a="[]"}}this.children.has(a)||this.children.set(a,new r),this.children.get(a)._insert(e.slice(1),t,n)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null}}},86949:function(e,t){"use strict";let r;Object.defineProperty(t,"__esModule",{value:!0}),t.setConfig=function(e){r=e},t.default=void 0,t.default=()=>r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},31436:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let{headManager:t,reduceComponentsToState:r}=e;function l(){if(t&&t.mountedInstances){let a=n.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(a,e))}}if(a){var s;null==t||null==(s=t.mountedInstances)||s.add(e.children),l()}return o(()=>{var r;return null==t||null==(r=t.mountedInstances)||r.add(e.children),()=>{var r;null==t||null==(r=t.mountedInstances)||r.delete(e.children)}}),o(()=>(t&&(t._pendingUpdate=l),()=>{t&&(t._pendingUpdate=l)})),i(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null};var n=(0,r(91598).Z)(r(67294));let a=!1,o=a?()=>{}:n.useLayoutEffect,i=a?()=>{}:n.useEffect},670:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.execOnce=function(e){let t,r=!1;return function(){for(var n=arguments.length,a=Array(n),o=0;oa.test(e);function i(){let{protocol:e,hostname:t,port:r}=window.location;return"".concat(e,"//").concat(t).concat(r?":"+r:"")}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function s(e){return e.finished||e.headersSent}function u(e,t){return c.apply(this,arguments)}function c(){return(c=n(function*(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:yield u(t.Component,t.ctx)}:{};let n=yield e.getInitialProps(t);if(r&&s(r))return n;if(!n){let t='"'.concat(l(e),'.getInitialProps()" should resolve to an object. But found "').concat(n,'" instead.');throw Error(t)}return n})).apply(this,arguments)}t.isAbsoluteUrl=o;let d="undefined"!=typeof performance;t.SP=d;let f=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);t.ST=f,t.DecodeError=class extends Error{},t.NormalizeError=class extends Error{},t.PageNotFoundError=class extends Error{constructor(e){super(),this.code="ENOENT",this.message="Cannot find module for page: ".concat(e)}},t.MissingStaticPage=class extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: ".concat(e," ").concat(t)}},t.MiddlewareNotFoundError=class extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}},57238:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warnOnce=void 0;let r=e=>{};t.warnOnce=r},78018:function(e){var t,r,n,a,o,i,l,s,u,c,d,f,p,h,m,g,y,v,_,P,b,S,w,E,x,j,C,O,R,M,A,L,T,I,N,k,D,B,U,H,F,q,W,Z,z,G;(t={}).d=function(e,r){for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},void 0!==t&&(t.ab="//"),r={},t.r(r),t.d(r,{getCLS:function(){return w},getFCP:function(){return P},getFID:function(){return M},getINP:function(){return q},getLCP:function(){return Z},getTTFB:function(){return G},onCLS:function(){return w},onFCP:function(){return P},onFID:function(){return M},onINP:function(){return q},onLCP:function(){return Z},onTTFB:function(){return G}}),s=-1,u=function(e){addEventListener("pageshow",function(t){t.persisted&&(s=t.timeStamp,e(t))},!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},d=function(){var e=c();return e&&e.activationStart||0},f=function(e,t){var r=c(),n="navigate";return s>=0?n="back-forward-cache":r&&(n=document.prerendering||d()>0?"prerender":r.type.replace(/_/g,"-")),{name:e,value:void 0===t?-1:t,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:n}},p=function(e,t,r){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var n=new PerformanceObserver(function(e){t(e.getEntries())});return n.observe(Object.assign({type:e,buffered:!0},r||{})),n}}catch(e){}},h=function(e,t){var r=function r(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||(e(n),t&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)},m=function(e,t,r,n){var a,o;return function(i){var l;t.value>=0&&(i||n)&&((o=t.value-(a||0))||void 0===a)&&(a=t.value,t.delta=o,t.rating=(l=t.value)>r[1]?"poor":l>r[0]?"needs-improvement":"good",e(t))}},g=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},v=function(){h(function(e){g=e.timeStamp},!0)},_=function(){return g<0&&(g=y(),v(),u(function(){setTimeout(function(){g=y(),v()},0)})),{get firstHiddenTime(){return g}}},P=function(e,t){t=t||{};var r,n=[1800,3e3],a=_(),o=f("FCP"),i=function(e){e.forEach(function(e){"first-contentful-paint"===e.name&&(s&&s.disconnect(),e.startTime-1&&e(t)},o=f("CLS",0),i=0,l=[],s=function(e){e.forEach(function(e){if(!e.hadRecentInput){var t=l[0],r=l[l.length-1];i&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,l.push(e)):(i=e.value,l=[e]),i>o.value&&(o.value=i,o.entries=l,n())}})},c=p("layout-shift",s);c&&(n=m(a,o,r,t.reportAllChanges),h(function(){s(c.takeRecords()),n(!0)}),u(function(){i=0,S=-1,n=m(a,o=f("CLS",0),r,t.reportAllChanges)}))},E={passive:!0,capture:!0},x=new Date,j=function(e,t){n||(n=t,a=e,o=new Date,R(removeEventListener),C())},C=function(){if(a>=0&&a1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?(t=function(){j(a,e),n()},r=function(){n()},n=function(){removeEventListener("pointerup",t,E),removeEventListener("pointercancel",r,E)},addEventListener("pointerup",t,E),addEventListener("pointercancel",r,E)):j(a,e)}},R=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach(function(t){return e(t,O,E)})},M=function(e,t){t=t||{};var r,o=[100,300],l=_(),s=f("FID"),c=function(e){e.startTimet.latency){if(r)r.entries.push(e),r.latency=Math.max(r.latency,e.duration);else{var n={id:e.interactionId,latency:e.duration,entries:[e]};H[n.id]=n,U.push(n)}U.sort(function(e,t){return t.latency-e.latency}),U.splice(10).forEach(function(e){delete H[e.id]})}},q=function(e,t){t=t||{};var r=[200,500];k();var n,a=f("INP"),o=function(e){e.forEach(function(e){e.interactionId&&F(e),"first-input"!==e.entryType||U.some(function(t){return t.entries.some(function(t){return e.duration===t.duration&&e.startTime===t.startTime})})||F(e)});var t,r=(t=Math.min(U.length-1,Math.floor(B()/50)),U[t]);r&&r.latency!==a.value&&(a.value=r.latency,a.entries=r.entries,n())},i=p("event",o,{durationThreshold:t.durationThreshold||40});n=m(e,a,r,t.reportAllChanges),i&&(i.observe({type:"first-input",buffered:!0}),h(function(){o(i.takeRecords()),a.value<0&&B()>0&&(a.value=0,a.entries=[]),n(!0)}),u(function(){U=[],D=N(),n=m(e,a=f("INP"),r,t.reportAllChanges)}))},W={},Z=function(e,t){t=t||{};var r,n=[2500,4e3],a=_(),o=f("LCP"),i=function(e){var t=e[e.length-1];if(t){var n=t.startTime-d();nperformance.now())return;n.entries=[o],a(!0),u(function(){(a=m(e,n=f("TTFB",0),r,t.reportAllChanges))(!0)})}})},e.exports=r},79423:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isAPIRoute=function(e){return"/api"===e||Boolean(null==e?void 0:e.startsWith("/api/"))}},80676:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=a,t.getProperError=function(e){return a(e)?e:Error(n.isPlainObject(e)?JSON.stringify(e):e+"")};var n=r(82849);function a(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}},72431:function(){}},function(e){e.O(0,[9774],function(){return e(e.s=21783)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/main-da49d387d19ca122.js b/_next/static/chunks/main-da49d387d19ca122.js new file mode 100644 index 00000000000..480ed8868c7 --- /dev/null +++ b/_next/static/chunks/main-da49d387d19ca122.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[179],{60932:function(e,t){"use strict";function r(e,t,r,n,a,o,i){try{var l=e[o](i),s=l.value}catch(e){r(e);return}l.done?t(s):Promise.resolve(s).then(n,a)}function n(e){return function(){var t=this,n=arguments;return new Promise(function(a,o){var i=e.apply(t,n);function l(e){r(i,a,o,l,s,"next",e)}function s(e){r(i,a,o,l,s,"throw",e)}l(void 0)})}}Object.defineProperty(t,"Z",{enumerable:!0,get:function(){return n}})},6495:function(e,t){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t=0||(a[r]=e[r]);return a}Object.defineProperty(t,"Z",{enumerable:!0,get:function(){return r}})},40037:function(){"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(r){return t.resolve(e()).then(function(){return r})},function(r){return t.resolve(e()).then(function(){throw r})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})})},33468:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addBasePath=function(e,t){return a.normalizePathTrailingSlash(n.addPathPrefix(e,""))};var n=r(44135),a=r(52700);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54465:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addLocale=void 0,r(52700),t.addLocale=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n{let t={};e.forEach(e=>{if("link"===e.type&&e.props["data-optimized-fonts"]){if(document.querySelector('style[data-href="'.concat(e.props["data-href"],'"]')))return;e.props.href=e.props["data-href"],e.props["data-href"]=void 0}let r=t[e.type]||[];r.push(e),t[e.type]=r});let r=t.title?t.title[0]:null,o="";if(r){let{children:e}=r.props;o="string"==typeof e?e:Array.isArray(e)?e.join(""):""}o!==document.title&&(document.title=o),["meta","base","link","style","script"].forEach(e=>{(function(e,t){let r=document.getElementsByTagName("head")[0],o=r.querySelector("meta[name=next-head-count]"),i=Number(o.content),l=[];for(let t=0,r=o.previousElementSibling;t{for(let t=0,r=l.length;t{var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),u.forEach(e=>r.insertBefore(e,o)),o.content=(i-l.length+u.length).toString()})(e,t[e]||[])})}}},t.isEqualNode=a,t.DOMAttributeNames=void 0;let r={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv",noModule:"noModule"};function n(e){let{type:t,props:n}=e,a=document.createElement(t);for(let e in n){if(!n.hasOwnProperty(e)||"children"===e||"dangerouslySetInnerHTML"===e||void 0===n[e])continue;let o=r[e]||e.toLowerCase();"script"===t&&("async"===o||"defer"===o||"noModule"===o)?a[o]=!!n[e]:a.setAttribute(o,n[e])}let{children:o,dangerouslySetInnerHTML:i}=n;return i?a.innerHTML=i.__html||"":o&&(a.textContent="string"==typeof o?o:Array.isArray(o)?o.join(""):""),a}function a(e,t){if(e instanceof HTMLElement&&t instanceof HTMLElement){let r=t.getAttribute("nonce");if(r&&!e.getAttribute("nonce")){let n=t.cloneNode(!0);return n.setAttribute("nonce",""),n.nonce=r,r===e.nonce&&e.isEqualNode(n)}}return e.isEqualNode(t)}t.DOMAttributeNames=r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},84534:function(e,t,r){"use strict";let n,a,o,i,l,s,u,c,d,f,p,h;Object.defineProperty(t,"__esModule",{value:!0});let m=r(91598).Z;Object.defineProperty(t,"__esModule",{value:!0}),t.initialize=function(){return V.apply(this,arguments)},t.hydrate=function(e){return es.apply(this,arguments)},t.emitter=t.router=t.version=void 0;var g=r(60932).Z,y=r(6495).Z,v=r(92648).Z;r(91598).Z,r(40037);var _=v(r(67294)),P=v(r(20745)),b=r(4664),S=v(r(8550)),w=r(72692),E=r(4146),x=r(86238),j=r(94919),C=r(86949),O=r(670),R=r(17345),M=v(r(31831)),A=v(r(70976)),L=v(r(659)),T=r(18483),I=r(80880),N=r(80676),k=r(28730),D=r(82813),B=r(10928),U=r(48245),H=r(60401),F=r(78914),W=v(r(86954));t.version="13.2.1",t.router=n;let q=S.default();t.emitter=q;let Z=e=>[].slice.call(e),z=!1;self.__next_require__=r;class G extends _.default.Component{componentDidCatch(e,t){this.props.fn(e,t)}componentDidMount(){this.scrollToHash(),n.isSsr&&(a.isFallback||a.nextExport&&(x.isDynamicRoute(n.pathname)||location.search||z)||a.props&&a.props.__N_SSG&&(location.search||z))&&n.replace(n.pathname+"?"+String(j.assign(j.urlQueryToSearchParams(n.query),new URLSearchParams(location.search))),o,{_h:1,shallow:!a.isFallback&&!z}).catch(e=>{if(!e.cancelled)throw e})}componentDidUpdate(){this.scrollToHash()}scrollToHash(){let{hash:e}=location;if(!(e=e&&e.substring(1)))return;let t=document.getElementById(e);t&&setTimeout(()=>t.scrollIntoView(),0)}render(){return this.props.children}}function V(){return(V=g(function*(){arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=JSON.parse(document.getElementById("__NEXT_DATA__").textContent),window.__NEXT_DATA__=a,h=a.defaultLocale;let e=a.assetPrefix||"";if(r.p="".concat(e,"/_next/"),C.setConfig({serverRuntimeConfig:{},publicRuntimeConfig:a.runtimeConfig||{}}),o=O.getURL(),B.hasBasePath(o)&&(o=D.removeBasePath(o)),a.scriptLoader){let{initScriptLoader:e}=r(63573);e(a.scriptLoader)}i=new A.default(a.buildId,e);let t=e=>{let[t,r]=e;return i.routeLoader.onEntrypoint(t,r)};return window.__NEXT_P&&window.__NEXT_P.map(e=>setTimeout(()=>t(e),0)),window.__NEXT_P=[],window.__NEXT_P.push=t,(s=M.default()).getIsSsr=()=>n.isSsr,l=document.getElementById("__next"),{assetPrefix:e}})).apply(this,arguments)}function X(e,t){return _.default.createElement(e,Object.assign({},t))}function Y(e){var t;let{children:r}=e;return _.default.createElement(G,{fn:e=>K({App:d,err:e}).catch(e=>console.error("Error rendering page: ",e))},_.default.createElement(U.AppRouterContext.Provider,{value:H.adaptForAppRouterInstance(n)},_.default.createElement(F.SearchParamsContext.Provider,{value:H.adaptForSearchParams(n)},_.default.createElement(H.PathnameContextProviderAdapter,{router:n,isAutoExport:null!=(t=self.__NEXT_DATA__.autoExport)&&t},_.default.createElement(w.RouterContext.Provider,{value:I.makePublicRouterInstance(n)},_.default.createElement(b.HeadManagerContext.Provider,{value:s},_.default.createElement(k.ImageConfigContext.Provider,{value:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image/",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}},r)))))))}let $=e=>t=>{let r=y({},t,{Component:p,err:a.err,router:n});return _.default.createElement(Y,null,X(e,r))};function K(e){let{App:t,err:l}=e;return console.error(l),console.error("A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred"),i.loadPage("/_error").then(n=>{let{page:a,styleSheets:o}=n;return(null==u?void 0:u.Component)===a?Promise.resolve().then(()=>m(r(97345))).then(n=>Promise.resolve().then(()=>m(r(74297))).then(r=>(t=r.default,e.App=t,n))).then(e=>({ErrorComponent:e.default,styleSheets:[]})):{ErrorComponent:a,styleSheets:o}}).then(r=>{var i;let{ErrorComponent:s,styleSheets:u}=r,c=$(t),d={Component:s,AppTree:c,router:n,ctx:{err:l,pathname:a.page,query:a.query,asPath:o,AppTree:c}};return Promise.resolve((null==(i=e.props)?void 0:i.err)?e.props:O.loadGetInitialProps(t,d)).then(t=>eo(y({},e,{err:l,Component:s,styleSheets:u,props:t})))})}function J(e){let{callback:t}=e;return _.default.useLayoutEffect(()=>t(),[t]),null}let Q=null,ee=!0;function et(){["beforeRender","afterHydrate","afterRender","routeChange"].forEach(e=>performance.clearMarks(e))}function er(){O.ST&&(performance.mark("afterHydrate"),performance.measure("Next.js-before-hydration","navigationStart","beforeRender"),performance.measure("Next.js-hydration","beforeRender","afterHydrate"),f&&performance.getEntriesByName("Next.js-hydration").forEach(f),et())}function en(){if(!O.ST)return;performance.mark("afterRender");let e=performance.getEntriesByName("routeChange","mark");e.length&&(performance.measure("Next.js-route-change-to-render",e[0].name,"beforeRender"),performance.measure("Next.js-render","beforeRender","afterRender"),f&&(performance.getEntriesByName("Next.js-render").forEach(f),performance.getEntriesByName("Next.js-route-change-to-render").forEach(f)),et(),["Next.js-route-change-to-render","Next.js-render"].forEach(e=>performance.clearMeasures(e)))}function ea(e){let{callbacks:t,children:r}=e;return _.default.useLayoutEffect(()=>t.forEach(e=>e()),[t]),_.default.useEffect(()=>{L.default(f)},[]),r}function eo(e){let t,{App:r,Component:a,props:o,err:i}=e,s="initial"in e?void 0:e.styleSheets;a=a||u.Component,o=o||u.props;let d=y({},o,{Component:a,err:i,router:n});u=d;let f=!1,p=new Promise((e,r)=>{c&&c(),t=()=>{c=null,e()},c=()=>{f=!0,c=null;let e=Error("Cancel rendering route");e.cancelled=!0,r(e)}});function h(){t()}!function(){if(!s)return;let e=Z(document.querySelectorAll("style[data-n-href]")),t=new Set(e.map(e=>e.getAttribute("data-n-href"))),r=document.querySelector("noscript[data-n-css]"),n=null==r?void 0:r.getAttribute("data-n-css");s.forEach(e=>{let{href:r,text:a}=e;if(!t.has(r)){let e=document.createElement("style");e.setAttribute("data-n-href",r),e.setAttribute("media","x"),n&&e.setAttribute("nonce",n),document.head.appendChild(e),e.appendChild(document.createTextNode(a))}})}();let m=_.default.createElement(_.default.Fragment,null,_.default.createElement(J,{callback:function(){if(s&&!f){let e=new Set(s.map(e=>e.href)),t=Z(document.querySelectorAll("style[data-n-href]")),r=t.map(e=>e.getAttribute("data-n-href"));for(let n=0;n{let{href:t}=e,r=document.querySelector('style[data-n-href="'.concat(t,'"]'));r&&(n.parentNode.insertBefore(r,n.nextSibling),n=r)}),Z(document.querySelectorAll("link[data-n-p]")).forEach(e=>{e.parentNode.removeChild(e)})}if(e.scroll){let{x:t,y:r}=e.scroll;E.handleSmoothScroll(()=>{window.scrollTo(t,r)})}}}),_.default.createElement(Y,null,X(r,d),_.default.createElement(R.Portal,{type:"next-route-announcer"},_.default.createElement(T.RouteAnnouncer,null))));return!function(e,t){O.ST&&performance.mark("beforeRender");let r=t(ee?er:en);if(Q){let e=_.default.startTransition;e(()=>{Q.render(r)})}else Q=P.default.hydrateRoot(e,r,{onRecoverableError:W.default}),ee=!1}(l,e=>_.default.createElement(ea,{callbacks:[e,h]},_.default.createElement(_.default.StrictMode,null,m))),p}function ei(e){return el.apply(this,arguments)}function el(){return(el=g(function*(e){if(e.err){yield K(e);return}try{yield eo(e)}catch(r){let t=N.getProperError(r);if(t.cancelled)throw t;yield K(y({},e,{err:t}))}})).apply(this,arguments)}function es(){return(es=g(function*(e){let r=a.err;try{let e=yield i.routeLoader.whenEntrypoint("/_app");if("error"in e)throw e.error;let{component:t,exports:r}=e;d=t,r&&r.reportWebVitals&&(f=e=>{let t,{id:n,name:a,startTime:o,value:i,duration:l,entryType:s,entries:u,attribution:c}=e,d="".concat(Date.now(),"-").concat(Math.floor(Math.random()*(9e12-1))+1e12);u&&u.length&&(t=u[0].startTime);let f={id:n||d,name:a,startTime:o||t,value:null==i?l:i,label:"mark"===s||"measure"===s?"custom":"web-vital"};c&&(f.attribution=c),r.reportWebVitals(f)});let n=yield i.routeLoader.whenEntrypoint(a.page);if("error"in n)throw n.error;p=n.component}catch(e){r=N.getProperError(e)}window.__NEXT_PRELOADREADY&&(yield window.__NEXT_PRELOADREADY(a.dynamicIds)),t.router=n=I.createRouter(a.page,a.query,o,{initialProps:a.props,pageLoader:i,App:d,Component:p,wrapApp:$,err:r,isFallback:Boolean(a.isFallback),subscription:(e,t,r)=>ei(Object.assign({},e,{App:t,scroll:r})),locale:a.locale,locales:a.locales,defaultLocale:h,domainLocales:a.domainLocales,isPreview:a.isPreview}),z=yield n._initialMatchesMiddlewarePromise;let l={App:d,initial:!0,Component:p,props:a.props,err:r};(null==e?void 0:e.beforeRender)&&(yield e.beforeRender()),ei(l)})).apply(this,arguments)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},21783:function(e,t,r){"use strict";var n=r(84534);window.next={version:n.version,get router(){return n.router},emitter:n.emitter},n.initialize({}).then(()=>n.hydrate()).catch(console.error),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},52700:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizePathTrailingSlash=void 0;var n=r(40012),a=r(26727);let o=e=>{if(!e.startsWith("/"))return e;let{pathname:t,query:r,hash:o}=a.parsePath(e);return/\.[^/]+\/?$/.test(t)?"".concat(n.removeTrailingSlash(t)).concat(r).concat(o):t.endsWith("/")?"".concat(t).concat(r).concat(o):"".concat(t,"/").concat(r).concat(o)};t.normalizePathTrailingSlash=o,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},86954:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=e.digest||t.digest,a="function"==typeof reportError?reportError:e=>{window.console.error(e)};r!==n.NEXT_DYNAMIC_NO_SSR_CODE&&a(e)};var n=r(75680);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},70976:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92648).Z,a=r(33468),o=r(18074),i=n(r(27929)),l=r(54465),s=r(86238),u=r(22864),c=r(40012),d=r(82497);t.default=class{getPageList(){return d.getClientBuildManifest().then(e=>e.sortedPages)}getMiddleware(){return window.__MIDDLEWARE_MATCHERS=[],window.__MIDDLEWARE_MATCHERS}getDataHref(e){let{asPath:t,href:r,locale:n}=e,{pathname:d,query:f,search:p}=u.parseRelativeUrl(r),{pathname:h}=u.parseRelativeUrl(t),m=c.removeTrailingSlash(d);if("/"!==m[0])throw Error('Route name should start with a "/", got "'.concat(m,'"'));return(e=>{let t=i.default(c.removeTrailingSlash(l.addLocale(e,n)),".json");return a.addBasePath("/_next/data/".concat(this.buildId).concat(t).concat(p),!0)})(e.skipInterpolation?h:s.isDynamicRoute(m)?o.interpolateAs(d,h,f).result:m)}_isSsg(e){return this.promisedSsgManifest.then(t=>t.has(e))}loadPage(e){return this.routeLoader.loadRoute(e).then(e=>{if("component"in e)return{page:e.component,mod:e.exports,styleSheets:e.styles.map(e=>({href:e.href,text:e.content}))};throw e.error})}prefetch(e){return this.routeLoader.prefetch(e)}constructor(e,t){this.routeLoader=d.createRouteLoader(t),this.buildId=e,this.assetPrefix=t,this.promisedSsgManifest=new Promise(e=>{window.__SSG_MANIFEST?e(window.__SSG_MANIFEST):window.__SSG_MANIFEST_CB=()=>{e(window.__SSG_MANIFEST)}})}},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},659:function(e,t,r){"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;let a=["CLS","FCP","FID","INP","LCP","TTFB"];location.href;let o=!1;function i(e){n&&n(e)}var l=e=>{if(n=e,!o)for(let e of(o=!0,a))try{let t;t||(t=r(78018)),t["on".concat(e)](i)}catch(t){console.warn("Failed to track ".concat(e," web-vital"),t)}};t.default=l,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},17345:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Portal=void 0;var n=r(67294),a=r(73935);let o=e=>{let{children:t,type:r}=e,[o,i]=n.useState(null);return n.useEffect(()=>{let e=document.createElement(r);return document.body.appendChild(e),i(e),()=>{document.body.removeChild(e)}},[r]),o?a.createPortal(t,o):null};t.Portal=o,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82813:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeBasePath=function(e){return(e=e.slice(0)).startsWith("/")||(e="/".concat(e)),e},r(10928),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},66876:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeLocale=function(e,t){return e},r(26727),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44686:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.cancelIdleCallback=t.requestIdleCallback=void 0;let r="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)};t.requestIdleCallback=r;let n="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};t.cancelIdleCallback=n,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},18483:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.RouteAnnouncer=void 0;var n=(0,r(92648).Z)(r(67294)),a=r(80880);let o={border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap",wordWrap:"normal"},i=()=>{let{asPath:e}=a.useRouter(),[t,r]=n.default.useState(""),i=n.default.useRef(e);return n.default.useEffect(()=>{if(i.current!==e){if(i.current=e,document.title)r(document.title);else{var t;let n=document.querySelector("h1"),a=null!=(t=null==n?void 0:n.innerText)?t:null==n?void 0:n.textContent;r(a||e)}}},[e]),n.default.createElement("p",{"aria-live":"assertive",id:"__next-route-announcer__",role:"alert",style:o},t)};t.RouteAnnouncer=i,t.default=i,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82497:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.markAssetError=l,t.isAssetError=function(e){return e&&i in e},t.getClientBuildManifest=c,t.createRouteLoader=function(e){let t=new Map,r=new Map,n=new Map,i=new Map;function c(e){{var t;let n=r.get(e.toString());return n||(document.querySelector('script[src^="'.concat(e,'"]'))?Promise.resolve():(r.set(e.toString(),n=new Promise((r,n)=>{(t=document.createElement("script")).onload=r,t.onerror=()=>n(l(Error("Failed to load script: ".concat(e)))),t.crossOrigin=void 0,t.src=e,document.body.appendChild(t)})),n))}}function f(e){let t=n.get(e);return t||n.set(e,t=fetch(e).then(t=>{if(!t.ok)throw Error("Failed to load stylesheet: ".concat(e));return t.text().then(t=>({href:e,content:t}))}).catch(e=>{throw l(e)})),t}return{whenEntrypoint:e=>o(e,t),onEntrypoint(e,r){(r?Promise.resolve().then(()=>r()).then(e=>({component:e&&e.default||e,exports:e}),e=>({error:e})):Promise.resolve(void 0)).then(r=>{let n=t.get(e);n&&"resolve"in n?r&&(t.set(e,r),n.resolve(r)):(r?t.set(e,r):t.delete(e),i.delete(e))})},loadRoute(r,n){return o(r,i,()=>{let a;return u(d(e,r).then(e=>{let{scripts:n,css:a}=e;return Promise.all([t.has(r)?[]:Promise.all(n.map(c)),Promise.all(a.map(f))])}).then(e=>this.whenEntrypoint(r).then(t=>({entrypoint:t,styles:e[1]}))),3800,l(Error("Route did not complete loading: ".concat(r)))).then(e=>{let{entrypoint:t,styles:r}=e,n=Object.assign({styles:r},t);return"error"in t?t:n}).catch(e=>{if(n)throw e;return{error:e}}).finally(()=>null==a?void 0:a())})},prefetch(t){let r;return(r=navigator.connection)&&(r.saveData||/2g/.test(r.effectiveType))?Promise.resolve():d(e,t).then(e=>Promise.all(s?e.scripts.map(e=>{var t,r,n;return t=e.toString(),r="script",new Promise((e,a)=>{let o='\n link[rel="prefetch"][href^="'.concat(t,'"],\n link[rel="preload"][href^="').concat(t,'"],\n script[src^="').concat(t,'"]');if(document.querySelector(o))return e();n=document.createElement("link"),r&&(n.as=r),n.rel="prefetch",n.crossOrigin=void 0,n.onload=e,n.onerror=()=>a(l(Error("Failed to prefetch: ".concat(t)))),n.href=t,document.head.appendChild(n)})}):[])).then(()=>{a.requestIdleCallback(()=>this.loadRoute(t,!0).catch(()=>{}))}).catch(()=>{})}}},(0,r(92648).Z)(r(27929));var n=r(65407),a=r(44686);function o(e,t,r){let n,a=t.get(e);if(a)return"future"in a?a.future:Promise.resolve(a);let o=new Promise(e=>{n=e});return t.set(e,a={resolve:n,future:o}),r?r().then(e=>(n(e),e)).catch(r=>{throw t.delete(e),r}):o}let i=Symbol("ASSET_LOAD_ERROR");function l(e){return Object.defineProperty(e,i,{})}let s=function(e){try{return e=document.createElement("link"),!!window.MSInputMethodContext&&!!document.documentMode||e.relList.supports("prefetch")}catch(e){return!1}}();function u(e,t,r){return new Promise((n,o)=>{let i=!1;e.then(e=>{i=!0,n(e)}).catch(o),a.requestIdleCallback(()=>setTimeout(()=>{i||o(r)},t))})}function c(){if(self.__BUILD_MANIFEST)return Promise.resolve(self.__BUILD_MANIFEST);let e=new Promise(e=>{let t=self.__BUILD_MANIFEST_CB;self.__BUILD_MANIFEST_CB=()=>{e(self.__BUILD_MANIFEST),t&&t()}});return u(e,3800,l(Error("Failed to load client build manifest")))}function d(e,t){return c().then(r=>{if(!(t in r))throw l(Error("Failed to lookup route: ".concat(t)));let a=r[t].map(t=>e+"/_next/"+encodeURI(t));return{scripts:a.filter(e=>e.endsWith(".js")).map(e=>n.__unsafeCreateTrustedScriptURL(e)),css:a.filter(e=>e.endsWith(".css"))}})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},80880:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Router",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"withRouter",{enumerable:!0,get:function(){return s.default}}),t.useRouter=function(){let e=a.default.useContext(i.RouterContext);if(!e)throw Error("NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted");return e},t.createRouter=function(){for(var e=arguments.length,t=Array(e),r=0;re()),u.readyCallbacks=[],u.router},t.makePublicRouterInstance=function(e){let t={};for(let r of c){if("object"==typeof e[r]){t[r]=Object.assign(Array.isArray(e[r])?[]:{},e[r]);continue}t[r]=e[r]}return t.events=o.default.events,d.forEach(r=>{t[r]=function(){for(var t=arguments.length,n=Array(t),a=0;ao.default.events}),c.forEach(e=>{Object.defineProperty(u,e,{get(){let t=f();return t[e]}})}),d.forEach(e=>{u[e]=function(){for(var t=arguments.length,r=Array(t),n=0;n{u.ready(()=>{o.default.events.on(e,function(){for(var t=arguments.length,r=Array(t),n=0;n{let t=e.id||e.getAttribute("src");p.add(t)})}()},t.default=void 0;var n=r(6495).Z,a=r(92648).Z,o=r(91598).Z,i=r(17273).Z,l=a(r(73935)),s=o(r(67294)),u=r(4664),c=r(31831),d=r(44686);let f=new Map,p=new Set,h=["onLoad","onReady","dangerouslySetInnerHTML","children","onError","strategy"],m=e=>{let{src:t,id:r,onLoad:n=()=>{},onReady:a=null,dangerouslySetInnerHTML:o,children:i="",strategy:l="afterInteractive",onError:s}=e,u=r||t;if(u&&p.has(u))return;if(f.has(t)){p.add(u),f.get(t).then(n,s);return}let d=()=>{a&&a(),p.add(u)},m=document.createElement("script"),g=new Promise((e,t)=>{m.addEventListener("load",function(t){e(),n&&n.call(this,t),d()}),m.addEventListener("error",function(e){t(e)})}).catch(function(e){s&&s(e)});for(let[r,n]of(o?(m.innerHTML=o.__html||"",d()):i?(m.textContent="string"==typeof i?i:Array.isArray(i)?i.join(""):"",d()):t&&(m.src=t,f.set(t,g)),Object.entries(e))){if(void 0===n||h.includes(r))continue;let e=c.DOMAttributeNames[r]||r.toLowerCase();m.setAttribute(e,n)}"worker"===l&&m.setAttribute("type","text/partytown"),m.setAttribute("data-nscript",l),document.body.appendChild(m)};function g(e){let{strategy:t="afterInteractive"}=e;"lazyOnload"===t?window.addEventListener("load",()=>{d.requestIdleCallback(()=>m(e))}):m(e)}function y(e){let{id:t,src:r="",onLoad:a=()=>{},onReady:o=null,strategy:c="afterInteractive",onError:f}=e,h=i(e,["id","src","onLoad","onReady","strategy","onError"]),{updateScripts:g,scripts:y,getIsSsr:v,appDir:_,nonce:P}=s.useContext(u.HeadManagerContext),b=s.useRef(!1);s.useEffect(()=>{let e=t||r;b.current||(o&&e&&p.has(e)&&o(),b.current=!0)},[o,t,r]);let S=s.useRef(!1);if(s.useEffect(()=>{!S.current&&("afterInteractive"===c?m(e):"lazyOnload"===c&&("complete"===document.readyState?d.requestIdleCallback(()=>m(e)):window.addEventListener("load",()=>{d.requestIdleCallback(()=>m(e))})),S.current=!0)},[e,c]),("beforeInteractive"===c||"worker"===c)&&(g?(y[c]=(y[c]||[]).concat([n({id:t,src:r,onLoad:a,onReady:o,onError:f},h)]),g(y)):v&&v()?p.add(t||r):v&&!v()&&m(e)),_){if("beforeInteractive"===c)return r?(l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity}:{as:"script"}),s.default.createElement("script",{nonce:P,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push(".concat(JSON.stringify([r]),")")}})):(h.dangerouslySetInnerHTML&&(h.children=h.dangerouslySetInnerHTML.__html,delete h.dangerouslySetInnerHTML),s.default.createElement("script",{nonce:P,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push(".concat(JSON.stringify([0,n({},h)]),")")}}));"afterInteractive"===c&&r&&l.default.preload(r,h.integrity?{as:"script",integrity:h.integrity}:{as:"script"})}return null}Object.defineProperty(y,"__nextScript",{value:!0}),t.default=y,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},65407:function(e,t){"use strict";let r;Object.defineProperty(t,"__esModule",{value:!0}),t.__unsafeCreateTrustedScriptURL=function(e){var t;return(null==(t=function(){if(void 0===r){var e;r=(null==(e=window.trustedTypes)?void 0:e.createPolicy("nextjs",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e}))||null}return r}())?void 0:t.createScriptURL(e))||e},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},49977:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(t){return n.default.createElement(e,Object.assign({router:a.useRouter()},t))}return t.getInitialProps=e.getInitialProps,t.origGetInitialProps=e.origGetInitialProps,t};var n=(0,r(92648).Z)(r(67294)),a=r(80880);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},74297:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,a=r(60932).Z,o=(0,r(92648).Z)(r(67294)),i=r(670);function l(e){return s.apply(this,arguments)}function s(){return(s=a(function*(e){let{Component:t,ctx:r}=e,n=yield i.loadGetInitialProps(t,r);return{pageProps:n}})).apply(this,arguments)}class u extends(n=o.default.Component){render(){let{Component:e,pageProps:t}=this.props;return o.default.createElement(e,Object.assign({},t))}}u.origGetInitialProps=l,u.getInitialProps=l,t.default=u,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},97345:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,a=r(92648).Z,o=a(r(67294)),i=a(r(83121));let l={400:"Bad Request",404:"This page could not be found",405:"Method Not Allowed",500:"Internal Server Error"};function s(e){let{res:t,err:r}=e,n=t&&t.statusCode?t.statusCode:r?r.statusCode:404;return{statusCode:n}}let u={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block",textAlign:"left"},h1:{display:"inline-block",margin:"0 20px 0 0",paddingRight:23,fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};class c extends(n=o.default.Component){render(){let{statusCode:e,withDarkMode:t=!0}=this.props,r=this.props.title||l[e]||"An unexpected error has occurred";return o.default.createElement("div",{style:u.error},o.default.createElement(i.default,null,o.default.createElement("title",null,e?"".concat(e,": ").concat(r):"Application error: a client-side exception has occurred")),o.default.createElement("div",null,o.default.createElement("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}".concat(t?"@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}":"")}}),e?o.default.createElement("h1",{className:"next-error-h1",style:u.h1},e):null,o.default.createElement("div",{style:u.desc},o.default.createElement("h2",{style:u.h2},this.props.title||e?r:o.default.createElement(o.default.Fragment,null,"Application error: a client-side exception has occurred (see the browser console for more information)"),"."))))}}c.displayName="ErrorPage",c.getInitialProps=s,c.origGetInitialProps=s,t.default=c,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},40610:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AmpStateContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext({});t.AmpStateContext=a},40532:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isInAmpMode=function(){let{ampFirst:e=!1,hybrid:t=!1,hasQuery:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e||t&&r}},48245:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TemplateContext=t.GlobalLayoutRouterContext=t.LayoutRouterContext=t.AppRouterContext=t.CacheStates=void 0;var n,a,o=(0,r(92648).Z)(r(67294));t.CacheStates=n,(a=n||(t.CacheStates=n={})).LAZY_INITIALIZED="LAZYINITIALIZED",a.DATA_FETCH="DATAFETCH",a.READY="READY";let i=o.default.createContext(null);t.AppRouterContext=i;let l=o.default.createContext(null);t.LayoutRouterContext=l;let s=o.default.createContext(null);t.GlobalLayoutRouterContext=s;let u=o.default.createContext(null);t.TemplateContext=u},18659:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.escapeStringRegexp=function(e){return r.test(e)?e.replace(n,"\\$&"):e};let r=/[|\\{}()[\]^$+*?.-]/,n=/[|\\{}()[\]^$+*?.-]/g},4664:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HeadManagerContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext({});t.HeadManagerContext=a},83121:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultHead=c,t.default=void 0;var n=r(6495).Z,a=r(92648).Z,o=(0,r(91598).Z)(r(67294)),i=a(r(31436)),l=r(40610),s=r(4664),u=r(40532);function c(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[o.default.createElement("meta",{charSet:"utf-8"})];return e||t.push(o.default.createElement("meta",{name:"viewport",content:"width=device-width"})),t}function d(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===o.default.Fragment?e.concat(o.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}r(57238);let f=["name","httpEquiv","charSet","itemProp"];function p(e,t){let{inAmpMode:r}=t;return e.reduce(d,[]).reverse().concat(c(r).reverse()).filter(function(){let e=new Set,t=new Set,r=new Set,n={};return a=>{let o=!0,i=!1;if(a.key&&"number"!=typeof a.key&&a.key.indexOf("$")>0){i=!0;let t=a.key.slice(a.key.indexOf("$")+1);e.has(t)?o=!1:e.add(t)}switch(a.type){case"title":case"base":t.has(a.type)?o=!1:t.add(a.type);break;case"meta":for(let e=0,t=f.length;e{let a=e.key||t;if(!r&&"link"===e.type&&e.props.href&&["https://fonts.googleapis.com/css","https://use.typekit.net/"].some(t=>e.props.href.startsWith(t))){let t=n({},e.props||{});return t["data-href"]=t.href,t.href=void 0,t["data-optimized-fonts"]=!0,o.default.cloneElement(e,t)}return o.default.cloneElement(e,{key:a})})}t.default=function(e){let{children:t}=e,r=o.useContext(l.AmpStateContext),n=o.useContext(s.HeadManagerContext);return o.default.createElement(i.default,{reduceComponentsToState:p,headManager:n,inAmpMode:u.isInAmpMode(r)},t)},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},78914:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LayoutSegmentsContext=t.ParamsContext=t.PathnameContext=t.SearchParamsContext=void 0;var n=r(67294);let a=n.createContext(null);t.SearchParamsContext=a;let o=n.createContext(null);t.PathnameContext=o;let i=n.createContext(null);t.ParamsContext=i;let l=n.createContext(null);t.LayoutSegmentsContext=l},24769:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeLocalePath=function(e,t){let r;let n=e.split("/");return(t||[]).some(t=>!!n[1]&&n[1].toLowerCase()===t.toLowerCase()&&(r=t,n.splice(1,1),e=n.join("/")||"/",!0)),{pathname:e,detectedLocale:r}}},28730:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImageConfigContext=void 0;var n=(0,r(92648).Z)(r(67294)),a=r(10139);let o=n.default.createContext(a.imageConfigDefault);t.ImageConfigContext=o},10139:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.imageConfigDefault=t.VALID_LOADERS=void 0,t.VALID_LOADERS=["default","imgix","cloudinary","akamai","custom"],t.imageConfigDefault={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:60,formats:["image/webp"],dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"inline",remotePatterns:[],unoptimized:!1}},82849:function(e,t){"use strict";function r(e){return Object.prototype.toString.call(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.getObjectClassLabel=r,t.isPlainObject=function(e){if("[object Object]"!==r(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}},75680:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NEXT_DYNAMIC_NO_SSR_CODE=void 0,t.NEXT_DYNAMIC_NO_SSR_CODE="DYNAMIC_SERVER_USAGE"},8550:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){let e=Object.create(null);return{on(t,r){(e[t]||(e[t]=[])).push(r)},off(t,r){e[t]&&e[t].splice(e[t].indexOf(r)>>>0,1)},emit(t){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;a{e(...n)})}}}},6301:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.denormalizePagePath=function(e){let t=a.normalizePathSep(e);return t.startsWith("/index/")&&!n.isDynamicRoute(t)?t.slice(6):"/index"!==t?t:"/"};var n=r(18588),a=r(49997)},49997:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizePathSep=function(e){return e.replace(/\\/g,"/")}},72692:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RouterContext=void 0;var n=(0,r(92648).Z)(r(67294));let a=n.default.createContext(null);t.RouterContext=a},60401:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.adaptForAppRouterInstance=function(e){return{back(){e.back()},forward(){e.forward()},refresh(){e.reload()},push(t){e.push(t)},replace(t){e.replace(t)},prefetch(t){e.prefetch(t)}}},t.adaptForSearchParams=function(e){return e.isReady&&e.query?function(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,e);else void 0!==n&&t.append(r,n);return t}(e.query):new URLSearchParams},t.PathnameContextProviderAdapter=function(e){var{children:t,router:r}=e,n=a(e,["children","router"]);let s=o.useRef(n.isAutoExport),u=o.useMemo(()=>{let e;let t=s.current;if(t&&(s.current=!1),l.isDynamicRoute(r.pathname)&&(r.isFallback||t&&!r.isReady))return null;try{e=new URL(r.asPath,"http://f")}catch(e){return"/"}return e.pathname},[r.asPath,r.isFallback,r.isReady,r.pathname]);return o.default.createElement(i.PathnameContext.Provider,{value:u},t)};var n=r(91598).Z,a=r(17273).Z,o=n(r(67294)),i=r(78914),l=r(18588)},41003:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.matchesMiddleware=D,t.createKey=V,t.default=void 0;var n=r(60932).Z,a=r(6495).Z,o=r(92648).Z,i=r(91598).Z,l=r(40012),s=r(82497),u=r(63573),c=i(r(80676)),d=r(6301),f=r(24769),p=o(r(8550)),h=r(670),m=r(86238),g=r(22864);o(r(72431));var y=r(13156),v=r(54903),_=r(67795);r(84643);var P=r(26727),b=r(54465),S=r(66876),w=r(82813),E=r(33468),x=r(10928),j=r(79423),C=r(18756),O=r(57429),R=r(79002),M=r(62139),A=r(21754),L=r(17562),T=r(1978),I=r(18074),N=r(4146);function k(){return Object.assign(Error("Route Cancelled"),{cancelled:!0})}function D(e){return B.apply(this,arguments)}function B(){return(B=n(function*(e){let t=yield Promise.resolve(e.router.pageLoader.getMiddleware());if(!t)return!1;let{pathname:r}=P.parsePath(e.asPath),n=x.hasBasePath(r)?w.removeBasePath(r):r,a=E.addBasePath(b.addLocale(n,e.locale));return t.some(e=>RegExp(e.regexp).test(a))})).apply(this,arguments)}function U(e){let t=h.getLocationOrigin();return e.startsWith(t)?e.substring(t.length):e}function H(e,t,r){let[n,a]=T.resolveHref(e,t,!0),o=h.getLocationOrigin(),i=n.startsWith(o),l=a&&a.startsWith(o);n=U(n),a=a?U(a):a;let s=i?n:E.addBasePath(n),u=r?U(T.resolveHref(e,r)):a||n;return{url:s,as:l?u:E.addBasePath(u)}}function F(e,t){let r=l.removeTrailingSlash(d.denormalizePagePath(e));return"/404"===r||"/_error"===r?e:(t.includes(r)||t.some(t=>{if(m.isDynamicRoute(t)&&v.getRouteRegex(t).re.test(r))return e=t,!0}),l.removeTrailingSlash(e))}function W(e){return q.apply(this,arguments)}function q(){return(q=n(function*(e){let t=yield D(e);if(!t||!e.fetchData)return null;try{let t=yield e.fetchData(),r=yield function(e,t,r){let n={basePath:r.router.basePath,i18n:{locales:r.router.locales},trailingSlash:Boolean(!0)},o=t.headers.get("x-nextjs-rewrite"),i=o||t.headers.get("x-nextjs-matched-path"),u=t.headers.get("x-matched-path");if(!u||i||u.includes("__next_data_catchall")||u.includes("/_error")||u.includes("/404")||(i=u),i){if(i.startsWith("/")){let t=g.parseRelativeUrl(i),a=C.getNextPathnameInfo(t.pathname,{nextConfig:n,parseData:!0}),u=l.removeTrailingSlash(a.pathname);return Promise.all([r.router.pageLoader.getPageList(),s.getClientBuildManifest()]).then(n=>{let[i,{__rewrites:l}]=n,s=b.addLocale(a.pathname,a.locale);if(m.isDynamicRoute(s)||!o&&i.includes(f.normalizeLocalePath(w.removeBasePath(s),r.router.locales).pathname)){let r=C.getNextPathnameInfo(g.parseRelativeUrl(e).pathname,{parseData:!0});s=E.addBasePath(r.pathname),t.pathname=s}if(!i.includes(u)){let e=F(u,i);e!==u&&(u=e)}let c=i.includes(u)?u:F(f.normalizeLocalePath(w.removeBasePath(t.pathname),r.router.locales).pathname,i);if(m.isDynamicRoute(c)){let e=y.getRouteMatcher(v.getRouteRegex(c))(s);Object.assign(t.query,e||{})}return{type:"rewrite",parsedAs:t,resolvedHref:c}})}let t=P.parsePath(e),u=O.formatNextPathnameInfo(a({},C.getNextPathnameInfo(t.pathname,{nextConfig:n,parseData:!0}),{defaultLocale:r.router.defaultLocale,buildId:""}));return Promise.resolve({type:"redirect-external",destination:"".concat(u).concat(t.query).concat(t.hash)})}let c=t.headers.get("x-nextjs-redirect");if(c){if(c.startsWith("/")){let e=P.parsePath(c),t=O.formatNextPathnameInfo(a({},C.getNextPathnameInfo(e.pathname,{nextConfig:n,parseData:!0}),{defaultLocale:r.router.defaultLocale,buildId:""}));return Promise.resolve({type:"redirect-internal",newAs:"".concat(t).concat(e.query).concat(e.hash),newUrl:"".concat(t).concat(e.query).concat(e.hash)})}return Promise.resolve({type:"redirect-external",destination:c})}return Promise.resolve({type:"next"})}(t.dataHref,t.response,e);return{dataHref:t.dataHref,json:t.json,response:t.response,text:t.text,cacheKey:t.cacheKey,effect:r}}catch(e){return null}})).apply(this,arguments)}let Z=Symbol("SSG_DATA_NOT_FOUND");function z(e){try{return JSON.parse(e)}catch(e){return null}}function G(e){var t;let{dataHref:r,inflightCache:n,isPrefetch:a,hasMiddleware:o,isServerRender:i,parseJSON:l,persistCache:u,isBackground:c,unstable_skipClientCache:d}=e,{href:f}=new URL(r,window.location.href),p=e=>(function e(t,r,n){return fetch(t,{credentials:"same-origin",method:n.method||"GET",headers:Object.assign({},n.headers,{"x-nextjs-data":"1"})}).then(a=>!a.ok&&r>1&&a.status>=500?e(t,r-1,n):a)})(r,i?3:1,{headers:Object.assign({},a?{purpose:"prefetch"}:{},a&&o?{"x-middleware-prefetch":"1"}:{}),method:null!=(t=null==e?void 0:e.method)?t:"GET"}).then(t=>t.ok&&(null==e?void 0:e.method)==="HEAD"?{dataHref:r,response:t,text:"",json:{},cacheKey:f}:t.text().then(e=>{if(!t.ok){if(o&&[301,302,307,308].includes(t.status))return{dataHref:r,response:t,text:e,json:{},cacheKey:f};if(!o&&404===t.status){var n;if(null==(n=z(e))?void 0:n.notFound)return{dataHref:r,json:{notFound:Z},response:t,text:e,cacheKey:f}}let a=Error("Failed to load static props");throw i||s.markAssetError(a),a}return{dataHref:r,json:l?z(e):null,response:t,text:e,cacheKey:f}})).then(e=>(u&&"no-cache"!==e.response.headers.get("x-middleware-cache")||delete n[f],e)).catch(e=>{throw d||delete n[f],("Failed to fetch"===e.message||"NetworkError when attempting to fetch resource."===e.message||"Load failed"===e.message)&&s.markAssetError(e),e});return d&&u?p({}).then(e=>(n[f]=Promise.resolve(e),e)):void 0!==n[f]?n[f]:n[f]=p(c?{method:"HEAD"}:{})}function V(){return Math.random().toString(36).slice(2,10)}function X(e){let{url:t,router:r}=e;if(t===E.addBasePath(b.addLocale(r.asPath,r.locale)))throw Error("Invariant: attempted to hard navigate to the same URL ".concat(t," ").concat(location.href));window.location.href=t}let Y=e=>{let{route:t,router:r}=e,n=!1,a=r.clc=()=>{n=!0},o=()=>{if(n){let e=Error('Abort fetching component for route: "'.concat(t,'"'));throw e.cancelled=!0,e}a===r.clc&&(r.clc=null)};return o};class ${reload(){window.location.reload()}back(){window.history.back()}forward(){window.history.forward()}push(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return{url:e,as:t}=H(this,e,t),this.change("pushState",e,t,r)}replace(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return{url:e,as:t}=H(this,e,t),this.change("replaceState",e,t,r)}change(e,t,r,o,i){var d=this;return n(function*(){let n,f;if(!M.isLocalURL(t))return X({url:t,router:d}),!1;let p=1===o._h,j=p||o._shouldResolveHref||P.parsePath(t).pathname===P.parsePath(r).pathname,C=a({},d.state),O=!0!==d.isReady;d.isReady=!0;let A=d.isSsr;if(p||(d.isSsr=!1),p&&d.clc)return!1;let T=C.locale;h.ST&&performance.mark("routeChange");let{shallow:N=!1,scroll:B=!0}=o,U={shallow:N};d._inFlightRoute&&d.clc&&(A||$.events.emit("routeChangeError",k(),d._inFlightRoute,U),d.clc(),d.clc=null),r=E.addBasePath(b.addLocale(x.hasBasePath(r)?w.removeBasePath(r):r,o.locale,d.defaultLocale));let W=S.removeLocale(x.hasBasePath(r)?w.removeBasePath(r):r,C.locale);d._inFlightRoute=r;let q=T!==C.locale;if(!p&&d.onlyAHashChange(W)&&!q){C.asPath=W,$.events.emit("hashChangeStart",r,U),d.changeState(e,t,r,a({},o,{scroll:!1})),B&&d.scrollToHash(W);try{yield d.set(C,d.components[C.route],null)}catch(e){throw c.default(e)&&e.cancelled&&$.events.emit("routeChangeError",e,W,U),e}return $.events.emit("hashChangeComplete",r,U),!0}let z=g.parseRelativeUrl(t),{pathname:G,query:V}=z;try{[n,{__rewrites:f}]=yield Promise.all([d.pageLoader.getPageList(),s.getClientBuildManifest(),d.pageLoader.getMiddleware()])}catch(e){return X({url:r,router:d}),!1}d.urlIsNew(W)||q||(e="replaceState");let Y=r;G=G?l.removeTrailingSlash(w.removeBasePath(G)):G;let K=l.removeTrailingSlash(G),J=r.startsWith("/")&&g.parseRelativeUrl(r).pathname,Q=!!(J&&K!==J&&(!m.isDynamicRoute(K)||!y.getRouteMatcher(v.getRouteRegex(K))(J))),ee=!o.shallow&&(yield D({asPath:r,locale:C.locale,router:d}));if(p&&ee&&(j=!1),j&&"/_error"!==G&&(o._shouldResolveHref=!0,z.pathname=F(G,n),z.pathname===G||(G=z.pathname,z.pathname=E.addBasePath(G),ee||(t=_.formatWithValidation(z)))),!M.isLocalURL(r))return X({url:r,router:d}),!1;Y=S.removeLocale(w.removeBasePath(Y),C.locale),K=l.removeTrailingSlash(G);let et=!1;if(m.isDynamicRoute(K)){let e=g.parseRelativeUrl(Y),n=e.pathname,a=v.getRouteRegex(K);et=y.getRouteMatcher(a)(n);let o=K===n,i=o?I.interpolateAs(K,n,V):{};if(et&&(!o||i.result))o?r=_.formatWithValidation(Object.assign({},e,{pathname:i.result,query:L.omit(V,i.params)})):Object.assign(V,et);else{let e=Object.keys(a.groups).filter(e=>!V[e]&&!a.groups[e].optional);if(e.length>0&&!ee)throw Error((o?"The provided `href` (".concat(t,") value is missing query values (").concat(e.join(", "),") to be interpolated properly. "):"The provided `as` value (".concat(n,") is incompatible with the `href` value (").concat(K,"). "))+"Read more: https://nextjs.org/docs/messages/".concat(o?"href-interpolation-failed":"incompatible-href-as"))}}p||$.events.emit("routeChangeStart",r,U);let er="/404"===d.pathname||"/_error"===d.pathname;try{var en,ea,eo,ei,el,es,eu,ec;let l=yield d.getRouteInfo({route:K,pathname:G,query:V,as:r,resolvedAs:Y,routeProps:U,locale:C.locale,isPreview:C.isPreview,hasMiddleware:ee,unstable_skipClientCache:o.unstable_skipClientCache,isQueryUpdating:p&&!d.isFallback,isMiddlewareRewrite:Q});if("route"in l&&ee){K=G=l.route||K,U.shallow||(V=Object.assign({},l.query||{},V));let e=x.hasBasePath(z.pathname)?w.removeBasePath(z.pathname):z.pathname;if(et&&G!==e&&Object.keys(et).forEach(e=>{et&&V[e]===et[e]&&delete V[e]}),m.isDynamicRoute(G)){let e=!U.shallow&&l.resolvedAs?l.resolvedAs:E.addBasePath(b.addLocale(new URL(r,location.href).pathname,C.locale),!0),t=e;x.hasBasePath(t)&&(t=w.removeBasePath(t));let n=v.getRouteRegex(G),a=y.getRouteMatcher(n)(new URL(t,location.href).pathname);a&&Object.assign(V,a)}}if("type"in l){if("redirect-internal"===l.type)return d.change(e,l.newUrl,l.newAs,o);return X({url:l.destination,router:d}),new Promise(()=>{})}let s=l.Component;if(s&&s.unstable_scriptLoader){let e=[].concat(s.unstable_scriptLoader());e.forEach(e=>{u.handleClientScriptLoad(e.props)})}if((l.__N_SSG||l.__N_SSP)&&l.props){if(l.props.pageProps&&l.props.pageProps.__N_REDIRECT){o.locale=!1;let t=l.props.pageProps.__N_REDIRECT;if(t.startsWith("/")&&!1!==l.props.pageProps.__N_REDIRECT_BASE_PATH){let r=g.parseRelativeUrl(t);r.pathname=F(r.pathname,n);let{url:a,as:i}=H(d,t,t);return d.change(e,a,i,o)}return X({url:t,router:d}),new Promise(()=>{})}if(C.isPreview=!!l.props.__N_PREVIEW,l.props.notFound===Z){let e;try{yield d.fetchComponent("/404"),e="/404"}catch(t){e="/_error"}if(l=yield d.getRouteInfo({route:e,pathname:e,query:V,as:r,resolvedAs:Y,routeProps:{shallow:!1},locale:C.locale,isPreview:C.isPreview}),"type"in l)throw Error("Unexpected middleware effect on /404")}}p&&"/_error"===d.pathname&&(null==(en=self.__NEXT_DATA__.props)?void 0:null==(ea=en.pageProps)?void 0:ea.statusCode)===500&&(null==(eo=l.props)?void 0:eo.pageProps)&&(l.props.pageProps.statusCode=500);let f=o.shallow&&C.route===(null!=(ei=l.route)?ei:K),h=null!=(el=o.scroll)?el:!p&&!f,_=null!=i?i:h?{x:0,y:0}:null,P=a({},C,{route:K,pathname:G,query:V,asPath:W,isFallback:!1});if(p&&er){if(l=yield d.getRouteInfo({route:d.pathname,pathname:d.pathname,query:V,as:r,resolvedAs:Y,routeProps:{shallow:!1},locale:C.locale,isPreview:C.isPreview,isQueryUpdating:p&&!d.isFallback}),"type"in l)throw Error("Unexpected middleware effect on ".concat(d.pathname));"/_error"===d.pathname&&(null==(es=self.__NEXT_DATA__.props)?void 0:null==(eu=es.pageProps)?void 0:eu.statusCode)===500&&(null==(ec=l.props)?void 0:ec.pageProps)&&(l.props.pageProps.statusCode=500);try{yield d.set(P,l,_)}catch(e){throw c.default(e)&&e.cancelled&&$.events.emit("routeChangeError",e,W,U),e}return!0}$.events.emit("beforeHistoryChange",r,U),d.changeState(e,t,r,o);let S=p&&!_&&!O&&!q&&R.compareRouterStates(P,d.state);if(!S){try{yield d.set(P,l,_)}catch(e){if(e.cancelled)l.error=l.error||e;else throw e}if(l.error)throw p||$.events.emit("routeChangeError",l.error,W,U),l.error;p||$.events.emit("routeChangeComplete",r,U),h&&/#.+$/.test(r)&&d.scrollToHash(r)}return!0}catch(e){if(c.default(e)&&e.cancelled)return!1;throw e}})()}changeState(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};("pushState"!==e||h.getURL()!==r)&&(this._shallow=n.shallow,window.history[e]({url:t,as:r,options:n,__N:!0,key:this._key="pushState"!==e?this._key:V()},"",r))}handleRouteInfoError(e,t,r,a,o,i){var l=this;return n(function*(){if(console.error(e),e.cancelled)throw e;if(s.isAssetError(e)||i)throw $.events.emit("routeChangeError",e,a,o),X({url:a,router:l}),k();try{let n;let{page:a,styleSheets:o}=yield l.fetchComponent("/_error"),i={props:n,Component:a,styleSheets:o,err:e,error:e};if(!i.props)try{i.props=yield l.getInitialProps(a,{err:e,pathname:t,query:r})}catch(e){console.error("Error in error page `getInitialProps`: ",e),i.props={}}return i}catch(e){return l.handleRouteInfoError(c.default(e)?e:Error(e+""),t,r,a,o,!0)}})()}getRouteInfo(e){let{route:t,pathname:r,query:o,as:i,resolvedAs:s,routeProps:u,locale:d,hasMiddleware:p,isPreview:h,unstable_skipClientCache:m,isQueryUpdating:g,isMiddlewareRewrite:y}=e;var v=this;return n(function*(){let e=t;try{var P,b,S,E;let t=Y({route:e,router:v}),c=v.components[e];if(u.shallow&&c&&v.route===e)return c;p&&(c=void 0);let x=!c||"initial"in c?void 0:c,C={dataHref:v.pageLoader.getDataHref({href:_.formatWithValidation({pathname:r,query:o}),skipInterpolation:!0,asPath:s,locale:d}),hasMiddleware:!0,isServerRender:v.isSsr,parseJSON:!0,inflightCache:g?v.sbc:v.sdc,persistCache:!h,isPrefetch:!1,unstable_skipClientCache:m,isBackground:g},O=g&&!y?null:yield W({fetchData:()=>G(C),asPath:s,locale:d,router:v}).catch(e=>{if(g)return null;throw e});if(g&&(O?O.json=self.__NEXT_DATA__.props:O={json:self.__NEXT_DATA__.props}),t(),(null==O?void 0:null==(P=O.effect)?void 0:P.type)==="redirect-internal"||(null==O?void 0:null==(b=O.effect)?void 0:b.type)==="redirect-external")return O.effect;if((null==O?void 0:null==(S=O.effect)?void 0:S.type)==="rewrite"){let t=l.removeTrailingSlash(O.effect.resolvedHref),n=yield v.pageLoader.getPageList();if((!g||n.includes(t))&&(e=t,r=O.effect.resolvedHref,o=a({},o,O.effect.parsedAs.query),s=w.removeBasePath(f.normalizeLocalePath(O.effect.parsedAs.pathname,v.locales).pathname),c=v.components[e],u.shallow&&c&&v.route===e&&!p))return a({},c,{route:e})}if(j.isAPIRoute(e))return X({url:i,router:v}),new Promise(()=>{});let R=x||(yield v.fetchComponent(e).then(e=>({Component:e.page,styleSheets:e.styleSheets,__N_SSG:e.mod.__N_SSG,__N_SSP:e.mod.__N_SSP}))),M=null==O?void 0:null==(E=O.response)?void 0:E.headers.get("x-middleware-skip"),A=R.__N_SSG||R.__N_SSP;M&&(null==O?void 0:O.dataHref)&&delete v.sdc[O.dataHref];let{props:L,cacheKey:T}=yield v._getData(n(function*(){if(A){if((null==O?void 0:O.json)&&!M)return{cacheKey:O.cacheKey,props:O.json};let e=(null==O?void 0:O.dataHref)?O.dataHref:v.pageLoader.getDataHref({href:_.formatWithValidation({pathname:r,query:o}),asPath:s,locale:d}),t=yield G({dataHref:e,isServerRender:v.isSsr,parseJSON:!0,inflightCache:M?{}:v.sdc,persistCache:!h,isPrefetch:!1,unstable_skipClientCache:m});return{cacheKey:t.cacheKey,props:t.json||{}}}return{headers:{},props:yield v.getInitialProps(R.Component,{pathname:r,query:o,asPath:i,locale:d,locales:v.locales,defaultLocale:v.defaultLocale})}}));return R.__N_SSP&&C.dataHref&&T&&delete v.sdc[T],v.isPreview||!R.__N_SSG||g||G(Object.assign({},C,{isBackground:!0,persistCache:!1,inflightCache:v.sbc})).catch(()=>{}),L.pageProps=Object.assign({},L.pageProps),R.props=L,R.route=e,R.query=o,R.resolvedAs=s,v.components[e]=R,R}catch(e){return v.handleRouteInfoError(c.getProperError(e),r,o,i,u)}})()}set(e,t,r){return this.state=e,this.sub(t,this.components["/_app"].Component,r)}beforePopState(e){this._bps=e}onlyAHashChange(e){if(!this.asPath)return!1;let[t,r]=this.asPath.split("#"),[n,a]=e.split("#");return!!a&&t===n&&r===a||t===n&&r!==a}scrollToHash(e){let[,t=""]=e.split("#");if(""===t||"top"===t){N.handleSmoothScroll(()=>window.scrollTo(0,0));return}let r=decodeURIComponent(t),n=document.getElementById(r);if(n){N.handleSmoothScroll(()=>n.scrollIntoView());return}let a=document.getElementsByName(r)[0];a&&N.handleSmoothScroll(()=>a.scrollIntoView())}urlIsNew(e){return this.asPath!==e}prefetch(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var o=this;return n(function*(){if(A.isBot(window.navigator.userAgent))return;let n=g.parseRelativeUrl(e),{pathname:i,query:s}=n,u=i,c=yield o.pageLoader.getPageList(),d=t,f=void 0!==r.locale?r.locale||void 0:o.locale,p=yield D({asPath:t,locale:f,router:o});n.pathname=F(n.pathname,c),m.isDynamicRoute(n.pathname)&&(i=n.pathname,n.pathname=i,Object.assign(s,y.getRouteMatcher(v.getRouteRegex(n.pathname))(P.parsePath(t).pathname)||{}),p||(e=_.formatWithValidation(n)));let h=yield W({fetchData:()=>G({dataHref:o.pageLoader.getDataHref({href:_.formatWithValidation({pathname:u,query:s}),skipInterpolation:!0,asPath:d,locale:f}),hasMiddleware:!0,isServerRender:o.isSsr,parseJSON:!0,inflightCache:o.sdc,persistCache:!o.isPreview,isPrefetch:!0}),asPath:t,locale:f,router:o});if((null==h?void 0:h.effect.type)==="rewrite"&&(n.pathname=h.effect.resolvedHref,i=h.effect.resolvedHref,s=a({},s,h.effect.parsedAs.query),d=h.effect.parsedAs.pathname,e=_.formatWithValidation(n)),(null==h?void 0:h.effect.type)==="redirect-external")return;let b=l.removeTrailingSlash(i);yield Promise.all([o.pageLoader._isSsg(b).then(t=>!!t&&G({dataHref:(null==h?void 0:h.json)?null==h?void 0:h.dataHref:o.pageLoader.getDataHref({href:e,asPath:d,locale:f}),isServerRender:!1,parseJSON:!0,inflightCache:o.sdc,persistCache:!o.isPreview,isPrefetch:!0,unstable_skipClientCache:r.unstable_skipClientCache||r.priority&&!0}).then(()=>!1)),o.pageLoader[r.priority?"loadPage":"prefetch"](b)])})()}fetchComponent(e){var t=this;return n(function*(){let r=Y({route:e,router:t});try{let n=yield t.pageLoader.loadPage(e);return r(),n}catch(e){throw r(),e}})()}_getData(e){let t=!1,r=()=>{t=!0};return this.clc=r,e().then(e=>{if(r===this.clc&&(this.clc=null),t){let e=Error("Loading initial props cancelled");throw e.cancelled=!0,e}return e})}_getFlightData(e){return G({dataHref:e,isServerRender:!0,parseJSON:!1,inflightCache:this.sdc,persistCache:!1,isPrefetch:!1}).then(e=>{let{text:t}=e;return{data:t}})}getInitialProps(e,t){let{Component:r}=this.components["/_app"],n=this._wrapApp(r);return t.AppTree=n,h.loadGetInitialProps(r,{AppTree:n,Component:e,router:this,ctx:t})}get route(){return this.state.route}get pathname(){return this.state.pathname}get query(){return this.state.query}get asPath(){return this.state.asPath}get locale(){return this.state.locale}get isFallback(){return this.state.isFallback}get isPreview(){return this.state.isPreview}constructor(e,t,r,{initialProps:n,pageLoader:a,App:o,wrapApp:i,Component:s,err:u,subscription:c,isFallback:d,locale:f,locales:p,defaultLocale:y,domainLocales:v,isPreview:P}){this.sdc={},this.sbc={},this.isFirstPopStateEvent=!0,this._key=V(),this.onPopState=e=>{let t;let{isFirstPopStateEvent:r}=this;this.isFirstPopStateEvent=!1;let n=e.state;if(!n){let{pathname:e,query:t}=this;this.changeState("replaceState",_.formatWithValidation({pathname:E.addBasePath(e),query:t}),h.getURL());return}if(n.__NA){window.location.reload();return}if(!n.__N||r&&this.locale===n.options.locale&&n.as===this.asPath)return;let{url:a,as:o,options:i,key:l}=n;this._key=l;let{pathname:s}=g.parseRelativeUrl(a);(!this.isSsr||o!==E.addBasePath(this.asPath)||s!==E.addBasePath(this.pathname))&&(!this._bps||this._bps(n))&&this.change("replaceState",a,o,Object.assign({},i,{shallow:i.shallow&&this._shallow,locale:i.locale||this.defaultLocale,_h:0}),t)};let b=l.removeTrailingSlash(e);this.components={},"/_error"!==e&&(this.components[b]={Component:s,initial:!0,props:n,err:u,__N_SSG:n&&n.__N_SSG,__N_SSP:n&&n.__N_SSP}),this.components["/_app"]={Component:o,styleSheets:[]},this.events=$.events,this.pageLoader=a;let S=m.isDynamicRoute(e)&&self.__NEXT_DATA__.autoExport;if(this.basePath="",this.sub=c,this.clc=null,this._wrapApp=i,this.isSsr=!0,this.isLocaleDomain=!1,this.isReady=!!(self.__NEXT_DATA__.gssp||self.__NEXT_DATA__.gip||self.__NEXT_DATA__.appGip&&!self.__NEXT_DATA__.gsp||!S&&!self.location.search),this.state={route:b,pathname:e,query:t,asPath:S?e:r,isPreview:!!P,locale:void 0,isFallback:d},this._initialMatchesMiddlewarePromise=Promise.resolve(!1),!r.startsWith("//")){let n={locale:f},a=h.getURL();this._initialMatchesMiddlewarePromise=D({router:this,locale:f,asPath:a}).then(o=>(n._shouldResolveHref=r!==e,this.changeState("replaceState",o?a:_.formatWithValidation({pathname:E.addBasePath(e),query:t}),a,n),o))}window.addEventListener("popstate",this.onPopState)}}$.events=p.default(),t.default=$},34441:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addLocale=function(e,t,r,o){return t&&t!==r&&(o||!a.pathHasPrefix(e.toLowerCase(),"/".concat(t.toLowerCase()))&&!a.pathHasPrefix(e.toLowerCase(),"/api"))?n.addPathPrefix(e,"/".concat(t)):e};var n=r(44135),a=r(93210)},44135:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPathPrefix=function(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:o}=n.parsePath(e);return"".concat(t).concat(r).concat(a).concat(o)};var n=r(26727)},96074:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPathSuffix=function(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:a,hash:o}=n.parsePath(e);return"".concat(r).concat(t).concat(a).concat(o)};var n=r(26727)},79002:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compareRouterStates=function(e,t){let r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(let n=r.length;n--;){let a=r[n];if("query"===a){let r=Object.keys(e.query);if(r.length!==Object.keys(t.query).length)return!1;for(let n=r.length;n--;){let a=r[n];if(!t.query.hasOwnProperty(a)||e.query[a]!==t.query[a])return!1}}else if(!t.hasOwnProperty(a)||e[a]!==t[a])return!1}return!0}},57429:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatNextPathnameInfo=function(e){let t=i.addLocale(e.pathname,e.locale,e.buildId?void 0:e.defaultLocale,e.ignorePrefix);return(e.buildId||!e.trailingSlash)&&(t=n.removeTrailingSlash(t)),e.buildId&&(t=o.addPathSuffix(a.addPathPrefix(t,"/_next/data/".concat(e.buildId)),"/"===e.pathname?"index.json":".json")),t=a.addPathPrefix(t,e.basePath),!e.buildId&&e.trailingSlash?t.endsWith("/")?t:o.addPathSuffix(t,"/"):n.removeTrailingSlash(t)};var n=r(40012),a=r(44135),o=r(96074),i=r(34441)},67795:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatUrl=o,t.formatWithValidation=function(e){return o(e)},t.urlObjectKeys=void 0;var n=(0,r(91598).Z)(r(94919));let a=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,o=e.protocol||"",i=e.pathname||"",l=e.hash||"",s=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:r&&(u=t+(~r.indexOf(":")?"[".concat(r,"]"):r),e.port&&(u+=":"+e.port)),s&&"object"==typeof s&&(s=String(n.urlQueryToSearchParams(s)));let c=e.search||s&&"?".concat(s)||"";return o&&!o.endsWith(":")&&(o+=":"),e.slashes||(!o||a.test(o))&&!1!==u?(u="//"+(u||""),i&&"/"!==i[0]&&(i="/"+i)):u||(u=""),l&&"#"!==l[0]&&(l="#"+l),c&&"?"!==c[0]&&(c="?"+c),i=i.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),"".concat(o).concat(u).concat(i).concat(c).concat(l)}t.urlObjectKeys=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"]},27929:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r="/"===e?"/index":/^\/index(\/|$)/.test(e)?"/index".concat(e):"".concat(e);return r+t}},18756:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getNextPathnameInfo=function(e,t){var r;let{basePath:i,i18n:l,trailingSlash:s}=null!=(r=t.nextConfig)?r:{},u={pathname:e,trailingSlash:"/"!==e?e.endsWith("/"):s};if(i&&o.pathHasPrefix(u.pathname,i)&&(u.pathname=a.removePathPrefix(u.pathname,i),u.basePath=i),!0===t.parseData&&u.pathname.startsWith("/_next/data/")&&u.pathname.endsWith(".json")){let e=u.pathname.replace(/^\/_next\/data\//,"").replace(/\.json$/,"").split("/"),t=e[0];u.pathname="index"!==e[1]?"/".concat(e.slice(1).join("/")):"/",u.buildId=t}if(l){let e=n.normalizeLocalePath(u.pathname,l.locales);u.locale=null==e?void 0:e.detectedLocale,u.pathname=(null==e?void 0:e.pathname)||u.pathname}return u};var n=r(24769),a=r(22650),o=r(93210)},4146:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleSmoothScroll=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=document.documentElement,n=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=n}},18588:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSortedRoutes",{enumerable:!0,get:function(){return n.getSortedRoutes}}),Object.defineProperty(t,"isDynamicRoute",{enumerable:!0,get:function(){return a.isDynamicRoute}});var n=r(30566),a=r(86238)},18074:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.interpolateAs=function(e,t,r){let o="",i=a.getRouteRegex(e),l=i.groups,s=(t!==e?n.getRouteMatcher(i)(t):"")||r;o=e;let u=Object.keys(l);return u.every(e=>{let t=s[e]||"",{repeat:r,optional:n}=l[e],a="[".concat(r?"...":"").concat(e,"]");return n&&(a="".concat(t?"":"/","[").concat(a,"]")),r&&!Array.isArray(t)&&(t=[t]),(n||e in s)&&(o=o.replace(a,r?t.map(e=>encodeURIComponent(e)).join("/"):encodeURIComponent(t))||"/")})||(o=""),{params:u,result:o}};var n=r(13156),a=r(54903)},21754:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isBot=function(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(e)}},86238:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDynamicRoute=function(e){return r.test(e)};let r=/\/\[[^/]+?\](?=\/|$)/},62139:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isLocalURL=function(e){if(!n.isAbsoluteUrl(e))return!0;try{let t=n.getLocationOrigin(),r=new URL(e,t);return r.origin===t&&a.hasBasePath(r.pathname)}catch(e){return!1}};var n=r(670),a=r(10928)},17562:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.omit=function(e,t){let r={};return Object.keys(e).forEach(n=>{t.includes(n)||(r[n]=e[n])}),r}},26727:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parsePath=function(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}},22864:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseRelativeUrl=function(e,t){let r=new URL(n.getLocationOrigin()),o=t?new URL(t,r):e.startsWith(".")?new URL(window.location.href):r,{pathname:i,searchParams:l,search:s,hash:u,href:c,origin:d}=new URL(e,o);if(d!==r.origin)throw Error("invariant: invalid relative URL, router received ".concat(e));return{pathname:i,query:a.searchParamsToUrlQuery(l),search:s,hash:u,href:c.slice(r.origin.length)}};var n=r(670),a=r(94919)},93210:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.pathHasPrefix=function(e,t){if("string"!=typeof e)return!1;let{pathname:r}=n.parsePath(e);return r===t||r.startsWith(t+"/")};var n=r(26727)},94919:function(e,t){"use strict";function r(e){return"string"!=typeof e&&("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.searchParamsToUrlQuery=function(e){let t={};return e.forEach((e,r)=>{void 0===t[r]?t[r]=e:Array.isArray(t[r])?t[r].push(e):t[r]=[t[r],e]}),t},t.urlQueryToSearchParams=function(e){let t=new URLSearchParams;return Object.entries(e).forEach(e=>{let[n,a]=e;Array.isArray(a)?a.forEach(e=>t.append(n,r(e))):t.set(n,r(a))}),t},t.assign=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n{Array.from(t.keys()).forEach(t=>e.delete(t)),t.forEach((t,r)=>e.append(r,t))}),e}},22650:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePathPrefix=function(e,t){if(n.pathHasPrefix(e,t)){let r=e.slice(t.length);return r.startsWith("/")?r:"/".concat(r)}return e};var n=r(93210)},40012:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=function(e){return e.replace(/\/$/,"")||"/"}},1978:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resolveHref=function(e,t,r){let d;let f="string"==typeof t?t:a.formatWithValidation(t),p=f.match(/^[a-zA-Z]{1,}:\/\//),h=p?f.slice(p[0].length):f,m=h.split("?");if((m[0]||"").match(/(\/\/|\\)/)){console.error("Invalid href passed to next/router: ".concat(f,", repeated forward-slashes (//) or backslashes \\ are not valid in the href"));let e=i.normalizeRepeatedSlashes(h);f=(p?p[0]:"")+e}if(!s.isLocalURL(f))return r?[f]:f;try{d=new URL(f.startsWith("#")?e.asPath:e.pathname,"http://n")}catch(e){d=new URL("/","http://n")}try{let e=new URL(f,d);e.pathname=l.normalizePathTrailingSlash(e.pathname);let t="";if(u.isDynamicRoute(e.pathname)&&e.searchParams&&r){let r=n.searchParamsToUrlQuery(e.searchParams),{result:i,params:l}=c.interpolateAs(e.pathname,e.pathname,r);i&&(t=a.formatWithValidation({pathname:i,hash:e.hash,query:o.omit(r,l)}))}let i=e.origin===d.origin?e.href.slice(e.origin.length):e.href;return r?[i,t||i]:i}catch(e){return r?[f]:f}};var n=r(94919),a=r(67795),o=r(17562),i=r(670),l=r(52700),s=r(62139),u=r(86238),c=r(18074)},13156:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRouteMatcher=function(e){let{re:t,groups:r}=e;return e=>{let a=t.exec(e);if(!a)return!1;let o=e=>{try{return decodeURIComponent(e)}catch(e){throw new n.DecodeError("failed to decode param")}},i={};return Object.keys(r).forEach(e=>{let t=r[e],n=a[t.pos];void 0!==n&&(i[e]=~n.indexOf("/")?n.split("/").map(e=>o(e)):t.repeat?[o(n)]:o(n))}),i}};var n=r(670)},54903:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRouteRegex=s,t.getNamedRouteRegex=function(e){let t=u(e);return n({},s(e),{namedRegex:"^".concat(t.namedParameterizedRoute,"(?:/)?$"),routeKeys:t.routeKeys})},t.getNamedMiddlewareRegex=function(e,t){let{parameterizedRoute:r}=l(e),{catchAll:n=!0}=t;if("/"===r)return{namedRegex:"^/".concat(n?".*":"","$")};let{namedParameterizedRoute:a}=u(e);return{namedRegex:"^".concat(a).concat(n?"(?:(/.*)?)":"","$")}};var n=r(6495).Z,a=r(18659),o=r(40012);function i(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let r=e.startsWith("...");return r&&(e=e.slice(3)),{key:e,repeat:r,optional:t}}function l(e){let t=o.removeTrailingSlash(e).slice(1).split("/"),r={},n=1;return{parameterizedRoute:t.map(e=>{if(!(e.startsWith("[")&&e.endsWith("]")))return"/".concat(a.escapeStringRegexp(e));{let{key:t,optional:a,repeat:o}=i(e.slice(1,-1));return r[t]={pos:n++,repeat:o,optional:a},o?a?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:r}}function s(e){let{parameterizedRoute:t,groups:r}=l(e);return{re:RegExp("^".concat(t,"(?:/)?$")),groups:r}}function u(e){let t,r;let n=o.removeTrailingSlash(e).slice(1).split("/"),l=(t=97,r=1,()=>{let e="";for(let n=0;n122&&(r++,t=97);return e}),s={};return{namedParameterizedRoute:n.map(e=>{if(!(e.startsWith("[")&&e.endsWith("]")))return"/".concat(a.escapeStringRegexp(e));{let{key:t,optional:r,repeat:n}=i(e.slice(1,-1)),a=t.replace(/\W/g,""),o=!1;return(0===a.length||a.length>30)&&(o=!0),isNaN(parseInt(a.slice(0,1)))||(o=!0),o&&(a=l()),s[a]=t,n?r?"(?:/(?<".concat(a,">.+?))?"):"/(?<".concat(a,">.+?)"):"/(?<".concat(a,">[^/]+?)")}}).join(""),routeKeys:s}}},30566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSortedRoutes=function(e){let t=new r;return e.forEach(e=>t.insert(e)),t.smoosh()};class r{insert(e){this._insert(e.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=[...this.children.keys()].sort();null!==this.slugName&&t.splice(t.indexOf("[]"),1),null!==this.restSlugName&&t.splice(t.indexOf("[...]"),1),null!==this.optionalRestSlugName&&t.splice(t.indexOf("[[...]]"),1);let r=t.map(t=>this.children.get(t)._smoosh("".concat(e).concat(t,"/"))).reduce((e,t)=>[...e,...t],[]);if(null!==this.slugName&&r.push(...this.children.get("[]")._smoosh("".concat(e,"[").concat(this.slugName,"]/"))),!this.placeholder){let t="/"===e?"/":e.slice(0,-1);if(null!=this.optionalRestSlugName)throw Error('You cannot define a route with the same specificity as a optional catch-all route ("'.concat(t,'" and "').concat(t,"[[...").concat(this.optionalRestSlugName,']]").'));r.unshift(t)}return null!==this.restSlugName&&r.push(...this.children.get("[...]")._smoosh("".concat(e,"[...").concat(this.restSlugName,"]/"))),null!==this.optionalRestSlugName&&r.push(...this.children.get("[[...]]")._smoosh("".concat(e,"[[...").concat(this.optionalRestSlugName,"]]/"))),r}_insert(e,t,n){if(0===e.length){this.placeholder=!1;return}if(n)throw Error("Catch-all must be the last part of the URL.");let a=e[0];if(a.startsWith("[")&&a.endsWith("]")){let r=a.slice(1,-1),i=!1;if(r.startsWith("[")&&r.endsWith("]")&&(r=r.slice(1,-1),i=!0),r.startsWith("...")&&(r=r.substring(3),n=!0),r.startsWith("[")||r.endsWith("]"))throw Error("Segment names may not start or end with extra brackets ('".concat(r,"')."));if(r.startsWith("."))throw Error("Segment names may not start with erroneous periods ('".concat(r,"')."));function o(e,r){if(null!==e&&e!==r)throw Error("You cannot use different slug names for the same dynamic path ('".concat(e,"' !== '").concat(r,"')."));t.forEach(e=>{if(e===r)throw Error('You cannot have the same slug name "'.concat(r,'" repeat within a single dynamic path'));if(e.replace(/\W/g,"")===a.replace(/\W/g,""))throw Error('You cannot have the slug names "'.concat(e,'" and "').concat(r,'" differ only by non-word symbols within a single dynamic path'))}),t.push(r)}if(n){if(i){if(null!=this.restSlugName)throw Error('You cannot use both an required and optional catch-all route at the same level ("[...'.concat(this.restSlugName,']" and "').concat(e[0],'" ).'));o(this.optionalRestSlugName,r),this.optionalRestSlugName=r,a="[[...]]"}else{if(null!=this.optionalRestSlugName)throw Error('You cannot use both an optional and required catch-all route at the same level ("[[...'.concat(this.optionalRestSlugName,']]" and "').concat(e[0],'").'));o(this.restSlugName,r),this.restSlugName=r,a="[...]"}}else{if(i)throw Error('Optional route parameters are not yet supported ("'.concat(e[0],'").'));o(this.slugName,r),this.slugName=r,a="[]"}}this.children.has(a)||this.children.set(a,new r),this.children.get(a)._insert(e.slice(1),t,n)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null}}},86949:function(e,t){"use strict";let r;Object.defineProperty(t,"__esModule",{value:!0}),t.setConfig=function(e){r=e},t.default=void 0,t.default=()=>r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},31436:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let{headManager:t,reduceComponentsToState:r}=e;function l(){if(t&&t.mountedInstances){let a=n.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(a,e))}}if(a){var s;null==t||null==(s=t.mountedInstances)||s.add(e.children),l()}return o(()=>{var r;return null==t||null==(r=t.mountedInstances)||r.add(e.children),()=>{var r;null==t||null==(r=t.mountedInstances)||r.delete(e.children)}}),o(()=>(t&&(t._pendingUpdate=l),()=>{t&&(t._pendingUpdate=l)})),i(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null};var n=(0,r(91598).Z)(r(67294));let a=!1,o=a?()=>{}:n.useLayoutEffect,i=a?()=>{}:n.useEffect},670:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.execOnce=function(e){let t,r=!1;return function(){for(var n=arguments.length,a=Array(n),o=0;oa.test(e);function i(){let{protocol:e,hostname:t,port:r}=window.location;return"".concat(e,"//").concat(t).concat(r?":"+r:"")}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function s(e){return e.finished||e.headersSent}function u(e,t){return c.apply(this,arguments)}function c(){return(c=n(function*(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:yield u(t.Component,t.ctx)}:{};let n=yield e.getInitialProps(t);if(r&&s(r))return n;if(!n){let t='"'.concat(l(e),'.getInitialProps()" should resolve to an object. But found "').concat(n,'" instead.');throw Error(t)}return n})).apply(this,arguments)}t.isAbsoluteUrl=o;let d="undefined"!=typeof performance;t.SP=d;let f=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);t.ST=f,t.DecodeError=class extends Error{},t.NormalizeError=class extends Error{},t.PageNotFoundError=class extends Error{constructor(e){super(),this.code="ENOENT",this.message="Cannot find module for page: ".concat(e)}},t.MissingStaticPage=class extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: ".concat(e," ").concat(t)}},t.MiddlewareNotFoundError=class extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}},57238:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warnOnce=void 0;let r=e=>{};t.warnOnce=r},78018:function(e){var t,r,n,a,o,i,l,s,u,c,d,f,p,h,m,g,y,v,_,P,b,S,w,E,x,j,C,O,R,M,A,L,T,I,N,k,D,B,U,H,F,W,q,Z,z,G;(t={}).d=function(e,r){for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},void 0!==t&&(t.ab="//"),r={},t.r(r),t.d(r,{getCLS:function(){return w},getFCP:function(){return P},getFID:function(){return M},getINP:function(){return W},getLCP:function(){return Z},getTTFB:function(){return G},onCLS:function(){return w},onFCP:function(){return P},onFID:function(){return M},onINP:function(){return W},onLCP:function(){return Z},onTTFB:function(){return G}}),s=-1,u=function(e){addEventListener("pageshow",function(t){t.persisted&&(s=t.timeStamp,e(t))},!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},d=function(){var e=c();return e&&e.activationStart||0},f=function(e,t){var r=c(),n="navigate";return s>=0?n="back-forward-cache":r&&(n=document.prerendering||d()>0?"prerender":r.type.replace(/_/g,"-")),{name:e,value:void 0===t?-1:t,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:n}},p=function(e,t,r){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var n=new PerformanceObserver(function(e){t(e.getEntries())});return n.observe(Object.assign({type:e,buffered:!0},r||{})),n}}catch(e){}},h=function(e,t){var r=function r(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||(e(n),t&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)},m=function(e,t,r,n){var a,o;return function(i){var l;t.value>=0&&(i||n)&&((o=t.value-(a||0))||void 0===a)&&(a=t.value,t.delta=o,t.rating=(l=t.value)>r[1]?"poor":l>r[0]?"needs-improvement":"good",e(t))}},g=-1,y=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},v=function(){h(function(e){g=e.timeStamp},!0)},_=function(){return g<0&&(g=y(),v(),u(function(){setTimeout(function(){g=y(),v()},0)})),{get firstHiddenTime(){return g}}},P=function(e,t){t=t||{};var r,n=[1800,3e3],a=_(),o=f("FCP"),i=function(e){e.forEach(function(e){"first-contentful-paint"===e.name&&(s&&s.disconnect(),e.startTime-1&&e(t)},o=f("CLS",0),i=0,l=[],s=function(e){e.forEach(function(e){if(!e.hadRecentInput){var t=l[0],r=l[l.length-1];i&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,l.push(e)):(i=e.value,l=[e]),i>o.value&&(o.value=i,o.entries=l,n())}})},c=p("layout-shift",s);c&&(n=m(a,o,r,t.reportAllChanges),h(function(){s(c.takeRecords()),n(!0)}),u(function(){i=0,S=-1,n=m(a,o=f("CLS",0),r,t.reportAllChanges)}))},E={passive:!0,capture:!0},x=new Date,j=function(e,t){n||(n=t,a=e,o=new Date,R(removeEventListener),C())},C=function(){if(a>=0&&a1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?(t=function(){j(a,e),n()},r=function(){n()},n=function(){removeEventListener("pointerup",t,E),removeEventListener("pointercancel",r,E)},addEventListener("pointerup",t,E),addEventListener("pointercancel",r,E)):j(a,e)}},R=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach(function(t){return e(t,O,E)})},M=function(e,t){t=t||{};var r,o=[100,300],l=_(),s=f("FID"),c=function(e){e.startTimet.latency){if(r)r.entries.push(e),r.latency=Math.max(r.latency,e.duration);else{var n={id:e.interactionId,latency:e.duration,entries:[e]};H[n.id]=n,U.push(n)}U.sort(function(e,t){return t.latency-e.latency}),U.splice(10).forEach(function(e){delete H[e.id]})}},W=function(e,t){t=t||{};var r=[200,500];k();var n,a=f("INP"),o=function(e){e.forEach(function(e){e.interactionId&&F(e),"first-input"!==e.entryType||U.some(function(t){return t.entries.some(function(t){return e.duration===t.duration&&e.startTime===t.startTime})})||F(e)});var t,r=(t=Math.min(U.length-1,Math.floor(B()/50)),U[t]);r&&r.latency!==a.value&&(a.value=r.latency,a.entries=r.entries,n())},i=p("event",o,{durationThreshold:t.durationThreshold||40});n=m(e,a,r,t.reportAllChanges),i&&(i.observe({type:"first-input",buffered:!0}),h(function(){o(i.takeRecords()),a.value<0&&B()>0&&(a.value=0,a.entries=[]),n(!0)}),u(function(){U=[],D=N(),n=m(e,a=f("INP"),r,t.reportAllChanges)}))},q={},Z=function(e,t){t=t||{};var r,n=[2500,4e3],a=_(),o=f("LCP"),i=function(e){var t=e[e.length-1];if(t){var n=t.startTime-d();nperformance.now())return;n.entries=[o],a(!0),u(function(){(a=m(e,n=f("TTFB",0),r,t.reportAllChanges))(!0)})}})},e.exports=r},79423:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isAPIRoute=function(e){return"/api"===e||Boolean(null==e?void 0:e.startsWith("/api/"))}},80676:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=a,t.getProperError=function(e){return a(e)?e:Error(n.isPlainObject(e)?JSON.stringify(e):e+"")};var n=r(82849);function a(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}},72431:function(){}},function(e){e.O(0,[9774],function(){return e(e.s=21783)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/colors-generator-55b397ea41fc6dea.js b/_next/static/chunks/pages/colors-generator-55b397ea41fc6dea.js deleted file mode 100644 index 140be09f14c..00000000000 --- a/_next/static/chunks/pages/colors-generator-55b397ea41fc6dea.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5318],{74241:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/colors-generator",function(){return n(77500)}])},8649:function(e,t,n){"use strict";n.d(t,{$:function(){return M}});var r=n(85893),o=n(67294),l=n(90512),i=n(51227),a=n(82827),s=n(46049),c=n(77048),u=n(74378),d=n(40624),m=n(55899),p=n(65623),h={socialButton:"m-fde4daed",socialButtonSection:"m-1df08738",discordButton:"m-6611c750",twitterButton:"m-a568e357"},f=n(95859),x=n(61830),_=Object.defineProperty,j=Object.getOwnPropertySymbols,b=Object.prototype.hasOwnProperty,g=Object.prototype.propertyIsEnumerable,v=(e,t,n)=>t in e?_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,y=(e,t)=>{for(var n in t||(t={}))b.call(t,n)&&v(e,n,t[n]);if(j)for(var n of j(t))g.call(t,n)&&v(e,n,t[n]);return e},w=(e,t)=>{var n={};for(var r in e)b.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&j)for(var r of j(e))0>t.indexOf(r)&&g.call(e,r)&&(n[r]=e[r]);return n};function k(e){var{icon:t}=e,n=w(e,["icon"]);return o.createElement(m.z,y({component:"a",target:"_blank",rel:"noopener noreferrer",leftSection:t,radius:"md",classNames:{root:h.socialButton,section:h.socialButtonSection}},n))}function C(e){var{className:t}=e,n=w(e,["className"]);return o.createElement(k,y({className:(0,d.Z)(h.discordButton,t),icon:o.createElement(f.D,{size:16}),href:p.$.discordLink},n),"Join Discord community")}function N(e){var{className:t}=e,n=w(e,["className"]);return o.createElement(k,y({className:(0,d.Z)(h.twitterButton,t),icon:o.createElement(x.Z,{size:16}),href:p.$.twitterLink},n),"Follow Mantine on Twitter")}var F=n(93258),B=n(41664),z=n.n(B),O=n(16951),P=n.n(O);function T(e){let{data:t,title:n}=e,o=t.map((e,t)=>(0,r.jsx)(c.x,{className:P().link,component:"next"===e.type?z():"a",href:e.link,children:e.label},t));return(0,r.jsxs)("div",{className:P().wrapper,children:[(0,r.jsx)(c.x,{className:P().title,children:n}),o]})}let L=[{title:"About",data:[{type:"next",label:"Contribute",link:"/pages/contributing/"},{type:"next",label:"About Mantine",link:"/pages/about/"},{type:"next",label:"Changelog",link:"/pages/changelog/"},{type:"link",label:"Releases",link:p.$.gitHubLinks.releases}]},{title:"Community",data:[{type:"link",label:"Chat on Discord",link:p.$.discordLink},{type:"link",label:"Follow on Twitter",link:p.$.twitterLink},{type:"link",label:"Follow on Github",link:"https://github.com/rtivital"},{type:"link",label:"GitHub discussions",link:p.$.gitHubLinks.discussions}]},{title:"Project",data:[{type:"link",label:"Mantine UI",link:p.$.uiLink},{type:"link",label:"Documentation",link:p.$.docsLink},{type:"link",label:"Github organization",link:p.$.gitHubLinks.organization},{type:"link",label:"npm organization",link:p.$.npmLink}]}];var E=n(80165),S=n.n(E);function M(e){let{withNavbar:t}=e,n=L.map(e=>(0,r.jsx)(T,{data:e.data,title:e.title},e.title));return(0,r.jsxs)("div",{className:S().root,children:[(0,r.jsx)("div",{className:S().spacer}),(0,r.jsx)(i.x,{mod:{"with-navbar":t},className:(0,l.Z)(S().wrapper,a.Z.classNames.fullWidth),children:(0,r.jsxs)(s.W,{size:1100,children:[(0,r.jsxs)("div",{className:S().inner,children:[(0,r.jsxs)("div",{className:S().logoSection,children:[(0,r.jsx)(F.T,{}),(0,r.jsx)(c.x,{className:S().description,fz:"sm",children:"Build fully functional accessible web applications faster than ever"})]}),(0,r.jsx)("div",{className:S().groups,children:n})]}),(0,r.jsx)("div",{className:S().afterFooter,children:(0,r.jsxs)(u.Z,{justify:"space-between",wrap:"wrap",children:[(0,r.jsxs)(c.x,{fz:"xs",className:S().afterFooterNote,children:["Built by ",(0,r.jsx)("a",{href:"https://github.com/rtivital",children:"Vitaly Rtishchev"})," and"," ",(0,r.jsx)("a",{href:"https://github.com/mantinedev/mantine/graphs/contributors",children:"these awesome people"})]}),(0,r.jsxs)("div",{className:S().social,children:[(0,r.jsx)(C,{className:S().socialButton}),(0,r.jsx)(N,{className:S().socialButton})]})]})})]})})]})}},31144:function(e,t,n){"use strict";n.d(t,{_:function(){return a}});var r=n(85893);n(67294);var o=n(8649),l=n(21616),i=n.n(l);function a(e){let{children:t}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:i().content,children:t}),(0,r.jsx)(o.$,{withNavbar:!0})]})}},77500:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return U}});var r=n(85893),o=n(67294),l=n(9008),i=n.n(l),a=n(31144),s=n(90512),c=n(94185),u=n.n(c);function d(e){let{className:t,children:n,...o}=e;return(0,r.jsx)("div",{className:(0,s.Z)(u().wrapper,t),...o,children:(0,r.jsx)("div",{className:u().container,children:n})})}function m(e){let{title:t,...n}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i(),{children:(0,r.jsx)("title",{children:"".concat(t," | Mantine")})}),(0,r.jsx)(a._,{children:(0,r.jsx)(d,{...n})})]})}var p=n(11163),h=n(20761),f=n(8298),x=n.n(f);let _=[.96,.907,.805,.697,.605,.547,.518,.445,.395,.34],j=[.32,.16,.08,.04,0,0,.04,.08,.16,.32];var b=n(95443),g=n(87578),v=n(27499);function y(e){let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}var w=n(74378),k=n(43066),C=n.n(k);function N(e){let{colors:t,baseColorIndex:n,displayColorsInfo:o}=e,l=t.map((e,t)=>(0,r.jsx)("div",{className:C().item,children:(0,r.jsx)(g.b,{color:e.hex(),radius:0,className:C().swatch,withShadow:!1,"data-base":t===n||void 0,c:!function(e,t=.179){return function(e){let t=y(e.r),n=y(e.g),r=y(e.b);return .2126*t+.7152*n+.0722*r}((0,v.c)(e))>t}(e.hex())?"white":"black",children:o&&(0,r.jsxs)("div",{className:C().label,children:[(0,r.jsx)("span",{className:C().index,children:t}),(0,r.jsx)("span",{className:C().hex,children:e.hex()})]})})},t));return(0,r.jsx)(w.Z,{gap:0,wrap:"nowrap",className:C().root,children:l})}var F=n(28670),B=n.n(F),z=n(88198),O=n(93625),P=n(9410),T=n(55899),L=n(31577),E=n(91377),S=n(4741),M=n(46393),D=n(68267);let I=[{name:"Blue gray",color:"#63687C"},{name:"Brown",color:"#5D4037"},{name:"Tomato",color:"#F06418"},{name:"Deep orange",color:"#fc8a08"},{name:"Bright orange",color:"#FFA903"},{name:"Yellow",color:"#D9D02F"},{name:"Bright green",color:"#6BD731"},{name:"Green",color:"#2BDD66"},{name:"Light blue",color:"#00B5FF"},{name:"Sky blue",color:"#099CFF"},{name:"Pale blue",color:"#5474B4"},{name:"Bright blue",color:"#0063FF"},{name:"Deep blue",color:"#1F32C4"},{name:"Pale indigo",color:"#4C5897"},{name:"Purple",color:"#4F23C0"},{name:"Pale purple",color:"#504C97"},{name:"Violet",color:"#7B2EDA"},{name:"Pale violet",color:"#6B31B2"},{name:"Dark pink",color:"#8931B2"},{name:"Bright pink",color:"#C02ADF"},{name:"Pink",color:"#F018E8"},{name:"Magenta",color:"#F01879"},{name:"Bright red",color:"#F0185C"},{name:"Pale red",color:"#C91A52"},{name:"Deep red",color:"#C91A25"},{name:"Red",color:"#F21616"}];var Z=n(53016),$=n.n(Z);function A(e){let{value:t,onChange:n,displayColorsInfo:l,setDisplayColorsInfo:i}=e,[a,s]=(0,o.useState)(t),[c,u]=(0,o.useState)(!1),d=(0,p.useRouter)(),m=(0,P.V)(),h=e=>{d.replace({query:{...d.query,color:e.replace("#","")}},void 0,{scroll:!1})},f=e=>{s(e),n(e)},x=e=>{let t=e.currentTarget.value,r=!B().valid(t);s(t),u(r),r||n(t),r||h(t)},_=I.map(e=>(0,r.jsx)(T.z,{variant:"default",leftSection:(0,r.jsx)(g.b,{size:20,color:e.color}),radius:"md",onClick:()=>{f(e.color),h(e.color)},children:e.name},e.color));return(0,r.jsxs)("div",{className:$().root,children:[(0,r.jsxs)("div",{className:$().inputs,children:[(0,r.jsx)(L.o,{value:a,onChange:x,error:c,label:"Enter base color",className:$().input,size:"md",radius:"md"}),(0,r.jsx)(E.z,{value:t,onChange:f,onChangeEnd:h,size:"lg",classNames:{saturation:$().saturation,wrapper:$().colorPicker}}),(0,r.jsx)(S.r,{className:$().switch,label:"Display colors info",size:"md",checked:l,onChange:e=>i(e.currentTarget.checked),mt:"xl"}),(0,r.jsx)(T.z,{fullWidth:!0,leftSection:m.copied?(0,r.jsx)(z.Z,{style:{width:(0,M.h)(18)}}):(0,r.jsx)(O.Z,{style:{width:(0,M.h)(18)}}),rightSection:(0,r.jsx)("span",{}),justify:"space-between",size:"md",mt:"xl",radius:"md",onClick:()=>m.copy(window.location.href),children:m.copied?"Copied":"Copy URL"})]}),(0,r.jsxs)("div",{className:$().presets,children:[(0,r.jsx)(D.I.Label,{size:"md",children:"Preset"}),(0,r.jsx)(w.Z,{gap:"xs",children:_})]})]})}var R=n(66328),W=n(44311),G=n(54819);function H(e){let{colors:t}=e,[n]=(0,G.c)(t,100);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(D.I.Label,{display:"block",size:"md",labelElement:"div",mt:"xl",mb:"sm",children:"Variants preview"}),(0,r.jsx)(R.M,{theme:{colors:{"__colors-generator__":n}},children:(0,r.jsx)(W.i.ScrollContainer,{minWidth:600,children:(0,r.jsxs)(W.i,{withTableBorder:!0,withColumnBorders:!0,children:[(0,r.jsx)(W.i.Thead,{children:(0,r.jsxs)(W.i.Tr,{children:[(0,r.jsx)(W.i.Th,{ta:"center",children:"Filled"}),(0,r.jsx)(W.i.Th,{ta:"center",children:"Light"}),(0,r.jsx)(W.i.Th,{ta:"center",children:"Outline"}),(0,r.jsx)(W.i.Th,{ta:"center",children:"Subtle"})]})}),(0,r.jsx)(W.i.Tbody,{children:(0,r.jsxs)(W.i.Tr,{children:[(0,r.jsx)(W.i.Td,{children:(0,r.jsx)(T.z,{color:"__colors-generator__",fullWidth:!0,children:"Button"})}),(0,r.jsx)(W.i.Td,{children:(0,r.jsx)(T.z,{color:"__colors-generator__",variant:"light",fullWidth:!0,children:"Button"})}),(0,r.jsx)(W.i.Td,{children:(0,r.jsx)(T.z,{color:"__colors-generator__",variant:"outline",fullWidth:!0,children:"Button"})}),(0,r.jsx)(W.i.Td,{children:(0,r.jsx)(T.z,{color:"__colors-generator__",variant:"subtle",fullWidth:!0,children:"Button"})})]})})]})})})]})}function V(e){let{colors:t}=e,n=JSON.stringify(t);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(D.I.Label,{size:"md",labelElement:"div",mt:"xl",children:"Colors array"}),(0,r.jsx)(b.yp,{language:"json",code:JSON.stringify(t,null,2)},"".concat(n,"-1")),(0,r.jsx)(D.I.Label,{size:"md",labelElement:"div",mt:"xl",children:"Usage with MantineProvider"}),(0,r.jsx)(b.yp,{language:"tsx",code:"import { MantineProvider, createTheme, MantineColorsTuple } from '@mantine/core';\n\nconst myColor: MantineColorsTuple = ".concat(JSON.stringify(t,null,2).replace(/"/g,"'"),";\n\nconst theme = createTheme({\n colors: {\n myColor,\n }\n});\n\nfunction Demo() {\n return (\n \n \n \n );\n}")},n)]})}function J(){let e=(0,p.useRouter)(),t="#".concat(e.query.color),[n,l]=(0,o.useState)("#5474B4"),{colors:i,baseColorIndex:a}=function(e){let t=x()(e),n=function(e){let t=e.get("hsl.l");return _.reduce((e,n)=>Math.abs(n-t)e===n),o=_.map(e=>t.set("hsl.l",e)).map(e=>x()(e)).map((e,t)=>{let n=j[t]-j[r];return n>=0?e.saturate(n):e.desaturate(-1*n)});return{baseColorIndex:r,colors:o}}(n),[s,c]=(0,h._)({key:"display-colors-info",defaultValue:!0});return(0,o.useEffect)(()=>{/^#[0-9A-F]{6}$/i.test(t)&&l(t)},[e.query.color]),(0,r.jsxs)("div",{children:[(0,r.jsx)(b.an,{order:1,children:"Mantine colors generator"}),(0,r.jsx)(A,{value:n,onChange:l,displayColorsInfo:s,setDisplayColorsInfo:c}),(0,r.jsx)(N,{colors:i,baseColorIndex:a,displayColorsInfo:s}),(0,r.jsx)(H,{colors:i.map(e=>e.hex())}),(0,r.jsx)(V,{colors:i.map(e=>e.hex())})]})}function U(){return(0,r.jsx)(m,{title:"Colors generator",children:(0,r.jsx)(J,{})})}},53016:function(e){e.exports={root:"ColorsInput_root__y2k1o",colorPicker:"ColorsInput_colorPicker__3vaoK",saturation:"ColorsInput_saturation__pa4Mk",input:"ColorsInput_input__Blm7P",switch:"ColorsInput_switch___MnwZ"}},43066:function(e){e.exports={root:"ColorsList_root__ZzB5l",item:"ColorsList_item__RmNdL",swatch:"ColorsList_swatch__4rMEJ",label:"ColorsList_label__uy45Y",hex:"ColorsList_hex__4T0M_",index:"ColorsList_index__4xZTW"}},80165:function(e){e.exports={root:"Footer_root__bgmye",spacer:"Footer_spacer__g_thI",wrapper:"Footer_wrapper__chorF",inner:"Footer_inner__Oczlu",logoSection:"Footer_logoSection__VUxg4",description:"Footer_description__b7YOg",title:"Footer_title___pDUp",afterFooter:"Footer_afterFooter__FyXNP",afterFooterNote:"Footer_afterFooterNote__9yART",groups:"Footer_groups__nLTK6",social:"Footer_social__0m1yX",socialButton:"Footer_socialButton__zLzIx"}},16951:function(e){e.exports={wrapper:"LinksGroup_wrapper__54pi4",link:"LinksGroup_link__cg684",title:"LinksGroup_title__maicr"}},21616:function(e){e.exports={content:"PageBase_content__4g1iM"}},94185:function(e){e.exports={wrapper:"PageContentContainer_wrapper__H3HAY",container:"PageContentContainer_container__piKiS"}},46049:function(e,t,n){"use strict";n.d(t,{W:function(){return g}});var r=n(67294),o={root:"m-7485cace"},l=n(75144),i=n(35577),a=n(25637),s=n(51227),c=n(95553),u=n(71350),d=Object.defineProperty,m=Object.getOwnPropertySymbols,p=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable,f=(e,t,n)=>t in e?d(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))p.call(t,n)&&f(e,n,t[n]);if(m)for(var n of m(t))h.call(t,n)&&f(e,n,t[n]);return e},_=(e,t)=>{var n={};for(var r in e)p.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&m)for(var r of m(e))0>t.indexOf(r)&&h.call(e,r)&&(n[r]=e[r]);return n};let j={},b=(0,c.Z)((e,{size:t})=>({root:{"--container-size":(0,u.ap)(t,"container-size")}})),g=(0,l.d)((e,t)=>{let n=(0,i.w)("Container",j,e),{classNames:l,className:c,style:u,styles:d,unstyled:m,vars:p,fluid:h}=n,f=_(n,["classNames","className","style","styles","unstyled","vars","fluid"]),g=(0,a.y)({name:"Container",classes:o,props:n,className:c,style:u,classNames:l,styles:d,unstyled:m,vars:p,varsResolver:b});return r.createElement(s.x,x(x({ref:t,mod:{fluid:h}},g("root")),f))});g.classes=o,g.displayName="@mantine/core/Container"},61830:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(67294),o=n(46393),l=Object.defineProperty,i=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=(e,t,n)=>t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,u=(e,t)=>{for(var n in t||(t={}))a.call(t,n)&&c(e,n,t[n]);if(i)for(var n of i(t))s.call(t,n)&&c(e,n,t[n]);return e},d=(e,t)=>{var n={};for(var r in e)a.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&i)for(var r of i(e))0>t.indexOf(r)&&s.call(e,r)&&(n[r]=e[r]);return n};function m(e){var{size:t,style:n}=e,l=d(e,["size","style"]);return r.createElement("svg",u({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 209",fill:"currentColor",style:u({width:(0,o.h)(t),height:(0,o.h)(t)},n)},l),r.createElement("path",{fillRule:"nonzero",d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 01-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 01-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 01-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 00256 25.45"}))}},54819:function(e,t,n){"use strict";n.d(t,{c:function(){return o}});var r=n(67294);function o(e,t,n={leading:!1}){let[o,l]=(0,r.useState)(e),i=(0,r.useRef)(!1),a=(0,r.useRef)(null),s=(0,r.useRef)(!1),c=()=>window.clearTimeout(a.current);return(0,r.useEffect)(()=>{i.current&&(!s.current&&n.leading?(s.current=!0,l(e)):(c(),a.current=window.setTimeout(()=>{s.current=!1,l(e)},t)))},[e,n.leading,t]),(0,r.useEffect)(()=>(i.current=!0,c),[]),[o,c]}}},function(e){e.O(0,[1333,9774,2888,179],function(){return e(e.s=74241)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/colors-generator-7af0078c6aa3ab46.js b/_next/static/chunks/pages/colors-generator-7af0078c6aa3ab46.js new file mode 100644 index 00000000000..517266b9799 --- /dev/null +++ b/_next/static/chunks/pages/colors-generator-7af0078c6aa3ab46.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5318],{74241:function(e,r,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/colors-generator",function(){return t(77500)}])},8649:function(e,r,t){"use strict";t.d(r,{$:function(){return M}});var n=t(85893),o=t(67294),l=t(90512),i=t(51227),a=t(82827),s=t(46049),c=t(77048),u=t(74378),d=t(40624),m=t(55899),h=t(65623),p={socialButton:"m-fde4daed",socialButtonSection:"m-1df08738",discordButton:"m-6611c750",twitterButton:"m-a568e357"},f=t(95859),x=t(61830),_=Object.defineProperty,j=Object.getOwnPropertySymbols,b=Object.prototype.hasOwnProperty,g=Object.prototype.propertyIsEnumerable,v=(e,r,t)=>r in e?_(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,y=(e,r)=>{for(var t in r||(r={}))b.call(r,t)&&v(e,t,r[t]);if(j)for(var t of j(r))g.call(r,t)&&v(e,t,r[t]);return e},w=(e,r)=>{var t={};for(var n in e)b.call(e,n)&&0>r.indexOf(n)&&(t[n]=e[n]);if(null!=e&&j)for(var n of j(e))0>r.indexOf(n)&&g.call(e,n)&&(t[n]=e[n]);return t};function k(e){var{icon:r}=e,t=w(e,["icon"]);return o.createElement(m.z,y({component:"a",target:"_blank",rel:"noopener noreferrer",leftSection:r,radius:"md",classNames:{root:p.socialButton,section:p.socialButtonSection}},t))}function C(e){var{className:r}=e,t=w(e,["className"]);return o.createElement(k,y({className:(0,d.Z)(p.discordButton,r),icon:o.createElement(f.D,{size:16}),href:h.$.discordLink},t),"Join Discord community")}function N(e){var{className:r}=e,t=w(e,["className"]);return o.createElement(k,y({className:(0,d.Z)(p.twitterButton,r),icon:o.createElement(x.Z,{size:16}),href:h.$.twitterLink},t),"Follow Mantine on Twitter")}var F=t(93258),B=t(41664),z=t.n(B),O=t(16951),P=t.n(O);function T(e){let{data:r,title:t}=e,o=r.map((e,r)=>(0,n.jsx)(c.x,{className:P().link,component:"next"===e.type?z():"a",href:e.link,children:e.label},r));return(0,n.jsxs)("div",{className:P().wrapper,children:[(0,n.jsx)(c.x,{className:P().title,children:t}),o]})}let L=[{title:"About",data:[{type:"next",label:"Contribute",link:"/contribute"},{type:"next",label:"About Mantine",link:"/about"},{type:"next",label:"Changelog",link:"/changelog/previous-versions"},{type:"link",label:"Releases",link:h.$.gitHubLinks.releases}]},{title:"Community",data:[{type:"link",label:"Chat on Discord",link:h.$.discordLink},{type:"link",label:"Follow on Twitter",link:h.$.twitterLink},{type:"link",label:"Follow on Github",link:"https://github.com/rtivital"},{type:"link",label:"GitHub discussions",link:h.$.gitHubLinks.discussions}]},{title:"Project",data:[{type:"link",label:"Mantine UI",link:h.$.uiLink},{type:"link",label:"Documentation",link:h.$.docsLink},{type:"link",label:"Github organization",link:h.$.gitHubLinks.organization},{type:"link",label:"npm organization",link:h.$.npmLink}]}];var E=t(80165),S=t.n(E);function M(e){let{withNavbar:r}=e,t=L.map(e=>(0,n.jsx)(T,{data:e.data,title:e.title},e.title));return(0,n.jsxs)("div",{className:S().root,children:[(0,n.jsx)("div",{className:S().spacer}),(0,n.jsx)(i.x,{mod:{"with-navbar":r},className:(0,l.Z)(S().wrapper,a.Z.classNames.fullWidth),children:(0,n.jsxs)(s.W,{size:1100,children:[(0,n.jsxs)("div",{className:S().inner,children:[(0,n.jsxs)("div",{className:S().logoSection,children:[(0,n.jsx)(F.T,{}),(0,n.jsx)(c.x,{className:S().description,fz:"sm",children:"Build fully functional accessible web applications faster than ever"})]}),(0,n.jsx)("div",{className:S().groups,children:t})]}),(0,n.jsx)("div",{className:S().afterFooter,children:(0,n.jsxs)(u.Z,{justify:"space-between",wrap:"wrap",children:[(0,n.jsxs)(c.x,{fz:"xs",className:S().afterFooterNote,children:["Built by ",(0,n.jsx)("a",{href:"https://github.com/rtivital",children:"Vitaly Rtishchev"})," and"," ",(0,n.jsx)("a",{href:"https://github.com/mantinedev/mantine/graphs/contributors",children:"these awesome people"})]}),(0,n.jsxs)("div",{className:S().social,children:[(0,n.jsx)(C,{className:S().socialButton}),(0,n.jsx)(N,{className:S().socialButton})]})]})})]})})]})}},31144:function(e,r,t){"use strict";t.d(r,{_:function(){return a}});var n=t(85893);t(67294);var o=t(8649),l=t(21616),i=t.n(l);function a(e){let{children:r}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:i().content,children:r}),(0,n.jsx)(o.$,{withNavbar:!0})]})}},77500:function(e,r,t){"use strict";t.r(r),t.d(r,{default:function(){return U}});var n=t(85893),o=t(67294),l=t(9008),i=t.n(l),a=t(31144),s=t(90512),c=t(94185),u=t.n(c);function d(e){let{className:r,children:t,...o}=e;return(0,n.jsx)("div",{className:(0,s.Z)(u().wrapper,r),...o,children:(0,n.jsx)("div",{className:u().container,children:t})})}function m(e){let{title:r,...t}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i(),{children:(0,n.jsx)("title",{children:"".concat(r," | Mantine")})}),(0,n.jsx)(a._,{children:(0,n.jsx)(d,{...t})})]})}var h=t(11163),p=t(20761),f=t(8298),x=t.n(f);let _=[.96,.907,.805,.697,.605,.547,.518,.445,.395,.34],j=[.32,.16,.08,.04,0,0,.04,.08,.16,.32];var b=t(95443),g=t(87578),v=t(27499);function y(e){let r=e/255;return r<=.03928?r/12.92:((r+.055)/1.055)**2.4}var w=t(74378),k=t(43066),C=t.n(k);function N(e){let{colors:r,baseColorIndex:t,displayColorsInfo:o}=e,l=r.map((e,r)=>(0,n.jsx)("div",{className:C().item,children:(0,n.jsx)(g.b,{color:e.hex(),radius:0,className:C().swatch,withShadow:!1,"data-base":r===t||void 0,c:!function(e,r=.179){return function(e){let r=y(e.r),t=y(e.g),n=y(e.b);return .2126*r+.7152*t+.0722*n}((0,v.c)(e))>r}(e.hex())?"white":"black",children:o&&(0,n.jsxs)("div",{className:C().label,children:[(0,n.jsx)("span",{className:C().index,children:r}),(0,n.jsx)("span",{className:C().hex,children:e.hex()})]})})},r));return(0,n.jsx)(w.Z,{gap:0,wrap:"nowrap",className:C().root,children:l})}var F=t(28670),B=t.n(F),z=t(88198),O=t(93625),P=t(9410),T=t(55899),L=t(31577),E=t(91377),S=t(4741),M=t(46393),D=t(68267);let I=[{name:"Blue gray",color:"#63687C"},{name:"Brown",color:"#5D4037"},{name:"Tomato",color:"#F06418"},{name:"Deep orange",color:"#fc8a08"},{name:"Bright orange",color:"#FFA903"},{name:"Yellow",color:"#D9D02F"},{name:"Bright green",color:"#6BD731"},{name:"Green",color:"#2BDD66"},{name:"Light blue",color:"#00B5FF"},{name:"Sky blue",color:"#099CFF"},{name:"Pale blue",color:"#5474B4"},{name:"Bright blue",color:"#0063FF"},{name:"Deep blue",color:"#1F32C4"},{name:"Pale indigo",color:"#4C5897"},{name:"Purple",color:"#4F23C0"},{name:"Pale purple",color:"#504C97"},{name:"Violet",color:"#7B2EDA"},{name:"Pale violet",color:"#6B31B2"},{name:"Dark pink",color:"#8931B2"},{name:"Bright pink",color:"#C02ADF"},{name:"Pink",color:"#F018E8"},{name:"Magenta",color:"#F01879"},{name:"Bright red",color:"#F0185C"},{name:"Pale red",color:"#C91A52"},{name:"Deep red",color:"#C91A25"},{name:"Red",color:"#F21616"}];var Z=t(53016),$=t.n(Z);function A(e){let{value:r,onChange:t,displayColorsInfo:l,setDisplayColorsInfo:i}=e,[a,s]=(0,o.useState)(r),[c,u]=(0,o.useState)(!1),d=(0,h.useRouter)(),m=(0,P.V)(),p=e=>{d.replace({query:{...d.query,color:e.replace("#","")}},void 0,{scroll:!1})},f=e=>{s(e),t(e)},x=e=>{let r=e.currentTarget.value,n=!B().valid(r);s(r),u(n),n||t(r),n||p(r)},_=I.map(e=>(0,n.jsx)(T.z,{variant:"default",leftSection:(0,n.jsx)(g.b,{size:20,color:e.color}),radius:"md",onClick:()=>{f(e.color),p(e.color)},children:e.name},e.color));return(0,n.jsxs)("div",{className:$().root,children:[(0,n.jsxs)("div",{className:$().inputs,children:[(0,n.jsx)(L.o,{value:a,onChange:x,error:c,label:"Enter base color",className:$().input,size:"md",radius:"md"}),(0,n.jsx)(E.z,{value:r,onChange:f,onChangeEnd:p,size:"lg",classNames:{saturation:$().saturation,wrapper:$().colorPicker}}),(0,n.jsx)(S.r,{className:$().switch,label:"Display colors info",size:"md",checked:l,onChange:e=>i(e.currentTarget.checked),mt:"xl"}),(0,n.jsx)(T.z,{fullWidth:!0,leftSection:m.copied?(0,n.jsx)(z.Z,{style:{width:(0,M.h)(18)}}):(0,n.jsx)(O.Z,{style:{width:(0,M.h)(18)}}),rightSection:(0,n.jsx)("span",{}),justify:"space-between",size:"md",mt:"xl",radius:"md",onClick:()=>m.copy(window.location.href),children:m.copied?"Copied":"Copy URL"})]}),(0,n.jsxs)("div",{className:$().presets,children:[(0,n.jsx)(D.I.Label,{size:"md",children:"Preset"}),(0,n.jsx)(w.Z,{gap:"xs",children:_})]})]})}var R=t(66328),W=t(44311),G=t(54819);function H(e){let{colors:r}=e,[t]=(0,G.c)(r,100);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(D.I.Label,{display:"block",size:"md",labelElement:"div",mt:"xl",mb:"sm",children:"Variants preview"}),(0,n.jsx)(R.M,{theme:{colors:{"__colors-generator__":t}},children:(0,n.jsx)(W.i.ScrollContainer,{minWidth:600,children:(0,n.jsxs)(W.i,{withTableBorder:!0,withColumnBorders:!0,children:[(0,n.jsx)(W.i.Thead,{children:(0,n.jsxs)(W.i.Tr,{children:[(0,n.jsx)(W.i.Th,{ta:"center",children:"Filled"}),(0,n.jsx)(W.i.Th,{ta:"center",children:"Light"}),(0,n.jsx)(W.i.Th,{ta:"center",children:"Outline"}),(0,n.jsx)(W.i.Th,{ta:"center",children:"Subtle"})]})}),(0,n.jsx)(W.i.Tbody,{children:(0,n.jsxs)(W.i.Tr,{children:[(0,n.jsx)(W.i.Td,{children:(0,n.jsx)(T.z,{color:"__colors-generator__",fullWidth:!0,children:"Button"})}),(0,n.jsx)(W.i.Td,{children:(0,n.jsx)(T.z,{color:"__colors-generator__",variant:"light",fullWidth:!0,children:"Button"})}),(0,n.jsx)(W.i.Td,{children:(0,n.jsx)(T.z,{color:"__colors-generator__",variant:"outline",fullWidth:!0,children:"Button"})}),(0,n.jsx)(W.i.Td,{children:(0,n.jsx)(T.z,{color:"__colors-generator__",variant:"subtle",fullWidth:!0,children:"Button"})})]})})]})})})]})}function V(e){let{colors:r}=e,t=JSON.stringify(r);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(D.I.Label,{size:"md",labelElement:"div",mt:"xl",children:"Colors array"}),(0,n.jsx)(b.yp,{language:"json",code:JSON.stringify(r,null,2)},"".concat(t,"-1")),(0,n.jsx)(D.I.Label,{size:"md",labelElement:"div",mt:"xl",children:"Usage with MantineProvider"}),(0,n.jsx)(b.yp,{language:"tsx",code:"import { MantineProvider, createTheme, MantineColorsTuple } from '@mantine/core';\n\nconst myColor: MantineColorsTuple = ".concat(JSON.stringify(r,null,2).replace(/"/g,"'"),";\n\nconst theme = createTheme({\n colors: {\n myColor,\n }\n});\n\nfunction Demo() {\n return (\n \n \n \n );\n}")},t)]})}function J(){let e=(0,h.useRouter)(),r="#".concat(e.query.color),[t,l]=(0,o.useState)("#5474B4"),{colors:i,baseColorIndex:a}=function(e){let r=x()(e),t=function(e){let r=e.get("hsl.l");return _.reduce((e,t)=>Math.abs(t-r)e===t),o=_.map(e=>r.set("hsl.l",e)).map(e=>x()(e)).map((e,r)=>{let t=j[r]-j[n];return t>=0?e.saturate(t):e.desaturate(-1*t)});return{baseColorIndex:n,colors:o}}(t),[s,c]=(0,p._)({key:"display-colors-info",defaultValue:!0});return(0,o.useEffect)(()=>{/^#[0-9A-F]{6}$/i.test(r)&&l(r)},[e.query.color]),(0,n.jsxs)("div",{children:[(0,n.jsx)(b.an,{order:1,children:"Mantine colors generator"}),(0,n.jsx)(A,{value:t,onChange:l,displayColorsInfo:s,setDisplayColorsInfo:c}),(0,n.jsx)(N,{colors:i,baseColorIndex:a,displayColorsInfo:s}),(0,n.jsx)(H,{colors:i.map(e=>e.hex())}),(0,n.jsx)(V,{colors:i.map(e=>e.hex())})]})}function U(){return(0,n.jsx)(m,{title:"Colors generator",children:(0,n.jsx)(J,{})})}},53016:function(e){e.exports={root:"ColorsInput_root__y2k1o",colorPicker:"ColorsInput_colorPicker__3vaoK",saturation:"ColorsInput_saturation__pa4Mk",input:"ColorsInput_input__Blm7P",switch:"ColorsInput_switch___MnwZ"}},43066:function(e){e.exports={root:"ColorsList_root__ZzB5l",item:"ColorsList_item__RmNdL",swatch:"ColorsList_swatch__4rMEJ",label:"ColorsList_label__uy45Y",hex:"ColorsList_hex__4T0M_",index:"ColorsList_index__4xZTW"}},80165:function(e){e.exports={root:"Footer_root__bgmye",spacer:"Footer_spacer__g_thI",wrapper:"Footer_wrapper__chorF",inner:"Footer_inner__Oczlu",logoSection:"Footer_logoSection__VUxg4",description:"Footer_description__b7YOg",title:"Footer_title___pDUp",afterFooter:"Footer_afterFooter__FyXNP",afterFooterNote:"Footer_afterFooterNote__9yART",groups:"Footer_groups__nLTK6",social:"Footer_social__0m1yX",socialButton:"Footer_socialButton__zLzIx"}},16951:function(e){e.exports={wrapper:"LinksGroup_wrapper__54pi4",link:"LinksGroup_link__cg684",title:"LinksGroup_title__maicr"}},21616:function(e){e.exports={content:"PageBase_content__4g1iM"}},94185:function(e){e.exports={wrapper:"PageContentContainer_wrapper__H3HAY",container:"PageContentContainer_container__piKiS"}},46049:function(e,r,t){"use strict";t.d(r,{W:function(){return g}});var n=t(67294),o={root:"m-7485cace"},l=t(75144),i=t(35577),a=t(25637),s=t(51227),c=t(95553),u=t(71350),d=Object.defineProperty,m=Object.getOwnPropertySymbols,h=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,f=(e,r,t)=>r in e?d(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,x=(e,r)=>{for(var t in r||(r={}))h.call(r,t)&&f(e,t,r[t]);if(m)for(var t of m(r))p.call(r,t)&&f(e,t,r[t]);return e},_=(e,r)=>{var t={};for(var n in e)h.call(e,n)&&0>r.indexOf(n)&&(t[n]=e[n]);if(null!=e&&m)for(var n of m(e))0>r.indexOf(n)&&p.call(e,n)&&(t[n]=e[n]);return t};let j={},b=(0,c.Z)((e,{size:r})=>({root:{"--container-size":(0,u.ap)(r,"container-size")}})),g=(0,l.d)((e,r)=>{let t=(0,i.w)("Container",j,e),{classNames:l,className:c,style:u,styles:d,unstyled:m,vars:h,fluid:p}=t,f=_(t,["classNames","className","style","styles","unstyled","vars","fluid"]),g=(0,a.y)({name:"Container",classes:o,props:t,className:c,style:u,classNames:l,styles:d,unstyled:m,vars:h,varsResolver:b});return n.createElement(s.x,x(x({ref:r,mod:{fluid:p}},g("root")),f))});g.classes=o,g.displayName="@mantine/core/Container"},61830:function(e,r,t){"use strict";t.d(r,{Z:function(){return m}});var n=t(67294),o=t(46393),l=Object.defineProperty,i=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=(e,r,t)=>r in e?l(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,u=(e,r)=>{for(var t in r||(r={}))a.call(r,t)&&c(e,t,r[t]);if(i)for(var t of i(r))s.call(r,t)&&c(e,t,r[t]);return e},d=(e,r)=>{var t={};for(var n in e)a.call(e,n)&&0>r.indexOf(n)&&(t[n]=e[n]);if(null!=e&&i)for(var n of i(e))0>r.indexOf(n)&&s.call(e,n)&&(t[n]=e[n]);return t};function m(e){var{size:r,style:t}=e,l=d(e,["size","style"]);return n.createElement("svg",u({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 209",fill:"currentColor",style:u({width:(0,o.h)(r),height:(0,o.h)(r)},t)},l),n.createElement("path",{fillRule:"nonzero",d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 01-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 01-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 01-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 00256 25.45"}))}},54819:function(e,r,t){"use strict";t.d(r,{c:function(){return o}});var n=t(67294);function o(e,r,t={leading:!1}){let[o,l]=(0,n.useState)(e),i=(0,n.useRef)(!1),a=(0,n.useRef)(null),s=(0,n.useRef)(!1),c=()=>window.clearTimeout(a.current);return(0,n.useEffect)(()=>{i.current&&(!s.current&&t.leading?(s.current=!0,l(e)):(c(),a.current=window.setTimeout(()=>{s.current=!1,l(e)},r)))},[e,t.leading,r]),(0,n.useEffect)(()=>(i.current=!0,c),[]),[o,c]}}},function(e){e.O(0,[1333,9774,2888,179],function(){return e(e.s=74241)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/theming/default-props-ca4da7cae68f8fdb.js b/_next/static/chunks/pages/theming/default-props-435f082c9754bd64.js similarity index 62% rename from _next/static/chunks/pages/theming/default-props-ca4da7cae68f8fdb.js rename to _next/static/chunks/pages/theming/default-props-435f082c9754bd64.js index 4e583bee653..38ebc0a6585 100644 --- a/_next/static/chunks/pages/theming/default-props-ca4da7cae68f8fdb.js +++ b/_next/static/chunks/pages/theming/default-props-435f082c9754bd64.js @@ -63,4 +63,4 @@ function Demo() { ); } -`,M={color:"red"};function g(e){let{color:n,children:t}=(0,f.w)("CustomComponent",M,e);return a.createElement("div",{style:{color:n}},t)}let y=(0,i.j)({components:{CustomComponent:{defaultProps:{color:"green"}}}}),P={type:"code",component:function(){return a.createElement("div",null,a.createElement(g,null,"Default color"),a.createElement(l.M2,{theme:y},a.createElement(g,null,"Provider color"),a.createElement(g,{color:"blue"},"Prop color")))},code:v},x=(0,s.A)(c.us.DefaultProps);function j(e){let n=Object.assign({h1:"h1",p:"p",code:"code",h2:"h2",a:"a",pre:"pre",ul:"ul",li:"li"},(0,r.ah)(),e.components),{Demo:t}=n;return t||function(e,n){throw Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Demo",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"default-props",children:"Default props"}),"\n",(0,o.jsxs)(n.p,{children:["You can define default props for every Mantine component by setting ",(0,o.jsx)(n.code,{children:"theme.components"}),".\nThese props will be used by default by all components of your application unless they are overridden by component props:"]}),"\n",(0,o.jsx)(t,{data:m}),"\n",(0,o.jsx)(n.h2,{id:"default-props-with-mantinethemeprovider",children:"Default props with MantineThemeProvider"}),"\n",(0,o.jsxs)(n.p,{children:["You can also use ",(0,o.jsx)(n.a,{href:"/theming/mantine-provider#mantinethemeprovider",children:"MantineThemeProvider"})," to define default props\nfor a part of your application:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-tsx",children:"import { MantineThemeProvider, Button, createTheme } from '@mantine/core';\n\nconst theme = createTheme({\n components: {\n Button: Button.extend({\n defaultProps: {\n color: 'cyan',\n variant: 'outline',\n },\n }),\n },\n});\n\nfunction Demo() {\n return (\n <>\n \n \n \n\n \n \n );\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"default-props-for-compound-components",children:"Default props for compound components"}),"\n",(0,o.jsxs)(n.p,{children:["Some components like ",(0,o.jsx)(n.a,{href:"/core/menu/",children:"Menu"})," and ",(0,o.jsx)(n.a,{href:"/core/tabs/",children:"Tabs"})," have associated compound components:\n",(0,o.jsx)(n.code,{children:"Menu.Item"}),", ",(0,o.jsx)(n.code,{children:"Tabs.List"}),", etc.. You can add default props to these components by omitting the dot from component name:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-tsx",children:"import { MantineProvider, Menu, Tabs } from '@mantine/core';\n\nfunction Demo() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"useprops-hook",children:"useProps hook"}),"\n",(0,o.jsxs)(n.p,{children:["You can use ",(0,o.jsx)(n.code,{children:"useProps"})," hook to add default props support to any custom component.\n",(0,o.jsx)(n.code,{children:"useProps"})," accepts three arguments:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"component name (string) – it is used to connect component with theme"}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"defaultProps"})," – default props on component level – these props are used when default props are not defined on theme"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"props"})," – props passed to component"]}),"\n"]}),"\n",(0,o.jsx)(t,{data:P})]})}var k=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,o.jsx)(x,Object.assign({},e,{children:(0,o.jsx)(j,e)}))}}},function(e){e.O(0,[1300,178,9774,2888,179],function(){return e(e.s=69575)}),_N_E=e.O()}]); \ No newline at end of file +`,M={color:"red"};function y(e){let{color:n,children:t}=(0,f.w)("CustomComponent",M,e);return a.createElement("div",{style:{color:n}},t)}let g=(0,i.j)({components:{CustomComponent:{defaultProps:{color:"green"}}}}),P={type:"code",component:function(){return a.createElement("div",null,a.createElement(y,null,"Default color"),a.createElement(l.M2,{theme:g},a.createElement(y,null,"Provider color"),a.createElement(y,{color:"blue"},"Prop color")))},code:v},x=(0,s.A)(c.us.DefaultProps);function j(e){let n=Object.assign({h1:"h1",p:"p",code:"code",h2:"h2",pre:"pre",a:"a",ul:"ul",li:"li"},(0,r.ah)(),e.components),{Demo:t}=n;return t||function(e,n){throw Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Demo",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"default-props",children:"Default props"}),"\n",(0,o.jsxs)(n.p,{children:["You can define default props for every Mantine component by setting ",(0,o.jsx)(n.code,{children:"theme.components"}),".\nThese props will be used by default by all components of your application unless they are overridden by component props:"]}),"\n",(0,o.jsx)(t,{data:m}),"\n",(0,o.jsx)(n.h2,{id:"default-props-with-mantinethemeprovider",children:"Default props with MantineThemeProvider"}),"\n",(0,o.jsxs)(n.p,{children:["You can also use ",(0,o.jsx)(n.code,{children:"MantineThemeProvider"})," to define default props\nfor a part of your application:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-tsx",children:"import { MantineThemeProvider, Button, createTheme } from '@mantine/core';\n\nconst theme = createTheme({\n components: {\n Button: Button.extend({\n defaultProps: {\n color: 'cyan',\n variant: 'outline',\n },\n }),\n },\n});\n\nfunction Demo() {\n return (\n <>\n \n \n \n\n \n \n );\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"default-props-for-compound-components",children:"Default props for compound components"}),"\n",(0,o.jsxs)(n.p,{children:["Some components like ",(0,o.jsx)(n.a,{href:"/core/menu/",children:"Menu"})," and ",(0,o.jsx)(n.a,{href:"/core/tabs/",children:"Tabs"})," have associated compound components:\n",(0,o.jsx)(n.code,{children:"Menu.Item"}),", ",(0,o.jsx)(n.code,{children:"Tabs.List"}),", etc.. You can add default props to these components by omitting the dot from component name:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-tsx",children:"import { MantineProvider, Menu, Tabs } from '@mantine/core';\n\nfunction Demo() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"useprops-hook",children:"useProps hook"}),"\n",(0,o.jsxs)(n.p,{children:["You can use ",(0,o.jsx)(n.code,{children:"useProps"})," hook to add default props support to any custom component.\n",(0,o.jsx)(n.code,{children:"useProps"})," accepts three arguments:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"component name (string) – it is used to connect component with theme"}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"defaultProps"})," – default props on component level – these props are used when default props are not defined on theme"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"props"})," – props passed to component"]}),"\n"]}),"\n",(0,o.jsx)(t,{data:P})]})}var k=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,o.jsx)(x,Object.assign({},e,{children:(0,o.jsx)(j,e)}))}}},function(e){e.O(0,[1300,178,9774,2888,179],function(){return e(e.s=69575)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/theming/mantine-provider-816e166cf579a4c0.js b/_next/static/chunks/pages/theming/mantine-provider-816e166cf579a4c0.js new file mode 100644 index 00000000000..fe4aba25da4 --- /dev/null +++ b/_next/static/chunks/pages/theming/mantine-provider-816e166cf579a4c0.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6708],{33507:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("arrow-left","IconArrowLeft",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M5 12l6 6",key:"svg-1"}],["path",{d:"M5 12l6 -6",key:"svg-2"}]])},12162:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("arrow-right","IconArrowRight",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]])},8427:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("calendar","IconCalendar",[["path",{d:"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z",key:"svg-0"}],["path",{d:"M16 3v4",key:"svg-1"}],["path",{d:"M8 3v4",key:"svg-2"}],["path",{d:"M4 11h16",key:"svg-3"}],["path",{d:"M11 15h1",key:"svg-4"}],["path",{d:"M12 15v3",key:"svg-5"}]])},38767:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("license","IconLicense",[["path",{d:"M15 21h-9a3 3 0 0 1 -3 -3v-1h10v2a2 2 0 0 0 4 0v-14a2 2 0 1 1 2 2h-2m2 -4h-11a3 3 0 0 0 -3 3v11",key:"svg-0"}],["path",{d:"M9 7l4 0",key:"svg-1"}],["path",{d:"M9 11l4 0",key:"svg-2"}]])},94342:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("list","IconList",[["path",{d:"M9 6l11 0",key:"svg-0"}],["path",{d:"M9 12l11 0",key:"svg-1"}],["path",{d:"M9 18l11 0",key:"svg-2"}],["path",{d:"M5 6l0 .01",key:"svg-3"}],["path",{d:"M5 12l0 .01",key:"svg-4"}],["path",{d:"M5 18l0 .01",key:"svg-5"}]])},30471:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("pencil","IconPencil",[["path",{d:"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4",key:"svg-0"}],["path",{d:"M13.5 6.5l4 4",key:"svg-1"}]])},62640:function(e,n,r){"use strict";r.d(n,{Z:function(){return t}});var t=(0,r(30853).Z)("switch-2","IconSwitch2",[["path",{d:"M3 17h5l1.67 -2.386m3.66 -5.227l1.67 -2.387h6",key:"svg-0"}],["path",{d:"M18 4l3 3l-3 3",key:"svg-1"}],["path",{d:"M3 7h5l7 10h6",key:"svg-2"}],["path",{d:"M18 20l3 -3l-3 -3",key:"svg-3"}]])},94629:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/theming/mantine-provider",function(){return r(26549)}])},26549:function(e,n,r){"use strict";r.r(n);var t=r(85893),s=r(11151),a=r(19905),o=r(9904);let i=(0,a.A)(o.us.MantineProvider);function c(e){let n=Object.assign({h1:"h1",p:"p",code:"code",a:"a",h2:"h2",pre:"pre",h3:"h3",strong:"strong",ul:"ul",li:"li"},(0,s.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"mantineprovider",children:"MantineProvider"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"MantineProvider"})," provides ",(0,t.jsx)(n.a,{href:"/theming/theme-object",children:"theme object"})," context value, manages color scheme\nchanges and injects ",(0,t.jsx)(n.a,{href:"/styles/css-variables/",children:"CSS variables"}),". It must be rendered at the root of your\napplication and should be user only once."]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-tsx",children:"import { MantineProvider, createTheme } from '@mantine/core';\n\nconst theme = createTheme({\n /** Your theme override here */\n});\n\nfunction Demo() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"mantineprovider-props",children:"MantineProvider props"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"MantineProvider"})," supports the following props:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-tsx",children:"interface MantineProviderProps {\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Used to retrieve/set color scheme value in external storage, by default uses `window.localStorage` */\n colorSchemeManager?: MantineColorSchemeManager;\n\n /** Default color scheme value used when `colorSchemeManager` cannot retrieve value from external storage, `auto` by default */\n defaultColorScheme?: MantineColorScheme;\n\n /** CSS selector to which CSS variables should be added, `:root` by default */\n cssVariablesSelector?: string;\n\n /** Determines whether theme CSS variables should be added to given `cssVariablesSelector`, `true` by default */\n withCssVariables?: boolean;\n\n /** Function to resolve root element to set `data-mantine-color-scheme` attribute, must return undefined on server, `() => document.documentElement` by default */\n getRootElement?(): HTMLElement | undefined;\n\n /** A prefix for components static classes (for example {selector}-Text-root), `mantine` by default */\n classNamesPrefix?: string;\n\n /** Function to generate nonce attribute added to all generated `

About Mantine

+

About Mantine

Mantine is a React components library focused on providing great user and developer experience. Mantine development was started in January 2021 and the 1.0 version was released on May 3rd, 2021, and since then, more than 150 releases have been published.

@@ -56,4 +56,4 @@ function Demo() { return <MantineLogo color="blue" />; -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/app-shell.html b/app-shell/index.html similarity index 94% rename from app-shell.html rename to app-shell/index.html index be2b8950154..f4878f598f7 100644 --- a/app-shell.html +++ b/app-shell/index.html @@ -3,4 +3,4 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -
\ No newline at end of file +
\ No newline at end of file diff --git a/changelog/7-0-0.html b/changelog/7-0-0/index.html similarity index 87% rename from changelog/7-0-0.html rename to changelog/7-0-0/index.html index e1ae49313c5..4364925c9f9 100644 --- a/changelog/7-0-0.html +++ b/changelog/7-0-0/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

Version v7.0.0

Migration to native CSS

+

Version v7.0.0

Migration to native CSS

Mantine no longer depends on Emotion for styles generation. All @mantine/* packages are now shipped with native CSS files which can be imported from @mantine/{package}/styles.css, for example:

@@ -13,21 +13,21 @@ Next.js app directory.

Important breaking changes:

    -
  • createStyles function is no longer available, use CSS modules or any other styling solution of your choice instead
  • +
  • createStyles function is no longer available, use CSS modules or any other styling solution of your choice instead
  • Components no longer support sx prop. You can use className or style props instead.
  • styles prop no longer supports nested selectors
-

It is now recommended to use CSS modules to style Mantine components. -To update your project to CSS modules, follow the 6.x → 7.x migration guide.

+

It is now recommended to use CSS modules to style Mantine components. +To update your project to CSS modules, follow the 6.x → 7.x migration guide.

Vanilla extract integration

-

If you prefer CSS-in-JS syntax for styling, you can use Vanilla extract +

If you prefer CSS-in-JS syntax for styling, you can use Vanilla extract as a TypeScript CSS preprocessor. You will be able to use most of Mantine styling features -with Vanilla extract.

+with Vanilla extract.

System color scheme support

All components now support system color scheme – when colorScheme value is auto, components will use prefers-color-scheme media query to determine if the user prefers light or dark color scheme.

Note that auto is not the default value. You need to set it manually to enable system color scheme support -both on MantineProvider and in ColorSchemeScript:

+both on MantineProvider and in ColorSchemeScript:

import { MantineProvider, ColorSchemeScript } from '@mantine/core';
 
 function Demo() {
@@ -41,9 +41,9 @@
   );
 }

Built-in color scheme manager

-

MantineProvider now comes with a built-in color scheme manager. +

MantineProvider now comes with a built-in color scheme manager. It is no longer required to use any other components to set up color scheme logic. -Color scheme can be changed with useMantineColorScheme hook:

+Color scheme can be changed with useMantineColorScheme hook:

import { useMantineColorScheme, Button, Group } from '@mantine/core';
 
 function Demo() {
@@ -59,20 +59,20 @@
   );
 }

CSS modules and PostCSS preset

-

CSS modules is now the recommended way to style Mantine components, +

CSS modules is now the recommended way to style Mantine components, although it is not required – you can choose any other styling solution of your choice.

-

It is also recommended to use postcss-preset-mantine. It includes -mixins and functions to simplify styling of Mantine components. postcss-preset-mantine +

It is also recommended to use postcss-preset-mantine. It includes +mixins and functions to simplify styling of Mantine components. postcss-preset-mantine is included in all templates.

Global styles

-

Mantine no longer includes normalize.css. Instead, it uses a bare minimum set of global styles. +

Mantine no longer includes normalize.css. Instead, it uses a bare minimum set of global styles. These styles are part of the @mantine/core package and are applied automatically when you import @mantine/core/styles.css in your application. Note that these styles cannot be decoupled from the rest of the library.

Mantine as a headless UI library

-

You can now use Mantine as a headless library. To achieve that, just do not import +

You can now use Mantine as a headless library. To achieve that, just do not import @mantine/*/styles.css in your application. Then you will be able to apply styles with -Styles API.

+Styles API.

createTheme function

createTheme function is a replacement for MantineThemeOverride type. Use it to create a theme override, it will give you autocomplete for all theme properties:

@@ -91,9 +91,9 @@ ); }

Components extend functions

-

All components that support default props or Styles API now have a static extend function which allows getting autocomplete when customizing -defaultProps, classNames and styles of the component -on theme:

+

All components that support default props or Styles API now have a static extend function which allows getting autocomplete when customizing +defaultProps, classNames and styles of the component +on theme:

import { useState } from 'react';
 import { TextInput, MantineProvider, createTheme } from '@mantine/core';
 import classes from './Demo.module.css';
@@ -127,7 +127,7 @@
   );
 }

classNames based on component props

-

You can now get component props in classNames and styles to conditionally apply styles. +

You can now get component props in classNames and styles to conditionally apply styles. This feature is a more powerful replacement for styles params.

import cx from 'clsx';
 import { MantineProvider, createTheme, TextInput } from '@mantine/core';
@@ -153,8 +153,8 @@
   );
 }

Components CSS variables

-

You can now customize components CSS variables to change component styles based on its props. -For example, it can be used to add new sizes:

+

You can now customize components CSS variables to change component styles based on its props. +For example, it can be used to add new sizes:

import { Button, rem, Group, MantineProvider, createTheme } from '@mantine/core';
 
 const theme = createTheme({
@@ -199,7 +199,7 @@
 }

New variants system

All components now have data-variant attribute on the root element, even if the component does not have any predefined variants. -You can use it to apply styles to all components of the same type on theme:

+You can use it to apply styles to all components of the same type on theme:

import { Input, MantineProvider, createTheme } from '@mantine/core';
 import classes from './Demo.module.css';
 
@@ -223,10 +223,10 @@
 

There are multiple ways to customize component sizes:

-

Example of customizing Button size with data-size attribute:

+

Example of customizing Button size with data-size attribute:

import { Input, createTheme, MantineProvider } from '@mantine/core';
 import classes from './Demo.module.css';
 
@@ -245,8 +245,8 @@
   );
 }

theme.variantColorResolver

-

Button, Badge, ActionIcon, ThemeIcon and other -components now support custom variants with variantColorResolver +

Button, Badge, ActionIcon, ThemeIcon and other +components now support custom variants with variantColorResolver – it supports both changing colors of existing variants and adding new variants.

import {
   Button,
@@ -313,7 +313,7 @@
   );
 }

rem units scaling

-

It is now possible to scale rem units. It is useful when you want to change +

It is now possible to scale rem units. It is useful when you want to change font-size of html/:root element and preserve Mantine components sizes. For example, if you would like to set html font-size to 10px and scale Mantine components accordingly, you need to set scale to 1 / (10 / 16) (16 – default font-size) = 1 / 0.625 = 1.6:

:root {
@@ -380,7 +380,7 @@
 }

Components classes

Classes of each component are now available in Component.classes object. For example, you can -find Button classes in Button.classes:

+find Button classes in Button.classes:

KeyClass
rootm-77c9d27d
innerm-80f1301b
labelm-811560b9
sectionm-a74036a
loaderm-a25b86ee
groupm-80d6d844

You can use these classes to create components with the same styles as Mantine components:

import { Button } from '@mantine/core';
@@ -390,22 +390,22 @@
 }

Theme object changes

    -
  • theme.lineHeight is now theme.lineHeights – it is now possible to specify multiple line heights. theme.lineHeights values are used in the Text component.
  • -
  • theme.colorScheme is no longer available, use useMantineColorScheme to get color scheme value
  • -
  • theme.dir is no longer needed, direction is now managed by DirectionProvider
  • -
  • theme.loader was removed, you can now configure default loader with default props of Loader component
  • +
  • theme.lineHeight is now theme.lineHeights – it is now possible to specify multiple line heights. theme.lineHeights values are used in the Text component.
  • +
  • theme.colorScheme is no longer available, use useMantineColorScheme to get color scheme value
  • +
  • theme.dir is no longer needed, direction is now managed by DirectionProvider
  • +
  • theme.loader was removed, you can now configure default loader with default props of Loader component
  • theme.transitionTimingFunction was removed
  • theme.focusRingStyles was replaced with theme.focusClassName
  • theme.activeStyles was replaced with theme.activeClassName
  • theme.globalStyles was removed
  • -
  • theme.fn functions were removed, some of the functions are available as standalone utilities
  • -
  • New theme.scale property controls rem units scaling
  • +
  • theme.fn functions were removed, some of the functions are available as standalone utilities
  • +
  • New theme.scale property controls rem units scaling
  • New theme.fontSmoothing property determines whether font smoothing styles should be applied to the body element
  • -
  • New theme.variantColorResolver property allows customizing component colors per variant
  • +
  • New theme.variantColorResolver property allows customizing component colors per variant

Colors generator

-

New @mantine/colors-generator package is now available to generate -color palettes based on single color value. It is also available as online tool. +

New @mantine/colors-generator package is now available to generate +color palettes based on single color value. It is also available as online tool. Note that it is usually better to generate colors in advance to avoid contrast issues.

import { MantineProvider } from '@mantine/core';
 import { generateColors } from '@mantine/colors-generator';
@@ -424,16 +424,16 @@
   );
 }

New setup for RTL

-

@mantine/core package now exports DirectionProvider component, which should be used to configure the direction of the application. +

@mantine/core package now exports DirectionProvider component, which should be used to configure the direction of the application. useDirection hook can be used to toggle direction. All components now include RTL styles by default, it is no -longer required to set up additional plugins. See RTL documentation to learn more.

+longer required to set up additional plugins. See RTL documentation to learn more.

React 18+ only

Starting from version 7.0 Mantine no longer supports older React versions. The minimum supported version is now React 18. It is required because Mantine components now use useId and useSyncExternalStore hooks, which are available only in React 18.

left and right section

Components that previously had rightSection and icon props, now use leftSection instead of icon. -Example of Button sections:

+Example of Button sections:

import { Button } from '@mantine/core';
 
 function Demo() {
@@ -444,9 +444,9 @@
   );
 }

NumberInput changes

-

NumberInput was migrated to react-number-format. +

NumberInput was migrated to react-number-format. It now supports more features and has improvements in cursor position management. -Due to migration, some of the props were renamed – follow the documentation to learn about the changes.

+Due to migration, some of the props were renamed – follow the documentation to learn about the changes.

import { NumberInput } from '@mantine/core';
 
 function Demo() {
@@ -470,16 +470,16 @@
   );
 }

Loader changes

-

Loader component is now built with CSS only. This change improves performance and reduces +

Loader component is now built with CSS only. This change improves performance and reduces HTML output of the component.

Color
Size
Type
import { Loader } from '@mantine/core';
 
 function Demo() {
   return <Loader color="blue" />;
 }
-

Theme object no longer supports theme.loader property – -it is also now possible to add custom loaders on theme with default props. -Specified Loader will be used in all components that use it under the hood (LoadingOverlay, Button, ActionIcon, Stepper, etc.).

+

Theme object no longer supports theme.loader property – +it is also now possible to add custom loaders on theme with default props. +Specified Loader will be used in all components that use it under the hood (LoadingOverlay, Button, ActionIcon, Stepper, etc.).

import { MantineProvider, Loader } from '@mantine/core';
 import { RingLoader } from './RingLoader';
 
@@ -502,8 +502,8 @@
   );
 }

Progress changes

-

Progress component now supports compound components pattern. -Advanced features that were previously implemented in Progress are now supposed to be implemented with +

Progress component now supports compound components pattern. +Advanced features that were previously implemented in Progress are now supposed to be implemented with compound components instead.

Documents
Photos
Other
import { Progress } from '@mantine/core';
 
@@ -523,14 +523,14 @@
   );
 }

Table changes

-

Table component changes:

+

Table component changes:

    -
  • Styles API support
  • +
  • Styles API support
  • It is now required to use compound components instead of elements: Table.Tr, Table.Td, etc.
  • It is now easier to override styles – all styles are added with classes instead of deeply nested selectors on root element
  • New props: borderColor, withRowBorders, stripedColor, highlightOnHoverColor
  • withBorder prop was renamed to withTableBorder
  • -
  • fontSize prop was removed, use fz style prop instead
  • +
  • fontSize prop was removed, use fz style prop instead
  • New Table.ScrollContainer component to create scrollable table
Element positionElement nameSymbolAtomic mass
6CarbonC12.011
7NitrogenN14.007
39YttriumY88.906
56BariumBa137.33
58CeriumCe140.12
import { Table } from '@mantine/core';
@@ -560,7 +560,7 @@
   );
 }

Group changes

-

Group component changes:

+

Group component changes:

  • position prop was renamed to justify – it now supports all justify-content values
  • noWrap prop was replaced with wrap="nowrap", wrap prop now supports all flex-wrap values
  • @@ -589,23 +589,23 @@
    • compact prop was removed, use size="compact-XXX" instead
    • leftIcon and rightIcon props were renamed to leftSection and rightSection
    • -
    • uppercase prop was removed, use tt style prop instead
    • -
    • loaderPosition prop was removed, Loader is now always rendered in the center to prevent layout shifts
    • -
    • Styles API selectors were changed, see Button Styles API documentation for more details
    • +
    • uppercase prop was removed, use tt style prop instead
    • +
    • loaderPosition prop was removed, Loader is now always rendered in the center to prevent layout shifts
    • +
    • Styles API selectors were changed, see Button Styles API documentation for more details

    AppShell changes

    -

    AppShell component was completely rewritten, it now supports more features:

    +

    AppShell component was completely rewritten, it now supports more features:

    • AppShell now uses compound components pattern: Navbar, Aside, Header and Footer are no longer exported from @mantine/core package. Instead, use AppShell.Navbar, AppShell.Aside, etc.
    • AppShell now supports animations when navbar/aside are opened/closed
    • Navbar/aside can now be collapsed on desktop – state is handled separately for mobile and desktop
    • Header/footer can now be collapsed the same way as navbar/aside. For example, the header can be collapsed based on scroll position or direction.
    • AppShell no longer supports fixed prop – all components have position: fixed styles, static positioning is no longer supported
    • -
    • The documentation was updated, it now includes 10+ examples on a separate page
    • +
    • The documentation was updated, it now includes 10+ examples on a separate page

    SimpleGrid changes

    -

    SimpleGrid now uses object format to define grid breakpoints and spacing, -it works the same way as style props.

    +

    SimpleGrid now uses object format to define grid breakpoints and spacing, +it works the same way as style props.

    1

    2

    3

    4

    5

    import { SimpleGrid } from '@mantine/core';
     
     function Demo() {
    @@ -624,8 +624,8 @@
       );
     }

    Grid changes

    -

    Grid now uses object format in gutter, offset, span and order props, -all props now work the same way as style props.

    +

    Grid now uses object format in gutter, offset, span and order props, +all props now work the same way as style props.

    1
    2
    3
    4
    import { Grid } from '@mantine/core';
     
     function Demo() {
    @@ -639,11 +639,11 @@
       );
     }

    Image changes

    -

    Image component changes:

    +

    Image component changes:

    • Image component no longer includes figure and other associated elements
    • caption prop is no longer available
    • -
    • width and height props are replaced with w and h style props
    • +
    • width and height props are replaced with w and h style props
    • Placeholder functionality was replaced with fallback image
    import { Image } from '@mantine/core';
    @@ -659,7 +659,7 @@
       );
     }

    Spotlight changes

    -

    Spotlight changes:

    +

    Spotlight changes:

    • The logic is no longer based on React context
    • SpotlightProvider was renamed to Spotlight
    • @@ -696,7 +696,7 @@ ); }

Carousel changes

-

Carousel now uses object format for responsive values in +

Carousel now uses object format for responsive values in slideSize and slideGap props instead of breakpoints prop:

import { Carousel } from '@mantine/carousel';
 
@@ -718,7 +718,7 @@
   );
 }

@mantine/prism deprecation

-

@mantine/prism package was deprecated in favor of @mantine/code-highlight package. The new package uses highlight.js instead of Prism.

+

@mantine/prism package was deprecated in favor of @mantine/code-highlight package. The new package uses highlight.js instead of Prism.

function Button() {
   return <button>Click me</button>;
 }
import { CodeHighlightTabs } from '@mantine/code-highlight';
@@ -769,7 +769,7 @@
   );
 }

Fieldset component

-

New Fieldset component:

+

New Fieldset component:

Personal information
Variant
Radius
import { Fieldset } from '@mantine/core';
 
 function Demo() {
@@ -781,13 +781,13 @@
   );
 }

Combobox component

-

The new Combobox component allows building custom select, autocomplete, tags input, multiselect and other -similar components. It is used as a base for updated Autocomplete, Select, -TagsInput and MultiSelect components.

-

Combobox is very flexible and allows you to have full control over the component rendering and logic. -Advanced features that were previously implemented in Autocomplete, Select -and MultiSelect are now supposed to be implemented with Combobox instead.

-

You can find 50+ Combobox examples on this page.

+

The new Combobox component allows building custom select, autocomplete, tags input, multiselect and other +similar components. It is used as a base for updated Autocomplete, Select, +TagsInput and MultiSelect components.

+

Combobox is very flexible and allows you to have full control over the component rendering and logic. +Advanced features that were previously implemented in Autocomplete, Select +and MultiSelect are now supposed to be implemented with Combobox instead.

+

You can find 50+ Combobox examples on this page.

import { useState } from 'react';
 import { Input, InputBase, Combobox, useCombobox } from '@mantine/core';
 
@@ -832,8 +832,8 @@
   );
 }

TagsInput component

-

New TagsInput component based on Combobox component. -The component is similar to MultiSelect but allows entering custom values.

+

New TagsInput component based on Combobox component. +The component is similar to MultiSelect but allows entering custom values.

import { TagsInput } from '@mantine/core';
 
 function Demo() {
@@ -903,45 +903,45 @@
 }

Other changes

    -
  • New VisuallyHidden component
  • -
  • New ActionIcon.Group component
  • -
  • DatesProvider now supports setting timezone
  • +
  • New VisuallyHidden component
  • +
  • New ActionIcon.Group component
  • +
  • DatesProvider now supports setting timezone
  • All transitions are now disabled during color scheme change
  • theme.respectReducedMotion is now set to false by default – it caused a lot of confusion for users who did not know about it
  • -
  • Notifications system now exports notifications.updateState function to update notifications state with a given callback
  • -
  • Blockquote component has new design
  • -
  • Breadcrumbs component now supports separatorMargin prop
  • -
  • Tooltip component now supports mainAxis and crossAxis offset configuration
  • -
  • Slider and RangeSlider components radius prop now affects thumb as well as track
  • -
  • NativeSelect component now supports setting options as children and options groups
  • -
  • Anchor component now supports underline prop which lets you configure how link will be underlined: hover (default), always or never
  • -
  • Affix component no longer supports target prop, use portalProps instead
  • -
  • Container component no longer supports sizes prop, use CSS variables to customize sizes on theme instead
  • -
  • useComponentDefaultProps hook was renamed to useProps
  • -
  • withinPortal prop is now true by default in all overlay components (Popover, HoverCard, Tooltip, etc.)
  • -
  • AlphaSlider and HueSlider components are no longer available, they can be used only as a part of ColorPicker
  • -
  • Text default root element is now <p />
  • -
  • Title no longer supports all Text props, only style props are available
  • -
  • MediaQuery component was removed – use CSS modules to apply responsive styles
  • -
  • Highlight component prop highlightColor was renamed to color
  • -
  • Tooltip and Tooltip.Floating components no longer support width prop, use w style prop instead
  • -
  • Stack component spacing prop was renamed to gap
  • -
  • Input and other Input based components icon prop was renamed to leftSection
  • -
  • Loader component variant prop was renamed to type
  • -
  • @mantine/core package no longer depends on Radix UI ScrollArea, ScrollArea component is now a native Mantine component – it reduces bundle size, allows setting CSP for styles and improves performance (all styles are now applied with classes instead of inline <style /> tags)
  • -
  • Overlay opacity prop was renamed to backgroundOpacity to avoid collision with opacity style prop
  • -
  • Badge Styles API selectors were changed, see Badge Styles API documentation for more details
  • -
  • Slider Styles API selectors were changed, see Slider Styles API documentation for more details
  • -
  • Text component no longer supports underline, color, strikethrough, italic, transform, align and weight prop – use style props instead
  • -
  • Portal component innerRef prop was renamed to ref
  • -
  • ScrollArea now supports x and y values in offsetScrollbars prop
  • -
  • TransferList component is no longer available as a part of @mantine/core package, instead you can implement it with Combobox component (example)
  • -
  • Chip component now supports custom check icon
  • -
  • PasswordInput no longer supports visibilityToggleLabel and toggleTabIndex props, use visibilityToggleButtonProps prop instead
  • -
  • Stepper now longer supports breakpoint prop, you can apply responsive styles with Styles API
  • -
  • ColorInput no longer supports dropdownZIndex, transitionProps, withinPortal, portalProps and shadow props, you can now pass these props with popoverProps prop
  • -
  • LoadingOverlay props are now grouped by the component they are passed down to: overlayProps, loaderProps and transitionProps now replace props that were previously passed to LoadingOverlay directly
  • -
  • Dropzone component no longer supports padding prop, use p style prop instead
  • -
  • Dialog component now supports all Paper and Affix props, transitionDuration, transition and other transition related props were replaced with transitionProps
  • -
  • Checkbox, Radio, Chip and Switch components now support rootRef prop which allows using them with Tooltip and other similar components
  • -
\ No newline at end of file +
  • Notifications system now exports notifications.updateState function to update notifications state with a given callback
  • +
  • Blockquote component has new design
  • +
  • Breadcrumbs component now supports separatorMargin prop
  • +
  • Tooltip component now supports mainAxis and crossAxis offset configuration
  • +
  • Slider and RangeSlider components radius prop now affects thumb as well as track
  • +
  • NativeSelect component now supports setting options as children and options groups
  • +
  • Anchor component now supports underline prop which lets you configure how link will be underlined: hover (default), always or never
  • +
  • Affix component no longer supports target prop, use portalProps instead
  • +
  • Container component no longer supports sizes prop, use CSS variables to customize sizes on theme instead
  • +
  • useComponentDefaultProps hook was renamed to useProps
  • +
  • withinPortal prop is now true by default in all overlay components (Popover, HoverCard, Tooltip, etc.)
  • +
  • AlphaSlider and HueSlider components are no longer available, they can be used only as a part of ColorPicker
  • +
  • Text default root element is now <p />
  • +
  • Title no longer supports all Text props, only style props are available
  • +
  • MediaQuery component was removed – use CSS modules to apply responsive styles
  • +
  • Highlight component prop highlightColor was renamed to color
  • +
  • Tooltip and Tooltip.Floating components no longer support width prop, use w style prop instead
  • +
  • Stack component spacing prop was renamed to gap
  • +
  • Input and other Input based components icon prop was renamed to leftSection
  • +
  • Loader component variant prop was renamed to type
  • +
  • @mantine/core package no longer depends on Radix UI ScrollArea, ScrollArea component is now a native Mantine component – it reduces bundle size, allows setting CSP for styles and improves performance (all styles are now applied with classes instead of inline <style /> tags)
  • +
  • Overlay opacity prop was renamed to backgroundOpacity to avoid collision with opacity style prop
  • +
  • Badge Styles API selectors were changed, see Badge Styles API documentation for more details
  • +
  • Slider Styles API selectors were changed, see Slider Styles API documentation for more details
  • +
  • Text component no longer supports underline, color, strikethrough, italic, transform, align and weight prop – use style props instead
  • +
  • Portal component innerRef prop was renamed to ref
  • +
  • ScrollArea now supports x and y values in offsetScrollbars prop
  • +
  • TransferList component is no longer available as a part of @mantine/core package, instead you can implement it with Combobox component (example)
  • +
  • Chip component now supports custom check icon
  • +
  • PasswordInput no longer supports visibilityToggleLabel and toggleTabIndex props, use visibilityToggleButtonProps prop instead
  • +
  • Stepper now longer supports breakpoint prop, you can apply responsive styles with Styles API
  • +
  • ColorInput no longer supports dropdownZIndex, transitionProps, withinPortal, portalProps and shadow props, you can now pass these props with popoverProps prop
  • +
  • LoadingOverlay props are now grouped by the component they are passed down to: overlayProps, loaderProps and transitionProps now replace props that were previously passed to LoadingOverlay directly
  • +
  • Dropzone component no longer supports padding prop, use p style prop instead
  • +
  • Dialog component now supports all Paper and Affix props, transitionDuration, transition and other transition related props were replaced with transitionProps
  • +
  • Checkbox, Radio, Chip and Switch components now support rootRef prop which allows using them with Tooltip and other similar components
  • +
    \ No newline at end of file diff --git a/changelog/previous-versions.html b/changelog/previous-versions/index.html similarity index 60% rename from changelog/previous-versions.html rename to changelog/previous-versions/index.html index 693acb8f569..f91e4802ebe 100644 --- a/changelog/previous-versions.html +++ b/changelog/previous-versions/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Previous changelogs

    +

    Previous changelogs

    \ No newline at end of file +
    \ No newline at end of file diff --git a/colors-generator.html b/colors-generator.html deleted file mode 100644 index c8b5e689d3f..00000000000 --- a/colors-generator.html +++ /dev/null @@ -1,44 +0,0 @@ -Colors generator | Mantine

    Mantine colors generator

    0#eef3ff
    1#dce4f5
    2#b9c7e2
    3#94a8d0
    4#748dc1
    5#5f7cb8
    6#5474b4
    7#44639f
    8#39588f
    9#2d4b81
    Variants preview
    FilledLightOutlineSubtle
    Colors array
    [
    -  "#eef3ff",
    -  "#dce4f5",
    -  "#b9c7e2",
    -  "#94a8d0",
    -  "#748dc1",
    -  "#5f7cb8",
    -  "#5474b4",
    -  "#44639f",
    -  "#39588f",
    -  "#2d4b81"
    -]
    Usage with MantineProvider
    import { MantineProvider, createTheme, MantineColorsTuple } from '@mantine/core';
    -
    -const myColor: MantineColorsTuple = [
    -  '#eef3ff',
    -  '#dce4f5',
    -  '#b9c7e2',
    -  '#94a8d0',
    -  '#748dc1',
    -  '#5f7cb8',
    -  '#5474b4',
    -  '#44639f',
    -  '#39588f',
    -  '#2d4b81'
    -];
    -
    -const theme = createTheme({
    -  colors: {
    -    myColor,
    -  }
    -});
    -
    -function Demo() {
    -  return (
    -    <MantineProvider theme={theme}>
    -      <App />
    -    </MantineProvider>
    -  );
    -}
    \ No newline at end of file diff --git a/colors-generator/index.html b/colors-generator/index.html new file mode 100644 index 00000000000..9ceda7e5a17 --- /dev/null +++ b/colors-generator/index.html @@ -0,0 +1,44 @@ +Colors generator | Mantine

    Mantine colors generator

    0#eef3ff
    1#dce4f5
    2#b9c7e2
    3#94a8d0
    4#748dc1
    5#5f7cb8
    6#5474b4
    7#44639f
    8#39588f
    9#2d4b81
    Variants preview
    FilledLightOutlineSubtle
    Colors array
    [
    +  "#eef3ff",
    +  "#dce4f5",
    +  "#b9c7e2",
    +  "#94a8d0",
    +  "#748dc1",
    +  "#5f7cb8",
    +  "#5474b4",
    +  "#44639f",
    +  "#39588f",
    +  "#2d4b81"
    +]
    Usage with MantineProvider
    import { MantineProvider, createTheme, MantineColorsTuple } from '@mantine/core';
    +
    +const myColor: MantineColorsTuple = [
    +  '#eef3ff',
    +  '#dce4f5',
    +  '#b9c7e2',
    +  '#94a8d0',
    +  '#748dc1',
    +  '#5f7cb8',
    +  '#5474b4',
    +  '#44639f',
    +  '#39588f',
    +  '#2d4b81'
    +];
    +
    +const theme = createTheme({
    +  colors: {
    +    myColor,
    +  }
    +});
    +
    +function Demo() {
    +  return (
    +    <MantineProvider theme={theme}>
    +      <App />
    +    </MantineProvider>
    +  );
    +}
    \ No newline at end of file diff --git a/combobox.html b/combobox/index.html similarity index 63% rename from combobox.html rename to combobox/index.html index a69d2811049..28a862ed27a 100644 --- a/combobox.html +++ b/combobox/index.html @@ -3,4 +3,4 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/contribute.html b/contribute/index.html similarity index 75% rename from contribute.html rename to contribute/index.html index dae194738d7..dd829b5db25 100644 --- a/contribute.html +++ b/contribute/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Contributing to Mantine

    +

    Contributing to Mantine

    First of all, thank you for showing interest in contributing to Mantine! All your contributions are extremely valuable to the project!

    Ways to contribute

      @@ -55,4 +55,4 @@
    • docs:docgen – generates components types information with docgen script
    • docs:build – builds docs for production
    • docs:deploy – builds and deploys docs to the GitHub Pages
    • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/core/accordion.html b/core/accordion/index.html similarity index 82% rename from core/accordion.html rename to core/accordion/index.html index 0e13ca4f78a..e09e61adf00 100644 --- a/core/accordion.html +++ b/core/accordion/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Accordion

    Divide content into collapsible sections

    Import

    Usage

    +

    Accordion

    Divide content into collapsible sections

    Import

    Usage

    Data used in Accordion examples:

    const groceries = [
       {
    @@ -288,7 +288,7 @@
     }

    Compose controls

    You can add any additional elements that will be displayed next to Accordion.Control, -for example, you can add ActionIcon or Menu:

    +for example, you can add ActionIcon or Menu:

    import { Accordion, ActionIcon, AccordionControlProps, Center } from '@mantine/core';
     import { IconDots } from '@tabler/icons-react';
     
    @@ -347,7 +347,7 @@
     }

    Unstyled Accordion

    Set unstyled prop on Accordion component to remove all non-essential library styles. -It can be used to style component with Styles API without overriding any styles.

    +It can be used to style component with Styles API without overriding any styles.

    import { Accordion } from '@mantine/core';
     
     function Demo() {
    @@ -357,8 +357,8 @@
         </Accordion>
       );
     }
    -

    Styles API

    Accordion supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    -

    Use Styles API to customize Accordion styles:

    +

    Styles API

    Accordion supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Use Styles API to customize Accordion styles:

    ActionIcon

    Icon button

    Import

    Usage

    +

    ActionIcon

    Icon button

    Import

    Usage

    Color
    Size
    Radius
    import { ActionIcon } from '@mantine/core';
     import { IconAdjustments } from '@tabler/icons-react';
     
    @@ -14,7 +14,7 @@
         </ActionIcon>
       );
     }
    -

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, ActionIcon will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify ActionIcon styles.

    +

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, ActionIcon will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify ActionIcon styles.

    Gradient from
    Gradient to
    Gradient degree
    import { ActionIcon } from '@mantine/core';
     import { IconHeart } from '@tabler/icons-react';
     
    @@ -32,9 +32,9 @@
     }

    Size

    You can use any valid CSS value in size prop, it is used to set width, min-width, min-height and height -properties. Note that size prop does not control child icon size, you need to +properties. Note that size prop does not control child icon size, you need to set it manually on icon component. When size is a number, the value is treated as px units and -converted to rem units.

    +converted to rem units.

    import { ActionIcon, rem } from '@mantine/core';
     import { IconHeart } from '@tabler/icons-react';
     
    @@ -94,7 +94,7 @@
     also when the button is disabled by the parent component (for example, when disabled prop is set on a
     <fieldset /> element which contains ActionIcon).
     
  • &[data-disabled] is used to style the button when it is not actually disabled but should look like -it is (for example, data-disabled should be used if you need to use Tooltip with disabled ActionIcon +it is (for example, data-disabled should be used if you need to use Tooltip with disabled ActionIcon or when ActionIcon is used as a link)
  • .button {
    @@ -106,7 +106,7 @@
     }

    Disabled button with Tooltip

    onMouseLeave event is not triggered when ActionIcon is disabled, so if you need to use -Tooltip with disabled ActionIcon you need to set data-disabled prop on ActionIcon +Tooltip with disabled ActionIcon you need to set data-disabled prop on ActionIcon instead of disabled. Note that it is also required to change onClick event handler to (event) => event.preventDefault() as ActionIcon is not actually disabled and will still trigger onClick event.

    @@ -123,8 +123,8 @@ ); }

    Loading state

    -

    When loading prop is set, ActionIcon will be disabled and Loader with overlay will be rendered -in the center of the button. Loader color depends on ActionIcon variant.

    +

    When loading prop is set, ActionIcon will be disabled and Loader with overlay will be rendered +in the center of the button. Loader color depends on ActionIcon variant.

    import { ActionIcon, Group } from '@mantine/core';
     
     function Demo() {
    @@ -137,16 +137,16 @@
       );
     }

    Loader props

    -

    You can customize Loader with loaderProps prop, it accepts all props that -Loader component has:

    +

    You can customize Loader with loaderProps prop, it accepts all props that +Loader component has:

    import { ActionIcon } from '@mantine/core';
     
     function Demo() {
       return <ActionIcon size="xl" loading loaderProps={{ type: 'dots' }} />;
     }

    Add custom variants

    -

    To add new ActionIcon variants, use data-variant attribute. -Usually new variants are added on theme, this way they are +

    To add new ActionIcon variants, use data-variant attribute. +Usually new variants are added on theme, this way they are available in all ActionIcon components in your application.

    import { Group, ActionIcon, MantineProvider, createTheme } from '@mantine/core';
     import { IconHeart } from '@tabler/icons-react';
    @@ -216,7 +216,7 @@
         </ActionIcon.Group>
       );
     }
    -

    Polymorphic component

    ActionIcon is a polymorphic component – its default root element is button, but it can be changed to any other element or component with component prop:

    import { ActionIcon } from '@mantine/core';
    +

    Polymorphic component

    ActionIcon is a polymorphic component – its default root element is button, but it can be changed to any other element or component with component prop:

    import { ActionIcon } from '@mantine/core';
     
     function Demo() {
       return <ActionIcon component="a" />;
    @@ -228,7 +228,7 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, ActionIconProps does not extend React.ComponentPropsWithoutRef'<'div'>' although button is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { ActionIconProps, ElementProps } from '@mantine/core';
     
     interface MyActionIconProps extends ActionIconProps,
    -  ElementProps<'a', keyof ActionIconProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'a', keyof ActionIconProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    Get element ref

    import { useRef } from 'react';
     import { ActionIcon } from '@mantine/core';
     
    @@ -238,7 +238,7 @@
     }

    Accessibility

    To make ActionIcon accessible for screen readers, you need to either set aria-label or -use VisuallyHidden component:

    +use VisuallyHidden component:

    import { ActionIcon, VisuallyHidden } from '@mantine/core';
     import { IconHeart } from '@tabler/icons-react';
     
    @@ -255,4 +255,4 @@
           </ActionIcon>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/affix.html b/core/affix.html deleted file mode 100644 index 95de5b87adb..00000000000 --- a/core/affix.html +++ /dev/null @@ -1,34 +0,0 @@ -Affix | Mantine

    Affix

    Renders children inside portal at fixed position

    Import

    Usage

    -

    Affix renders a div element with a fixed position inside the Portal component. -Use it to display elements fixed at any position on the screen, for example, scroll to top button:

    -

    Affix is located at the bottom of the screen, scroll to see it

    import { IconArrowUp } from '@tabler/icons-react';
    -import { useWindowScroll } from '@mantine/hooks';
    -import { Affix, Button, Text, Transition, rem } from '@mantine/core';
    -
    -function Demo() {
    -  const [scroll, scrollTo] = useWindowScroll();
    -
    -  return (
    -    <>
    -      <Text ta="center">Affix is located at the bottom of the screen, scroll to see it</Text>
    -      <Affix position={{ bottom: 20, right: 20 }}>
    -        <Transition transition="slide-up" mounted={scroll.y > 0}>
    -          {(transitionStyles) => (
    -            <Button
    -              leftSection={<IconArrowUp style={{ width: rem(16), height: rem(16) }} />}
    -              style={transitionStyles}
    -              onClick={() => scrollTo({ y: 0 })}
    -            >
    -              Scroll to top
    -            </Button>
    -          )}
    -        </Transition>
    -      </Affix>
    -    </>
    -  );
    -}
    \ No newline at end of file diff --git a/core/affix/index.html b/core/affix/index.html new file mode 100644 index 00000000000..65322f7b272 --- /dev/null +++ b/core/affix/index.html @@ -0,0 +1,34 @@ +Affix | Mantine

    Affix

    Renders children inside portal at fixed position

    Import

    Usage

    +

    Affix renders a div element with a fixed position inside the Portal component. +Use it to display elements fixed at any position on the screen, for example, scroll to top button:

    +

    Affix is located at the bottom of the screen, scroll to see it

    import { IconArrowUp } from '@tabler/icons-react';
    +import { useWindowScroll } from '@mantine/hooks';
    +import { Affix, Button, Text, Transition, rem } from '@mantine/core';
    +
    +function Demo() {
    +  const [scroll, scrollTo] = useWindowScroll();
    +
    +  return (
    +    <>
    +      <Text ta="center">Affix is located at the bottom of the screen, scroll to see it</Text>
    +      <Affix position={{ bottom: 20, right: 20 }}>
    +        <Transition transition="slide-up" mounted={scroll.y > 0}>
    +          {(transitionStyles) => (
    +            <Button
    +              leftSection={<IconArrowUp style={{ width: rem(16), height: rem(16) }} />}
    +              style={transitionStyles}
    +              onClick={() => scrollTo({ y: 0 })}
    +            >
    +              Scroll to top
    +            </Button>
    +          )}
    +        </Transition>
    +      </Affix>
    +    </>
    +  );
    +}
    \ No newline at end of file diff --git a/core/alert.html b/core/alert/index.html similarity index 60% rename from core/alert.html rename to core/alert/index.html index 63a5b9882b9..eb7299245d0 100644 --- a/core/alert.html +++ b/core/alert/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Alert

    Attract user attention with important static message

    Import

    Usage

    +

    Alert

    Attract user attention with important static message

    Import

    Usage

    Color
    Radius
    import { Alert } from '@mantine/core';
     import { IconInfoCircle } from '@tabler/icons-react';
     
    @@ -15,7 +15,7 @@
         </Alert>
       );
     }
    -

    Styles API

    Alert supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Alert supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Anchor

    Display link with theme styles

    Import

    Usage

    +

    Anchor

    Display link with theme styles

    Import

    Usage

    import { Anchor } from '@mantine/core';
     
     function Demo() {
    @@ -37,7 +37,7 @@
         </Group>
       );
     }
    -

    You can also configure underline prop for all Anchor components with default props:

    +

    You can also configure underline prop for all Anchor components with default props:

    import { Anchor, createTheme, MantineProvider } from '@mantine/core';
     
     const theme = createTheme({
    @@ -57,7 +57,7 @@
         </MantineProvider>
       );
     }
    -

    Polymorphic component

    Anchor is a polymorphic component – its default root element is a, but it can be changed to any other element or component with component prop:

    import { Anchor } from '@mantine/core';
    +

    Polymorphic component

    Anchor is a polymorphic component – its default root element is a, but it can be changed to any other element or component with component prop:

    import { Anchor } from '@mantine/core';
     
     function Demo() {
       return <Anchor component="button" />;
    @@ -69,11 +69,11 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, AnchorProps does not extend React.ComponentPropsWithoutRef'<'div'>' although a is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { AnchorProps, ElementProps } from '@mantine/core';
     
     interface MyAnchorProps extends AnchorProps,
    -  ElementProps<'button', keyof AnchorProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'button', keyof AnchorProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    Get element ref

    import { useRef } from 'react';
     import { Anchor } from '@mantine/core';
     
     function Demo() {
       const ref = useRef<HTMLAnchorElement>(null);
       return <Anchor ref={ref} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/app-shell.html b/core/app-shell/index.html similarity index 66% rename from core/app-shell.html rename to core/app-shell/index.html index b6707890235..486dc7fa083 100644 --- a/core/app-shell.html +++ b/core/app-shell/index.html @@ -3,15 +3,15 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    AppShell

    Responsive shell for your application with header, navbar, aside and footer

    Import

    Examples

    +

    AppShell

    Responsive shell for your application with header, navbar, aside and footer

    Import

    Examples

    This page includes only documentation. Since all associated AppShell components have fixed position, it is not possible to include demos on this page. You can find 10+ examples on -this page

    +this page

    Usage

    AppShell is a layout component. It can be used to implement a common Header – Navbar – Footer – Aside layout pattern. All AppShell components have position: fixed style – they are not scrolled with the page.

    -

    Basic AppShell example with header and navbar. +

    Basic AppShell example with header and navbar. Navbar is hidden on mobile by default and toggled with the burger button.

    import { useDisclosure } from '@mantine/hooks';
     import { AppShell, Burger } from '@mantine/core';
    @@ -75,16 +75,16 @@
     

    layout prop controls how AppShell.Header/AppShell.Footer and AppShell.Navbar/AppShell.Aside are positioned relative to each other. It accepts alt and default values:

      -
    • altAppShell.Navbar/AppShell.Aside height is equal to viewport height, AppShell.Header/AppShell.Footer width is equal to viewport width - AppShell.Navbar and AppShell.Aside width (example)
    • -
    • defaultAppShell.Navbar/AppShell.Aside height is equal to viewport height - AppShell.Header/AppShell.Footer height, AppShell.Header/AppShell.Footer width is equal to viewport width (example)
    • +
    • altAppShell.Navbar/AppShell.Aside height is equal to viewport height, AppShell.Header/AppShell.Footer width is equal to viewport width - AppShell.Navbar and AppShell.Aside width (example)
    • +
    • defaultAppShell.Navbar/AppShell.Aside height is equal to viewport height - AppShell.Header/AppShell.Footer height, AppShell.Header/AppShell.Footer width is equal to viewport width (example)

    Height configuration

    height property in header and footer configuration objects works the following way:

      -
    • If you pass a number, the value will be converted to rem and used as +
    • If you pass a number, the value will be converted to rem and used as height at all viewport sizes.
    • To change height based on viewport width, use object with breakpoints as keys and height as -values. It works the same way as style props.
    • +values. It works the same way as style props.

    Examples:

    import { AppShell } from '@mantine/core';
    @@ -114,10 +114,10 @@
     

    Width configuration

    width property in navbar and aside configuration objects works the following way:

      -
    • If you pass a number, the value will be converted to rem and used as +
    • If you pass a number, the value will be converted to rem and used as width when the viewport is larger than breakpoint.
    • To change width based on viewport width, use object with breakpoints as keys and width as -values. It works the same way as style props. +values. It works the same way as style props. Note that width is always 100% when the viewport is smaller than breakpoint.

    Examples:

    @@ -149,7 +149,7 @@

    padding prop controls the padding of the AppShell.Main component. It is important to use it instead of setting padding on the AppShell.Main directly because padding of the AppShell.Main is also used to offset AppShell.Header, AppShell.Navbar, AppShell.Aside and AppShell.Footer components.

    -

    padding prop works the same way as style props and +

    padding prop works the same way as style props and accepts numbers, strings and objects with breakpoints as keys and padding as values. You can reference theme.spacing values or use any valid CSS values.

    import { AppShell } from '@mantine/core';
    @@ -170,7 +170,7 @@
     

    Header offset configuration

    header prop has offset property which allows removing AppShell.Header offset from AppShell.Main component. It is useful when you want to collapse AppShell.Header based on the scroll position. For example, you can use -use-headroom hook to collapse header when user scrolls down and expand it when user scrolls up (example).

    +use-headroom hook to collapse header when user scrolls down and expand it when user scrolls up (example).

    import { useHeadroom } from '@mantine/hooks';
     import { AppShell, rem } from '@mantine/core';
     
    @@ -191,7 +191,7 @@
     

    navbar and aside props have collapsed property. The property accepts an object { mobile: boolean; desktop: boolean } which allows to configure collapsed state depending on the viewport width.

    -

    Example with separate collapsed state for mobile and desktop:

    +

    Example with separate collapsed state for mobile and desktop:

    import { useDisclosure } from '@mantine/hooks';
     import { AppShell, Button } from '@mantine/core';
     
    @@ -298,4 +298,4 @@
     
  • AppShell.Aside root element is aside
  • AppShell.Footer root element is footer
  • AppShell.Main root element is main!important: do not use main element inside AppShell.Main component
  • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/core/aspect-ratio.html b/core/aspect-ratio/index.html similarity index 53% rename from core/aspect-ratio.html rename to core/aspect-ratio/index.html index ba4ed2999b8..b73d4e35235 100644 --- a/core/aspect-ratio.html +++ b/core/aspect-ratio/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    AspectRatio

    Maintain responsive consistent width/height ratio

    Import

    Usage

    +

    AspectRatio

    Maintain responsive consistent width/height ratio

    Import

    Usage

    AspectRatio allows maintaining a consistent width/height ratio. It can be used to display images, maps, videos and other media.

    Panda
    import { AspectRatio } from '@mantine/core';
    @@ -47,4 +47,4 @@
           />
         </AspectRatio>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/autocomplete.html b/core/autocomplete/index.html similarity index 75% rename from core/autocomplete.html rename to core/autocomplete/index.html index a0fa909e9f9..6431536b7c1 100644 --- a/core/autocomplete.html +++ b/core/autocomplete/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Autocomplete

    Autocomplete user input with any list of options

    Import

    Made with Combobox

    Autocomplete is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom autocomplete components on the examples page.

    +

    Autocomplete

    Autocomplete user input with any list of options

    Import

    Made with Combobox

    Autocomplete is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom autocomplete components on the examples page.

    Usage

    Autocomplete provides user a list of suggestions based on the input, however user is not limited to suggestions and can type anything.

    @@ -106,10 +106,10 @@ ); }

    Scrollable dropdown

    -

    By default, the options list is wrapped with ScrollArea.Autosize. +

    By default, the options list is wrapped with ScrollArea.Autosize. You can control dropdown max-height with maxDropdownHeight prop if you do not change the default settings.

    If you want to use native scrollbars, set withScrollArea={false}. Note that in this case, -you will need to change dropdown styles with Styles API.

    +you will need to change dropdown styles with Styles API.

    import { Autocomplete } from '@mantine/core';
     
     const data = Array(100)
    @@ -170,13 +170,13 @@
         />
       );
     }
    -

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by Autocomplete, for example withinPortal:

    import { Autocomplete } from '@mantine/core';
    +

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by Autocomplete, for example withinPortal:

    import { Autocomplete } from '@mantine/core';
     
     function Demo() {
       return <Autocomplete comboboxProps={{ withinPortal: false }} data={[]} />;
     }

    Input props

    -

    Autocomplete component supports Input and Input.Wrapper components features and all input element props. Autocomplete documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    Autocomplete component supports Input and Input.Wrapper components features and all input element props. Autocomplete documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { Autocomplete } from '@mantine/core';
     
     function Demo() {
    @@ -241,7 +241,7 @@
         </>
       );
     }
    -

    Styles API

    Autocomplete supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Autocomplete supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Avatar

    Display user profile image, initials or fallback icon

    Import

    Usage

    +

    Avatar

    Display user profile image, initials or fallback icon

    Import

    Usage

    it's me
    MK
    import { Avatar } from '@mantine/core';
     import { IconStar } from '@tabler/icons-react';
     
    @@ -73,7 +73,7 @@
     }

    Note that you must not wrap child Avatar components with any additional elements, but you can use wrap Avatar with components that do not render any HTML elements -in the current tree, for example Tooltip.

    +in the current tree, for example Tooltip.

    import { Avatar } from '@mantine/core';
     
     // Will not work correctly
    @@ -89,7 +89,7 @@
         </Avatar.Group>
       );
     }
    -

    Example of usage with Tooltip:

    +

    Example of usage with Tooltip:

    +2
    import { Avatar, Tooltip } from '@mantine/core';
     
     function Demo() {
    @@ -120,7 +120,7 @@
         </Tooltip.Group>
       );
     }
    -

    Polymorphic component

    Avatar is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Avatar } from '@mantine/core';
    +

    Polymorphic component

    Avatar is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Avatar } from '@mantine/core';
     
     function Demo() {
       return <Avatar component="button" />;
    @@ -132,7 +132,7 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, AvatarProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { AvatarProps, ElementProps } from '@mantine/core';
     
     interface MyAvatarProps extends AvatarProps,
    -  ElementProps<'button', keyof AvatarProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'button', keyof AvatarProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    it's me
    import { Avatar } from '@mantine/core';
     
     function Demo() {
    @@ -146,7 +146,7 @@
         />
       );
     }
    -

    You can combine it with Tooltip or Popover to show additional information on hover

    +

    You can combine it with Tooltip or Popover to show additional information on hover

    +2
    import { Avatar, Tooltip } from '@mantine/core';
     
     function Demo() {
    @@ -200,4 +200,4 @@
     function OkPlaceholder() {
       // Ok, title is set on placeholder
       return <Avatar alt="Rob Johnson">RJ</Avatar>;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/background-image.html b/core/background-image/index.html similarity index 50% rename from core/background-image.html rename to core/background-image/index.html index 8c6716e7d05..33b9676c5ab 100644 --- a/core/background-image.html +++ b/core/background-image/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    BackgroundImage

    Displays image as background

    Import

    Usage

    +

    BackgroundImage

    Displays image as background

    Import

    Usage

    BackgroundImage component can be used to add any content on image. It is useful for hero headers and other similar sections

    Radius
    import { BackgroundImage, Center, Text, Box } from '@mantine/core';
     
     function Demo() {
    @@ -23,11 +23,11 @@
         </Box>
       );
     }
    -

    Polymorphic component

    BackgroundImage is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { BackgroundImage } from '@mantine/core';
    +

    Polymorphic component

    BackgroundImage is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { BackgroundImage } from '@mantine/core';
     
     function Demo() {
       return <BackgroundImage component="button" />;
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, BackgroundImageProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { BackgroundImageProps, ElementProps } from '@mantine/core';
     
     interface MyBackgroundImageProps extends BackgroundImageProps,
    -  ElementProps<'button', keyof BackgroundImageProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file + ElementProps<'button', keyof BackgroundImageProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file diff --git a/core/badge.html b/core/badge/index.html similarity index 68% rename from core/badge.html rename to core/badge/index.html index bac812ca62c..a4058f374d4 100644 --- a/core/badge.html +++ b/core/badge/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Badge

    Display badge, pill or tag

    Import

    Usage

    +

    Badge

    Display badge, pill or tag

    Import

    Usage

    Badge
    Color
    Size
    Radius
    import { Badge } from '@mantine/core';
     
     function Demo() {
       return <Badge color="blue">Badge</Badge>;
     }
    -

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Badge will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Badge styles.

    +

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Badge will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Badge styles.

    Gradient badge
    Gradient from
    Gradient to
    Gradient degree
    import { Badge } from '@mantine/core';
     
     function Demo() {
    @@ -43,7 +43,7 @@
     function Demo() {
       return <Badge fullWidth>Full width badge</Badge>;
     }
    -

    Styles API

    Badge supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Badge supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Blockquote

    Blockquote with optional cite

    Import

    Usage

    +

    Blockquote

    Blockquote with optional cite

    Import

    Usage

    Life is like an npm install – you never know what you are going to get.– Forrest Gump
    Color
    Radius
    Icon size
    import { Blockquote } from '@mantine/core';
     import { IconInfoCircle } from '@tabler/icons-react';
     
    @@ -14,4 +14,4 @@
           Life is like an npm install – you never know what you are going to get.
         </Blockquote>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/box.html b/core/box.html deleted file mode 100644 index b54c5615582..00000000000 --- a/core/box.html +++ /dev/null @@ -1,22 +0,0 @@ -Box | Mantine

    Box

    Base component for all Mantine components

    Import

    Usage

    -

    Box component is used as a base for all other components. Box supports the following features:

    - -

    You can use Box as a base for your own components or as a replacement for HTML elements:

    -
    import { Box } from '@mantine/core';
    -
    -function Demo() {
    -  return (
    -    <Box bg="red.5" my="xl" component="a" href="/">
    -      My component
    -    </Box>
    -  );
    -}
    \ No newline at end of file diff --git a/core/box/index.html b/core/box/index.html new file mode 100644 index 00000000000..b7a89b5d454 --- /dev/null +++ b/core/box/index.html @@ -0,0 +1,22 @@ +Box | Mantine

    Box

    Base component for all Mantine components

    Import

    Usage

    +

    Box component is used as a base for all other components. Box supports the following features:

    + +

    You can use Box as a base for your own components or as a replacement for HTML elements:

    +
    import { Box } from '@mantine/core';
    +
    +function Demo() {
    +  return (
    +    <Box bg="red.5" my="xl" component="a" href="/">
    +      My component
    +    </Box>
    +  );
    +}
    \ No newline at end of file diff --git a/core/breadcrumbs.html b/core/breadcrumbs.html deleted file mode 100644 index b33f3732f25..00000000000 --- a/core/breadcrumbs.html +++ /dev/null @@ -1,28 +0,0 @@ -Breadcrumbs | Mantine

    Breadcrumbs

    Separates list of react nodes with given separator

    Import

    Usage

    -

    Breadcrumbs component accepts any number of React nodes as children -and adds a given separator (defaults to /) between them:

    -
    import { Breadcrumbs, Anchor } from '@mantine/core';
    -
    -const items = [
    -  { title: 'Mantine', href: '#' },
    -  { title: 'Mantine hooks', href: '#' },
    -  { title: 'use-id', href: '#' },
    -].map((item, index) => (
    -  <Anchor href={item.href} key={index}>
    -    {item.title}
    -  </Anchor>
    -));
    -
    -function Demo() {
    -  return (
    -    <>
    -      <Breadcrumbs>{items}</Breadcrumbs>
    -      <Breadcrumbs separator="→" mt="xs">{items}</Breadcrumbs>
    -    </>
    -  );
    -}
    \ No newline at end of file diff --git a/core/breadcrumbs/index.html b/core/breadcrumbs/index.html new file mode 100644 index 00000000000..cbfae71c0ca --- /dev/null +++ b/core/breadcrumbs/index.html @@ -0,0 +1,28 @@ +Breadcrumbs | Mantine

    Breadcrumbs

    Separates list of react nodes with given separator

    Import

    Usage

    +

    Breadcrumbs component accepts any number of React nodes as children +and adds a given separator (defaults to /) between them:

    +
    import { Breadcrumbs, Anchor } from '@mantine/core';
    +
    +const items = [
    +  { title: 'Mantine', href: '#' },
    +  { title: 'Mantine hooks', href: '#' },
    +  { title: 'use-id', href: '#' },
    +].map((item, index) => (
    +  <Anchor href={item.href} key={index}>
    +    {item.title}
    +  </Anchor>
    +));
    +
    +function Demo() {
    +  return (
    +    <>
    +      <Breadcrumbs>{items}</Breadcrumbs>
    +      <Breadcrumbs separator="→" mt="xs">{items}</Breadcrumbs>
    +    </>
    +  );
    +}
    \ No newline at end of file diff --git a/core/burger.html b/core/burger/index.html similarity index 50% rename from core/burger.html rename to core/burger/index.html index 1faccc957aa..2250464eb78 100644 --- a/core/burger.html +++ b/core/burger/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Burger

    Open/close navigation button

    Import

    Usage

    +

    Burger

    Open/close navigation button

    Import

    Usage

    Burger component renders open/close menu button. Set opened and onClick props to control Burger state. If opened prop is set, cross will be rendered, otherwise – burger.

    @@ -23,7 +23,7 @@ }

    Accessibility

    To make Burger accessible for screen readers, you need to either set aria-label or -use VisuallyHidden component:

    +use VisuallyHidden component:

    import { Burger, VisuallyHidden } from '@mantine/core';
     
     function Demo() {
    @@ -36,4 +36,4 @@
           </Burger>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/button.html b/core/button/index.html similarity index 81% rename from core/button.html rename to core/button/index.html index 892dc94f4cf..ec0c2757aa6 100644 --- a/core/button.html +++ b/core/button/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Button

    Button component to render button or link

    Import

    Usage

    +

    Button

    Button component to render button or link

    Import

    Usage

    Color
    Size
    Radius
    import { Button } from '@mantine/core';
     
     function Demo() {
    @@ -19,7 +19,7 @@
     

    Left and right sections

    leftSection and rightSection allow adding icons or any other element to the left and right side of the button. When a section is added, padding on the corresponding side is reduced.

    -

    Note that leftSection and rightSection are flipped in RTL mode +

    Note that leftSection and rightSection are flipped in RTL mode (leftSection is displayed on the right and rightSection is displayed on the left).

    import { Group, Button } from '@mantine/core';
     import { IconPhoto, IconDownload, IconArrowRight } from '@tabler/icons-react';
    @@ -93,7 +93,7 @@
         </Group>
       );
     }
    -

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Button will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Button styles.

    +

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Button will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Button styles.

    Gradient from
    Gradient to
    Gradient degree
    import { Button } from '@mantine/core';
     
     function Demo() {
    @@ -141,7 +141,7 @@
     also when the button is disabled by the parent component (for example, when disabled prop is set on a
     <fieldset /> element which contains Button).
     
  • &[data-disabled] is used to style the button when it is not actually disabled but should look like -it is (for example, data-disabled should be used if you need to use Tooltip with disabled Button +it is (for example, data-disabled should be used if you need to use Tooltip with disabled Button or when Button is used as a link)
  • .button {
    @@ -153,7 +153,7 @@
     }

    Disabled button with Tooltip

    onMouseLeave event is not triggered when Button is disabled, so if you need to use -Tooltip with disabled Button you need to set data-disabled prop on Button +Tooltip with disabled Button you need to set data-disabled prop on Button instead of disabled. Note that it is also required to change onClick event handler to (event) => event.preventDefault() as Button is not actually disabled and will still trigger onClick event.

    @@ -169,8 +169,8 @@ ); }

    Loading state

    -

    When loading prop is set, Button will be disabled and Loader with overlay will be rendered -in the center of the button. Loader color depends on Button variant.

    +

    When loading prop is set, Button will be disabled and Loader with overlay will be rendered +in the center of the button. Loader color depends on Button variant.

    import { Button, Group } from '@mantine/core';
     
     function Demo() {
    @@ -187,8 +187,8 @@
       );
     }

    Loader props

    -

    You can customize Loader with loaderProps prop, it accepts all props that -Loader component has:

    +

    You can customize Loader with loaderProps prop, it accepts all props that +Loader component has:

    import { Button } from '@mantine/core';
     
     function Demo() {
    @@ -198,7 +198,7 @@
         </Button>
       );
     }
    -

    Styles API

    Button supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Button supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Card

    Card with sections

    Import

    Usage

    -

    Card is a wrapper around Paper component with some additional styles and Card.Section -component that allows to split card into sections. If you do not need sections, you use Paper component instead.

    +

    Card

    Card with sections

    Import

    Usage

    +

    Card is a wrapper around Paper component with some additional styles and Card.Section +component that allows to split card into sections. If you do not need sections, you use Paper component instead.

    Norway

    Norway Fjord Adventures

    On Sale

    With Fjord Tours you can explore more of the magical fjord landscapes with tours and activities on and around the fjords of Norway

    import { Card, Image, Text, Badge, Button, Group } from '@mantine/core';
     
     function Demo() {
    @@ -38,7 +38,7 @@
       );
     }

    Polymorphic component

    -

    Card is a polymorphic component component, you can change its root element:

    +

    Card is a polymorphic component component, you can change its root element:

    import { Card, Image, Text } from '@mantine/core';
     
     function Demo() {
    @@ -114,7 +114,7 @@
       );
     }

    Polymorphic Card.Section

    -

    Card.Section is a polymorphic component component, you can change its root element:

    +

    Card.Section is a polymorphic component component, you can change its root element:

    Norway

    Norway Fjord Adventures

    On Sale

    With Fjord Tours you can explore more of the magical fjord landscapes with tours and activities on and around the fjords of Norway

    import { Card, Image, Text, Badge, Button, Group } from '@mantine/core';
     
     function Demo() {
    @@ -211,4 +211,4 @@
           </Card.Section>
         </Card>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/center.html b/core/center/index.html similarity index 52% rename from core/center.html rename to core/center/index.html index 360570ff59c..3e7d1a4b7a0 100644 --- a/core/center.html +++ b/core/center/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Center

    Centers content vertically and horizontally

    Import

    Usage

    +

    Center

    Centers content vertically and horizontally

    Import

    Usage

    All elements inside Center are centered
    import { Center, Box } from '@mantine/core';
     
     function Demo() {
    @@ -29,11 +29,11 @@
         </Anchor>
       );
     }
    -

    Polymorphic component

    Center is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Center } from '@mantine/core';
    +

    Polymorphic component

    Center is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Center } from '@mantine/core';
     
     function Demo() {
       return <Center component="button" />;
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, CenterProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { CenterProps, ElementProps } from '@mantine/core';
     
     interface MyCenterProps extends CenterProps,
    -  ElementProps<'button', keyof CenterProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file + ElementProps<'button', keyof CenterProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file diff --git a/core/checkbox.html b/core/checkbox/index.html similarity index 72% rename from core/checkbox.html rename to core/checkbox/index.html index 54184bc7b82..2179669696d 100644 --- a/core/checkbox.html +++ b/core/checkbox/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Checkbox

    Capture boolean input from user

    Import

    Usage

    +

    Checkbox

    Capture boolean input from user

    Import

    Usage

    Label position
    Color
    Radius
    Size
    import { Checkbox } from '@mantine/core';
     
     function Demo() {
    @@ -175,4 +175,4 @@
     // Ok, input is labelled by label element
     function GoodLabel() {
       return <Checkbox label="My checkbox" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/chip.html b/core/chip/index.html similarity index 65% rename from core/chip.html rename to core/chip/index.html index 8d76bf3bb79..7ace938dd35 100644 --- a/core/chip.html +++ b/core/chip/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Chip

    Pick one or multiple values with inline controls

    Import

    Usage

    +

    Chip

    Pick one or multiple values with inline controls

    Import

    Usage

    Color
    Variant
    Size
    Radius
    import { Chip } from '@mantine/core';
     
     function Demo() {
    @@ -99,4 +99,4 @@
     }

    Accessibility

    Chip and Chip.Group components are accessible by default – they are built with native radio/checkbox inputs, -all keyboard events work the same as with native controls.

    \ No newline at end of file +all keyboard events work the same as with native controls.

    \ No newline at end of file diff --git a/core/close-button.html b/core/close-button.html deleted file mode 100644 index a21bd1299da..00000000000 --- a/core/close-button.html +++ /dev/null @@ -1,28 +0,0 @@ -CloseButton | Mantine

    CloseButton

    ActionIcon with close icon

    Import

    Usage

    -

    CloseButton renders a button with X icon inside. It is used in other Mantine components like Drawer or Modal.

    -
    Size
    Variant
    import { CloseButton } from '@mantine/core';
    -
    -function Demo() {
    -  return <CloseButton />;
    -}
    -

    Accessibility

    -

    To make CloseButton accessible for screen readers, you need to either set aria-label or -use VisuallyHidden component:

    -
    import { CloseButton, VisuallyHidden } from '@mantine/core';
    -
    -function Demo() {
    -  return (
    -    <>
    -      <CloseButton aria-label="Close modal" />
    -
    -      <CloseButton>
    -        <VisuallyHidden>Close modal</VisuallyHidden>
    -      </CloseButton>
    -    </>
    -  );
    -}
    \ No newline at end of file diff --git a/core/close-button/index.html b/core/close-button/index.html new file mode 100644 index 00000000000..4b86ca5fba4 --- /dev/null +++ b/core/close-button/index.html @@ -0,0 +1,28 @@ +CloseButton | Mantine

    CloseButton

    ActionIcon with close icon

    Import

    Usage

    +

    CloseButton renders a button with X icon inside. It is used in other Mantine components like Drawer or Modal.

    +
    Size
    Variant
    import { CloseButton } from '@mantine/core';
    +
    +function Demo() {
    +  return <CloseButton />;
    +}
    +

    Accessibility

    +

    To make CloseButton accessible for screen readers, you need to either set aria-label or +use VisuallyHidden component:

    +
    import { CloseButton, VisuallyHidden } from '@mantine/core';
    +
    +function Demo() {
    +  return (
    +    <>
    +      <CloseButton aria-label="Close modal" />
    +
    +      <CloseButton>
    +        <VisuallyHidden>Close modal</VisuallyHidden>
    +      </CloseButton>
    +    </>
    +  );
    +}
    \ No newline at end of file diff --git a/core/code.html b/core/code/index.html similarity index 52% rename from core/code.html rename to core/code/index.html index e9559a60cee..884aa602b76 100644 --- a/core/code.html +++ b/core/code/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Code

    Inline and block code

    Import

    Usage

    +

    Code

    Inline and block code

    Import

    Usage

    By default, Code component renders inline code html element:

    React.createElement()
    import { Code } from '@mantine/core';
     
    @@ -31,7 +31,7 @@
     }

    Custom color

    By default, code color is gray, you can change it to any valid CSS color or to one -of the theme.colors:

    +of the theme.colors:

    React.createElement()React.createElement()
    import { Code, Group } from '@mantine/core';
     
     function Demo() {
    @@ -43,4 +43,4 @@
           <Code color="var(--mantine-color-blue-light)">React.createElement()</Code>
         </Group>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/collapse.html b/core/collapse/index.html similarity index 54% rename from core/collapse.html rename to core/collapse/index.html index c5e6274c34f..8b0b341e1b4 100644 --- a/core/collapse.html +++ b/core/collapse/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Collapse

    Animate presence with slide down/up transition

    Import

    Usage

    +

    Collapse

    Animate presence with slide down/up transition

    Import

    Usage

    import { Button, Group, Text, Collapse, Box } from '@mantine/core';
     import { useDisclosure } from '@mantine/hooks';
     
    @@ -48,4 +48,4 @@
       );
     }

    Nested Collapse components

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/core/color-input.html b/core/color-input/index.html similarity index 74% rename from core/color-input.html rename to core/color-input/index.html index 0a391dac0b6..022dbf805b7 100644 --- a/core/color-input.html +++ b/core/color-input/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    ColorInput

    Capture color from user

    Import

    Usage

    -

    ColorInput component supports Input and Input.Wrapper components features and all input element props. ColorInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    ColorInput

    Capture color from user

    Import

    Usage

    +

    ColorInput component supports Input and Input.Wrapper components features and all input element props. ColorInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { ColorInput } from '@mantine/core';
     
     function Demo() {
    @@ -52,7 +52,7 @@
       );
     }

    By default, there will be 10 swatches per row, you can change this with swatchesPerRow prop, -like in ColorPicker component:

    +like in ColorPicker component:

    Swatches per row
    import { ColorPicker } from '@mantine/core';
     
     function Demo() {
    @@ -104,7 +104,7 @@
     function Demo() {
       return <ColorInput disabled label="Disabled input" placeholder="Disabled input" />;
     }
    -

    Styles API

    ColorInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    ColorInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    ColorPicker

    Pick colors

    Import

    Usage

    +

    ColorPicker

    Pick colors

    Import

    Usage

    rgba(47, 119, 150, 0.7)

    import { useState } from 'react';
     import { ColorPicker, Text, Stack } from '@mantine/core';
     
    @@ -87,7 +87,7 @@
     function Demo() {
       return <ColorPicker fullWidth size="lg" format="rgba" />;
     }
    -

    Styles API

    ColorPicker supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    ColorPicker supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    ColorSwatch

    Displays color

    Import

    Usage

    +

    ColorSwatch

    Displays color

    Import

    Usage

    import { ColorSwatch, Group } from '@mantine/core';
     
     function Demo() {
    @@ -23,7 +23,7 @@
     function Demo() {
       return <ColorSwatch color="rgba(255, 255, 255, 0.7)" />;
     }
    -

    Polymorphic component

    ColorSwatch is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { ColorSwatch } from '@mantine/core';
    +

    Polymorphic component

    ColorSwatch is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { ColorSwatch } from '@mantine/core';
     
     function Demo() {
       return <ColorSwatch component="a" />;
    @@ -35,7 +35,7 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, ColorSwatchProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { ColorSwatchProps, ElementProps } from '@mantine/core';
     
     interface MyColorSwatchProps extends ColorSwatchProps,
    -  ElementProps<'a', keyof ColorSwatchProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'a', keyof ColorSwatchProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    import { useState } from 'react';
     import { ColorSwatch, CheckIcon, rem } from '@mantine/core';
     
    @@ -52,4 +52,4 @@
           {checked && <CheckIcon style={{ width: rem(12), height: rem(12) }} />}
         </ColorSwatch>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/combobox.html b/core/combobox/index.html similarity index 82% rename from core/combobox.html rename to core/combobox/index.html index 49830ee83e1..2c9a84723cb 100644 --- a/core/combobox.html +++ b/core/combobox/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Combobox

    Create custom select, autocomplete or multiselect inputs

    Import

    Usage

    +

    Combobox

    Create custom select, autocomplete or multiselect inputs

    Import

    Usage

    Combobox provides a set of components and hooks to custom select, multiselect or autocomplete components. The component is very flexible – you have full control of the rendering and logic.

    import { useState } from 'react';
    @@ -51,7 +51,7 @@
     }

    Examples

    This page contains only a small set of examples, as the full code of the demos is long. -You can find all 50+ examples on a separate page.

    +You can find all 50+ examples on a separate page.

    useCombobox hook

    useCombobox hook provides combobox store. The store contains the current state of the component and handlers to update it. Created store must be passed to the store prop of Combobox:

    @@ -199,9 +199,9 @@ and adds keyboard event listeners to it.

    Combobox.Target requires a single child element or component. The child component must accept ref and ...others props. You can use any Mantine component as a target without -any additional configuration, for example, Button, TextInput -or InputBase.

    -

    Example of using Combobox.Target with TextInput component:

    +any additional configuration, for example, Button, TextInput +or InputBase.

    +

    Example of using Combobox.Target with TextInput component:

    import { useState } from 'react';
     import { Combobox, TextInput, useCombobox } from '@mantine/core';
     
    @@ -253,7 +253,7 @@
         </Combobox>
       );
     }
    -

    Example of using Combobox.Target with Button component:

    +

    Example of using Combobox.Target with Button component:

    Selected item: Nothing selected
    import { useState } from 'react';
     import { Button, Combobox, useCombobox, Text, Box } from '@mantine/core';
     
    @@ -310,7 +310,7 @@
     Combobox.DropdownTarget to position the dropdown relative to the target.

    You can have as many Combobox.EventsTarget as you need, but only one Combobox.DropdownTarget per Combobox.

    -

    Example of using Combobox.EventsTarget and Combobox.DropdownTarget with PillsInput component +

    Example of using Combobox.EventsTarget and Combobox.DropdownTarget with PillsInput component to create a searchable multiselect component:

    import { useState } from 'react';
     import { PillsInput, Pill, Combobox, CheckIcon, Group, useCombobox } from '@mantine/core';
    @@ -590,7 +590,7 @@
     

    Active option

    Set active prop on Combobox.Option component to mark it as active. By default, an active option does not have any styles, you can use data-combobox-active -data attribute to style it.

    +data attribute to style it.

    combobox.selectActiveOption function selects active option. Usually, it is called when the dropdown is opened:

    import { useState } from 'react';
    @@ -700,7 +700,7 @@
     }

    Scrollable list

    Set max-height style on either Combobox.Dropdown or Combobox.Options to make the -options list scrollable. You can use mah style prop to set +options list scrollable. You can use mah style prop to set max-height.

    import { useState } from 'react';
     import { Input, InputBase, Combobox, useCombobox } from '@mantine/core';
    @@ -778,7 +778,7 @@
       );
     }

    Scrollable list with ScrollArea

    -

    You can also use ScrollArea or ScrollArea.Autosize components +

    You can also use ScrollArea or ScrollArea.Autosize components instead of native scrollbars:

    import { useState } from 'react';
     import { Input, InputBase, Combobox, useCombobox, ScrollArea } from '@mantine/core';
    @@ -975,11 +975,11 @@
         </Combobox>
       );
     }
    -

    Styles API

    Combobox supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Combobox supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Component Styles API

    Hover over selectors to highlight corresponding elements

    /*
      * Hover over selectors to apply outline styles
      *
    - */
    \ No newline at end of file + */
    \ No newline at end of file diff --git a/core/container.html b/core/container/index.html similarity index 58% rename from core/container.html rename to core/container/index.html index c194ce38469..4548ff97adc 100644 --- a/core/container.html +++ b/core/container/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Container

    Center content with padding and max-width

    Import

    Usage

    +

    Container

    Center content with padding and max-width

    Import

    Usage

    Container centers content and limits its max-width to the value specified in size prop. Note that the size prop does not make max-width responsive, for example, when it set to lg it will always be lg regardless of screen size.

    @@ -43,8 +43,8 @@ ); }

    Customize sizes

    -

    You can customize existing Container sizes and add new ones with CSS variables -on theme:

    +

    You can customize existing Container sizes and add new ones with CSS variables +on theme:

    Container with custom size
    import { Container, MantineProvider, createTheme, rem } from '@mantine/core';
     
     const CONTAINER_SIZES: Record<string, string> = {
    @@ -83,7 +83,7 @@
       );
     }

    Responsive max-width

    -

    To make Container max-width responsive, use Styles API to set +

    To make Container max-width responsive, use Styles API to set classNames. For example, you can add responsive size that will make Container max-width different depending on screen size:

    Container with responsive size
    import cx from 'clsx';
    @@ -108,4 +108,4 @@
           </Container>
         </MantineProvider>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/copy-button.html b/core/copy-button/index.html similarity index 52% rename from core/copy-button.html rename to core/copy-button/index.html index 39425db2a33..dd260a02b8e 100644 --- a/core/copy-button.html +++ b/core/copy-button/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    CopyButton

    Copies given text to clipboard

    Import

    Usage

    -

    CopyButton is based on use-clipboard hook. +

    CopyButton

    Copies given text to clipboard

    Import

    Usage

    +

    CopyButton is based on use-clipboard hook. Its children is a function that receives an object with the following properties:

    • copied – boolean value that indicates that a given value was recently copied to the clipboard, it resets after a given timeout (defaults to 500ms)
    • @@ -47,4 +47,4 @@ )} </CopyButton> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/dialog.html b/core/dialog.html deleted file mode 100644 index d44ed8a14e4..00000000000 --- a/core/dialog.html +++ /dev/null @@ -1,51 +0,0 @@ -Dialog | Mantine

    Dialog

    Display a fixed overlay dialog at any side of the screen

    Import

    Usage

    -

    Dialog is a simplified version of Modal component. -It does not include most of accessibility and usability Modal features:

    -
      -
    • Focus trap is not available
    • -
    • Does not close on click outside
    • -
    • Does not have overlay
    • -
    -

    Use Dialog to attract attention with not important information or action, -for example, you can create an email subscription form:

    -
    import { useDisclosure } from '@mantine/hooks';
    -import { Dialog, Group, Button, TextInput, Text } from '@mantine/core';
    -
    -function Demo() {
    -  const [opened, { toggle, close }] = useDisclosure(false);
    -
    -  return (
    -    <>
    -      <Group justify="center">
    -        <Button onClick={toggle}>Toggle dialog</Button>
    -      </Group>
    -
    -      <Dialog opened={opened} withCloseButton onClose={close} size="lg" radius="md">
    -        <Text size="sm" mb="xs" fw={500}>
    -          Subscribe to email newsletter
    -        </Text>
    -
    -        <Group align="flex-end">
    -          <TextInput placeholder="hello@gluesticker.com" style={{ flex: 1 }} />
    -          <Button onClick={close}>Subscribe</Button>
    -        </Group>
    -      </Dialog>
    -    </>
    -  );
    -}
    -

    Change position

    -

    Dialog is rendered in Portal and has fixed position, set position prop to control dialog's position:

    -
    // Dialog in top left corner
    -<Dialog position={{ top: 20, left: 20 }} />
    -
    -// Dialog in bottom left corner
    -<Dialog position={{ bottom: 20, left: 20 }} />
    -

    Accessibility

    -

    Dialog is not accessible and most likely will not be announced by screen reader, -make sure you do not put any important information. In most cases it would be better -to select Modal, Drawer or Notifications.

    \ No newline at end of file diff --git a/core/dialog/index.html b/core/dialog/index.html new file mode 100644 index 00000000000..2e38b182318 --- /dev/null +++ b/core/dialog/index.html @@ -0,0 +1,51 @@ +Dialog | Mantine

    Dialog

    Display a fixed overlay dialog at any side of the screen

    Import

    Usage

    +

    Dialog is a simplified version of Modal component. +It does not include most of accessibility and usability Modal features:

    +
      +
    • Focus trap is not available
    • +
    • Does not close on click outside
    • +
    • Does not have overlay
    • +
    +

    Use Dialog to attract attention with not important information or action, +for example, you can create an email subscription form:

    +
    import { useDisclosure } from '@mantine/hooks';
    +import { Dialog, Group, Button, TextInput, Text } from '@mantine/core';
    +
    +function Demo() {
    +  const [opened, { toggle, close }] = useDisclosure(false);
    +
    +  return (
    +    <>
    +      <Group justify="center">
    +        <Button onClick={toggle}>Toggle dialog</Button>
    +      </Group>
    +
    +      <Dialog opened={opened} withCloseButton onClose={close} size="lg" radius="md">
    +        <Text size="sm" mb="xs" fw={500}>
    +          Subscribe to email newsletter
    +        </Text>
    +
    +        <Group align="flex-end">
    +          <TextInput placeholder="hello@gluesticker.com" style={{ flex: 1 }} />
    +          <Button onClick={close}>Subscribe</Button>
    +        </Group>
    +      </Dialog>
    +    </>
    +  );
    +}
    +

    Change position

    +

    Dialog is rendered in Portal and has fixed position, set position prop to control dialog's position:

    +
    // Dialog in top left corner
    +<Dialog position={{ top: 20, left: 20 }} />
    +
    +// Dialog in bottom left corner
    +<Dialog position={{ bottom: 20, left: 20 }} />
    +

    Accessibility

    +

    Dialog is not accessible and most likely will not be announced by screen reader, +make sure you do not put any important information. In most cases it would be better +to select Modal, Drawer or Notifications.

    \ No newline at end of file diff --git a/core/divider.html b/core/divider/index.html similarity index 59% rename from core/divider.html rename to core/divider/index.html index 78d9e2f7f4e..98ea65b6d93 100644 --- a/core/divider.html +++ b/core/divider/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Divider

    Horizontal line with optional label or vertical divider

    Import

    Usage

    +

    Divider

    Horizontal line with optional label or vertical divider

    Import

    Usage

    import { Divider } from '@mantine/core';
     
     function Demo() {
    @@ -81,4 +81,4 @@
           <Text>Label</Text>
         </Group>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/drawer.html b/core/drawer/index.html similarity index 70% rename from core/drawer.html rename to core/drawer/index.html index 5b72e70c6a4..f1a91c86c5c 100644 --- a/core/drawer.html +++ b/core/drawer/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Drawer

    Display overlay area at any side of the screen

    Import

    Usage

    +

    Drawer

    Display overlay area at any side of the screen

    Import

    Usage

    import { useDisclosure } from '@mantine/hooks';
     import { Drawer, Button } from '@mantine/core';
     
    @@ -25,7 +25,7 @@
     for example <Drawer position="top" />.

    Customize overlay

    -

    Drawer uses Overlay component, you can set any props that Overlay +

    Drawer uses Overlay component, you can set any props that Overlay supports with overlayProps:

    import { useDisclosure } from '@mantine/hooks';
     import { Drawer, Button } from '@mantine/core';
    @@ -127,8 +127,8 @@
       );
     }

    Change transition

    -

    Drawer is built with Transition component. Use transitionProps -prop to customize any Transition properties:

    +

    Drawer is built with Transition component. Use transitionProps +prop to customize any Transition properties:

    import { useDisclosure } from '@mantine/hooks';
     import { Drawer, Button } from '@mantine/core';
     
    @@ -151,7 +151,7 @@
       );
     }

    Initial focus

    -

    Drawer uses FocusTrap to trap focus. Add data-autofocus +

    Drawer uses FocusTrap to trap focus. Add data-autofocus attribute to the element that should receive initial focus.

    import { useDisclosure } from '@mantine/hooks';
     import { Drawer, Button, TextInput } from '@mantine/core';
    @@ -189,7 +189,7 @@
     

    You can use the following compound components to have full control over the Drawer rendering:

    • Drawer.Root – context provider
    • -
    • Drawer.Overlay – render Overlay
    • +
    • Drawer.Overlay – render Overlay
    • Drawer.Content – main drawer element, should include all drawer content
    • Drawer.Header – sticky header, usually contains Drawer.Title and Drawer.CloseButton
    • Drawer.Titleh2 element, aria-labelledby of Drawer.Content is pointing to this element, usually is rendered inside Drawer.Header
    • @@ -242,4 +242,4 @@ function Demo() { return <Drawer closeButtonProps={{ 'aria-label': 'Close modal' }} opened onClose={() => {}} />; -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/fieldset.html b/core/fieldset/index.html similarity index 52% rename from core/fieldset.html rename to core/fieldset/index.html index b14b90acd7b..db1e1c44d9e 100644 --- a/core/fieldset.html +++ b/core/fieldset/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Fieldset

    Group related elements in a form

    Import

    Usage

    +

    Fieldset

    Group related elements in a form

    Import

    Usage

    Personal information
    Variant
    Radius
    import { Fieldset } from '@mantine/core';
     
     function Demo() {
    @@ -29,4 +29,4 @@
           </Group>
         </Fieldset>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/file-button.html b/core/file-button/index.html similarity index 56% rename from core/file-button.html rename to core/file-button/index.html index 0e022b47d29..a1daed512bf 100644 --- a/core/file-button.html +++ b/core/file-button/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    FileButton

    Open file picker with a button click

    Import

    Usage

    +

    FileButton

    Open file picker with a button click

    Import

    Usage

    import { useState } from 'react';
     import { FileButton, Button, Group, Text } from '@mantine/core';
     
    @@ -87,4 +87,4 @@
           )}
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/file-input.html b/core/file-input/index.html similarity index 69% rename from core/file-input.html rename to core/file-input/index.html index acafec99ce0..b84b8e665d2 100644 --- a/core/file-input.html +++ b/core/file-input/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    FileInput

    Capture files from user

    Import

    Usage

    -

    FileInput component supports Input and Input.Wrapper components features and all input element props. FileInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    FileInput

    Capture files from user

    Import

    Usage

    +

    FileInput component supports Input and Input.Wrapper components features and all input element props. FileInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { FileInput } from '@mantine/core';
     
     function Demo() {
    @@ -102,7 +102,7 @@
     function Demo() {
       return <FileInput disabled label="Disabled input" placeholder="Disabled input" />;
     }
    -

    Styles API

    FileInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    FileInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Flex

    Compose elements in a flex container

    Import

    Usage

    +

    Flex

    Compose elements in a flex container

    Import

    Usage

    Gap
    import { Flex, Button } from '@mantine/core';
     function Demo() {
       return (
    @@ -25,7 +25,7 @@
     

    Supported props

    PropCSS PropertyTheme key
    gap
    gap
    theme.spacing
    rowGap
    rowGap
    theme.spacing
    columnGap
    columnGap
    theme.spacing
    align
    alignItems
    justify
    justifyContent
    wrap
    flexWrap
    direction
    flexDirection

    Responsive props

    -

    Flex component props can have responsive values the same way as other style props:

    +

    Flex component props can have responsive values the same way as other style props:

    import { Flex, Button } from '@mantine/core';
     
     function Demo() {
    @@ -40,4 +40,4 @@
           <Button>Button 3</Button>
         </Flex>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/focus-trap.html b/core/focus-trap/index.html similarity index 54% rename from core/focus-trap.html rename to core/focus-trap/index.html index fdc6deebe27..b000ac0eaa4 100644 --- a/core/focus-trap.html +++ b/core/focus-trap/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    FocusTrap

    Trap focus at child node

    Import

    Usage

    -

    FocusTrap is a component implementation of use-focus-trap hook, -it is used in all Mantine components that require focus trap (Modal, DatePicker, Popover, etc.).

    +

    FocusTrap

    Trap focus at child node

    Import

    Usage

    +

    FocusTrap is a component implementation of use-focus-trap hook, +it is used in all Mantine components that require focus trap (Modal, DatePicker, Popover, etc.).

    import { useDisclosure } from '@mantine/hooks';
     import { FocusTrap, TextInput, Button, Box } from '@mantine/core';
     
    @@ -55,4 +55,4 @@
     
  • If there are no elements with data-autofocus attribute, then the first element that supports keyboard interaction is focused
  • If the target element does not have focusable elements or does not support ref, then the focus trap will not work
  • Trap stops working when element outside of the FocusTrap child is focused
  • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/core/grid.html b/core/grid/index.html similarity index 73% rename from core/grid.html rename to core/grid/index.html index a7ca12bdb3a..322f48bdb84 100644 --- a/core/grid.html +++ b/core/grid/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Grid

    Responsive grid system

    Import

    Usage

    +

    Grid

    Responsive grid system

    Import

    Usage

    1
    2
    3
    import { Grid } from '@mantine/core';
     
     function Demo() {
    @@ -27,7 +27,7 @@
     
     

    span prop also supports object syntax to change column width based on viewport width, it accepts xs, sm, md, lg and xl keys and values from 1 to 12. The syntax -is the same as in style props.

    +is the same as in style props.

    In the following example span={{ base: 12, md: 6, lg: 3 }}:

    • base – 12 / 12 = 100% of row width when viewport width is less than md breakpoint
    • @@ -48,7 +48,7 @@ }

    Gutter

    Set gutter prop to control spacing between columns. The prop works the same -way as style props – you can reference theme.spacing values +way as style props – you can reference theme.spacing values with xs, sm, md, lg and xl strings and use object syntax to change gutter based on viewport width:

    1
    2
    3
    import { Grid } from '@mantine/core';
    @@ -173,4 +173,4 @@
           <Grid.Col span={6}>3</Grid.Col>
         </Grid>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/group.html b/core/group/index.html similarity index 58% rename from core/group.html rename to core/group/index.html index 8e9289ba4dc..a28b37403db 100644 --- a/core/group.html +++ b/core/group/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Group

    Compose elements and components in a horizontal flex container

    Import

    Usage

    -

    Group is a horizontal flex container. If you need a vertical flex container, use Stack -component instead. If you need to have full control over flex container properties, use Flex component.

    +

    Group

    Compose elements and components in a horizontal flex container

    Import

    Usage

    +

    Group is a horizontal flex container. If you need a vertical flex container, use Stack +component instead. If you need to have full control over flex container properties, use Flex component.

    Gap
    import { Group, Button } from '@mantine/core';
     
     function Demo() {
    @@ -72,4 +72,4 @@
         </Group>
       );
     }
    -

    Browser support

    Group uses flexbox gap to add spacing between children. In older browsers, Group children may not have spacing. You can install PostCSS flex-gap-polyfill to add support for older browsers.

    \ No newline at end of file +

    Browser support

    Group uses flexbox gap to add spacing between children. In older browsers, Group children may not have spacing. You can install PostCSS flex-gap-polyfill to add support for older browsers.

    \ No newline at end of file diff --git a/core/highlight.html b/core/highlight/index.html similarity index 59% rename from core/highlight.html rename to core/highlight/index.html index dc638a64cd5..08d80bb3e62 100644 --- a/core/highlight.html +++ b/core/highlight/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Highlight

    Highlight given part of a string with mark

    Import

    Usage

    +

    Highlight

    Highlight given part of a string with mark

    Import

    Usage

    Use Highlight component to highlight a substring in a given string with a mark tag.

    Pass the main string as children to Highlight component and string part that should be highlighted to highlight prop. If the main string does not include highlight part, it will be ignored. @@ -25,7 +25,7 @@ return <Highlight highlight={['this', 'that']}>Highlight this and also that</Highlight>; }

    Change highlight styles

    -

    Default Mark styles can be overwritten with highlightStyles prop, it accepts either a function with a subscription to theme +

    Default Mark styles can be overwritten with highlightStyles prop, it accepts either a function with a subscription to theme or an object with styles:

    You can change styles of highlighted part if you do not like default styles

    import { Highlight } from '@mantine/core';
     
    @@ -47,7 +47,7 @@
       );
     }

    Text props

    -

    Highlight is based on Text component, all its props are available:

    +

    Highlight is based on Text component, all its props are available:

    import { Highlight } from '@mantine/core';
     
     function Demo() {
    @@ -63,4 +63,4 @@
           Mantine website
         </Highlight>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/hover-card.html b/core/hover-card/index.html similarity index 61% rename from core/hover-card.html rename to core/hover-card/index.html index aa3f3386094..548fa1b8c12 100644 --- a/core/hover-card.html +++ b/core/hover-card/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    HoverCard

    Display popover section when target element is hovered

    Import

    Usage

    +

    HoverCard

    Display popover section when target element is hovered

    Import

    Usage

    import { HoverCard, Button, Text, Group } from '@mantine/core';
     
     function Demo() {
    @@ -177,4 +177,4 @@
     }

    Accessibility

    HoverCard is ignored by screen readers and cannot be activated with keyboard, use it to display only additional information -that is not required to understand the context.

    \ No newline at end of file +that is not required to understand the context.

    \ No newline at end of file diff --git a/core/image.html b/core/image/index.html similarity index 56% rename from core/image.html rename to core/image/index.html index 35ce8adc432..29d22f3b1de 100644 --- a/core/image.html +++ b/core/image/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Image

    Image with optional fallback

    Import

    Usage

    +

    Image

    Image with optional fallback

    Import

    Usage

    Image is a wrapper for img with minimal styles. By default, the image will take 100% of parent width. The image size can be controlled with w -and h style props.

    +and h style props.

    import { Image } from '@mantine/core';
     
     function Demo() {
    @@ -19,7 +19,7 @@
     }

    Image height

    In most case, you will need to set image height to prevent layout jumps when -image is loading. You can do so with h style props.

    +image is loading. You can do so with h style props.

    import { Image } from '@mantine/core';
     
     function Demo() {
    @@ -62,7 +62,7 @@
       );
     }

    Usage with Next.js Image

    -

    Image component is a polymorphic component, its root element can be changed with component prop. +

    Image component is a polymorphic component, its root element can be changed with component prop. You can use it with next/image and other similar components.

    import NextImage from 'next/image';
     import { Image } from '@mantine/core';
    @@ -70,4 +70,4 @@
     
     function Demo() {
       return <Image component={NextImage} src={myImage} alt="My image" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/indicator.html b/core/indicator/index.html similarity index 63% rename from core/indicator.html rename to core/indicator/index.html index b32bcb29b66..350149c0078 100644 --- a/core/indicator.html +++ b/core/indicator/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Indicator

    Display element at the corner of another element

    Import

    Usage

    +

    Indicator

    Display element at the corner of another element

    Import

    Usage

    Color
    Radius
    Size
    import { Indicator, Avatar } from '@mantine/core';
     
     function Demo() {
    @@ -58,4 +58,4 @@
           <Avatar size="lg" src="./avatar.png" />
         </Indicator>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/input.html b/core/input/index.html similarity index 80% rename from core/input.html rename to core/input/index.html index 845a1669985..ca25c789284 100644 --- a/core/input.html +++ b/core/input/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Input

    Base component to create custom inputs

    Import

    Disclaimer

    +

    Input

    Base component to create custom inputs

    Import

    Disclaimer

    !important: In most cases, you should not use Input in your application. Input is a base for other inputs and was not designed to be used directly. -Use Input to create custom inputs, for other cases prefer TextInput +Use Input to create custom inputs, for other cases prefer TextInput or other component.

    import { Input, TextInput } from '@mantine/core';
     
    @@ -25,7 +25,7 @@
       return <TextInput label="Input label" description="Input description" />;
     }

    Usage

    -

    Input component is used as base for some other inputs (NativeSelect, TextInput, Textarea, etc.). +

    Input component is used as base for some other inputs (NativeSelect, TextInput, Textarea, etc.). The purpose of the Input is to provide shared styles and features to other inputs.

    Variant
    Size
    Radius
    import { Input } from '@mantine/core';
     
    @@ -66,7 +66,7 @@
       );
     }

    Change input element

    -

    Input is a polymorphic component, the default root element is input, +

    Input is a polymorphic component, the default root element is input, but it can be changed to any other element or component.

    Example of using Input as button and select:

    import { Input } from '@mantine/core';
    @@ -100,7 +100,7 @@
     }

    Input.Wrapper component

    Input.Wrapper component is used in all other inputs -(TextInput, NativeSelect, Textarea, etc.) +(TextInput, NativeSelect, Textarea, etc.) under the hood, you do not need to wrap your inputs with it, as it is already included in all of them. Use Input.Wrapper only when you want to create custom inputs.

    Input description

    Input error

    Size
    import { Input } from '@mantine/core';
    @@ -141,7 +141,7 @@
     }

    inputContainer

    With inputContainer prop, you can enhance inputs that use Input.Wrapper under the hood, -for example, you can add Tooltip to the TextInput when +for example, you can add Tooltip to the TextInput when the input is focused:

    Tooltip will be relative to the input

    import { useState } from 'react';
     import { TextInput, Tooltip } from '@mantine/core';
    @@ -168,7 +168,7 @@
     

    All components that are based on Input.Wrapper support required and withAsterisk props. When set to true, both of these props will add a red asterisk to the end of the label. The only difference is whether input element will have required attribute, example with -TextInput component:

    +TextInput component:

    import { TextInput } from '@mantine/core';
     
     // Will display required asterisk and add `required` attribute to the input element
    @@ -243,9 +243,9 @@
       );
     }

    Default props on theme

    -

    You can add default props on theme +

    You can add default props on theme to Input and Input.Wrapper components. These default props will be inherited by all inputs -that use Input and Input.Wrapper under the hood (TextInput, NativeSelect, Textarea, etc.):

    +that use Input and Input.Wrapper under the hood (TextInput, NativeSelect, Textarea, etc.):

    Description below the input

    Description below the input

    import { TextInput, NativeSelect, MantineProvider, createTheme, Input } from '@mantine/core';
     
     const theme = createTheme({
    @@ -284,8 +284,8 @@
       );
     }

    Styles on theme

    -

    Same as with default props, you can use Input and Input.Wrapper Styles API -on theme to add styles to all inputs:

    +

    Same as with default props, you can use Input and Input.Wrapper Styles API +on theme to add styles to all inputs:

    import { TextInput, NativeSelect, MantineThemeProvider, createTheme, Input } from '@mantine/core';
     import classes from './Demo.module.css';
     
    @@ -321,8 +321,8 @@
     }

    Change focus styles

    Use &:focus-within selector to change inputs focus styles. You can apply these styles to -one component with classNames prop or to all inputs with Styles API -on theme.

    +one component with classNames prop or to all inputs with Styles API +on theme.

    .input {
       transition: none;
     
    @@ -355,7 +355,7 @@
       );
     }

    Styles API

    -

    Input and Input.Wrapper components support Styles API – +

    Input and Input.Wrapper components support Styles API – you can customize styles of any inner element with classNames and styles props.

    Input Styles API selectors:

    JsonInput

    Capture json data from user

    Import

    Usage

    -

    JsonInput is based on Textarea component, +

    JsonInput

    Capture json data from user

    Import

    Usage

    +

    JsonInput is based on Textarea component, it includes json validation logic and option to format input value on blur:

    import { JsonInput } from '@mantine/core';
     
    @@ -29,7 +29,7 @@
       return <JsonInput value={value} onChange={setValue} />;
     }

    Input props

    -

    JsonInput component supports Input and Input.Wrapper components features and all textarea element props. JsonInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    JsonInput component supports Input and Input.Wrapper components features and all textarea element props. JsonInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { JsonInput } from '@mantine/core';
     
     function Demo() {
    @@ -49,7 +49,7 @@
         <JsonInput disabled defaultValue='{ "a": 1, "B": 2 }' label="Disabled" placeholder="Disabled" />
       );
     }
    -

    Styles API

    JsonInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    JsonInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Kbd | Mantine

    Kbd

    Display keyboard key

    Import

    Usage

    -
    + Shift + M
    import { Kbd } from '@mantine/core';
    -
    -function Demo() {
    -  return (
    -    <>
    -      <Kbd></Kbd> + <Kbd>Shift</Kbd> + <Kbd>M</Kbd>
    -    </>
    -  );
    -}
    \ No newline at end of file diff --git a/core/kbd/index.html b/core/kbd/index.html new file mode 100644 index 00000000000..d7c202399cd --- /dev/null +++ b/core/kbd/index.html @@ -0,0 +1,15 @@ +Kbd | Mantine

    Kbd

    Display keyboard key

    Import

    Usage

    +
    + Shift + M
    import { Kbd } from '@mantine/core';
    +
    +function Demo() {
    +  return (
    +    <>
    +      <Kbd></Kbd> + <Kbd>Shift</Kbd> + <Kbd>M</Kbd>
    +    </>
    +  );
    +}
    \ No newline at end of file diff --git a/core/list.html b/core/list/index.html similarity index 60% rename from core/list.html rename to core/list/index.html index abd2a5ba6e0..8a322a67190 100644 --- a/core/list.html +++ b/core/list/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    List

    Display ordered or unordered list

    Import

    Usage

    +

    List

    Display ordered or unordered list

    Import

    Usage

    • Clone or download repository from GitHub
    • Install dependencies with yarn
    • To start development server run npm start command
    • Run tests to make sure your changes do not break the build
    • Submit a pull request once you are done
    Type
    Size
    import { List } from '@mantine/core';
     
     function Demo() {
    @@ -84,4 +84,4 @@
           <List.Item>First order item</List.Item>
         </List>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/loader.html b/core/loader/index.html similarity index 62% rename from core/loader.html rename to core/loader/index.html index 7c0cf78d236..86e24697c0f 100644 --- a/core/loader.html +++ b/core/loader/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Loader

    Indicate loading state

    Import

    Usage

    +

    Loader

    Indicate loading state

    Import

    Usage

    Loader component supports 3 types of loaders: oval, bars and dots by default. All loaders are animated with CSS for better performance.

    Color
    Size
    Type
    import { Loader } from '@mantine/core';
    @@ -13,7 +13,7 @@
     }

    Size prop

    You can pass any valid CSS values and numbers to size prop. Numbers are treated as px, but -converted to rem. For example, size={32} will produce +converted to rem. For example, size={32} will produce --loader-size: 2rem CSS variable.

    Size
    import { Loader } from '@mantine/core';
     
    @@ -21,9 +21,9 @@
       return <Loader size={30} />;
     }

    Adding custom loaders

    -

    Loader component is used in other components (Button, ActionIcon, LoadingOverlay, etc.). -You can change loader type with default props by setting type. -You can also add a custom CSS or SVG loader with loaders default prop.

    +

    Loader component is used in other components (Button, ActionIcon, LoadingOverlay, etc.). +You can change loader type with default props by setting type. +You can also add a custom CSS or SVG loader with loaders default prop.

    Custom CSS only loader

    Note that in order for size and color props to work with custom loaders, you need to use --loader-size and --loader-color CSS variables in your loader styles.

    @@ -78,4 +78,4 @@ <Loader /> </MantineProvider> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/loading-overlay.html b/core/loading-overlay/index.html similarity index 60% rename from core/loading-overlay.html rename to core/loading-overlay/index.html index 152b09cd3c7..2254b3b1186 100644 --- a/core/loading-overlay.html +++ b/core/loading-overlay/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    LoadingOverlay

    An overlay with centered loader

    Import

    Usage

    +

    LoadingOverlay

    An overlay with centered loader

    Import

    Usage

    LoadingOverlay renders an overlay with a loader over the parent element with relative position. It is usually used to indicate loading state of forms. Note that elements under overlay are still focusable with keyboard, remember to add additional logic to handle this case.

    @@ -29,7 +29,7 @@ ); }

    Loader props

    -

    You can pass props down to the Loader component with loaderProps:

    +

    You can pass props down to the Loader component with loaderProps:

    import { useDisclosure } from '@mantine/hooks';
     import { LoadingOverlay, Button, Group, Box } from '@mantine/core';
     
    @@ -54,4 +54,4 @@
           </Group>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/mark.html b/core/mark/index.html similarity index 51% rename from core/mark.html rename to core/mark/index.html index 09a469b8dfc..dbc4354d415 100644 --- a/core/mark.html +++ b/core/mark/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Mark

    Highlight part of the text

    Import

    Usage

    +

    Mark

    Highlight part of the text

    Import

    Usage

    Highlight this chunk of the text

    Color
    import { Text, Mark } from '@mantine/core';
     
     function Demo() {
    @@ -12,4 +12,4 @@
           Highlight <Mark>this chunk</Mark> of the text
         </Text>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/menu.html b/core/menu/index.html similarity index 71% rename from core/menu.html rename to core/menu/index.html index 6f21bca3973..14eeb64b8da 100644 --- a/core/menu.html +++ b/core/menu/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Menu

    Combine a list of secondary actions into single interactive area

    Import

    Usage

    +

    Menu

    Combine a list of secondary actions into single interactive area

    Import

    Usage

    import { Menu, Button, Text, rem } from '@mantine/core';
     import {
       IconSettings,
    @@ -126,7 +126,7 @@
       );
     }

    Transitions

    -

    Menu dropdown can be animated with any of premade transitions from Transition component:

    +

    Menu dropdown can be animated with any of premade transitions from Transition component:

    import { Menu } from '@mantine/core';
     
     function Demo() {
    @@ -220,7 +220,7 @@
         </Menu>
       );
     }
    -

    Styles API

    Menu supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Menu supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Modal

    An accessible overlay dialog

    Import

    Usage

    +

    Modal

    An accessible overlay dialog

    Import

    Usage

    import { useDisclosure } from '@mantine/hooks';
     import { Modal, Button } from '@mantine/core';
     
    @@ -133,7 +133,7 @@
         </>
       );
     }
    -

    To switch Modal to fullscreen on devices with small screens only use use-media-query hook. +

    To switch Modal to fullscreen on devices with small screens only use use-media-query hook. size prop is ignored if fullScreen prop is set:

    import { useDisclosure, useMediaQuery } from '@mantine/hooks';
     import { Modal, Button } from '@mantine/core';
    @@ -159,7 +159,7 @@
       );
     }

    Customize overlay

    -

    Modal uses Overlay component, you can set any props that Overlay +

    Modal uses Overlay component, you can set any props that Overlay supports with overlayProps:

    import { useDisclosure } from '@mantine/hooks';
     import { Modal, Button } from '@mantine/core';
    @@ -251,8 +251,8 @@
       );
     }

    Change transitions

    -

    Modal is built with Transition component. Use transitionProps -prop to customize any Transition properties:

    +

    Modal is built with Transition component. Use transitionProps +prop to customize any Transition properties:

    import { useState } from 'react';
     import { Modal, Group, Button } from '@mantine/core';
     
    @@ -292,7 +292,7 @@
       );
     }

    Initial focus

    -

    Modal uses FocusTrap to trap focus. Add data-autofocus +

    Modal uses FocusTrap to trap focus. Add data-autofocus attribute to the element that should receive initial focus.

    import { useDisclosure } from '@mantine/hooks';
     import { Modal, Button, TextInput } from '@mantine/core';
    @@ -330,7 +330,7 @@
     

    You can use the following compound components to have full control over the Modal rendering:

    • Modal.Root – context provider
    • -
    • Modal.Overlay – render Overlay
    • +
    • Modal.Overlay – render Overlay
    • Modal.Content – main modal element, should include all modal content
    • Modal.Header – sticky header, usually contains Modal.Title and Modal.CloseButton
    • Modal.Titleh2 element, aria-labelledby of Modal.Content is pointing to this element, usually is rendered inside Modal.Header
    • @@ -383,4 +383,4 @@ function Demo() { return <Modal closeButtonProps={{ 'aria-label': 'Close modal' }} opened onClose={() => {}} />; -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/multi-select.html b/core/multi-select/index.html similarity index 82% rename from core/multi-select.html rename to core/multi-select/index.html index 4f21ca756c1..c1bd19cf28e 100644 --- a/core/multi-select.html +++ b/core/multi-select/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    MultiSelect

    Custom searchable multi select

    Import

    Made with Combobox

    MultiSelect is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom multi select components on the examples page.

    +

    MultiSelect

    Custom searchable multi select

    Import

    Made with Combobox

    MultiSelect is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom multi select components on the examples page.

    Usage

    MultiSelect provides a way to enter multiple values. -MultiSelect is similar to TagsInput, but it does not allow entering custom values.

    +MultiSelect is similar to TagsInput, but it does not allow entering custom values.

    import { MultiSelect } from '@mantine/core';
     
     function Demo() {
    @@ -209,10 +209,10 @@
       );
     }

    Scrollable dropdown

    -

    By default, the options list is wrapped with ScrollArea.Autosize. +

    By default, the options list is wrapped with ScrollArea.Autosize. You can control dropdown max-height with maxDropdownHeight prop if you do not change the default settings.

    If you want to use native scrollbars, set withScrollArea={false}. Note that in this case, -you will need to change dropdown styles with Styles API.

    +you will need to change dropdown styles with Styles API.

    import { MultiSelect } from '@mantine/core';
     
     const data = Array(100)
    @@ -275,13 +275,13 @@
         />
       );
     }
    -

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by MultiSelect, for example withinPortal:

    import { MultiSelect } from '@mantine/core';
    +

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by MultiSelect, for example withinPortal:

    import { MultiSelect } from '@mantine/core';
     
     function Demo() {
       return <MultiSelect comboboxProps={{ withinPortal: false }} data={[]} />;
     }

    Input props

    -

    MultiSelect component supports Input and Input.Wrapper components features and all input element props. MultiSelect documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    MultiSelect component supports Input and Input.Wrapper components features and all input element props. MultiSelect documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { MultiSelect } from '@mantine/core';
     
     function Demo() {
    @@ -346,7 +346,7 @@
         </>
       );
     }
    -

    Styles API

    MultiSelect supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    MultiSelect supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    NativeSelect

    Native select element based on Input

    Import

    Usage

    -

    NativeSelect component supports Input and Input.Wrapper components features and all select element props. NativeSelect documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    NativeSelect

    Native select element based on Input

    Import

    Usage

    +

    NativeSelect component supports Input and Input.Wrapper components features and all select element props. NativeSelect documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { NativeSelect } from '@mantine/core';
     
     function Demo() {
    @@ -205,7 +205,7 @@
         </>
       );
     }
    -

    Styles API

    NativeSelect supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    NativeSelect supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    NavLink

    Navigation link

    Import

    Usage

    +

    NavLink

    Navigation link

    Import

    Usage

    import { Badge, NavLink } from '@mantine/core';
     import { IconHome2, IconGauge, IconChevronRight, IconActivity, IconCircleOff } from '@tabler/icons-react';
     
    @@ -117,7 +117,7 @@
         </>
       );
     }
    -

    Polymorphic component

    NavLink is a polymorphic component – its default root element is a, but it can be changed to any other element or component with component prop:

    import { NavLink } from '@mantine/core';
    +

    Polymorphic component

    NavLink is a polymorphic component – its default root element is a, but it can be changed to any other element or component with component prop:

    import { NavLink } from '@mantine/core';
     
     function Demo() {
       return <NavLink component="button" />;
    @@ -129,11 +129,11 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, NavLinkProps does not extend React.ComponentPropsWithoutRef'<'div'>' although a is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { NavLinkProps, ElementProps } from '@mantine/core';
     
     interface MyNavLinkProps extends NavLinkProps,
    -  ElementProps<'button', keyof NavLinkProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'button', keyof NavLinkProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    Get element ref

    import { useRef } from 'react';
     import { NavLink } from '@mantine/core';
     
     function Demo() {
       const ref = useRef<HTMLAnchorElement>(null);
       return <NavLink ref={ref} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/notification.html b/core/notification/index.html similarity index 63% rename from core/notification.html rename to core/notification/index.html index a8106657275..bc2fa5b5c5d 100644 --- a/core/notification.html +++ b/core/notification/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Notification

    Show dynamic notifications and alerts to user, part of notifications system

    Import

    Usage

    +

    Notification

    Show dynamic notifications and alerts to user, part of notifications system

    Import

    Usage

    Notification is a base component for notification system. -Build your own or use @mantine/notifications package.

    +Build your own or use @mantine/notifications package.

    Color
    Radius
    import { Notification } from '@mantine/core';
     
     function Demo() {
    @@ -34,7 +34,7 @@
         </>
       );
     }
    -

    Styles API

    Notification supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Notification supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    NumberInput

    Capture number from user

    Import

    Usage

    -

    NumberInput component supports Input and Input.Wrapper components features and all input element props. NumberInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    NumberInput

    Capture number from user

    Import

    Usage

    +

    NumberInput component supports Input and Input.Wrapper components features and all input element props. NumberInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { NumberInput } from '@mantine/core';
     
     function Demo() {
    @@ -237,7 +237,7 @@
     function Demo() {
       return <NumberInput disabled label="Disabled input" placeholder="Disabled input" />;
     }
    -

    Styles API

    NumberInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    NumberInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Overlay

    Overlays parent element with div element with any color and opacity

    Import

    Usage

    +

    Overlay

    Overlays parent element with div element with any color and opacity

    Import

    Usage

    Overlay takes 100% of width and height of parent container or viewport if fixed prop is set. Set color and backgroundOpacity props to change Overlay background-color. Note that backgroundOpacity prop does not change CSS opacity property, it changes background-color. For example, if you set @@ -72,7 +72,7 @@ </AspectRatio> ); }

    -

    Polymorphic component

    Overlay is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Overlay } from '@mantine/core';
    +

    Polymorphic component

    Overlay is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Overlay } from '@mantine/core';
     
     function Demo() {
       return <Overlay component="a" />;
    @@ -84,4 +84,4 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, OverlayProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { OverlayProps, ElementProps } from '@mantine/core';
     
     interface MyOverlayProps extends OverlayProps,
    -  ElementProps<'a', keyof OverlayProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file + ElementProps<'a', keyof OverlayProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file diff --git a/core/pagination.html b/core/pagination/index.html similarity index 76% rename from core/pagination.html rename to core/pagination/index.html index 2b374ac6171..568dce5de9c 100644 --- a/core/pagination.html +++ b/core/pagination/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Pagination

    Display active page and navigate between multiple pages

    Import

    Usage

    +

    Pagination

    Display active page and navigate between multiple pages

    Import

    Usage

    Color
    Size
    Radius
    import { Pagination } from '@mantine/core';
     
     function Demo() {
    @@ -54,7 +54,7 @@
         </>
       );
     }
    -

    Styles API

    Pagination supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Pagination supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Paper

    Renders white or dark background depending on color scheme

    Import

    Usage

    +

    Paper

    Renders white or dark background depending on color scheme

    Import

    Usage

    Paper is the most basic ui component

    Use it to create cards, dropdowns, modals and other components that require background with shadow

    Shadow
    Radius
    import { Text, Paper } from '@mantine/core';
     
     function Demo() {
    @@ -17,7 +17,7 @@
         </Paper>
       );
     }
    -

    Polymorphic component

    Paper is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Paper } from '@mantine/core';
    +

    Polymorphic component

    Paper is a polymorphic component – its default root element is div, but it can be changed to any other element or component with component prop:

    import { Paper } from '@mantine/core';
     
     function Demo() {
       return <Paper component="button" />;
    @@ -29,4 +29,4 @@
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, PaperProps does not extend React.ComponentPropsWithoutRef'<'div'>' although div is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { PaperProps, ElementProps } from '@mantine/core';
     
     interface MyPaperProps extends PaperProps,
    -  ElementProps<'button', keyof PaperProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file + ElementProps<'button', keyof PaperProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    \ No newline at end of file diff --git a/core/password-input.html b/core/password-input/index.html similarity index 72% rename from core/password-input.html rename to core/password-input/index.html index a531382ca99..d7309a82ca6 100644 --- a/core/password-input.html +++ b/core/password-input/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    PasswordInput

    Capture password data from user

    Import

    Usage

    -

    PasswordInput component supports Input and Input.Wrapper components features and all input element props. PasswordInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    PasswordInput

    Capture password data from user

    Import

    Usage

    +

    PasswordInput component supports Input and Input.Wrapper components features and all input element props. PasswordInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { PasswordInput } from '@mantine/core';
     
     function Demo() {
    @@ -71,7 +71,7 @@
       );
     }

    Strength meter example

    -

    Password strength meter example with Progress and Popover components:

    +

    Password strength meter example with Progress and Popover components:

    import { useState } from 'react';
     import { IconX, IconCheck } from '@tabler/icons-react';
     import { PasswordInput, Progress, Text, Popover, Box, rem } from '@mantine/core';
    @@ -163,7 +163,7 @@
         </>
       );
     }
    -

    Styles API

    PasswordInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    PasswordInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Pill

    Removable and non-removable tags

    Import

    Usage

    +

    Pill

    Removable and non-removable tags

    Import

    Usage

    React
    Size
    import { Pill } from '@mantine/core';
     
     function Demo() {
    @@ -29,11 +29,11 @@
         </InputBase>
       );
     }
    -

    Styles API

    Pill supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Pill supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Test pill

    Component Styles API

    Hover over selectors to highlight corresponding elements

    /*
      * Hover over selectors to apply outline styles
      *
    - */
    \ No newline at end of file + */
    \ No newline at end of file diff --git a/core/pills-input.html b/core/pills-input/index.html similarity index 62% rename from core/pills-input.html rename to core/pills-input/index.html index b7e4931aed0..bba30cfa2ce 100644 --- a/core/pills-input.html +++ b/core/pills-input/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    PillsInput

    Base component for custom tags inputs and multi selects

    Import

    Usage

    +

    PillsInput

    Base component for custom tags inputs and multi selects

    Import

    Usage

    PillsInput is a utility component that can be used to create custom tag inputs, multi selects and other similar components. By itself it does not include any logic, it only renders given children. -Usually, PillsInput is used in combination with Pill component.

    +Usually, PillsInput is used in combination with Pill component.

    ReactVueSvelte
    import { PillsInput, Pill } from '@mantine/core';
     
     function Demo() {
    @@ -22,7 +22,7 @@
       );
     }

    Input props

    -

    PillsInput component supports Input and Input.Wrapper components features and all div element props. PillsInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    PillsInput component supports Input and Input.Wrapper components features and all div element props. PillsInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    ReactVueSvelte
    Variant
    Size
    Radius
    import { PillsInput, Pill } from '@mantine/core';
     
     function Demo() {
    @@ -42,7 +42,7 @@
       );
     }

    Searchable select example

    -

    Combine PillsInput with Combobox to create searchable multiselect:

    +

    Combine PillsInput with Combobox to create searchable multiselect:

    import { useState } from 'react';
     import { PillsInput, Pill, Combobox, CheckIcon, Group, useCombobox } from '@mantine/core';
     
    @@ -153,4 +153,4 @@
           <PillsInput.Field />
         </PillsInput>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/pin-input.html b/core/pin-input/index.html similarity index 60% rename from core/pin-input.html rename to core/pin-input/index.html index 7f4431f8756..d8a55867cd0 100644 --- a/core/pin-input.html +++ b/core/pin-input/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    PinInput

    Capture pin code or one time password from the user

    Import

    Usage

    +

    PinInput

    Capture pin code or one time password from the user

    Import

    Usage

    Size
    Length
    import { PinInput } from '@mantine/core';
     
     function Demo() {
    @@ -34,11 +34,11 @@
     function Accessibility() {
       return <PinInput aria-label="One time code" />;
     }
    -

    Styles API

    PinInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    PinInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Component Styles API

    Hover over selectors to highlight corresponding elements

    /*
      * Hover over selectors to apply outline styles
      *
    - */
    \ No newline at end of file + */
    \ No newline at end of file diff --git a/core/popover.html b/core/popover/index.html similarity index 75% rename from core/popover.html rename to core/popover/index.html index c25cb9d6ef4..073b387b58b 100644 --- a/core/popover.html +++ b/core/popover/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Popover

    Display popover section relative to given target element

    Import

    Usage

    +

    Popover

    Display popover section relative to given target element

    Import

    Usage

    import { Popover, Text, Button } from '@mantine/core';
     
     function Demo() {
    @@ -214,7 +214,7 @@
       );
     }

    Initial focus

    -

    Popover uses FocusTrap component to manage focus. +

    Popover uses FocusTrap component to manage focus. Add data-autofocus attribute to element that should receive initial focus:

    import { Popover } from '@mantine/core';
     
    @@ -306,7 +306,7 @@
     
  • Dropdown element has role="dialog" and aria-labelledby="target-id" attributes
  • Target element has aria-haspopup="dialog", aria-expanded, aria-controls="dropdown-id" attributes
  • -

    Uncontrolled Popover will be accessible only when used with button element or component that renders it (Button, ActionIcon, etc.). +

    Uncontrolled Popover will be accessible only when used with button element or component that renders it (Button, ActionIcon, etc.). Other elements will not support Space and Enter key presses.

    Keyboard interactions

    -
    KeyDescriptionCondition
    EscapeCloses dropdownFocus within dropdown
    Space/EnterOpens/closes dropdownFocus on target element
    \ No newline at end of file +
    KeyDescriptionCondition
    EscapeCloses dropdownFocus within dropdown
    Space/EnterOpens/closes dropdownFocus on target element
    \ No newline at end of file diff --git a/core/portal.html b/core/portal.html deleted file mode 100644 index 272feb66106..00000000000 --- a/core/portal.html +++ /dev/null @@ -1,67 +0,0 @@ -Portal | Mantine

    Portal

    Renders component outside of parent element tree

    Import

    Usage

    -

    Portal is a wrapper component for ReactDOM.createPortal API. -Render any component or element at the end of document.body or at a given element. Modal and Drawer components are wrapped in Portal by default.

    -

    Use Portal to render a component or an element at a different place (defaults to the end of document.body). -Portal is useful when you want to prevent parent styles from interfering with children, -usually all these styles are related to position and z-index properties -and portals are used for components with fixed position, for example, modals.

    -
    import { useState } from 'react';
    -import { Portal } from '@mantine/core';
    -
    -function Demo() {
    -  const [opened, setOpened] = useState(false);
    -
    -  return (
    -    <main style={{ position: 'relative', zIndex: 1 }}>
    -      {opened && (
    -        <Portal>
    -          <div>Your modal content</div>
    -        </Portal>
    -      )}
    -
    -      <button onClick={() => setOpened(true)} type="button">
    -        Open modal
    -      </button>
    -    </main>
    -  );
    -}
    -

    In the example above, the div element is rendered outside of parent main (before closing body tag), -but still receives opened and onClose props. The element will not be affected by parent z-index.

    -

    Specify target dom node

    -

    You can specify dom node where portal will be rendered by passing target prop:

    -
    import { Portal } from '@mantine/core';
    -
    -const container = document.createElement('div');
    -document.body.appendChild(container);
    -
    -function Demo() {
    -  return <Portal target={container}>My portal</Portal>;
    -}
    -

    Alternatively, you can specify selector to render portal in existing element:

    -
    import { Portal } from '@mantine/core';
    -
    -function Demo() {
    -  return <Portal target="#portal-container">My portal</Portal>;
    -}
    -

    If you don't specify the target element, new one will be created and appended to the document.body for each Portal component.

    -

    Server side rendering

    -

    createPortal is not supported during server side rendering. -All components inside Portal are rendered only after the application was mounted to the dom.

    -

    OptionalPortal component

    -

    OptionalPortal component lets you configure whether children should be rendered in Portal. -It accepts the same props as the Portal component:

    -
    import { OptionalPortal } from '@mantine/core';
    -
    -function Demo() {
    -  return (
    -    <>
    -      <OptionalPortal withinPortal>This text is rendered in Portal</OptionalPortal>
    -      <OptionalPortal withinPortal={false}>This text is rendered as regular child</OptionalPortal>
    -    </>
    -  );
    -}
    \ No newline at end of file diff --git a/core/portal/index.html b/core/portal/index.html new file mode 100644 index 00000000000..e1e1d1ffac1 --- /dev/null +++ b/core/portal/index.html @@ -0,0 +1,67 @@ +Portal | Mantine

    Portal

    Renders component outside of parent element tree

    Import

    Usage

    +

    Portal is a wrapper component for ReactDOM.createPortal API. +Render any component or element at the end of document.body or at a given element. Modal and Drawer components are wrapped in Portal by default.

    +

    Use Portal to render a component or an element at a different place (defaults to the end of document.body). +Portal is useful when you want to prevent parent styles from interfering with children, +usually all these styles are related to position and z-index properties +and portals are used for components with fixed position, for example, modals.

    +
    import { useState } from 'react';
    +import { Portal } from '@mantine/core';
    +
    +function Demo() {
    +  const [opened, setOpened] = useState(false);
    +
    +  return (
    +    <main style={{ position: 'relative', zIndex: 1 }}>
    +      {opened && (
    +        <Portal>
    +          <div>Your modal content</div>
    +        </Portal>
    +      )}
    +
    +      <button onClick={() => setOpened(true)} type="button">
    +        Open modal
    +      </button>
    +    </main>
    +  );
    +}
    +

    In the example above, the div element is rendered outside of parent main (before closing body tag), +but still receives opened and onClose props. The element will not be affected by parent z-index.

    +

    Specify target dom node

    +

    You can specify dom node where portal will be rendered by passing target prop:

    +
    import { Portal } from '@mantine/core';
    +
    +const container = document.createElement('div');
    +document.body.appendChild(container);
    +
    +function Demo() {
    +  return <Portal target={container}>My portal</Portal>;
    +}
    +

    Alternatively, you can specify selector to render portal in existing element:

    +
    import { Portal } from '@mantine/core';
    +
    +function Demo() {
    +  return <Portal target="#portal-container">My portal</Portal>;
    +}
    +

    If you don't specify the target element, new one will be created and appended to the document.body for each Portal component.

    +

    Server side rendering

    +

    createPortal is not supported during server side rendering. +All components inside Portal are rendered only after the application was mounted to the dom.

    +

    OptionalPortal component

    +

    OptionalPortal component lets you configure whether children should be rendered in Portal. +It accepts the same props as the Portal component:

    +
    import { OptionalPortal } from '@mantine/core';
    +
    +function Demo() {
    +  return (
    +    <>
    +      <OptionalPortal withinPortal>This text is rendered in Portal</OptionalPortal>
    +      <OptionalPortal withinPortal={false}>This text is rendered as regular child</OptionalPortal>
    +    </>
    +  );
    +}
    \ No newline at end of file diff --git a/core/progress.html b/core/progress/index.html similarity index 63% rename from core/progress.html rename to core/progress/index.html index fb9d6593ac5..0817add4b24 100644 --- a/core/progress.html +++ b/core/progress/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Progress

    Give user feedback for status of the task

    Import

    Usage

    +

    Progress

    Give user feedback for status of the task

    Import

    Usage

    Color
    Radius
    Size
    Value
    import { Progress } from '@mantine/core';
     
     function Demo() {
    @@ -53,7 +53,7 @@
         </Progress.Root>
       );
     }
    -

    Styles API

    Progress supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Progress supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Radio

    Wrapper for input type radio

    Import

    Usage

    +

    Radio

    Wrapper for input type radio

    Import

    Usage

    Label position
    Size
    Color
    import { Radio } from '@mantine/core';
     function Demo() {
       return (
    @@ -88,4 +88,4 @@
     function Demo() {
       const ref = useRef<HTMLInputElement>(null);
       return <Radio ref={ref} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/rating.html b/core/rating/index.html similarity index 74% rename from core/rating.html rename to core/rating/index.html index 5266665e039..85607d5a9fd 100644 --- a/core/rating.html +++ b/core/rating/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Rating

    Pick and display rating

    Import

    Usage

    +

    Rating

    Pick and display rating

    Import

    Usage

    Color
    Size
    Count
    import { Rating } from '@mantine/core';
     
     function Demo() {
    @@ -105,4 +105,4 @@
     
     function Demo() {
       return <Rating emptySymbol={getEmptyIcon} fullSymbol={getFullIcon} highlightSelectedOnly />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/ring-progress.html b/core/ring-progress/index.html similarity index 64% rename from core/ring-progress.html rename to core/ring-progress/index.html index 5c59dd17882..c5a9ed55df6 100644 --- a/core/ring-progress.html +++ b/core/ring-progress/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    RingProgress

    Give user feedback for status of the task with circle diagram

    Import

    Usage

    +

    RingProgress

    Give user feedback for status of the task with circle diagram

    Import

    Usage

    Set sections prop to an array of:

    • value – number between 0 and 100 – amount of space filled by segment
    • @@ -45,7 +45,7 @@ ) }

    Sections tooltips

    -

    Add tooltip property to section to display floating Tooltip when user hovers over it:

    +

    Add tooltip property to section to display floating Tooltip when user hovers over it:

    Hover sections to see tooltips

    import { RingProgress, Text } from '@mantine/core';
     
     function Demo() {
    @@ -97,8 +97,8 @@
       );
     }

    Customize label

    -

    You can add any React node as label, e.g. Text component with some additional styles -or ThemeIcon:

    +

    You can add any React node as label, e.g. Text component with some additional styles +or ThemeIcon:

    40%

    import { ActionIcon, RingProgress, Text, Center } from '@mantine/core';
     import { IconCheck } from '@tabler/icons-react';
     
    @@ -126,4 +126,4 @@
           />
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/scroll-area.html b/core/scroll-area/index.html similarity index 73% rename from core/scroll-area.html rename to core/scroll-area/index.html index da5e39d1230..a4fa4535b8c 100644 --- a/core/scroll-area.html +++ b/core/scroll-area/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    ScrollArea

    Area with custom scrollbars

    Import

    Usage

    +

    ScrollArea

    Area with custom scrollbars

    Import

    Usage

    ScrollArea component supports the following props:

    • type defines scrollbars behavior: @@ -342,4 +342,4 @@ </Popover.Dropdown> </Popover> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/segmented-control.html b/core/segmented-control/index.html similarity index 73% rename from core/segmented-control.html rename to core/segmented-control/index.html index 4855eb143c7..6fa4ad13d55 100644 --- a/core/segmented-control.html +++ b/core/segmented-control/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    SegmentedControl

    A linear set of two or more segments

    Import

    Usage

    +

    SegmentedControl

    A linear set of two or more segments

    Import

    Usage

    Orientation
    Size
    Radius
    import { SegmentedControl } from '@mantine/core';
     
     function Demo() {
    @@ -157,7 +157,7 @@
     function Demo() {
       return <SegmentedControl readOnly defaultValue="Angular" data={['React', 'Angular', 'Vue']} />;
     }
    -

    Styles API

    SegmentedControl supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    SegmentedControl supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Select

    Custom searchable select

    Import

    Made with Combobox

    Select is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom select components on the examples page.

    +

    Select

    Custom searchable select

    Import

    Made with Combobox

    Select is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom select components on the examples page.

    Usage

    Select allows capturing user input based on suggestions from the list. -Unlike Autocomplete, Select does not allow entering custom values.

    +Unlike Autocomplete, Select does not allow entering custom values.

    import { Select } from '@mantine/core';
     
     function Demo() {
    @@ -209,10 +209,10 @@
       );
     }

    Scrollable dropdown

    -

    By default, the options list is wrapped with ScrollArea.Autosize. +

    By default, the options list is wrapped with ScrollArea.Autosize. You can control dropdown max-height with maxDropdownHeight prop if you do not change the default settings.

    If you want to use native scrollbars, set withScrollArea={false}. Note that in this case, -you will need to change dropdown styles with Styles API.

    +you will need to change dropdown styles with Styles API.

    import { Select } from '@mantine/core';
     
     const data = Array(100)
    @@ -273,13 +273,13 @@
         />
       );
     }
    -

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by Select, for example withinPortal:

    import { Select } from '@mantine/core';
    +

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by Select, for example withinPortal:

    import { Select } from '@mantine/core';
     
     function Demo() {
       return <Select comboboxProps={{ withinPortal: false }} data={[]} />;
     }

    Input props

    -

    Select component supports Input and Input.Wrapper components features and all input element props. Select documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    Select component supports Input and Input.Wrapper components features and all input element props. Select documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { Select } from '@mantine/core';
     
     function Demo() {
    @@ -344,7 +344,7 @@
         </>
       );
     }
    -

    Styles API

    Select supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Select supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    SimpleGrid

    Responsive grid in which each item takes equal amount of space

    Import

    Usage

    +

    SimpleGrid

    Responsive grid in which each item takes equal amount of space

    Import

    Usage

    SimpleGrid is a responsive grid system with equal width columns. It use CSS grid layout. If you need to set different widths for columns, use -Grid component instead.

    +Grid component instead.

    1

    2

    3

    4

    5

    Cols
    Spacing
    Vertical spacing
    import { SimpleGrid } from '@mantine/core';
     
     function Demo() {
    @@ -22,7 +22,7 @@
     }

    Responsive props

    cols, spacing and verticalSpacing props support object notation for responsive values, -it works the same way as style props: the object may have base, xs, +it works the same way as style props: the object may have base, xs, sm, md, lg and xl key, and values from those keys will be applied according to current viewport width.

    In the following example, cols={{ base: 1, sm: 2, lg: 5 }} means:

    @@ -48,4 +48,4 @@ <div>5</div> </SimpleGrid> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/skeleton.html b/core/skeleton/index.html similarity index 51% rename from core/skeleton.html rename to core/skeleton/index.html index 6c092542a93..506acdf5690 100644 --- a/core/skeleton.html +++ b/core/skeleton/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Skeleton

    Indicate content loading state

    Import

    Usage

    +

    Skeleton

    Indicate content loading state

    Import

    Usage

    Use Skeleton to create a placeholder for loading content. Skeleton support the following props:

    • height – height – any valid CSS value
    • @@ -45,4 +45,4 @@ </Button> </> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/slider.html b/core/slider/index.html similarity index 78% rename from core/slider.html rename to core/slider/index.html index cd52585a2b3..e2f061b22dd 100644 --- a/core/slider.html +++ b/core/slider/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Slider

    Slider and RangeSlider components

    Import

    Usage

    +

    Slider

    Slider and RangeSlider components

    Import

    Usage

    20%
    50%
    80%
    Color
    Size
    Radius
    import { Slider } from '@mantine/core';
     
     function Demo() {
    @@ -85,7 +85,7 @@
     
    • label – formatter function, accepts value as an argument, set null to disable label, defaults to f => f
    • labelAlwaysOn – if true – label will always be displayed, by default label is visible only when user is dragging
    • -
    • labelTransitionProps – props passed down to the Transition component, can be used to customize label animation
    • +
    • labelTransitionProps – props passed down to the Transition component, can be used to customize label animation

    No label

    Formatted label

    Label always visible

    40

    Custom label transition

    import { Slider, Text } from '@mantine/core';
     
    @@ -264,7 +264,7 @@
         </>
       );
     }
    -

    Styles API

    Slider supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Slider supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Space

    Add horizontal or vertical spacing from theme

    Import

    Usage

    +

    Space

    Add horizontal or vertical spacing from theme

    Import

    Usage

    Use Space component to add horizontal or vertical spacing between elements:

    First line

    Second line

    H
    import { Text, Space } from '@mantine/core';
     
    @@ -38,4 +38,4 @@
     
    <div>First line</div>
     <Space h="md" />
     // Margin props are not available on div, use Space to add spacing from theme
    -<div>Second line</div>
    \ No newline at end of file +<div>Second line</div>
    \ No newline at end of file diff --git a/core/spoiler.html b/core/spoiler/index.html similarity index 52% rename from core/spoiler.html rename to core/spoiler/index.html index 70fb383dfe4..7ab2c5e6ae4 100644 --- a/core/spoiler.html +++ b/core/spoiler/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Spoiler

    Hide long sections of content under a spoiler

    Import

    Usage

    +

    Spoiler

    Hide long sections of content under a spoiler

    Import

    Usage

    Use Spoiler to hide long section of content. Set maxHeight prop to control point at which content will be hidden under spoiler and show/hide control appears. If the content height is less than maxHeight, the spoiler will just render children.

    @@ -36,4 +36,4 @@ function Demo() { const spoilerControlRef = useRef<HTMLButtonElement>(null); return <Spoiler controlRef={spoilerControlRef} />; -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/stack.html b/core/stack/index.html similarity index 51% rename from core/stack.html rename to core/stack/index.html index 1bd039d55a8..62c709451af 100644 --- a/core/stack.html +++ b/core/stack/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Stack

    Compose elements and components in a vertical flex container

    Import

    Usage

    -

    Stack is a vertical flex container. If you need a horizontal flex container, use Group -component instead. If you need to have full control over flex container properties, use Flex component.

    +

    Stack

    Compose elements and components in a vertical flex container

    Import

    Usage

    +

    Stack is a vertical flex container. If you need a horizontal flex container, use Group +component instead. If you need to have full control over flex container properties, use Flex component.

    Gap
    import { Stack, Button } from '@mantine/core';
     function Demo() {
       return (
    @@ -20,4 +20,4 @@
         </Stack>
       );
     }
    -

    Browser support

    Stack uses flexbox gap to add spacing between children. In older browsers, Stack children may not have spacing. You can install PostCSS flex-gap-polyfill to add support for older browsers.

    \ No newline at end of file +

    Browser support

    Stack uses flexbox gap to add spacing between children. In older browsers, Stack children may not have spacing. You can install PostCSS flex-gap-polyfill to add support for older browsers.

    \ No newline at end of file diff --git a/core/stepper.html b/core/stepper/index.html similarity index 82% rename from core/stepper.html rename to core/stepper/index.html index 7eb5d6a16a8..d7376717a63 100644 --- a/core/stepper.html +++ b/core/stepper/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Stepper

    Display content divided into a steps sequence

    Import

    Usage

    +

    Stepper

    Display content divided into a steps sequence

    Import

    Usage

    Step 2 content: Verify email
    import { useState } from 'react';
     import { Stepper, Button, Group } from '@mantine/core';
     
    @@ -266,7 +266,7 @@
     }

    Loading state

    To indicate loading state set loading prop on Step component, Loader will replace step icon. -You can configure the default loader in the theme.

    +You can configure the default loader in the theme.

    import { Stepper } from '@mantine/core';
     
     function Demo() {
    @@ -278,7 +278,7 @@
         </Stepper>
       );
     }
    -

    Styles API

    Stepper supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Stepper supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Switch

    Capture boolean input from user

    Import

    Usage

    +

    Switch

    Capture boolean input from user

    Import

    Usage

    Color
    Label position
    Size
    Radius
    import { Switch } from '@mantine/core';
     
     function Demo() {
    @@ -127,7 +127,7 @@
         </Switch.Group>
       );
     }
    -

    Styles API

    Switch supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Switch supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Table

    Render table with theme styles

    Import

    Usage

    +

    Table

    Render table with theme styles

    Import

    Usage

    Table data for all examples:

    const elements = [
       { position: 6, mass: 12.011, symbol: 'C', name: 'Carbon' },
    @@ -122,7 +122,7 @@
         </Table.ScrollContainer>
       );
     }
    -

    By default, Table.ScrollContainer uses ScrollArea, you can change it +

    By default, Table.ScrollContainer uses ScrollArea, you can change it to native scrollbars by setting type="native":

    Element positionElement nameSymbolAtomic mass
    6CarbonC12.011
    7NitrogenN14.007
    39YttriumY88.906
    56BariumBa137.33
    58CeriumCe140.12
    import { Table } from '@mantine/core';
     
    @@ -151,4 +151,4 @@
           </Table>
         </Table.ScrollContainer>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/tabs.html b/core/tabs/index.html similarity index 80% rename from core/tabs.html rename to core/tabs/index.html index c562abe1e8d..23115a97c4a 100644 --- a/core/tabs.html +++ b/core/tabs/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Tabs

    Switch between different views

    Import

    Usage

    +

    Tabs

    Switch between different views

    Import

    Usage

    Color
    Variant
    Radius
    Orientation
    import { Tabs, rem } from '@mantine/core';
     import { IconPhoto, IconMessageCircle, IconSettings } from '@tabler/icons-react';
     
    @@ -289,7 +289,7 @@
         </Tabs>
       );
     }
    -

    Styles API

    Tabs supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Tabs supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    TagsInput

    Capture a list of values from user with free input and suggestions

    Import

    Made with Combobox

    TagsInput is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom tags input components on the examples page.

    +

    TagsInput

    Capture a list of values from user with free input and suggestions

    Import

    Made with Combobox

    TagsInput is an opinionated component built on top of Combobox component. It has a limited set of features to cover only the basic use cases. If you need more advanced features, you can build your own component with Combobox. You can find examples of custom tags input components on the examples page.

    Usage

    TagsInput provides a way to enter multiple values. It can be used with suggestions or without them. -TagsInput is similar to MultiSelect, but it allows entering custom values.

    +TagsInput is similar to MultiSelect, but it allows entering custom values.

    import { TagsInput } from '@mantine/core';
     
     function Demo() {
    @@ -72,7 +72,7 @@
     

    With suggestions

    TagsInput can be used with suggestions, it will render suggestions list under input and allow to select suggestions with keyboard or mouse. Note that user is not limited to suggestions, it is still possible to -enter custom values. If you want to allow values only from suggestions, use MultiSelect component instead.

    +enter custom values. If you want to allow values only from suggestions, use MultiSelect component instead.

    import { TagsInput } from '@mantine/core';
     
     function Demo() {
    @@ -184,10 +184,10 @@
       );
     }

    Scrollable dropdown

    -

    By default, the options list is wrapped with ScrollArea.Autosize. +

    By default, the options list is wrapped with ScrollArea.Autosize. You can control dropdown max-height with maxDropdownHeight prop if you do not change the default settings.

    If you want to use native scrollbars, set withScrollArea={false}. Note that in this case, -you will need to change dropdown styles with Styles API.

    +you will need to change dropdown styles with Styles API.

    import { TagsInput } from '@mantine/core';
     
     const data = Array(100)
    @@ -250,13 +250,13 @@
         />
       );
     }
    -

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by TagsInput, for example withinPortal:

    import { TagsInput } from '@mantine/core';
    +

    Combobox props

    You can override Combobox props with comboboxProps. It is useful when you need to change some of the props that are not exposed by TagsInput, for example withinPortal:

    import { TagsInput } from '@mantine/core';
     
     function Demo() {
       return <TagsInput comboboxProps={{ withinPortal: false }} data={[]} />;
     }

    Input props

    -

    TagsInput component supports Input and Input.Wrapper components features and all input element props. TagsInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    TagsInput component supports Input and Input.Wrapper components features and all input element props. TagsInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    FirstSecond
    Variant
    Size
    Radius
    import { TagsInput } from '@mantine/core';
     
     function Demo() {
    @@ -322,7 +322,7 @@
         </>
       );
     }
    -

    Styles API

    TagsInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    TagsInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    TextInput

    Capture string input from user

    Import

    Usage

    -

    TextInput component supports Input and Input.Wrapper components features and all input element props. TextInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    TextInput

    Capture string input from user

    Import

    Usage

    +

    TextInput component supports Input and Input.Wrapper components features and all input element props. TextInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { TextInput } from '@mantine/core';
     
     function Demo() {
    @@ -70,7 +70,7 @@
     function Demo() {
       return <TextInput disabled label="Disabled input" placeholder="Disabled input" />;
     }
    -

    Styles API

    TextInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    TextInput supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    Text

    Display text

    Import

    Usage

    +

    Text

    Display text

    Import

    Usage

    Extra small text

    Small text

    Default text

    Large text

    Extra large text

    Semibold

    Bold

    Italic

    Underlined

    Strikethrough

    Dimmed text

    Blue text

    Teal 4 text

    Uppercase

    capitalized text

    Aligned to center

    Aligned to right

    import { Text } from '@mantine/core';
     
     function Demo() {
    @@ -29,7 +29,7 @@
         </>
       );
     }
    -

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Text will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Text styles.

    +

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, Text will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify Text styles.

    Gradient Text

    Gradient from
    Gradient to
    Gradient degree
    import { Text } from '@mantine/core';
     
     function Demo() {
    @@ -71,7 +71,7 @@
         </Text>
       );
     }
    -

    Line clamp can also be used with any children (not only strings), for example with TypographyStylesProvider:

    +

    Line clamp can also be used with any children (not only strings), for example with TypographyStylesProvider:

    Line clamp with TypographyStylesProvider

    Lorem ipsum dolor sit amet consectetur adipisicing elit. Nesciunt nulla quam aut sed corporis voluptates praesentium inventore, sapiente ex tempore sit consequatur debitis non! Illo cum ipsa reiciendis quidem facere, deserunt eos totam impedit. Vel ab, ipsum veniam aperiam odit molestiae incidunt minus, sint eos iusto earum quaerat vitae perspiciatis.

    import { TypographyStylesProvider, Text } from '@mantine/core';
     
     function Demo() {
    @@ -93,20 +93,20 @@
     

    Inherit styles

    Text always applies font-size, font-family and line-height styles, but in some cases this is not a desired behavior. To force Text to inherit parent -styles set inherit prop. For example, highlight part of Title:

    +styles set inherit prop. For example, highlight part of Title:

    Title in which you want to highlight something

    import { Text, Title } from '@mantine/core';
     
     function Demo() {
       return <Title order={3}>Title in which you want to <Text span c="blue" inherit>highlight</Text> something</Title>;
     }
    -

    Polymorphic component

    Text is a polymorphic component – its default root element is p, but it can be changed to any other element or component with component prop:

    import { Text } from '@mantine/core';
    +

    Polymorphic component

    Text is a polymorphic component – its default root element is p, but it can be changed to any other element or component with component prop:

    import { Text } from '@mantine/core';
     
     function Demo() {
       return <Text component="a" />;
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, TextProps does not extend React.ComponentPropsWithoutRef'<'div'>' although p is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { TextProps, ElementProps } from '@mantine/core';
     
     interface MyTextProps extends TextProps,
    -  ElementProps<'a', keyof TextProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'a', keyof TextProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    span prop

    Use span prop as a shorthand for component="span":

    import { Text } from '@mantine/core';
    @@ -118,4 +118,4 @@
           <Text component="span">Same as above</Text>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/textarea.html b/core/textarea/index.html similarity index 64% rename from core/textarea.html rename to core/textarea/index.html index c20c4d6b3c7..4ad4ca6c30d 100644 --- a/core/textarea.html +++ b/core/textarea/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Textarea

    Autosize or regular textarea

    Import

    Usage

    -

    Textarea component supports Input and Input.Wrapper components features and all textarea element props. Textarea documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    Textarea

    Autosize or regular textarea

    Import

    Usage

    +

    Textarea component supports Input and Input.Wrapper components features and all textarea element props. Textarea documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { Textarea } from '@mantine/core';
     
     function Demo() {
    @@ -46,7 +46,7 @@
     function Demo() {
       return <Textarea disabled/>;
     }
    -

    Styles API

    Textarea supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Textarea supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    ThemeIcon

    Render icon inside element with theme colors

    Import

    Usage

    +

    ThemeIcon

    Render icon inside element with theme colors

    Import

    Usage

    Radius
    Size
    Color
    import { ThemeIcon } from '@mantine/core';
     import { IconPhoto } from '@tabler/icons-react';
     
    @@ -14,7 +14,7 @@
         </ThemeIcon>
       );
     }
    -

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, ThemeIcon will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify ThemeIcon styles.

    +

    Gradient variant

    When variant prop is set to gradient, you can control gradient with gradient prop, it accepts an object with from, to and deg properties. If thegradient prop is not set, ThemeIcon will use theme.defaultGradient which can be configured on the theme object. gradient prop is ignored when variant is not gradient.

    Note that variant="gradient" supports only linear gradients with two colors. If you need a more complex gradient, then use Styles API to modify ThemeIcon styles.

    Gradient from
    Gradient to
    Gradient degree
    import { ThemeIcon } from '@mantine/core';
     import { IconHeart } from '@tabler/icons-react';
     
    @@ -29,4 +29,4 @@
           <IconHeart />
         </ThemeIcon>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/timeline.html b/core/timeline/index.html similarity index 67% rename from core/timeline.html rename to core/timeline/index.html index 19f3d9d41f0..e4f9f069c29 100644 --- a/core/timeline.html +++ b/core/timeline/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Timeline

    Display list of events in chronological order

    Import

    Usage

    +

    Timeline

    Display list of events in chronological order

    Import

    Usage

    New branch

    You've created new branch fix-notifications from master

    2 hours ago

    Commits

    You've pushed 23 commits to fix-notifications branch

    52 minutes ago

    Pull request

    You've submitted a pull request Fix incorrect notification message (#187)

    34 minutes ago

    Code review

    Robert Gluesticker left a code review on your pull request

    12 minutes ago

    import { Timeline, Text } from '@mantine/core';
     import { IconGitBranch, IconGitPullRequest, IconGitCommit, IconMessageDots } from '@tabler/icons-react';
     
    @@ -131,4 +131,4 @@
           <Timeline.Item title="Regular item">Third item</Timeline.Item>
         </Timeline>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/title.html b/core/title/index.html similarity index 51% rename from core/title.html rename to core/title/index.html index 24619174e3c..13d36a1a68d 100644 --- a/core/title.html +++ b/core/title/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Title

    h1-h6 heading

    Import

    Usage

    -

    Use Title component to render h1-h6 headings with Mantine theme styles. +

    Title

    h1-h6 heading

    Import

    Usage

    +

    Use Title component to render h1-h6 headings with Mantine theme styles. By default, Title has no margins and paddings. -You can change font-size, font-weight and line-height per heading with theme.headings.

    +You can change font-size, font-weight and line-height per heading with theme.headings.

    Set order prop to render a specific element (h1-h6), default order is 1:

    This is h1 title

    This is h2 title

    This is h3 title

    This is h4 title

    This is h5 title
    This is h6 title
    import { Title } from '@mantine/core';
     
    @@ -25,7 +25,7 @@
     

    Size

    You can change Title size independent of its order:

      -
    • If you set size to h1-h6, then component will add corresponding font-size and line-height from the theme
    • +
    • If you set size to h1-h6, then component will add corresponding font-size and line-height from the theme
    • If you set size to any other value, then line-height will be calculated based on ordersize will impact only font-size

    H3 heading with h1 font-size

    H1 heading with h4 font-size

    H1 heading with calc(0.75rem * var(--mantine-scale)) size

    import { Title } from '@mantine/core';
    @@ -40,4 +40,4 @@
           <Title size="calc(0.75rem * var(--mantine-scale))">H1 heading with calc(0.75rem * var(--mantine-scale)) size</Title>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/tooltip.html b/core/tooltip/index.html similarity index 77% rename from core/tooltip.html rename to core/tooltip/index.html index 42d791a4270..97b137b2141 100644 --- a/core/tooltip.html +++ b/core/tooltip/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Tooltip

    Renders tooltip at given element on mouse over or other event

    Import

    Usage

    +

    Tooltip

    Renders tooltip at given element on mouse over or other event

    Import

    Usage

    import { Tooltip, Button } from '@mantine/core';
     
     function Demo() {
    @@ -171,7 +171,7 @@
       );
     }

    Multiline

    -

    To enable multiline mode, set multiline prop to enable line breaks and w style prop to set tooltip width:

    +

    To enable multiline mode, set multiline prop to enable line breaks and w style prop to set tooltip width:

    import { Tooltip, Button } from '@mantine/core';
     
     function Demo() {
    @@ -207,7 +207,7 @@
       );
     }

    Change transition

    -

    Tooltip is built with Transition component, it supports transitionProps props:

    +

    Tooltip is built with Transition component, it supports transitionProps props:

    import { Tooltip, Button } from '@mantine/core';
     
     function Demo() {
    @@ -333,4 +333,4 @@
           <Button>Button with tooltip</Button>
         </Tooltip>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/transition.html b/core/transition/index.html similarity index 53% rename from core/transition.html rename to core/transition/index.html index 1ba34959614..3a055030e5c 100644 --- a/core/transition.html +++ b/core/transition/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Transition

    Animate presence of component with pre-made animations

    Import

    Premade transitions

    +

    Transition

    Animate presence of component with pre-made animations

    Import

    Premade transitions

    Mantine includes several premade transitions:

    fade
    scale
    scale-y
    scale-x
    skew-up
    skew-down
    rotate-left
    rotate-right
    slide-down
    slide-up
    slide-left
    slide-right
    pop
    pop-bottom-left
    pop-bottom-right
    pop-top-left
    pop-top-right

    To use one of them set transition property to one of these values:

    @@ -71,4 +71,4 @@ </Transition> </Box> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/typography-styles-provider.html b/core/typography-styles-provider/index.html similarity index 53% rename from core/typography-styles-provider.html rename to core/typography-styles-provider/index.html index e67fa59887b..79f3e838882 100644 --- a/core/typography-styles-provider.html +++ b/core/typography-styles-provider/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    TypographyStylesProvider

    Styles provider for html content

    Import

    Usage

    +

    TypographyStylesProvider

    Styles provider for html content

    Import

    Usage

    Mantine does not include typography global styles. Use TypographyStylesProvider to add typography styles to your html content:

    import { TypographyStylesProvider } from '@mantine/core';
    @@ -99,4 +99,4 @@ 
    Heading 6
    return <Avatar src={image} alt="it's me" />; }
    -
    Element positionElement nameSymbolAtomic mass
    6CarbonC12.011
    7NitrogenN14.007
    39YttriumY88.906
    56BariumBa137.33
    58CeriumCe140.12
    \ No newline at end of file +
    Element positionElement nameSymbolAtomic mass
    6CarbonC12.011
    7NitrogenN14.007
    39YttriumY88.906
    56BariumBa137.33
    58CeriumCe140.12
    \ No newline at end of file diff --git a/core/unstyled-button.html b/core/unstyled-button/index.html similarity index 51% rename from core/unstyled-button.html rename to core/unstyled-button/index.html index 74c0ac447d2..294df73a34f 100644 --- a/core/unstyled-button.html +++ b/core/unstyled-button/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    UnstyledButton

    Unstyled polymorphic button

    Import

    Usage

    +

    UnstyledButton

    Unstyled polymorphic button

    Import

    Usage

    UnstyledButton resets default button styles, it is used as a base for all other button components. You can use it to as a base for custom polymorphic buttons.

    @@ -12,18 +12,18 @@ function Demo() { return <UnstyledButton>Button without styles</UnstyledButton>; }
    -

    Polymorphic component

    UnstyledButton is a polymorphic component – its default root element is button, but it can be changed to any other element or component with component prop:

    import { UnstyledButton } from '@mantine/core';
    +

    Polymorphic component

    UnstyledButton is a polymorphic component – its default root element is button, but it can be changed to any other element or component with component prop:

    import { UnstyledButton } from '@mantine/core';
     
     function Demo() {
       return <UnstyledButton component="a" />;
     }

    Polymorphic components with TypeScript

    Note that polymorphic components props types are different from regular components – they do not extend HTML element props of the default element. For example, UnstyledButtonProps does not extend React.ComponentPropsWithoutRef'<'div'>' although button is the default element.

    If you want to create a wrapper for a polymorphic component that is not polymorphic (does not support component prop), then your component props interface should extend HTML element props, for example:

    import type { UnstyledButtonProps, ElementProps } from '@mantine/core';
     
     interface MyUnstyledButtonProps extends UnstyledButtonProps,
    -  ElementProps<'a', keyof UnstyledButtonProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    + ElementProps<'a', keyof UnstyledButtonProps> {}

    If you want your component to remain polymorphic after wrapping, use createPolymorphicComponent function described in this guide.

    Get element ref

    import { useRef } from 'react';
     import { UnstyledButton } from '@mantine/core';
     
     function Demo() {
       const ref = useRef<HTMLButtonElement>(null);
       return <UnstyledButton ref={ref} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/core/visually-hidden.html b/core/visually-hidden.html deleted file mode 100644 index bef917904d8..00000000000 --- a/core/visually-hidden.html +++ /dev/null @@ -1,19 +0,0 @@ -VisuallyHidden | Mantine

    VisuallyHidden

    Hide element visually but keep it accessible for screen readers

    Import

    Usage

    -

    VisuallyHidden is a utility component that hides content visually but leaves it available to screen readers.

    -

    For example, it can be used with ActionIcon component:

    -
    import { ActionIcon, VisuallyHidden } from '@mantine/core';
    -import { IconHeart } from '@tabler/icons';
    -
    -function Demo() {
    -  return (
    -    <ActionIcon>
    -      <IconHeart />
    -      <VisuallyHidden>Like post</VisuallyHidden>
    -    </ActionIcon>
    -  );
    -}
    \ No newline at end of file diff --git a/core/visually-hidden/index.html b/core/visually-hidden/index.html new file mode 100644 index 00000000000..52693f22253 --- /dev/null +++ b/core/visually-hidden/index.html @@ -0,0 +1,19 @@ +VisuallyHidden | Mantine

    VisuallyHidden

    Hide element visually but keep it accessible for screen readers

    Import

    Usage

    +

    VisuallyHidden is a utility component that hides content visually but leaves it available to screen readers.

    +

    For example, it can be used with ActionIcon component:

    +
    import { ActionIcon, VisuallyHidden } from '@mantine/core';
    +import { IconHeart } from '@tabler/icons';
    +
    +function Demo() {
    +  return (
    +    <ActionIcon>
    +      <IconHeart />
    +      <VisuallyHidden>Like post</VisuallyHidden>
    +    </ActionIcon>
    +  );
    +}
    \ No newline at end of file diff --git a/dates/calendar.html b/dates/calendar/index.html similarity index 76% rename from dates/calendar.html rename to dates/calendar/index.html index c3e865eebe8..4881311d0d5 100644 --- a/dates/calendar.html +++ b/dates/calendar/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Calendar

    Base component for custom date pickers

    Import

    Usage

    -

    Use Calendar component to create custom date pickers if DatePicker -component does not meet your requirements. Calendar supports all DatePicker +

    Calendar

    Base component for custom date pickers

    Import

    Usage

    +

    Use Calendar component to create custom date pickers if DatePicker +component does not meet your requirements. Calendar supports all DatePicker props and some other props that are listed in props table – check it out to learn about all component features.

    -

    By default, Calendar works the same way as DatePicker component but does not +

    By default, Calendar works the same way as DatePicker component but does not include any logic of dates selection:

    -
    MoTuWeThFrSaSu
    import { Calendar } from '@mantine/dates';
    +
    MoTuWeThFrSaSu
    import { Calendar } from '@mantine/dates';
     
     function Demo() {
       return <Calendar />;
    @@ -17,7 +17,7 @@
     

    Custom date pickers

    Use Calendar as a base for custom date pickers. For example, you can create a date picker that allows user to pick three or less dates:

    -
    MoTuWeThFrSaSu
    import dayjs from 'dayjs';
    +
    MoTuWeThFrSaSu
    import dayjs from 'dayjs';
     import { useState } from 'react';
     import { Calendar } from '@mantine/dates';
     
    @@ -42,7 +42,7 @@
       );
     }

    Another custom date picker example – week picker:

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { Calendar } from '@mantine/dates';
     import dayjs from 'dayjs';
     
    @@ -95,7 +95,7 @@
     

    Set static prop to display a calendar that user cannot interact with. It is useful when you want to display data with in calendar view but do not want it to be interactive.

    -
    MoTuWeThFrSaSu
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    1
    import { Indicator } from '@mantine/core';
    +
    MoTuWeThFrSaSu
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    1
    import { Indicator } from '@mantine/core';
     import { Calendar } from '@mantine/dates';
     
     function Demo() {
    @@ -112,4 +112,4 @@
           }}
         />
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/date-input.html b/dates/date-input/index.html similarity index 74% rename from dates/date-input.html rename to dates/date-input/index.html index c9e8270b9a5..8b60033fbde 100644 --- a/dates/date-input.html +++ b/dates/date-input/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    DateInput

    Free form date input

    Import

    DatePicker props

    -

    DateInput supports most of the DatePicker props, -read through DatePicker documentation to learn about all component features that are not listed on this page.

    +

    DateInput

    Free form date input

    Import

    DatePicker props

    +

    DateInput supports most of the DatePicker props, +read through DatePicker documentation to learn about all component features that are not listed on this page.

    Usage

    import { useState } from 'react';
     import { DateInput } from '@mantine/dates';
    @@ -72,7 +72,7 @@
     

    Allow clear

    Set clearable prop to allow removing value from the input. Input will be cleared if user selects the same date in dropdown or clears input value:

    -
    import { DateInput } from '@mantine/dates';
    +
    import { DateInput } from '@mantine/dates';
     
     function Demo() {
       return (
    @@ -103,7 +103,7 @@
       return <DateInput label="Disabled" placeholder="Date input" disabled />;
     }

    Input props

    -

    DateInput component supports Input and Input.Wrapper components features and all input element props. DateInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    DateInput component supports Input and Input.Wrapper components features and all input element props. DateInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { DateInput } from '@mantine/dates';
     
     function Demo() {
    @@ -137,4 +137,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <DateInput label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/date-picker-input.html b/dates/date-picker-input/index.html similarity index 76% rename from dates/date-picker-input.html rename to dates/date-picker-input/index.html index 27f4a0e6bea..8af522b12ce 100644 --- a/dates/date-picker-input.html +++ b/dates/date-picker-input/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    DatePickerInput

    Date, multiple dates and dates range picker input

    Import

    DatePicker props

    -

    DatePickerInput supports most of the DatePicker props, -read through DatePicker documentation to learn about all component features that are not listed on this page.

    +

    DatePickerInput

    Date, multiple dates and dates range picker input

    Import

    DatePicker props

    +

    DatePickerInput supports most of the DatePicker props, +read through DatePicker documentation to learn about all component features that are not listed on this page.

    Usage

    import { useState } from 'react';
     import { DatePickerInput } from '@mantine/dates';
    @@ -56,8 +56,8 @@
       );
     }

    Open picker in modal

    -

    By default, DatePicker is rendered inside Popover. -You can change that to Modal by setting dropdownType="modal":

    +

    By default, DatePicker is rendered inside Popover. +You can change that to Modal by setting dropdownType="modal":

    import { useState } from 'react';
     import { DatePickerInput } from '@mantine/dates';
     
    @@ -90,7 +90,7 @@
     

    Clearable

    Set clearable prop to display clear button in the right section. Note that if you set rightSection prop, clear button will not be displayed.

    -
    import { DatePickerInput } from '@mantine/dates';
    +
    import { DatePickerInput } from '@mantine/dates';
     
     function Demo() {
       return (
    @@ -117,7 +117,7 @@
       );
     }

    Input props

    -

    DatePickerInput component supports Input and Input.Wrapper components features and all button element props. DatePickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    DatePickerInput component supports Input and Input.Wrapper components features and all button element props. DatePickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Radius
    Size
    import { DatePickerInput } from '@mantine/dates';
     
     function Demo() {
    @@ -171,4 +171,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <DatePickerInput label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/date-picker.html b/dates/date-picker/index.html similarity index 92% rename from dates/date-picker.html rename to dates/date-picker/index.html index b05ee18550e..f7a15028d34 100644 --- a/dates/date-picker.html +++ b/dates/date-picker/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    DatePicker

    Inline date, multiple dates and dates range picker

    Import

    Usage

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +

    DatePicker

    Inline date, multiple dates and dates range picker

    Import

    Usage

    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -15,7 +15,7 @@
     

    Set allowDeselect to allow user to deselect current selected date by clicking on it. allowDeselect is disregarded when type prop is range or multiple. When date is deselected onChange is called with null.

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -24,7 +24,7 @@
     }

    Multiple dates

    Set type="multiple" to allow user to pick multiple dates:

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -33,7 +33,7 @@
     }

    Dates range

    Set type="range" to allow user to pick dates range:

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -44,7 +44,7 @@
     

    By default, it is not allowed to select single date as range – when user clicks the same date second time it is deselected. To change this behavior set allowSingleDateInRange prop. allowSingleDateInRange is ignored when type prop is not range.

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -70,7 +70,7 @@
     

    Set date, and onDateChange props to make currently displayed month, year and decade controlled. By doing so, you can customize date picking experience, for example, when user selects first date in range, you can add one month to the current date value:

    -
    MoTuWeThFrSaSu
    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -110,7 +110,7 @@
     }

    Hide outside dates

    Set hideOutsideDates prop to remove all dates that do not belong to the current month:

    -
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
    +
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
     
     function Demo() {
       return <DatePicker hideOutsideDates />;
    @@ -118,8 +118,8 @@
     

    First day of week

    Set firstDayOfWeek prop to configure first day of week. The prop accepts number from 0 to 6, where 0 is Sunday and 6 is Saturday. Default value is 1 – Monday. You can also configure this option -for all components with DatesProvider.

    -
    SuMoTuWeThFrSa
    SaSuMoTuWeThFr
    import { Group } from '@mantine/core';
    +for all components with DatesProvider.

    +
    SuMoTuWeThFrSa
    SaSuMoTuWeThFr
    import { Group } from '@mantine/core';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -132,7 +132,7 @@
     }

    Hide weekdays

    Set hideWeekdays prop to hide weekdays names:

    -
    import { DatePicker } from '@mantine/dates';
    +
    import { DatePicker } from '@mantine/dates';
     
     function Demo() {
       return <DatePicker hideWeekdays />;
    @@ -140,16 +140,16 @@
     

    Weekend days

    Use weekendDays prop to configure weekend days. The prop accepts an array of numbers from 0 to 6, where 0 is Sunday and 6 is Saturday. Default value is [0, 6] – Saturday and Sunday. You can also configure this option -for all components with DatesProvider.

    -
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
    +for all components with DatesProvider.

    +
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
     
     function Demo() {
       return <DatePicker weekendDays={[1, 2]} />;
     }

    Render day function

    You can customize day rendering with renderDay prop. For example, it can be used to add -Indicator to certain days.

    -
    MoTuWeThFrSaSu
    import { Indicator } from '@mantine/core';
    +Indicator to certain days.

    +
    MoTuWeThFrSaSu
    import { Indicator } from '@mantine/core';
     import { DatePicker, DatePickerProps } from '@mantine/dates';
     
     const dayRenderer: DatePickerProps['renderDay'] = (date) => {
    @@ -251,7 +251,7 @@
     }

    Number of columns

    Set numberOfColumns prop to define number of pickers that will be rendered side by side:

    -
    MoTuWeThFrSaSu
    MoTuWeThFrSaSu

    Demo is not available on small screens. Make your screen larger to see the demo.

    import { useState } from 'react';
    +
    MoTuWeThFrSaSu
    MoTuWeThFrSaSu

    Demo is not available on small screens. Make your screen larger to see the demo.

    import { useState } from 'react';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -261,7 +261,7 @@
       );
     }

    Max level

    -
    MoTuWeThFrSaSu
    September 2023
    MoTuWeThFrSaSu
    import { Group } from '@mantine/core';
    +
    MoTuWeThFrSaSu
    September 2023
    MoTuWeThFrSaSu
    import { Group } from '@mantine/core';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -273,14 +273,14 @@
       );
     }

    Size

    -
    MoTuWeThFrSaSu
    Size
    import { DatePicker } from '@mantine/dates';
    +
    MoTuWeThFrSaSu
    Size
    import { DatePicker } from '@mantine/dates';
     
     function Demo() {
       return <DatePicker defaultValue={new Date()} />;
     }

    Change year and months controls format

    Use yearsListFormat and monthsListFormat props to change dayjs format of year/month controls:

    -
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
    +
    MoTuWeThFrSaSu
    import { DatePicker } from '@mantine/dates';
     
     function Demo() {
       return <DatePicker monthsListFormat="MM" yearsListFormat="YY" />;
    @@ -304,9 +304,9 @@
       );
     }

    Localization

    -

    Usually it is better to specify @mantine/dates package locale in DatesProvider, +

    Usually it is better to specify @mantine/dates package locale in DatesProvider, but you can also override locale per component:

    -
    пнвтсрчтптсбвс
    import 'dayjs/locale/ru';
    +
    пнвтсрчтптсбвс
    import 'dayjs/locale/ru';
     import { DatePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -354,4 +354,4 @@
     }

    Keyboard interactions

    Note that the following events will only trigger if focus is on date control.

    -
    KeyDescription
    ArrowRightFocuses next non-disabled date
    ArrowLeftFocuses previous non-disabled date
    ArrowDownFocuses next non-disabled date in the same column
    ArrowUpFocuses previous non-disabled date in the same column
    \ No newline at end of file +
    KeyDescription
    ArrowRightFocuses next non-disabled date
    ArrowLeftFocuses previous non-disabled date
    ArrowDownFocuses next non-disabled date in the same column
    ArrowUpFocuses previous non-disabled date in the same column
    \ No newline at end of file diff --git a/dates/date-time-picker.html b/dates/date-time-picker/index.html similarity index 73% rename from dates/date-time-picker.html rename to dates/date-time-picker/index.html index 3ca07b42e28..81d017e8029 100644 --- a/dates/date-time-picker.html +++ b/dates/date-time-picker/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    DateTimePicker

    Capture datetime from the user

    Import

    DatePicker props

    -

    DateTimePicker supports most of the DatePicker props, -read through DatePicker documentation to learn about all component features that are not listed on this page.

    +

    DateTimePicker

    Capture datetime from the user

    Import

    DatePicker props

    +

    DateTimePicker supports most of the DatePicker props, +read through DatePicker documentation to learn about all component features that are not listed on this page.

    Usage

    import { DateTimePicker } from '@mantine/dates';
     
    @@ -38,7 +38,7 @@
       return <DateTimePicker label="Disabled" placeholder="Pick date and time" disabled />;
     }

    Input props

    -

    DateTimePicker component supports Input and Input.Wrapper components features and all button element props. DateTimePicker documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    DateTimePicker component supports Input and Input.Wrapper components features and all button element props. DateTimePicker documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { DateTimePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -53,7 +53,7 @@
     

    Clearable

    Set clearable prop to display clear button in the right section. Note that if you set rightSection prop, clear button will not be displayed.

    -
    import { DateTimePicker } from '@mantine/dates';
    +
    import { DateTimePicker } from '@mantine/dates';
     
     function Demo() {
       return (
    @@ -66,8 +66,8 @@
       );
     }

    Open picker in modal

    -

    By default, picker is rendered inside Popover. -You can change that to Modal by setting dropdownType="modal":

    +

    By default, picker is rendered inside Popover. +You can change that to Modal by setting dropdownType="modal":

    import { DateTimePicker } from '@mantine/dates';
     
     function Demo() {
    @@ -101,4 +101,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <DateTimePicker label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/dates-provider.html b/dates/dates-provider/index.html similarity index 62% rename from dates/dates-provider.html rename to dates/dates-provider/index.html index fce19045435..d1410130f65 100644 --- a/dates/dates-provider.html +++ b/dates/dates-provider/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    DatesProvider

    Settings provider for @mantine/dates components

    Import

    Usage

    +

    DatesProvider

    Settings provider for @mantine/dates components

    Import

    Usage

    DatesProvider component lets you set various settings that are shared across all components exported from @mantine/dates package. DatesProvider supports the following settings:

    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/getting-started.html b/dates/getting-started/index.html similarity index 61% rename from dates/getting-started.html rename to dates/getting-started/index.html index 77b7312b486..45d7a9abbee 100644 --- a/dates/getting-started.html +++ b/dates/getting-started/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Getting started

    License

    Installation

    +

    Getting started

    License

    Installation

    yarn add @mantine/dates dayjs

    After installation import package styles at the root of your application:

    import '@mantine/dates/styles.css';
    @@ -28,10 +28,10 @@ dayjs is a required dependency – you cannot change it to another date library. If you want to use a different date library in your application, you will need to install it separately.

    Custom parse format

    -

    Some components like DateInput require custom parse format +

    Some components like DateInput require custom parse format dayjs plugin. You need to extend dayjs with this plugin before using components that require it. Note that it is usually done once in your application root file, so you don't need to do it every time you use component.

    import dayjs from 'dayjs';
     import customParseFormat from 'dayjs/plugin/customParseFormat';
     
    -dayjs.extend(customParseFormat);
    \ No newline at end of file +dayjs.extend(customParseFormat);
    \ No newline at end of file diff --git a/dates/month-picker-input.html b/dates/month-picker-input/index.html similarity index 76% rename from dates/month-picker-input.html rename to dates/month-picker-input/index.html index 9084d2b0594..6e0bb66c51f 100644 --- a/dates/month-picker-input.html +++ b/dates/month-picker-input/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    MonthPickerInput

    Month, multiple months and months range picker input

    Import

    MonthPicker props

    -

    MonthPickerInput supports most of the MonthPicker props, -read through MonthPicker documentation to learn about all component features that are not listed on this page.

    +

    MonthPickerInput

    Month, multiple months and months range picker input

    Import

    MonthPicker props

    +

    MonthPickerInput supports most of the MonthPicker props, +read through MonthPicker documentation to learn about all component features that are not listed on this page.

    Usage

    import { useState } from 'react';
     import { MonthPickerInput } from '@mantine/dates';
    @@ -56,8 +56,8 @@
       );
     }

    Open picker in modal

    -

    By default, MonthPicker is rendered inside Popover. -You can change that to Modal by setting dropdownType="modal":

    +

    By default, MonthPicker is rendered inside Popover. +You can change that to Modal by setting dropdownType="modal":

    import { useState } from 'react';
     import { MonthPickerInput } from '@mantine/dates';
     
    @@ -90,7 +90,7 @@
     

    Clearable

    Set clearable prop to display clear button in the right section. Note that if you set rightSection prop, clear button will not be displayed.

    -
    import { MonthPickerInput } from '@mantine/dates';
    +
    import { MonthPickerInput } from '@mantine/dates';
     
     function Demo() {
       return (
    @@ -117,7 +117,7 @@
       );
     }

    Input props

    -

    MonthPickerInput component supports Input and Input.Wrapper components features and all button element props. MonthPickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    MonthPickerInput component supports Input and Input.Wrapper components features and all button element props. MonthPickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Radius
    Size
    import { MonthPickerInput } from '@mantine/dates';
     
     function Demo() {
    @@ -171,4 +171,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <MonthPickerInput label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/month-picker.html b/dates/month-picker/index.html similarity index 87% rename from dates/month-picker.html rename to dates/month-picker/index.html index 6ec29b4d37a..94e6aa0aaaf 100644 --- a/dates/month-picker.html +++ b/dates/month-picker/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    MonthPicker

    Inline month, multiple months and months range picker

    Import

    Usage

    +

    MonthPicker

    Inline month, multiple months and months range picker

    Import

    Usage

    import { useState } from 'react';
     import { MonthPicker } from '@mantine/dates';
     
    @@ -213,7 +213,7 @@
       );
     }

    Localization

    -

    Usually it is better to specify @mantine/dates package locale in DatesProvider, +

    Usually it is better to specify @mantine/dates package locale in DatesProvider, but you can also override locale per component:

    import 'dayjs/locale/ru';
     import { MonthPicker } from '@mantine/dates';
    @@ -257,4 +257,4 @@
     }

    Keyboard interactions

    Note that the following events will only trigger if focus is on month control.

    -
    KeyDescription
    ArrowRightFocuses next non-disabled month
    ArrowLeftFocuses previous non-disabled month
    ArrowDownFocuses next non-disabled month in the same column
    ArrowUpFocuses previous non-disabled month in the same column
    \ No newline at end of file +
    KeyDescription
    ArrowRightFocuses next non-disabled month
    ArrowLeftFocuses previous non-disabled month
    ArrowDownFocuses next non-disabled month in the same column
    ArrowUpFocuses previous non-disabled month in the same column
    \ No newline at end of file diff --git a/dates/time-input.html b/dates/time-input/index.html similarity index 70% rename from dates/time-input.html rename to dates/time-input/index.html index c47ceffad3a..2f83f512e53 100644 --- a/dates/time-input.html +++ b/dates/time-input/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    TimeInput

    Capture time from the user

    Import

    Usage

    -

    TimeInput component supports Input and Input.Wrapper components features and all input element props. TimeInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    TimeInput

    Capture time from the user

    Import

    Usage

    +

    TimeInput component supports Input and Input.Wrapper components features and all input element props. TimeInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Input description

    Variant
    Size
    Radius
    import { TimeInput } from '@mantine/dates';
     
     function Demo() {
    @@ -82,4 +82,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <TimeInput label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/year-picker-input.html b/dates/year-picker-input/index.html similarity index 76% rename from dates/year-picker-input.html rename to dates/year-picker-input/index.html index bb1efb5135e..b0154f01c8c 100644 --- a/dates/year-picker-input.html +++ b/dates/year-picker-input/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    YearPickerInput

    Inline year, multiple years and years range picker

    Import

    YearPicker props

    -

    YearPickerInput supports most of the YearPicker props, -read through YearPicker documentation to learn about all component features that are not listed on this page.

    +

    YearPickerInput

    Inline year, multiple years and years range picker

    Import

    YearPicker props

    +

    YearPickerInput supports most of the YearPicker props, +read through YearPicker documentation to learn about all component features that are not listed on this page.

    Usage

    import { useState } from 'react';
     import { YearPickerInput } from '@mantine/dates';
    @@ -56,8 +56,8 @@
       );
     }

    Open picker in modal

    -

    By default, YearPicker is rendered inside Popover. -You can change that to Modal by setting dropdownType="modal":

    +

    By default, YearPicker is rendered inside Popover. +You can change that to Modal by setting dropdownType="modal":

    import { useState } from 'react';
     import { YearPickerInput } from '@mantine/dates';
     
    @@ -85,7 +85,7 @@
     

    Clearable

    Set clearable prop to display clear button in the right section. Note that if you set rightSection prop, clear button will not be displayed.

    -
    import { YearPickerInput } from '@mantine/dates';
    +
    import { YearPickerInput } from '@mantine/dates';
     
     function Demo() {
       return (
    @@ -112,7 +112,7 @@
       );
     }

    Input props

    -

    MonthPickerInput component supports Input and Input.Wrapper components features and all button element props. MonthPickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    +

    MonthPickerInput component supports Input and Input.Wrapper components features and all button element props. MonthPickerInput documentation does not include all features supported by the component – see Input documentation to learn about all available features.

    Radius
    Size
    import { YearPickerInput } from '@mantine/dates';
     
     function Demo() {
    @@ -166,4 +166,4 @@
     // Accessible input – it has associated label element
     function Demo() {
       return <YearPickerInput label="My input" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/dates/year-picker.html b/dates/year-picker/index.html similarity index 85% rename from dates/year-picker.html rename to dates/year-picker/index.html index 58c377c8543..295ddba1470 100644 --- a/dates/year-picker.html +++ b/dates/year-picker/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    YearPicker

    Inline year, multiple years and years range picker

    Import

    Usage

    +

    YearPicker

    Inline year, multiple years and years range picker

    Import

    Usage

    2020 – 2029
    import { useState } from 'react';
     import { YearPicker } from '@mantine/dates';
     
    @@ -205,4 +205,4 @@
     }

    Keyboard interactions

    Note that the following events will only trigger if focus is on year control.

    -
    KeyDescription
    ArrowRightFocuses next non-disabled year
    ArrowLeftFocuses previous non-disabled year
    ArrowDownFocuses next non-disabled year in the same column
    ArrowUpFocuses previous non-disabled year in the same column
    \ No newline at end of file +
    KeyDescription
    ArrowRightFocuses next non-disabled year
    ArrowLeftFocuses previous non-disabled year
    ArrowDownFocuses next non-disabled year in the same column
    ArrowUpFocuses previous non-disabled year in the same column
    \ No newline at end of file diff --git a/form/create-form-context.html b/form/create-form-context/index.html similarity index 61% rename from form/create-form-context.html rename to form/create-form-context/index.html index 26049e3973c..13f1c6659fc 100644 --- a/form/create-form-context.html +++ b/form/create-form-context/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Form context

    Add context support to use-form with createFormContext

    Usage

    +

    Form context

    Add context support to use-form with createFormContext

    Usage

    createFormContext function creates context provider and hook to get form object from context:

    import { createFormContext } from '@mantine/form';
     import { TextInput } from '@mantine/core';
    @@ -86,4 +86,4 @@
           </form>
         </UserFormProvider>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/form/errors.html b/form/errors/index.html similarity index 66% rename from form/errors.html rename to form/errors/index.html index 4ae3817539a..836670ac2cc 100644 --- a/form/errors.html +++ b/form/errors/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Form errors

    Manipulate form errors with use-form hook

    Errors object

    +

    Form errors

    Manipulate form errors with use-form hook

    Errors object

    form.errors is an object of React nodes that contains validation errors:

    import { useForm } from '@mantine/form';
     
    @@ -28,7 +28,7 @@
     //   lastName: 'Last name is too short'
     // }

    Initial errors

    -

    Same as with initial values you can set initial form errors:

    +

    Same as with initial values you can set initial form errors:

    import { useForm } from '@mantine/form';
     
     const form = useForm({
    @@ -96,4 +96,4 @@
     
     const form = useForm();
     
    -const handleErrors = (errors: typeof form.errors) => {};
    \ No newline at end of file +const handleErrors = (errors: typeof form.errors) => {};
    \ No newline at end of file diff --git a/form/nested.html b/form/nested/index.html similarity index 71% rename from form/nested.html rename to form/nested/index.html index 73ccffdeaab..dfe5b56318e 100644 --- a/form/nested.html +++ b/form/nested/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Nested fields

    Manage nested arrays and object state with use-form hook

    Properties paths

    +

    Nested fields

    Manage nested arrays and object state with use-form hook

    Properties paths

    Most of form handlers accept property path as the first argument. Property path includes keys/indices of objects/arrays at which target property is contained:

    import { useForm } from '@mantine/form';
    @@ -130,7 +130,7 @@
         {
           "name": "",
           "active": false,
    -      "key": "mantine-57tkpn0nq"
    +      "key": "mantine-cswvhnwp4"
         }
       ]
     }
    import { useForm } from '@mantine/form';
    @@ -234,4 +234,4 @@
     // {
     //  'users.0.age': 'User must be 18 or older',
     //  'users.1.name': 'Name should have at least 2 letters'
    -// }
    \ No newline at end of file +// }
    \ No newline at end of file diff --git a/form/recipes.html b/form/recipes/index.html similarity index 77% rename from form/recipes.html rename to form/recipes/index.html index 95ebce60a2e..884018665c5 100644 --- a/form/recipes.html +++ b/form/recipes/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Recipes

    use-form examples

    Set initial values with async request

    +

    Recipes

    use-form examples

    Set initial values with async request

    import { useEffect } from 'react';
     import { useForm } from '@mantine/form';
     import { TextInput, Checkbox, Box } from '@mantine/core';
    @@ -260,4 +260,4 @@
           </Group>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/form/status.html b/form/status/index.html similarity index 65% rename from form/status.html rename to form/status/index.html index 167941735fa..6771df3ee04 100644 --- a/form/status.html +++ b/form/status/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Touched & dirty

    Get fields and form touched and dirty status

    Touched and dirty state

    +

    Touched & dirty

    Get fields and form touched and dirty status

    Touched and dirty state

    form.isTouched and form.isDirty fields provide information about current field status:

    • Field is considered to be touched when user focused it or its value was changed programmatically with form.setFieldValue handler
    • @@ -55,7 +55,7 @@ form.isDirty(); // -> was any field in form modified?

    Initial values

    You can provide initial touched and dirty values with initialTouched and initialDirty properties. -Both properties support the same fields path format as errors:

    +Both properties support the same fields path format as errors:

    import { useForm } from '@mantine/form';
     
     const form = useForm({
    @@ -96,4 +96,4 @@
     form.isDirty(); // -> false
     
     form.setValues({ a: 3 });
    -form.isDirty(); // -> true
    \ No newline at end of file +form.isDirty(); // -> true
    \ No newline at end of file diff --git a/form/use-form.html b/form/use-form/index.html similarity index 72% rename from form/use-form.html rename to form/use-form/index.html index 9c60d27d81e..c071f87a5de 100644 --- a/form/use-form.html +++ b/form/use-form/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-form

    Manage form state

    License

    Installation

    +

    use-form

    Manage form state

    License

    Installation

    @mantine/form package does not depend on any other libraries, you can use it with or without @mantine/core inputs:

    yarn add @mantine/form

    Usage

    @@ -65,7 +65,7 @@ }, });

    Values

    -

    Form values guide

    +

    Form values guide

    // get current form values
     form.values;
     
    @@ -86,7 +86,7 @@
     // resets touched and dirty state
     form.reset();

    List items

    -

    Nested fields guide

    +

    Nested fields guide

    // Inserts given list item at the specified path
     form.insertListItem('fruits', { name: 'Apple', available: true });
     
    @@ -102,7 +102,7 @@
     // You should make sure that there are elements at at the `from` and `to` index.
     form.reorderListItem('fruits', { from: 1, to: 0 });

    Validation

    -

    Form validation guide

    +

    Form validation guide

    import { useForm } from '@mantine/form';
     
     const form = useForm({
    @@ -131,7 +131,7 @@
     form.isValid();
     form.isValid('user.firstName');

    Errors

    -

    Form errors guide

    +

    Form errors guide

    Validation errors occur when defined validation rules were violated, initialErrors were specified in useForm properties or validation errors were set manually.

    // get current errors state
    @@ -158,7 +158,7 @@
     )}></form>
     <form onReset={form.onReset}></form>

    Touched and dirty

    -

    Touched & dirty guide

    +

    Touched & dirty guide

    // Returns true if user interacted with any field inside form in any way
     form.isTouched();
     
    @@ -222,4 +222,4 @@
           <OccupationInput form={form} />
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/form/validation.html b/form/validation/index.html similarity index 88% rename from form/validation.html rename to form/validation/index.html index be8b9fe7375..86358443c0d 100644 --- a/form/validation.html +++ b/form/validation/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Form validation

    Validate fields with use-form hook

    Validation with rules object

    +

    Form validation

    Validate fields with use-form hook

    Validation with rules object

    To validate form with rules object, provide an object of functions which take field value as an argument and return error message (any React node) or null if field is valid:

    import { useForm } from '@mantine/form';
    @@ -655,4 +655,4 @@
     form.isValid(); // -> false
     
     // get validation status of field
    -form.isValid('name'); // -> false
    \ No newline at end of file +form.isValid('name'); // -> false
    \ No newline at end of file diff --git a/form/validators.html b/form/validators/index.html similarity index 74% rename from form/validators.html rename to form/validators/index.html index e68cb99f78e..bbeee2a743a 100644 --- a/form/validators.html +++ b/form/validators/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Form validators

    Premade validation functions

    Usage

    -

    @mantine/form package exports several functions that can be used in validation rules object. -Validation functions are tiny in size and provide basic validation, if you have complex validation requirements, use other types of validation.

    +

    Form validators

    Premade validation functions

    Usage

    +

    @mantine/form package exports several functions that can be used in validation rules object. +Validation functions are tiny in size and provide basic validation, if you have complex validation requirements, use other types of validation.

    import { useForm, isNotEmpty, isEmail, isInRange, hasLength, matches } from '@mantine/form';
     import { Button, Group, TextInput, NumberInput, Box } from '@mantine/core';
     
    @@ -234,4 +234,4 @@
       validate: {
         confirmPassword: matchesField('password', 'Passwords are not the same'),
       },
    -});
    \ No newline at end of file +});
    \ No newline at end of file diff --git a/form/values.html b/form/values/index.html similarity index 76% rename from form/values.html rename to form/values/index.html index b07a0ed1abd..826284981f2 100644 --- a/form/values.html +++ b/form/values/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Form values

    Manipulate form values with use-form

    Initial values

    +

    Form values

    Manipulate form values with use-form

    Initial values

    In most cases you should set initialValues:

    import { useForm } from '@mantine/form';
     
    @@ -207,7 +207,7 @@
       const handleSubmit = (values: FormValues) => console.log(values);
     }

    Get transformed values type

    -

    To get transformed values (output of transformValues) use TransformedValues type. +

    To get transformed values (output of transformValues) use TransformedValues type. It is useful when you want to create a custom submit function:

    import { useForm, TransformedValues } from '@mantine/form';
     
    @@ -260,4 +260,4 @@
           jobs: [],
         },
       });
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/getting-started.html b/getting-started/index.html similarity index 83% rename from getting-started.html rename to getting-started/index.html index c1ebb66daa1..eab6508cb9b 100644 --- a/getting-started.html +++ b/getting-started/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Getting started

    +

    Getting started

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates include required dependencies and pre-configured settings. @@ -15,17 +15,17 @@

    To get started with a template, open it on GitHub and click on the "Use this template" button. Note that you need to be logged in to your GitHub account to use this feature. If you are not familiar with GitHub, you can find a detailed instruction on how to -bootstrap a project from a template on this page.

    +bootstrap a project from a template on this page.

    Templates list:

    next-app-template

    Next.js template with app router and full setup: Jest, Storybook, ESLint

    Use template

    next-pages-template

    Next.js template with pages router and full setup: Jest, Storybook, ESLint

    Use template

    next-app-min-template

    Next.js template with app router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-pages-min-template

    Next.js template with pages router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-vanilla-extract-template

    Next.js template with Vanilla extract example

    Use template

    vite-template

    Vite template with full setup: Jest, Storybook, ESLint

    Use template

    vite-min-template

    Vite template with minimal setup – no additional tools included, only default Vite configuration

    Use template

    vite-vanilla-extract-template

    Vite template with Vanilla extract example

    Use template

    remix-template

    Remix template with full setup: Jest, Storybook, ESLint

    Use template

    remix-min-template

    Remix template with minimal setup – no additional tools included, only default Remix configuration

    Use template

    gatsby-template

    Gatsby template with basic setup

    Use template

    redwood-template

    RedwoodJS template with basic setup

    Use template

    Framework guide

    Follow one of the guides below to get started with Mantine and your preferred framework. Note that usually it is better to start a new project with a template. Use guides if you want to add Mantine to an existing project or if enjoy doing things manually.

    - +

    Get started without framework

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks
    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars

    Create postcss.config.js file at the root of your application with the following content:

    module.exports = {
    @@ -54,7 +54,7 @@
     // import '@mantine/dropzone/styles.css';
     // import '@mantine/code-highlight/styles.css';
     // ...
    -

    Wrap your application with MantineProvider:

    +

    Wrap your application with MantineProvider:

    import { MantineProvider, createTheme } from '@mantine/core';
     
     const theme = createTheme({
    @@ -68,7 +68,7 @@
         </MantineProvider>
       );
     }
    -

    If your application has server side rendering, add ColorSchemeScript +

    If your application has server side rendering, add ColorSchemeScript to the <head /> of your application:

    import { ColorSchemeScript } from '@mantine/core';
     
    @@ -94,14 +94,14 @@
     

    Before you jump into the code, it is recommended to learn more about Mantine theming and styling options. The most important documentation pages are:

      -
    • API overview – overview of the most important Mantine styling and theming features
    • -
    • Theme object – learn about available theme properties
    • -
    • Colors – learn how to add/replace colors in the theme object
    • -
    • CSS modules – learn how to use CSS modules with Mantine
    • -
    • postcss-preset-mantine – learn about postcss-preset-mantine functions and mixins
    • -
    • Responsive styles – learn how to apply responsive styles to components
    • -
    • Styles API – learn how to style internal elements of any component
    • -
    • Polymorphic components – learn how to use polymorphic components to change rendered element
    • +
    • API overview – overview of the most important Mantine styling and theming features
    • +
    • Theme object – learn about available theme properties
    • +
    • Colors – learn how to add/replace colors in the theme object
    • +
    • CSS modules – learn how to use CSS modules with Mantine
    • +
    • postcss-preset-mantine – learn about postcss-preset-mantine functions and mixins
    • +
    • Responsive styles – learn how to apply responsive styles to components
    • +
    • Styles API – learn how to style internal elements of any component
    • +
    • Polymorphic components – learn how to use polymorphic components to change rendered element

    Get help

    @@ -121,7 +121,7 @@ bug reports and feature requests, it is always nice to hear that people enjoy working with Mantine.
  • Star the project on GitHub. It is a small thing that helps us grow and get more people interested in the project.
  • -
  • Contribute to the Mantine codebase. We welcome all kinds of contributions: if you do not have much +
  • Contribute to the Mantine codebase. We welcome all kinds of contributions: if you do not have much experience with React/TypeScript, you can help us improve the documentation to make it more clear and understandable for new developers. If you are an experienced React developer, you can help us with open issues.
  • If you are using Mantine at work and your company wants to support the project, you can allocate some time @@ -140,4 +140,4 @@

    License

    All @mantine/* packages are distributed under MIT license. You can use them in any project, commercial or not, with or without attribution. All @mantine/* packages -dependencies are also distributed under MIT license.

  • \ No newline at end of file +dependencies are also distributed under MIT license.

    \ No newline at end of file diff --git a/guides/6x-to-7x.html b/guides/6x-to-7x/index.html similarity index 72% rename from guides/6x-to-7x.html rename to guides/6x-to-7x/index.html index 13605b08857..a7ff280fc18 100644 --- a/guides/6x-to-7x.html +++ b/guides/6x-to-7x/index.html @@ -3,24 +3,24 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    6.x → 7.x migration guide

    +

    6.x → 7.x migration guide

    This guide is intended to help you migrate your project styles from 6.x to 7.x. It is not intended to be a comprehensive guide to all the changes in 7.x. -For that, please see the 7.0.0 changelog.

    -

    Before getting started, it is recommended to go through styles documentation. +For that, please see the 7.0.0 changelog.

    +

    Before getting started, it is recommended to go through styles documentation. Most notable parts:

    -

    Note that this guide assumes that you have postcss-preset-mantine installed and configured +

    Note that this guide assumes that you have postcss-preset-mantine installed and configured in your project.

    createStyles

    -

    createStyles function is no longer available in 7.0. Use CSS Modules instead.

    +

    createStyles function is no longer available in 7.0. Use CSS Modules instead.

    // 6.x
     import { createStyles } from '@mantine/core';
     
    @@ -34,7 +34,7 @@
       background-color: var(--mantine-color-red-5);
     }

    sx prop

    -

    sx prop is no longer available in 7.0. Use className or style prop instead.

    +

    sx prop is no longer available in 7.0. Use className or style prop instead.

    // 6.x
     import { Box } from '@mantine/core';
     
    @@ -47,7 +47,7 @@
     function Demo() {
       return <Box style={{ backgroundColor: 'var(--mantine-color-red-5)' }} />;
     }
    -

    Nested selectors are not supported in style prop, use className instead:

    +

    Nested selectors are not supported in style prop, use className instead:

    // 6.x
     import { Box } from '@mantine/core';
     
    @@ -152,8 +152,8 @@
       background-color: pink;
     }

    theme referencing

    -

    All theme properties are now available as CSS variables. It is recommended to use -CSS variables instead of referencing theme object in styles.

    +

    All theme properties are now available as CSS variables. It is recommended to use +CSS variables instead of referencing theme object in styles.

    // 6.x
     import { Box } from '@mantine/core';
     
    @@ -175,12 +175,12 @@
       padding: calc(var(--mantine-spacing-xl) * 2);
     }

    theme.colorScheme

    -

    Color scheme value is managed by MantineProvider, -theme object no longer includes colorScheme property. +

    Color scheme value is managed by MantineProvider, +theme object no longer includes colorScheme property. Although it is still possible to access color scheme value in components with -useMantineColorScheme hook, +useMantineColorScheme hook, it is not recommended to base your styles on its value. Instead, use light/dark -mixins or light-dark CSS function.

    +mixins or light-dark CSS function.

    Example of 6.x createStyles with theme.colorScheme migration to 7.0:

    // 6.x
     import { createStyles } from '@mantine/core';
    @@ -210,7 +210,7 @@
       }
     }

    Note that if your application has server-side rendering, you should not render any -elements based on its value (more info). +elements based on its value (more info). Instead, use light/dark mixins or light-dark function to hide/display elements based on color scheme value.

    Color scheme toggle example:

    @@ -234,4 +234,4 @@ <IconMoon className={cx(classes.icon, classes.dark)} stroke={1.5} /> </ActionIcon> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/guides/gatsby.html b/guides/gatsby/index.html similarity index 72% rename from guides/gatsby.html rename to guides/gatsby/index.html index d750d33964d..a3acea29b29 100644 --- a/guides/gatsby.html +++ b/guides/gatsby/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with Gatsby

    -

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    gatsby-template

    Gatsby template with basic setup

    Use template
    +

    Usage with Gatsby

    +

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    gatsby-template

    Gatsby template with basic setup

    Use template

    Generate new application

    Follow Gatsby quick start guide to create new Gatsby application:

    @@ -13,7 +13,7 @@

    Installation

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks

    PostCSS setup

    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars

    Create postcss.config.js file at the root of your application with the following content:

    module.exports = {
    @@ -71,4 +71,4 @@
     import classes from './Demo.module.css';
     
     // Gatsby syntax
    -import * as classes from './Demo.module.css';
    \ No newline at end of file +import * as classes from './Demo.module.css';
    \ No newline at end of file diff --git a/guides/icons.html b/guides/icons/index.html similarity index 65% rename from guides/icons.html rename to guides/icons/index.html index a88f99afc1e..c341315f976 100644 --- a/guides/icons.html +++ b/guides/icons/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Icons libraries with Mantine

    +

    Icons libraries with Mantine

    You can use any icons library with Mantine components, most popular options are:

    • Tabler icons
    • @@ -18,9 +18,9 @@ to use, we recommend Tabler icons.

      Icons size

      Most of the icons libraries support size prop (or similar width and height props) which allows changing -icon width and height. Usually, it is a number in pixels. All Mantine components use rem +icon width and height. Usually, it is a number in pixels. All Mantine components use rem units – components are scaled based on user preferences and font-size of the root element. If you want to -support this feature in your application, set icon width and height in rem units with style prop.

      +support this feature in your application, set icon width and height in rem units with style prop.

      import { rem } from '@mantine/core';
       import { IconBrandMantine } from '@tabler/icons-react';
       
      @@ -69,4 +69,4 @@
             <path d="M11 11a2 2 0 104 0 2 2 0 10-4 0M4 8h3M4 12h3M4 16h3" />
           </svg>
         );
      -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/guides/javascript.html b/guides/javascript/index.html similarity index 57% rename from guides/javascript.html rename to guides/javascript/index.html index fb1635dd2e8..51cd340efbe 100644 --- a/guides/javascript.html +++ b/guides/javascript/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with JavaScript

    +

    Usage with JavaScript

    Is it possible to use Mantine with JavaScript?

    Yes, it is possible to use all @mantine/* packages (as well as all other npm packages) with JavaScript. @mantine/* packages are written in TypeScript and have type definitions, so you will get some the benefits @@ -38,5 +38,5 @@ help you during migration to new versions of Mantine – you will get type errors when props/components that you have in your code are removed/renamed/changed.

    If you are not familiar with TypeScript yet, using Mantine with TypeScript will be a great opportunity -to learn it. You can use any of templates to get started – all of them include -TypeScript support out of the box.

    \ No newline at end of file +to learn it. You can use any of templates to get started – all of them include +TypeScript support out of the box.

    \ No newline at end of file diff --git a/guides/jest.html b/guides/jest/index.html similarity index 62% rename from guides/jest.html rename to guides/jest/index.html index 1b16e697f02..79ba4913555 100644 --- a/guides/jest.html +++ b/guides/jest/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Testing with Jest

    +

    Testing with Jest

    This guide will help you setup Jest and React Testing Library for your project. Note that this guide only covers shared logic that can be applied to any framework, and it does not cover initial setup of Jest and React Testing Library as it may vary depending on the framework you are using.

    Custom render

    -

    All Mantine components require MantineProvider to be present in the component tree. -To add MantineProvider to the component tree in your tests, create a custom render +

    All Mantine components require MantineProvider to be present in the component tree. +To add MantineProvider to the component tree in your tests, create a custom render function:

    // ./test-utils/render.tsx
     import { render as testingLibraryRender } from '@testing-library/react';
    @@ -84,5 +84,5 @@
     

    Jest setup for different frameworks may vary and usually change over time. To learn hot to setup Jest for your framework, either check Jest and React Testing Library documentation -or check one of the premade templates. Most of the templates include Jest setup, and -you can use them as a reference.

    \ No newline at end of file +or check one of the premade templates. Most of the templates include Jest setup, and +you can use them as a reference.

    \ No newline at end of file diff --git a/guides/next.html b/guides/next/index.html similarity index 68% rename from guides/next.html rename to guides/next/index.html index c86e60cc15d..ea9dd64d8d3 100644 --- a/guides/next.html +++ b/guides/next/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with Next.js

    -

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    next-app-template

    Next.js template with app router and full setup: Jest, Storybook, ESLint

    Use template

    next-pages-template

    Next.js template with pages router and full setup: Jest, Storybook, ESLint

    Use template

    next-app-min-template

    Next.js template with app router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-pages-min-template

    Next.js template with pages router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-vanilla-extract-template

    Next.js template with Vanilla extract example

    Use template
    +

    Usage with Next.js

    +

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    next-app-template

    Next.js template with app router and full setup: Jest, Storybook, ESLint

    Use template

    next-pages-template

    Next.js template with pages router and full setup: Jest, Storybook, ESLint

    Use template

    next-app-min-template

    Next.js template with app router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-pages-min-template

    Next.js template with pages router and minimal setup – no additional tools included, only default Next.js configuration

    Use template

    next-vanilla-extract-template

    Next.js template with Vanilla extract example

    Use template

    Generate new application

    Follow create-next-app guide to create new Next.js application:

    @@ -12,7 +12,7 @@

    Installation

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks

    PostCSS setup

    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars

    Create postcss.config.js file at the root of your application with the following content:

    module.exports = {
    @@ -30,7 +30,7 @@
       },
     };

    Setup with pages router

    -

    Add styles imports and MantineProvider to the pages/_app.tsx file:

    +

    Add styles imports and MantineProvider to the pages/_app.tsx file:

    // Import styles of packages that you've installed.
     // All packages except `@mantine/hooks` require styles imports
     import '@mantine/core/styles.css';
    @@ -49,7 +49,7 @@
         </MantineProvider>
       );
     }
    -

    Create pages/_document.tsx file with ColorSchemeScript component. +

    Create pages/_document.tsx file with ColorSchemeScript component. Note that it is required even if you use only one color scheme in your application.

    import { Html, Head, Main, NextScript } from 'next/document';
     import { ColorSchemeScript } from '@mantine/core';
    @@ -70,7 +70,7 @@
     

    All set! Start development server:

    npm run dev

    Setup with app router

    -

    Add MantineProvider, ColorSchemeScript +

    Add MantineProvider, ColorSchemeScript and styles imports to the app/layout.tsx file:

    // Import styles of packages that you've installed.
     // All packages except `@mantine/hooks` require styles imports
    @@ -125,13 +125,13 @@
       );
     }

    Server components

    -

    All Mantine components use useContext hook to support default props -and Styles API. Mantine components cannot be used as server components. +

    All Mantine components use useContext hook to support default props +and Styles API. Mantine components cannot be used as server components. It means that components will render both on the server and client.

    Entry points of all @mantine/* packages (index.js files) have 'use client'; directive at the top of the file – you do not need to add 'use client'; to your pages/layouts/components.

    Compound components in server components

    -

    Some components like Popover have associated compound components (Component.XXX), +

    Some components like Popover have associated compound components (Component.XXX), where XXX is a compound component name. Compound components cannot be used in server components. Instead, use ComponentXXX syntax or add 'use client'; directive to the top of the file.

    Example that will not work in server components:

    @@ -170,4 +170,4 @@ <PopoverDropdown>Dropdown</PopoverDropdown> </Popover> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/guides/polymorphic.html b/guides/polymorphic/index.html similarity index 73% rename from guides/polymorphic.html rename to guides/polymorphic/index.html index 81805205c6a..285e278f73e 100644 --- a/guides/polymorphic.html +++ b/guides/polymorphic/index.html @@ -3,11 +3,11 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Polymorphic components

    +

    Polymorphic components

    What is a polymorphic component

    A polymorphic component is a component which root element can be changed with component prop. All polymorphic components have a default element which is used when component prop is not provided. -For example, the Button component default element is button and +For example, the Button component default element is button and it can be changed to a or any other element or component:

    import { Button } from '@mantine/core';
     
    @@ -57,7 +57,7 @@
     }

    Wrapping polymorphic components

    Non-polymorphic components include React.ComponentPropsWithoutRef<'x'> as a part of their props type, -where x is a root element of the component. For example, Container component +where x is a root element of the component. For example, Container component is not polymorphic – its root element is always div, so its props type includes React.ComponentPropsWithoutRef<'div'>.

    Polymorphic components do not include React.ComponentPropsWithoutRef<'x'> as a part of their props type because their root element can be changed, and thus props type can be inferred only after the component was rendered.

    @@ -127,7 +127,7 @@ return <Box<any> component={Math.random() > 0.5 ? 'input' : 'div'} />; }

    Create your own polymorphic components

    -

    Use createPolymorphicComponent function and Box component to create new polymorphic components:

    +

    Use createPolymorphicComponent function and Box component to create new polymorphic components:

    MyButton as anchor
    import { forwardRef } from 'react';
     import { Box, BoxProps, createPolymorphicComponent, Group } from '@mantine/core';
     
    @@ -168,4 +168,4 @@
     
     function Demo() {
       return <PolymorphicGroup component="a" href="https://mantine.dev" />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/guides/redwood.html b/guides/redwood/index.html similarity index 68% rename from guides/redwood.html rename to guides/redwood/index.html index 4f7a2837870..8ead2f82f67 100644 --- a/guides/redwood.html +++ b/guides/redwood/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with RedwoodJS

    -

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    redwood-template

    RedwoodJS template with basic setup

    Use template
    +

    Usage with RedwoodJS

    +

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    redwood-template

    RedwoodJS template with basic setup

    Use template

    Generate new application

    Follow Redwood getting started guide guide to create new Redwood application:

    @@ -15,7 +15,7 @@
    cd web

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks

    PostCSS setup

    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars postcss-loader

    Create postcss.config.js file in web directory with the following content:

    module.exports = {
    @@ -46,7 +46,7 @@
       return config;
     };

    Setup

    -

    Add styles imports, MantineProvider and ColorSchemeScript +

    Add styles imports, MantineProvider and ColorSchemeScript to web/src/App.tsx file:

    // Import styles of packages that you've installed.
     // All packages except `@mantine/hooks` require styles imports
    @@ -75,4 +75,4 @@
     
     export default App;

    All set! Start development server:

    -
    yarn rw dev
    \ No newline at end of file +
    yarn rw dev
    \ No newline at end of file diff --git a/guides/remix.html b/guides/remix/index.html similarity index 67% rename from guides/remix.html rename to guides/remix/index.html index 6505ca2e1fa..c127cbc14c9 100644 --- a/guides/remix.html +++ b/guides/remix/index.html @@ -3,15 +3,15 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with Remix

    -

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    remix-template

    Remix template with full setup: Jest, Storybook, ESLint

    Use template

    remix-min-template

    Remix template with minimal setup – no additional tools included, only default Remix configuration

    Use template
    +

    Usage with Remix

    +

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    remix-template

    Remix template with full setup: Jest, Storybook, ESLint

    Use template

    remix-min-template

    Remix template with minimal setup – no additional tools included, only default Remix configuration

    Use template

    Generate new application

    Follow Remix getting started guide guide to create new Remix application:

    npx create-remix@latest

    Installation

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks

    PostCSS setup

    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars

    Create postcss.config.js file at the root of your application with the following content:

    module.exports = {
    @@ -34,7 +34,7 @@
       // ... other options
     };

    Setup

    -

    Add styles imports, MantineProvider and ColorSchemeScript to app/root.tsx:

    +

    Add styles imports, MantineProvider and ColorSchemeScript to app/root.tsx:

    // Import styles of packages that you've installed.
     // All packages except `@mantine/hooks` require styles imports
     import '@mantine/core/styles.css';
    @@ -86,4 +86,4 @@
     
     

    Currently, Remix team is not planning to fix this issue. If you are experiencing hydration mismatches, try opening the same page in -incognito mode (usually extensions are disabled in incognito mode) or disabling browser extensions.

    \ No newline at end of file +incognito mode (usually extensions are disabled in incognito mode) or disabling browser extensions.

    \ No newline at end of file diff --git a/guides/storybook.html b/guides/storybook/index.html similarity index 65% rename from guides/storybook.html rename to guides/storybook/index.html index f004553104f..b8bc99a1343 100644 --- a/guides/storybook.html +++ b/guides/storybook/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Setup Mantine in Storybook

    +

    Setup Mantine in Storybook

    Note that this guide covers only Storybook 7.0+ integration. If you are using older version of Storybook, it will not work for you.

    Add Storybook to your application

    @@ -32,7 +32,7 @@ export default config;

    Theme object

    -

    To shared theme object between your application and Storybook, create +

    To shared theme object between your application and Storybook, create src/theme.ts (or any other path in your application) file with your theme override:

    // src/theme.ts
     import { createTheme } from '@mantine/core';
    @@ -84,4 +84,4 @@
       (renderStory: any) => <MantineProvider theme={theme}>{renderStory()}</MantineProvider>,
     ];

    All set! Start Storybook:

    -
    npm run storybook
    \ No newline at end of file +
    npm run storybook
    \ No newline at end of file diff --git a/guides/typescript.html b/guides/typescript/index.html similarity index 68% rename from guides/typescript.html rename to guides/typescript/index.html index 3414842e52b..66ea4127de9 100644 --- a/guides/typescript.html +++ b/guides/typescript/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with TypeScript

    +

    Usage with TypeScript

    All @mantine/* packages are fully compatible with TypeScript. All examples in the documentation are written in TypeScript – you can copy-paste them to your project without any changes.

    This guide will help you get familiar with types that @mantine/core package exports.

    @@ -27,9 +27,9 @@ function MyGroup({ spacing, ...others }: MyGroupProps) { return <Group my={spacing} {...others} />; }
    -

    Polymorphic components props types do not include React.ComponentPropsWithoutRef<'X'> +

    Polymorphic components props types do not include React.ComponentPropsWithoutRef<'X'> because their root element depends on the component prop value.

    -

    Example of extending polymorphic components props:

    +

    Example of extending polymorphic components props:

    import { ButtonProps, Button, ElementProps } from '@mantine/core';
     
     interface MyButtonProps extends ButtonProps, ElementProps<'button', keyof ButtonProps> {
    @@ -41,7 +41,7 @@
     }

    ElementProps type

    ElementProps is a utility type similar to React.ComponentPropsWithoutRef, but with additional -features. It replaces native elements style prop with Mantine style prop and +features. It replaces native elements style prop with Mantine style prop and allows omitting properties that are passed as a second type.

    import { ElementProps, ButtonProps } from '@mantine/core';
     
    @@ -56,7 +56,7 @@
     // Equivalent of `Omit<React.ComponentPropsWithoutRef<'button'>, keyof ButtonProps>`
     type OmitButtonProps = ElementProps<'button', keyof ButtonProps>;

    MantineTheme type

    -

    MantineTheme is a type of theme object. You can use it to add types +

    MantineTheme is a type of theme object. You can use it to add types to functions that accept theme object as an argument:

    import { MantineTheme, useMantineTheme } from '@mantine/core';
     
    @@ -140,4 +140,4 @@
       }
     }

    Note that extending theme type is not required, it is only needed if you want to -make your theme object types more strict and add autocomplete in your editor.

    \ No newline at end of file +make your theme object types more strict and add autocomplete in your editor.

    \ No newline at end of file diff --git a/guides/vite.html b/guides/vite/index.html similarity index 66% rename from guides/vite.html rename to guides/vite/index.html index 82a22716a66..a18b6fd27c1 100644 --- a/guides/vite.html +++ b/guides/vite/index.html @@ -3,15 +3,15 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Usage with Vite

    -

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    vite-template

    Vite template with full setup: Jest, Storybook, ESLint

    Use template

    vite-min-template

    Vite template with minimal setup – no additional tools included, only default Vite configuration

    Use template

    vite-vanilla-extract-template

    Vite template with Vanilla extract example

    Use template
    +

    Usage with Vite

    +

    Get started with a template

    The easiest way to get started is to use one of the templates. All templates are configured correctly: they include PostCSS setup, ColorSchemeScript and other essential features. Some templates also include additional features like Jest, Storybook and ESLint.

    If you are not familiar with GitHub, you can find a detailed instruction on how to bootstrap a project from a template on this page.

    vite-template

    Vite template with full setup: Jest, Storybook, ESLint

    Use template

    vite-min-template

    Vite template with minimal setup – no additional tools included, only default Vite configuration

    Use template

    vite-vanilla-extract-template

    Vite template with Vanilla extract example

    Use template

    Generate new application

    Follow Vite getting started guide to create new Vite application:

    yarn create vite

    Installation

    Choose packages that you will use in your application:

    PackageDescription
    @mantine/hooks

    Hooks for state and UI management

    @mantine/core

    Core components library: inputs, buttons, overlays, etc.

    @mantine/form

    Form management library

    @mantine/dates

    Date inputs, calendars

    @mantine/notifications

    Notifications system

    @mantine/code-highlight

    Code highlight with your theme colors and styles

    @mantine/tiptap

    Rich text editor based on Tiptap

    @mantine/dropzone

    Capture files with drag and drop

    @mantine/carousel

    Embla based carousel component

    @mantine/spotlight

    Overlay command center

    @mantine/modals

    Centralized modals manager

    @mantine/nprogress

    Navigation progress

    Install dependencies:

    yarn add @mantine/core @mantine/hooks

    PostCSS setup

    -

    Install PostCSS plugins and postcss-preset-mantine:

    +

    Install PostCSS plugins and postcss-preset-mantine:

    yarn add --dev postcss postcss-preset-mantine postcss-simple-vars

    Create postcss.config.js file at the root of your application with the following content:

    module.exports = {
    @@ -30,7 +30,7 @@
     };

    Note that if you use Node.js 18+, you will need to replace module.exports = with export default.

    Setup

    -

    Add styles imports and MantineProvider to your application root component (usually App.tsx):

    +

    Add styles imports and MantineProvider to your application root component (usually App.tsx):

    // Import styles of packages that you've installed.
     // All packages except `@mantine/hooks` require styles imports
     import '@mantine/core/styles.css';
    @@ -41,4 +41,4 @@
       return <MantineProvider>{/* Your app here */}</MantineProvider>;
     }

    All set! Start development server:

    -
    npm run dev
    \ No newline at end of file +
    npm run dev
    \ No newline at end of file diff --git a/hooks/use-click-outside.html b/hooks/use-click-outside/index.html similarity index 59% rename from hooks/use-click-outside.html rename to hooks/use-click-outside/index.html index d95435d7d92..7f3dcba5a30 100644 --- a/hooks/use-click-outside.html +++ b/hooks/use-click-outside/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-click-outside

    Detects click and touch events outside of given element

    Import

    Usage

    +

    use-click-outside

    Detects click and touch events outside of given element

    Import

    Usage

    import { useState } from 'react';
     import { Paper, Button } from '@mantine/core';
     import { useClickOutside } from '@mantine/hooks';
    @@ -94,4 +94,4 @@
     

    Set ref type

    import { useClickOutside } from '@mantine/hooks';
     
    -const ref = useClickOutside<HTMLDivElement>(onClickOutside);
    \ No newline at end of file +const ref = useClickOutside<HTMLDivElement>(onClickOutside);
    \ No newline at end of file diff --git a/hooks/use-clipboard.html b/hooks/use-clipboard/index.html similarity index 52% rename from hooks/use-clipboard.html rename to hooks/use-clipboard/index.html index e47c55fd15b..c6cb5ad3d46 100644 --- a/hooks/use-clipboard.html +++ b/hooks/use-clipboard/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-clipboard

    Wrapper around navigator.clipboard with feedback timeout

    Import

    Usage

    +

    use-clipboard

    Wrapper around navigator.clipboard with feedback timeout

    Import

    Usage

    use-clipboard hook provides interface to work with navigator.clipboard:

    import { Button } from '@mantine/core';
     import { useClipboard } from '@mantine/hooks';
    @@ -38,4 +38,4 @@
       reset: () => void;
       error: Error;
       copied: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-color-scheme.html b/hooks/use-color-scheme/index.html similarity index 51% rename from hooks/use-color-scheme.html rename to hooks/use-color-scheme/index.html index 1b2df9ef18f..40a13cec3ab 100644 --- a/hooks/use-color-scheme.html +++ b/hooks/use-color-scheme/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-color-scheme

    Detects user system color scheme with window.matchMedia API

    Import

    Usage

    +

    use-color-scheme

    Detects user system color scheme with window.matchMedia API

    Import

    Usage

    use-color-scheme hook returns system color scheme value i.e. either dark or light:

    Your system color scheme is light
    import { Badge } from '@mantine/core';
     import { useColorScheme } from '@mantine/hooks';
    @@ -17,7 +17,7 @@
         </Badge>
       );
     }
    -

    Hook uses use-media-query hook under the hood. +

    Hook uses use-media-query hook under the hood. It relies on window.matchMedia() API and always returns light if the API is not available (e.g. during server side rendering) unless an initial value is provided in the first argument.

    @@ -27,4 +27,4 @@ options?: { getInitialValueInEffect: boolean; } -): 'dark' | 'light';
    \ No newline at end of file +): 'dark' | 'light';
    \ No newline at end of file diff --git a/hooks/use-counter.html b/hooks/use-counter/index.html similarity index 53% rename from hooks/use-counter.html rename to hooks/use-counter/index.html index 279820b66a0..64bb8862ef7 100644 --- a/hooks/use-counter.html +++ b/hooks/use-counter/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-counter

    Increments/decrements state within given boundaries

    Import

    Usage

    +

    use-counter

    Increments/decrements state within given boundaries

    Import

    Usage

    Count: 0

    import { Group, Button, Text } from '@mantine/core';
     import { useCounter } from '@mantine/hooks';
     
    @@ -37,4 +37,4 @@
         set: (value: number) => void;
         reset: () => void;
       }
    -];
    \ No newline at end of file +];
    \ No newline at end of file diff --git a/hooks/use-debounced-state.html b/hooks/use-debounced-state/index.html similarity index 56% rename from hooks/use-debounced-state.html rename to hooks/use-debounced-state/index.html index 71f2de72b4a..97958b64169 100644 --- a/hooks/use-debounced-state.html +++ b/hooks/use-debounced-state/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-debounced-state

    Debounces value changes

    Import

    Usage

    +

    use-debounced-state

    Debounces value changes

    Import

    Usage

    use-debounced-state hook debounces value changes. This can be useful in case you want to perform a heavy operation based on react state, -for example, send search request. Unlike use-debounced-value it +for example, send search request. Unlike use-debounced-value it is designed to work with uncontrolled components.

    Debounced value: [empty string]

    import { useDebouncedState } from '@mantine/hooks';
     import { TextInput, Text } from '@mantine/core';
    @@ -59,4 +59,4 @@
       options?: {
         leading: boolean;
       }
    -): readonly [T, (newValue: T) => void];
    \ No newline at end of file +): readonly [T, (newValue: T) => void];
    \ No newline at end of file diff --git a/hooks/use-debounced-value.html b/hooks/use-debounced-value/index.html similarity index 60% rename from hooks/use-debounced-value.html rename to hooks/use-debounced-value/index.html index c7b4b2df4e8..eafe97ce691 100644 --- a/hooks/use-debounced-value.html +++ b/hooks/use-debounced-value/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-debounced-value

    Debounces value changes

    Import

    Usage

    +

    use-debounced-value

    Debounces value changes

    Import

    Usage

    use-debounced-value hook debounces value changes. This can be useful in case you want to perform a heavy operation based on react state, -for example, send search request. Unlike use-debounced-state it +for example, send search request. Unlike use-debounced-state it is designed to work with controlled components.

    Value: [empty string]

    Debounced value: [empty string]

    import { useState } from 'react';
     import { useDebouncedValue } from '@mantine/hooks';
    @@ -95,4 +95,4 @@
       options?: {
         leading: boolean;
       }
    -): readonly [T, () => void];
    \ No newline at end of file +): readonly [T, () => void];
    \ No newline at end of file diff --git a/hooks/use-did-update.html b/hooks/use-did-update.html deleted file mode 100644 index 657b6d118a3..00000000000 --- a/hooks/use-did-update.html +++ /dev/null @@ -1,14 +0,0 @@ -use-did-update | Mantine

    use-did-update

    Calls function in useEffect when value changes, but not when component mounts

    Import

    Usage

    -

    use-did-update hook works the same way as useEffect but it is not called when component is mounted:

    -
    import { useDidUpdate } from '@mantine/hooks';
    -
    -function Demo() {
    -  useDidUpdate(() => console.log("Won't be called when mounted"), [value]);
    -}
    -

    Definition

    -
    function useDidUpdate(fn: EffectCallback, dependencies?: any[]): void;
    \ No newline at end of file diff --git a/hooks/use-did-update/index.html b/hooks/use-did-update/index.html new file mode 100644 index 00000000000..e0482e05f67 --- /dev/null +++ b/hooks/use-did-update/index.html @@ -0,0 +1,14 @@ +use-did-update | Mantine

    use-did-update

    Calls function in useEffect when value changes, but not when component mounts

    Import

    Usage

    +

    use-did-update hook works the same way as useEffect but it is not called when component is mounted:

    +
    import { useDidUpdate } from '@mantine/hooks';
    +
    +function Demo() {
    +  useDidUpdate(() => console.log("Won't be called when mounted"), [value]);
    +}
    +

    Definition

    +
    function useDidUpdate(fn: EffectCallback, dependencies?: any[]): void;
    \ No newline at end of file diff --git a/hooks/use-disclosure.html b/hooks/use-disclosure/index.html similarity index 50% rename from hooks/use-disclosure.html rename to hooks/use-disclosure/index.html index 6a15c2ff222..fcf9375d8da 100644 --- a/hooks/use-disclosure.html +++ b/hooks/use-disclosure/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-disclosure

    Manages boolean state and provides controls to toggle it

    Import

    Usage

    +

    use-disclosure

    Manages boolean state and provides controls to toggle it

    Import

    Usage

    use-disclosure hook manages boolean state. It provides open, close and toggle handlers and accepts optional onOpen and onClose callbacks. It can be used to manage controlled modals, popovers and other similar components:

    @@ -60,4 +60,4 @@ close: () => void; toggle: () => void; } -];
    \ No newline at end of file +];
    \ No newline at end of file diff --git a/hooks/use-document-title.html b/hooks/use-document-title/index.html similarity index 50% rename from hooks/use-document-title.html rename to hooks/use-document-title/index.html index 2a6f05c6c57..f8c7bbbcd36 100644 --- a/hooks/use-document-title.html +++ b/hooks/use-document-title/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-document-title

    Sets document.title to given string

    Import

    Usage

    +

    use-document-title

    Sets document.title to given string

    Import

    Usage

    use-document-title sets document.title property with React.useLayoutEffect hook. Hook is not called during server side rendering. Use this hook with client only applications, for isomorphic use more advanced options, for example, react-helmet.

    Call hook with a string that should be set as document title inside any component. @@ -23,4 +23,4 @@ ); }

    Definition

    -
    function useDocumentTitle(title: string): void;
    \ No newline at end of file +
    function useDocumentTitle(title: string): void;
    \ No newline at end of file diff --git a/hooks/use-document-visibility.html b/hooks/use-document-visibility/index.html similarity index 50% rename from hooks/use-document-visibility.html rename to hooks/use-document-visibility/index.html index e6dea4cb794..aa5a2b7d695 100644 --- a/hooks/use-document-visibility.html +++ b/hooks/use-document-visibility/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-document-visibility

    Detects if current tab is active

    Import

    Usage

    +

    use-document-visibility

    Detects if current tab is active

    Import

    Usage

    use-document-visibility hook returns current document.visibilityState – it allows detecting if the current tab is active:

    Switch to another tab to see document title change

    import { Text } from '@mantine/core';
    @@ -15,4 +15,4 @@
       return <Text>Switch to another tab to see document title change</Text>;
     }

    Definition

    -
    function useDocumentVisibility(): 'visible' | 'hidden';
    \ No newline at end of file +
    function useDocumentVisibility(): 'visible' | 'hidden';
    \ No newline at end of file diff --git a/hooks/use-element-size.html b/hooks/use-element-size/index.html similarity index 52% rename from hooks/use-element-size.html rename to hooks/use-element-size/index.html index 3f8ec1dd363..bf5e215a615 100644 --- a/hooks/use-element-size.html +++ b/hooks/use-element-size/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-element-size

    Returns element width and height and subscribe to changes

    Import

    Usage

    +

    use-element-size

    Returns element width and height and subscribe to changes

    Import

    Usage

    Resize textarea by dragging its right bottom corner

    Width: 0, height: 0

    import { useElementSize } from '@mantine/hooks';
     import { rem } from '@mantine/core';
     
    @@ -18,7 +18,7 @@
       );
     }

    API

    -

    use-element-size is a simpler version of use-resize-observer hook. +

    use-element-size is a simpler version of use-resize-observer hook. Hook returns a ref object that should be passed to the observed element, and the element's height and width. On the first render (as well as during SSR), or when no element is being observed, width and height properties are equal to 0.

    const { ref, width, height } = useElementSize();
    @@ -27,4 +27,4 @@ MutableRefObject<T>, width: number, height: number -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-event-listener.html b/hooks/use-event-listener/index.html similarity index 51% rename from hooks/use-event-listener.html rename to hooks/use-event-listener/index.html index 3108372bda2..dbac5994d01 100644 --- a/hooks/use-event-listener.html +++ b/hooks/use-event-listener/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-event-listener

    Subscribes to events with a ref

    Import

    Usage

    +

    use-event-listener

    Subscribes to events with a ref

    Import

    Usage

    use-event-listener adds a given event listener to an element to which ref is assigned. Hook supports the same options as addEventListener method. After the component is unmounted, the listener is automatically removed.

    @@ -22,4 +22,4 @@ type: K, listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions -): MutableRefObject<T>;
    \ No newline at end of file +): MutableRefObject<T>;
    \ No newline at end of file diff --git a/hooks/use-eye-dropper.html b/hooks/use-eye-dropper/index.html similarity index 52% rename from hooks/use-eye-dropper.html rename to hooks/use-eye-dropper/index.html index 7941ebe6717..fd042469dcd 100644 --- a/hooks/use-eye-dropper.html +++ b/hooks/use-eye-dropper/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-eye-dropper

    Pick color from any pixel on the screen

    Import

    Usage

    +

    use-eye-dropper

    Pick color from any pixel on the screen

    Import

    Usage

    use-eye-dropper hook provides an interface to work with EyeDropper API. Check browser support to learn which browsers support the API.

    EyeDropper API is not supported in your browser

    import { useState } from 'react';
    @@ -50,4 +50,4 @@
     
    function useEyeDropper(): {
       supported: boolean;
       open: (options?: { signal?: AbortSignal }) => Promise<{ sRGBHex: string }>;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-favicon.html b/hooks/use-favicon/index.html similarity index 51% rename from hooks/use-favicon.html rename to hooks/use-favicon/index.html index 103d431f83c..58a9ae66ee4 100644 --- a/hooks/use-favicon.html +++ b/hooks/use-favicon/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-favicon

    Changes favicon

    Import

    Usage

    +

    use-favicon

    Changes favicon

    Import

    Usage

    use-favicon appends <link /> element to head component with given favicon in useLayoutEffect. The hook is not called during server side rendering.

    Call hook with a favicon URL (supported formats: .ico, .png, .svg and .gif) that should be set as favicon. @@ -27,4 +27,4 @@ ); }

    Definition

    -
    function useFavicon(url: string): void;
    \ No newline at end of file +
    function useFavicon(url: string): void;
    \ No newline at end of file diff --git a/hooks/use-focus-return.html b/hooks/use-focus-return/index.html similarity index 53% rename from hooks/use-focus-return.html rename to hooks/use-focus-return/index.html index 79a03edf5b8..a2b7925f207 100644 --- a/hooks/use-focus-return.html +++ b/hooks/use-focus-return/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-focus-return

    Captures last focused element on the page and returns focus to it once the condition is met

    Import

    Usage

    +

    use-focus-return

    Captures last focused element on the page and returns focus to it once the condition is met

    Import

    Usage

    use-focus-return automatically returns focus to the last focused element when a given condition is met. -For example, it is used in Modal component to restore focus after the modal was closed.

    +For example, it is used in Modal component to restore focus after the modal was closed.

    Close the modal with the Escape key and see how focus returns to the button after the modal closes:

    import { useDisclosure } from '@mantine/hooks';
     import { Modal, Button } from '@mantine/core';
    @@ -23,7 +23,7 @@
         </>
       );
     }
    -

    In most cases, you should use this hook with use-focus-trap.

    +

    In most cases, you should use this hook with use-focus-trap.

    useFocusReturn({
       // Is region with focus trap active?
       // When it activates hook saves document.activeElement to the internal state
    @@ -42,4 +42,4 @@
     // ... later
     returnFocus();

    Definition

    -
    function useFocusReturn(options: { opened: boolean; shouldReturnFocus?: boolean }): () => void;
    \ No newline at end of file +
    function useFocusReturn(options: { opened: boolean; shouldReturnFocus?: boolean }): () => void;
    \ No newline at end of file diff --git a/hooks/use-focus-trap.html b/hooks/use-focus-trap/index.html similarity index 54% rename from hooks/use-focus-trap.html rename to hooks/use-focus-trap/index.html index f9d16e8d562..a7abfc5f2cb 100644 --- a/hooks/use-focus-trap.html +++ b/hooks/use-focus-trap/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-focus-trap

    Traps focus inside given node

    Import

    Usage

    +

    use-focus-trap

    Traps focus inside given node

    Import

    Usage

    use-focus-trap traps focus at the given node, for example in modal, drawer or menu. Node must include at least one focusable element. When the node unmounts, the focus trap is automatically released.

    import { useFocusTrap } from '@mantine/hooks';
    @@ -32,7 +32,7 @@
     // With Mantine component:
     <Paper ref={focusTrapRef} />

    Combine with other ref based hooks

    -

    To combine use-focus-trap with other ref based hooks, use use-merged-ref hook:

    +

    To combine use-focus-trap with other ref based hooks, use use-merged-ref hook:

    import { useRef } from 'react';
     import { useClickOutside, useFocusTrap, useMergedRef } from '@mantine/hooks';
     
    @@ -62,4 +62,4 @@
       );
     }

    Definition

    -
    function useFocusTrap(active?: boolean): (instance: HTMLElement) => void;
    \ No newline at end of file +
    function useFocusTrap(active?: boolean): (instance: HTMLElement) => void;
    \ No newline at end of file diff --git a/hooks/use-focus-within.html b/hooks/use-focus-within/index.html similarity index 52% rename from hooks/use-focus-within.html rename to hooks/use-focus-within/index.html index afcb45cbdf5..c631acbb23e 100644 --- a/hooks/use-focus-within.html +++ b/hooks/use-focus-within/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-focus-within

    Detects if any element within other element has focus

    Import

    Usage

    +

    use-focus-within

    Detects if any element within other element has focus

    Import

    Usage

    use-focus-within hook detects if any element within the other element has focus. It works the same way as :focus-within CSS selector:

    One of elements has focus: false

    import { useFocusWithin } from '@mantine/hooks';
    @@ -34,4 +34,4 @@
     }): {
       ref: React.MutableRefObject<T>;
       focused: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-force-update.html b/hooks/use-force-update.html deleted file mode 100644 index 61a2fd0828c..00000000000 --- a/hooks/use-force-update.html +++ /dev/null @@ -1,22 +0,0 @@ -use-force-update | Mantine

    use-force-update

    Force component to rerender without state change

    Import

    Usage

    -

    use-force-update returns a function, which when called rerenders the component:

    -

    mantine-kqbc8b3ze

    import { Button, Text, Group } from '@mantine/core';
    -import { useForceUpdate, randomId } from '@mantine/hooks';
    -
    -function Demo() {
    -  const forceUpdate = useForceUpdate();
    -
    -  return (
    -    <Group justify="center">
    -      <Text>{randomId()}</Text>
    -      <Button onClick={forceUpdate}>Force update</Button>
    -    </Group>
    -  );
    -}
    -

    Definition

    -
    function useForceUpdate(): () => void;
    \ No newline at end of file diff --git a/hooks/use-force-update/index.html b/hooks/use-force-update/index.html new file mode 100644 index 00000000000..eb6c1af61f2 --- /dev/null +++ b/hooks/use-force-update/index.html @@ -0,0 +1,22 @@ +use-force-update | Mantine

    use-force-update

    Force component to rerender without state change

    Import

    Usage

    +

    use-force-update returns a function, which when called rerenders the component:

    +

    mantine-wmunloe1g

    import { Button, Text, Group } from '@mantine/core';
    +import { useForceUpdate, randomId } from '@mantine/hooks';
    +
    +function Demo() {
    +  const forceUpdate = useForceUpdate();
    +
    +  return (
    +    <Group justify="center">
    +      <Text>{randomId()}</Text>
    +      <Button onClick={forceUpdate}>Force update</Button>
    +    </Group>
    +  );
    +}
    +

    Definition

    +
    function useForceUpdate(): () => void;
    \ No newline at end of file diff --git a/hooks/use-fullscreen.html b/hooks/use-fullscreen/index.html similarity index 56% rename from hooks/use-fullscreen.html rename to hooks/use-fullscreen/index.html index 859364633c9..bbdba7483d4 100644 --- a/hooks/use-fullscreen.html +++ b/hooks/use-fullscreen/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-fullscreen

    Enter/exit fullscreen mode

    Import

    Usage

    +

    use-fullscreen

    Enter/exit fullscreen mode

    Import

    Usage

    use-fullscreen allows to enter/exit fullscreen for given element using the Fullscreen API. By default, if you don't provide ref, the hook will target document.documentElement:

    import { useFullscreen } from '@mantine/hooks';
    @@ -46,4 +46,4 @@
       readonly ref: (element: T | null) => void;
       readonly toggle: () => Promise<void>;
       readonly fullscreen: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-hash.html b/hooks/use-hash/index.html similarity index 51% rename from hooks/use-hash.html rename to hooks/use-hash/index.html index f8409f80602..d1125c0cff1 100644 --- a/hooks/use-hash.html +++ b/hooks/use-hash/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-hash

    Get and set hash value in url

    Import

    Usage

    +

    use-hash

    Get and set hash value in url

    Import

    Usage

    use-hash returns hash from URL, subscribes to its changes with hashchange event and allows changing it with setHash function:

    Current hash:

    import { useHash, randomId } from '@mantine/hooks';
    @@ -19,4 +19,4 @@
       );
     }

    Definition

    -
    function useHash(): readonly [string, (value: string) => void];
    \ No newline at end of file +
    function useHash(): readonly [string, (value: string) => void];
    \ No newline at end of file diff --git a/hooks/use-headroom.html b/hooks/use-headroom/index.html similarity index 51% rename from hooks/use-headroom.html rename to hooks/use-headroom/index.html index 50ce8549c12..2b1aefcfea3 100644 --- a/hooks/use-headroom.html +++ b/hooks/use-headroom/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-headroom

    Create headers that are hidden after user scrolls past given distance

    Import

    Usage

    +

    use-headroom

    Create headers that are hidden after user scrolls past given distance

    Import

    Usage

    Use use-headroom hook to create headers that are hidden after user scrolls past the given distance in px. The hook returns a boolean value that determines whether the element should be pinned or hidden. Hook returns true when the current scroll position is less than the specified fixedAt value and @@ -51,4 +51,4 @@ /** Called when element is unpinned */ onRelease?(): void; -}): boolean;

    \ No newline at end of file +}): boolean;
    \ No newline at end of file diff --git a/hooks/use-hotkeys.html b/hooks/use-hotkeys/index.html similarity index 56% rename from hooks/use-hotkeys.html rename to hooks/use-hotkeys/index.html index 278769eddb8..6110a314e56 100644 --- a/hooks/use-hotkeys.html +++ b/hooks/use-hotkeys/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-hotkeys

    Listen for keys combinations on document element

    Import

    Usage

    +

    use-hotkeys

    Listen for keys combinations on document element

    Import

    Usage

    use-hotkeys accepts as its first argument an array of hotkeys and handler tuples:

    • hotkey - hotkey string, for example ctrl+E, shift+alt+L, mod+S
    • @@ -82,4 +82,4 @@ ] >, tagsToIgnore?: string[] -): void;
    \ No newline at end of file +): void;
    \ No newline at end of file diff --git a/hooks/use-hover.html b/hooks/use-hover/index.html similarity index 50% rename from hooks/use-hover.html rename to hooks/use-hover/index.html index e5316fc3c8e..8cd703ed847 100644 --- a/hooks/use-hover.html +++ b/hooks/use-hover/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-hover

    Detects if element is hovered

    Import

    Usage

    +

    use-hover

    Detects if element is hovered

    Import

    Usage

    Put mouse over me please

    import { useHover } from '@mantine/hooks';
     
     function Demo() {
    @@ -18,4 +18,4 @@
     
    function useHover<T extends HTMLElement = HTMLDivElement>(): {
       ref: React.MutableRefObject<T>;
       hovered: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-id.html b/hooks/use-id.html deleted file mode 100644 index c450f43b758..00000000000 --- a/hooks/use-id.html +++ /dev/null @@ -1,29 +0,0 @@ -use-id | Mantine

    use-id

    Generates memoized random id

    Import

    Usage

    -

    use-id hook generates a random id that persists across renders. -The hook is usually used to bind input elements to labels. -The generated random id is saved to ref and will not change unless the component is unmounted.

    -
    import { useId } from '@mantine/hooks';
    -
    -function Input({ id }: { id?: string }) {
    -  const uuid = useId(id);
    -
    -  return (
    -    <>
    -      <label htmlFor={uuid}>Input label</label>
    -      <input type="text" id={uuid} />
    -    </>
    -  );
    -}
    -
    -// input and label will have id 'my-id'
    -const withId = <Input id="my-id" />;
    -
    -// input and label will have random id 'mantine-fZMoF'
    -const withoutId = <Input />;
    -

    Definition

    -
    function useId(id: string): string;
    \ No newline at end of file diff --git a/hooks/use-id/index.html b/hooks/use-id/index.html new file mode 100644 index 00000000000..27338115473 --- /dev/null +++ b/hooks/use-id/index.html @@ -0,0 +1,29 @@ +use-id | Mantine

    use-id

    Generates memoized random id

    Import

    Usage

    +

    use-id hook generates a random id that persists across renders. +The hook is usually used to bind input elements to labels. +The generated random id is saved to ref and will not change unless the component is unmounted.

    +
    import { useId } from '@mantine/hooks';
    +
    +function Input({ id }: { id?: string }) {
    +  const uuid = useId(id);
    +
    +  return (
    +    <>
    +      <label htmlFor={uuid}>Input label</label>
    +      <input type="text" id={uuid} />
    +    </>
    +  );
    +}
    +
    +// input and label will have id 'my-id'
    +const withId = <Input id="my-id" />;
    +
    +// input and label will have random id 'mantine-fZMoF'
    +const withoutId = <Input />;
    +

    Definition

    +
    function useId(id: string): string;
    \ No newline at end of file diff --git a/hooks/use-idle.html b/hooks/use-idle/index.html similarity index 57% rename from hooks/use-idle.html rename to hooks/use-idle/index.html index e957c28b22c..e41fe96683d 100644 --- a/hooks/use-idle.html +++ b/hooks/use-idle/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-idle

    Detects if user does nothing on page

    Import

    Usage

    +

    use-idle

    Detects if user does nothing on page

    Import

    Usage

    use-idle detects if user does nothing for a given time in ms:

    Current state: idle
    import { Badge } from '@mantine/core';
     import { useIdle } from '@mantine/hooks';
    @@ -36,4 +36,4 @@
     
    function useIdle(
       timeout: number,
       options?: Partial<{ events: string[]; initialState: boolean }>
    -): boolean;
    \ No newline at end of file +): boolean;
    \ No newline at end of file diff --git a/hooks/use-input-state.html b/hooks/use-input-state.html deleted file mode 100644 index 6e6a45b34e6..00000000000 --- a/hooks/use-input-state.html +++ /dev/null @@ -1,48 +0,0 @@ -use-input-state | Mantine

    use-input-state

    Manages input state

    Import

    Usage

    -

    use-input-state handles state of native inputs (with event in onChange handler) and custom inputs (with value in onChange handler). -Hook works with all Mantine and native inputs:

    -
    import { useState } from 'react';
    -import { useInputState } from '@mantine/hooks';
    -import { TextInput, NumberInput } from '@mantine/core';
    -
    -function WithUseInputState() {
    -  const [stringValue, setStringValue] = useInputState('');
    -  const [numberValue, setNumberValue] = useInputState(0);
    -
    -  return (
    -    <>
    -      <input type="text" value={stringValue} onChange={setStringValue} />
    -      <TextInput value={stringValue} onChange={setStringValue} />
    -      <NumberInput value={numberValue} onChange={setNumberValue} />
    -    </>
    -  );
    -}
    -
    -function WithUseState() {
    -  const [stringValue, setStringValue] = useState('');
    -  const [numberValue, setNumberValue] = useState(0);
    -
    -  return (
    -    <>
    -      <input
    -        type="text"
    -        value={stringValue}
    -        onChange={(event) => setStringValue(event.currentTarget.value)}
    -      />
    -      <TextInput
    -        value={stringValue}
    -        onChange={(event) => setStringValue(event.currentTarget.value)}
    -      />
    -      <NumberInput value={numberValue} onChange={setNumberValue} />
    -    </>
    -  );
    -}
    -

    Definition

    -
    function useInputState<T>(
    -  initialState: T
    -): [T, (value: null | undefined | T | React.ChangeEvent<any>) => void];
    \ No newline at end of file diff --git a/hooks/use-input-state/index.html b/hooks/use-input-state/index.html new file mode 100644 index 00000000000..a7e8f88bcdc --- /dev/null +++ b/hooks/use-input-state/index.html @@ -0,0 +1,48 @@ +use-input-state | Mantine

    use-input-state

    Manages input state

    Import

    Usage

    +

    use-input-state handles state of native inputs (with event in onChange handler) and custom inputs (with value in onChange handler). +Hook works with all Mantine and native inputs:

    +
    import { useState } from 'react';
    +import { useInputState } from '@mantine/hooks';
    +import { TextInput, NumberInput } from '@mantine/core';
    +
    +function WithUseInputState() {
    +  const [stringValue, setStringValue] = useInputState('');
    +  const [numberValue, setNumberValue] = useInputState(0);
    +
    +  return (
    +    <>
    +      <input type="text" value={stringValue} onChange={setStringValue} />
    +      <TextInput value={stringValue} onChange={setStringValue} />
    +      <NumberInput value={numberValue} onChange={setNumberValue} />
    +    </>
    +  );
    +}
    +
    +function WithUseState() {
    +  const [stringValue, setStringValue] = useState('');
    +  const [numberValue, setNumberValue] = useState(0);
    +
    +  return (
    +    <>
    +      <input
    +        type="text"
    +        value={stringValue}
    +        onChange={(event) => setStringValue(event.currentTarget.value)}
    +      />
    +      <TextInput
    +        value={stringValue}
    +        onChange={(event) => setStringValue(event.currentTarget.value)}
    +      />
    +      <NumberInput value={numberValue} onChange={setNumberValue} />
    +    </>
    +  );
    +}
    +

    Definition

    +
    function useInputState<T>(
    +  initialState: T
    +): [T, (value: null | undefined | T | React.ChangeEvent<any>) => void];
    \ No newline at end of file diff --git a/hooks/use-intersection.html b/hooks/use-intersection/index.html similarity index 55% rename from hooks/use-intersection.html rename to hooks/use-intersection/index.html index 865f6b7892f..4406ea4b2e7 100644 --- a/hooks/use-intersection.html +++ b/hooks/use-intersection/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-intersection

    Detects if element is visible in viewport

    Import

    Usage

    +

    use-intersection

    Detects if element is visible in viewport

    Import

    Usage

    use-intersection returns information about the intersection of a given element with its scroll container or body element with Intersection Observer API:

    Obscured

    import { useRef } from 'react';
    @@ -61,4 +61,4 @@
     ): {
       ref: (element: T | null) => void;
       entry: IntersectionObserverEntry;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-interval.html b/hooks/use-interval/index.html similarity index 53% rename from hooks/use-interval.html rename to hooks/use-interval/index.html index 0f00db8f21c..b3634429350 100644 --- a/hooks/use-interval.html +++ b/hooks/use-interval/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-interval

    Calls function in given interval

    Import

    Usage

    +

    use-interval

    Calls function in given interval

    Import

    Usage

    Page loaded 0 seconds ago

    import { useState, useEffect } from 'react';
     import { useInterval } from '@mantine/hooks';
     import { Stack, Button, Text } from '@mantine/core';
    @@ -53,4 +53,4 @@
       stop: () => void;
       toggle: () => void;
       active: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-isomorphic-effect.html b/hooks/use-isomorphic-effect.html deleted file mode 100644 index 1091ad1b633..00000000000 --- a/hooks/use-isomorphic-effect.html +++ /dev/null @@ -1,16 +0,0 @@ -use-isomorphic-effect | Mantine

    use-isomorphic-effect

    useLayoutEffect that does not show warning when used in SSR

    Import

    Usage

    -

    use-isomorphic-effect is a replacement for useEffect hook that works in both browser and server environments.

    -
    import { useIsomorphicEffect } from '@mantine/hooks';
    -
    -function Demo() {
    -  useIsomorphicEffect(() => {
    -    document.title = 'title';
    -  });
    -
    -  return null;
    -}
    \ No newline at end of file diff --git a/hooks/use-isomorphic-effect/index.html b/hooks/use-isomorphic-effect/index.html new file mode 100644 index 00000000000..909231b2a39 --- /dev/null +++ b/hooks/use-isomorphic-effect/index.html @@ -0,0 +1,16 @@ +use-isomorphic-effect | Mantine

    use-isomorphic-effect

    useLayoutEffect that does not show warning when used in SSR

    Import

    Usage

    +

    use-isomorphic-effect is a replacement for useEffect hook that works in both browser and server environments.

    +
    import { useIsomorphicEffect } from '@mantine/hooks';
    +
    +function Demo() {
    +  useIsomorphicEffect(() => {
    +    document.title = 'title';
    +  });
    +
    +  return null;
    +}
    \ No newline at end of file diff --git a/hooks/use-list-state.html b/hooks/use-list-state/index.html similarity index 60% rename from hooks/use-list-state.html rename to hooks/use-list-state/index.html index a06107442fa..53d374b86b8 100644 --- a/hooks/use-list-state.html +++ b/hooks/use-list-state/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-list-state

    Manages array state

    Import

    Usage

    +

    use-list-state

    Manages array state

    Import

    Usage

    use-list-state provides an API to work with list state:

    const [values, handlers] = useListState([{ a: 1 }]);
     
    @@ -143,4 +143,4 @@
     If you call the hook with an empty array, you must specify item type:

    useListState(['hello']); // ok, item type is string
     useListState([]); // not ok, item type is any
    -useListState<string>([]); // ok, item type is string
    \ No newline at end of file +useListState<string>([]); // ok, item type is string
    \ No newline at end of file diff --git a/hooks/use-local-storage.html b/hooks/use-local-storage/index.html similarity index 58% rename from hooks/use-local-storage.html rename to hooks/use-local-storage/index.html index df301301b6f..34dfd9580a0 100644 --- a/hooks/use-local-storage.html +++ b/hooks/use-local-storage/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-local-storage

    Use localStorage value as react state, sync state across opened tabs

    Import

    Usage

    +

    use-local-storage

    Use localStorage value as react state, sync state across opened tabs

    Import

    Usage

    use-local-storage allows using value from the localStorage as react state. The hook works the same way as useState, but also writes the value to the localStorage:

    import { useLocalStorage } from '@mantine/hooks';
    @@ -116,4 +116,4 @@
     
    const [value, setValue] = useLocalStorage<'dark' | 'light'>({
       key: 'color-scheme',
       defaultValue: 'light',
    -});
    \ No newline at end of file +});
    \ No newline at end of file diff --git a/hooks/use-logger.html b/hooks/use-logger/index.html similarity index 50% rename from hooks/use-logger.html rename to hooks/use-logger/index.html index 442489fdfdd..18c9645bbe7 100644 --- a/hooks/use-logger.html +++ b/hooks/use-logger/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-logger

    Log given values to console when component renders

    Import

    Usage

    +

    use-logger

    Log given values to console when component renders

    Import

    Usage

    use-logger logs given values to the console each time component renders. Open devtools to see state changes in console:

    import { useState } from 'react';
    @@ -16,4 +16,4 @@
       return <Button onClick={() => setCount((c) => c + 1)}>Update state ({count})</Button>;
     }

    Definition

    -
    function useLogger(componentName: string, props: any[]): any;
    \ No newline at end of file +
    function useLogger(componentName: string, props: any[]): any;
    \ No newline at end of file diff --git a/hooks/use-media-query.html b/hooks/use-media-query/index.html similarity index 52% rename from hooks/use-media-query.html rename to hooks/use-media-query/index.html index 0e73d41f4a6..714babe895a 100644 --- a/hooks/use-media-query.html +++ b/hooks/use-media-query/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-media-query

    Subscribes to media queries with window.matchMedia

    Import

    Usage

    +

    use-media-query

    Subscribes to media queries with window.matchMedia

    Import

    Usage

    use-media-query subscribes to media queries. It receives a media query as an argument and returns true if the given media query matches the current state. The hook relies on window.matchMedia() API @@ -37,4 +37,4 @@ options?: { getInitialValueInEffect: boolean; } -): boolean;

    \ No newline at end of file +): boolean;
    \ No newline at end of file diff --git a/hooks/use-merged-ref.html b/hooks/use-merged-ref/index.html similarity index 51% rename from hooks/use-merged-ref.html rename to hooks/use-merged-ref/index.html index 03ccda6538a..b41051edf63 100644 --- a/hooks/use-merged-ref.html +++ b/hooks/use-merged-ref/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-merged-ref

    Merges multiple refs into one

    Import

    Usage

    +

    use-merged-ref

    Merges multiple refs into one

    Import

    Usage

    use-merged-ref accepts any number of refs and returns a function that should be passed to the ref prop. Use this hook when you need to use more than one ref on a single dom node, for example, -when you want to use use-click-outside and use-focus-trap hooks and also get a ref for yourself:

    +when you want to use use-click-outside and use-focus-trap hooks and also get a ref for yourself:

    import { useRef } from 'react';
     import { useClickOutside, useFocusTrap, useMergedRef } from '@mantine/hooks';
     
    @@ -34,9 +34,9 @@
     }

    mergeRefs works the same way as use-merged-ref, but does not use hooks internally. Use it only when you cannot use use-merged-ref. Note that mergeRefs will not work -correctly with use-focus-trap hook, you are required to +correctly with use-focus-trap hook, you are required to use use-merged-ref with it.

    Definition

    function useMergedRef<T = any>(...refs: React.ForwardedRef<T>[]): (node: T) => void;

    Set node type

    -
    useMergedRef<HTMLDivElement>();
    \ No newline at end of file +
    useMergedRef<HTMLDivElement>();
    \ No newline at end of file diff --git a/hooks/use-mouse.html b/hooks/use-mouse/index.html similarity index 56% rename from hooks/use-mouse.html rename to hooks/use-mouse/index.html index 1b118635e07..81f586a5957 100644 --- a/hooks/use-mouse.html +++ b/hooks/use-mouse/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-mouse

    Tracks mouse position over the viewport or given element

    Import

    Usage

    +

    use-mouse

    Tracks mouse position over the viewport or given element

    Import

    Usage

    Mouse coordinates { x: 0, y: 0 }

    import { Text, Code, Group, Box } from '@mantine/core';
     import { useMouse } from '@mantine/hooks';
     
    @@ -51,4 +51,4 @@
       x: number;
       y: number;
       ref: React.MutableRefObject<T>;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-move.html b/hooks/use-move/index.html similarity index 66% rename from hooks/use-move.html rename to hooks/use-move/index.html index 14910209573..9ef30787e9b 100644 --- a/hooks/use-move.html +++ b/hooks/use-move/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-move

    Handles move behavior over any element, use to build custom sliders, color pickers, etc.

    Import

    Usage

    +

    use-move

    Handles move behavior over any element, use to build custom sliders, color pickers, etc.

    Import

    Usage

    use-move handles move behavior over any element:

    Values { x: 20, y: 60 }

    import { useState } from 'react';
     import { Group, Text, Code, rem } from '@mantine/core';
    @@ -221,4 +221,4 @@
     ): {
       ref: MutableRefObject<T>;
       active: boolean;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-network.html b/hooks/use-network/index.html similarity index 54% rename from hooks/use-network.html rename to hooks/use-network/index.html index 466a63b0f44..1ea48d62662 100644 --- a/hooks/use-network.html +++ b/hooks/use-network/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-network

    Returns current connection status

    Import

    Usage

    +

    use-network

    Returns current connection status

    Import

    Usage

    use-network hook returns an object with current connection status:

    PropertyValue
    Online

    Online

    rtt
    downlink
    effectiveType
    saveData

    false

    import { Text, Table } from '@mantine/core';
     import { useNetwork } from '@mantine/hooks';
    @@ -68,4 +68,4 @@
       rtt?: number;
       saveData?: boolean;
       type?: 'bluetooth' | 'cellular' | 'ethernet' | 'wifi' | 'wimax' | 'none' | 'other' | 'unknown';
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-os.html b/hooks/use-os/index.html similarity index 51% rename from hooks/use-os.html rename to hooks/use-os/index.html index f60a01c3730..00e5141153b 100644 --- a/hooks/use-os.html +++ b/hooks/use-os/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-os

    Detects user operating system

    Import

    Usage

    +

    use-os

    Detects user operating system

    Import

    Usage

    use-os returns user's os. Possible values are: undetermined, macos, ios, windows, android, linux. If the OS cannot be identified, for example, during server side rendering undetermined will be returned.

    Your os is undetermined

    import { useOs } from '@mantine/hooks';
    @@ -19,4 +19,4 @@
     

    Definition

    function getOS(options?: {
       getValueInEffect: boolean;
    -}): 'undetermined' | 'macos' | 'ios' | 'windows' | 'android' | 'linux';
    \ No newline at end of file +}): 'undetermined' | 'macos' | 'ios' | 'windows' | 'android' | 'linux';
    \ No newline at end of file diff --git a/hooks/use-page-leave.html b/hooks/use-page-leave/index.html similarity index 50% rename from hooks/use-page-leave.html rename to hooks/use-page-leave/index.html index c2b69c79fae..0e1302b5b12 100644 --- a/hooks/use-page-leave.html +++ b/hooks/use-page-leave/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-page-leave

    Calls given function when mouse leaves the page

    Import

    Usage

    +

    use-page-leave

    Calls given function when mouse leaves the page

    Import

    Usage

    use-page-leave calls given function when mouse leaves the page:

    Mouse left the page 0 times

    import { useState } from 'react';
     import { usePageLeave } from '@mantine/hooks';
    @@ -14,4 +14,4 @@
       return <>Mouse left the page {leftsCount} times</>;
     }

    Definition

    -
    function usePageLeave(onPageLeave: () => void): void;
    \ No newline at end of file +
    function usePageLeave(onPageLeave: () => void): void;
    \ No newline at end of file diff --git a/hooks/use-pagination.html b/hooks/use-pagination/index.html similarity index 67% rename from hooks/use-pagination.html rename to hooks/use-pagination/index.html index 965acf69d43..b2641245ba4 100644 --- a/hooks/use-pagination.html +++ b/hooks/use-pagination/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-pagination

    Manages pagination state

    Import

    Usage

    -

    use-pagination is a state management hook for Pagination component, +

    use-pagination

    Manages pagination state

    Import

    Usage

    +

    use-pagination is a state management hook for Pagination component, it manages pagination with controlled and uncontrolled state:

    const pagination = usePagination({ total: 10, initialPage: 1 });
    @@ -100,4 +100,4 @@
       previous: () => void;
       first: () => void;
       last: () => void;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-previous.html b/hooks/use-previous/index.html similarity index 50% rename from hooks/use-previous.html rename to hooks/use-previous/index.html index d179d843d76..4b34af64c25 100644 --- a/hooks/use-previous.html +++ b/hooks/use-previous/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-previous

    Returns previous value of given state

    Import

    Usage

    +

    use-previous

    Returns previous value of given state

    Import

    Usage

    use-previous stores the previous value of a state in a ref. IT returns undefined on initial render and the previous value of a state after rerender:

    Current value:

    Previous value:

    import { TextInput, Text } from '@mantine/core';
    @@ -28,4 +28,4 @@
       );
     }

    Definition

    -
    function usePrevious<T>(value: T): T | undefined;
    \ No newline at end of file +
    function usePrevious<T>(value: T): T | undefined;
    \ No newline at end of file diff --git a/hooks/use-queue.html b/hooks/use-queue/index.html similarity index 53% rename from hooks/use-queue.html rename to hooks/use-queue/index.html index ab491effd8c..f7e079303e0 100644 --- a/hooks/use-queue.html +++ b/hooks/use-queue/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-queue

    Manages queue of values

    Import

    Usage

    +

    use-queue

    Manages queue of values

    Import

    Usage

    use-queue limits the number of data in current state and places the rest of it in a queue. -For example, in @mantine/notifications package number of +For example, in @mantine/notifications package number of notifications that is currently displayed is limited and other new notifications are added to the queue and displayed once available space appears.

    import { useQueue } from '@mantine/hooks';
    @@ -81,4 +81,4 @@
       add: (...items: T[]) => void;
       update: (fn: (state: T[]) => T[]) => void;
       cleanQueue: () => void;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-reduced-motion.html b/hooks/use-reduced-motion/index.html similarity index 51% rename from hooks/use-reduced-motion.html rename to hooks/use-reduced-motion/index.html index c99da03539d..19dc817f4da 100644 --- a/hooks/use-reduced-motion.html +++ b/hooks/use-reduced-motion/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-reduced-motion

    Detects if user prefers reduced motion

    Import

    Usage

    +

    use-reduced-motion

    Detects if user prefers reduced motion

    Import

    Usage

    use-reduced-motion detects if user prefers to reduce motion. -It uses use-media-query hook under the hood. +It uses use-media-query hook under the hood. Hook relies on window.matchMedia() API and will always return false if api is not available (e.g. during server side rendering), unless the initial value is provided in the first argument.

    Use hook to detect if user prefers to reduce motion ((prefers-reduced-motion: reduce) media query) and set animations duration based on this value.

    @@ -31,4 +31,4 @@ options?: { getInitialValueInEffect: boolean; } -): boolean;
    \ No newline at end of file +): boolean;
    \ No newline at end of file diff --git a/hooks/use-resize-observer.html b/hooks/use-resize-observer/index.html similarity index 52% rename from hooks/use-resize-observer.html rename to hooks/use-resize-observer/index.html index 3232c61b2e8..b969d28ac11 100644 --- a/hooks/use-resize-observer.html +++ b/hooks/use-resize-observer/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-resize-observer

    Tracks element size and position changes

    Import

    Usage

    +

    use-resize-observer

    Tracks element size and position changes

    Import

    Usage

    Resize textarea by dragging its right bottom corner

    Rect: { "x": 0, "y": 0, @@ -36,7 +36,7 @@ const [ref, rect] = useResizeObserver(); return <div ref={ref}>Observed</div>; }

    -

    See also use-element-size hook in case you need to subscribe only to width and height.

    +

    See also use-element-size hook in case you need to subscribe only to width and height.

    Definition

    function useResizeObserver<T extends HTMLElement = any>(): [
       MutableRefObject<T>,
    @@ -50,4 +50,4 @@
         height: number;
         width: number;
       }
    -];
    \ No newline at end of file +];
    \ No newline at end of file diff --git a/hooks/use-scroll-into-view.html b/hooks/use-scroll-into-view/index.html similarity index 63% rename from hooks/use-scroll-into-view.html rename to hooks/use-scroll-into-view/index.html index dc0aca8b5b8..36b42e04579 100644 --- a/hooks/use-scroll-into-view.html +++ b/hooks/use-scroll-into-view/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-scroll-into-view

    Scrolls element into view

    Import

    Usage

    +

    use-scroll-into-view

    Scrolls element into view

    Import

    Usage

    use-scroll-into-view handles scroll behavior for any scrollable element. Basic usage works the same way as element.scrollIntoView(). Hook adjusts scrolling animation with respect to the reduced-motion user preference.

    Hello there

    import { useScrollIntoView } from '@mantine/hooks';
    @@ -144,4 +144,4 @@
         alignment?: 'start' | 'end' | 'center';
       }) => void;
       cancel: () => void;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-set-state.html b/hooks/use-set-state.html deleted file mode 100644 index 34bfddb75ac..00000000000 --- a/hooks/use-set-state.html +++ /dev/null @@ -1,23 +0,0 @@ -use-set-state | Mantine

    use-set-state

    Manages state with setState-like API

    Import

    Usage

    -

    use-set-state works similar to how this.setState works in class components – it shallow merges state partial -into current state.

    -
    const [state, setState] = useSetState({ name: 'John', age: 35, job: 'Engineer' });
    -
    -state; // -> { name: 'John', age: 35, job: 'Engineer' }
    -
    -setState({ name: 'Jane' }); // -> { name: 'Jane', age: 35, job: 'Engineer' }
    -setState({ age: 25, job: 'Manager' }); // -> { name: 'Jane', age: 25, job: 'Manager' }
    -setState((current) => ({ age: current.age + 7 })); // -> { name: 'Jane', age: 32, job: 'Manager' }
    -

    Note that it can work only with objects: primitive values and arrays are not supported:

    -
    useSetState([1, 2, 3]); // -> will not work
    -useSetState(1); // -> will not work
    -useSetState({ skills: ['JavaScript', 'TypeScript'] }); // -> works fine
    -

    Definition

    -
    function useSetState<T extends Record<string, any>>(
    -  initialState: T
    -): readonly [T, (statePartial: Partial<T> | ((currentState: T) => Partial<T>)) => void];
    \ No newline at end of file diff --git a/hooks/use-set-state/index.html b/hooks/use-set-state/index.html new file mode 100644 index 00000000000..644ef6b35b9 --- /dev/null +++ b/hooks/use-set-state/index.html @@ -0,0 +1,23 @@ +use-set-state | Mantine

    use-set-state

    Manages state with setState-like API

    Import

    Usage

    +

    use-set-state works similar to how this.setState works in class components – it shallow merges state partial +into current state.

    +
    const [state, setState] = useSetState({ name: 'John', age: 35, job: 'Engineer' });
    +
    +state; // -> { name: 'John', age: 35, job: 'Engineer' }
    +
    +setState({ name: 'Jane' }); // -> { name: 'Jane', age: 35, job: 'Engineer' }
    +setState({ age: 25, job: 'Manager' }); // -> { name: 'Jane', age: 25, job: 'Manager' }
    +setState((current) => ({ age: current.age + 7 })); // -> { name: 'Jane', age: 32, job: 'Manager' }
    +

    Note that it can work only with objects: primitive values and arrays are not supported:

    +
    useSetState([1, 2, 3]); // -> will not work
    +useSetState(1); // -> will not work
    +useSetState({ skills: ['JavaScript', 'TypeScript'] }); // -> works fine
    +

    Definition

    +
    function useSetState<T extends Record<string, any>>(
    +  initialState: T
    +): readonly [T, (statePartial: Partial<T> | ((currentState: T) => Partial<T>)) => void];
    \ No newline at end of file diff --git a/hooks/use-shallow-effect.html b/hooks/use-shallow-effect.html deleted file mode 100644 index 73464200873..00000000000 --- a/hooks/use-shallow-effect.html +++ /dev/null @@ -1,29 +0,0 @@ -use-shallow-effect | Mantine

    use-shallow-effect

    useEffect drop in replacement with dependencies shallow comparison

    Import

    Usage

    -

    use-shallow-effect works exactly like useEffect, but performs shallow dependencies comparison instead of referential comparison:

    -
    import { useEffect } from 'react';
    -import { useShallowEffect } from '@mantine/hooks';
    -
    -// Will be called on each render
    -useEffect(() => {}, [{ a: 1 }]);
    -
    -// Will be called only once
    -useShallowEffect(() => {}, [{ a: 1 }]);
    -

    Hook works with primitive values, arrays and objects:

    -
    // Primitive values are handled like in useEffect
    -useShallowEffect(() => {}, [1, 2, 3]);
    -
    -// Arrays with primitive values will not trigger callback
    -useShallowEffect(() => {}, [[1], [2], [3]]);
    -
    -// Objects with primitive values will not trigger callback
    -useShallowEffect(() => {}, [{ a: 1 }, { b: 2 }]);
    -
    -// Arrays with objects will trigger callback since values are not shallow equal
    -useShallowEffect(() => {}, [[{ a: 1 }], [{ b: 2 }]]);
    -

    Definition

    -
    function useShallowEffect(cb: () => void, dependencies?: React.DependencyList): void;
    \ No newline at end of file diff --git a/hooks/use-shallow-effect/index.html b/hooks/use-shallow-effect/index.html new file mode 100644 index 00000000000..25fe3e35bee --- /dev/null +++ b/hooks/use-shallow-effect/index.html @@ -0,0 +1,29 @@ +use-shallow-effect | Mantine

    use-shallow-effect

    useEffect drop in replacement with dependencies shallow comparison

    Import

    Usage

    +

    use-shallow-effect works exactly like useEffect, but performs shallow dependencies comparison instead of referential comparison:

    +
    import { useEffect } from 'react';
    +import { useShallowEffect } from '@mantine/hooks';
    +
    +// Will be called on each render
    +useEffect(() => {}, [{ a: 1 }]);
    +
    +// Will be called only once
    +useShallowEffect(() => {}, [{ a: 1 }]);
    +

    Hook works with primitive values, arrays and objects:

    +
    // Primitive values are handled like in useEffect
    +useShallowEffect(() => {}, [1, 2, 3]);
    +
    +// Arrays with primitive values will not trigger callback
    +useShallowEffect(() => {}, [[1], [2], [3]]);
    +
    +// Objects with primitive values will not trigger callback
    +useShallowEffect(() => {}, [{ a: 1 }, { b: 2 }]);
    +
    +// Arrays with objects will trigger callback since values are not shallow equal
    +useShallowEffect(() => {}, [[{ a: 1 }], [{ b: 2 }]]);
    +

    Definition

    +
    function useShallowEffect(cb: () => void, dependencies?: React.DependencyList): void;
    \ No newline at end of file diff --git a/hooks/use-text-selection.html b/hooks/use-text-selection.html deleted file mode 100644 index a3f5f686473..00000000000 --- a/hooks/use-text-selection.html +++ /dev/null @@ -1,20 +0,0 @@ -use-text-selection | Mantine

    use-text-selection

    Returns current selected text on the page

    Import

    Usage

    -

    use-text-selection returns current text selection:

    -
    Select some text here or anywhere on the page and it will be displayed below
    Selected text:
    import { useTextSelection } from '@mantine/hooks';
    -
    -function Demo() {
    -  const selection = useTextSelection();
    -  return (
    -    <>
    -      <div>Select some text here or anywhere on the page and it will be displayed below</div>
    -      <div>Selected text: {selection?.toString()}</div>
    -    </>
    -  );
    -}
    -

    Definition

    -
    function useTextSelection(): Selection | null;
    \ No newline at end of file diff --git a/hooks/use-text-selection/index.html b/hooks/use-text-selection/index.html new file mode 100644 index 00000000000..7084106c77a --- /dev/null +++ b/hooks/use-text-selection/index.html @@ -0,0 +1,20 @@ +use-text-selection | Mantine

    use-text-selection

    Returns current selected text on the page

    Import

    Usage

    +

    use-text-selection returns current text selection:

    +
    Select some text here or anywhere on the page and it will be displayed below
    Selected text:
    import { useTextSelection } from '@mantine/hooks';
    +
    +function Demo() {
    +  const selection = useTextSelection();
    +  return (
    +    <>
    +      <div>Select some text here or anywhere on the page and it will be displayed below</div>
    +      <div>Selected text: {selection?.toString()}</div>
    +    </>
    +  );
    +}
    +

    Definition

    +
    function useTextSelection(): Selection | null;
    \ No newline at end of file diff --git a/hooks/use-timeout.html b/hooks/use-timeout/index.html similarity index 53% rename from hooks/use-timeout.html rename to hooks/use-timeout/index.html index 7072246276f..7af20a0e4ce 100644 --- a/hooks/use-timeout.html +++ b/hooks/use-timeout/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-timeout

    Calls function in given timeout

    Import

    Usage

    +

    use-timeout

    Calls function in given timeout

    Import

    Usage

    Random value:

    import { useState } from 'react';
     import { Button, Text, Group } from '@mantine/core';
     import { randomId, useTimeout } from '@mantine/hooks';
    @@ -45,4 +45,4 @@
     ): {
       start: (...callbackParams: any[]) => void;
       clear: () => void;
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/hooks/use-toggle.html b/hooks/use-toggle/index.html similarity index 54% rename from hooks/use-toggle.html rename to hooks/use-toggle/index.html index 5fd1576c407..0ed029b0878 100644 --- a/hooks/use-toggle.html +++ b/hooks/use-toggle/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-toggle

    Switch between given values

    Import

    Usage

    +

    use-toggle

    Switch between given values

    Import

    Usage

    use-toggle implements a common state pattern – it switches state between given values:

    import { Button } from '@mantine/core';
     import { useToggle } from '@mantine/hooks';
    @@ -39,4 +39,4 @@
     

    Definition

    function useToggle<T = boolean>(
       options?: readonly T[]
    -): readonly [T, (value?: React.SetStateAction<T>) => void];
    \ No newline at end of file +): readonly [T, (value?: React.SetStateAction<T>) => void];
    \ No newline at end of file diff --git a/hooks/use-uncontrolled.html b/hooks/use-uncontrolled.html deleted file mode 100644 index e0a6c983e7d..00000000000 --- a/hooks/use-uncontrolled.html +++ /dev/null @@ -1,53 +0,0 @@ -use-uncontrolled | Mantine

    use-uncontrolled

    Manage state of both controlled and uncontrolled components

    Import

    Usage

    -

    use-uncontrolled manages state for both controlled and uncontrolled components:

    -
    import { useUncontrolled } from '@mantine/hooks';
    -
    -function CustomInput({ value, defaultValue, onChange }) {
    -  const [_value, handleChange] = useUncontrolled({
    -    value,
    -    defaultValue,
    -    finalValue: 'Final',
    -    onChange,
    -  });
    -
    -  return (
    -    <input
    -      type="text"
    -      value={_value}
    -      onChange={(event) => handleChange(event.currentTarget.value)}
    -    />
    -  );
    -}
    -

    Set value type

    -

    By default, the hook will set type automatically, but you can provide your own type:

    -
    useUncontrolled<number>({
    -  value: 10,
    -  defaultValue: 5,
    -  finalValue: 20,
    -  onChange: (val) => console.log(val > 10),
    -});
    -

    Definition

    -
    interface UseUncontrolledInput<T> {
    -  /** Value for controlled state */
    -  value?: T;
    -
    -  /** Initial value for uncontrolled state */
    -  defaultValue?: T;
    -
    -  /** Final value for uncontrolled state when value and defaultValue are not provided */
    -  finalValue?: T;
    -
    -  /** Controlled state onChange handler */
    -  onChange?(value: T): void;
    -}
    -
    -function useUncontrolled<T>(input: UseUncontrolledInput<T>): [
    -  T, // current value
    -  (value: T) => void, // onChange function
    -  boolean // value that indicates if input is controlled or not
    -];
    \ No newline at end of file diff --git a/hooks/use-uncontrolled/index.html b/hooks/use-uncontrolled/index.html new file mode 100644 index 00000000000..f733d592130 --- /dev/null +++ b/hooks/use-uncontrolled/index.html @@ -0,0 +1,53 @@ +use-uncontrolled | Mantine

    use-uncontrolled

    Manage state of both controlled and uncontrolled components

    Import

    Usage

    +

    use-uncontrolled manages state for both controlled and uncontrolled components:

    +
    import { useUncontrolled } from '@mantine/hooks';
    +
    +function CustomInput({ value, defaultValue, onChange }) {
    +  const [_value, handleChange] = useUncontrolled({
    +    value,
    +    defaultValue,
    +    finalValue: 'Final',
    +    onChange,
    +  });
    +
    +  return (
    +    <input
    +      type="text"
    +      value={_value}
    +      onChange={(event) => handleChange(event.currentTarget.value)}
    +    />
    +  );
    +}
    +

    Set value type

    +

    By default, the hook will set type automatically, but you can provide your own type:

    +
    useUncontrolled<number>({
    +  value: 10,
    +  defaultValue: 5,
    +  finalValue: 20,
    +  onChange: (val) => console.log(val > 10),
    +});
    +

    Definition

    +
    interface UseUncontrolledInput<T> {
    +  /** Value for controlled state */
    +  value?: T;
    +
    +  /** Initial value for uncontrolled state */
    +  defaultValue?: T;
    +
    +  /** Final value for uncontrolled state when value and defaultValue are not provided */
    +  finalValue?: T;
    +
    +  /** Controlled state onChange handler */
    +  onChange?(value: T): void;
    +}
    +
    +function useUncontrolled<T>(input: UseUncontrolledInput<T>): [
    +  T, // current value
    +  (value: T) => void, // onChange function
    +  boolean // value that indicates if input is controlled or not
    +];
    \ No newline at end of file diff --git a/hooks/use-validated-state.html b/hooks/use-validated-state/index.html similarity index 53% rename from hooks/use-validated-state.html rename to hooks/use-validated-state/index.html index 753f951e8ef..7d67c98c9c7 100644 --- a/hooks/use-validated-state.html +++ b/hooks/use-validated-state/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-validated-state

    Manages state with validation

    Import

    Usage

    +

    use-validated-state

    Manages state with validation

    Import

    Usage

    use-validated-state validates state with a given rule each time state is set. It returns an object with current validation state, last valid value and current value:

    const [{ lastValidValue, value, valid }, setValue] = useValidatedState(
    @@ -70,4 +70,4 @@
         valid: boolean;
       },
       (val: T) => void
    -];
    \ No newline at end of file +];
    \ No newline at end of file diff --git a/hooks/use-viewport-size.html b/hooks/use-viewport-size.html deleted file mode 100644 index b01d7446acf..00000000000 --- a/hooks/use-viewport-size.html +++ /dev/null @@ -1,19 +0,0 @@ -use-viewport-size | Mantine

    use-viewport-size

    Returns current viewport size

    Import

    Usage

    -

    use-viewport-size returns current viewport's width and height, it subscribes to resize and orientationchange events, -during ssr hook will return { width: 0, height: 0 }:

    -

    Width: 0, height: 0

    import { useViewportSize } from '@mantine/hooks';
    -
    -function Demo() {
    -  const { height, width } = useViewportSize();
    -  return <>Width: {width}, height: {height}</>;
    -}
    -

    Definition

    -
    function useViewportSize(): {
    -  height: number;
    -  width: number;
    -};
    \ No newline at end of file diff --git a/hooks/use-viewport-size/index.html b/hooks/use-viewport-size/index.html new file mode 100644 index 00000000000..ade4293c53e --- /dev/null +++ b/hooks/use-viewport-size/index.html @@ -0,0 +1,19 @@ +use-viewport-size | Mantine

    use-viewport-size

    Returns current viewport size

    Import

    Usage

    +

    use-viewport-size returns current viewport's width and height, it subscribes to resize and orientationchange events, +during ssr hook will return { width: 0, height: 0 }:

    +

    Width: 0, height: 0

    import { useViewportSize } from '@mantine/hooks';
    +
    +function Demo() {
    +  const { height, width } = useViewportSize();
    +  return <>Width: {width}, height: {height}</>;
    +}
    +

    Definition

    +
    function useViewportSize(): {
    +  height: number;
    +  width: number;
    +};
    \ No newline at end of file diff --git a/hooks/use-window-event.html b/hooks/use-window-event/index.html similarity index 50% rename from hooks/use-window-event.html rename to hooks/use-window-event/index.html index 17c86d4f3af..a8012273ec9 100644 --- a/hooks/use-window-event.html +++ b/hooks/use-window-event/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-window-event

    Adds event listener to window on component mount and removes it on unmount

    Import

    Usage

    +

    use-window-event

    Adds event listener to window on component mount and removes it on unmount

    Import

    Usage

    use-window-event adds event listener to window object on component mount and removes it on unmount:

    import { useEffect } from 'react';
     import { useWindowEvent } from '@mantine/hooks';
    @@ -41,4 +41,4 @@
       type: K,
       listener: (this: Window, ev: WindowEventMap[K]) => any,
       options?: boolean | AddEventListenerOptions
    -): void;
    \ No newline at end of file +): void;
    \ No newline at end of file diff --git a/hooks/use-window-scroll.html b/hooks/use-window-scroll/index.html similarity index 50% rename from hooks/use-window-scroll.html rename to hooks/use-window-scroll/index.html index 58869a5f442..9353b51401b 100644 --- a/hooks/use-window-scroll.html +++ b/hooks/use-window-scroll/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    use-window-scroll

    Tracks window scroll position

    Import

    Usage

    +

    use-window-scroll

    Tracks window scroll position

    Import

    Usage

    use-window-scroll returns current scroll position and a function to scroll smoothly to given position:

    Scroll position x: 0, y: 0

    import { useWindowScroll } from '@mantine/hooks';
     import { Button, Text, Group } from '@mantine/core';
    @@ -24,4 +24,4 @@
     
    function useWindowScroll(): readonly [
       { x: number; y: number },
       (position: { x?: number; y?: number }) => void
    -];
    \ No newline at end of file +];
    \ No newline at end of file diff --git a/index.html b/index.html index e8c0c67695a..01bc375c466 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Build fully functional accessible web applications faster than ever – Mantine includes more than 100 customizable components and 50 hooks to cover you in any situation

    Free and open source

    All packages have MIT license, you can use Mantine in any project

    TypeScript based

    Build type safe applications, all components and hooks export types

    Use anywhere

    Mantine supports all modern frameworks: Next.js, Remix, etc.

    100+ components

    Every input can have description...

    ...and error

    Dark color scheme

    Dark and light theme

    Add dark theme to your application with just a few lines of code – Mantine exports global styles both for light and dark theme, all components support dark theme out of the box.

    import { MantineProvider } from '@mantine/core';
    +

    Build fully functional accessible web applications faster than ever – Mantine includes more than 100 customizable components and 50 hooks to cover you in any situation

    Free and open source

    All packages have MIT license, you can use Mantine in any project

    TypeScript based

    Build type safe applications, all components and hooks export types

    Use anywhere

    Mantine supports all modern frameworks: Next.js, Remix, etc.

    100+ components

    Every input can have description...

    ...and error

    Dark color scheme

    Dark and light theme

    Add dark theme to your application with just a few lines of code – Mantine exports global styles both for light and dark theme, all components support dark theme out of the box.

    import { MantineProvider } from '@mantine/core';
     
     function Demo() {
       return (
    @@ -59,7 +59,7 @@
       background-color: var(--mantine-color-white);
       border-width: rem(1px);
       box-shadow: var(--mantine-shadow-sm);
    -}
    View more examples

    Flexible theming

    Extend default theme with any amount of additional colors, replace shadows, radius, spacing, fonts and many other properties to match your design requirements.

    Bright pink badge
    import { Badge, Button, MantineProvider, createTheme } from '@mantine/core';
    +}
    View more examples

    Flexible theming

    Extend default theme with any amount of additional colors, replace shadows, radius, spacing, fonts and many other properties to match your design requirements.

    Bright pink badge
    import { Badge, Button, MantineProvider, createTheme } from '@mantine/core';
     
     const theme = createTheme({
       fontFamily: 'Greycliff CF, sans-serif',
    @@ -88,4 +88,4 @@
           <div>Width: {width}, height: {height}</div>
         </>
       );
    -}

    Ready to get started?

    Mantine works in all modern environments – get started instantly with Next.js, Gatsby.js, Redwood, Vite or Remix by following getting started guide:

    \ No newline at end of file +}

    Ready to get started?

    Mantine works in all modern environments – get started instantly with Next.js, Gatsby.js, Redwood, Vite or Remix by following getting started guide:

    \ No newline at end of file diff --git a/others/carousel.html b/others/carousel/index.html similarity index 88% rename from others/carousel.html rename to others/carousel/index.html index b60d8b1dabd..edb6983d1b1 100644 --- a/others/carousel.html +++ b/others/carousel/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Carousel

    Embla based carousel component

    License

    Installation

    +

    Carousel

    Embla based carousel component

    License

    Installation

    yarn add embla-carousel-react @mantine/carousel

    After installation import package styles at the root of your application:

    import '@mantine/carousel/styles.css';
    @@ -55,7 +55,7 @@ ); }

    Responsive styles

    -

    slideSize and slideGap props work the same way as style props, +

    slideSize and slideGap props work the same way as style props, you can pass an object with values for different breakpoints:

    import { Carousel } from '@mantine/carousel';
     
    @@ -219,7 +219,7 @@
         </Carousel>
       );
     }
    -

    Styles API

    Carousel supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    +

    Styles API

    Carousel supports Styles API, you can add styles to any inner element of the component withclassNames prop. Follow Styles API documentation to learn more.

    CodeHighlight

    Highlight code with highlight.js

    License

    Installation

    +

    CodeHighlight

    Highlight code with highlight.js

    License

    Installation

    yarn add @mantine/code-highlight

    After installation import package styles at the root of your application:

    import '@mantine/code-highlight/styles.css';
    @@ -411,4 +411,4 @@ <InlineCodeHighlight code="import React from 'react';" language="tsx" />. Is not that cool? </Text> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/others/dropzone.html b/others/dropzone/index.html similarity index 80% rename from others/dropzone.html rename to others/dropzone/index.html index 742b11dd9b6..549410d1531 100644 --- a/others/dropzone.html +++ b/others/dropzone/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Dropzone

    Capture files from user with drag and drop

    License

    Installation

    +

    Dropzone

    Capture files from user with drag and drop

    License

    Installation

    yarn add @mantine/dropzone

    After installation import package styles at the root of your application:

    import '@mantine/dropzone/styles.css';
    @@ -68,7 +68,7 @@
  • Dropzone.Idle is visible when the user does not drag anything over dropzone
  • Loading state

    -

    Set loading prop to indicate loading state with LoadingOverlay component. +

    Set loading prop to indicate loading state with LoadingOverlay component. When loading props is true user cannot drop or select new files (Dropzone becomes disabled):

    import { Dropzone } from '@mantine/dropzone';
     
    @@ -296,4 +296,4 @@
           </Dropzone.FullScreen>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/others/modals.html b/others/modals/index.html similarity index 73% rename from others/modals.html rename to others/modals/index.html index e8675293e29..8d7a9827245 100644 --- a/others/modals.html +++ b/others/modals/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Modals manager

    Centralized modals manager with option to handle state of multi-step modals

    License

    Installation

    +

    Modals manager

    Centralized modals manager with option to handle state of multi-step modals

    License

    Installation

    yarn add @mantine/modals

    Setup ModalsProvider

    Wrap your app with ModalsProvider component:

    @@ -52,7 +52,7 @@
  • closeOnCancel – should modal be closed when cancel button is clicked, defaults to true
  • cancelProps – cancel button props
  • confirmProps – confirm button props
  • -
  • groupProps – buttons Group props
  • +
  • groupProps – buttons Group props
  • labels – cancel and confirm buttons labels, can be defined on ModalsProvider
  • Using this properties you can customize confirm modal to match current context requirements:

    @@ -241,4 +241,4 @@
    • Use internal component state, or
    • Use the modal component instead of modals manager
    • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/others/notifications.html b/others/notifications/index.html similarity index 79% rename from others/notifications.html rename to others/notifications/index.html index fa2eb6604a2..40098dff2d3 100644 --- a/others/notifications.html +++ b/others/notifications/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Notifications system

    Mantine notifications system

    License

    Installation

    +

    Notifications system

    Mantine notifications system

    License

    Installation

    yarn add @mantine/notifications

    After installation import package styles at the root of your application:

    import '@mantine/notifications/styles.css';

    Add Notifications component anywhere in your application. Note that:

      -
    • It is required to render Notifications component inside MantineProvider
    • +
    • It is required to render Notifications component inside MantineProvider
    • You do not need to wrap your application with Notifications component – it is not a provider, it is a regular component
    • You should not render multiple Notifications components – if you do that, your notifications will be duplicated
    @@ -75,7 +75,7 @@
  • onOpen – calls when notification is mounted
  • autoClose – defines timeout in ms on which notification will be automatically closed, use false to disable auto close
  • message – required notification body
  • -
  • color, icon, title, radius, className, style, loading – props passed down to the Notification component
  • +
  • color, icon, title, radius, className, style, loading – props passed down to the Notification component
  • All properties except message are optional.

    import { IconX } from '@tabler/icons-react';
    @@ -110,8 +110,8 @@
       );
     }

    Customize notification styles

    -

    You can use style, className or Styles API classNames, styles props to customize notification styles. -Usually, it is better to override Notification styles with classNames prop in the theme object.

    +

    You can use style, className or Styles API classNames, styles props to customize notification styles. +Usually, it is better to override Notification styles with classNames prop in the theme object.

    import { Button } from '@mantine/core';
     import { notifications } from '@mantine/notifications';
     import classes from './Demo.module.css';
    @@ -133,7 +133,7 @@
       );
     }

    Notifications container position

    -

    Notifications container has fixed position inside, it is rendered inside Portal by default. +

    Notifications container has fixed position inside, it is rendered inside Portal by default. Position cannot be changed per notification. Notifications supports the following positions:

    • top-left
    • @@ -318,4 +318,4 @@ </Button> </Group> ); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/others/nprogress.html b/others/nprogress/index.html similarity index 60% rename from others/nprogress.html rename to others/nprogress/index.html index 019512f8fa8..4f6e61c5ef3 100644 --- a/others/nprogress.html +++ b/others/nprogress/index.html @@ -3,12 +3,12 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    NavigationProgress

    Navigation progress bar

    License

    Installation

    +

    NavigationProgress

    Navigation progress bar

    License

    Installation

    yarn add @mantine/nprogress

    After installation import package styles at the root of your application:

    import '@mantine/nprogress/styles.css';

    Setup NavigationProgress

    -

    Render NavigationProgress anywhere in your app within MantineProvider:

    +

    Render NavigationProgress anywhere in your app within MantineProvider:

    import { MantineProvider } from '@mantine/core';
     import { NavigationProgress } from '@mantine/nprogress';
     
    @@ -39,4 +39,4 @@
           </Group>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/others/spotlight.html b/others/spotlight/index.html similarity index 77% rename from others/spotlight.html rename to others/spotlight/index.html index ad69ecd75b9..d70351a2e79 100644 --- a/others/spotlight.html +++ b/others/spotlight/index.html @@ -3,14 +3,14 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Spotlight

    Command center for your application

    License

    Installation

    +

    Spotlight

    Command center for your application

    License

    Installation

    yarn add @mantine/spotlight

    After installation import package styles at the root of your application:

    import '@mantine/spotlight/styles.css';

    Usage

    Spotlight component can be used as a search or as a command center of your application. It is used as a search on mantine.dev website, you can trigger it with Ctrl + K shortcut. -Spotlight is based on Modal component and supports most of its props.

    +Spotlight is based on Modal component and supports most of its props.

    import { rem, Button } from '@mantine/core';
     import { Spotlight, SpotlightActionData, spotlight } from '@mantine/spotlight';
     import { IconHome, IconDashboard, IconFileText, IconSearch } from '@tabler/icons-react';
    @@ -100,7 +100,7 @@
       );
     }

    Keyboard shortcuts

    -

    Spotlight uses use-hotkeys hook to handle keyboard shortcuts. +

    Spotlight uses use-hotkeys hook to handle keyboard shortcuts. By default, Ctrl + K and Cmd + K shortcuts are used to open spotlight, you can change them with shortcut prop:

    import { Spotlight } from '@mantine/spotlight';
    @@ -164,7 +164,7 @@
     
  • When the scrollable prop is set, actions list height will always equal to the value of maxHeight prop (it will not shrink if there are not enough actions to fill the space). When there are more actions than can fit into the list, it will become scrollable. Scrolling logic is handled -by ScrollArea component.
  • +by ScrollArea component.

    In other words, if you want the actions list to shrink, do not set scrollable prop and use limit prop. If you want the actions list to always have a fixed height, set scrollable and maxHeight props.

    @@ -363,4 +363,4 @@ <div className={RemoveScroll.classNames.fullWidth} /> // to make "right: 0" -<div className={RemoveScroll.classNames.zeroRight} />
    \ No newline at end of file +<div className={RemoveScroll.classNames.zeroRight} />
    \ No newline at end of file diff --git a/others/tiptap.html b/others/tiptap/index.html similarity index 87% rename from others/tiptap.html rename to others/tiptap/index.html index 665472bab3e..59da737434b 100644 --- a/others/tiptap.html +++ b/others/tiptap/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Rich text editor

    Tiptap based rich text editor

    License

    Installation

    +

    Rich text editor

    Tiptap based rich text editor

    License

    Installation

    Install with yarn:

    yarn add @mantine/tiptap @mantine/core @mantine/hooks @tabler/icons-react @tiptap/react @tiptap/pm @tiptap/extension-link @tiptap/starter-kit

    After installation import package styles at the root of your application:

    @@ -180,7 +180,7 @@
    yarn add @tiptap/extension-color @tiptap/extension-text-style

    You can use the following controls to change text color:

      -
    • RichTextEditor.ColorPicker – allows to pick colors from given predefined color swatches and with ColorPicker component
    • +
    • RichTextEditor.ColorPicker – allows to pick colors from given predefined color swatches and with ColorPicker component
    • RichTextEditor.Color – allows to apply given color with one click
    • RichTextEditor.UnsetColor – clears color styles
    @@ -313,7 +313,7 @@ ); }

    Typography styles

    -

    By default, RichTextEditor renders content with TypographyStylesProvider and some additional styles. +

    By default, RichTextEditor renders content with TypographyStylesProvider and some additional styles. You can disable these styles by setting withTypographyStyles={false}:

    import { RichTextEditor } from '@mantine/tiptap';
     import { useEditor } from '@tiptap/react';
    @@ -331,8 +331,8 @@
         </RichTextEditor>
       );
     }
    -

    Then you will be able to add your own styles either with global styles -or with Styles API:

    +

    Then you will be able to add your own styles either with global styles +or with Styles API:

    // ...
     <RichTextEditor
       editor={editor}
    @@ -757,4 +757,4 @@
       colorPickerPalette: 'Color palette',
       colorPickerSave: 'Save',
       colorPickerColorLabel: (color) => `Set text color ${color}`,
    -};
    \ No newline at end of file +};
    \ No newline at end of file diff --git a/overview.html b/overview/index.html similarity index 86% rename from overview.html rename to overview/index.html index 66701016dcb..0d79d79e531 100644 --- a/overview.html +++ b/overview/index.html @@ -3,17 +3,17 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    API overview

    +

    API overview

    This guide will help you get familiar with core Mantine concepts. -Please read this guide, theming and styles sections before starting development +Please read this guide, theming and styles sections before starting development to learn about all of the available theming and styling features.

    MantineProvider

    -

    MantineProvider is required to be rendered at the root of your application. +

    MantineProvider is required to be rendered at the root of your application. It is responsible for:

    import { MantineProvider } from '@mantine/core';
     
    @@ -25,9 +25,9 @@
       );
     }

    Theme object

    -

    Theme object stores design tokens, components default props, context styles +

    Theme object stores design tokens, components default props, context styles and other data that can be accessed by any Mantine component. Most of the theme values are exposed as -CSS variables and can be accessed both in JavaScript and CSS.

    +CSS variables and can be accessed both in JavaScript and CSS.

    import { MantineProvider, createTheme } from '@mantine/core';
     
     // Your theme configuration is merged with default theme
    @@ -67,20 +67,20 @@
       return <div style={style} />;
     }

    Colors

    -

    Colors are stored in theme.colors object and are exposed as CSS variables. +

    Colors are stored in theme.colors object and are exposed as CSS variables. Each color must have at least 10 shades. You can generate new colors based on a single color value -with the colors generator.

    +with the colors generator.

    Colors are numbered from 0 to 9 where 0 is the lightest and 9 is the darkest color. Example of blue color from the default theme:

    blue 0

    #e7f5ff

    blue 1

    #d0ebff

    blue 2

    #a5d8ff

    blue 3

    #74c0fc

    blue 4

    #4dabf7

    blue 5

    #339af0

    blue 6

    #228be6

    blue 7

    #1c7ed6

    blue 8

    #1971c2

    blue 9

    #1864ab

    -

    To access colors in styles use CSS variables:

    +

    To access colors in styles use CSS variables:

    .demo {
       background: var(--mantine-color-blue-9);
       color: var(--mantine-color-blue-0);
     }

    CSS modules

    -

    All Mantine components use CSS modules for styling. -It is recommended to use CSS modules in your project as well, but it is not required – +

    All Mantine components use CSS modules for styling. +It is recommended to use CSS modules in your project as well, but it is not required – Mantine components are fully compatible with any third-party styling solution and native CSS.

    CSS modules are available in most modern frameworks out of the box. To use them, create a file with .module.css extension:

    /* Button.module.css */
    @@ -98,10 +98,10 @@
       );
     }

    PostCSS preset

    -

    postcss-preset-mantine provides several CSS functions and mixins to simplify your styles. +

    postcss-preset-mantine provides several CSS functions and mixins to simplify your styles. It is not required to use it, but highly recommended. All demos that feature styles assume that you have this preset installed.

    -

    postcss-preset-mantine allows you to use functions and mixins in .css files:

    +

    postcss-preset-mantine allows you to use functions and mixins in .css files:

    .demo {
       padding: rem(20px); /* Convert px to rem */
     
    @@ -129,20 +129,20 @@
       }
     }

    Vanilla extract

    -

    Vanilla extract is a good alternative to CSS modules if you -prefer to write styles in JavaScript. Mantine provides Vanilla extract integration +

    Vanilla extract is a good alternative to CSS modules if you +prefer to write styles in JavaScript. Mantine provides Vanilla extract integration with @mantine/vanilla-extract package.

    CSS variables

    -

    Theme values are converted to CSS variables and are available to +

    Theme values are converted to CSS variables and are available to use in your styles. All Mantine CSS variables are prefixed with --mantine-, for example:

    • theme.fontFamily--mantine-font-family
    • theme.colors.blue[9]--mantine-color-blue-9
    • theme.spacing.xl--mantine-spacing-xl
    -

    Most of Mantine components have associated CSS variables that can be -customized in theme or inline with vars prop. Example of customizing -Button CSS variables to add new xxl and xxs sizes:

    +

    Most of Mantine components have associated CSS variables that can be +customized in theme or inline with vars prop. Example of customizing +Button CSS variables to add new xxl and xxs sizes:

    import { Button, rem, Group, MantineProvider, createTheme } from '@mantine/core';
     
     const theme = createTheme({
    @@ -186,14 +186,14 @@
       );
     }

    Styles API

    -

    Styles API is a set of props and techniques that allows you to customize styles of any element -inside Mantine component inline or with theme object. All Mantine components that -have styles support Styles API.

    +

    Styles API is a set of props and techniques that allows you to customize styles of any element +inside Mantine component inline or with theme object. All Mantine components that +have styles support Styles API.

    Every Mantine component has a set of elements names that can be used to apply styles to inner elements inside the component. -Example of TextInput component selectors:

    +Example of TextInput component selectors:

    SelectorStatic selectorDescription
    wrapper.mantine-Button-wrapperRoot element of the Input
    input.mantine-Button-inputInput element
    section.mantine-Button-sectionLeft and right sections
    root.mantine-Button-rootRoot element
    label.mantine-Button-labelLabel element
    required.mantine-Button-requiredRequired asterisk element, rendered inside label
    description.mantine-Button-descriptionDescription element
    error.mantine-Button-errorError element
    -

    These selectors can be used to apply styles to inner elements with classNames or styles props:

    +

    These selectors can be used to apply styles to inner elements with classNames or styles props:

    import { useState } from 'react';
     import { TextInput } from '@mantine/core';
     import classes from './Demo.module.css';
    @@ -220,9 +220,9 @@
       );
     }

    Color scheme

    -

    All Mantine components support light, dark and auto color schemes. By default, +

    All Mantine components support light, dark and auto color schemes. By default, the color scheme is light, it can be changed by the user and will be persisted in localStorage.

    -

    You can use configure the default color scheme on MantineProvider:

    +

    You can use configure the default color scheme on MantineProvider:

    import { MantineProvider } from '@mantine/core';
     
     function Demo() {
    @@ -232,7 +232,7 @@
         </MantineProvider>
       );
     }
    -

    And use useMantineColorScheme hook to create color scheme toggle control:

    +

    And use useMantineColorScheme hook to create color scheme toggle control:

    import { ActionIcon, useMantineColorScheme, useComputedColorScheme } from '@mantine/core';
     import { IconSun, IconMoon } from '@tabler/icons-react';
     import cx from 'clsx';
    @@ -255,10 +255,10 @@
       );
     }

    Unstyled components

    -

    You can use Mantine as a headless UI library. To do that, simply do not import @mantine/*/styles.css -in your application. Then you will be able to apply styles to Mantine components using the Styles API +

    You can use Mantine as a headless UI library. To do that, simply do not import @mantine/*/styles.css +in your application. Then you will be able to apply styles to Mantine components using the Styles API with a styling solution of your choice.

    -

    All components also support unstyled prop +

    All components also support unstyled prop that removes all library styles from the component:

    Chat panel
    import { Tabs } from '@mantine/core';
     
    @@ -276,4 +276,4 @@
           <Tabs.Panel value="account">Account panel</Tabs.Panel>
         </Tabs>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 5ee18ad2322..a725cb863d1 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,230 +1,231 @@ -https://mantine.dev/about2023-09-18T13:37:42.648Zdaily0.7 -https://mantine.dev/app-shell2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/colors-generator2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/combobox2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/contribute2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/getting-started2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/overview2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/templates-usage2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/changelog/7-0-02023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/changelog/previous-versions2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/accordion2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/action-icon2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/affix2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/alert2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/anchor2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/app-shell2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/aspect-ratio2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/autocomplete2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/avatar2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/background-image2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/badge2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/blockquote2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/box2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/breadcrumbs2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/burger2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/button2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/card2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/center2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/checkbox2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/chip2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/close-button2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/code2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/collapse2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/color-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/color-picker2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/color-swatch2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/combobox2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/container2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/copy-button2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/dialog2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/divider2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/drawer2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/fieldset2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/file-button2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/file-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/flex2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/focus-trap2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/grid2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/group2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/highlight2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/hover-card2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/image2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/indicator2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/json-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/kbd2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/list2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/loader2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/loading-overlay2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/mark2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/menu2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/modal2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/multi-select2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/native-select2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/nav-link2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/notification2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/number-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/overlay2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/pagination2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/paper2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/password-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/pill2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/pills-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/pin-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/popover2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/portal2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/progress2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/radio2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/rating2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/ring-progress2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/scroll-area2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/segmented-control2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/select2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/simple-grid2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/skeleton2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/slider2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/space2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/spoiler2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/stack2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/stepper2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/switch2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/table2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/tabs2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/tags-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/text-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/text2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/textarea2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/theme-icon2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/timeline2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/title2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/tooltip2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/transition2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/typography-styles-provider2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/unstyled-button2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/core/visually-hidden2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/calendar2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/date-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/date-picker-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/date-picker2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/date-time-picker2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/dates-provider2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/getting-started2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/month-picker-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/month-picker2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/time-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/year-picker-input2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/dates/year-picker2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/6x-to-7x2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/gatsby2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/icons2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/javascript2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/jest2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/next2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/polymorphic2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/redwood2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/remix2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/storybook2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/typescript2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/guides/vite2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/carousel2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/code-highlight2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/dropzone2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/modals2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/notifications2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/nprogress2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/spotlight2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/others/tiptap2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-click-outside2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-clipboard2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-color-scheme2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-counter2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-debounced-state2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-debounced-value2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-did-update2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-disclosure2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-document-title2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-document-visibility2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-element-size2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-event-listener2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-eye-dropper2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-favicon2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-focus-return2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-focus-trap2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-focus-within2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-force-update2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-fullscreen2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-hash2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-headroom2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-hotkeys2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-hover2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-id2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-idle2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-input-state2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-intersection2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-interval2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-isomorphic-effect2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-list-state2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-local-storage2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-logger2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-media-query2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-merged-ref2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-mouse2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-move2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-network2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-os2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-page-leave2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-pagination2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-previous2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-queue2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-reduced-motion2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-resize-observer2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-scroll-into-view2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-set-state2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-shallow-effect2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-text-selection2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-timeout2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-toggle2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-uncontrolled2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-validated-state2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-viewport-size2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-window-event2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/hooks/use-window-scroll2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/create-form-context2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/errors2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/nested2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/recipes2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/status2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/use-form2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/validation2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/validators2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/form/values2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/color-functions2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/css-files-list2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/css-modules2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/css-variables-list2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/css-variables2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/data-attributes2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/global-styles2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/postcss-preset2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/rem2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/responsive2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/rtl2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/style-props2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/style2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/styles-api2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/styles-performance2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/unstyled2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/vanilla-extract2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/styles/variants-sizes2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/color-schemes2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/colors2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/default-props2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/default-theme2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/mantine-provider2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/theme-object2023-09-18T13:37:42.649Zdaily0.7 -https://mantine.dev/theming/typography2023-09-18T13:37:42.649Zdaily0.7 +https://mantine.dev2023-09-19T18:29:44.983Zdaily0.7 +https://mantine.dev/4042023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/about2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/app-shell2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/colors-generator2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/combobox2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/contribute2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/getting-started2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/overview2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/templates-usage2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/changelog/7-0-02023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/changelog/previous-versions2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/accordion2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/action-icon2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/anchor2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/alert2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/affix2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/app-shell2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/aspect-ratio2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/autocomplete2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/avatar2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/background-image2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/badge2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/box2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/blockquote2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/breadcrumbs2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/burger2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/card2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/center2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/button2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/checkbox2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/chip2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/close-button2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/code2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/collapse2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/color-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/color-picker2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/color-swatch2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/combobox2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/container2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/copy-button2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/dialog2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/divider2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/drawer2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/fieldset2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/file-button2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/file-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/flex2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/focus-trap2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/grid2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/group2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/highlight2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/hover-card2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/indicator2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/json-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/image2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/kbd2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/list2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/loading-overlay2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/loader2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/mark2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/menu2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/modal2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/multi-select2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/native-select2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/nav-link2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/notification2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/number-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/overlay2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/pagination2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/paper2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/password-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/pill2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/pills-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/pin-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/portal2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/popover2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/progress2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/radio2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/ring-progress2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/rating2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/scroll-area2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/segmented-control2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/select2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/simple-grid2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/skeleton2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/slider2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/space2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/spoiler2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/stack2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/stepper2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/switch2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/tabs2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/tags-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/table2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/text2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/theme-icon2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/textarea2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/text-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/timeline2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/title2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/tooltip2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/transition2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/unstyled-button2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/typography-styles-provider2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/core/visually-hidden2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/calendar2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/date-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/date-picker2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/date-picker-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/date-time-picker2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/dates-provider2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/month-picker2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/getting-started2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/month-picker-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/year-picker2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/time-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/dates/year-picker-input2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/create-form-context2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/nested2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/errors2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/recipes2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/status2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/use-form2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/validators2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/validation2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/form/values2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/6x-to-7x2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/gatsby2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/icons2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/javascript2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/jest2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/next2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/polymorphic2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/remix2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/storybook2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/redwood2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/typescript2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/guides/vite2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-click-outside2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-clipboard2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-color-scheme2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-counter2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-debounced-state2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-debounced-value2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-disclosure2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-did-update2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-document-title2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-event-listener2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-element-size2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-eye-dropper2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-document-visibility2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-favicon2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-focus-return2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-focus-trap2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-focus-within2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-force-update2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-fullscreen2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-hash2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-headroom2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-hotkeys2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-hover2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-id2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-idle2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-input-state2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-intersection2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-interval2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-isomorphic-effect2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-list-state2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-local-storage2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-logger2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-media-query2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-merged-ref2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-mouse2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-move2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-network2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-os2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-page-leave2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-pagination2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-previous2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-queue2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-resize-observer2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-reduced-motion2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-scroll-into-view2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-set-state2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-shallow-effect2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-text-selection2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-timeout2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-toggle2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-uncontrolled2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-validated-state2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-viewport-size2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-window-event2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/hooks/use-window-scroll2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/carousel2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/code-highlight2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/dropzone2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/notifications2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/modals2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/nprogress2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/spotlight2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/others/tiptap2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/color-functions2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/css-files-list2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/css-modules2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/css-variables2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/css-variables-list2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/data-attributes2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/global-styles2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/postcss-preset2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/rem2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/responsive2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/rtl2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/style2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/style-props2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/styles-api2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/styles-performance2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/unstyled2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/vanilla-extract2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/styles/variants-sizes2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/color-schemes2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/colors2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/default-props2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/default-theme2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/mantine-provider2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/theme-object2023-09-19T18:29:44.984Zdaily0.7 +https://mantine.dev/theming/typography2023-09-19T18:29:44.984Zdaily0.7 \ No newline at end of file diff --git a/styles/color-functions.html b/styles/color-functions/index.html similarity index 64% rename from styles/color-functions.html rename to styles/color-functions/index.html index 2ddd2434d7b..2943087845d 100644 --- a/styles/color-functions.html +++ b/styles/color-functions/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Color functions

    +

    Color functions

    @mantine/core package exports several functions that can be used to manipulate colors or extract information before using them as CSS value.

    darken and lighten

    @@ -64,7 +64,7 @@ variable: CssVariable | undefined; }

    parseThemeColor function can be used everywhere theme object is available, -for example in CSS variables resolver, variant color resolver +for example in CSS variables resolver, variant color resolver or component body:

    import { parseThemeColor, useMantineTheme, MantineColor } from '@mantine/core';
     
    @@ -123,4 +123,4 @@
           Box with contrast text
         </Box>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/css-files-list.html b/styles/css-files-list/index.html similarity index 81% rename from styles/css-files-list.html rename to styles/css-files-list/index.html index 4d2134ccc40..f65ec140147 100644 --- a/styles/css-files-list.html +++ b/styles/css-files-list/index.html @@ -3,16 +3,16 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    CSS files list

    +

    CSS files list

    This page contains a list of CSS files that you can import from @mantine/core package as a replacement for @mantine/core/styles.css.

    Components dependencies

    -

    Some components require additional styles to work properly. For example, Button -component is based on UnstyledButton. If you want to use Button, +

    Some components require additional styles to work properly. For example, Button +component is based on UnstyledButton. If you want to use Button, you need to import styles for UnstyledButton as well.

    import '@mantine/core/styles/UnstyledButton.css';
     import '@mantine/core/styles/Button.css';
    -

    Some components like Select do not have any styles on their own – they are built +

    Some components like Select do not have any styles on their own – they are built on top of other components. To find out which components are used in a particular component, check the component source code.

    Global styles

    @@ -21,8 +21,8 @@
    import '@mantine/core/styles/global.css';

    Import order

    It is important to keep correct styles import order. For example, if you want to use -Button component, you need to import styles for -UnstyledButton first and then import styles for Button.

    +Button component, you need to import styles for +UnstyledButton first and then import styles for Button.

    // ✅ Correct order – Button styles will override UnstyledButton styles
     import '@mantine/core/styles/UnstyledButton.css';
     import '@mantine/core/styles/Button.css';
    @@ -30,4 +30,4 @@ import '@mantine/core/styles/Button.css'; import '@mantine/core/styles/UnstyledButton.css';

    Files list

    -
    ComponentImport
    globalimport '@mantine/core/styles/global.css';
    Accordionimport '@mantine/core/styles/Accordion.css';
    ActionIconimport '@mantine/core/styles/ActionIcon.css';
    Affiximport '@mantine/core/styles/Affix.css';
    Alertimport '@mantine/core/styles/Alert.css';
    Anchorimport '@mantine/core/styles/Anchor.css';
    AppShellimport '@mantine/core/styles/AppShell.css';
    AspectRatioimport '@mantine/core/styles/AspectRatio.css';
    Avatarimport '@mantine/core/styles/Avatar.css';
    BackgroundImageimport '@mantine/core/styles/BackgroundImage.css';
    Badgeimport '@mantine/core/styles/Badge.css';
    Blockquoteimport '@mantine/core/styles/Blockquote.css';
    Breadcrumbsimport '@mantine/core/styles/Breadcrumbs.css';
    Burgerimport '@mantine/core/styles/Burger.css';
    Buttonimport '@mantine/core/styles/Button.css';
    Cardimport '@mantine/core/styles/Card.css';
    Centerimport '@mantine/core/styles/Center.css';
    Checkboximport '@mantine/core/styles/Checkbox.css';
    Chipimport '@mantine/core/styles/Chip.css';
    CloseButtonimport '@mantine/core/styles/CloseButton.css';
    Codeimport '@mantine/core/styles/Code.css';
    ColorInputimport '@mantine/core/styles/ColorInput.css';
    ColorPickerimport '@mantine/core/styles/ColorPicker.css';
    ColorSwatchimport '@mantine/core/styles/ColorSwatch.css';
    Comboboximport '@mantine/core/styles/Combobox.css';
    Containerimport '@mantine/core/styles/Container.css';
    Dialogimport '@mantine/core/styles/Dialog.css';
    Dividerimport '@mantine/core/styles/Divider.css';
    Drawerimport '@mantine/core/styles/Drawer.css';
    Fieldsetimport '@mantine/core/styles/Fieldset.css';
    Fleximport '@mantine/core/styles/Flex.css';
    Gridimport '@mantine/core/styles/Grid.css';
    Groupimport '@mantine/core/styles/Group.css';
    Imageimport '@mantine/core/styles/Image.css';
    Indicatorimport '@mantine/core/styles/Indicator.css';
    InlineInputimport '@mantine/core/styles/InlineInput.css';
    Inputimport '@mantine/core/styles/Input.css';
    Kbdimport '@mantine/core/styles/Kbd.css';
    Listimport '@mantine/core/styles/List.css';
    Loaderimport '@mantine/core/styles/Loader.css';
    LoadingOverlayimport '@mantine/core/styles/LoadingOverlay.css';
    Markimport '@mantine/core/styles/Mark.css';
    Menuimport '@mantine/core/styles/Menu.css';
    Modalimport '@mantine/core/styles/Modal.css';
    ModalBaseimport '@mantine/core/styles/ModalBase.css';
    NavLinkimport '@mantine/core/styles/NavLink.css';
    Notificationimport '@mantine/core/styles/Notification.css';
    NumberInputimport '@mantine/core/styles/NumberInput.css';
    Overlayimport '@mantine/core/styles/Overlay.css';
    Paginationimport '@mantine/core/styles/Pagination.css';
    Paperimport '@mantine/core/styles/Paper.css';
    PasswordInputimport '@mantine/core/styles/PasswordInput.css';
    Pillimport '@mantine/core/styles/Pill.css';
    PillsInputimport '@mantine/core/styles/PillsInput.css';
    PinInputimport '@mantine/core/styles/PinInput.css';
    Popoverimport '@mantine/core/styles/Popover.css';
    Progressimport '@mantine/core/styles/Progress.css';
    Radioimport '@mantine/core/styles/Radio.css';
    Ratingimport '@mantine/core/styles/Rating.css';
    RingProgressimport '@mantine/core/styles/RingProgress.css';
    ScrollAreaimport '@mantine/core/styles/ScrollArea.css';
    SegmentedControlimport '@mantine/core/styles/SegmentedControl.css';
    SimpleGridimport '@mantine/core/styles/SimpleGrid.css';
    Skeletonimport '@mantine/core/styles/Skeleton.css';
    Sliderimport '@mantine/core/styles/Slider.css';
    Spoilerimport '@mantine/core/styles/Spoiler.css';
    Stackimport '@mantine/core/styles/Stack.css';
    Stepperimport '@mantine/core/styles/Stepper.css';
    Switchimport '@mantine/core/styles/Switch.css';
    Tableimport '@mantine/core/styles/Table.css';
    Tabsimport '@mantine/core/styles/Tabs.css';
    Textimport '@mantine/core/styles/Text.css';
    ThemeIconimport '@mantine/core/styles/ThemeIcon.css';
    Timelineimport '@mantine/core/styles/Timeline.css';
    Titleimport '@mantine/core/styles/Title.css';
    Tooltipimport '@mantine/core/styles/Tooltip.css';
    TypographyStylesProviderimport '@mantine/core/styles/TypographyStylesProvider.css';
    UnstyledButtonimport '@mantine/core/styles/UnstyledButton.css';
    VisuallyHiddenimport '@mantine/core/styles/VisuallyHidden.css';
    \ No newline at end of file +
    ComponentImport
    globalimport '@mantine/core/styles/global.css';
    Accordionimport '@mantine/core/styles/Accordion.css';
    ActionIconimport '@mantine/core/styles/ActionIcon.css';
    Affiximport '@mantine/core/styles/Affix.css';
    Alertimport '@mantine/core/styles/Alert.css';
    Anchorimport '@mantine/core/styles/Anchor.css';
    AppShellimport '@mantine/core/styles/AppShell.css';
    AspectRatioimport '@mantine/core/styles/AspectRatio.css';
    Avatarimport '@mantine/core/styles/Avatar.css';
    BackgroundImageimport '@mantine/core/styles/BackgroundImage.css';
    Badgeimport '@mantine/core/styles/Badge.css';
    Blockquoteimport '@mantine/core/styles/Blockquote.css';
    Breadcrumbsimport '@mantine/core/styles/Breadcrumbs.css';
    Burgerimport '@mantine/core/styles/Burger.css';
    Buttonimport '@mantine/core/styles/Button.css';
    Cardimport '@mantine/core/styles/Card.css';
    Centerimport '@mantine/core/styles/Center.css';
    Checkboximport '@mantine/core/styles/Checkbox.css';
    Chipimport '@mantine/core/styles/Chip.css';
    CloseButtonimport '@mantine/core/styles/CloseButton.css';
    Codeimport '@mantine/core/styles/Code.css';
    ColorInputimport '@mantine/core/styles/ColorInput.css';
    ColorPickerimport '@mantine/core/styles/ColorPicker.css';
    ColorSwatchimport '@mantine/core/styles/ColorSwatch.css';
    Comboboximport '@mantine/core/styles/Combobox.css';
    Containerimport '@mantine/core/styles/Container.css';
    Dialogimport '@mantine/core/styles/Dialog.css';
    Dividerimport '@mantine/core/styles/Divider.css';
    Drawerimport '@mantine/core/styles/Drawer.css';
    Fieldsetimport '@mantine/core/styles/Fieldset.css';
    Fleximport '@mantine/core/styles/Flex.css';
    Gridimport '@mantine/core/styles/Grid.css';
    Groupimport '@mantine/core/styles/Group.css';
    Imageimport '@mantine/core/styles/Image.css';
    Indicatorimport '@mantine/core/styles/Indicator.css';
    InlineInputimport '@mantine/core/styles/InlineInput.css';
    Inputimport '@mantine/core/styles/Input.css';
    Kbdimport '@mantine/core/styles/Kbd.css';
    Listimport '@mantine/core/styles/List.css';
    Loaderimport '@mantine/core/styles/Loader.css';
    LoadingOverlayimport '@mantine/core/styles/LoadingOverlay.css';
    Markimport '@mantine/core/styles/Mark.css';
    Menuimport '@mantine/core/styles/Menu.css';
    Modalimport '@mantine/core/styles/Modal.css';
    ModalBaseimport '@mantine/core/styles/ModalBase.css';
    NavLinkimport '@mantine/core/styles/NavLink.css';
    Notificationimport '@mantine/core/styles/Notification.css';
    NumberInputimport '@mantine/core/styles/NumberInput.css';
    Overlayimport '@mantine/core/styles/Overlay.css';
    Paginationimport '@mantine/core/styles/Pagination.css';
    Paperimport '@mantine/core/styles/Paper.css';
    PasswordInputimport '@mantine/core/styles/PasswordInput.css';
    Pillimport '@mantine/core/styles/Pill.css';
    PillsInputimport '@mantine/core/styles/PillsInput.css';
    PinInputimport '@mantine/core/styles/PinInput.css';
    Popoverimport '@mantine/core/styles/Popover.css';
    Progressimport '@mantine/core/styles/Progress.css';
    Radioimport '@mantine/core/styles/Radio.css';
    Ratingimport '@mantine/core/styles/Rating.css';
    RingProgressimport '@mantine/core/styles/RingProgress.css';
    ScrollAreaimport '@mantine/core/styles/ScrollArea.css';
    SegmentedControlimport '@mantine/core/styles/SegmentedControl.css';
    SimpleGridimport '@mantine/core/styles/SimpleGrid.css';
    Skeletonimport '@mantine/core/styles/Skeleton.css';
    Sliderimport '@mantine/core/styles/Slider.css';
    Spoilerimport '@mantine/core/styles/Spoiler.css';
    Stackimport '@mantine/core/styles/Stack.css';
    Stepperimport '@mantine/core/styles/Stepper.css';
    Switchimport '@mantine/core/styles/Switch.css';
    Tableimport '@mantine/core/styles/Table.css';
    Tabsimport '@mantine/core/styles/Tabs.css';
    Textimport '@mantine/core/styles/Text.css';
    ThemeIconimport '@mantine/core/styles/ThemeIcon.css';
    Timelineimport '@mantine/core/styles/Timeline.css';
    Titleimport '@mantine/core/styles/Title.css';
    Tooltipimport '@mantine/core/styles/Tooltip.css';
    TypographyStylesProviderimport '@mantine/core/styles/TypographyStylesProvider.css';
    UnstyledButtonimport '@mantine/core/styles/UnstyledButton.css';
    VisuallyHiddenimport '@mantine/core/styles/VisuallyHidden.css';
    \ No newline at end of file diff --git a/styles/css-modules.html b/styles/css-modules/index.html similarity index 70% rename from styles/css-modules.html rename to styles/css-modules/index.html index f5222b48566..20794296f83 100644 --- a/styles/css-modules.html +++ b/styles/css-modules/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    CSS modules

    +

    CSS modules

    All Mantine components use CSS modules for styling. It is recommended to use CSS modules in your project as well, but it is not required – Mantine components are fully compatible with any third-party styling solution and native CSS.

    @@ -51,15 +51,15 @@

    By adding this import, you will have all styles of @mantine/core components in your application.

    Import styles per component

    If you want to reduce CSS bundle size, you can import styles per component. Note that some components -have dependencies, for example, Button component uses UnstyledButton +have dependencies, for example, Button component uses UnstyledButton component internally, so you need to import styles for both components. You can find a full list of -exported styles from @mantine/core package and additional instructions on this page.

    +exported styles from @mantine/core package and additional instructions on this page.

    import '@mantine/core/styles/UnstyledButton.css';
     import '@mantine/core/styles/Button.css';

    Adding styles to Mantine components

    You can add styles to most of Mantine components using className prop – the same way as you would do with a regular HTML element. -To set properties to your theme values, you can use Mantine CSS variables:

    +To set properties to your theme values, you can use Mantine CSS variables:

    Box component with some styles
    import { Box } from '@mantine/core';
     import classes from './Demo.module.css';
     
    @@ -71,7 +71,7 @@
       );
     }

    To apply styles to inner elements of Mantine components with CSS modules, you can use classNames prop -(see Styles API for more information):

    +(see Styles API for more information):

    import { useState } from 'react';
     import { TextInput } from '@mantine/core';
     import classes from './Demo.module.css';
    @@ -158,7 +158,7 @@
     Before choosing another styling solution, make sure that CSS modules do not fit your needs.
     Other solutions have limitations, for example:

      -
    • It is hard to customize styles based on data-* attributes when using utility-based CSS libraries
    • -
    • It is impossible to style inner elements of Mantine components with static selectors when using styled-components and other similar libraries if component uses Portal because some elements will be rendered outside of the component root and inner elements are not part of the component tree
    • +
    • It is hard to customize styles based on data-* attributes when using utility-based CSS libraries
    • +
    • It is impossible to style inner elements of Mantine components with static selectors when using styled-components and other similar libraries if component uses Portal because some elements will be rendered outside of the component root and inner elements are not part of the component tree
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/styles/css-variables-list.html b/styles/css-variables-list/index.html similarity index 91% rename from styles/css-variables-list.html rename to styles/css-variables-list/index.html index b46857b365e..36dcbe0ec64 100644 --- a/styles/css-variables-list.html +++ b/styles/css-variables-list/index.html @@ -3,6 +3,6 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Default CSS variables list

    +

    Default CSS variables list

    This page contains a list of all Mantine CSS variables that are generated from default theme.

    -

    CSS variables not depending on color scheme

    --mantine-scale1
    --mantine-cursor-typedefault
    --mantine-webkit-font-smoothingantialiased
    --mantine-color-schemelight dark
    --mantine-moz-font-smoothinggrayscale
    --mantine-color-white#fff
    --mantine-color-black#000
    --mantine-line-height1.55
    --mantine-font-family-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji
    --mantine-font-family-monospaceui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace
    --mantine-font-family-headings-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji
    --mantine-heading-font-weight700
    --mantine-radius-default0.25rem
    --mantine-primary-color-filledvar(--mantine-color-blue-filled)
    --mantine-primary-color-filled-hovervar(--mantine-color-blue-filled-hover)
    --mantine-primary-color-lightvar(--mantine-color-blue-light)
    --mantine-primary-color-light-hovervar(--mantine-color-blue-light-hover)
    --mantine-primary-color-light-colorvar(--mantine-color-blue-light-color)
    --mantine-breakpoint-xs36em
    --mantine-breakpoint-sm48em
    --mantine-breakpoint-md62em
    --mantine-breakpoint-lg75em
    --mantine-breakpoint-xl88em
    --mantine-spacing-xs0.625rem
    --mantine-spacing-sm0.75rem
    --mantine-spacing-md1rem
    --mantine-spacing-lg1.25rem
    --mantine-spacing-xl2rem
    --mantine-font-size-xs0.75rem
    --mantine-font-size-sm0.875rem
    --mantine-font-size-md1rem
    --mantine-font-size-lg1.125rem
    --mantine-font-size-xl1.25rem
    --mantine-line-height-xs1.4
    --mantine-line-height-sm1.45
    --mantine-line-height-md1.55
    --mantine-line-height-lg1.6
    --mantine-line-height-xl1.65
    --mantine-shadow-xs
    --mantine-shadow-sm
    --mantine-shadow-md
    --mantine-shadow-lg
    --mantine-shadow-xl
    --mantine-radius-xs0.125rem
    --mantine-radius-sm0.25rem
    --mantine-radius-md0.5rem
    --mantine-radius-lg1rem
    --mantine-radius-xl2rem
    --mantine-color-dark-0#C1C2C5
    --mantine-color-dark-1#A6A7AB
    --mantine-color-dark-2#909296
    --mantine-color-dark-3#5c5f66
    --mantine-color-dark-4#373A40
    --mantine-color-dark-5#2C2E33
    --mantine-color-dark-6#25262b
    --mantine-color-dark-7#1A1B1E
    --mantine-color-dark-8#141517
    --mantine-color-dark-9#101113
    --mantine-color-gray-0#f8f9fa
    --mantine-color-gray-1#f1f3f5
    --mantine-color-gray-2#e9ecef
    --mantine-color-gray-3#dee2e6
    --mantine-color-gray-4#ced4da
    --mantine-color-gray-5#adb5bd
    --mantine-color-gray-6#868e96
    --mantine-color-gray-7#495057
    --mantine-color-gray-8#343a40
    --mantine-color-gray-9#212529
    --mantine-color-red-0#fff5f5
    --mantine-color-red-1#ffe3e3
    --mantine-color-red-2#ffc9c9
    --mantine-color-red-3#ffa8a8
    --mantine-color-red-4#ff8787
    --mantine-color-red-5#ff6b6b
    --mantine-color-red-6#fa5252
    --mantine-color-red-7#f03e3e
    --mantine-color-red-8#e03131
    --mantine-color-red-9#c92a2a
    --mantine-color-pink-0#fff0f6
    --mantine-color-pink-1#ffdeeb
    --mantine-color-pink-2#fcc2d7
    --mantine-color-pink-3#faa2c1
    --mantine-color-pink-4#f783ac
    --mantine-color-pink-5#f06595
    --mantine-color-pink-6#e64980
    --mantine-color-pink-7#d6336c
    --mantine-color-pink-8#c2255c
    --mantine-color-pink-9#a61e4d
    --mantine-color-grape-0#f8f0fc
    --mantine-color-grape-1#f3d9fa
    --mantine-color-grape-2#eebefa
    --mantine-color-grape-3#e599f7
    --mantine-color-grape-4#da77f2
    --mantine-color-grape-5#cc5de8
    --mantine-color-grape-6#be4bdb
    --mantine-color-grape-7#ae3ec9
    --mantine-color-grape-8#9c36b5
    --mantine-color-grape-9#862e9c
    --mantine-color-violet-0#f3f0ff
    --mantine-color-violet-1#e5dbff
    --mantine-color-violet-2#d0bfff
    --mantine-color-violet-3#b197fc
    --mantine-color-violet-4#9775fa
    --mantine-color-violet-5#845ef7
    --mantine-color-violet-6#7950f2
    --mantine-color-violet-7#7048e8
    --mantine-color-violet-8#6741d9
    --mantine-color-violet-9#5f3dc4
    --mantine-color-indigo-0#edf2ff
    --mantine-color-indigo-1#dbe4ff
    --mantine-color-indigo-2#bac8ff
    --mantine-color-indigo-3#91a7ff
    --mantine-color-indigo-4#748ffc
    --mantine-color-indigo-5#5c7cfa
    --mantine-color-indigo-6#4c6ef5
    --mantine-color-indigo-7#4263eb
    --mantine-color-indigo-8#3b5bdb
    --mantine-color-indigo-9#364fc7
    --mantine-color-blue-0#e7f5ff
    --mantine-color-blue-1#d0ebff
    --mantine-color-blue-2#a5d8ff
    --mantine-color-blue-3#74c0fc
    --mantine-color-blue-4#4dabf7
    --mantine-color-blue-5#339af0
    --mantine-color-blue-6#228be6
    --mantine-color-blue-7#1c7ed6
    --mantine-color-blue-8#1971c2
    --mantine-color-blue-9#1864ab
    --mantine-color-cyan-0#e3fafc
    --mantine-color-cyan-1#c5f6fa
    --mantine-color-cyan-2#99e9f2
    --mantine-color-cyan-3#66d9e8
    --mantine-color-cyan-4#3bc9db
    --mantine-color-cyan-5#22b8cf
    --mantine-color-cyan-6#15aabf
    --mantine-color-cyan-7#1098ad
    --mantine-color-cyan-8#0c8599
    --mantine-color-cyan-9#0b7285
    --mantine-color-teal-0#e6fcf5
    --mantine-color-teal-1#c3fae8
    --mantine-color-teal-2#96f2d7
    --mantine-color-teal-3#63e6be
    --mantine-color-teal-4#38d9a9
    --mantine-color-teal-5#20c997
    --mantine-color-teal-6#12b886
    --mantine-color-teal-7#0ca678
    --mantine-color-teal-8#099268
    --mantine-color-teal-9#087f5b
    --mantine-color-green-0#ebfbee
    --mantine-color-green-1#d3f9d8
    --mantine-color-green-2#b2f2bb
    --mantine-color-green-3#8ce99a
    --mantine-color-green-4#69db7c
    --mantine-color-green-5#51cf66
    --mantine-color-green-6#40c057
    --mantine-color-green-7#37b24d
    --mantine-color-green-8#2f9e44
    --mantine-color-green-9#2b8a3e
    --mantine-color-lime-0#f4fce3
    --mantine-color-lime-1#e9fac8
    --mantine-color-lime-2#d8f5a2
    --mantine-color-lime-3#c0eb75
    --mantine-color-lime-4#a9e34b
    --mantine-color-lime-5#94d82d
    --mantine-color-lime-6#82c91e
    --mantine-color-lime-7#74b816
    --mantine-color-lime-8#66a80f
    --mantine-color-lime-9#5c940d
    --mantine-color-yellow-0#fff9db
    --mantine-color-yellow-1#fff3bf
    --mantine-color-yellow-2#ffec99
    --mantine-color-yellow-3#ffe066
    --mantine-color-yellow-4#ffd43b
    --mantine-color-yellow-5#fcc419
    --mantine-color-yellow-6#fab005
    --mantine-color-yellow-7#f59f00
    --mantine-color-yellow-8#f08c00
    --mantine-color-yellow-9#e67700
    --mantine-color-orange-0#fff4e6
    --mantine-color-orange-1#ffe8cc
    --mantine-color-orange-2#ffd8a8
    --mantine-color-orange-3#ffc078
    --mantine-color-orange-4#ffa94d
    --mantine-color-orange-5#ff922b
    --mantine-color-orange-6#fd7e14
    --mantine-color-orange-7#f76707
    --mantine-color-orange-8#e8590c
    --mantine-color-orange-9#d9480f
    --mantine-h1-font-size2.125rem
    --mantine-h1-line-height1.3
    --mantine-h1-font-weight700
    --mantine-h2-font-size1.625rem
    --mantine-h2-line-height1.35
    --mantine-h2-font-weight700
    --mantine-h3-font-size1.375rem
    --mantine-h3-line-height1.4
    --mantine-h3-font-weight700
    --mantine-h4-font-size1.125rem
    --mantine-h4-line-height1.45
    --mantine-h4-font-weight700
    --mantine-h5-font-size1rem
    --mantine-h5-line-height1.5
    --mantine-h5-font-weight700
    --mantine-h6-font-size0.875rem
    --mantine-h6-line-height1.5
    --mantine-h6-font-weight700

    Light color scheme only variables

    --mantine-color-brightvar(--mantine-color-black)
    --mantine-color-text#000
    --mantine-color-body#fff
    --mantine-color-error#fa5252
    --mantine-color-placeholder#adb5bd
    --mantine-color-anchor#228be6
    --mantine-color-default#fff
    --mantine-color-default-hover#f8f9fa
    --mantine-color-default-color#000
    --mantine-color-default-border#ced4da
    --mantine-color-dimmedvar(--mantine-color-gray-6)
    --mantine-color-dark-filled#25262b
    --mantine-color-dark-filled-hover#1A1B1E
    --mantine-color-dark-lightrgba(37, 38, 43, 0.1)
    --mantine-color-dark-light-hoverrgba(37, 38, 43, 0.12)
    --mantine-color-dark-light-color#25262b
    --mantine-color-dark-outline#25262b
    --mantine-color-dark-outline-hoverrgba(37, 38, 43, 0.05)
    --mantine-color-gray-filled#868e96
    --mantine-color-gray-filled-hover#495057
    --mantine-color-gray-lightrgba(134, 142, 150, 0.1)
    --mantine-color-gray-light-hoverrgba(134, 142, 150, 0.12)
    --mantine-color-gray-light-color#868e96
    --mantine-color-gray-outline#868e96
    --mantine-color-gray-outline-hoverrgba(134, 142, 150, 0.05)
    --mantine-color-red-filled#fa5252
    --mantine-color-red-filled-hover#f03e3e
    --mantine-color-red-lightrgba(250, 82, 82, 0.1)
    --mantine-color-red-light-hoverrgba(250, 82, 82, 0.12)
    --mantine-color-red-light-color#fa5252
    --mantine-color-red-outline#fa5252
    --mantine-color-red-outline-hoverrgba(250, 82, 82, 0.05)
    --mantine-color-pink-filled#e64980
    --mantine-color-pink-filled-hover#d6336c
    --mantine-color-pink-lightrgba(230, 73, 128, 0.1)
    --mantine-color-pink-light-hoverrgba(230, 73, 128, 0.12)
    --mantine-color-pink-light-color#e64980
    --mantine-color-pink-outline#e64980
    --mantine-color-pink-outline-hoverrgba(230, 73, 128, 0.05)
    --mantine-color-grape-filled#be4bdb
    --mantine-color-grape-filled-hover#ae3ec9
    --mantine-color-grape-lightrgba(190, 75, 219, 0.1)
    --mantine-color-grape-light-hoverrgba(190, 75, 219, 0.12)
    --mantine-color-grape-light-color#be4bdb
    --mantine-color-grape-outline#be4bdb
    --mantine-color-grape-outline-hoverrgba(190, 75, 219, 0.05)
    --mantine-color-violet-filled#7950f2
    --mantine-color-violet-filled-hover#7048e8
    --mantine-color-violet-lightrgba(121, 80, 242, 0.1)
    --mantine-color-violet-light-hoverrgba(121, 80, 242, 0.12)
    --mantine-color-violet-light-color#7950f2
    --mantine-color-violet-outline#7950f2
    --mantine-color-violet-outline-hoverrgba(121, 80, 242, 0.05)
    --mantine-color-indigo-filled#4c6ef5
    --mantine-color-indigo-filled-hover#4263eb
    --mantine-color-indigo-lightrgba(76, 110, 245, 0.1)
    --mantine-color-indigo-light-hoverrgba(76, 110, 245, 0.12)
    --mantine-color-indigo-light-color#4c6ef5
    --mantine-color-indigo-outline#4c6ef5
    --mantine-color-indigo-outline-hoverrgba(76, 110, 245, 0.05)
    --mantine-color-blue-filled#228be6
    --mantine-color-blue-filled-hover#1c7ed6
    --mantine-color-blue-lightrgba(34, 139, 230, 0.1)
    --mantine-color-blue-light-hoverrgba(34, 139, 230, 0.12)
    --mantine-color-blue-light-color#228be6
    --mantine-color-blue-outline#228be6
    --mantine-color-blue-outline-hoverrgba(34, 139, 230, 0.05)
    --mantine-color-cyan-filled#15aabf
    --mantine-color-cyan-filled-hover#1098ad
    --mantine-color-cyan-lightrgba(21, 170, 191, 0.1)
    --mantine-color-cyan-light-hoverrgba(21, 170, 191, 0.12)
    --mantine-color-cyan-light-color#15aabf
    --mantine-color-cyan-outline#15aabf
    --mantine-color-cyan-outline-hoverrgba(21, 170, 191, 0.05)
    --mantine-color-teal-filled#12b886
    --mantine-color-teal-filled-hover#0ca678
    --mantine-color-teal-lightrgba(18, 184, 134, 0.1)
    --mantine-color-teal-light-hoverrgba(18, 184, 134, 0.12)
    --mantine-color-teal-light-color#12b886
    --mantine-color-teal-outline#12b886
    --mantine-color-teal-outline-hoverrgba(18, 184, 134, 0.05)
    --mantine-color-green-filled#40c057
    --mantine-color-green-filled-hover#37b24d
    --mantine-color-green-lightrgba(64, 192, 87, 0.1)
    --mantine-color-green-light-hoverrgba(64, 192, 87, 0.12)
    --mantine-color-green-light-color#40c057
    --mantine-color-green-outline#40c057
    --mantine-color-green-outline-hoverrgba(64, 192, 87, 0.05)
    --mantine-color-lime-filled#82c91e
    --mantine-color-lime-filled-hover#74b816
    --mantine-color-lime-lightrgba(130, 201, 30, 0.1)
    --mantine-color-lime-light-hoverrgba(130, 201, 30, 0.12)
    --mantine-color-lime-light-color#82c91e
    --mantine-color-lime-outline#82c91e
    --mantine-color-lime-outline-hoverrgba(130, 201, 30, 0.05)
    --mantine-color-yellow-filled#fab005
    --mantine-color-yellow-filled-hover#f59f00
    --mantine-color-yellow-lightrgba(250, 176, 5, 0.1)
    --mantine-color-yellow-light-hoverrgba(250, 176, 5, 0.12)
    --mantine-color-yellow-light-color#fab005
    --mantine-color-yellow-outline#fab005
    --mantine-color-yellow-outline-hoverrgba(250, 176, 5, 0.05)
    --mantine-color-orange-filled#fd7e14
    --mantine-color-orange-filled-hover#f76707
    --mantine-color-orange-lightrgba(253, 126, 20, 0.1)
    --mantine-color-orange-light-hoverrgba(253, 126, 20, 0.12)
    --mantine-color-orange-light-color#fd7e14
    --mantine-color-orange-outline#fd7e14
    --mantine-color-orange-outline-hoverrgba(253, 126, 20, 0.05)

    Dark color scheme only variables

    --mantine-color-brightvar(--mantine-color-white)
    --mantine-color-textvar(--mantine-color-dark-0)
    --mantine-color-body#1A1B1E
    --mantine-color-error#c92a2a
    --mantine-color-placeholder#5c5f66
    --mantine-color-anchor#4dabf7
    --mantine-color-default#25262b
    --mantine-color-default-hover#2C2E33
    --mantine-color-default-color#fff
    --mantine-color-default-border#373A40
    --mantine-color-dimmedvar(--mantine-color-dark-2)
    --mantine-color-dark-filled#141517
    --mantine-color-dark-filled-hover#101113
    --mantine-color-dark-lightrgba(37, 38, 43, 0.15)
    --mantine-color-dark-light-hoverrgba(37, 38, 43, 0.2)
    --mantine-color-dark-light-color#5c5f66
    --mantine-color-dark-outline#373A40
    --mantine-color-dark-outline-hoverrgba(55, 58, 64, 0.05)
    --mantine-color-gray-filled#343a40
    --mantine-color-gray-filled-hover#212529
    --mantine-color-gray-lightrgba(134, 142, 150, 0.15)
    --mantine-color-gray-light-hoverrgba(134, 142, 150, 0.2)
    --mantine-color-gray-light-color#dee2e6
    --mantine-color-gray-outline#ced4da
    --mantine-color-gray-outline-hoverrgba(206, 212, 218, 0.05)
    --mantine-color-red-filled#e03131
    --mantine-color-red-filled-hover#c92a2a
    --mantine-color-red-lightrgba(250, 82, 82, 0.15)
    --mantine-color-red-light-hoverrgba(250, 82, 82, 0.2)
    --mantine-color-red-light-color#ffa8a8
    --mantine-color-red-outline#ff8787
    --mantine-color-red-outline-hoverrgba(255, 135, 135, 0.05)
    --mantine-color-pink-filled#c2255c
    --mantine-color-pink-filled-hover#a61e4d
    --mantine-color-pink-lightrgba(230, 73, 128, 0.15)
    --mantine-color-pink-light-hoverrgba(230, 73, 128, 0.2)
    --mantine-color-pink-light-color#faa2c1
    --mantine-color-pink-outline#f783ac
    --mantine-color-pink-outline-hoverrgba(247, 131, 172, 0.05)
    --mantine-color-grape-filled#9c36b5
    --mantine-color-grape-filled-hover#862e9c
    --mantine-color-grape-lightrgba(190, 75, 219, 0.15)
    --mantine-color-grape-light-hoverrgba(190, 75, 219, 0.2)
    --mantine-color-grape-light-color#e599f7
    --mantine-color-grape-outline#da77f2
    --mantine-color-grape-outline-hoverrgba(218, 119, 242, 0.05)
    --mantine-color-violet-filled#6741d9
    --mantine-color-violet-filled-hover#5f3dc4
    --mantine-color-violet-lightrgba(121, 80, 242, 0.15)
    --mantine-color-violet-light-hoverrgba(121, 80, 242, 0.2)
    --mantine-color-violet-light-color#b197fc
    --mantine-color-violet-outline#9775fa
    --mantine-color-violet-outline-hoverrgba(151, 117, 250, 0.05)
    --mantine-color-indigo-filled#3b5bdb
    --mantine-color-indigo-filled-hover#364fc7
    --mantine-color-indigo-lightrgba(76, 110, 245, 0.15)
    --mantine-color-indigo-light-hoverrgba(76, 110, 245, 0.2)
    --mantine-color-indigo-light-color#91a7ff
    --mantine-color-indigo-outline#748ffc
    --mantine-color-indigo-outline-hoverrgba(116, 143, 252, 0.05)
    --mantine-color-blue-filled#1971c2
    --mantine-color-blue-filled-hover#1864ab
    --mantine-color-blue-lightrgba(34, 139, 230, 0.15)
    --mantine-color-blue-light-hoverrgba(34, 139, 230, 0.2)
    --mantine-color-blue-light-color#74c0fc
    --mantine-color-blue-outline#4dabf7
    --mantine-color-blue-outline-hoverrgba(77, 171, 247, 0.05)
    --mantine-color-cyan-filled#0c8599
    --mantine-color-cyan-filled-hover#0b7285
    --mantine-color-cyan-lightrgba(21, 170, 191, 0.15)
    --mantine-color-cyan-light-hoverrgba(21, 170, 191, 0.2)
    --mantine-color-cyan-light-color#66d9e8
    --mantine-color-cyan-outline#3bc9db
    --mantine-color-cyan-outline-hoverrgba(59, 201, 219, 0.05)
    --mantine-color-teal-filled#099268
    --mantine-color-teal-filled-hover#087f5b
    --mantine-color-teal-lightrgba(18, 184, 134, 0.15)
    --mantine-color-teal-light-hoverrgba(18, 184, 134, 0.2)
    --mantine-color-teal-light-color#63e6be
    --mantine-color-teal-outline#38d9a9
    --mantine-color-teal-outline-hoverrgba(56, 217, 169, 0.05)
    --mantine-color-green-filled#2f9e44
    --mantine-color-green-filled-hover#2b8a3e
    --mantine-color-green-lightrgba(64, 192, 87, 0.15)
    --mantine-color-green-light-hoverrgba(64, 192, 87, 0.2)
    --mantine-color-green-light-color#8ce99a
    --mantine-color-green-outline#69db7c
    --mantine-color-green-outline-hoverrgba(105, 219, 124, 0.05)
    --mantine-color-lime-filled#66a80f
    --mantine-color-lime-filled-hover#5c940d
    --mantine-color-lime-lightrgba(130, 201, 30, 0.15)
    --mantine-color-lime-light-hoverrgba(130, 201, 30, 0.2)
    --mantine-color-lime-light-color#c0eb75
    --mantine-color-lime-outline#a9e34b
    --mantine-color-lime-outline-hoverrgba(169, 227, 75, 0.05)
    --mantine-color-yellow-filled#f08c00
    --mantine-color-yellow-filled-hover#e67700
    --mantine-color-yellow-lightrgba(250, 176, 5, 0.15)
    --mantine-color-yellow-light-hoverrgba(250, 176, 5, 0.2)
    --mantine-color-yellow-light-color#ffe066
    --mantine-color-yellow-outline#ffd43b
    --mantine-color-yellow-outline-hoverrgba(255, 212, 59, 0.05)
    --mantine-color-orange-filled#e8590c
    --mantine-color-orange-filled-hover#d9480f
    --mantine-color-orange-lightrgba(253, 126, 20, 0.15)
    --mantine-color-orange-light-hoverrgba(253, 126, 20, 0.2)
    --mantine-color-orange-light-color#ffc078
    --mantine-color-orange-outline#ffa94d
    --mantine-color-orange-outline-hoverrgba(255, 169, 77, 0.05)
    \ No newline at end of file +

    CSS variables not depending on color scheme

    --mantine-scale1
    --mantine-cursor-typedefault
    --mantine-webkit-font-smoothingantialiased
    --mantine-color-schemelight dark
    --mantine-moz-font-smoothinggrayscale
    --mantine-color-white#fff
    --mantine-color-black#000
    --mantine-line-height1.55
    --mantine-font-family-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji
    --mantine-font-family-monospaceui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace
    --mantine-font-family-headings-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji
    --mantine-heading-font-weight700
    --mantine-radius-default0.25rem
    --mantine-primary-color-filledvar(--mantine-color-blue-filled)
    --mantine-primary-color-filled-hovervar(--mantine-color-blue-filled-hover)
    --mantine-primary-color-lightvar(--mantine-color-blue-light)
    --mantine-primary-color-light-hovervar(--mantine-color-blue-light-hover)
    --mantine-primary-color-light-colorvar(--mantine-color-blue-light-color)
    --mantine-breakpoint-xs36em
    --mantine-breakpoint-sm48em
    --mantine-breakpoint-md62em
    --mantine-breakpoint-lg75em
    --mantine-breakpoint-xl88em
    --mantine-spacing-xs0.625rem
    --mantine-spacing-sm0.75rem
    --mantine-spacing-md1rem
    --mantine-spacing-lg1.25rem
    --mantine-spacing-xl2rem
    --mantine-font-size-xs0.75rem
    --mantine-font-size-sm0.875rem
    --mantine-font-size-md1rem
    --mantine-font-size-lg1.125rem
    --mantine-font-size-xl1.25rem
    --mantine-line-height-xs1.4
    --mantine-line-height-sm1.45
    --mantine-line-height-md1.55
    --mantine-line-height-lg1.6
    --mantine-line-height-xl1.65
    --mantine-shadow-xs
    --mantine-shadow-sm
    --mantine-shadow-md
    --mantine-shadow-lg
    --mantine-shadow-xl
    --mantine-radius-xs0.125rem
    --mantine-radius-sm0.25rem
    --mantine-radius-md0.5rem
    --mantine-radius-lg1rem
    --mantine-radius-xl2rem
    --mantine-color-dark-0#C1C2C5
    --mantine-color-dark-1#A6A7AB
    --mantine-color-dark-2#909296
    --mantine-color-dark-3#5c5f66
    --mantine-color-dark-4#373A40
    --mantine-color-dark-5#2C2E33
    --mantine-color-dark-6#25262b
    --mantine-color-dark-7#1A1B1E
    --mantine-color-dark-8#141517
    --mantine-color-dark-9#101113
    --mantine-color-gray-0#f8f9fa
    --mantine-color-gray-1#f1f3f5
    --mantine-color-gray-2#e9ecef
    --mantine-color-gray-3#dee2e6
    --mantine-color-gray-4#ced4da
    --mantine-color-gray-5#adb5bd
    --mantine-color-gray-6#868e96
    --mantine-color-gray-7#495057
    --mantine-color-gray-8#343a40
    --mantine-color-gray-9#212529
    --mantine-color-red-0#fff5f5
    --mantine-color-red-1#ffe3e3
    --mantine-color-red-2#ffc9c9
    --mantine-color-red-3#ffa8a8
    --mantine-color-red-4#ff8787
    --mantine-color-red-5#ff6b6b
    --mantine-color-red-6#fa5252
    --mantine-color-red-7#f03e3e
    --mantine-color-red-8#e03131
    --mantine-color-red-9#c92a2a
    --mantine-color-pink-0#fff0f6
    --mantine-color-pink-1#ffdeeb
    --mantine-color-pink-2#fcc2d7
    --mantine-color-pink-3#faa2c1
    --mantine-color-pink-4#f783ac
    --mantine-color-pink-5#f06595
    --mantine-color-pink-6#e64980
    --mantine-color-pink-7#d6336c
    --mantine-color-pink-8#c2255c
    --mantine-color-pink-9#a61e4d
    --mantine-color-grape-0#f8f0fc
    --mantine-color-grape-1#f3d9fa
    --mantine-color-grape-2#eebefa
    --mantine-color-grape-3#e599f7
    --mantine-color-grape-4#da77f2
    --mantine-color-grape-5#cc5de8
    --mantine-color-grape-6#be4bdb
    --mantine-color-grape-7#ae3ec9
    --mantine-color-grape-8#9c36b5
    --mantine-color-grape-9#862e9c
    --mantine-color-violet-0#f3f0ff
    --mantine-color-violet-1#e5dbff
    --mantine-color-violet-2#d0bfff
    --mantine-color-violet-3#b197fc
    --mantine-color-violet-4#9775fa
    --mantine-color-violet-5#845ef7
    --mantine-color-violet-6#7950f2
    --mantine-color-violet-7#7048e8
    --mantine-color-violet-8#6741d9
    --mantine-color-violet-9#5f3dc4
    --mantine-color-indigo-0#edf2ff
    --mantine-color-indigo-1#dbe4ff
    --mantine-color-indigo-2#bac8ff
    --mantine-color-indigo-3#91a7ff
    --mantine-color-indigo-4#748ffc
    --mantine-color-indigo-5#5c7cfa
    --mantine-color-indigo-6#4c6ef5
    --mantine-color-indigo-7#4263eb
    --mantine-color-indigo-8#3b5bdb
    --mantine-color-indigo-9#364fc7
    --mantine-color-blue-0#e7f5ff
    --mantine-color-blue-1#d0ebff
    --mantine-color-blue-2#a5d8ff
    --mantine-color-blue-3#74c0fc
    --mantine-color-blue-4#4dabf7
    --mantine-color-blue-5#339af0
    --mantine-color-blue-6#228be6
    --mantine-color-blue-7#1c7ed6
    --mantine-color-blue-8#1971c2
    --mantine-color-blue-9#1864ab
    --mantine-color-cyan-0#e3fafc
    --mantine-color-cyan-1#c5f6fa
    --mantine-color-cyan-2#99e9f2
    --mantine-color-cyan-3#66d9e8
    --mantine-color-cyan-4#3bc9db
    --mantine-color-cyan-5#22b8cf
    --mantine-color-cyan-6#15aabf
    --mantine-color-cyan-7#1098ad
    --mantine-color-cyan-8#0c8599
    --mantine-color-cyan-9#0b7285
    --mantine-color-teal-0#e6fcf5
    --mantine-color-teal-1#c3fae8
    --mantine-color-teal-2#96f2d7
    --mantine-color-teal-3#63e6be
    --mantine-color-teal-4#38d9a9
    --mantine-color-teal-5#20c997
    --mantine-color-teal-6#12b886
    --mantine-color-teal-7#0ca678
    --mantine-color-teal-8#099268
    --mantine-color-teal-9#087f5b
    --mantine-color-green-0#ebfbee
    --mantine-color-green-1#d3f9d8
    --mantine-color-green-2#b2f2bb
    --mantine-color-green-3#8ce99a
    --mantine-color-green-4#69db7c
    --mantine-color-green-5#51cf66
    --mantine-color-green-6#40c057
    --mantine-color-green-7#37b24d
    --mantine-color-green-8#2f9e44
    --mantine-color-green-9#2b8a3e
    --mantine-color-lime-0#f4fce3
    --mantine-color-lime-1#e9fac8
    --mantine-color-lime-2#d8f5a2
    --mantine-color-lime-3#c0eb75
    --mantine-color-lime-4#a9e34b
    --mantine-color-lime-5#94d82d
    --mantine-color-lime-6#82c91e
    --mantine-color-lime-7#74b816
    --mantine-color-lime-8#66a80f
    --mantine-color-lime-9#5c940d
    --mantine-color-yellow-0#fff9db
    --mantine-color-yellow-1#fff3bf
    --mantine-color-yellow-2#ffec99
    --mantine-color-yellow-3#ffe066
    --mantine-color-yellow-4#ffd43b
    --mantine-color-yellow-5#fcc419
    --mantine-color-yellow-6#fab005
    --mantine-color-yellow-7#f59f00
    --mantine-color-yellow-8#f08c00
    --mantine-color-yellow-9#e67700
    --mantine-color-orange-0#fff4e6
    --mantine-color-orange-1#ffe8cc
    --mantine-color-orange-2#ffd8a8
    --mantine-color-orange-3#ffc078
    --mantine-color-orange-4#ffa94d
    --mantine-color-orange-5#ff922b
    --mantine-color-orange-6#fd7e14
    --mantine-color-orange-7#f76707
    --mantine-color-orange-8#e8590c
    --mantine-color-orange-9#d9480f
    --mantine-h1-font-size2.125rem
    --mantine-h1-line-height1.3
    --mantine-h1-font-weight700
    --mantine-h2-font-size1.625rem
    --mantine-h2-line-height1.35
    --mantine-h2-font-weight700
    --mantine-h3-font-size1.375rem
    --mantine-h3-line-height1.4
    --mantine-h3-font-weight700
    --mantine-h4-font-size1.125rem
    --mantine-h4-line-height1.45
    --mantine-h4-font-weight700
    --mantine-h5-font-size1rem
    --mantine-h5-line-height1.5
    --mantine-h5-font-weight700
    --mantine-h6-font-size0.875rem
    --mantine-h6-line-height1.5
    --mantine-h6-font-weight700

    Light color scheme only variables

    --mantine-color-brightvar(--mantine-color-black)
    --mantine-color-text#000
    --mantine-color-body#fff
    --mantine-color-error#fa5252
    --mantine-color-placeholder#adb5bd
    --mantine-color-anchor#228be6
    --mantine-color-default#fff
    --mantine-color-default-hover#f8f9fa
    --mantine-color-default-color#000
    --mantine-color-default-border#ced4da
    --mantine-color-dimmedvar(--mantine-color-gray-6)
    --mantine-color-dark-filled#25262b
    --mantine-color-dark-filled-hover#1A1B1E
    --mantine-color-dark-lightrgba(37, 38, 43, 0.1)
    --mantine-color-dark-light-hoverrgba(37, 38, 43, 0.12)
    --mantine-color-dark-light-color#25262b
    --mantine-color-dark-outline#25262b
    --mantine-color-dark-outline-hoverrgba(37, 38, 43, 0.05)
    --mantine-color-gray-filled#868e96
    --mantine-color-gray-filled-hover#495057
    --mantine-color-gray-lightrgba(134, 142, 150, 0.1)
    --mantine-color-gray-light-hoverrgba(134, 142, 150, 0.12)
    --mantine-color-gray-light-color#868e96
    --mantine-color-gray-outline#868e96
    --mantine-color-gray-outline-hoverrgba(134, 142, 150, 0.05)
    --mantine-color-red-filled#fa5252
    --mantine-color-red-filled-hover#f03e3e
    --mantine-color-red-lightrgba(250, 82, 82, 0.1)
    --mantine-color-red-light-hoverrgba(250, 82, 82, 0.12)
    --mantine-color-red-light-color#fa5252
    --mantine-color-red-outline#fa5252
    --mantine-color-red-outline-hoverrgba(250, 82, 82, 0.05)
    --mantine-color-pink-filled#e64980
    --mantine-color-pink-filled-hover#d6336c
    --mantine-color-pink-lightrgba(230, 73, 128, 0.1)
    --mantine-color-pink-light-hoverrgba(230, 73, 128, 0.12)
    --mantine-color-pink-light-color#e64980
    --mantine-color-pink-outline#e64980
    --mantine-color-pink-outline-hoverrgba(230, 73, 128, 0.05)
    --mantine-color-grape-filled#be4bdb
    --mantine-color-grape-filled-hover#ae3ec9
    --mantine-color-grape-lightrgba(190, 75, 219, 0.1)
    --mantine-color-grape-light-hoverrgba(190, 75, 219, 0.12)
    --mantine-color-grape-light-color#be4bdb
    --mantine-color-grape-outline#be4bdb
    --mantine-color-grape-outline-hoverrgba(190, 75, 219, 0.05)
    --mantine-color-violet-filled#7950f2
    --mantine-color-violet-filled-hover#7048e8
    --mantine-color-violet-lightrgba(121, 80, 242, 0.1)
    --mantine-color-violet-light-hoverrgba(121, 80, 242, 0.12)
    --mantine-color-violet-light-color#7950f2
    --mantine-color-violet-outline#7950f2
    --mantine-color-violet-outline-hoverrgba(121, 80, 242, 0.05)
    --mantine-color-indigo-filled#4c6ef5
    --mantine-color-indigo-filled-hover#4263eb
    --mantine-color-indigo-lightrgba(76, 110, 245, 0.1)
    --mantine-color-indigo-light-hoverrgba(76, 110, 245, 0.12)
    --mantine-color-indigo-light-color#4c6ef5
    --mantine-color-indigo-outline#4c6ef5
    --mantine-color-indigo-outline-hoverrgba(76, 110, 245, 0.05)
    --mantine-color-blue-filled#228be6
    --mantine-color-blue-filled-hover#1c7ed6
    --mantine-color-blue-lightrgba(34, 139, 230, 0.1)
    --mantine-color-blue-light-hoverrgba(34, 139, 230, 0.12)
    --mantine-color-blue-light-color#228be6
    --mantine-color-blue-outline#228be6
    --mantine-color-blue-outline-hoverrgba(34, 139, 230, 0.05)
    --mantine-color-cyan-filled#15aabf
    --mantine-color-cyan-filled-hover#1098ad
    --mantine-color-cyan-lightrgba(21, 170, 191, 0.1)
    --mantine-color-cyan-light-hoverrgba(21, 170, 191, 0.12)
    --mantine-color-cyan-light-color#15aabf
    --mantine-color-cyan-outline#15aabf
    --mantine-color-cyan-outline-hoverrgba(21, 170, 191, 0.05)
    --mantine-color-teal-filled#12b886
    --mantine-color-teal-filled-hover#0ca678
    --mantine-color-teal-lightrgba(18, 184, 134, 0.1)
    --mantine-color-teal-light-hoverrgba(18, 184, 134, 0.12)
    --mantine-color-teal-light-color#12b886
    --mantine-color-teal-outline#12b886
    --mantine-color-teal-outline-hoverrgba(18, 184, 134, 0.05)
    --mantine-color-green-filled#40c057
    --mantine-color-green-filled-hover#37b24d
    --mantine-color-green-lightrgba(64, 192, 87, 0.1)
    --mantine-color-green-light-hoverrgba(64, 192, 87, 0.12)
    --mantine-color-green-light-color#40c057
    --mantine-color-green-outline#40c057
    --mantine-color-green-outline-hoverrgba(64, 192, 87, 0.05)
    --mantine-color-lime-filled#82c91e
    --mantine-color-lime-filled-hover#74b816
    --mantine-color-lime-lightrgba(130, 201, 30, 0.1)
    --mantine-color-lime-light-hoverrgba(130, 201, 30, 0.12)
    --mantine-color-lime-light-color#82c91e
    --mantine-color-lime-outline#82c91e
    --mantine-color-lime-outline-hoverrgba(130, 201, 30, 0.05)
    --mantine-color-yellow-filled#fab005
    --mantine-color-yellow-filled-hover#f59f00
    --mantine-color-yellow-lightrgba(250, 176, 5, 0.1)
    --mantine-color-yellow-light-hoverrgba(250, 176, 5, 0.12)
    --mantine-color-yellow-light-color#fab005
    --mantine-color-yellow-outline#fab005
    --mantine-color-yellow-outline-hoverrgba(250, 176, 5, 0.05)
    --mantine-color-orange-filled#fd7e14
    --mantine-color-orange-filled-hover#f76707
    --mantine-color-orange-lightrgba(253, 126, 20, 0.1)
    --mantine-color-orange-light-hoverrgba(253, 126, 20, 0.12)
    --mantine-color-orange-light-color#fd7e14
    --mantine-color-orange-outline#fd7e14
    --mantine-color-orange-outline-hoverrgba(253, 126, 20, 0.05)

    Dark color scheme only variables

    --mantine-color-brightvar(--mantine-color-white)
    --mantine-color-textvar(--mantine-color-dark-0)
    --mantine-color-body#1A1B1E
    --mantine-color-error#c92a2a
    --mantine-color-placeholder#5c5f66
    --mantine-color-anchor#4dabf7
    --mantine-color-default#25262b
    --mantine-color-default-hover#2C2E33
    --mantine-color-default-color#fff
    --mantine-color-default-border#373A40
    --mantine-color-dimmedvar(--mantine-color-dark-2)
    --mantine-color-dark-filled#141517
    --mantine-color-dark-filled-hover#101113
    --mantine-color-dark-lightrgba(37, 38, 43, 0.15)
    --mantine-color-dark-light-hoverrgba(37, 38, 43, 0.2)
    --mantine-color-dark-light-color#5c5f66
    --mantine-color-dark-outline#373A40
    --mantine-color-dark-outline-hoverrgba(55, 58, 64, 0.05)
    --mantine-color-gray-filled#343a40
    --mantine-color-gray-filled-hover#212529
    --mantine-color-gray-lightrgba(134, 142, 150, 0.15)
    --mantine-color-gray-light-hoverrgba(134, 142, 150, 0.2)
    --mantine-color-gray-light-color#dee2e6
    --mantine-color-gray-outline#ced4da
    --mantine-color-gray-outline-hoverrgba(206, 212, 218, 0.05)
    --mantine-color-red-filled#e03131
    --mantine-color-red-filled-hover#c92a2a
    --mantine-color-red-lightrgba(250, 82, 82, 0.15)
    --mantine-color-red-light-hoverrgba(250, 82, 82, 0.2)
    --mantine-color-red-light-color#ffa8a8
    --mantine-color-red-outline#ff8787
    --mantine-color-red-outline-hoverrgba(255, 135, 135, 0.05)
    --mantine-color-pink-filled#c2255c
    --mantine-color-pink-filled-hover#a61e4d
    --mantine-color-pink-lightrgba(230, 73, 128, 0.15)
    --mantine-color-pink-light-hoverrgba(230, 73, 128, 0.2)
    --mantine-color-pink-light-color#faa2c1
    --mantine-color-pink-outline#f783ac
    --mantine-color-pink-outline-hoverrgba(247, 131, 172, 0.05)
    --mantine-color-grape-filled#9c36b5
    --mantine-color-grape-filled-hover#862e9c
    --mantine-color-grape-lightrgba(190, 75, 219, 0.15)
    --mantine-color-grape-light-hoverrgba(190, 75, 219, 0.2)
    --mantine-color-grape-light-color#e599f7
    --mantine-color-grape-outline#da77f2
    --mantine-color-grape-outline-hoverrgba(218, 119, 242, 0.05)
    --mantine-color-violet-filled#6741d9
    --mantine-color-violet-filled-hover#5f3dc4
    --mantine-color-violet-lightrgba(121, 80, 242, 0.15)
    --mantine-color-violet-light-hoverrgba(121, 80, 242, 0.2)
    --mantine-color-violet-light-color#b197fc
    --mantine-color-violet-outline#9775fa
    --mantine-color-violet-outline-hoverrgba(151, 117, 250, 0.05)
    --mantine-color-indigo-filled#3b5bdb
    --mantine-color-indigo-filled-hover#364fc7
    --mantine-color-indigo-lightrgba(76, 110, 245, 0.15)
    --mantine-color-indigo-light-hoverrgba(76, 110, 245, 0.2)
    --mantine-color-indigo-light-color#91a7ff
    --mantine-color-indigo-outline#748ffc
    --mantine-color-indigo-outline-hoverrgba(116, 143, 252, 0.05)
    --mantine-color-blue-filled#1971c2
    --mantine-color-blue-filled-hover#1864ab
    --mantine-color-blue-lightrgba(34, 139, 230, 0.15)
    --mantine-color-blue-light-hoverrgba(34, 139, 230, 0.2)
    --mantine-color-blue-light-color#74c0fc
    --mantine-color-blue-outline#4dabf7
    --mantine-color-blue-outline-hoverrgba(77, 171, 247, 0.05)
    --mantine-color-cyan-filled#0c8599
    --mantine-color-cyan-filled-hover#0b7285
    --mantine-color-cyan-lightrgba(21, 170, 191, 0.15)
    --mantine-color-cyan-light-hoverrgba(21, 170, 191, 0.2)
    --mantine-color-cyan-light-color#66d9e8
    --mantine-color-cyan-outline#3bc9db
    --mantine-color-cyan-outline-hoverrgba(59, 201, 219, 0.05)
    --mantine-color-teal-filled#099268
    --mantine-color-teal-filled-hover#087f5b
    --mantine-color-teal-lightrgba(18, 184, 134, 0.15)
    --mantine-color-teal-light-hoverrgba(18, 184, 134, 0.2)
    --mantine-color-teal-light-color#63e6be
    --mantine-color-teal-outline#38d9a9
    --mantine-color-teal-outline-hoverrgba(56, 217, 169, 0.05)
    --mantine-color-green-filled#2f9e44
    --mantine-color-green-filled-hover#2b8a3e
    --mantine-color-green-lightrgba(64, 192, 87, 0.15)
    --mantine-color-green-light-hoverrgba(64, 192, 87, 0.2)
    --mantine-color-green-light-color#8ce99a
    --mantine-color-green-outline#69db7c
    --mantine-color-green-outline-hoverrgba(105, 219, 124, 0.05)
    --mantine-color-lime-filled#66a80f
    --mantine-color-lime-filled-hover#5c940d
    --mantine-color-lime-lightrgba(130, 201, 30, 0.15)
    --mantine-color-lime-light-hoverrgba(130, 201, 30, 0.2)
    --mantine-color-lime-light-color#c0eb75
    --mantine-color-lime-outline#a9e34b
    --mantine-color-lime-outline-hoverrgba(169, 227, 75, 0.05)
    --mantine-color-yellow-filled#f08c00
    --mantine-color-yellow-filled-hover#e67700
    --mantine-color-yellow-lightrgba(250, 176, 5, 0.15)
    --mantine-color-yellow-light-hoverrgba(250, 176, 5, 0.2)
    --mantine-color-yellow-light-color#ffe066
    --mantine-color-yellow-outline#ffd43b
    --mantine-color-yellow-outline-hoverrgba(255, 212, 59, 0.05)
    --mantine-color-orange-filled#e8590c
    --mantine-color-orange-filled-hover#d9480f
    --mantine-color-orange-lightrgba(253, 126, 20, 0.15)
    --mantine-color-orange-light-hoverrgba(253, 126, 20, 0.2)
    --mantine-color-orange-light-color#ffc078
    --mantine-color-orange-outline#ffa94d
    --mantine-color-orange-outline-hoverrgba(255, 169, 77, 0.05)
    \ No newline at end of file diff --git a/styles/css-variables.html b/styles/css-variables/index.html similarity index 70% rename from styles/css-variables.html rename to styles/css-variables/index.html index 82b834fda8e..5aaf565cd52 100644 --- a/styles/css-variables.html +++ b/styles/css-variables/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Mantine CSS variables

    -

    MantineProvider exposes all Mantine CSS variables based on the given theme. -You can use these variables in CSS files, style prop or any other styles. -Note that not all values are documented on this page, you can find full list of variables on this page.

    +

    Mantine CSS variables

    +

    MantineProvider exposes all Mantine CSS variables based on the given theme. +You can use these variables in CSS files, style prop or any other styles. +Note that not all values are documented on this page, you can find full list of variables on this page.

    Typography CSS variables

    The following CSS variables are used to control all typography styles (font-family, font-size, line-height) in all Mantine components:

    @@ -19,7 +19,7 @@ }

    Spacing

    Spacing CSS variables are used to control margins and paddings in most of Mantine components. -They are also used in p and m style props:

    +They are also used in p and m style props:

    VariableDefault value
    --mantine-spacing-xs0.625rem
    --mantine-spacing-sm0.75rem
    --mantine-spacing-md1rem
    --mantine-spacing-lg1.25rem
    --mantine-spacing-xl2rem

    Usage:

    .demo {
    @@ -48,7 +48,7 @@
     

    Colors

    All theme.colors values are exposed as CSS variables in --mantine-color-{x}-{y} format, where x is the color name and y is the color shade. For example, --mantine-color-red-6 is theme.colors.red[6]. -You can find the full default colors list in the colors guide.

    +You can find the full default colors list in the colors guide.

    Usage:

    .demo {
       color: var(--mantine-color-red-6);
    @@ -81,9 +81,9 @@
     
  • --mantine-color-black – value of theme.black
  • --mantine-color-text – text color set on body element
  • --mantine-color-bodybody element background-color
  • -
  • --mantine-color-error – error color, used in Input and other similar components
  • -
  • --mantine-color-placeholder – placeholder color, used in Input and other similar components to set text color of placeholder
  • -
  • --mantine-color-anchor – anchor color, used in Anchor component
  • +
  • --mantine-color-error – error color, used in Input and other similar components
  • +
  • --mantine-color-placeholder – placeholder color, used in Input and other similar components to set text color of placeholder
  • +
  • --mantine-color-anchor – anchor color, used in Anchor component
  • --mantine-color-default – default variant background-color
  • --mantine-color-default-hover – default variant background-color on hover
  • --mantine-color-default-color – default variant text color
  • @@ -102,9 +102,9 @@ } }

    CSS variables resolver

    -

    cssVariablesResolver prop on MantineProvider allows you to +

    cssVariablesResolver prop on MantineProvider allows you to modify values of Mantine CSS variables or even add your own variables. -cssVariablesResolver is a function that accepts theme as a single +cssVariablesResolver is a function that accepts theme as a single argument and returns an object with CSS variables divided into three groups:

    • variables – variables that do not depend on color scheme
    • @@ -148,4 +148,4 @@ /* background color will automatically change based on color scheme */ background-color: var(--mantine-color-deep-orange); -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/data-attributes.html b/styles/data-attributes/index.html similarity index 70% rename from styles/data-attributes.html rename to styles/data-attributes/index.html index c83ba870545..937bf45c374 100644 --- a/styles/data-attributes.html +++ b/styles/data-attributes/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    data attributes

    +

    data attributes

    Mantine components use data-* attributes to apply styles. These attributes are used as a modifier to apply styles based on component state. General rule of Mantine components styles – one class with shared styles and any number of data-* attributes as modifiers.

    @@ -54,7 +54,7 @@ }

    data attributes values

    Most of the data-* attributes do not have associated values, they represent boolean -state or feature. For example, when disabled prop on Button is set +state or feature. For example, when disabled prop on Button is set data-disabled attribute is added to the <button /> element:

    import { Button } from '@mantine/core';
     
    @@ -78,7 +78,7 @@
     

    When disabled prop is not set, then data-disabled attribute is not added to the button:

    <button class="my-button">Not disabled button</button>
    -

    In some cases, data-* attributes have associated values, for example, Button +

    In some cases, data-* attributes have associated values, for example, Button component section element has an associated data-position attribute which can be left or right. The following example will render two section elements, one with data-position="left" and another with data-position="right":

    @@ -114,17 +114,17 @@ }

    Components data attributes documentation

    Every component that uses data-* attributes has a dedicated section under Styles API tab.

    -

    Button component data-* attributes table:

    +

    Button component data-* attributes table:

    SelectorAttributeConditionValue
    rootdata-disableddisabled prop is set
    root, labeldata-loadingloading prop is set
    rootdata-blockfullWidth prop is set
    rootdata-with-left-sectionleftSection is set
    rootdata-with-right-sectionrightSection is set
    sectiondata-positionSection position: left or right

    How to read the table:

      -
    • selector column – Styles API selector (or multiple selectors) to which data attribute is added
    • +
    • selector column – Styles API selector (or multiple selectors) to which data attribute is added
    • attribute column – data attribute name
    • condition column – condition based on which data attribute is added to the element
    • value column – value of the data attribute

    Box component mod prop

    -

    Box component supports mod prop, which allows adding data attributes to +

    Box component supports mod prop, which allows adding data attributes to the element. You can use to create custom components with data attributes.

    import { Box } from '@mantine/core';
     
    @@ -141,4 +141,4 @@
     // -> <div data-button data-opened />
     
     <Box mod={{ orientation: 'horizontal' }} />;
    -// -> <div data-orientation="horizontal" />
    \ No newline at end of file +// -> <div data-orientation="horizontal" />
    \ No newline at end of file diff --git a/styles/global-styles.html b/styles/global-styles/index.html similarity index 64% rename from styles/global-styles.html rename to styles/global-styles/index.html index d43d591f526..9c32cc2488c 100644 --- a/styles/global-styles.html +++ b/styles/global-styles/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Global styles

    +

    Global styles

    @mantine/core package includes some global styles that are required for components to work correctly. If you override these styles, some components might not work as expected.

    Global styles are automatically imported with:

    @@ -84,12 +84,12 @@ ); }

    Add global styles in your application

    -

    It is recommended to use CSS modules to apply styles to Mantine components -with className prop or with Styles API. CSS modules files names usually +

    It is recommended to use CSS modules to apply styles to Mantine components +with className prop or with Styles API. CSS modules files names usually end with .module.css, if you want to add global styles to your application, create a file with .css extension but without .module part, for example global.css.

    -

    In global .css files you can reference all Mantine CSS variables and +

    In global .css files you can reference all Mantine CSS variables and change styles of <body />, :root and other elements. For example, to change body background-color:

    body {
       background-color: var(--mantine-color-red-filled);
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/postcss-preset.html b/styles/postcss-preset/index.html similarity index 69% rename from styles/postcss-preset.html rename to styles/postcss-preset/index.html index 092435d96a5..ef8997597fc 100644 --- a/styles/postcss-preset.html +++ b/styles/postcss-preset/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Mantine PostCSS preset

    +

    Mantine PostCSS preset

    postcss-preset-mantine provides several CSS functions and mixins to help you write styles. It is not required to use it, but highly recommended. All demos that feature styles assume that you have this preset installed.

    @@ -18,7 +18,7 @@
    yarn add --dev postcss-preset-mantine

    Usage

    Note that setting up PostCSS may be different depending on your build tool/framework, check -a dedicated framework guide to learn more. +a dedicated framework guide to learn more. Add postcss-preset-mantine to your postcss.config.js file (usually it is located in the root of your project):

    module.exports = {
       plugins: {
    @@ -29,7 +29,7 @@
     

    rem/em functions

    rem and em functions can be used to convert pixels to rem/em units. 16px = 1rem and 16px = 1em, em values are supposed to be used in media queries, -rem everywhere else. You can learn more about units conversions in this guide.

    +rem everywhere else. You can learn more about units conversions in this guide.

    .demo {
       font-size: rem(16px);
     
    @@ -126,4 +126,4 @@
     [dir='rtl'] .demo {
       margin-left: 0;
       margin-right: 1rem;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/rem.html b/styles/rem/index.html similarity index 67% rename from styles/rem.html rename to styles/rem/index.html index dacf1341ff0..92a9204dc00 100644 --- a/styles/rem.html +++ b/styles/rem/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    rem, em and px units

    +

    rem, em and px units

    rem units

    All Mantine components use rem units to apply size styles (margin, padding, width, etc.). By default, 1rem is considered to be 16px as it is a default setting in most browsers. @@ -24,7 +24,7 @@ }

    rem units scaling

    If you want to change font-size of :root/html element and preserve Mantine components sizes, -set scale on theme to the value of 1 / htmlFontSize.

    +set scale on theme to the value of 1 / htmlFontSize.

    For example, if you set html font-size to 10px and want to scale Mantine components accordingly, you need to set scale to 1 / (10 / 16) (16 – default font-size) = 1 / 0.625 = 1.6:

    :root {
    @@ -60,7 +60,7 @@
       // This demo will have the same size as previous one
       return <ColorSwatch color="#000" size="2rem" />;
     }
    -

    The same conversion happens in style props:

    +

    The same conversion happens in style props:

    import { Box } from '@mantine/core';
     
     function Demo() {
    @@ -93,12 +93,12 @@
     px('2rem'); // -> 32
     px('10rem'); // -> 160

    rem/em functions in css files

    -

    You can use rem and em function in css files if -postcss-preset-mantine is installed:

    +

    You can use rem and em function in css files if +postcss-preset-mantine is installed:

    .demo {
       font-size: rem(16px);
     
       @media (min-width: em(320px)) {
         font-size: rem(32px);
       }
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/responsive.html b/styles/responsive/index.html similarity index 74% rename from styles/responsive.html rename to styles/responsive/index.html index b45157ca184..a0fae0f3869 100644 --- a/styles/responsive.html +++ b/styles/responsive/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Responsive styles

    +

    Responsive styles

    Media queries

    Demo
    .demo {
       background-color: var(--mantine-color-blue-filled);
    @@ -17,7 +17,7 @@
     }

    Configure breakpoints

    theme.breakpoints are used in all responsive Mantine components. Breakpoints are expected to be set in em units. -You can configure these values with MantineProvider:

    +You can configure these values with MantineProvider:

    import { MantineProvider, createTheme } from '@mantine/core';
     
     const theme = createTheme({
    @@ -41,10 +41,10 @@
     
    BreakpointViewport widthValue in px
    xs36em576px
    sm48em768px
    md62em992px
    lg75em1200px
    xl88em1408px

    Breakpoints variables in CSS modules

    It is not possible to use CSS variables inside media queries – these values cannot be dynamically -generated by MantineProvider. To use Mantine theme breakpoints +generated by MantineProvider. To use Mantine theme breakpoints in your .css files, you will need postcss-simple-vars package:

    yarn add --dev postcss-simple-vars
    -

    Add it to your PostCSS config in postcss.config.js:

    +

    Add it to your PostCSS config in postcss.config.js:

    module.exports = {
       plugins: {
         'postcss-preset-mantine': {},
    @@ -74,7 +74,7 @@
     

    Dynamic breakpoints are not supported

    Values that are defined in postcss-simple-vars config are static and -are not connected to the theme – if values change, +are not connected to the theme – if values change, you will need to update them manually in both theme override and postcss config.

    hiddenFrom and visibleFrom props

    @@ -125,15 +125,15 @@ ); }

    use-media-query hook

    -

    You can use use-media-query hook to change some of component props +

    You can use use-media-query hook to change some of component props based on media query. Note that this approach is not recommended for most of the cases if you have ssr in your application (you use Next.js, Remix, Gatsby or any other framework that includes ssr) as it may cause hydration mismatch. If you do not have ssr in your application (for example, if you use Vite), then you can safely use this hook to change props of components or conditionally render components based on hook return value.

    -

    use-media-query hook can be safely used to change props of components that are not rendered +

    use-media-query hook can be safely used to change props of components that are not rendered on server side (modals, tooltips, etc.). In the following example, it is safe to use useMediaQuery hook to -change Tooltip props as it is not rendered on server side:

    +change Tooltip props as it is not rendered on server side:

    import { Tooltip, Button, em } from '@mantine/core';
     import { useMediaQuery } from '@mantine/hooks';
     
    @@ -145,4 +145,4 @@
           <Button>Hover me</Button>
         </Tooltip>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/rtl.html b/styles/rtl/index.html similarity index 65% rename from styles/rtl.html rename to styles/rtl/index.html index f3daf818d65..09eeae12b36 100644 --- a/styles/rtl.html +++ b/styles/rtl/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Right-to-left direction

    +

    Right-to-left direction

    All Mantine components support right-to-left direction out of the box. You can preview how components work with RTL direction by clicking direction control in the top right corner or pressing Ctrl + Shift + L.

    @@ -69,7 +69,7 @@ ); }

    rtl mixin

    -

    If you have postcss-preset-mantine installed then you can use rtl mixin in .css files:

    +

    If you have postcss-preset-mantine installed then you can use rtl mixin in .css files:

    Demo
    .demo {
       text-align: center;
       color: var(--mantine-color-white);
    @@ -82,4 +82,4 @@
         /* RTL styles override LTR styles */
         background-color: var(--mantine-color-red-filled);
       }
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/style-props.html b/styles/style-props/index.html similarity index 72% rename from styles/style-props.html rename to styles/style-props/index.html index 5cb2a3928e6..ad01ae4457d 100644 --- a/styles/style-props.html +++ b/styles/style-props/index.html @@ -3,10 +3,10 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Style props

    +

    Style props

    With style props, you can add inline styles to any Mantine component. Style props add styles to the root element, if you need to style nested elements, -use Styles API instead.

    +use Styles API instead.

    import { Box } from '@mantine/core';
     
     function Demo() {
    @@ -57,7 +57,7 @@
     <Box bg="rgba(0, 34, 45, 0.6)" />

    Responsive styles

    You can use object syntax to add responsive styles with style props. -Note that responsive style props are less performant than regular style props, +Note that responsive style props are less performant than regular style props, it is not recommended to use them in large lists of elements.

    Box with responsive style props
    import { Box } from '@mantine/core';
     
    @@ -77,7 +77,7 @@
     

    Responsive values are calculated the following way:

    • base value is used when none of breakpoint values are applied
    • -
    • xs, sm, md, lg, xl values are used when the viewport width is larger that the value of corresponding breakpoint specified in theme.breakpoints
    • +
    • xs, sm, md, lg, xl values are used when the viewport width is larger that the value of corresponding breakpoint specified in theme.breakpoints
    import { Box } from '@mantine/core';
     
    @@ -100,4 +100,4 @@
       .element {
         width: 40rem;
       }
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/style.html b/styles/style/index.html similarity index 58% rename from styles/style.html rename to styles/style/index.html index 8b36b4b57b6..e9b659ea07e 100644 --- a/styles/style.html +++ b/styles/style/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Style prop

    +

    Style prop

    All Mantine components that have root element support style prop. It works similar to React style prop, but with some additional features.

    Style object

    You can pass a style object to the style prop – in this case it works the same way -as React style prop. You can use Mantine CSS variables in style object -the same way as in .css files.

    +as React style prop. You can use Mantine CSS variables in style object +the same way as in .css files.

    import { Box, rem } from '@mantine/core';
     
     function Demo() {
    @@ -23,8 +23,8 @@
       );
     }

    Style function

    -

    You can pass a style function to the style prop – in this case it will be called with theme. -It is useful when you need to access theme properties that are not exposed as CSS variables, +

    You can pass a style function to the style prop – in this case it will be called with theme. +It is useful when you need to access theme properties that are not exposed as CSS variables, for example, properties from theme.other.

    import { Box } from '@mantine/core';
     
    @@ -50,4 +50,4 @@
     
     function Demo({ style }: DemoProps) {
       return <Box style={[{ color: 'red' }, style]} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/styles-api.html b/styles/styles-api/index.html similarity index 77% rename from styles/styles-api.html rename to styles/styles-api/index.html index 5bbf79b4164..4ade1bd4d51 100644 --- a/styles/styles-api.html +++ b/styles/styles-api/index.html @@ -3,17 +3,17 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Styles API

    +

    Styles API

    What is Styles API

    Styles API is a set of props and techniques that allows you to customize styles of any element -inside Mantine component inline or with theme object. All Mantine components that +inside Mantine component inline or with theme object. All Mantine components that have styles support Styles API.

    Styles API selectors

    Every Mantine component that supports Styles API has a set of elements names that can be used to apply styles to inner elements inside the component. For simplicity, these elements names are called selectors in Mantine documentation. You can find selectors information under Styles API tab in component documentation.

    -

    Example of Button component selectors:

    +

    Example of Button component selectors:

    SelectorStatic selectorDescription
    root.mantine-Button-rootRoot element
    loader.mantine-Button-loaderLoader component, displayed only when loading prop is set
    inner.mantine-Button-innerContains all other elements, child of the root element
    section.mantine-Button-sectionLeft and right sections of the button
    label.mantine-Button-labelButton children

    You can use these selectors in classNames and styles both in component props and in theme.components:

    import { Button, createTheme, MantineProvider } from '@mantine/core';
    @@ -99,7 +99,7 @@
       );
     }

    classNames in theme.components

    -

    You can also define classNames in theme.components to apply them to all +

    You can also define classNames in theme.components to apply them to all components of specific type:

    import { useState } from 'react';
     import { TextInput, MantineProvider, createTheme } from '@mantine/core';
    @@ -128,11 +128,11 @@
     

    Components CSS variables

    Most of Mantine components use CSS variables to define colors, sizes, paddings and other properties. You can override these values by with a custom CSS variables resolver function -in theme.components or by passing it to vars prop.

    +in theme.components or by passing it to vars prop.

    You can find CSS variables information under Styles API tab in component documentation. -Example of Button component CSS variables:

    +Example of Button component CSS variables:

    SelectorVariableDescription
    root--button-bgControls background
    --button-bdControl border
    --button-hoverControls background when hovered
    --button-colorControl text color
    --button-radiusControls border-radius
    --button-heightControls height of the button
    --button-padding-xControls horizontal padding of the button
    --button-fzControls font-size of the button
    --button-justifyControls justify-content of inner element
    -

    Example of custom CSS variables resolver function used to add more sizes to Button component:

    +

    Example of custom CSS variables resolver function used to add more sizes to Button component:

    import { Button, rem, Group, MantineProvider, createTheme } from '@mantine/core';
     
     const theme = createTheme({
    @@ -219,14 +219,14 @@
     

    styles prop usage

    Some examples and demos in the documentation use styles prop for convenience, but it is not recommended to use styles prop as the primary means of styling components, as classNames -prop is more flexible and has better performance.

    +prop is more flexible and has better performance.

    Styles API based on component props

    You can also pass a callback function to classNames and styles. This function will receive -theme as first argument and component props as second. It should return +theme as first argument and component props as second. It should return object of classes (classNames) or styles (styles).

    You can use this feature to conditionally apply styles based on component props. For example, -you can change TextInput label color if the input is required or change the input +you can change TextInput label color if the input is required or change the input background color if input has error:

    import cx from 'clsx';
     import { MantineProvider, createTheme, TextInput } from '@mantine/core';
    @@ -254,20 +254,20 @@
     

    Static classes

    Every component that supports Styles API also includes static classes that can be used to style component without using classNames or styles props. By default, static classes have -.mantine-{ComponentName}-{selector} format. For example, root selector of Button +.mantine-{ComponentName}-{selector} format. For example, root selector of Button component will have .mantine-Button-root class.

    -

    You can use static classes to style component with CSS or any other styling solution:

    +

    You can use static classes to style component with CSS or any other styling solution:

    .mantine-Button-root {
       background-color: red;
     }
    -

    Static classes prefix can be changed with classNamesPrefix on MantineProvider.

    +

    Static classes prefix can be changed with classNamesPrefix on MantineProvider.

    Components classes

    Classes of each component are available in Component.classes object. For example, you can -find Button classes in Button.classes:

    +find Button classes in Button.classes:

    KeyClass
    rootm-77c9d27d
    innerm-80f1301b
    labelm-811560b9
    sectionm-a74036a
    loaderm-a25b86ee
    groupm-80d6d844

    You can use these classes to create components with the same styles as Mantine components:

    import { Button } from '@mantine/core';
     
     function Demo() {
       return <button type="button" className={Button.classes.root} />;
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/styles/styles-performance.html b/styles/styles-performance/index.html similarity index 68% rename from styles/styles-performance.html rename to styles/styles-performance/index.html index 3737c2d4ffa..dd3ed669814 100644 --- a/styles/styles-performance.html +++ b/styles/styles-performance/index.html @@ -3,12 +3,12 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Styles performance

    +

    Styles performance

    CSS modules

    -

    CSS modules is the most performant way to apply styles – +

    CSS modules is the most performant way to apply styles – this approach generates static CSS that is never re-evaluated. 99% of Mantine components styles are generated with CSS modules – components are optimized out of the box.

    -

    In most cases, it is recommended to use CSS modules to style your components as well. +

    In most cases, it is recommended to use CSS modules to style your components as well. You can apply styles to HTML elements with className prop and to Mantine components with className, classNames props.

    Applying styles with className:

    @@ -22,7 +22,7 @@ </Box> ); }
    -

    Applying styles with classNames (see Styles API guide to learn more):

    +

    Applying styles with classNames (see Styles API guide to learn more):

    import { useState } from 'react';
     import { TextInput } from '@mantine/core';
     import classes from './Demo.module.css';
    @@ -97,12 +97,12 @@
       );
     }

    Style props

    -

    Style props transform component props into inline styles. Style props have +

    Style props transform component props into inline styles. Style props have the same caveats as inline styles, it is not recommended to use them as the primary means of styling your components. Usually, style props are used to apply 1–3 styles to a component – using them this way does not impact performance.

    Responsive style props

    -

    Responsive style props have worse performance than regular style props +

    Responsive style props have worse performance than regular style props because they require injecting <style /> tag next to the component. It is fine to use responsive style props to apply styles to several components, but it is not recommended to use them in large lists of components, for example, if you have 1000 inputs with responsive margins, @@ -132,7 +132,7 @@ return <>{inputs}</>; }

    Components responsive props

    -

    Some components, like SimpleGrid and Grid +

    Some components, like SimpleGrid and Grid rely on the same mechanism as responsive style props to apply styles. The limitations are the same – it is fine to use these several of these components on a page, but it is not recommended to use -them in large lists of components.

    \ No newline at end of file +them in large lists of components.

    \ No newline at end of file diff --git a/styles/unstyled.html b/styles/unstyled/index.html similarity index 61% rename from styles/unstyled.html rename to styles/unstyled/index.html index 85392638a10..019c87be86f 100644 --- a/styles/unstyled.html +++ b/styles/unstyled/index.html @@ -3,16 +3,16 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Unstyled components

    +

    Unstyled components

    Using Mantine as a headless UI library

    You can use Mantine as a headless UI library. To do that, simply do not import @mantine/*/styles.css -in your application. Then you will be able to apply styles to Mantine components using Styles API +in your application. Then you will be able to apply styles to Mantine components using Styles API with a styling solution of your choice.

    unstyled prop

    Most of Mantine components support unstyled prop that removes library styles from the component and allows you to style it from scratch. Note that unstyled prop is not supported by compound components (Tabs.Tab, Menu.Dropdown, Accordion.Control, etc.) – it only works on root component (Tabs, Menu, Accordion, etc.).

    -

    Unstyled Tabs component:

    +

    Unstyled Tabs component:

    Chat panel
    import { Tabs } from '@mantine/core';
     
     function Demo() {
    @@ -33,10 +33,10 @@
     

    Choosing between unstyled prop and headless components

    unstyled prop is useful when you want to remove library styles from a single component, -but keep styles for other components. For example, if Tabs component does +but keep styles for other components. For example, if Tabs component does not meet your design system requirements, but all other components do, you can use unstyled prop to remove styles from Tabs and style it from scratch, while keeping all other components styled with Mantine styles.

    Note that unstyled prop does not remove Mantine library styles from your .css bundle – it only does not apply them to component with unstyled prop.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/styles/vanilla-extract.html b/styles/vanilla-extract/index.html similarity index 71% rename from styles/vanilla-extract.html rename to styles/vanilla-extract/index.html index f7ad9443f98..2bea32a32c2 100644 --- a/styles/vanilla-extract.html +++ b/styles/vanilla-extract/index.html @@ -3,27 +3,27 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Vanilla extract integration

    +

    Vanilla extract integration

    Vanilla extract is a TypeScript CSS preprocessor that generates static CSS files at build time. -It is a great alternative to CSS Modules if you prefer to write your styles in TypeScript.

    +It is a great alternative to CSS Modules if you prefer to write your styles in TypeScript.

    Vanilla extract vs CSS Modules

    -

    Vanilla extract and CSS Modules do the same thing, -but with different syntax. Common features of Vanilla extract and CSS Modules:

    +

    Vanilla extract and CSS Modules do the same thing, +but with different syntax. Common features of Vanilla extract and CSS Modules:

    • Styles are generated at build time – no runtime and performance overhead
    • Classes names are scoped to the styles file
    -

    Differences between Vanilla extract and CSS Modules:

    +

    Differences between Vanilla extract and CSS Modules:

    • Vanilla extract styles are type safe
    • -
    • You can use any JavaScript/TypeScript code in Vanilla extract styles, including color functions
    • -
    • With Vanilla extract you do not have access to postcss-preset-mantine features like light-dark function and hover mixin. +
    • You can use any JavaScript/TypeScript code in Vanilla extract styles, including color functions
    • +
    • With Vanilla extract you do not have access to postcss-preset-mantine features like light-dark function and hover mixin. Because of this, you will not be able to copy-paste all demos from Mantine documentation and use them with Vanilla extract.
    • Vanilla extract requires additional configuration and setup that may not be available for your build tool/framework. Most popular tools like Next.js and Vite have plugins for Vanilla extract, but if you are using something more niche, you might need to configure it yourself.
    -

    Note that you can use both Vanilla extract and CSS Modules in the same project, +

    Note that you can use both Vanilla extract and CSS Modules in the same project, it will not cause any issues: performance will be the same and the bundle size will not be impacted.

    Installation

    Follow the installation instructions to install vanilla extract. @@ -36,7 +36,7 @@

    Theming

    Vanilla extract provides createTheme function which converts given theme object into CSS variables and assigns them to :root or other selector. -You should not use Vanilla extract createTheme to generate Mantine theme tokens – all Mantine theme +You should not use Vanilla extract createTheme to generate Mantine theme tokens – all Mantine theme properties are already exposed as CSS variables. Instead, use themeToVars function from @mantine/vanilla-extract package to create an object with CSS variables from Mantine theme:

    // theme.ts
    @@ -52,7 +52,7 @@
     // CSS variables object, can be access in *.css.ts files
     export const vars = themeToVars(theme);

    Styling

    -

    Import vars object in *.css.ts files to access Mantine CSS variables:

    +

    Import vars object in *.css.ts files to access Mantine CSS variables:

    // Demo.css.ts
     import { vars } from './theme';
     import { style } from '@vanilla-extract/css';
    @@ -63,7 +63,7 @@
       color: vars.colors.white,
     });

    rem and em

    -

    To convert px to rem or em use rem and em functions from @mantine/core package:

    +

    To convert px to rem or em use rem and em functions from @mantine/core package:

    // Demo.css.ts
     import { rem } from '@mantine/core';
     import { style } from '@vanilla-extract/css';
    @@ -162,4 +162,4 @@
           paddingRight: 0,
         },
       },
    -});
    \ No newline at end of file +});
    \ No newline at end of file diff --git a/styles/variants-sizes.html b/styles/variants-sizes/index.html similarity index 75% rename from styles/variants-sizes.html rename to styles/variants-sizes/index.html index b9e6542e13a..7853052b2c4 100644 --- a/styles/variants-sizes.html +++ b/styles/variants-sizes/index.html @@ -3,12 +3,12 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Variants and sizes

    +

    Variants and sizes

    Adding custom variants

    Most of Mantine components support variant prop, it can be used in CSS variables resolver, and it is also exposed as data-variant="{value}" attribute on the root element of the component. The easiest way to add custom variants is to add styles that use [data-variant="{value}"].

    -

    Example of adding a new variant to the Input component:

    +

    Example of adding a new variant to the Input component:

    • underline variant styles are added
    • filled variant is a default variant – you do not need to define any additional styles for it
    • @@ -32,16 +32,16 @@ </MantineProvider> ); }
    -

    Note that you can add custom variants to every Mantine component that supports Styles API +

    Note that you can add custom variants to every Mantine component that supports Styles API even if there are no variants defined on the library side.

    Overriding existing variants styles

    Apart from adding new variants, you can also override existing ones, for example, you can change the -filled variant of the Input component with .input[data-variant="filled"] selector.

    +filled variant of the Input component with .input[data-variant="filled"] selector.

    variantColorResolver

    -

    Button, Badge, ActionIcon and other -components support custom variants with variantColorResolver +

    Button, Badge, ActionIcon and other +components support custom variants with variantColorResolver – it supports both changing colors and adding new variants. Note that theme.variantColorResolver is responsible only for colors, if you need to change other properties, use data-variant attribute.

    import {
    @@ -175,7 +175,7 @@
     }

    Sizes with static CSS variables

    Mantine components sizes are defined with CSS variables (usually on root element), for example, -ActionIcon component has the following CSS variables:

    +ActionIcon component has the following CSS variables:

    .root {
       --ai-size-xs: rem(18px);
       --ai-size-sm: rem(22px);
    @@ -183,13 +183,13 @@
       --ai-size-lg: rem(34px);
       --ai-size-xl: rem(44px);
     }
    -

    You can override these values with Styles API or add new sizes values:

    +

    You can override these values with Styles API or add new sizes values:

    .root {
       --ai-size-xxs: rem(16px);
       --ai-size-xxl: rem(50px);
     }

    Note that some components have more than one CSS variable for size, for example, -the Button component has the following CSS variables:

    +the Button component has the following CSS variables:

    .root {
       --button-height-xs: rem(30px);
       --button-height-sm: rem(36px);
    @@ -215,5 +215,5 @@
       --button-padding-x-compact-lg: rem(12px);
       --button-padding-x-compact-xl: rem(14px);
     }
    -

    Usually, it is more convenient to use data-size attribute or vars on theme -to customize sizes in this case.

    \ No newline at end of file +

    Usually, it is more convenient to use data-size attribute or vars on theme +to customize sizes in this case.

    \ No newline at end of file diff --git a/templates-usage.html b/templates-usage/index.html similarity index 72% rename from templates-usage.html rename to templates-usage/index.html index 22a67d5c413..d7f036d47db 100644 --- a/templates-usage.html +++ b/templates-usage/index.html @@ -3,11 +3,11 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Templates

    +

    Templates

    Mantine provides a set of templates for most common use cases. A template is a set of configuration files that are required to get started with Mantine and a React framework of your choice. -You can find a list of all available templates on the getting started page.

    +You can find a list of all available templates on the getting started page.

    Getting started with a template

    To get started with one of the templates:

      @@ -28,4 +28,4 @@
    • Extract downloaded archive
    • Install dependencies by running yarn
    • Start development server by running yarn dev/yarn start (exact command depends on the framework of the template)
    • -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/theming/color-schemes.html b/theming/color-schemes/index.html similarity index 75% rename from theming/color-schemes.html rename to theming/color-schemes/index.html index 4e734083339..831d4d1c90d 100644 --- a/theming/color-schemes.html +++ b/theming/color-schemes/index.html @@ -3,8 +3,8 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Color schemes

    -

    MantineProvider manages color scheme context in your application. +

    Color schemes

    +

    MantineProvider manages color scheme context in your application. You can configure the default color scheme value with defaultColorScheme prop, possible values are light, dark and auto (system color scheme is used). The default value is light.

    import { MantineProvider } from '@mantine/core';
    @@ -17,7 +17,7 @@
       );
     }

    data-mantine-color-scheme attribute

    -

    When MantineProvider is mounted, it sets data-mantine-color-scheme +

    When MantineProvider is mounted, it sets data-mantine-color-scheme attribute on <html /> element to the value that the user has selected previously or to the value of defaultColorScheme prop. data-mantine-color-scheme attribute is used in all components styles to determine which colors should component use.

    use-mantine-color-scheme hook

    @@ -80,9 +80,9 @@ before the component is mounted to avoid flash of inaccurate color scheme. This means that color scheme value can be different on client and server, as server does not have access to local storage and always uses the default value.

    -

    If you have server side rendering in your application (for example, if you use Next.js or Remix), then you cannot use colorScheme +

    If you have server side rendering in your application (for example, if you use Next.js or Remix), then you cannot use colorScheme value in your application to avoid hydration issues. Instead, you can use dark and light -mixins from postcss-preset-mantine to generate styles that will +mixins from postcss-preset-mantine to generate styles that will hide elements based on color scheme value:

    import { ActionIcon, useMantineColorScheme, useComputedColorScheme } from '@mantine/core';
     import { IconSun, IconMoon } from '@tabler/icons-react';
    @@ -114,7 +114,7 @@
     

    ColorSchemeScript component renders script tag that sets data-mantine-color-scheme attribute on <html /> element to user selected value or to defaultColorScheme prop value before hydration. It is used to avoid flash of inaccurate color scheme in server side rendered applications, -for example Next.js or Remix. Follows framework specific guides +for example Next.js or Remix. Follows framework specific guides to learn where to render ColorSchemeScript component.

    You can add any additional props to the <script /> tag generated by ColorSchemeScript component, for example, you can add nonce attribute:

    @@ -201,7 +201,7 @@ }, }; }
    -

    Then custom color scheme manager can be passed to MantineProvider:

    +

    Then custom color scheme manager can be passed to MantineProvider:

    import { MantineProvider } from '@mantine/core';
     import { localStorageColorSchemeManager } from './localStorageColorSchemeManager';
     
    @@ -216,7 +216,7 @@
     }

    Default color scheme

    The default color scheme value is used when the user has not selected any color scheme yet. -It is required to be set both on MantineProvider and +It is required to be set both on MantineProvider and ColorSchemeScript. If defaultColorScheme is not set, then light is used – your application color scheme will depend on the system color scheme.

    import { MantineProvider, ColorSchemeScript } from '@mantine/core';
    @@ -233,7 +233,7 @@
     }

    Force color scheme

    You can force the color scheme value to be either light or dark with forceColorScheme prop. -It is required to be set both on MantineProvider and +It is required to be set both on MantineProvider and ColorSchemeScript. If forceColorScheme is set, then defaultColorScheme and colorSchemeManager are ignored. When forceColorScheme is set, it is not possible to change color scheme value with setColorScheme function.

    import { MantineProvider, ColorSchemeScript } from '@mantine/core';
    @@ -247,4 +247,4 @@
           </MantineProvider>
         </>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/theming/colors.html b/theming/colors/index.html similarity index 91% rename from theming/colors.html rename to theming/colors/index.html index 13aefe06368..8b2df7102ae 100644 --- a/theming/colors.html +++ b/theming/colors/index.html @@ -3,22 +3,22 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Colors

    +

    Colors

    Mantine uses open-color in default theme with some additions. Each color has 10 shades.

    -

    Colors are exposed on the theme object as an array of strings, +

    Colors are exposed on the theme object as an array of strings, you can access color shade by color name and index (0-9), colors with larger index are darker:

    theme.colors.red[5];
     theme.colors.gray[9];
     theme.colors.blue[0];
    -

    Colors are also exposed as CSS variables:

    +

    Colors are also exposed as CSS variables:

    --mantine-color-red-5;
     --mantine-color-gray-9;
     --mantine-color-blue-0;

    Adding extra colors

    You can add any number of extra colors to theme.colors object. This will allow you to use them in all components that support color prop, for example -Button, Badge and Switch.

    +Button, Badge and Switch.

    import { Group, Button, MantineProvider } from '@mantine/core';
     
     function Demo() {
    @@ -42,7 +42,7 @@
     

    10 shades per color

    Colors override must include at least 10 shades per color. Otherwise, you will get a TypeScript error and some variants will not have proper colors. If you only have one color value, you can either -pick the remaining colors manually or use the colors generator tool.

    +pick the remaining colors manually or use the colors generator tool.

    You can add more than 10 shades per color: these values will not be used by Mantine components with the default colors resolver, but you can still reference them by index, for example, color="blue.11".

    @@ -164,7 +164,7 @@ ); }

    Colors index reference

    -

    You can reference colors by index in color prop and style props, for example c prop:

    +

    You can reference colors by index in color prop and style props, for example c prop:

    Text with blue.6 color

    Index
    import { Button, Text } from '@mantine/core';
     
     function Demo() {
    @@ -178,14 +178,14 @@
     

    Difference between color and c props

    color prop is used to control multiple CSS properties of the component. These properties can vary across different components, but usually color prop controls background, color and border-color CSS properties. For example, -when you set color="#C3FF36" on Button component (with variant="filled"), it will set the following CSS properties:

    +when you set color="#C3FF36" on Button component (with variant="filled"), it will set the following CSS properties:

    • background-color to #C3FF36
    • background-color when button is hovered to #B0E631 (#C3FF36 darkened by 10%)
    • color to var(--mantine-color-white)
    • border-color to transparent
    -

    c is a style prop – it is responsible for setting a single CSS property color (color of the text). +

    c is a style prop – it is responsible for setting a single CSS property color (color of the text). You can combine both props to achieve better contrast between text and background. In the following example:

    • color prop sets all background: #C3FF36 and color: var(--mantine-color-white)
    • @@ -202,7 +202,7 @@ }

    Colors variant resolver

    theme.variantColorResolver is a function that is used to determine which colors will be used -in different variants in the following components: Alert, Avatar, Button, Badge and ActionIcon.

    +in different variants in the following components: Alert, Avatar, Button, Badge and ActionIcon.

    It accepts an object argument with the following properties:

    interface VariantColorsResolverInput {
       /** `color` prop passed to component */
    @@ -291,7 +291,7 @@
       );
     }

    Colors generation

    -

    You can use colors generator to generate 10 shades of color based on a single value +

    You can use colors generator to generate 10 shades of color based on a single value or install @mantine/colors-generator package to generate dynamic colors in your application:

    yarn add chroma-js @mantine/colors-generator

    The package exports generateColors function that accepts a color value and returns an array of 10 shades. @@ -315,4 +315,4 @@ ); }

    Default colors

    -

    dark 0

    #C1C2C5

    dark 1

    #A6A7AB

    dark 2

    #909296

    dark 3

    #5c5f66

    dark 4

    #373A40

    dark 5

    #2C2E33

    dark 6

    #25262b

    dark 7

    #1A1B1E

    dark 8

    #141517

    dark 9

    #101113

    gray 0

    #f8f9fa

    gray 1

    #f1f3f5

    gray 2

    #e9ecef

    gray 3

    #dee2e6

    gray 4

    #ced4da

    gray 5

    #adb5bd

    gray 6

    #868e96

    gray 7

    #495057

    gray 8

    #343a40

    gray 9

    #212529

    red 0

    #fff5f5

    red 1

    #ffe3e3

    red 2

    #ffc9c9

    red 3

    #ffa8a8

    red 4

    #ff8787

    red 5

    #ff6b6b

    red 6

    #fa5252

    red 7

    #f03e3e

    red 8

    #e03131

    red 9

    #c92a2a

    pink 0

    #fff0f6

    pink 1

    #ffdeeb

    pink 2

    #fcc2d7

    pink 3

    #faa2c1

    pink 4

    #f783ac

    pink 5

    #f06595

    pink 6

    #e64980

    pink 7

    #d6336c

    pink 8

    #c2255c

    pink 9

    #a61e4d

    grape 0

    #f8f0fc

    grape 1

    #f3d9fa

    grape 2

    #eebefa

    grape 3

    #e599f7

    grape 4

    #da77f2

    grape 5

    #cc5de8

    grape 6

    #be4bdb

    grape 7

    #ae3ec9

    grape 8

    #9c36b5

    grape 9

    #862e9c

    violet 0

    #f3f0ff

    violet 1

    #e5dbff

    violet 2

    #d0bfff

    violet 3

    #b197fc

    violet 4

    #9775fa

    violet 5

    #845ef7

    violet 6

    #7950f2

    violet 7

    #7048e8

    violet 8

    #6741d9

    violet 9

    #5f3dc4

    indigo 0

    #edf2ff

    indigo 1

    #dbe4ff

    indigo 2

    #bac8ff

    indigo 3

    #91a7ff

    indigo 4

    #748ffc

    indigo 5

    #5c7cfa

    indigo 6

    #4c6ef5

    indigo 7

    #4263eb

    indigo 8

    #3b5bdb

    indigo 9

    #364fc7

    blue 0

    #e7f5ff

    blue 1

    #d0ebff

    blue 2

    #a5d8ff

    blue 3

    #74c0fc

    blue 4

    #4dabf7

    blue 5

    #339af0

    blue 6

    #228be6

    blue 7

    #1c7ed6

    blue 8

    #1971c2

    blue 9

    #1864ab

    cyan 0

    #e3fafc

    cyan 1

    #c5f6fa

    cyan 2

    #99e9f2

    cyan 3

    #66d9e8

    cyan 4

    #3bc9db

    cyan 5

    #22b8cf

    cyan 6

    #15aabf

    cyan 7

    #1098ad

    cyan 8

    #0c8599

    cyan 9

    #0b7285

    teal 0

    #e6fcf5

    teal 1

    #c3fae8

    teal 2

    #96f2d7

    teal 3

    #63e6be

    teal 4

    #38d9a9

    teal 5

    #20c997

    teal 6

    #12b886

    teal 7

    #0ca678

    teal 8

    #099268

    teal 9

    #087f5b

    green 0

    #ebfbee

    green 1

    #d3f9d8

    green 2

    #b2f2bb

    green 3

    #8ce99a

    green 4

    #69db7c

    green 5

    #51cf66

    green 6

    #40c057

    green 7

    #37b24d

    green 8

    #2f9e44

    green 9

    #2b8a3e

    lime 0

    #f4fce3

    lime 1

    #e9fac8

    lime 2

    #d8f5a2

    lime 3

    #c0eb75

    lime 4

    #a9e34b

    lime 5

    #94d82d

    lime 6

    #82c91e

    lime 7

    #74b816

    lime 8

    #66a80f

    lime 9

    #5c940d

    yellow 0

    #fff9db

    yellow 1

    #fff3bf

    yellow 2

    #ffec99

    yellow 3

    #ffe066

    yellow 4

    #ffd43b

    yellow 5

    #fcc419

    yellow 6

    #fab005

    yellow 7

    #f59f00

    yellow 8

    #f08c00

    yellow 9

    #e67700

    orange 0

    #fff4e6

    orange 1

    #ffe8cc

    orange 2

    #ffd8a8

    orange 3

    #ffc078

    orange 4

    #ffa94d

    orange 5

    #ff922b

    orange 6

    #fd7e14

    orange 7

    #f76707

    orange 8

    #e8590c

    orange 9

    #d9480f

    \ No newline at end of file +

    dark 0

    #C1C2C5

    dark 1

    #A6A7AB

    dark 2

    #909296

    dark 3

    #5c5f66

    dark 4

    #373A40

    dark 5

    #2C2E33

    dark 6

    #25262b

    dark 7

    #1A1B1E

    dark 8

    #141517

    dark 9

    #101113

    gray 0

    #f8f9fa

    gray 1

    #f1f3f5

    gray 2

    #e9ecef

    gray 3

    #dee2e6

    gray 4

    #ced4da

    gray 5

    #adb5bd

    gray 6

    #868e96

    gray 7

    #495057

    gray 8

    #343a40

    gray 9

    #212529

    red 0

    #fff5f5

    red 1

    #ffe3e3

    red 2

    #ffc9c9

    red 3

    #ffa8a8

    red 4

    #ff8787

    red 5

    #ff6b6b

    red 6

    #fa5252

    red 7

    #f03e3e

    red 8

    #e03131

    red 9

    #c92a2a

    pink 0

    #fff0f6

    pink 1

    #ffdeeb

    pink 2

    #fcc2d7

    pink 3

    #faa2c1

    pink 4

    #f783ac

    pink 5

    #f06595

    pink 6

    #e64980

    pink 7

    #d6336c

    pink 8

    #c2255c

    pink 9

    #a61e4d

    grape 0

    #f8f0fc

    grape 1

    #f3d9fa

    grape 2

    #eebefa

    grape 3

    #e599f7

    grape 4

    #da77f2

    grape 5

    #cc5de8

    grape 6

    #be4bdb

    grape 7

    #ae3ec9

    grape 8

    #9c36b5

    grape 9

    #862e9c

    violet 0

    #f3f0ff

    violet 1

    #e5dbff

    violet 2

    #d0bfff

    violet 3

    #b197fc

    violet 4

    #9775fa

    violet 5

    #845ef7

    violet 6

    #7950f2

    violet 7

    #7048e8

    violet 8

    #6741d9

    violet 9

    #5f3dc4

    indigo 0

    #edf2ff

    indigo 1

    #dbe4ff

    indigo 2

    #bac8ff

    indigo 3

    #91a7ff

    indigo 4

    #748ffc

    indigo 5

    #5c7cfa

    indigo 6

    #4c6ef5

    indigo 7

    #4263eb

    indigo 8

    #3b5bdb

    indigo 9

    #364fc7

    blue 0

    #e7f5ff

    blue 1

    #d0ebff

    blue 2

    #a5d8ff

    blue 3

    #74c0fc

    blue 4

    #4dabf7

    blue 5

    #339af0

    blue 6

    #228be6

    blue 7

    #1c7ed6

    blue 8

    #1971c2

    blue 9

    #1864ab

    cyan 0

    #e3fafc

    cyan 1

    #c5f6fa

    cyan 2

    #99e9f2

    cyan 3

    #66d9e8

    cyan 4

    #3bc9db

    cyan 5

    #22b8cf

    cyan 6

    #15aabf

    cyan 7

    #1098ad

    cyan 8

    #0c8599

    cyan 9

    #0b7285

    teal 0

    #e6fcf5

    teal 1

    #c3fae8

    teal 2

    #96f2d7

    teal 3

    #63e6be

    teal 4

    #38d9a9

    teal 5

    #20c997

    teal 6

    #12b886

    teal 7

    #0ca678

    teal 8

    #099268

    teal 9

    #087f5b

    green 0

    #ebfbee

    green 1

    #d3f9d8

    green 2

    #b2f2bb

    green 3

    #8ce99a

    green 4

    #69db7c

    green 5

    #51cf66

    green 6

    #40c057

    green 7

    #37b24d

    green 8

    #2f9e44

    green 9

    #2b8a3e

    lime 0

    #f4fce3

    lime 1

    #e9fac8

    lime 2

    #d8f5a2

    lime 3

    #c0eb75

    lime 4

    #a9e34b

    lime 5

    #94d82d

    lime 6

    #82c91e

    lime 7

    #74b816

    lime 8

    #66a80f

    lime 9

    #5c940d

    yellow 0

    #fff9db

    yellow 1

    #fff3bf

    yellow 2

    #ffec99

    yellow 3

    #ffe066

    yellow 4

    #ffd43b

    yellow 5

    #fcc419

    yellow 6

    #fab005

    yellow 7

    #f59f00

    yellow 8

    #f08c00

    yellow 9

    #e67700

    orange 0

    #fff4e6

    orange 1

    #ffe8cc

    orange 2

    #ffd8a8

    orange 3

    #ffc078

    orange 4

    #ffa94d

    orange 5

    #ff922b

    orange 6

    #fd7e14

    orange 7

    #f76707

    orange 8

    #e8590c

    orange 9

    #d9480f

    \ No newline at end of file diff --git a/theming/default-props.html b/theming/default-props/index.html similarity index 67% rename from theming/default-props.html rename to theming/default-props/index.html index 8734e5fc240..39e809a12a3 100644 --- a/theming/default-props.html +++ b/theming/default-props/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Default props

    +

    Default props

    You can define default props for every Mantine component by setting theme.components. These props will be used by default by all components of your application unless they are overridden by component props:

    import { MantineProvider, Button, Group, createTheme } from '@mantine/core';
    @@ -32,7 +32,7 @@
       );
     }

    Default props with MantineThemeProvider

    -

    You can also use MantineThemeProvider to define default props +

    You can also use MantineThemeProvider to define default props for a part of your application:

    import { MantineThemeProvider, Button, createTheme } from '@mantine/core';
     
    @@ -59,7 +59,7 @@
       );
     }

    Default props for compound components

    -

    Some components like Menu and Tabs have associated compound components: +

    Some components like Menu and Tabs have associated compound components: Menu.Item, Tabs.List, etc.. You can add default props to these components by omitting the dot from component name:

    import { MantineProvider, Menu, Tabs } from '@mantine/core';
     
    @@ -129,4 +129,4 @@
           </MantineThemeProvider>
         </div>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/theming/default-theme.html b/theming/default-theme/index.html similarity index 73% rename from theming/default-theme.html rename to theming/default-theme/index.html index faa3a3881c9..ff86b028c47 100644 --- a/theming/default-theme.html +++ b/theming/default-theme/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Default theme object

    +

    Default theme object

    Import default theme object

    You can import DEFAULT_THEME from @mantine/core package:

    import { DEFAULT_THEME } from '@mantine/core';
    @@ -275,4 +275,4 @@ }, "other": {}, "components": {} -}
    \ No newline at end of file +}
    \ No newline at end of file diff --git a/theming/mantine-provider.html b/theming/mantine-provider/index.html similarity index 73% rename from theming/mantine-provider.html rename to theming/mantine-provider/index.html index bbfde9322d9..acffeb06516 100644 --- a/theming/mantine-provider.html +++ b/theming/mantine-provider/index.html @@ -3,9 +3,9 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    MantineProvider

    -

    MantineProvider provides theme object context value, manages color scheme -changes and injects CSS variables. It must be rendered at the root of your +

    MantineProvider

    +

    MantineProvider provides theme object context value, manages color scheme +changes and injects CSS variables. It must be rendered at the root of your application and should be user only once.

    Usage

    import { MantineProvider, createTheme } from '@mantine/core';
    @@ -55,7 +55,7 @@
       children?: React.ReactNode;
     }

    theme

    -

    Pass theme object override to theme prop. It will be merged with the default +

    Pass theme object override to theme prop. It will be merged with the default theme and used in all components.

    import { MantineProvider, createTheme } from '@mantine/core';
     
    @@ -75,7 +75,7 @@
     

    colorSchemeManager is used to retrieve and set color scheme value in external storage. By default, MantineProvider uses window.localStorage to store color scheme value, but you can pass your own implementation to colorSchemeManager prop. You can learn more about color scheme management in the -color schemes guide.

    +color schemes guide.

    import { MantineProvider, localStorageColorSchemeManager } from '@mantine/core';
     
     const colorSchemeManager = localStorageColorSchemeManager({ key: 'my-app-color-scheme' });
    @@ -92,7 +92,7 @@
     storage, for example during server side rendering or when the user hasn't selected a preferred color scheme.
     Possible values are light, dark and auto. By default, it is set to auto,
     which means that the color scheme will be determined based on user system preferences.
    -You can learn more about color scheme management in the color schemes guide.

    +You can learn more about color scheme management in the color schemes guide.

    import { MantineProvider } from '@mantine/core';
     
     function Demo() {
    @@ -103,10 +103,10 @@
       );
     }

    cssVariablesSelector

    -

    cssVariablesSelector is a CSS selector to which CSS variables should be added. -By default, it is :root. MantineProvider generates CSS variables based on given theme override +

    cssVariablesSelector is a CSS selector to which CSS variables should be added. +By default, it is :root. MantineProvider generates CSS variables based on given theme override and cssVariablesResolver, then these variables are rendered into <style /> tag next to your application. -You can learn more about Mantine CSS variables in the CSS variables guide.

    +You can learn more about Mantine CSS variables in the CSS variables guide.

    import { MantineProvider } from '@mantine/core';
     
     function Demo() {
    @@ -134,7 +134,7 @@
     

    getRootElement is a function that returns the root application (usually html) element to set data-mantine-color-scheme attribute. Default value is () => document.documentElement which means that data-mantine-color-scheme attribute will be added to <html /> tag. You can learn more about color scheme management in the -color schemes guide.

    +color schemes guide.

    import { MantineProvider } from '@mantine/core';
     
     const getRootElement = () => (typeof window === 'undefined' ? undefined : document.body);
    @@ -158,11 +158,11 @@
         </MantineProvider>
       );
     }
    -

    In this case (default classNamesPrefix), Text component will have the following classes:

    +

    In this case (default classNamesPrefix), Text component will have the following classes:

    • mantine-focus-auto – global utility class
    • m-3nrA4eL – component class, usually a random string, with this class library styles are applied
    • -
    • mantine-Text-root – component static class, part of Styles API
    • +
    • mantine-Text-root – component static class, part of Styles API

    With classNamesPrefix you can change only static class:

    import { Text, MantineProvider } from '@mantine/core';
    @@ -174,7 +174,7 @@
         </MantineProvider>
       );
     }
    -

    Now Text component will have the following classes:

    +

    Now Text component will have the following classes:

    • mantine-focus-autoclassNamesPrefix does not impact global utility classes – it is static and cannot be changed
    • m-3nrA4eLclassNamesPrefix does not impact library class – it is static and cannot be changed
    • @@ -183,35 +183,5 @@

      getStyleNonce

      getStyleNonce is a function to generate nonce attribute added to dynamic generated <style /> tags.

      cssVariablesResolver

      -

      cssVariablesResolver is a function to generate CSS variables styles based on the theme object. -You can learn more about Mantine CSS variables in the CSS variables guide.

      -

      MantineThemeProvider

      -

      MantineThemeProvider allows overriding theme values for a subtree of components. -Note that values that are used to generate CSS variables cannot be overridden with MantineThemeProvider. -For example, you cannot use MantineThemeProvider to override colors or fontSizes.

      -
      import { MantineThemeProvider, Button, Group } from '@mantine/core';
      -
      -function Demo() {
      -  return (
      -    <MantineThemeProvider>
      -      <Group>
      -        <Button>Default button</Button>
      -
      -        <MantineThemeProvider theme={{ primaryColor: 'red' }}>
      -          <Button>Inside MantineThemeProvider</Button>
      -        </MantineThemeProvider>
      -      </Group>
      -    </MantineThemeProvider>
      -  );
      -}
      -
      -

      Difference between MantineProvider and MantineThemeProvider

      -

      MantineProvider is used for:

      -
        -
      • Color scheme management
      • -
      • CSS variables generation
      • -
      • Providing theme context
      • -
      -

      MantineThemeProvider is only used to change theme context – it does not generate CSS variables or manage color scheme.

      -

      It is not recommended to have more than one MantineProvider in your application, but you can have as many MantineThemeProvider as you need.

      -
    \ No newline at end of file +

    cssVariablesResolver is a function to generate CSS variables styles based on the theme object. +You can learn more about Mantine CSS variables in the CSS variables guide.

    \ No newline at end of file diff --git a/theming/theme-object.html b/theming/theme-object/index.html similarity index 80% rename from theming/theme-object.html rename to theming/theme-object/index.html index 9c21f77aece..49d483b8bd5 100644 --- a/theming/theme-object.html +++ b/theming/theme-object/index.html @@ -3,7 +3,7 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Theme object

    +

    Theme object

    Mantine theme is an object where your application's colors, fonts, spacing, border-radius and other design tokens are stored.

    interface MantineTheme {
       /** Controls focus ring styles. Supports the following options:
    @@ -123,7 +123,7 @@
       other: MantineThemeOther;
     }

    Usage

    -

    To customize theme, pass theme override object to MantineProvider theme prop. +

    To customize theme, pass theme override object to MantineProvider theme prop. Theme override will be deeply merged with the default theme.

    import { MantineProvider, createTheme, rem } from '@mantine/core';
     
    @@ -165,7 +165,7 @@
     
     

    Focus ring: auto

    Focus ring: always

    Focus ring: never

    focusClassName

    -

    theme.focusClassName is a CSS class that is added to elements that have focus styles, for example, Button or ActionIcon. +

    theme.focusClassName is a CSS class that is added to elements that have focus styles, for example, Button or ActionIcon. It can be used to customize focus ring styles of all interactive components except inputs. Note that when theme.focusClassName is set, theme.focusRing is ignored.

    import { MantineProvider, Button } from '@mantine/core';
     import classes from './focus.module.css';
    @@ -184,7 +184,7 @@
     or provide a fallback with :focus pseudo-class.

    activeClassName

    -

    theme.activeClassName is a CSS class that is added to elements that have active styles, for example, Button or ActionIcon. +

    theme.activeClassName is a CSS class that is added to elements that have active styles, for example, Button or ActionIcon. It can be used to customize active styles of all interactive components.

    import { MantineProvider, Button } from '@mantine/core';
     import classes from './active.module.css';
    @@ -207,10 +207,10 @@
       );
     }

    defaultRadius

    -

    theme.defaultRadius controls the default border-radius property in most components, for example, Button or TextInput. +

    theme.defaultRadius controls the default border-radius property in most components, for example, Button or TextInput. You can set to either one of the values from theme.radius or a number/string to use exact value. Note that numbers are treated as pixels, but converted to rem. For example, theme.defaultRadius: 4 will be converted to 0.25rem. -You can learn more about rem conversion in the rem units guide.

    +You can learn more about rem conversion in the rem units guide.

    Default radius
    import { MantineProvider, TextInput, Button } from '@mantine/core';
     
     function Demo() {
    @@ -223,7 +223,7 @@
     }

    cursorType

    theme.cursorType controls the default cursor type for interactive elements, -that do not have cursor: pointer styles by default. For example, Checkbox and NativeSelect.

    +that do not have cursor: pointer styles by default. For example, Checkbox and NativeSelect.

    import { MantineProvider, createTheme, Checkbox } from '@mantine/core';
     
     const theme = createTheme({
    @@ -243,7 +243,7 @@
     }

    defaultGradient

    theme.defaultGradient controls the default gradient configuration for components that support variant="gradient" -(Button, ActionIcon, Badge, etc.).

    +(Button, ActionIcon, Badge, etc.).

    import { MantineProvider, createTheme, Button } from '@mantine/core';
     
     const theme = createTheme({
    @@ -262,8 +262,8 @@
       );
     }

    components

    -

    theme.components allows to override components default props and styles with classNames and styles properties. -You can learn more about these features in default props and Styles API guides.

    +

    theme.components allows to override components default props and styles with classNames and styles properties. +You can learn more about these features in default props and Styles API guides.

    other

    theme.other is an object that can be used to store any other properties that you want to access with the theme objects.

    import { MantineProvider } from '@mantine/core';
    @@ -327,7 +327,7 @@
       );
     }

    use-mantine-theme hook

    -

    useMantineTheme hook returns theme object from MantineProvider context:

    +

    useMantineTheme hook returns theme object from MantineProvider context:

    import { useMantineTheme } from '@mantine/core';
     
     function Demo() {
    @@ -337,9 +337,9 @@
     

    Default theme

    You can import default theme object from @mantine/core package. It includes all theme properties with default values. When you pass theme override to -MantineProvider, it will be deeply merged with +MantineProvider, it will be deeply merged with the default theme. You can find contents of DEFAULT_THEME object -on this page.

    +on this page.

    import { DEFAULT_THEME } from '@mantine/core';

    Access theme outside of components

    To access theme outside of components, you need to create a full theme object @@ -354,4 +354,4 @@ export const theme = mergeMantineTheme(DEFAULT_THEME, themeOverride);

    Then your will be able to import it anywhere in your application:

    -
    import { theme } from './theme.ts';
    \ No newline at end of file +
    import { theme } from './theme.ts';
    \ No newline at end of file diff --git a/theming/typography.html b/theming/typography/index.html similarity index 73% rename from theming/typography.html rename to theming/typography/index.html index ca1c09ad0fa..797ad778739 100644 --- a/theming/typography.html +++ b/theming/typography/index.html @@ -3,13 +3,13 @@ var computedColorScheme = colorScheme !== "auto" ? colorScheme : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; document.documentElement.setAttribute("data-mantine-color-scheme", computedColorScheme); } catch (e) {} -

    Typography

    +

    Typography

    Change fonts

    You can change fonts and other text styles for headings, code and all other components with the following theme properties:

      -
    • theme.fontFamily – controls font-family in all components except Title, Code and Kbd
    • -
    • theme.fontFamilyMonospace – controls font-family of components that require monospace font: Code, Kbd and CodeHighlight
    • -
    • theme.headings.fontFamily – controls font-family of h1-h6 tags in Title and TypographyStylesProvider components, fallbacks to theme.fontFamily if not defined
    • +
    • theme.fontFamily – controls font-family in all components except Title, Code and Kbd
    • +
    • theme.fontFamilyMonospace – controls font-family of components that require monospace font: Code, Kbd and CodeHighlight
    • +
    • theme.headings.fontFamily – controls font-family of h1-h6 tags in Title and TypographyStylesProvider components, fallbacks to theme.fontFamily if not defined

    Greycliff CF title

    Monaco, Courier Code
    import { Button, Code, Title, MantineProvider } from '@mantine/core';
     
    @@ -77,7 +77,7 @@
     

    Default theme.fontSizes values:

    KeyValueValue in px
    xs0.75rem12px
    sm0.875rem14px
    md1rem16px
    lg1.125rem18px
    xl1.25rem20px

    Line heights

    -

    theme.lineHeights property defines line-height values for Text component, +

    theme.lineHeights property defines line-height values for Text component, most other components use theme.lineHeights.md by default:

    import { MantineProvider } from '@mantine/core';
     
    @@ -101,7 +101,7 @@
     

    Default theme.lineHeights values:

    KeyValue
    xs1.4
    sm1.45
    md1.55
    lg1.6
    xl1.65

    h1-h6 styles

    -

    To customize headings styles in Title and TypographyStylesProvider components +

    To customize headings styles in Title and TypographyStylesProvider components set theme.headings:

    import { MantineProvider, rem } from '@mantine/core';
     
    @@ -130,7 +130,7 @@
     }

    With theme.headings you can customize font-size, font-weight and line-height per heading level. If you need more control over styles, use :is selector -with Styles API to target specific heading level:

    +with Styles API to target specific heading level:

    Heading 1

    Heading 2

    Heading 3

    Heading 4

    Heading 5
    Heading 6
    import { Title, MantineProvider } from '@mantine/core';
     import classes from './Demo.module.css';
     
    @@ -155,4 +155,4 @@
           <Title order={6}>Heading 6</Title>
         </MantineProvider>
       );
    -}
    \ No newline at end of file +}
    \ No newline at end of file