themelia-react-ui 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +307 -131
- package/README.md +28 -8
- package/THIRD_PARTY_NOTICES.md +13 -0
- package/dist/{accordion-B6a3vVgA.js → accordion-Cjb6sx0G.js} +14 -13
- package/dist/accordion-Cjb6sx0G.js.map +1 -0
- package/dist/action-menu-CllU52Mm.js +280 -0
- package/dist/action-menu-CllU52Mm.js.map +1 -0
- package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
- package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
- package/dist/ai-artifact-DvTwDVyL.js +1148 -0
- package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
- package/dist/{app-shell-ZK5RWdo6.js → app-shell-C4FhvCqF.js} +5 -5
- package/dist/{app-shell-ZK5RWdo6.js.map → app-shell-C4FhvCqF.js.map} +1 -1
- package/dist/attachment-BxDfL2mw.js +246 -0
- package/dist/attachment-BxDfL2mw.js.map +1 -0
- package/dist/{auth-CYxKfo69.js → auth-ax2BqjrI.js} +58 -54
- package/dist/auth-ax2BqjrI.js.map +1 -0
- package/dist/{avatar-BBnEJIx8.js → avatar-DAPlDvhJ.js} +7 -7
- package/dist/avatar-DAPlDvhJ.js.map +1 -0
- package/dist/{badge-MrKVNzW9.js → badge-HpFqoqSY.js} +40 -40
- package/dist/badge-HpFqoqSY.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +40 -36
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +92 -92
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +2 -2
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +14 -14
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +6 -6
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +171 -176
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +6 -6
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +79 -2
- package/dist/base/spinner.js.map +1 -0
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +46 -45
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BZGDG-Si.js → batch-action-bar-DnUJ21NQ.js} +6 -5
- package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
- package/dist/blocks/admin.js +42 -42
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +260 -240
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +620 -585
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +1152 -1109
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +48 -39
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +13 -12
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-D5t7I023.js → breadcrumbs-C-oqs1sQ.js} +5 -5
- package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
- package/dist/{button-QYwiyhD2.js → button-DVzspB_G.js} +2 -2
- package/dist/{button-QYwiyhD2.js.map → button-DVzspB_G.js.map} +1 -1
- package/dist/{buttons-SbIcm1HJ.js → buttons-DPZekJFu.js} +20 -15
- package/dist/buttons-DPZekJFu.js.map +1 -0
- package/dist/cards-BaBZR-AU.js +68 -0
- package/dist/cards-BaBZR-AU.js.map +1 -0
- package/dist/{chart-QfrARkXl.js → chart-ZOYyK2xG.js} +58 -55
- package/dist/chart-ZOYyK2xG.js.map +1 -0
- package/dist/{checkbox-DhB6K0bK.js → checkbox-AWIhNhmo.js} +2 -2
- package/dist/{checkbox-DhB6K0bK.js.map → checkbox-AWIhNhmo.js.map} +1 -1
- package/dist/{choice-inputs-t6w3ATNz.js → choice-inputs-CNHvARCJ.js} +49 -45
- package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
- package/dist/{code-block-Dgbu-CU3.js → code-block-DeneBJR_.js} +8 -8
- package/dist/code-block-DeneBJR_.js.map +1 -0
- package/dist/{collapsible-D8AEGU1-.js → collapsible-C-_l4hpy.js} +3 -3
- package/dist/{collapsible-D8AEGU1-.js.map → collapsible-C-_l4hpy.js.map} +1 -1
- package/dist/{collection-content-uK16Grv0.js → collection-content-By56pLog.js} +3 -3
- package/dist/{collection-content-uK16Grv0.js.map → collection-content-By56pLog.js.map} +1 -1
- package/dist/combobox-C0EQW6dr.js +875 -0
- package/dist/combobox-C0EQW6dr.js.map +1 -0
- package/dist/combobox-xCQ2RMNE.js +309 -0
- package/dist/combobox-xCQ2RMNE.js.map +1 -0
- package/dist/{command-kNR20o7x.js → command-C25VMRII.js} +7 -7
- package/dist/{command-kNR20o7x.js.map → command-C25VMRII.js.map} +1 -1
- package/dist/{comments-BpDuCUUu.js → comments-BYYlTA8E.js} +114 -105
- package/dist/comments-BYYlTA8E.js.map +1 -0
- package/dist/components/base/badge/badge.recipes.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +2 -1
- package/dist/components/base/cards/card.recipes.d.ts +2 -3
- package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
- package/dist/components/base/cards/smart-card.types.d.ts +11 -4
- package/dist/components/base/chart/chart.d.ts +2 -5
- package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
- package/dist/components/base/combobox/index.d.ts +30 -4
- package/dist/components/base/forms/form-sizing.d.ts +11 -3
- package/dist/components/base/navigation/pagination.d.ts +5 -2
- package/dist/components/base/popover/popover.recipes.d.ts +15 -1
- package/dist/components/base/table/index.d.ts +9 -2
- package/dist/components/base/text-inputs/input-group.d.ts +2 -2
- package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
- package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +3 -1
- package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
- package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
- package/dist/components/features/appointment-calendar/index.d.ts +3 -0
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
- package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
- package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
- package/dist/components/features/combobox/types.d.ts +4 -0
- package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
- package/dist/components/features/rich-text-editor/index.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +6 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +9 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +55 -1
- package/dist/components/features/table/table.types.d.ts +17 -4
- package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
- package/dist/components/primitives/number.d.ts +4 -2
- package/dist/components/primitives/value.d.ts +3 -1
- package/dist/components/typography/text-link.d.ts +4 -0
- package/dist/components/ui/combobox.d.ts +6 -2
- package/dist/components/ui/item.d.ts +8 -8
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/{containers-DmWiJa2I.js → containers-Mu1LMGV1.js} +2 -2
- package/dist/{containers-DmWiJa2I.js.map → containers-Mu1LMGV1.js.map} +1 -1
- package/dist/{copyable-B3Gwgdqc.js → copyable-ClBuk_UK.js} +4 -4
- package/dist/{copyable-B3Gwgdqc.js.map → copyable-ClBuk_UK.js.map} +1 -1
- package/dist/{data-display-DafIvCl5.js → data-display-DT_khPl_.js} +98 -87
- package/dist/data-display-DT_khPl_.js.map +1 -0
- package/dist/{date-BgK3bTdo.js → date-DCrsDTZc.js} +5 -5
- package/dist/{date-BgK3bTdo.js.map → date-DCrsDTZc.js.map} +1 -1
- package/dist/{date-picker-CF-DtUpF.js → date-picker-ay0Pha_a.js} +594 -593
- package/dist/date-picker-ay0Pha_a.js.map +1 -0
- package/dist/date-pickers-Ccw8DL2b.js +175 -0
- package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
- package/dist/{display-DsQTVzMz.js → display-hAc1HjpI.js} +49 -49
- package/dist/display-hAc1HjpI.js.map +1 -0
- package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
- package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
- package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
- package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
- package/dist/features/activities.js +398 -375
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +188 -179
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +683 -0
- package/dist/features/appointment-calendar.js.map +1 -0
- package/dist/features/async-preview.js +109 -107
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +137 -137
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer.js +255 -255
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +254 -248
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +35 -32
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +118 -117
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +233 -231
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +789 -775
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +922 -902
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +28 -24
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +18 -15
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +12 -12
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +15 -13
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +11 -5
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +493 -489
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-BYIhtitP.js +239 -0
- package/dist/feedback-BYIhtitP.js.map +1 -0
- package/dist/{field-affordance-recipes-qQeIf4lG.js → field-affordance-recipes-DZhnIL_Y.js} +11 -18
- package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
- package/dist/{filters-BkHH53uv.js → filters-BGfvjP4d.js} +589 -580
- package/dist/filters-BGfvjP4d.js.map +1 -0
- package/dist/{form-field-DUt4UxSV.js → form-field-CwH9y77i.js} +6 -5
- package/dist/form-field-CwH9y77i.js.map +1 -0
- package/dist/{form-sizing-By94KzXE.js → form-sizing-BdP_Mf5p.js} +39 -44
- package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
- package/dist/{forms-Bzha-Y3B.js → forms-B9G_xwzi.js} +8 -8
- package/dist/{forms-Bzha-Y3B.js.map → forms-B9G_xwzi.js.map} +1 -1
- package/dist/{forms-numeric-C0bvjRPZ.js → forms-numeric-B_jraJaQ.js} +309 -309
- package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
- package/dist/{header-BOefOKd1.js → header-CGXuhcRm.js} +160 -153
- package/dist/header-CGXuhcRm.js.map +1 -0
- package/dist/{hooks-9k_TtmKh.js → hooks-Dkz0K2WT.js} +2 -2
- package/dist/{hooks-9k_TtmKh.js.map → hooks-Dkz0K2WT.js.map} +1 -1
- package/dist/{icon-badge-CAuKupo9.js → icon-badge-DYKIwvOV.js} +4 -4
- package/dist/{icon-badge-CAuKupo9.js.map → icon-badge-DYKIwvOV.js.map} +1 -1
- package/dist/index.js +3 -3
- package/dist/input-CZw8iU99.js +21 -0
- package/dist/input-CZw8iU99.js.map +1 -0
- package/dist/input-DQdEd0YD.js +263 -0
- package/dist/input-DQdEd0YD.js.map +1 -0
- package/dist/{interaction-recipes-CHr0dJUs.js → interaction-recipes-XR9ZpVYL.js} +2 -1
- package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
- package/dist/item-K5_ghvze.js +275 -0
- package/dist/item-K5_ghvze.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +71 -0
- package/dist/lib/editable-text-recipe.d.ts +4 -4
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- package/dist/lib/interaction-recipes.d.ts +5 -0
- package/dist/lib/theme-mode-css.d.ts +7 -0
- package/dist/lib/tone-recipes.d.ts +8 -0
- package/dist/lib/ui-provider/types.d.ts +2 -2
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-DcTtAaeC.js → media-gallery-3zIVLMWH.js} +8 -8
- package/dist/media-gallery-3zIVLMWH.js.map +1 -0
- package/dist/{mentions-D-uyCh01.js → mentions-utuUvH1K.js} +144 -142
- package/dist/mentions-utuUvH1K.js.map +1 -0
- package/dist/{message-CdHgIWKf.js → message-DZ_ruyUV.js} +6 -5
- package/dist/message-DZ_ruyUV.js.map +1 -0
- package/dist/{metadata-list-X5rYAKSB.js → metadata-list-8N16ZMW_.js} +130 -119
- package/dist/metadata-list-8N16ZMW_.js.map +1 -0
- package/dist/{navigation-D3KwXmaq.js → navigation-Bnotn4AQ.js} +19 -19
- package/dist/navigation-Bnotn4AQ.js.map +1 -0
- package/dist/{navigation-HJf5zxlH.js → navigation-BzhHI3lo.js} +36 -35
- package/dist/navigation-BzhHI3lo.js.map +1 -0
- package/dist/{navigation-row-recipes-BVowojQw.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
- package/dist/{navigation-row-recipes-BVowojQw.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
- package/dist/{number-DMhe-Vsk.js → number-DbV1Dija.js} +36 -34
- package/dist/{number-DMhe-Vsk.js.map → number-DbV1Dija.js.map} +1 -1
- package/dist/{overflow-tab-bar-sQHXLlwQ.js → overflow-tab-bar-CWY7Nogn.js} +105 -103
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
- package/dist/{overlays-I0axtYA6.js → overlays-DNWmZrJ4.js} +14 -12
- package/dist/overlays-DNWmZrJ4.js.map +1 -0
- package/dist/{page-B5dTH9gE.js → page-Bgl1F560.js} +8 -8
- package/dist/{page-B5dTH9gE.js.map → page-Bgl1F560.js.map} +1 -1
- package/dist/{page-header-commands-DjzFEq3E.js → page-header-commands-DOb6WsfD.js} +5 -5
- package/dist/{page-header-commands-DjzFEq3E.js.map → page-header-commands-DOb6WsfD.js.map} +1 -1
- package/dist/pagination-BL25hu2s.js +158 -0
- package/dist/pagination-BL25hu2s.js.map +1 -0
- package/dist/{popover-Di55PyAI.js → popover-7_m66eYW.js} +8 -7
- package/dist/{popover-Di55PyAI.js.map → popover-7_m66eYW.js.map} +1 -1
- package/dist/popover-menu-B9WWygpa.js +100 -0
- package/dist/popover-menu-B9WWygpa.js.map +1 -0
- package/dist/{popover.recipes-Bdyhj2db.js → popover.recipes-D3j8R8Yp.js} +17 -10
- package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
- package/dist/{primitives-B-CkiEMU.js → primitives-BFK08r9M.js} +45 -44
- package/dist/primitives-BFK08r9M.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-rnS8-uAW.js → progress-B1VnCT0K.js} +5 -5
- package/dist/{progress-rnS8-uAW.js.map → progress-B1VnCT0K.js.map} +1 -1
- package/dist/{receipt-D0oswZ0p.js → receipt-BVSOH3Xo.js} +9 -6
- package/dist/{receipt-D0oswZ0p.js.map → receipt-BVSOH3Xo.js.map} +1 -1
- package/dist/{rich-text-DvGulsNJ.js → rich-text-GOUyKQ-s.js} +3 -3
- package/dist/{rich-text-DvGulsNJ.js.map → rich-text-GOUyKQ-s.js.map} +1 -1
- package/dist/{rich-text-editor-sMU_Scqm.js → rich-text-editor-cRLC-eBK.js} +418 -426
- package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
- package/dist/{scroll-area-Bt_vXY2b.js → scroll-area-DcI-M1UT.js} +2 -2
- package/dist/{scroll-area-Bt_vXY2b.js.map → scroll-area-DcI-M1UT.js.map} +1 -1
- package/dist/{separator-C8DlRGwF.js → separator-BDV-Y648.js} +3 -3
- package/dist/{separator-C8DlRGwF.js.map → separator-BDV-Y648.js.map} +1 -1
- package/dist/{separator-CYHnjsAb.js → separator-Bom7NsGO.js} +2 -2
- package/dist/{separator-CYHnjsAb.js.map → separator-Bom7NsGO.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-CQW3b-Cu.js → settings-ybnjVwbd.js} +20 -19
- package/dist/settings-ybnjVwbd.js.map +1 -0
- package/dist/{sheet-4SEvVYzA.js → sheet-CGpB3omz.js} +8 -7
- package/dist/{sheet-4SEvVYzA.js.map → sheet-CGpB3omz.js.map} +1 -1
- package/dist/{sidebar-d7Dg80ln.js → sidebar-A0ElHINE.js} +14 -13
- package/dist/{sidebar-d7Dg80ln.js.map → sidebar-A0ElHINE.js.map} +1 -1
- package/dist/{sidebar-C7WWR29L.js → sidebar-CPx_7YBa.js} +183 -182
- package/dist/sidebar-CPx_7YBa.js.map +1 -0
- package/dist/{skeleton-Cz890JZF.js → skeleton-Byjnt7qr.js} +3 -3
- package/dist/{skeleton-Cz890JZF.js.map → skeleton-Byjnt7qr.js.map} +1 -1
- package/dist/smart-card-DiC5aac3.js +604 -0
- package/dist/smart-card-DiC5aac3.js.map +1 -0
- package/dist/{structure-DC2dygdA.js → structure-BmisBK-3.js} +2 -2
- package/dist/{structure-DC2dygdA.js.map → structure-BmisBK-3.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/table-BweFy_P9.js +1530 -0
- package/dist/table-BweFy_P9.js.map +1 -0
- package/dist/{table-CIKyLUsy.js → table-DsfzoUia.js} +75 -63
- package/dist/table-DsfzoUia.js.map +1 -0
- package/dist/{tabs-DwBJfjxX.js → tabs-CDocW5D1.js} +14 -13
- package/dist/tabs-CDocW5D1.js.map +1 -0
- package/dist/text-inputs-f9Ia-aCi.js +353 -0
- package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
- package/dist/theme-mode-css-BB-_RYab.js +14 -0
- package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
- package/dist/theme-scope-BJ6eE2xt.js +50 -0
- package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
- package/dist/theme.css +285 -228
- package/dist/themes/green.css +16 -12
- package/dist/timelines-CwM_9IhD.js +457 -0
- package/dist/timelines-CwM_9IhD.js.map +1 -0
- package/dist/{tone-recipes-CPoExcTE.js → tone-recipes-BPsRAvhu.js} +5 -2
- package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
- package/dist/{tooltip-CsfgrfS7.js → tooltip-yiRJUFjp.js} +4 -4
- package/dist/{tooltip-CsfgrfS7.js.map → tooltip-yiRJUFjp.js.map} +1 -1
- package/dist/{tree-BiKhg8AY.js → tree-WnKQzwbq.js} +9 -9
- package/dist/{tree-BiKhg8AY.js.map → tree-WnKQzwbq.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-DTRkE9zL.js → typography-UTnveOEy.js} +6 -6
- package/dist/typography-UTnveOEy.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-1D_NSYzO.js → ui-provider-C_U0Xma4.js} +3 -3
- package/dist/ui-provider-C_U0Xma4.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/{upload-BO8-CLN6.js → upload-CXyxmQBP.js} +13 -12
- package/dist/upload-CXyxmQBP.js.map +1 -0
- package/dist/{upload-queue-EOC8g1gf.js → upload-queue-Boscubn9.js} +11 -9
- package/dist/upload-queue-Boscubn9.js.map +1 -0
- package/dist/{usage-card-obRaBskq.js → usage-card-BhO5eqkX.js} +53 -37
- package/dist/usage-card-BhO5eqkX.js.map +1 -0
- package/dist/{utils-l5LpDw2z.js → utils-BRhFDwuU.js} +59 -44
- package/dist/utils-BRhFDwuU.js.map +1 -0
- package/dist/{value-inputs-TAYMX111.js → value-inputs-DXPDjvBU.js} +268 -252
- package/dist/value-inputs-DXPDjvBU.js.map +1 -0
- package/dist/{value-typography-b8wpz1eX.js → value-typography-BP8OG6h5.js} +2 -2
- package/dist/{value-typography-b8wpz1eX.js.map → value-typography-BP8OG6h5.js.map} +1 -1
- package/dist/{workspace-DH0v0KcB.js → workspace-Cdrg7k9f.js} +34 -33
- package/dist/workspace-Cdrg7k9f.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +2 -2
- package/docs/consumer-skill/references/agents-md.md +1 -1
- package/docs/consumer-skill/references/composition.md +8 -6
- package/docs/consumer-skill/references/integration.md +4 -3
- package/docs/consumer-skill/references/public-api.json +105 -2
- package/docs/consumer-skill/references/review.md +7 -0
- package/docs/consumer-skill/references/theming.md +71 -6
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +25 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +3 -2
- package/docs/consumer-skill/scripts/surface-policy.mjs +11 -0
- package/package.json +8 -4
- package/dist/accordion-B6a3vVgA.js.map +0 -1
- package/dist/action-menu-TzCoSlwL.js +0 -280
- package/dist/action-menu-TzCoSlwL.js.map +0 -1
- package/dist/affordance-geometry.generated-B5iu-Mkr.js +0 -69
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +0 -1
- package/dist/ai-artifact-BMJdv-6q.js +0 -1115
- package/dist/ai-artifact-BMJdv-6q.js.map +0 -1
- package/dist/attachment-BtfhGm8i.js +0 -245
- package/dist/attachment-BtfhGm8i.js.map +0 -1
- package/dist/auth-CYxKfo69.js.map +0 -1
- package/dist/avatar-BBnEJIx8.js.map +0 -1
- package/dist/badge-MrKVNzW9.js.map +0 -1
- package/dist/batch-action-bar-BZGDG-Si.js.map +0 -1
- package/dist/breadcrumbs-D5t7I023.js.map +0 -1
- package/dist/buttons-SbIcm1HJ.js.map +0 -1
- package/dist/cards-CiiHpKYd.js +0 -66
- package/dist/cards-CiiHpKYd.js.map +0 -1
- package/dist/chart-QfrARkXl.js.map +0 -1
- package/dist/choice-inputs-t6w3ATNz.js.map +0 -1
- package/dist/code-block-Dgbu-CU3.js.map +0 -1
- package/dist/combobox-2Ic8N9bL.js +0 -278
- package/dist/combobox-2Ic8N9bL.js.map +0 -1
- package/dist/combobox-DLl0bfiq.js +0 -867
- package/dist/combobox-DLl0bfiq.js.map +0 -1
- package/dist/comments-BpDuCUUu.js.map +0 -1
- package/dist/data-display-DafIvCl5.js.map +0 -1
- package/dist/date-picker-CF-DtUpF.js.map +0 -1
- package/dist/date-pickers-BmzxJl5l.js +0 -174
- package/dist/date-pickers-BmzxJl5l.js.map +0 -1
- package/dist/display-DsQTVzMz.js.map +0 -1
- package/dist/dropdown-menu-E2qmdC7o.js +0 -193
- package/dist/dropdown-menu-E2qmdC7o.js.map +0 -1
- package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
- package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
- package/dist/feedback-qNuMBtRH.js +0 -233
- package/dist/feedback-qNuMBtRH.js.map +0 -1
- package/dist/field-affordance-recipes-qQeIf4lG.js.map +0 -1
- package/dist/filters-BkHH53uv.js.map +0 -1
- package/dist/form-field-DUt4UxSV.js.map +0 -1
- package/dist/form-sizing-By94KzXE.js.map +0 -1
- package/dist/forms-numeric-C0bvjRPZ.js.map +0 -1
- package/dist/header-BOefOKd1.js.map +0 -1
- package/dist/input-DWhBBBww.js +0 -262
- package/dist/input-DWhBBBww.js.map +0 -1
- package/dist/input-Ddi_LSYv.js +0 -20
- package/dist/input-Ddi_LSYv.js.map +0 -1
- package/dist/interaction-recipes-CHr0dJUs.js.map +0 -1
- package/dist/item-DEmDiTlD.js +0 -265
- package/dist/item-DEmDiTlD.js.map +0 -1
- package/dist/media-gallery-DcTtAaeC.js.map +0 -1
- package/dist/mentions-D-uyCh01.js.map +0 -1
- package/dist/message-CdHgIWKf.js.map +0 -1
- package/dist/metadata-list-X5rYAKSB.js.map +0 -1
- package/dist/navigation-D3KwXmaq.js.map +0 -1
- package/dist/navigation-HJf5zxlH.js.map +0 -1
- package/dist/overflow-tab-bar-sQHXLlwQ.js.map +0 -1
- package/dist/overlays-I0axtYA6.js.map +0 -1
- package/dist/pagination-3bPA_a6K.js +0 -149
- package/dist/pagination-3bPA_a6K.js.map +0 -1
- package/dist/popover-menu-B71Tn2Qz.js +0 -99
- package/dist/popover-menu-B71Tn2Qz.js.map +0 -1
- package/dist/popover.recipes-Bdyhj2db.js.map +0 -1
- package/dist/primitives-B-CkiEMU.js.map +0 -1
- package/dist/rich-text-editor-sMU_Scqm.js.map +0 -1
- package/dist/rich-text-editor.recipes-CadiF_Uu.js +0 -88
- package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +0 -1
- package/dist/settings-CQW3b-Cu.js.map +0 -1
- package/dist/sidebar-C7WWR29L.js.map +0 -1
- package/dist/smart-card-lFKxn5Hu.js +0 -595
- package/dist/smart-card-lFKxn5Hu.js.map +0 -1
- package/dist/spinner-fa3h1Aif.js +0 -80
- package/dist/spinner-fa3h1Aif.js.map +0 -1
- package/dist/table-CIKyLUsy.js.map +0 -1
- package/dist/table-CrcLN9Io.js +0 -1458
- package/dist/table-CrcLN9Io.js.map +0 -1
- package/dist/tabs-DwBJfjxX.js.map +0 -1
- package/dist/text-inputs-aaK9wcDT.js +0 -326
- package/dist/text-inputs-aaK9wcDT.js.map +0 -1
- package/dist/theme-scope-kStaAer0.js +0 -39
- package/dist/theme-scope-kStaAer0.js.map +0 -1
- package/dist/timelines-C_SBwHNP.js +0 -442
- package/dist/timelines-C_SBwHNP.js.map +0 -1
- package/dist/tone-recipes-CPoExcTE.js.map +0 -1
- package/dist/typography-DTRkE9zL.js.map +0 -1
- package/dist/ui-provider-1D_NSYzO.js.map +0 -1
- package/dist/upload-BO8-CLN6.js.map +0 -1
- package/dist/upload-queue-EOC8g1gf.js.map +0 -1
- package/dist/usage-card-obRaBskq.js.map +0 -1
- package/dist/utils-l5LpDw2z.js.map +0 -1
- package/dist/value-inputs-TAYMX111.js.map +0 -1
- package/dist/workspace-DH0v0KcB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip-CsfgrfS7.js","names":["TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","Tooltip","BaseTooltip","TooltipProviderPrimitive","TooltipTriggerPrimitive","TooltipContentPrimitive","useThemePortalContainer","Text","anchoredPositionMethod","motionRecipes","Slot","TooltipProvider$1","props","Tooltip","delayDuration","delay","Tooltip$2","TooltipTrigger$1","slotRender","asChild","safeRender","render","_nativeButton","rest","renderProps","state","TooltipContent$1","resolvedContainer","container","cn","className","children","TooltipDescriptionContext","createContext","SharedTooltipProviderContext","Tooltip$1","hasSharedProvider","useContext","generatedId","useId","descriptionId","setDescriptionId","useState","root","TooltipProvider","TooltipTrigger","TooltipContent","description","content"],"sources":["../src/components/ui/tooltip.tsx","../src/components/base/display/tooltip.tsx"],"sourcesContent":["import { anchoredPositionMethod } from '../../lib/anchored-positioning';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\"\n\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delay = 0,\n delayDuration,\n ...props\n}: TooltipPrimitive.Provider.Props & { delayDuration?: number }) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delayDuration ?? delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n asChild = false,\n render,\n children,\n ...props\n}: TooltipPrimitive.Trigger.Props & { asChild?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: TooltipPrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n render={slotRender ?? safeRender}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\nfunction TooltipContent({\n className,\n container,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n positionMethod = anchoredPositionMethod,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"positionMethod\"\n > & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <TooltipPrimitive.Portal container={resolvedContainer}>\n <TooltipPrimitive.Positioner\n positionMethod={positionMethod}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n motionRecipes.popup,\n \"rounded-radius px-space-md py-space-xs text-xs bg-inverse-background text-inverse-foreground z-50 w-fit max-w-xs origin-(--transform-origin)\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 bg-inverse-background fill-inverse-background z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","/** Tokenized base wrappers for short, non-interactive contextual help. */\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport { createContext, useContext, useId, useLayoutEffect, useState, type ComponentProps } from 'react';\n\nimport {\n\tTooltipContent as TooltipContentPrimitive,\n\tTooltipProvider as TooltipProviderPrimitive,\n\tTooltipTrigger as TooltipTriggerPrimitive,\n} from '../../ui/tooltip';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport type TooltipProps = ComponentProps<typeof BaseTooltip.Root>;\nexport type TooltipProviderProps = ComponentProps<typeof TooltipProviderPrimitive>;\nexport type TooltipTriggerProps = ComponentProps<typeof TooltipTriggerPrimitive>;\nexport type TooltipContentProps = ComponentProps<typeof TooltipContentPrimitive>;\n\nconst TooltipDescriptionContext = createContext<{ id: string; setId: (id: string) => void } | undefined>(undefined);\n\nconst SharedTooltipProviderContext = createContext(false);\n\n/** Tooltip state root. It does not render a DOM node. */\nexport function Tooltip(props: TooltipProps) {\n\tconst hasSharedProvider = useContext(SharedTooltipProviderContext);\n\tconst generatedId = useId();\n\tconst [descriptionId, setDescriptionId] = useState(generatedId);\n\tconst root = <TooltipDescriptionContext.Provider value={{ id: descriptionId, setId: setDescriptionId }}><BaseTooltip.Root data-slot=\"tooltip\" {...props} /></TooltipDescriptionContext.Provider>;\n\n\treturn hasSharedProvider ? root : <TooltipProviderPrimitive>{root}</TooltipProviderPrimitive>;\n}\n\n/** Shared delay provider for a group of tooltip roots. Nested Tooltip roots reuse it. */\nexport function TooltipProvider(props: TooltipProviderProps) {\n\treturn (\n\t\t<SharedTooltipProviderContext.Provider value>\n\t\t\t<TooltipProviderPrimitive {...props} />\n\t\t</SharedTooltipProviderContext.Provider>\n\t);\n}\n\n/** Polymorphic tooltip anchor. */\nexport function TooltipTrigger({ className, ...props }: TooltipTriggerProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = description?.id;\n\treturn (\n\t\t<TooltipTriggerPrimitive\n\t\t\tclassName={cn('tooltip-trigger--component active:translate-y-0!', className)}\n\t\t\t{...props}\n\t\t\taria-describedby={[props['aria-describedby'], descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t/>\n\t);\n}\n\n/** Inverse contextual-help surface with package spacing and typography. */\nexport function TooltipContent({ children, className, ...props }: TooltipContentProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = props.id ?? description?.id;\n\tuseLayoutEffect(() => { if (descriptionId) description?.setId(descriptionId); }, [descriptionId, description?.setId]);\n\tconst isSimpleText = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n\tconst content = isSimpleText ? (\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"inherit\"\n\t\t\t\t\n\t\t\t\tlineHeight=\"snug\"\n\t\t\t\tclassName=\"tooltip-content--text text-inherit\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t) : children;\n\n\treturn (\n\t\t<TooltipContentPrimitive\n\t\t\tid={descriptionId}\n\t\t\trole=\"tooltip\"\n\t\t\tclassName={cn(\n\t\t\t\t// One tooltip anatomy everywhere (plain, Button `withTooltip`, TooltipButton):\n\t\t\t\t// the inline inset clears the fully rounded ends of a one-line tooltip.\n\t\t\t\t'tooltip-content--component max-w-xs rounded-radius px-space-md py-space-xs text-xs leading-snug',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t</TooltipContentPrimitive>\n\t);\n}\n\nTooltip.displayName = 'Tooltip';\nTooltipProvider.displayName = 'TooltipProvider';\nTooltipTrigger.displayName = 'TooltipTrigger';\nTooltipContent.displayName = 'TooltipContent';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tooltip-yiRJUFjp.js","names":["TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","Tooltip","BaseTooltip","TooltipProviderPrimitive","TooltipTriggerPrimitive","TooltipContentPrimitive","useThemePortalContainer","Text","anchoredPositionMethod","motionRecipes","Slot","TooltipProvider$1","props","Tooltip","delayDuration","delay","Tooltip$2","TooltipTrigger$1","slotRender","asChild","safeRender","render","_nativeButton","rest","renderProps","state","TooltipContent$1","resolvedContainer","container","cn","className","children","TooltipDescriptionContext","createContext","SharedTooltipProviderContext","Tooltip$1","hasSharedProvider","useContext","generatedId","useId","descriptionId","setDescriptionId","useState","root","TooltipProvider","TooltipTrigger","TooltipContent","description","content"],"sources":["../src/components/ui/tooltip.tsx","../src/components/base/display/tooltip.tsx"],"sourcesContent":["import { anchoredPositionMethod } from '../../lib/anchored-positioning';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\"\n\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delay = 0,\n delayDuration,\n ...props\n}: TooltipPrimitive.Provider.Props & { delayDuration?: number }) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delayDuration ?? delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n asChild = false,\n render,\n children,\n ...props\n}: TooltipPrimitive.Trigger.Props & { asChild?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: TooltipPrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n render={slotRender ?? safeRender}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\nfunction TooltipContent({\n className,\n container,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n positionMethod = anchoredPositionMethod,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"positionMethod\"\n > & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <TooltipPrimitive.Portal container={resolvedContainer}>\n <TooltipPrimitive.Positioner\n positionMethod={positionMethod}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n motionRecipes.popup,\n \"rounded-radius px-space-md py-space-xs text-xs bg-inverse-background text-inverse-foreground z-50 w-fit max-w-xs origin-(--transform-origin)\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 bg-inverse-background fill-inverse-background z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","/** Tokenized base wrappers for short, non-interactive contextual help. */\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport { createContext, useContext, useId, useLayoutEffect, useState, type ComponentProps } from 'react';\n\nimport {\n\tTooltipContent as TooltipContentPrimitive,\n\tTooltipProvider as TooltipProviderPrimitive,\n\tTooltipTrigger as TooltipTriggerPrimitive,\n} from '../../ui/tooltip';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport type TooltipProps = ComponentProps<typeof BaseTooltip.Root>;\nexport type TooltipProviderProps = ComponentProps<typeof TooltipProviderPrimitive>;\nexport type TooltipTriggerProps = ComponentProps<typeof TooltipTriggerPrimitive>;\nexport type TooltipContentProps = ComponentProps<typeof TooltipContentPrimitive>;\n\nconst TooltipDescriptionContext = createContext<{ id: string; setId: (id: string) => void } | undefined>(undefined);\n\nconst SharedTooltipProviderContext = createContext(false);\n\n/** Tooltip state root. It does not render a DOM node. */\nexport function Tooltip(props: TooltipProps) {\n\tconst hasSharedProvider = useContext(SharedTooltipProviderContext);\n\tconst generatedId = useId();\n\tconst [descriptionId, setDescriptionId] = useState(generatedId);\n\tconst root = <TooltipDescriptionContext.Provider value={{ id: descriptionId, setId: setDescriptionId }}><BaseTooltip.Root data-slot=\"tooltip\" {...props} /></TooltipDescriptionContext.Provider>;\n\n\treturn hasSharedProvider ? root : <TooltipProviderPrimitive>{root}</TooltipProviderPrimitive>;\n}\n\n/** Shared delay provider for a group of tooltip roots. Nested Tooltip roots reuse it. */\nexport function TooltipProvider(props: TooltipProviderProps) {\n\treturn (\n\t\t<SharedTooltipProviderContext.Provider value>\n\t\t\t<TooltipProviderPrimitive {...props} />\n\t\t</SharedTooltipProviderContext.Provider>\n\t);\n}\n\n/** Polymorphic tooltip anchor. */\nexport function TooltipTrigger({ className, ...props }: TooltipTriggerProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = description?.id;\n\treturn (\n\t\t<TooltipTriggerPrimitive\n\t\t\tclassName={cn('tooltip-trigger--component active:translate-y-0!', className)}\n\t\t\t{...props}\n\t\t\taria-describedby={[props['aria-describedby'], descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t/>\n\t);\n}\n\n/** Inverse contextual-help surface with package spacing and typography. */\nexport function TooltipContent({ children, className, ...props }: TooltipContentProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = props.id ?? description?.id;\n\tuseLayoutEffect(() => { if (descriptionId) description?.setId(descriptionId); }, [descriptionId, description?.setId]);\n\tconst isSimpleText = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n\tconst content = isSimpleText ? (\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"inherit\"\n\t\t\t\t\n\t\t\t\tlineHeight=\"snug\"\n\t\t\t\tclassName=\"tooltip-content--text text-inherit\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t) : children;\n\n\treturn (\n\t\t<TooltipContentPrimitive\n\t\t\tid={descriptionId}\n\t\t\trole=\"tooltip\"\n\t\t\tclassName={cn(\n\t\t\t\t// One tooltip anatomy everywhere (plain, Button `withTooltip`, TooltipButton):\n\t\t\t\t// the inline inset clears the fully rounded ends of a one-line tooltip.\n\t\t\t\t'tooltip-content--component max-w-xs rounded-radius px-space-md py-space-xs text-xs leading-snug',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t</TooltipContentPrimitive>\n\t);\n}\n\nTooltip.displayName = 'Tooltip';\nTooltipProvider.displayName = 'TooltipProvider';\nTooltipTrigger.displayName = 'TooltipTrigger';\nTooltipContent.displayName = 'TooltipContent';\n"],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { m as e } from "./ui-provider-
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import {
|
|
2
|
+
import { m as e } from "./ui-provider-C_U0Xma4.js";
|
|
3
|
+
import { t } from "./utils-BRhFDwuU.js";
|
|
4
|
+
import { c as n } from "./typography-UTnveOEy.js";
|
|
5
5
|
import { a as r } from "./text.styles-g4He6UIW.js";
|
|
6
6
|
import { t as i } from "./focus-recipes-B653VaLq.js";
|
|
7
|
-
import { t as a } from "./button-
|
|
7
|
+
import { t as a } from "./button-DVzspB_G.js";
|
|
8
8
|
import { n as o } from "./icon-size-B6PVwjbC.js";
|
|
9
9
|
import { t as ee } from "./row-recipes-DL8n7t_b.js";
|
|
10
|
-
import { t as te } from "./collection-content-
|
|
11
|
-
import { t as s } from "./interaction-recipes-
|
|
12
|
-
import { n as c, r as ne, t as re } from "./navigation-row-recipes-
|
|
10
|
+
import { t as te } from "./collection-content-By56pLog.js";
|
|
11
|
+
import { t as s } from "./interaction-recipes-XR9ZpVYL.js";
|
|
12
|
+
import { n as c, r as ne, t as re } from "./navigation-row-recipes-BFLCk_Aq.js";
|
|
13
13
|
import { useLayoutEffect as l, useMemo as u, useRef as d, useState as f } from "react";
|
|
14
14
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
15
15
|
import { Check as h, ChevronDown as g, ChevronRight as ie } from "lucide-react";
|
|
@@ -124,7 +124,7 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: ae = [], onExpa
|
|
|
124
124
|
children: d && /* @__PURE__ */ p(a, {
|
|
125
125
|
variant: "ghost",
|
|
126
126
|
size: "icon-xs",
|
|
127
|
-
className: "tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2",
|
|
127
|
+
className: "tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2 disabled:opacity-100 aria-disabled:opacity-100",
|
|
128
128
|
tabIndex: -1,
|
|
129
129
|
disabled: u,
|
|
130
130
|
"aria-label": f ? M?.collapse?.(c.label) ?? `Collapse ${c.label}` : M?.expand?.(c.label) ?? `Expand ${c.label}`,
|
|
@@ -184,4 +184,4 @@ function b({ items: b, expandedValues: x, defaultExpandedValues: ae = [], onExpa
|
|
|
184
184
|
//#endregion
|
|
185
185
|
export { _ as n, y as r, b as t };
|
|
186
186
|
|
|
187
|
-
//# sourceMappingURL=tree-
|
|
187
|
+
//# sourceMappingURL=tree-WnKQzwbq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-BiKhg8AY.js","names":["DisclosureButton","useTypographyConfig","Text","textSizes","focusRecipes","Button","ICON_DESCENDANT_SIZE_CLASSNAMES","rowBlockPaddingClasses","CollectionContent","interactionRecipes","navigationRowDensityRecipes","navigationRowInlineClasses","navigationChildInsetClasses","indexHierarchy","index","visit","node","nodes","entry","path","disabled","items","visibleHierarchy","open","expanded","isBranch","Tree","props","localExpanded","setLocalExpanded","useState","defaultExpandedValues","localSelected","setLocalSelected","defaultSelectedValues","expandedValues","selected","selectedValues","useMemo","visible","focused","setFocused","visibleValues","visibleAncestor","focusValue","refs","useRef","focusedElement","search","recipe","density","rich","rowLayout","previous","focus","value","toggle","next","onExpandedValuesChange","select","branchActivation","selectionMode","onSelectedValuesChange","keyboard","onKeyDown","event","position","rtl","forward","backward","item","now","term","letter","rows","blocked","branch","checked","element","level","cn","defaultTextSize","strings","ChevronDown","ChevronRight","renderLabel","Check","showGuides","indent","className","empty"],"sources":["../src/components/base/tree/hierarchy.ts","../src/components/base/tree/tree.tsx"],"sourcesContent":["import type { TreeNode } from './tree.types';\nexport interface HierarchyEntry<T> { node: TreeNode<T>; parent: string | null; path: TreeNode<T>[]; disabled: boolean }\n/** One canonical traversal for tree focus, cascader paths and local search. */\nexport function indexHierarchy<T>(items: readonly TreeNode<T>[]): Map<string, HierarchyEntry<T>> {\n const index = new Map<string, HierarchyEntry<T>>();\n function visit(nodes: readonly TreeNode<T>[], path: TreeNode<T>[], disabled: boolean) {\n for (const node of nodes) {\n if (index.has(node.value)) throw new Error(`Hierarchy values must be unique: ${node.value}`);\n const entry = { node, parent: path.at(-1)?.value ?? null, path: [...path, node], disabled: disabled || !!node.disabled };\n index.set(node.value, entry);\n visit(node.children ?? [], entry.path, entry.disabled);\n }\n }\n visit(items, [], false);\n return index;\n}\nexport function visibleHierarchy<T>(index: Map<string, HierarchyEntry<T>>, expanded: readonly string[]) {\n const open = new Set(expanded);\n return [...index.values()].filter(entry => entry.path.slice(0, -1).every(node => open.has(node.value)));\n}\nexport function isBranch(node: TreeNode) { return !!(node.hasChildren || node.children?.length); }\n","import { useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { Check, ChevronDown, ChevronRight } from 'lucide-react';\nimport { Button as DisclosureButton } from '../../ui/button';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useTypographyConfig } from '../../../lib/ui-provider';\nimport { textSizes } from '../../typography/text.styles';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../display/icon-size';\nimport { navigationChildInsetClasses, navigationRowDensityRecipes, navigationRowInlineClasses } from '../../../lib/navigation-row-recipes';\nimport { rowBlockPaddingClasses } from '../../../lib/row-recipes';\nimport { indexHierarchy, isBranch, visibleHierarchy } from './hierarchy';\nimport type { TreeNode, TreeProps } from './tree.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\n/** Accessible data-driven hierarchy. Focus moves independently from selection. */\nexport function Tree<T = unknown>({items, expandedValues, defaultExpandedValues = [], onExpandedValuesChange, selectedValues, defaultSelectedValues = [], onSelectedValuesChange, selectionMode = 'single', branchActivation = 'select', disabled = false, density = 'compact', rowLayout = 'line', indent, showGuides = true, empty = 'No items', strings, renderLabel, className, onKeyDown, ...props}: TreeProps<T>) {\n const [localExpanded, setLocalExpanded] = useState<readonly string[]>(defaultExpandedValues);\n const [localSelected, setLocalSelected] = useState<readonly string[]>(defaultSelectedValues);\n const expanded = expandedValues ?? localExpanded;\n const selected = selectedValues ?? localSelected;\n const index = useMemo(() => indexHierarchy(items), [items]);\n const visible = visibleHierarchy(index, expanded).filter(entry => !entry.disabled);\n const [focused, setFocused] = useState<string | null>(null);\n const visibleValues = new Set(visible.map(entry => entry.node.value));\n const visibleAncestor = focused === null ? undefined : index.get(focused)?.path.slice(0, -1).reverse().find(node => visibleValues.has(node.value))?.value;\n const focusValue = focused !== null && visibleValues.has(focused) ? focused : visibleAncestor ?? visible.find(entry => selected.includes(entry.node.value))?.node.value ?? visible[0]?.node.value;\n const refs = useRef(new Map<string, HTMLDivElement>());\n const focusedElement = useRef<HTMLDivElement | null>(null);\n const search = useRef({ text: '', time: 0 });\n const { defaultTextSize } = useTypographyConfig();\n const recipe = navigationRowDensityRecipes[density];\n const rich = rowLayout === 'rich';\n useLayoutEffect(() => {\n const previous = focusedElement.current;\n if (disabled || focusValue === undefined || !previous) return;\n // Keep focus inside a changing hierarchy, but do not reclaim it from another control.\n if (previous === document.activeElement || (!previous.isConnected && document.activeElement === document.body)) refs.current.get(focusValue)?.focus();\n }, [focusValue, disabled]);\n function focus(value: string | undefined) { if (value !== undefined) { setFocused(value); refs.current.get(value)?.focus(); } }\n function toggle(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n const next = expanded.includes(node.value) ? expanded.filter(value => value !== node.value) : [...expanded, node.value];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, node);\n }\n function select(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n if (branchActivation === 'toggle' && isBranch(node)) { toggle(node); return; }\n if (selectionMode === 'none') return;\n const next = selectionMode === 'multiple' ? selected.includes(node.value) ? selected.filter(value => value !== node.value) : [...selected, node.value] : [node.value];\n if (selectedValues === undefined) setLocalSelected(next);\n onSelectedValuesChange?.(next, node);\n }\n function keyboard(event: KeyboardEvent<HTMLDivElement>) {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled || (event.target as HTMLElement).closest('button') || (event.target as HTMLElement).closest('[role=tree]') !== event.currentTarget) return;\n const position = visible.findIndex(entry => entry.node.value === focused);\n const entry = index.get(focused ?? focusValue ?? '');\n if (!entry) return;\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === 'ArrowDown') focus(visible[Math.min(position + 1, visible.length - 1)]?.node.value);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(position - 1, 0)]?.node.value);\n else if (event.key === 'Home') focus(visible[0]?.node.value);\n else if (event.key === 'End') focus(visible.at(-1)?.node.value);\n else if (event.key === forward && isBranch(entry.node)) {\n if (!expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.node.children?.find(node => !index.get(node.value)?.disabled)?.value);\n } else if (event.key === backward) {\n if (isBranch(entry.node) && expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.parent ?? undefined);\n } else if (event.key === 'Enter' || event.key === ' ') select(entry.node);\n else if (event.key === '*') {\n const next = [...new Set([...expanded, ...[...index.values()].filter(item => item.parent === entry.parent && !item.disabled && isBranch(item.node)).map(item => item.node.value)])];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, entry.node);\n } else if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const now = Date.now();\n search.current.text = (now - search.current.time < 500 ? search.current.text : '') + event.key.toLocaleLowerCase();\n search.current.time = now;\n const term = [...search.current.text].every(letter => letter === event.key.toLocaleLowerCase()) ? event.key.toLocaleLowerCase() : search.current.text;\n const rotated = [...visible.slice(position + 1), ...visible.slice(0, position + 1)];\n focus(rotated.find(item => item.node.label.toLocaleLowerCase().startsWith(term))?.node.value);\n } else return;\n event.preventDefault();\n }\n function rows(nodes: readonly TreeNode<T>[], level: number) { return nodes.map((node, position) => {\n const blocked = disabled || !!index.get(node.value)?.disabled;\n const branch = isBranch(node);\n const open = expanded.includes(node.value);\n const checked = selected.includes(node.value);\n return <div key={node.value} data-tree-value={node.value} className=\"tree--branch min-w-0 outline-none [&:focus-visible>.tree--item]:inset-ring [&:focus-visible>.tree--item]:inset-ring-ring [&:focus-visible>.tree--item]:ring-3 [&:focus-visible>.tree--item]:ring-ring/50\" ref={element => { if (element) refs.current.set(node.value, element); else refs.current.delete(node.value); }}\n role=\"treeitem\" aria-label={node.label} aria-level={level} aria-posinset={position + 1} aria-setsize={nodes.length}\n title={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-description={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-expanded={branch ? open : undefined} aria-selected={selectionMode !== 'none' && !(branch && branchActivation === 'toggle') ? checked : undefined} aria-disabled={blocked || undefined}\n tabIndex={!blocked && focusValue === node.value ? 0 : -1}\n onFocus={event => { if (event.target === event.currentTarget) { focusedElement.current = event.currentTarget; setFocused(node.value); } }}\n onClick={event => { if (!blocked && (event.target as HTMLElement).closest('[role=treeitem]') === event.currentTarget) { focus(node.value); select(node); } }}>\n <div data-selected={checked || undefined} data-disabled={blocked || undefined}\n className={cn(`tree--item flex w-full items-center cursor-default outline-none ${interactionRecipes.rowHover} ${focusRecipes.edge} data-selected:bg-accent data-selected:hover:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50`, navigationRowInlineClasses, rich ? rowBlockPaddingClasses[density] : level === 1 ? recipe.height : recipe.childHeight, textSizes[defaultTextSize ?? 'sm'])}\n >\n <span className=\"tree--caret relative size-icon-sm shrink-0\">\n {branch && <DisclosureButton variant=\"ghost\" size=\"icon-xs\" className=\"tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2\" tabIndex={-1} disabled={blocked} aria-label={open ? strings?.collapse?.(node.label) ?? `Collapse ${node.label}` : strings?.expand?.(node.label) ?? `Expand ${node.label}`} onClick={event => {event.stopPropagation(); focus(node.value); toggle(node);}}>\n {open ? <ChevronDown aria-hidden=\"true\" className=\"size-icon-sm\" /> : <ChevronRight aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" />}\n </DisclosureButton>}\n </span>\n <CollectionContent label={renderLabel?.(node) ?? node.label} description={rich ? node.description : undefined} leading={node.icon} leadingClassName={ICON_DESCENDANT_SIZE_CLASSNAMES.md} leadingDecorative wrap={rich}\n bodyClassName={rich ? undefined : 'overflow-hidden'}\n trailing={node.trailing != null || (checked && selectionMode === 'multiple') ? <span className=\"inline-flex shrink-0 items-center gap-space-sm\">{node.trailing}{checked && selectionMode === 'multiple' && <Check aria-hidden=\"true\" className=\"size-icon shrink-0\" />}</span> : undefined} />\n </div>\n {branch && open && !!node.children?.length && <div role=\"group\" className={cn('tree--group flex flex-col border-s', navigationChildInsetClasses, recipe.childGap, showGuides ? 'border-border' : 'border-transparent')}\n style={indent === undefined ? undefined : { marginInlineStart: Math.max(0, indent) / 2, paddingInlineStart: Math.max(0, indent) / 2 }}>{rows(node.children, level + 1)}</div>}\n </div>;\n }); }\n return <div {...props} role=\"tree\" data-row-layout={rowLayout} aria-multiselectable={selectionMode === 'multiple' || undefined} aria-disabled={disabled || undefined} onKeyDown={keyboard} className={cn('tree--component flex min-w-0 flex-col', recipe.gap, className)}>\n {items.length ? rows(items, 1) : <Text type=\"secondary\">{empty}</Text>}\n </div>;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree-WnKQzwbq.js","names":["DisclosureButton","useTypographyConfig","Text","textSizes","focusRecipes","Button","ICON_DESCENDANT_SIZE_CLASSNAMES","rowBlockPaddingClasses","CollectionContent","interactionRecipes","navigationRowDensityRecipes","navigationRowInlineClasses","navigationChildInsetClasses","indexHierarchy","index","visit","node","nodes","entry","path","disabled","items","visibleHierarchy","open","expanded","isBranch","Tree","props","localExpanded","setLocalExpanded","useState","defaultExpandedValues","localSelected","setLocalSelected","defaultSelectedValues","expandedValues","selected","selectedValues","useMemo","visible","focused","setFocused","visibleValues","visibleAncestor","focusValue","refs","useRef","focusedElement","search","recipe","density","rich","rowLayout","previous","focus","value","toggle","next","onExpandedValuesChange","select","branchActivation","selectionMode","onSelectedValuesChange","keyboard","onKeyDown","event","position","rtl","forward","backward","item","now","term","letter","rows","blocked","branch","checked","element","level","cn","defaultTextSize","strings","ChevronDown","ChevronRight","renderLabel","Check","showGuides","indent","className","empty"],"sources":["../src/components/base/tree/hierarchy.ts","../src/components/base/tree/tree.tsx"],"sourcesContent":["import type { TreeNode } from './tree.types';\nexport interface HierarchyEntry<T> { node: TreeNode<T>; parent: string | null; path: TreeNode<T>[]; disabled: boolean }\n/** One canonical traversal for tree focus, cascader paths and local search. */\nexport function indexHierarchy<T>(items: readonly TreeNode<T>[]): Map<string, HierarchyEntry<T>> {\n const index = new Map<string, HierarchyEntry<T>>();\n function visit(nodes: readonly TreeNode<T>[], path: TreeNode<T>[], disabled: boolean) {\n for (const node of nodes) {\n if (index.has(node.value)) throw new Error(`Hierarchy values must be unique: ${node.value}`);\n const entry = { node, parent: path.at(-1)?.value ?? null, path: [...path, node], disabled: disabled || !!node.disabled };\n index.set(node.value, entry);\n visit(node.children ?? [], entry.path, entry.disabled);\n }\n }\n visit(items, [], false);\n return index;\n}\nexport function visibleHierarchy<T>(index: Map<string, HierarchyEntry<T>>, expanded: readonly string[]) {\n const open = new Set(expanded);\n return [...index.values()].filter(entry => entry.path.slice(0, -1).every(node => open.has(node.value)));\n}\nexport function isBranch(node: TreeNode) { return !!(node.hasChildren || node.children?.length); }\n","import { useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { Check, ChevronDown, ChevronRight } from 'lucide-react';\nimport { Button as DisclosureButton } from '../../ui/button';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useTypographyConfig } from '../../../lib/ui-provider';\nimport { textSizes } from '../../typography/text.styles';\nimport { ICON_DESCENDANT_SIZE_CLASSNAMES } from '../display/icon-size';\nimport { navigationChildInsetClasses, navigationRowDensityRecipes, navigationRowInlineClasses } from '../../../lib/navigation-row-recipes';\nimport { rowBlockPaddingClasses } from '../../../lib/row-recipes';\nimport { indexHierarchy, isBranch, visibleHierarchy } from './hierarchy';\nimport type { TreeNode, TreeProps } from './tree.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\n/** Accessible data-driven hierarchy. Focus moves independently from selection. */\nexport function Tree<T = unknown>({items, expandedValues, defaultExpandedValues = [], onExpandedValuesChange, selectedValues, defaultSelectedValues = [], onSelectedValuesChange, selectionMode = 'single', branchActivation = 'select', disabled = false, density = 'compact', rowLayout = 'line', indent, showGuides = true, empty = 'No items', strings, renderLabel, className, onKeyDown, ...props}: TreeProps<T>) {\n const [localExpanded, setLocalExpanded] = useState<readonly string[]>(defaultExpandedValues);\n const [localSelected, setLocalSelected] = useState<readonly string[]>(defaultSelectedValues);\n const expanded = expandedValues ?? localExpanded;\n const selected = selectedValues ?? localSelected;\n const index = useMemo(() => indexHierarchy(items), [items]);\n const visible = visibleHierarchy(index, expanded).filter(entry => !entry.disabled);\n const [focused, setFocused] = useState<string | null>(null);\n const visibleValues = new Set(visible.map(entry => entry.node.value));\n const visibleAncestor = focused === null ? undefined : index.get(focused)?.path.slice(0, -1).reverse().find(node => visibleValues.has(node.value))?.value;\n const focusValue = focused !== null && visibleValues.has(focused) ? focused : visibleAncestor ?? visible.find(entry => selected.includes(entry.node.value))?.node.value ?? visible[0]?.node.value;\n const refs = useRef(new Map<string, HTMLDivElement>());\n const focusedElement = useRef<HTMLDivElement | null>(null);\n const search = useRef({ text: '', time: 0 });\n const { defaultTextSize } = useTypographyConfig();\n const recipe = navigationRowDensityRecipes[density];\n const rich = rowLayout === 'rich';\n useLayoutEffect(() => {\n const previous = focusedElement.current;\n if (disabled || focusValue === undefined || !previous) return;\n // Keep focus inside a changing hierarchy, but do not reclaim it from another control.\n if (previous === document.activeElement || (!previous.isConnected && document.activeElement === document.body)) refs.current.get(focusValue)?.focus();\n }, [focusValue, disabled]);\n function focus(value: string | undefined) { if (value !== undefined) { setFocused(value); refs.current.get(value)?.focus(); } }\n function toggle(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n const next = expanded.includes(node.value) ? expanded.filter(value => value !== node.value) : [...expanded, node.value];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, node);\n }\n function select(node: TreeNode<T>) {\n if (disabled || index.get(node.value)?.disabled) return;\n if (branchActivation === 'toggle' && isBranch(node)) { toggle(node); return; }\n if (selectionMode === 'none') return;\n const next = selectionMode === 'multiple' ? selected.includes(node.value) ? selected.filter(value => value !== node.value) : [...selected, node.value] : [node.value];\n if (selectedValues === undefined) setLocalSelected(next);\n onSelectedValuesChange?.(next, node);\n }\n function keyboard(event: KeyboardEvent<HTMLDivElement>) {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled || (event.target as HTMLElement).closest('button') || (event.target as HTMLElement).closest('[role=tree]') !== event.currentTarget) return;\n const position = visible.findIndex(entry => entry.node.value === focused);\n const entry = index.get(focused ?? focusValue ?? '');\n if (!entry) return;\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === 'ArrowDown') focus(visible[Math.min(position + 1, visible.length - 1)]?.node.value);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(position - 1, 0)]?.node.value);\n else if (event.key === 'Home') focus(visible[0]?.node.value);\n else if (event.key === 'End') focus(visible.at(-1)?.node.value);\n else if (event.key === forward && isBranch(entry.node)) {\n if (!expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.node.children?.find(node => !index.get(node.value)?.disabled)?.value);\n } else if (event.key === backward) {\n if (isBranch(entry.node) && expanded.includes(entry.node.value)) toggle(entry.node);\n else focus(entry.parent ?? undefined);\n } else if (event.key === 'Enter' || event.key === ' ') select(entry.node);\n else if (event.key === '*') {\n const next = [...new Set([...expanded, ...[...index.values()].filter(item => item.parent === entry.parent && !item.disabled && isBranch(item.node)).map(item => item.node.value)])];\n if (expandedValues === undefined) setLocalExpanded(next);\n onExpandedValuesChange?.(next, entry.node);\n } else if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const now = Date.now();\n search.current.text = (now - search.current.time < 500 ? search.current.text : '') + event.key.toLocaleLowerCase();\n search.current.time = now;\n const term = [...search.current.text].every(letter => letter === event.key.toLocaleLowerCase()) ? event.key.toLocaleLowerCase() : search.current.text;\n const rotated = [...visible.slice(position + 1), ...visible.slice(0, position + 1)];\n focus(rotated.find(item => item.node.label.toLocaleLowerCase().startsWith(term))?.node.value);\n } else return;\n event.preventDefault();\n }\n function rows(nodes: readonly TreeNode<T>[], level: number) { return nodes.map((node, position) => {\n const blocked = disabled || !!index.get(node.value)?.disabled;\n const branch = isBranch(node);\n const open = expanded.includes(node.value);\n const checked = selected.includes(node.value);\n return <div key={node.value} data-tree-value={node.value} className=\"tree--branch min-w-0 outline-none [&:focus-visible>.tree--item]:inset-ring [&:focus-visible>.tree--item]:inset-ring-ring [&:focus-visible>.tree--item]:ring-3 [&:focus-visible>.tree--item]:ring-ring/50\" ref={element => { if (element) refs.current.set(node.value, element); else refs.current.delete(node.value); }}\n role=\"treeitem\" aria-label={node.label} aria-level={level} aria-posinset={position + 1} aria-setsize={nodes.length}\n title={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-description={!rich && typeof node.description === 'string' ? node.description : undefined}\n aria-expanded={branch ? open : undefined} aria-selected={selectionMode !== 'none' && !(branch && branchActivation === 'toggle') ? checked : undefined} aria-disabled={blocked || undefined}\n tabIndex={!blocked && focusValue === node.value ? 0 : -1}\n onFocus={event => { if (event.target === event.currentTarget) { focusedElement.current = event.currentTarget; setFocused(node.value); } }}\n onClick={event => { if (!blocked && (event.target as HTMLElement).closest('[role=treeitem]') === event.currentTarget) { focus(node.value); select(node); } }}>\n <div data-selected={checked || undefined} data-disabled={blocked || undefined}\n className={cn(`tree--item flex w-full items-center cursor-default outline-none ${interactionRecipes.rowHover} ${focusRecipes.edge} data-selected:bg-accent data-selected:hover:bg-accent data-selected:text-accent-foreground data-disabled:opacity-50`, navigationRowInlineClasses, rich ? rowBlockPaddingClasses[density] : level === 1 ? recipe.height : recipe.childHeight, textSizes[defaultTextSize ?? 'sm'])}\n >\n <span className=\"tree--caret relative size-icon-sm shrink-0\">\n {branch && <DisclosureButton variant=\"ghost\" size=\"icon-xs\" className=\"tree--disclosure absolute start-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-inner rtl:translate-x-1/2 disabled:opacity-100 aria-disabled:opacity-100\" tabIndex={-1} disabled={blocked} aria-label={open ? strings?.collapse?.(node.label) ?? `Collapse ${node.label}` : strings?.expand?.(node.label) ?? `Expand ${node.label}`} onClick={event => {event.stopPropagation(); focus(node.value); toggle(node);}}>\n {open ? <ChevronDown aria-hidden=\"true\" className=\"size-icon-sm\" /> : <ChevronRight aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" />}\n </DisclosureButton>}\n </span>\n <CollectionContent label={renderLabel?.(node) ?? node.label} description={rich ? node.description : undefined} leading={node.icon} leadingClassName={ICON_DESCENDANT_SIZE_CLASSNAMES.md} leadingDecorative wrap={rich}\n bodyClassName={rich ? undefined : 'overflow-hidden'}\n trailing={node.trailing != null || (checked && selectionMode === 'multiple') ? <span className=\"inline-flex shrink-0 items-center gap-space-sm\">{node.trailing}{checked && selectionMode === 'multiple' && <Check aria-hidden=\"true\" className=\"size-icon shrink-0\" />}</span> : undefined} />\n </div>\n {branch && open && !!node.children?.length && <div role=\"group\" className={cn('tree--group flex flex-col border-s', navigationChildInsetClasses, recipe.childGap, showGuides ? 'border-border' : 'border-transparent')}\n style={indent === undefined ? undefined : { marginInlineStart: Math.max(0, indent) / 2, paddingInlineStart: Math.max(0, indent) / 2 }}>{rows(node.children, level + 1)}</div>}\n </div>;\n }); }\n return <div {...props} role=\"tree\" data-row-layout={rowLayout} aria-multiselectable={selectionMode === 'multiple' || undefined} aria-disabled={disabled || undefined} onKeyDown={keyboard} className={cn('tree--component flex min-w-0 flex-col', recipe.gap, className)}>\n {items.length ? rows(items, 1) : <Text type=\"secondary\">{empty}</Text>}\n </div>;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { m as e, s as t, v as n } from "./ui-provider-
|
|
3
|
-
import { t as r } from "./utils-
|
|
2
|
+
import { m as e, s as t, v as n } from "./ui-provider-C_U0Xma4.js";
|
|
3
|
+
import { t as r } from "./utils-BRhFDwuU.js";
|
|
4
4
|
import { o as i, r as a, t as o } from "./text.styles-g4He6UIW.js";
|
|
5
5
|
import { t as s } from "./focus-recipes-B653VaLq.js";
|
|
6
6
|
import { createContext as c, forwardRef as l, useContext as u } from "react";
|
|
@@ -91,8 +91,8 @@ function y({ content: e, children: i, size: a, className: o, ref: s, ...c }) {
|
|
|
91
91
|
}
|
|
92
92
|
//#endregion
|
|
93
93
|
//#region src/components/typography/text-link.tsx
|
|
94
|
-
var b = `w-fit max-w-full rounded-radius-xs outline-none box-decoration-clone transition-colors motion-reduce:transition-none ${s.text}`, x = "underline decoration-current underline-offset-[0.2em]";
|
|
95
|
-
function
|
|
94
|
+
var b = `w-fit max-w-full rounded-radius-xs outline-none box-decoration-clone transition-colors motion-reduce:transition-none ${s.text}`, x = "underline decoration-current underline-offset-[0.2em]", S = "[&_a]:w-fit [&_a]:max-w-full [&_a]:rounded-radius-xs [&_a]:outline-none [&_a]:box-decoration-clone [&_a]:transition-colors motion-reduce:[&_a]:transition-none [&_a]:text-inherit [&_a]:underline [&_a]:decoration-current [&_a]:underline-offset-[0.2em] [&_a:hover]:decoration-transparent [&_a:focus-visible]:outline-solid [&_a:focus-visible]:outline-1 [&_a:focus-visible]:outline-offset-0 [&_a:focus-visible]:outline-ring [&_a:focus-visible]:ring-3 [&_a:focus-visible]:ring-ring/50";
|
|
95
|
+
function C({ type: t = "main", size: n, weight: a, align: o, lineHeight: s, underline: c = !0, className: l, ref: u, children: f, ...h }) {
|
|
96
96
|
let { defaultTextSize: g } = e(), _ = m();
|
|
97
97
|
return /* @__PURE__ */ d("a", {
|
|
98
98
|
...h,
|
|
@@ -112,6 +112,6 @@ function S({ type: t = "main", size: n, weight: a, align: o, lineHeight: s, unde
|
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
//#endregion
|
|
115
|
-
export {
|
|
115
|
+
export { y as a, h as c, x as i, p as l, S as n, _ as o, b as r, g as s, C as t, m as u };
|
|
116
116
|
|
|
117
|
-
//# sourceMappingURL=typography-
|
|
117
|
+
//# sourceMappingURL=typography-UTnveOEy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typography-UTnveOEy.js","names":["useTypographyConfig","useDensityConfig","resolveComponentScale","cn","textVariants","textAlignments","headingSizes","focusRecipes","RunningTextContext","createContext","useInRunningText","useContext","Text","forwardRef","Tag","props","value","children","content","invert","type","size","defaultTextSize","className","Heading","align","containerClassName","divider","subHeading","subHeadingSize","subHeadingClassName","DisplayLabel","tone","sizes","Label","defaultScale","inlineLinkClassName","linkUnderlineClassName","descendantInlineLinkClassName","TextLink","inText","weight","lineHeight","underline"],"sources":["../src/components/typography/running-text.ts","../src/components/typography/text.tsx","../src/components/typography/heading.tsx","../src/components/typography/display-label.tsx","../src/components/typography/label.tsx","../src/components/typography/text-link.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\n/**\n * True below an element that renders running text: `Text`, `Heading`,\n * `DisplayLabel`, `Label`, `TextLink` and the inline value primitives.\n *\n * Inline value primitives read it to tell a value inside a sentence from a\n * standalone value. Inside running text their unset size, colour, weight and\n * leading inherit from the surrounding text; standalone values keep their role\n * defaults. Explicit props always win.\n */\nexport const RunningTextContext = createContext(false);\n\n/** Whether the caller renders inside running text owned by a typography role. */\nexport function useInRunningText(): boolean {\n\treturn useContext(RunningTextContext);\n}\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { useTypographyConfig, type TextSize } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\nimport { RunningTextContext } from './running-text';\nimport { textVariants, type textTypes, type textWeights, type textAlignments, type textLineHeights } from './text.styles';\n\nexport interface TextProps extends Omit<ComponentPropsWithoutRef<'p'>, 'children'> {\n /** Plain text fallback; children take precedence, including zero and empty strings. */\n content?: string;\n children?: ReactNode;\n /** Colour role. Defaults to `main`; `inherit` keeps the surrounding text colour. */\n type?: keyof typeof textTypes;\n /** Text size. Defaults to the provider `typography.defaultTextSize` (`sm`). */\n size?: TextSize;\n /** Font weight. Defaults to `regular`; `inherit` keeps the surrounding weight. */\n weight?: keyof typeof textWeights;\n /** Text alignment. Defaults to `left`; `left` and `right` follow the reading direction. */\n align?: keyof typeof textAlignments;\n /** Line height. Defaults to `normal`; `inherit` keeps the surrounding leading. */\n lineHeight?: keyof typeof textLineHeights;\n /** Renders the inverse colour role on inverse surfaces. Defaults to `false`. */\n invert?: boolean;\n /**\n * Monospace with tabular figures, for identifiers and code-like values. Numbers,\n * amounts and dates use the number primitives (tabular sans figures) instead.\n * Defaults to `false`.\n */\n numeric?: boolean;\n /** Rendered element. Defaults to `p`. */\n tag?: 'div' | 'p' | 'span';\n}\n\nexport const Text = forwardRef<HTMLElement, TextProps>(function Text({\n content, children, type = 'main', size, weight, align, lineHeight,\n numeric, invert = false, tag: Tag = 'p', className, ...props\n}, ref) {\n const {defaultTextSize} = useTypographyConfig();\n const value = children ?? content;\n if (value === undefined || value === null || value === '') return null;\n return <Tag data-typography=\"text\" {...props} ref={ref as never} className={cn('text--component', textVariants({type: invert ? 'inverse' : type, size: size ?? defaultTextSize, weight, align, lineHeight, numeric}), className)}>\n <RunningTextContext.Provider value>{value}</RunningTextContext.Provider>\n </Tag>;\n});\n","import type { HTMLAttributes, ReactNode, Ref } from 'react';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\nimport { RunningTextContext } from './running-text';\nimport { headingSizes, textAlignments } from './text.styles';\nimport { Text } from './text';\n\nexport type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type HeadingSize = keyof typeof headingSizes;\nexport interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n ref?: Ref<HTMLHeadingElement>;\n /** Semantic outline level. Defaults to `h3`; it never changes the visual size. */\n tag?: HeadingTag;\n /**\n * Visual emphasis, independent of `tag`. Defaults to the compact admin `base`.\n * `xl` and larger tighten tracking; `2xl` and larger also tighten leading.\n */\n size?: HeadingSize;\n /** Secondary line under the title, rendered as secondary `Text`. */\n subHeading?: ReactNode;\n subHeadingClassName?: string;\n /** Text size of `subHeading`; defaults to the provider text size. */\n subHeadingSize?: TextSize;\n containerClassName?: string;\n /** Text alignment for the title and sub-heading. Defaults to `left`. */\n align?: keyof typeof textAlignments;\n /** Adds a bottom rule under the title. Defaults to `false`. */\n divider?: boolean;\n}\n\n/** Semantic heading levels share Themelia's restrained admin heading scale. */\nexport function Heading({tag: Tag = 'h3', size = 'base', subHeading, subHeadingClassName, subHeadingSize, containerClassName, align = 'left', divider = false, className, children, ref, ...props}: HeadingProps) {\n return <div className={cn('heading--component flex min-w-0 flex-col gap-dense', textAlignments[align], containerClassName)}>\n {children != null && <Tag {...props} ref={ref} data-typography=\"heading\" className={cn('heading--title m-0 font-heading', headingSizes[size], 'font-semibold text-foreground text-balance break-words', textAlignments[align], divider && 'border-b border-border pb-space-md', className)}><RunningTextContext.Provider value>{children}</RunningTextContext.Provider></Tag>}\n {subHeading != null && <Text type=\"secondary\" size={subHeadingSize} align={align} className={subHeadingClassName}>{subHeading}</Text>}\n </div>;\n}\n","import { Text, type TextProps } from './text';\nimport { cn } from '../../lib/utils';\n\nexport interface DisplayLabelProps extends Omit<TextProps, 'size' | 'type' | 'weight' | 'lineHeight'> {tone?: 'default' | 'inverse'}\nexport function DisplayLabel({tag = 'span', tone = 'default', className, ...props}: DisplayLabelProps) {\n return <Text {...props} tag={tag} size=\"sm\" type=\"main\" weight=\"medium\" lineHeight=\"tight\" data-typography=\"display-label\" className={cn('display-label--component', tone === 'inverse' && 'text-inverse-muted', className)} />;\n}\n","import type { LabelHTMLAttributes, ReactNode, Ref } from 'react';\nimport type { ComponentScale } from '../../lib/component-vocabulary';\nimport { useDensityConfig } from '../../lib/ui-provider';\nimport { resolveComponentScale } from '../../lib/ui-provider/scale';\nimport { cn } from '../../lib/utils';\nimport { RunningTextContext } from './running-text';\n\nexport interface LabelProps extends Omit<LabelHTMLAttributes<HTMLLabelElement>, 'content'> {\n /** Fallback content; children take precedence. */\n content?: ReactNode;\n /** Control scale the caption belongs to (`sm` → xs, `md` → sm, `lg` → base). Defaults to the provider density scale. */\n size?: ComponentScale;\n ref?: Ref<HTMLLabelElement>;\n}\nconst sizes = {sm: 'text-xs', md: 'text-sm', lg: 'text-base'} as const;\n/** Form caption for a control; medium weight, foreground, no incidental margins. */\nexport function Label({content, children, size, className, ref, ...props}: LabelProps) {\n const {defaultScale} = useDensityConfig();\n return <label {...props} ref={ref} data-typography=\"label\" className={cn('label--component font-sans font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-50', sizes[resolveComponentScale(size, defaultScale)], className)}>\n <RunningTextContext.Provider value>{children ?? content}</RunningTextContext.Provider>\n </label>;\n}\n","import type { AnchorHTMLAttributes, Ref } from 'react';\nimport { useTypographyConfig } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\nimport { RunningTextContext, useInRunningText } from './running-text';\nimport { textVariants } from './text.styles';\nimport type { TextProps } from './text';\nimport { focusRecipes } from '../../lib/focus-recipes';\n\n/**\n * Inline-link mechanics shared by `TextLink` and the link primitives. As a flex\n * or grid item the link hugs its text, so neither the hit area nor the focus\n * ring stretches across the row. The shared focus edge sits just outside the\n * glyphs inside the soft halo, uses the small radius role and follows every line\n * of a wrapped link. Links keep one colour whether\n * or not they were visited: the role colour is explicit.\n */\nexport const inlineLinkClassName = `w-fit max-w-full rounded-radius-xs outline-none box-decoration-clone transition-colors motion-reduce:transition-none ${focusRecipes.text}`;\n\n/** Underline geometry shared with content links: proportional to the text size. */\nexport const linkUnderlineClassName = 'underline decoration-current underline-offset-[0.2em]';\n\n/** Private counterpart for native anchors inside package-owned copy regions.\n * Keep selectors literal for the standalone stylesheet. These anchors inherit\n * the region's colour and follow TextLink's focus and underline mechanics. */\nexport const descendantInlineLinkClassName = '[&_a]:w-fit [&_a]:max-w-full [&_a]:rounded-radius-xs [&_a]:outline-none [&_a]:box-decoration-clone [&_a]:transition-colors motion-reduce:[&_a]:transition-none [&_a]:text-inherit [&_a]:underline [&_a]:decoration-current [&_a]:underline-offset-[0.2em] [&_a:hover]:decoration-transparent [&_a:focus-visible]:outline-solid [&_a:focus-visible]:outline-1 [&_a:focus-visible]:outline-offset-0 [&_a:focus-visible]:outline-ring [&_a:focus-visible]:ring-3 [&_a:focus-visible]:ring-ring/50';\n\nexport interface TextLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'type'>, Pick<TextProps, 'type' | 'size' | 'weight' | 'align' | 'lineHeight'> {\n /** Text size. Defaults to the provider text size; inside running text, the surrounding size. */\n size?: TextProps['size'];\n /**\n * Underlined at rest, clearing on hover. Defaults to `true`; keep it for links\n * whose colour matches the surrounding text. `false` renders no underline and\n * leaves the hover treatment to the composition (a row, chip or menu).\n */\n underline?: boolean;\n ref?: Ref<HTMLAnchorElement>;\n}\n\n/**\n * Native anchor sibling of `Text`: the same roles plus link focus and hover\n * states. Inside running text an unset size, weight and leading follow the\n * sentence; the colour role stays, so the link still reads as a link.\n */\nexport function TextLink({type = 'main', size, weight, align, lineHeight, underline = true, className, ref, children, ...props}: TextLinkProps) {\n const {defaultTextSize} = useTypographyConfig();\n const inText = useInRunningText();\n return <a {...props} ref={ref} data-typography=\"link\" className={cn('text-link--component', inlineLinkClassName, textVariants({type, size: size ?? (inText ? 'inherit' : defaultTextSize), weight: weight ?? (inText ? 'inherit' : undefined), align, lineHeight: lineHeight ?? (inText ? 'inherit' : undefined)}), underline ? `${linkUnderlineClassName} hover:decoration-transparent` : 'no-underline', className)}>\n <RunningTextContext.Provider value>{children}</RunningTextContext.Provider>\n </a>;\n}\n"],"mappings":"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"}
|
package/dist/typography.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e,
|
|
3
|
-
export {
|
|
2
|
+
import { a as e, c as t, o as n, s as r, t as i } from "./typography-UTnveOEy.js";
|
|
3
|
+
export { n as DisplayLabel, r as Heading, e as Label, t as Text, i as TextLink };
|
|
@@ -30,8 +30,8 @@ var l = {
|
|
|
30
30
|
badge: { defaultTone: "neutral" },
|
|
31
31
|
card: {
|
|
32
32
|
defaultSurface: "framed",
|
|
33
|
-
defaultHeaderDivider: !
|
|
34
|
-
defaultFooterDivider: !
|
|
33
|
+
defaultHeaderDivider: !0,
|
|
34
|
+
defaultFooterDivider: !0
|
|
35
35
|
},
|
|
36
36
|
overlay: {
|
|
37
37
|
defaultConfirmAlign: "center",
|
|
@@ -133,4 +133,4 @@ var v = () => g((e) => e.density), y = () => g((e) => e.formatting), b = () => g
|
|
|
133
133
|
//#endregion
|
|
134
134
|
export { u as _, S as a, y as c, O as d, A as f, f as g, _ as h, D as i, w as l, C as m, E as n, x as o, k as p, T as r, v as s, c as t, b as u, d as v, l as y };
|
|
135
135
|
|
|
136
|
-
//# sourceMappingURL=ui-provider-
|
|
136
|
+
//# sourceMappingURL=ui-provider-C_U0Xma4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-provider-C_U0Xma4.js","names":["DEFAULT_UI_CONFIG","isComponentScale","COMPONENT_SCALES","value","resolveComponentScale","propScale","providerScale","fallback","resolveUIConfig","config","base","createUIStore","createStore","UIStoreContext","createContext","fallbackUIStore","useUIStore","contextualStore","useContext","useStore","selector","UIProvider","parentStore","storeRef","useRef","useEffect","useDensityConfig","s","useFormattingConfig","useMoneyConfig","useDatesConfig","useCommentsConfig","useTypographyConfig","useItemConfig","useButtonConfig","useBadgeConfig","useCardConfig","useOverlayConfig","useToastConfig","useSpinnerConfig","DirectionProvider"],"sources":["../src/lib/ui-provider/defaults.ts","../src/lib/ui-provider/scale.ts","../src/lib/ui-provider/store.ts","../src/lib/ui-provider/provider.tsx","../src/lib/ui-provider/hooks.ts"],"sourcesContent":["/**\n * Hardcoded library-wide defaults.\n *\n * These are the values the store ships with — every component reading via\n * `useFooConfig()` gets these even when no `<UIProvider>` is mounted.\n *\n * Each `<UIProvider>` creates an isolated mount-once store synchronously, so\n * these defaults work for browser rendering, SSR, and multiple React roots.\n * Components outside a provider read the no-provider fallback store.\n */\nimport type { ResolvedUIConfig } from './types';\n\nexport const DEFAULT_UI_CONFIG: ResolvedUIConfig = {\n\tdensity: {\n\t\tdefaultScale: 'md',\n\t},\n\tformatting: {\n\t\tlocale: 'en-US',\n\t},\n\tmoney: {\n\t\tdefaultCurrency: 'USD',\n\t\tdualPricingEnabled: false,\n\t\tdisplayMode: 'default_only',\n\t\tdualPricingDisplay: 'lines',\n\t\tformatMode: 'with_code',\n\t},\n\tdates: {\n\t\tweekStartsOn: 1,\n\t\tformat: 'dd MMM yyyy',\n\t},\n\tcomments: {\n\t\tcomposerPosition: 'top',\n\t},\n\ttypography: {\n\t\tdefaultTextSize: 'sm',\n\t},\n\titem: {\n\t\tdefaultVariant: 'default',\n\t},\n\tbutton: {\n\t\t// The neutral button; the one main command opts into tone=\"primary\".\n\t\tdefaultTone: 'secondary',\n\t\tdefaultButtonStyle: 'outline',\n\t},\n\tbadge: {\n\t\tdefaultTone: 'neutral',\n\t},\n\tcard: {\n\t\tdefaultSurface: 'framed',\n\t\tdefaultHeaderDivider: true,\n\t\tdefaultFooterDivider: true,\n\t},\n\toverlay: {\n\t\t// A confirmation reads as one centred question above its answers; a task\n\t\t// dialog keeps its heading and actions on the reading edge.\n\t\tdefaultConfirmAlign: 'center',\n\t\tdefaultDialogAlign: 'start',\n\t},\n\ttoast: {\n\t\tduration: 5000,\n\t\tposition: 'bottom-center',\n\t\ttheme: 'dark',\n\t\tcloseButton: true,\n\t\trichColors: false,\n\t\tvisibleToasts: 4,\n\t},\n\tspinner: {\n\t\tdefaultVariant: 'default',\n\t},\n};\n","import {\n\tCOMPONENT_SCALES,\n\ttype ComponentScale,\n} from '../component-vocabulary';\n\n/** Runtime guard for serialized or otherwise untyped component scale values. */\nexport function isComponentScale(value: unknown): value is ComponentScale {\n\treturn COMPONENT_SCALES.includes(value as ComponentScale);\n}\n\n/** Resolve direct, provider, and local scale defaults in precedence order. */\nexport function resolveComponentScale(\n\tpropScale: ComponentScale | undefined,\n\tproviderScale: ComponentScale | undefined,\n\tfallback: ComponentScale = 'md',\n): ComponentScale {\n\tif (isComponentScale(propScale)) return propScale;\n\tif (isComponentScale(providerScale)) return providerScale;\n\treturn isComponentScale(fallback) ? fallback : 'md';\n}\n","/**\n * Store plumbing for `<UIProvider>`.\n *\n * Each provider owns a vanilla Zustand store. This keeps independent React\n * roots and concurrent SSR requests isolated while retaining slice-scoped\n * subscriptions. A fallback store keeps components functional when no\n * provider is mounted and preserves the historical test bootstrap helpers.\n */\nimport { createContext, useContext } from 'react';\nimport { useStore } from 'zustand';\nimport { createStore, type StoreApi } from 'zustand/vanilla';\n\nimport { DEFAULT_UI_CONFIG } from './defaults';\nimport { resolveComponentScale } from './scale';\nimport type { ResolvedUIConfig, UIConfig } from './types';\n\nexport type UIStore = StoreApi<ResolvedUIConfig>;\n\n/**\n * Merge a partial config over a resolved base: the package defaults for a\n * root provider, or the parent provider's resolved defaults when nested.\n */\nexport function resolveUIConfig(\n\tconfig: UIConfig = {},\n\tbase: ResolvedUIConfig = DEFAULT_UI_CONFIG,\n): ResolvedUIConfig {\n\treturn {\n\t\tdensity: {\n\t\t\tdefaultScale: resolveComponentScale(\n\t\t\t\tconfig.density?.defaultScale,\n\t\t\t\tbase.density.defaultScale,\n\t\t\t),\n\t\t},\n\t\tformatting: { ...base.formatting, ...config.formatting },\n\t\tmoney: { ...base.money, ...config.money },\n\t\tdates: { ...base.dates, ...config.dates },\n\t\tcomments: { ...base.comments, ...config.comments },\n\t\ttypography: { ...base.typography, ...config.typography },\n\t\titem: { ...base.item, ...config.item },\n\t\tbutton: { ...base.button, ...config.button },\n\t\tbadge: { ...base.badge, ...config.badge },\n\t\tcard: { ...base.card, ...config.card },\n\t\toverlay: { ...base.overlay, ...config.overlay },\n\t\ttoast: { ...base.toast, ...config.toast },\n\t\tspinner: { ...base.spinner, ...config.spinner },\n\t};\n}\n\nexport function createUIStore(config: UIConfig = {}, base?: ResolvedUIConfig): UIStore {\n\treturn createStore<ResolvedUIConfig>(() => resolveUIConfig(config, base));\n}\n\nexport const UIStoreContext = createContext<UIStore | null>(null);\n\nconst fallbackUIStore = createUIStore();\n\nexport function useUIStore<T>(selector: (state: ResolvedUIConfig) => T): T {\n\tconst contextualStore = useContext(UIStoreContext);\n\treturn useStore(contextualStore ?? fallbackUIStore, selector);\n}\n\n/** Test-only helper for components rendered without a provider. */\nexport function applyUIConfig(config: UIConfig): void {\n\tfallbackUIStore.setState((state) => {\n\t\tconst next = { ...state };\n\t\tconst nextSlices = next as unknown as Record<keyof UIConfig, object>;\n\t\tconst currentSlices = state as unknown as Record<keyof UIConfig, object>;\n\n\t\tfor (const key of Object.keys(config) as Array<keyof UIConfig>) {\n\t\t\tconst override = config[key];\n\t\t\tif (!override) continue;\n\t\t\tnextSlices[key] = { ...currentSlices[key], ...override };\n\t\t}\n\n\t\treturn next;\n\t});\n}\n\n/** Test-only reset for the no-provider fallback store. */\nexport function resetUIConfig(): void {\n\tfallbackUIStore.setState(resolveUIConfig(), true);\n}\n","/**\n * `<UIProvider>` — an isolated, mount-once display-default boundary.\n *\n * The store is created synchronously on the first render, so server output,\n * hydration, and the first browser render all observe the same configuration.\n * Independent roots and SSR requests never share mutable provider state. A\n * nested provider starts from its parent's resolved defaults and overrides\n * only the keys it sets.\n */\nimport { useContext, useEffect, useRef, type ReactNode } from 'react';\n\nimport { createUIStore, UIStoreContext, type UIStore } from './store';\nimport type { UIConfig } from './types';\n\nexport interface UIProviderProps {\n\t/**\n\t * Partial display-default tree merged over the nearest parent provider's\n\t * defaults, or over `DEFAULT_UI_CONFIG` at the root.\n\t */\n\tconfig?: UIConfig;\n\tchildren: ReactNode;\n}\n\nexport function UIProvider({ config, children }: UIProviderProps) {\n\tconst parentStore = useContext(UIStoreContext);\n\tconst storeRef = useRef<UIStore | null>(null);\n\tconst initialConfigRef = useRef<UIConfig | undefined>(config);\n\n\tif (storeRef.current === null) {\n\t\t// Both providers are mount-once, so the parent snapshot stays exact.\n\t\tstoreRef.current = createUIStore(config, parentStore?.getState());\n\t}\n\n\tuseEffect(() => {\n\t\tif (import.meta.env?.DEV && initialConfigRef.current !== config) {\n\t\t\tconsole.warn(\n\t\t\t\t'[UIProvider] `config` is mount-once. Subsequent prop identity ' +\n\t\t\t\t\t'changes are ignored; use direct component props for per-mount state.',\n\t\t\t);\n\t\t}\n\t}, [config]);\n\n\treturn (\n\t\t<UIStoreContext.Provider value={storeRef.current}>\n\t\t\t{children}\n\t\t</UIStoreContext.Provider>\n\t);\n}\n","/**\n * Slice selector hooks.\n *\n * Each hook reads exactly one slice from the store. Components that only\n * care about `money` will not re-render when `dates` changes, etc.\n *\n * Every selector returns a guaranteed-populated slice (the store is\n * initialized with `DEFAULT_UI_CONFIG`), so component code can write:\n *\n * const { defaultCurrency } = useMoneyConfig();\n * const currency = props.currency ?? defaultCurrency;\n *\n * — no need to chain optional-access through the slice.\n */\nimport { useUIStore } from './store';\nimport type {\n\tButtonConfigSlice,\n\tBadgeConfigSlice,\n\tCardConfigSlice,\n\tCommentsDefaultsConfig,\n\tDatesConfig,\n\tDensityConfigSlice,\n\tFormattingConfigSlice,\n\tItemConfigSlice,\n\tMoneyConfig,\n\tOverlayConfigSlice,\n\tSpinnerConfigSlice,\n\tToastConfig,\n\tTypographyConfigSlice,\n} from './types';\n\nexport const useDensityConfig = (): DensityConfigSlice =>\n\tuseUIStore((s) => s.density);\n\nexport const useFormattingConfig = (): FormattingConfigSlice =>\n\tuseUIStore((s) => s.formatting);\n\nexport const useMoneyConfig = (): MoneyConfig =>\n\tuseUIStore((s) => s.money);\n\nexport const useDatesConfig = (): DatesConfig =>\n\tuseUIStore((s) => s.dates);\n\nexport const useCommentsConfig = (): CommentsDefaultsConfig =>\n\tuseUIStore((s) => s.comments);\n\nexport const useTypographyConfig = (): TypographyConfigSlice =>\n\tuseUIStore((s) => s.typography);\n\nexport const useItemConfig = (): ItemConfigSlice =>\n\tuseUIStore((s) => s.item);\n\nexport const useButtonConfig = (): ButtonConfigSlice =>\n\tuseUIStore((s) => s.button);\n\nexport const useBadgeConfig = (): BadgeConfigSlice =>\n\tuseUIStore((s) => s.badge);\n\nexport const useCardConfig = (): CardConfigSlice =>\n\tuseUIStore((s) => s.card);\n\nexport const useOverlayConfig = (): OverlayConfigSlice =>\n\tuseUIStore((s) => s.overlay);\n\nexport const useToastConfig = (): ToastConfig =>\n\tuseUIStore((s) => s.toast);\n\nexport const useSpinnerConfig = (): SpinnerConfigSlice =>\n\tuseUIStore((s) => s.spinner);\n"],"mappings":";;;;;;;;AAYA,IAAaA,IAAsC;CAClD,SAAS,EACR,cAAc,KACf;CACA,YAAY,EACX,QAAQ,QACT;CACA,OAAO;EACN,iBAAiB;EACjB,oBAAoB;EACpB,aAAa;EACb,oBAAoB;EACpB,YAAY;CACb;CACA,OAAO;EACN,cAAc;EACd,QAAQ;CACT;CACA,UAAU,EACT,kBAAkB,MACnB;CACA,YAAY,EACX,iBAAiB,KAClB;CACA,MAAM,EACL,gBAAgB,UACjB;CACA,QAAQ;EAEP,aAAa;EACb,oBAAoB;CACrB;CACA,OAAO,EACN,aAAa,UACd;CACA,MAAM;EACL,gBAAgB;EAChB,sBAAsB;EACtB,sBAAsB;CACvB;CACA,SAAS;EAGR,qBAAqB;EACrB,oBAAoB;CACrB;CACA,OAAO;EACN,UAAU;EACV,UAAU;EACV,OAAO;EACP,aAAa;EACb,YAAY;EACZ,eAAe;CAChB;CACA,SAAS,EACR,gBAAgB,UACjB;AACD;;;AC/DA,SAAgBC,EAAiB,GAAyC;CACzE,OAAOC,EAAiB,SAASC,CAAuB;AACzD;AAGA,SAAgBC,EACf,GACA,GACA,IAA2B,MACV;CAGjB,OAFIH,EAAiBI,CAAS,IAAUA,IACpCJ,EAAiBK,CAAa,IAAUA,IACrCL,EAAiBM,CAAQ,IAAIA,IAAW;AAChD;;;ACGA,SAAgBC,EACf,IAAmB,CAAC,GACpB,IAAyBR,GACN;CACnB,OAAO;EACN,SAAS,EACR,cAAcI,EACbK,EAAO,SAAS,cAChBC,EAAK,QAAQ,YACd,EACD;EACA,YAAY;GAAE,GAAGA,EAAK;GAAY,GAAGD,EAAO;EAAW;EACvD,OAAO;GAAE,GAAGC,EAAK;GAAO,GAAGD,EAAO;EAAM;EACxC,OAAO;GAAE,GAAGC,EAAK;GAAO,GAAGD,EAAO;EAAM;EACxC,UAAU;GAAE,GAAGC,EAAK;GAAU,GAAGD,EAAO;EAAS;EACjD,YAAY;GAAE,GAAGC,EAAK;GAAY,GAAGD,EAAO;EAAW;EACvD,MAAM;GAAE,GAAGC,EAAK;GAAM,GAAGD,EAAO;EAAK;EACrC,QAAQ;GAAE,GAAGC,EAAK;GAAQ,GAAGD,EAAO;EAAO;EAC3C,OAAO;GAAE,GAAGC,EAAK;GAAO,GAAGD,EAAO;EAAM;EACxC,MAAM;GAAE,GAAGC,EAAK;GAAM,GAAGD,EAAO;EAAK;EACrC,SAAS;GAAE,GAAGC,EAAK;GAAS,GAAGD,EAAO;EAAQ;EAC9C,OAAO;GAAE,GAAGC,EAAK;GAAO,GAAGD,EAAO;EAAM;EACxC,SAAS;GAAE,GAAGC,EAAK;GAAS,GAAGD,EAAO;EAAQ;CAC/C;AACD;AAEA,SAAgBE,EAAc,IAAmB,CAAC,GAAG,GAAkC;CACtF,OAAOC,QAAoCJ,EAAgBC,GAAQC,CAAI,CAAC;AACzE;AAEA,IAAaG,IAAiBC,EAA8B,IAAI,GAE1DC,IAAkBJ,EAAc;AAEtC,SAAgBK,EAAc,GAA6C;CAC1E,IAAMC,IAAkBC,EAAWL,CAAc;CACjD,OAAOM,EAASF,KAAmBF,GAAiBK,CAAQ;AAC7D;;;ACpCA,SAAgBC,EAAW,EAAE,WAAQ,eAA6B;CACjE,IAAMC,IAAcJ,EAAWL,CAAc,GACvCU,IAAWC,EAAuB,IAAI;CAiB5C,OAhByBA,EAA6Bf,CAAM,GAExDc,EAAS,YAAY,SAExB,EAAS,UAAUZ,EAAcF,GAAQa,GAAa,SAAS,CAAC,IAGjEG,QAAgB,CAOhB,GAAG,CAAChB,CAAM,CAAC,GAGV,kBAACI,EAAe,UAAhB;EAAyB,OAAOU,EAAS;EACvC;CACuB,CAAA;AAE3B;;;AChBA,IAAaG,UACZV,GAAY,MAAMW,EAAE,OAAO,GAEfC,UACZZ,GAAY,MAAMW,EAAE,UAAU,GAElBE,UACZb,GAAY,MAAMW,EAAE,KAAK,GAEbG,UACZd,GAAY,MAAMW,EAAE,KAAK,GAEbI,UACZf,GAAY,MAAMW,EAAE,QAAQ,GAEhBK,UACZhB,GAAY,MAAMW,EAAE,UAAU,GAElBM,UACZjB,GAAY,MAAMW,EAAE,IAAI,GAEZO,UACZlB,GAAY,MAAMW,EAAE,MAAM,GAEdQ,UACZnB,GAAY,MAAMW,EAAE,KAAK,GAEbS,UACZpB,GAAY,MAAMW,EAAE,IAAI,GAEZU,UACZrB,GAAY,MAAMW,EAAE,OAAO,GAEfW,UACZtB,GAAY,MAAMW,EAAE,KAAK,GAEbY,UACZvB,GAAY,MAAMW,EAAE,OAAO"}
|
package/dist/ui-provider.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { _ as e, a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h, v as g, y as _ } from "./ui-provider-
|
|
3
|
-
import { t as v } from "./theme-scope-
|
|
2
|
+
import { _ as e, a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h, v as g, y as _ } from "./ui-provider-C_U0Xma4.js";
|
|
3
|
+
import { t as v } from "./theme-scope-BJ6eE2xt.js";
|
|
4
4
|
export { _ as DEFAULT_UI_CONFIG, m as DirectionProvider, v as ThemeScope, a as UIProvider, e as isComponentScale, g as resolveComponentScale, l as useBadgeConfig, f as useButtonConfig, o as useCardConfig, t as useCommentsConfig, u as useDatesConfig, p as useDensityConfig, n as useFormattingConfig, s as useItemConfig, h as useMoneyConfig, r as useOverlayConfig, i as useSpinnerConfig, d as useToastConfig, c as useTypographyConfig };
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { c as e, s as t, v as n } from "./ui-provider-
|
|
2
|
+
import { c as e, s as t, v as n } from "./ui-provider-C_U0Xma4.js";
|
|
3
3
|
import { useStrings as r } from "./lib/strings.js";
|
|
4
|
-
import { t as i } from "./utils-
|
|
5
|
-
import { n as a } from "./buttons-
|
|
6
|
-
import {
|
|
7
|
-
import { h as s, p as c, v as l } from "./smart-card-
|
|
8
|
-
import { a as u, i as d } from "./primitives-
|
|
9
|
-
import { n as f } from "./field-affordance-recipes-
|
|
10
|
-
import { o as p } from "./item-
|
|
4
|
+
import { t as i } from "./utils-BRhFDwuU.js";
|
|
5
|
+
import { n as a } from "./buttons-DPZekJFu.js";
|
|
6
|
+
import { c as o } from "./typography-UTnveOEy.js";
|
|
7
|
+
import { h as s, p as c, v as l } from "./smart-card-DiC5aac3.js";
|
|
8
|
+
import { a as u, i as d } from "./primitives-BFK08r9M.js";
|
|
9
|
+
import { n as f } from "./field-affordance-recipes-DZhnIL_Y.js";
|
|
10
|
+
import { o as p } from "./item-K5_ghvze.js";
|
|
11
11
|
import { n as ee, t as m } from "./upload.recipes-BbxTqrCT.js";
|
|
12
|
-
import { a as te, s as ne } from "./upload-queue-
|
|
13
|
-
import { a as h, c as g, i as _, n as v, o as y, r as b, t as x } from "./attachment-
|
|
12
|
+
import { a as te, s as ne } from "./upload-queue-Boscubn9.js";
|
|
13
|
+
import { a as h, c as g, i as _, n as v, o as y, r as b, t as x } from "./attachment-BxDfL2mw.js";
|
|
14
14
|
import * as S from "react";
|
|
15
15
|
import C, { forwardRef as w, useCallback as T, useEffect as E, useId as re, useLayoutEffect as ie, useMemo as D, useRef as O, useState as k } from "react";
|
|
16
16
|
import { jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
@@ -288,6 +288,7 @@ function B(d, f) {
|
|
|
288
288
|
buttonStyle: "outline",
|
|
289
289
|
size: U,
|
|
290
290
|
disabled: g,
|
|
291
|
+
className: "disabled:opacity-100 aria-disabled:opacity-100",
|
|
291
292
|
onClick: Te,
|
|
292
293
|
children: B.browse
|
|
293
294
|
})
|
|
@@ -816,7 +817,7 @@ function $({ value: e, onValueChange: a, initialPreviewUrl: s, accept: c = ".png
|
|
|
816
817
|
onClick: (e) => {
|
|
817
818
|
e.stopPropagation(), L();
|
|
818
819
|
},
|
|
819
|
-
className: i(f.target, f.focus, "absolute end-0.5 top-0.5 z-10 bg-card text-foreground shadow-sm ring-1 ring-border", "opacity-100 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100", x.remove),
|
|
820
|
+
className: i(f.target, f.focus, "absolute end-0.5 top-0.5 z-10 bg-card text-card-foreground shadow-sm ring-1 ring-border", "opacity-100 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100", x.remove),
|
|
820
821
|
children: /* @__PURE__ */ A(se, { className: f.icon })
|
|
821
822
|
}),
|
|
822
823
|
!l && !I && R && /* @__PURE__ */ A(o, {
|
|
@@ -850,4 +851,4 @@ xe.displayName = "AvatarUpload";
|
|
|
850
851
|
//#endregion
|
|
851
852
|
export { V as a, X as i, ye as n, F as o, Z as r, xe as t };
|
|
852
853
|
|
|
853
|
-
//# sourceMappingURL=upload-
|
|
854
|
+
//# sourceMappingURL=upload-CXyxmQBP.js.map
|