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,4 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as e, t } from "../metadata-list-
|
|
3
|
-
import { a as n, c as r, d as i, f as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../data-display-
|
|
2
|
+
import { n as e, t } from "../metadata-list-8N16ZMW_.js";
|
|
3
|
+
import { a as n, c as r, d as i, f as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../data-display-DT_khPl_.js";
|
|
4
4
|
export { a as DenseInfoClassification, o as DenseInfoDashboard, i as DenseInfoFinancial, g as DenseInfoProjectCard, c as DenseInfoScoreCard, d as DocumentStackIllustration, m as EmptyState, n as InboxCleanIllustration, l as InlineStat, t as MetadataList, e as MetadataValue, h as RelationshipCardFrame, s as SearchGlassIllustration, p as StackedCardsIllustration, u as UsersCircleIllustration, f as defaultDenseInfoStrings, r as defaultEmptyStateStrings };
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { t } from "../utils-
|
|
4
|
-
import {
|
|
5
|
-
import { t as r } from "../structure-
|
|
6
|
-
import {
|
|
7
|
-
import { a, c as o, i as s, l as c, o as l, r as u, s as d, u as f } from "../accordion-
|
|
8
|
-
import { t as p } from "../
|
|
3
|
+
import { t } from "../utils-BRhFDwuU.js";
|
|
4
|
+
import { c as n } from "../typography-UTnveOEy.js";
|
|
5
|
+
import { t as r } from "../structure-BmisBK-3.js";
|
|
6
|
+
import { t as i } from "../tone-recipes-BPsRAvhu.js";
|
|
7
|
+
import { a, c as o, i as s, l as c, o as l, r as u, s as d, u as f } from "../accordion-Cjb6sx0G.js";
|
|
8
|
+
import { t as p } from "../icon-badge-DYKIwvOV.js";
|
|
9
9
|
import { forwardRef as m, useCallback as h, useEffect as g, useMemo as _, useRef as v, useState as y } from "react";
|
|
10
10
|
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
11
|
-
import {
|
|
11
|
+
import { Check as S, CircleDashed as C } from "lucide-react";
|
|
12
12
|
//#region src/components/blocks/onboarding/checklist/checklist.strings.ts
|
|
13
|
-
var
|
|
13
|
+
var w = {
|
|
14
14
|
regionAriaLabel: void 0,
|
|
15
15
|
statusCompletedAria: "Completed",
|
|
16
16
|
statusInProgressAria: "In progress",
|
|
@@ -18,44 +18,51 @@ var C = {
|
|
|
18
18
|
};
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/components/blocks/onboarding/checklist/partials/step-status-indicator.tsx
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
function T({ status: e, ariaLabel: n, className: r }) {
|
|
22
|
+
let a = t("step-status-indicator--component", r);
|
|
23
|
+
return e === "completed" ? /* @__PURE__ */ b(p, {
|
|
24
|
+
icon: S,
|
|
25
|
+
tone: "success",
|
|
26
|
+
size: "md",
|
|
24
27
|
"aria-label": n,
|
|
25
|
-
className:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
className: a
|
|
29
|
+
}) : e === "in-progress" ? /* @__PURE__ */ b(p, {
|
|
30
|
+
tone: "warning",
|
|
31
|
+
size: "md",
|
|
29
32
|
"aria-label": n,
|
|
30
|
-
className:
|
|
31
|
-
children: /* @__PURE__ */ b("span", {
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
className: a,
|
|
34
|
+
children: /* @__PURE__ */ b("span", {
|
|
35
|
+
"aria-hidden": "true",
|
|
36
|
+
className: t(i.marker, "bg-warning")
|
|
37
|
+
})
|
|
38
|
+
}) : /* @__PURE__ */ b(p, {
|
|
39
|
+
icon: C,
|
|
40
|
+
tone: "neutral",
|
|
41
|
+
size: "md",
|
|
34
42
|
"aria-label": n,
|
|
35
|
-
className:
|
|
36
|
-
children: /* @__PURE__ */ b(p, { className: "size-icon opacity-60" })
|
|
43
|
+
className: a
|
|
37
44
|
});
|
|
38
45
|
}
|
|
39
|
-
|
|
46
|
+
T.displayName = "StepStatusIndicator";
|
|
40
47
|
//#endregion
|
|
41
48
|
//#region src/components/blocks/onboarding/checklist/checklist.tsx
|
|
42
|
-
var
|
|
43
|
-
completed: "
|
|
44
|
-
"in-progress": "
|
|
45
|
-
pending: "
|
|
49
|
+
var E = {
|
|
50
|
+
completed: "inherit",
|
|
51
|
+
"in-progress": "inherit",
|
|
52
|
+
pending: "secondary"
|
|
46
53
|
};
|
|
47
|
-
function
|
|
54
|
+
function D(e, t) {
|
|
48
55
|
return e === "completed" ? t.statusCompletedAria : e === "in-progress" ? t.statusInProgressAria : t.statusPendingAria;
|
|
49
56
|
}
|
|
50
|
-
function
|
|
57
|
+
function O(e) {
|
|
51
58
|
let t = e.find((e) => e.status !== "completed" && !e.disabled);
|
|
52
59
|
return t ? [t.id] : [];
|
|
53
60
|
}
|
|
54
|
-
var
|
|
55
|
-
let F = e(
|
|
61
|
+
var k = m(function({ steps: i, defaultExpanded: p, multiple: m = !1, expanded: S, onExpandedChange: C, onStepOpen: k, variant: A = "bordered", className: j, stepClassName: M, strings: N }, P) {
|
|
62
|
+
let F = e(w, N), I = S !== void 0, L = _(() => p ?? O(i), []), [R, z] = y(L), B = v(!1), V = I ? S : R, H = v(new Set(L));
|
|
56
63
|
g(() => {
|
|
57
64
|
if (I || B.current || p !== void 0 || i.length === 0 || R.length > 0) return;
|
|
58
|
-
let e =
|
|
65
|
+
let e = O(i);
|
|
59
66
|
e.length > 0 && z(e);
|
|
60
67
|
}, [
|
|
61
68
|
i,
|
|
@@ -65,8 +72,8 @@ var O = m(function({ steps: i, defaultExpanded: p, multiple: m = !1, expanded: S
|
|
|
65
72
|
]);
|
|
66
73
|
let U = h((e) => {
|
|
67
74
|
let t = e ?? [];
|
|
68
|
-
B.current = !0, I || z(t),
|
|
69
|
-
}, [I,
|
|
75
|
+
B.current = !0, I || z(t), C?.(t);
|
|
76
|
+
}, [I, C]);
|
|
70
77
|
return g(() => {
|
|
71
78
|
if (!k) {
|
|
72
79
|
H.current = new Set(V);
|
|
@@ -92,16 +99,18 @@ var O = m(function({ steps: i, defaultExpanded: p, multiple: m = !1, expanded: S
|
|
|
92
99
|
direction: "horizontal",
|
|
93
100
|
align: "center",
|
|
94
101
|
gap: "lg",
|
|
102
|
+
wrap: !1,
|
|
95
103
|
className: "w-full min-w-0",
|
|
96
104
|
children: [
|
|
97
|
-
/* @__PURE__ */ b(
|
|
105
|
+
/* @__PURE__ */ b(T, {
|
|
98
106
|
status: e.status,
|
|
99
|
-
ariaLabel:
|
|
107
|
+
ariaLabel: D(e.status, F)
|
|
100
108
|
}),
|
|
101
109
|
/* @__PURE__ */ b(n, {
|
|
102
110
|
tag: "span",
|
|
111
|
+
className: "min-w-0",
|
|
103
112
|
weight: "semibold",
|
|
104
|
-
|
|
113
|
+
type: E[e.status],
|
|
105
114
|
children: e.title
|
|
106
115
|
}),
|
|
107
116
|
!!e.badge && /* @__PURE__ */ b("span", {
|
|
@@ -114,7 +123,7 @@ var O = m(function({ steps: i, defaultExpanded: p, multiple: m = !1, expanded: S
|
|
|
114
123
|
className: u.withMedallion,
|
|
115
124
|
children: /* @__PURE__ */ b(n, {
|
|
116
125
|
type: "secondary",
|
|
117
|
-
|
|
126
|
+
lineHeight: "relaxed",
|
|
118
127
|
tag: "div",
|
|
119
128
|
children: e.content
|
|
120
129
|
})
|
|
@@ -122,8 +131,8 @@ var O = m(function({ steps: i, defaultExpanded: p, multiple: m = !1, expanded: S
|
|
|
122
131
|
}, e.id))
|
|
123
132
|
});
|
|
124
133
|
});
|
|
125
|
-
|
|
134
|
+
k.displayName = "OnboardingChecklist";
|
|
126
135
|
//#endregion
|
|
127
|
-
export {
|
|
136
|
+
export { k as OnboardingChecklist, T as StepStatusIndicator, w as defaultOnboardingChecklistStrings };
|
|
128
137
|
|
|
129
138
|
//# sourceMappingURL=onboarding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","names":["Text","Stack","toneRecipes","AccordionContent","ACCORDION_ITEM_VARIANT_CLASS","AccordionItem","ACCORDION_TRIGGER_BASE","ACCORDION_CONTENT_PADDING","Accordion","AccordionTrigger","Spinner","defaultOnboardingChecklistStrings","StepStatusIndicator","status","ariaLabel","cn","className","CheckCircle2","TITLE_TONE_CLASS","pickStatusAria","strings","defaultExpandedFor","next","steps","s","OnboardingChecklist","forwardRef","expandedProp","stringsProp","useStrings","isControlled","computedDefault","useMemo","defaultExpanded","internalValue","setInternalValue","useState","userInteractedRef","useRef","expanded","previouslyExpanded","handleValueChange","useCallback","nextArr","onExpandedChange","useEffect","onStepOpen","prev","id","ACCORDION_ROOT_VARIANT_CLASS","variant","step","stepClassName"],"sources":["../../src/components/blocks/onboarding/checklist/checklist.strings.ts","../../src/components/blocks/onboarding/checklist/partials/step-status-indicator.tsx","../../src/components/blocks/onboarding/checklist/checklist.tsx"],"sourcesContent":["/**\n * Strings for `<OnboardingChecklist>`. Indicator labels are screen-reader\n * announcements for the status icons; consumers wire their i18n into them.\n *\n * The `regionAriaLabel` is intentionally optional — the consumer typically\n * already has a heading above the checklist that names it (\"Set up your\n * workspace\"), so adding an aria-label here would be redundant.\n */\nexport interface OnboardingChecklistStrings {\n\tregionAriaLabel?: string;\n\tstatusCompletedAria: string;\n\tstatusInProgressAria: string;\n\tstatusPendingAria: string;\n}\n\nexport const defaultOnboardingChecklistStrings: OnboardingChecklistStrings = {\n\tregionAriaLabel: undefined,\n\tstatusCompletedAria: 'Completed',\n\tstatusInProgressAria: 'In progress',\n\tstatusPendingAria: 'Pending',\n};\n","/**\n * StepStatusIndicator — the small leading icon that signals each step's\n * status in an OnboardingChecklist.\n *\n * - `completed` → filled success check\n * - `in-progress` → soft warning-tinted disc with a small pulsing dot\n * - `pending` → muted spinner ring\n *\n * Token-driven: success / warning / muted-foreground tokens only. No\n * raw palette colors so consumer rebrand flows through.\n */\nimport { CheckCircle2 } from 'lucide-react';\n\nimport { Spinner } from '../../../../base/spinner';\nimport { cn } from '../../../../../lib/utils';\n\nimport type { OnboardingStepStatus } from '../checklist.types';\nimport { toneRecipes } from '../../../../../lib/tone-recipes';\n\nexport interface StepStatusIndicatorProps {\n\tstatus: OnboardingStepStatus;\n\t/** Accessible name for the region. */\n\tariaLabel: string;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function StepStatusIndicator({\n\tstatus,\n\tariaLabel,\n\tclassName,\n}: StepStatusIndicatorProps) {\n\tif (status === 'completed') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full ring-1', toneRecipes.success.tint, toneRecipes.success.ink, toneRecipes.success.halo, className)}\n\t\t\t>\n\t\t\t\t<CheckCircle2 className=\"size-icon\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\tif (status === 'in-progress') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\trole=\"img\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'step-status-indicator--component',\n\t\t\t\t\t'flex size-8 items-center justify-center rounded-full ring-1',\n\t\t\t\t\ttoneRecipes.warning.tint,\n\t\t\t\t\ttoneRecipes.warning.halo,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"size-2 rounded-full bg-warning\" />\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\trole=\"img\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('step-status-indicator--component flex size-8 items-center justify-center rounded-full bg-muted text-muted-foreground ring-1 ring-border', className)}\n\t\t>\n\t\t\t<Spinner className=\"size-icon opacity-60\" />\n\t\t</span>\n\t);\n}\n\nStepStatusIndicator.displayName = 'StepStatusIndicator';\n","/**\n * OnboardingChecklist — the canonical step-list accordion for SaaS\n * onboarding flows. Each step has a status (completed / in-progress /\n * pending), a title, an optional badge, and an optional expanded body\n * for forms / actions / instructions.\n *\n * Composes `base/accordion`'s primitives directly (rule 2). Builds on\n * the shadcn accordion via the wrapped pass-through.\n *\n * Status indicators come from `partials/step-status-indicator.tsx` —\n * token-driven (success / warning / muted-foreground only).\n *\n * Strings — every accessibility label flows through the strings prop\n * (rule 8). Per-step copy lives in the data passed to `steps` (titles,\n * badges, descriptions are consumer-controlled).\n */\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n\tAccordion,\n\tAccordionContent,\n\tAccordionItem,\n\tAccordionTrigger,\n} from '../../../base/accordion';\nimport {\n\tACCORDION_CONTENT_PADDING,\n\tACCORDION_ITEM_VARIANT_CLASS,\n\tACCORDION_ROOT_VARIANT_CLASS,\n\tACCORDION_TRIGGER_BASE,\n} from '../../../base/accordion/accordion-variants';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultOnboardingChecklistStrings,\n\ttype OnboardingChecklistStrings,\n} from './checklist.strings';\nimport type {\n\tOnboardingChecklistProps,\n\tOnboardingStepStatus,\n} from './checklist.types';\nimport { StepStatusIndicator } from './partials/step-status-indicator';\n\nconst TITLE_TONE_CLASS: Record<OnboardingStepStatus, string> = {\n\tcompleted: 'text-foreground',\n\t'in-progress': 'text-foreground',\n\tpending: 'text-muted-foreground',\n};\n\nfunction pickStatusAria(\n\tstatus: OnboardingStepStatus,\n\tstrings: OnboardingChecklistStrings,\n): string {\n\tif (status === 'completed') return strings.statusCompletedAria;\n\tif (status === 'in-progress') return strings.statusInProgressAria;\n\treturn strings.statusPendingAria;\n}\n\nfunction defaultExpandedFor(steps: OnboardingChecklistProps['steps']): string[] {\n\tconst next = steps.find((s) => s.status !== 'completed' && !s.disabled);\n\treturn next ? [next.id] : [];\n}\n\nexport const OnboardingChecklist = forwardRef<HTMLDivElement, OnboardingChecklistProps>(function OnboardingChecklist({\n\tsteps,\n\tdefaultExpanded,\n\tmultiple = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tonStepOpen,\n\tvariant = 'bordered',\n\tclassName,\n\tstepClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultOnboardingChecklistStrings, stringsProp);\n\tconst isControlled = expandedProp !== undefined;\n\tconst computedDefault = useMemo(\n\t\t() => defaultExpanded ?? defaultExpandedFor(steps),\n\t\t// First-mount default. Re-resolution when `steps` arrives async is\n\t\t// handled by the effect below — that effect picks the next pending\n\t\t// step and opens it, but only if the user hasn't already toggled\n\t\t// anything.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n\tconst [internalValue, setInternalValue] = useState<string[]>(computedDefault);\n\tconst userInteractedRef = useRef(false);\n\tconst expanded = isControlled ? expandedProp : internalValue;\n\tconst previouslyExpanded = useRef<Set<string>>(new Set(computedDefault));\n\n\t// When `steps` is loaded asynchronously (consumer passes [] then\n\t// populates), promote the next-pending step the first time real\n\t// steps arrive — but never overwrite an explicit user toggle.\n\tuseEffect(() => {\n\t\tif (isControlled || userInteractedRef.current) return;\n\t\tif (defaultExpanded !== undefined) return;\n\t\tif (steps.length === 0) return;\n\t\tif (internalValue.length > 0) return;\n\t\tconst next = defaultExpandedFor(steps);\n\t\tif (next.length > 0) setInternalValue(next);\n\t}, [steps, isControlled, defaultExpanded, internalValue.length]);\n\n\tconst handleValueChange = useCallback(\n\t\t(next: unknown) => {\n\t\t\tconst nextArr = (next as string[]) ?? [];\n\t\t\tuserInteractedRef.current = true;\n\t\t\tif (!isControlled) setInternalValue(nextArr);\n\t\t\tonExpandedChange?.(nextArr);\n\t\t},\n\t\t[isControlled, onExpandedChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!onStepOpen) {\n\t\t\tpreviouslyExpanded.current = new Set(expanded);\n\t\t\treturn;\n\t\t}\n\t\tconst prev = previouslyExpanded.current;\n\t\tfor (const id of expanded) {\n\t\t\tif (!prev.has(id)) onStepOpen(id);\n\t\t}\n\t\tpreviouslyExpanded.current = new Set(expanded);\n\t}, [expanded, onStepOpen]);\n\n\treturn (\n\t\t<Accordion\n\t\t\tref={ref}\n\t\t\tmultiple={multiple}\n\t\t\tvalue={expanded}\n\t\t\tonValueChange={handleValueChange}\n\t\t\taria-label={strings.regionAriaLabel}\n\t\t\tclassName={cn('checklist--component', ACCORDION_ROOT_VARIANT_CLASS[variant], className)}\n\t\t>\n\t\t\t{steps.map((step) => (\n\t\t\t\t<AccordionItem\n\t\t\t\t\tkey={step.id}\n\t\t\t\t\tvalue={step.id}\n\t\t\t\t\tclassName={cn(ACCORDION_ITEM_VARIANT_CLASS[variant], stepClassName)}\n\t\t\t\t>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\tdisabled={step.disabled}\n\t\t\t\t\t\tclassName={cn(ACCORDION_TRIGGER_BASE, 'min-h-16 items-center')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\" className=\"w-full min-w-0\">\n\t\t\t\t\t\t\t<StepStatusIndicator\n\t\t\t\t\t\t\t\tstatus={step.status}\n\t\t\t\t\t\t\t\tariaLabel={pickStatusAria(step.status, strings)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\tclassName={cn(TITLE_TONE_CLASS[step.status])}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!step.badge && (\n\t\t\t\t\t\t\t\t<span className=\"ml-auto inline-flex shrink-0\">{step.badge}</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t{!!step.content && (\n\t\t\t\t\t\t<AccordionContent className={ACCORDION_CONTENT_PADDING.withMedallion}>\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"leading-relaxed\" tag=\"div\">\n\t\t\t\t\t\t\t\t{step.content}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</AccordionContent>\n\t\t\t\t\t)}\n\t\t\t\t</AccordionItem>\n\t\t\t))}\n\t\t</Accordion>\n\t);\n});\n\nOnboardingChecklist.displayName = 'OnboardingChecklist';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboarding.js","names":["Text","Stack","dotRecipes","AccordionContent","ACCORDION_ITEM_VARIANT_CLASS","AccordionItem","ACCORDION_TRIGGER_BASE","ACCORDION_CONTENT_PADDING","Accordion","AccordionTrigger","IconBadge","defaultOnboardingChecklistStrings","StepStatusIndicator","rootClassName","cn","className","status","Check","ariaLabel","CircleDashed","TITLE_TYPE","pickStatusAria","strings","defaultExpandedFor","next","steps","s","OnboardingChecklist","forwardRef","expandedProp","stringsProp","useStrings","isControlled","computedDefault","useMemo","defaultExpanded","internalValue","setInternalValue","useState","userInteractedRef","useRef","expanded","previouslyExpanded","handleValueChange","useCallback","nextArr","onExpandedChange","useEffect","onStepOpen","prev","id","ACCORDION_ROOT_VARIANT_CLASS","variant","step","stepClassName"],"sources":["../../src/components/blocks/onboarding/checklist/checklist.strings.ts","../../src/components/blocks/onboarding/checklist/partials/step-status-indicator.tsx","../../src/components/blocks/onboarding/checklist/checklist.tsx"],"sourcesContent":["/**\n * Strings for `<OnboardingChecklist>`. Indicator labels are screen-reader\n * announcements for the status icons; consumers wire their i18n into them.\n *\n * The `regionAriaLabel` is intentionally optional — the consumer typically\n * already has a heading above the checklist that names it (\"Set up your\n * workspace\"), so adding an aria-label here would be redundant.\n */\nexport interface OnboardingChecklistStrings {\n\tregionAriaLabel?: string;\n\tstatusCompletedAria: string;\n\tstatusInProgressAria: string;\n\tstatusPendingAria: string;\n}\n\nexport const defaultOnboardingChecklistStrings: OnboardingChecklistStrings = {\n\tregionAriaLabel: undefined,\n\tstatusCompletedAria: 'Completed',\n\tstatusInProgressAria: 'In progress',\n\tstatusPendingAria: 'Pending',\n};\n","/**\n * StepStatusIndicator — the small leading icon that signals each step's\n * status in an OnboardingChecklist.\n *\n * - `completed` → success-tinted disc with a check\n * - `in-progress` → warning-tinted disc with a small dot\n * - `pending` → muted disc with a dashed ring\n *\n * Drawn on the shared `IconBadge` medallion at its default (`md`) size, the\n * geometry the accordion's `withMedallion` content inset aligns under. The\n * badge takes image semantics from the status label.\n */\nimport { Check, CircleDashed } from 'lucide-react';\n\nimport { IconBadge } from '../../../../base/display/icon-badge';\nimport { cn } from '../../../../../lib/utils';\n\nimport type { OnboardingStepStatus } from '../checklist.types';\nimport { dotRecipes } from '../../../../../lib/tone-recipes';\n\nexport interface StepStatusIndicatorProps {\n\tstatus: OnboardingStepStatus;\n\t/** Accessible name for the region. */\n\tariaLabel: string;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nexport function StepStatusIndicator({\n\tstatus,\n\tariaLabel,\n\tclassName,\n}: StepStatusIndicatorProps) {\n\tconst rootClassName = cn('step-status-indicator--component', className);\n\n\tif (status === 'completed') {\n\t\treturn <IconBadge icon={Check} tone=\"success\" size=\"md\" aria-label={ariaLabel} className={rootClassName} />;\n\t}\n\n\tif (status === 'in-progress') {\n\t\treturn (\n\t\t\t<IconBadge tone=\"warning\" size=\"md\" aria-label={ariaLabel} className={rootClassName}>\n\t\t\t\t<span aria-hidden=\"true\" className={cn(dotRecipes.marker, 'bg-warning')} />\n\t\t\t</IconBadge>\n\t\t);\n\t}\n\n\treturn <IconBadge icon={CircleDashed} tone=\"neutral\" size=\"md\" aria-label={ariaLabel} className={rootClassName} />;\n}\n\nStepStatusIndicator.displayName = 'StepStatusIndicator';\n","/**\n * OnboardingChecklist — the canonical step-list accordion for SaaS\n * onboarding flows. Each step has a status (completed / in-progress /\n * pending), a title, an optional badge, and an optional expanded body\n * for forms / actions / instructions.\n *\n * Composes `base/accordion`'s primitives directly (rule 2). Builds on\n * the shadcn accordion via the wrapped pass-through.\n *\n * Status indicators come from `partials/step-status-indicator.tsx` —\n * token-driven (success / warning / muted-foreground only).\n *\n * Strings — every accessibility label flows through the strings prop\n * (rule 8). Per-step copy lives in the data passed to `steps` (titles,\n * badges, descriptions are consumer-controlled).\n */\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n\tAccordion,\n\tAccordionContent,\n\tAccordionItem,\n\tAccordionTrigger,\n} from '../../../base/accordion';\nimport {\n\tACCORDION_CONTENT_PADDING,\n\tACCORDION_ITEM_VARIANT_CLASS,\n\tACCORDION_ROOT_VARIANT_CLASS,\n\tACCORDION_TRIGGER_BASE,\n} from '../../../base/accordion/accordion-variants';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultOnboardingChecklistStrings,\n\ttype OnboardingChecklistStrings,\n} from './checklist.strings';\nimport type {\n\tOnboardingChecklistProps,\n\tOnboardingStepStatus,\n} from './checklist.types';\nimport { StepStatusIndicator } from './partials/step-status-indicator';\n\nconst TITLE_TYPE: Record<OnboardingStepStatus, 'inherit' | 'secondary'> = {\n\tcompleted: 'inherit',\n\t'in-progress': 'inherit',\n\tpending: 'secondary',\n};\n\nfunction pickStatusAria(\n\tstatus: OnboardingStepStatus,\n\tstrings: OnboardingChecklistStrings,\n): string {\n\tif (status === 'completed') return strings.statusCompletedAria;\n\tif (status === 'in-progress') return strings.statusInProgressAria;\n\treturn strings.statusPendingAria;\n}\n\nfunction defaultExpandedFor(steps: OnboardingChecklistProps['steps']): string[] {\n\tconst next = steps.find((s) => s.status !== 'completed' && !s.disabled);\n\treturn next ? [next.id] : [];\n}\n\nexport const OnboardingChecklist = forwardRef<HTMLDivElement, OnboardingChecklistProps>(function OnboardingChecklist({\n\tsteps,\n\tdefaultExpanded,\n\tmultiple = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tonStepOpen,\n\tvariant = 'bordered',\n\tclassName,\n\tstepClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultOnboardingChecklistStrings, stringsProp);\n\tconst isControlled = expandedProp !== undefined;\n\tconst computedDefault = useMemo(\n\t\t() => defaultExpanded ?? defaultExpandedFor(steps),\n\t\t// First-mount default. Re-resolution when `steps` arrives async is\n\t\t// handled by the effect below — that effect picks the next pending\n\t\t// step and opens it, but only if the user hasn't already toggled\n\t\t// anything.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n\tconst [internalValue, setInternalValue] = useState<string[]>(computedDefault);\n\tconst userInteractedRef = useRef(false);\n\tconst expanded = isControlled ? expandedProp : internalValue;\n\tconst previouslyExpanded = useRef<Set<string>>(new Set(computedDefault));\n\n\t// When `steps` is loaded asynchronously (consumer passes [] then\n\t// populates), promote the next-pending step the first time real\n\t// steps arrive — but never overwrite an explicit user toggle.\n\tuseEffect(() => {\n\t\tif (isControlled || userInteractedRef.current) return;\n\t\tif (defaultExpanded !== undefined) return;\n\t\tif (steps.length === 0) return;\n\t\tif (internalValue.length > 0) return;\n\t\tconst next = defaultExpandedFor(steps);\n\t\tif (next.length > 0) setInternalValue(next);\n\t}, [steps, isControlled, defaultExpanded, internalValue.length]);\n\n\tconst handleValueChange = useCallback(\n\t\t(next: unknown) => {\n\t\t\tconst nextArr = (next as string[]) ?? [];\n\t\t\tuserInteractedRef.current = true;\n\t\t\tif (!isControlled) setInternalValue(nextArr);\n\t\t\tonExpandedChange?.(nextArr);\n\t\t},\n\t\t[isControlled, onExpandedChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (!onStepOpen) {\n\t\t\tpreviouslyExpanded.current = new Set(expanded);\n\t\t\treturn;\n\t\t}\n\t\tconst prev = previouslyExpanded.current;\n\t\tfor (const id of expanded) {\n\t\t\tif (!prev.has(id)) onStepOpen(id);\n\t\t}\n\t\tpreviouslyExpanded.current = new Set(expanded);\n\t}, [expanded, onStepOpen]);\n\n\treturn (\n\t\t<Accordion\n\t\t\tref={ref}\n\t\t\tmultiple={multiple}\n\t\t\tvalue={expanded}\n\t\t\tonValueChange={handleValueChange}\n\t\t\taria-label={strings.regionAriaLabel}\n\t\t\tclassName={cn('checklist--component', ACCORDION_ROOT_VARIANT_CLASS[variant], className)}\n\t\t>\n\t\t\t{steps.map((step) => (\n\t\t\t\t<AccordionItem\n\t\t\t\t\tkey={step.id}\n\t\t\t\t\tvalue={step.id}\n\t\t\t\t\tclassName={cn(ACCORDION_ITEM_VARIANT_CLASS[variant], stepClassName)}\n\t\t\t\t>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\tdisabled={step.disabled}\n\t\t\t\t\t\tclassName={cn(ACCORDION_TRIGGER_BASE, 'min-h-16 items-center')}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\" wrap={false} className=\"w-full min-w-0\">\n\t\t\t\t\t\t\t<StepStatusIndicator\n\t\t\t\t\t\t\t\tstatus={step.status}\n\t\t\t\t\t\t\t\tariaLabel={pickStatusAria(step.status, strings)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tclassName=\"min-w-0\"\n\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\ttype={TITLE_TYPE[step.status]}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!step.badge && (\n\t\t\t\t\t\t\t\t<span className=\"ml-auto inline-flex shrink-0\">{step.badge}</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t{!!step.content && (\n\t\t\t\t\t\t<AccordionContent className={ACCORDION_CONTENT_PADDING.withMedallion}>\n\t\t\t\t\t\t\t<Text type=\"secondary\" lineHeight=\"relaxed\" tag=\"div\">\n\t\t\t\t\t\t\t\t{step.content}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</AccordionContent>\n\t\t\t\t\t)}\n\t\t\t\t</AccordionItem>\n\t\t\t))}\n\t\t</Accordion>\n\t);\n});\n\nOnboardingChecklist.displayName = 'OnboardingChecklist';\n"],"mappings":"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"}
|
package/dist/blocks/planning.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { t } from "../utils-
|
|
4
|
-
import { n } from "../buttons-
|
|
5
|
-
import {
|
|
6
|
-
import { t as a } from "../structure-
|
|
7
|
-
import { t as o } from "../smart-card-
|
|
8
|
-
import { t as s } from "../progress-
|
|
9
|
-
import { t as c } from "../avatar-
|
|
10
|
-
import { t as l } from "../badge-
|
|
11
|
-
import { t as u } from "../checkbox-
|
|
12
|
-
import { n as d, r as f, t as p } from "../collapsible-
|
|
13
|
-
import { c as m, n as h, r as g, t as _ } from "../item-
|
|
3
|
+
import { t } from "../utils-BRhFDwuU.js";
|
|
4
|
+
import { n } from "../buttons-DPZekJFu.js";
|
|
5
|
+
import { a as r, c as i } from "../typography-UTnveOEy.js";
|
|
6
|
+
import { t as a } from "../structure-BmisBK-3.js";
|
|
7
|
+
import { t as o } from "../smart-card-DiC5aac3.js";
|
|
8
|
+
import { t as s } from "../progress-B1VnCT0K.js";
|
|
9
|
+
import { t as c } from "../avatar-DAPlDvhJ.js";
|
|
10
|
+
import { t as l } from "../badge-HpFqoqSY.js";
|
|
11
|
+
import { t as u } from "../checkbox-AWIhNhmo.js";
|
|
12
|
+
import { n as d, r as f, t as p } from "../collapsible-C-_l4hpy.js";
|
|
13
|
+
import { c as m, n as h, r as g, t as _ } from "../item-K5_ghvze.js";
|
|
14
14
|
import { forwardRef as v, useId as y, useState as b } from "react";
|
|
15
15
|
import { jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
16
16
|
import { ArrowUpRight as C, ChevronDown as w, CircleDashed as T, LoaderCircle as E } from "lucide-react";
|
|
@@ -120,10 +120,11 @@ function A({ item: e, disabled: n, onChange: a, savingLabel: o }) {
|
|
|
120
120
|
/* @__PURE__ */ S(g, { children: [
|
|
121
121
|
/* @__PURE__ */ x(r, {
|
|
122
122
|
htmlFor: l,
|
|
123
|
+
className: "text-inherit",
|
|
123
124
|
children: /* @__PURE__ */ x(i, {
|
|
124
125
|
id: s,
|
|
125
126
|
tag: "span",
|
|
126
|
-
type: e.completed ? "secondary" : "
|
|
127
|
+
type: e.completed ? "secondary" : "inherit",
|
|
127
128
|
className: t("task-card--item-title min-w-0 break-words", e.completed && "line-through"),
|
|
128
129
|
children: e.title
|
|
129
130
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning.js","names":["Label","Text","Stack","Card","Progress","StackedAvatars","Badge","Checkbox","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemContent","Item","defaultTaskCardStrings","completed","total","name","headerControlSelector","CompletionIndicator","maskId","useId","CircleDashed","label","valueText","cn","SubtaskRow","titleId","checkboxId","errorId","item","disabled","onChange","checked","savingLabel","LoaderCircle","TaskCard","forwardRef","expandedProp","stringsProp","props","strings","useStrings","internalExpanded","setInternalExpanded","useState","defaultExpanded","expanded","items","completion","completionCount","hasFooter","assignedTo","href","onOpen","hasMetadata","dueDate","assignees","requestExpanded","next","onExpandedChange","handleClick","onClick","event","header","control","className","status","Button","ChevronDown","ArrowUpRight","onItemCompletedChange"],"sources":["../../src/components/blocks/planning/task-card.strings.ts","../../src/components/blocks/planning/task-card.tsx"],"sourcesContent":["export interface TaskCardStrings {\n\texpand: string;\n\tcollapse: string;\n\tsubtasks: string;\n\tcompletion: string;\n\tdue: string;\n\topen: string;\n\tempty: string;\n\tsaving: string;\n\t/** Compact visible count; the full completion formatter remains the accessible value. */\n\tformatCompletionCount: (completed: number, total: number) => string;\n\tformatCompletion: (completed: number, total: number) => string;\n\tformatAssignedTo: (name: string) => string;\n}\n\nexport const defaultTaskCardStrings: TaskCardStrings = {\n\texpand: 'Expand subtasks',\n\tcollapse: 'Collapse subtasks',\n\tsubtasks: 'Subtasks',\n\tcompletion: 'Subtask completion',\n\tdue: 'Due',\n\topen: 'Open',\n\tempty: 'No subtasks yet.',\n\tsaving: 'Saving…',\n\tformatCompletionCount: (completed, total) => `${completed}/${total}`,\n\tformatCompletion: (completed, total) => `${completed} of ${total} completed`,\n\tformatAssignedTo: (name) => `Assigned to ${name}`,\n};\n","import { ArrowUpRight, ChevronDown, CircleDashed, LoaderCircle } from 'lucide-react';\nimport { forwardRef, useId, useState, type MouseEvent } from 'react';\n\nimport { StackedAvatars } from '../../base/avatar';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { Checkbox } from '../../base/choice-inputs/checkbox';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../base/display/collapsible';\nimport { Progress } from '../../base/feedback/progress';\nimport { Item, ItemActions, ItemContent, ItemMedia } from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultTaskCardStrings } from './task-card.strings';\nimport type { TaskCardItem, TaskCardProps } from './task-card.types';\n\nconst headerControlSelector = [\n\t'button, a[href], input, select, textarea, summary, label, [tabindex]',\n\t'[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]',\n\t'[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]',\n\t'[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]',\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n].join(', ');\n\n/** Private drawing geometry; Progress retains the shared value and accessibility contract. */\nfunction CompletionIndicator({ completed, total, label, valueText }: { completed: number; total: number; label: string; valueText: string }) {\n\tconst maskId = `task-completion-${useId()}`;\n\tif (total === 0) return <CircleDashed aria-hidden=\"true\" className=\"text-muted-foreground\" />;\n\treturn (\n\t\t<Progress\n\t\t\tvalue={completed}\n\t\t\tmax={total}\n\t\t\taria-label={label}\n\t\t\tgetAriaValueText={() => valueText}\n\t\t\theaderSlot={null}\n\t\t\tclassName=\"task-card--completion block shrink-0\"\n\t\t\ttrackSlot={(\n\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" className=\"-rotate-90\">\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" style={{ maskType: 'alpha' }}>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"100\" strokeDashoffset={100 - completed / total * 100}\n\t\t\t\t\t\t\t\tclassName=\"task-card--completion-reveal transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none\" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" className=\"stroke-muted\" />\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" mask={`url(#${maskId})`}\n\t\t\t\t\t\tclassName={cn('transition-[stroke] duration-300 ease-out motion-reduce:transition-none', completed === total ? 'stroke-success' : 'stroke-primary')} />\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction SubtaskRow({ item, disabled, onChange, savingLabel }: { item: TaskCardItem; disabled: boolean; onChange?: TaskCardProps['onItemCompletedChange']; savingLabel: string }) {\n\tconst titleId = useId();\n\tconst checkboxId = useId();\n\tconst errorId = useId();\n\treturn (\n\t\t<Item role=\"listitem\" density=\"compact\" className=\"task-card--item gap-space-md py-space-xs\" data-completed={item.completed || undefined}>\n\t\t\t<ItemMedia>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={checkboxId}\n\t\t\t\t\tchecked={item.completed}\n\t\t\t\t\tdisabled={disabled || item.disabled || item.busy || !onChange}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={item.error ? errorId : undefined}\n\t\t\t\t\taria-invalid={item.error ? true : undefined}\n\t\t\t\t\taria-busy={item.busy || undefined}\n\t\t\t\t\tonCheckedChange={(checked) => onChange?.(item.id, checked === true)}\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<Label htmlFor={checkboxId}>\n\t\t\t\t\t<Text id={titleId} tag=\"span\" type={item.completed ? 'secondary' : 'main'} className={cn('task-card--item-title min-w-0 break-words', item.completed && 'line-through')}>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</Text>\n\t\t\t\t</Label>\n\t\t\t\t{item.error && <Text id={errorId} role=\"alert\" size=\"xs\" type=\"error\">{item.error}</Text>}\n\t\t\t\t{item.busy && <Text role=\"status\" size=\"xs\" type=\"secondary\">{savingLabel}</Text>}\n\t\t\t</ItemContent>\n\t\t\t{(item.assignee || item.busy) && <ItemActions>\n\t\t\t\t{item.busy && <LoaderCircle aria-hidden=\"true\" className=\"size-icon animate-spin motion-reduce:animate-none text-muted-foreground\" />}\n\t\t\t\t{item.assignee && <StackedAvatars users={[item.assignee]} size=\"sm\" />}\n\t\t\t</ItemActions>}\n\t\t</Item>\n\t);\n}\n\n/** Compact task summary with explicit keyboard disclosure and controlled subtasks. */\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(function TaskCard({\n\ttitle,\n\titems,\n\tstatus,\n\tdueDate,\n\tassignees,\n\tassignedTo,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tonItemCompletedChange,\n\tonOpen,\n\thref,\n\tdisabled = false,\n\tsurface,\n\tstrings: stringsProp,\n\tclassName,\n\tonClick,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultTaskCardStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst completed = items.filter((item) => item.completed).length;\n\tconst completion = strings.formatCompletion(completed, items.length);\n\tconst completionCount = strings.formatCompletionCount(completed, items.length);\n\tconst hasFooter = assignedTo || href !== undefined || onOpen;\n\tconst hasMetadata = Boolean(dueDate || assignees?.length);\n\tfunction requestExpanded(next: boolean) {\n\t\tif (disabled) return;\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}\n\tfunction handleClick(event: MouseEvent<HTMLDivElement>) {\n\t\tonClick?.(event);\n\t\tif (disabled || event.defaultPrevented || !(event.target instanceof Element)) return;\n\t\tconst header = event.target.closest('.card--header');\n\t\tif (!header || header.closest('.card--component') !== event.currentTarget) return;\n\t\t// The native disclosure button and any nested controls own their clicks.\n\t\tconst control = event.target.closest(headerControlSelector);\n\t\tif (control && header.contains(control)) return;\n\t\trequestExpanded(!expanded);\n\t\tevent.currentTarget.querySelector<HTMLButtonElement>('.collapsible-trigger--component')?.focus({ preventScroll: true });\n\t}\n\n\treturn (\n\t\t<Collapsible\n\t\t\tref={ref}\n\t\t\topen={expanded}\n\t\t\tdisabled={disabled}\n\t\t\tonOpenChange={requestExpanded}\n\t\t\trender={(\n\t\t\t\t<Card\n\t\t\t\t\t{...props}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={hasMetadata ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"sm\" className=\"task-card--metadata\">\n\t\t\t\t\t\t\t{/* \"Due\" already labels the date; no calendar glyph. */}\n\t\t\t\t\t\t\t{dueDate && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.due} <time dateTime={dueDate.dateTime}>{dueDate.label}</time></Text>}\n\t\t\t\t\t\t\t{Boolean(assignees?.length) && <StackedAvatars users={assignees!} size=\"sm\" />}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t\tsurface={surface}\n\t\t\t\t\ttextGap=\"dense\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\theaderClassName={cn('flex-row flex-nowrap items-center', !disabled && 'cursor-pointer')}\n\t\t\t\t\tdata-expanded={expanded}\n\t\t\t\t\tclassName={cn('task-card--component min-w-0', className)}\n\t\t\t\t\ticon={<CompletionIndicator completed={completed} total={items.length} label={strings.completion} valueText={completion} />}\n\t\t\t\t\ttitleSuffix={(\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t\t{status && <Badge tone={status.tone ?? 'neutral'} size=\"sm\">{status.label}</Badge>}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" type=\"secondary\" className=\"task-card--count tabular-nums\" aria-label={completion}>{completionCount}</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\theaderAction={(\n\t\t\t\t\t\t<CollapsibleTrigger render={<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" size=\"sm\" iconOnly />} aria-label={expanded ? strings.collapse : strings.expand}>\n\t\t\t\t\t\t\t<ChevronDown aria-hidden=\"true\" className={cn('size-icon', expanded && 'rotate-180')} />\n\t\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t)}\n\t\t\t\t\tfooterSlot={expanded && hasFooter ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t\t{assignedTo && <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<StackedAvatars users={[assignedTo]} size=\"sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 break-words\">{strings.formatAssignedTo(assignedTo.name)}</Text>\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(href !== undefined || onOpen) && <Button type=\"button\" href={href} onClick={onOpen} disabled={disabled} tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\">\n\t\t\t\t\t\t\t\t{strings.open}<ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t>\n\t\t\t{expanded && <Stack gap=\"md\">\n\t\t\t\t<CollapsibleContent role=\"region\" aria-label={strings.subtasks}>\n\t\t\t\t\t{items.length > 0 ? <Stack role=\"list\" gap=\"none\" className=\"task-card--items\">\n\t\t\t\t\t\t{items.map((item) => <SubtaskRow key={item.id} item={item} disabled={disabled} onChange={onItemCompletedChange} savingLabel={strings.saving} />)}\n\t\t\t\t\t</Stack> : <Text type=\"secondary\">{strings.empty}</Text>}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>}\n\t\t</Collapsible>\n\t);\n});\n\nTaskCard.displayName = 'TaskCard';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"planning.js","names":["Label","Text","Stack","Card","Progress","StackedAvatars","Badge","Checkbox","CollapsibleContent","CollapsibleTrigger","Collapsible","ItemMedia","ItemActions","ItemContent","Item","defaultTaskCardStrings","completed","total","name","headerControlSelector","CompletionIndicator","maskId","useId","CircleDashed","label","valueText","cn","SubtaskRow","titleId","checkboxId","errorId","item","disabled","onChange","checked","savingLabel","LoaderCircle","TaskCard","forwardRef","expandedProp","stringsProp","props","strings","useStrings","internalExpanded","setInternalExpanded","useState","defaultExpanded","expanded","items","completion","completionCount","hasFooter","assignedTo","href","onOpen","hasMetadata","dueDate","assignees","requestExpanded","next","onExpandedChange","handleClick","onClick","event","header","control","className","status","Button","ChevronDown","ArrowUpRight","onItemCompletedChange"],"sources":["../../src/components/blocks/planning/task-card.strings.ts","../../src/components/blocks/planning/task-card.tsx"],"sourcesContent":["export interface TaskCardStrings {\n\texpand: string;\n\tcollapse: string;\n\tsubtasks: string;\n\tcompletion: string;\n\tdue: string;\n\topen: string;\n\tempty: string;\n\tsaving: string;\n\t/** Compact visible count; the full completion formatter remains the accessible value. */\n\tformatCompletionCount: (completed: number, total: number) => string;\n\tformatCompletion: (completed: number, total: number) => string;\n\tformatAssignedTo: (name: string) => string;\n}\n\nexport const defaultTaskCardStrings: TaskCardStrings = {\n\texpand: 'Expand subtasks',\n\tcollapse: 'Collapse subtasks',\n\tsubtasks: 'Subtasks',\n\tcompletion: 'Subtask completion',\n\tdue: 'Due',\n\topen: 'Open',\n\tempty: 'No subtasks yet.',\n\tsaving: 'Saving…',\n\tformatCompletionCount: (completed, total) => `${completed}/${total}`,\n\tformatCompletion: (completed, total) => `${completed} of ${total} completed`,\n\tformatAssignedTo: (name) => `Assigned to ${name}`,\n};\n","import { ArrowUpRight, ChevronDown, CircleDashed, LoaderCircle } from 'lucide-react';\nimport { forwardRef, useId, useState, type MouseEvent } from 'react';\n\nimport { StackedAvatars } from '../../base/avatar';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { Checkbox } from '../../base/choice-inputs/checkbox';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../base/display/collapsible';\nimport { Progress } from '../../base/feedback/progress';\nimport { Item, ItemActions, ItemContent, ItemMedia } from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultTaskCardStrings } from './task-card.strings';\nimport type { TaskCardItem, TaskCardProps } from './task-card.types';\n\nconst headerControlSelector = [\n\t'button, a[href], input, select, textarea, summary, label, [tabindex]',\n\t'[role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"]',\n\t'[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"tab\"]',\n\t'[role=\"combobox\"], [role=\"textbox\"], [role=\"slider\"], [role=\"spinbutton\"]',\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n].join(', ');\n\n/** Private drawing geometry; Progress retains the shared value and accessibility contract. */\nfunction CompletionIndicator({ completed, total, label, valueText }: { completed: number; total: number; label: string; valueText: string }) {\n\tconst maskId = `task-completion-${useId()}`;\n\tif (total === 0) return <CircleDashed aria-hidden=\"true\" className=\"text-muted-foreground\" />;\n\treturn (\n\t\t<Progress\n\t\t\tvalue={completed}\n\t\t\tmax={total}\n\t\t\taria-label={label}\n\t\t\tgetAriaValueText={() => valueText}\n\t\t\theaderSlot={null}\n\t\t\tclassName=\"task-card--completion block shrink-0\"\n\t\t\ttrackSlot={(\n\t\t\t\t<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" className=\"-rotate-90\">\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"24\" height=\"24\" style={{ maskType: 'alpha' }}>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\"\n\t\t\t\t\t\t\t\tstrokeDasharray=\"100\" strokeDashoffset={100 - completed / total * 100}\n\t\t\t\t\t\t\t\tclassName=\"task-card--completion-reveal transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none\" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" className=\"stroke-muted\" />\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\" fill=\"none\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeDasharray=\"5 7.5\" mask={`url(#${maskId})`}\n\t\t\t\t\t\tclassName={cn('transition-[stroke] duration-300 ease-out motion-reduce:transition-none', completed === total ? 'stroke-success' : 'stroke-primary')} />\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction SubtaskRow({ item, disabled, onChange, savingLabel }: { item: TaskCardItem; disabled: boolean; onChange?: TaskCardProps['onItemCompletedChange']; savingLabel: string }) {\n\tconst titleId = useId();\n\tconst checkboxId = useId();\n\tconst errorId = useId();\n\treturn (\n\t\t<Item role=\"listitem\" density=\"compact\" className=\"task-card--item gap-space-md py-space-xs\" data-completed={item.completed || undefined}>\n\t\t\t<ItemMedia>\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={checkboxId}\n\t\t\t\t\tchecked={item.completed}\n\t\t\t\t\tdisabled={disabled || item.disabled || item.busy || !onChange}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={item.error ? errorId : undefined}\n\t\t\t\t\taria-invalid={item.error ? true : undefined}\n\t\t\t\t\taria-busy={item.busy || undefined}\n\t\t\t\t\tonCheckedChange={(checked) => onChange?.(item.id, checked === true)}\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<Label htmlFor={checkboxId} className=\"text-inherit\">\n\t\t\t\t\t<Text id={titleId} tag=\"span\" type={item.completed ? 'secondary' : 'inherit'} className={cn('task-card--item-title min-w-0 break-words', item.completed && 'line-through')}>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</Text>\n\t\t\t\t</Label>\n\t\t\t\t{item.error && <Text id={errorId} role=\"alert\" size=\"xs\" type=\"error\">{item.error}</Text>}\n\t\t\t\t{item.busy && <Text role=\"status\" size=\"xs\" type=\"secondary\">{savingLabel}</Text>}\n\t\t\t</ItemContent>\n\t\t\t{(item.assignee || item.busy) && <ItemActions>\n\t\t\t\t{item.busy && <LoaderCircle aria-hidden=\"true\" className=\"size-icon animate-spin motion-reduce:animate-none text-muted-foreground\" />}\n\t\t\t\t{item.assignee && <StackedAvatars users={[item.assignee]} size=\"sm\" />}\n\t\t\t</ItemActions>}\n\t\t</Item>\n\t);\n}\n\n/** Compact task summary with explicit keyboard disclosure and controlled subtasks. */\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(function TaskCard({\n\ttitle,\n\titems,\n\tstatus,\n\tdueDate,\n\tassignees,\n\tassignedTo,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tonItemCompletedChange,\n\tonOpen,\n\thref,\n\tdisabled = false,\n\tsurface,\n\tstrings: stringsProp,\n\tclassName,\n\tonClick,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultTaskCardStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst completed = items.filter((item) => item.completed).length;\n\tconst completion = strings.formatCompletion(completed, items.length);\n\tconst completionCount = strings.formatCompletionCount(completed, items.length);\n\tconst hasFooter = assignedTo || href !== undefined || onOpen;\n\tconst hasMetadata = Boolean(dueDate || assignees?.length);\n\tfunction requestExpanded(next: boolean) {\n\t\tif (disabled) return;\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}\n\tfunction handleClick(event: MouseEvent<HTMLDivElement>) {\n\t\tonClick?.(event);\n\t\tif (disabled || event.defaultPrevented || !(event.target instanceof Element)) return;\n\t\tconst header = event.target.closest('.card--header');\n\t\tif (!header || header.closest('.card--component') !== event.currentTarget) return;\n\t\t// The native disclosure button and any nested controls own their clicks.\n\t\tconst control = event.target.closest(headerControlSelector);\n\t\tif (control && header.contains(control)) return;\n\t\trequestExpanded(!expanded);\n\t\tevent.currentTarget.querySelector<HTMLButtonElement>('.collapsible-trigger--component')?.focus({ preventScroll: true });\n\t}\n\n\treturn (\n\t\t<Collapsible\n\t\t\tref={ref}\n\t\t\topen={expanded}\n\t\t\tdisabled={disabled}\n\t\t\tonOpenChange={requestExpanded}\n\t\t\trender={(\n\t\t\t\t<Card\n\t\t\t\t\t{...props}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={hasMetadata ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"sm\" className=\"task-card--metadata\">\n\t\t\t\t\t\t\t{/* \"Due\" already labels the date; no calendar glyph. */}\n\t\t\t\t\t\t\t{dueDate && <Text tag=\"span\" size=\"xs\" type=\"secondary\">{strings.due} <time dateTime={dueDate.dateTime}>{dueDate.label}</time></Text>}\n\t\t\t\t\t\t\t{Boolean(assignees?.length) && <StackedAvatars users={assignees!} size=\"sm\" />}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t\tsurface={surface}\n\t\t\t\t\ttextGap=\"dense\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\theaderClassName={cn('flex-row flex-nowrap items-center', !disabled && 'cursor-pointer')}\n\t\t\t\t\tdata-expanded={expanded}\n\t\t\t\t\tclassName={cn('task-card--component min-w-0', className)}\n\t\t\t\t\ticon={<CompletionIndicator completed={completed} total={items.length} label={strings.completion} valueText={completion} />}\n\t\t\t\t\ttitleSuffix={(\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t\t{status && <Badge tone={status.tone ?? 'neutral'} size=\"sm\">{status.label}</Badge>}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" type=\"secondary\" className=\"task-card--count tabular-nums\" aria-label={completion}>{completionCount}</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\theaderAction={(\n\t\t\t\t\t\t<CollapsibleTrigger render={<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" size=\"sm\" iconOnly />} aria-label={expanded ? strings.collapse : strings.expand}>\n\t\t\t\t\t\t\t<ChevronDown aria-hidden=\"true\" className={cn('size-icon', expanded && 'rotate-180')} />\n\t\t\t\t\t\t</CollapsibleTrigger>\n\t\t\t\t\t)}\n\t\t\t\t\tfooterSlot={expanded && hasFooter ? (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t\t{assignedTo && <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<StackedAvatars users={[assignedTo]} size=\"sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"min-w-0 break-words\">{strings.formatAssignedTo(assignedTo.name)}</Text>\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(href !== undefined || onOpen) && <Button type=\"button\" href={href} onClick={onOpen} disabled={disabled} tone=\"neutral\" buttonStyle=\"outline\" size=\"sm\">\n\t\t\t\t\t\t\t\t{strings.open}<ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t>\n\t\t\t{expanded && <Stack gap=\"md\">\n\t\t\t\t<CollapsibleContent role=\"region\" aria-label={strings.subtasks}>\n\t\t\t\t\t{items.length > 0 ? <Stack role=\"list\" gap=\"none\" className=\"task-card--items\">\n\t\t\t\t\t\t{items.map((item) => <SubtaskRow key={item.id} item={item} disabled={disabled} onChange={onItemCompletedChange} savingLabel={strings.saving} />)}\n\t\t\t\t\t</Stack> : <Text type=\"secondary\">{strings.empty}</Text>}\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>}\n\t\t</Collapsible>\n\t);\n});\n\nTaskCard.displayName = 'TaskCard';\n"],"mappings":"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"}
|
package/dist/blocks/timelines.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../timelines-
|
|
2
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../timelines-CwM_9IhD.js";
|
|
3
3
|
export { i as ChangelogTimeline, o as MilestonesTimeline, e as StepsCard, r as StepsHorizontal, a as Timeline, t as defaultChangelogTimelineStrings, n as defaultMilestonesTimelineStrings };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { s as e, v as t } from "./ui-provider-
|
|
2
|
+
import { s as e, v as t } from "./ui-provider-C_U0Xma4.js";
|
|
3
3
|
import { useStrings as n } from "./lib/strings.js";
|
|
4
|
-
import { t as r } from "./utils-
|
|
5
|
-
import {
|
|
4
|
+
import { t as r } from "./utils-BRhFDwuU.js";
|
|
5
|
+
import { c as i } from "./typography-UTnveOEy.js";
|
|
6
6
|
import { t as a } from "./focus-recipes-B653VaLq.js";
|
|
7
7
|
import { t as o } from "./slot-CLF9kLrS.js";
|
|
8
8
|
import { Fragment as s, forwardRef as c } from "react";
|
|
@@ -44,7 +44,7 @@ function g({ children: e, className: t, ...n }) {
|
|
|
44
44
|
return /* @__PURE__ */ l("li", {
|
|
45
45
|
"data-slot": "breadcrumb-separator",
|
|
46
46
|
role: "presentation",
|
|
47
|
-
className: r("[&>svg]:size-
|
|
47
|
+
className: r("[&>svg]:size-icon-md", t),
|
|
48
48
|
...n,
|
|
49
49
|
children: e ?? /* @__PURE__ */ l(d, {})
|
|
50
50
|
});
|
|
@@ -126,4 +126,4 @@ C.displayName = "Breadcrumbs";
|
|
|
126
126
|
//#endregion
|
|
127
127
|
export { _ as n, C as t };
|
|
128
128
|
|
|
129
|
-
//# sourceMappingURL=breadcrumbs-
|
|
129
|
+
//# sourceMappingURL=breadcrumbs-C-oqs1sQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs-C-oqs1sQ.js","names":["useDensityConfig","resolveComponentScale","cn","Text","focusRecipes","Slot","BreadcrumbList","props","className","BreadcrumbItem","BreadcrumbLink","asChild","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","defaultBreadcrumbsStrings","hashString","hash","i","value","labelToKey","label","defaultRenderLink","BreadcrumbLabel","sizeConfig","Breadcrumbs","forwardRef","sizeProp","stringsProp","ariaLabel","size","defaultScale","strings","useStrings","breadcrumbs","itemSizeClass","listSpacingClass","separatorSpacingClass","baseColorClass","isLast","index","itemKey","item","renderedLabel","Fragment","renderLink"],"sources":["../src/components/ui/breadcrumb.tsx","../src/components/base/navigation/breadcrumbs.tsx"],"sourcesContent":["import { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Slot } from './slot';\nimport { cn } from '../../lib/utils';\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {\n\treturn (\n\t\t<nav\n\t\t\taria-label=\"breadcrumb\"\n\t\t\tdata-slot=\"breadcrumb\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n\treturn (\n\t\t<ol\n\t\t\tdata-slot=\"breadcrumb-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-muted-foreground flex flex-wrap items-center text-sm break-words',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-item\"\n\t\t\tclassName={cn('inline-flex items-center', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbLink({\n\tasChild,\n\tclassName,\n\t...props\n}: React.ComponentProps<'a'> & {\n\tasChild?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'a';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"breadcrumb-link\"\n\t\t\tclassName={cn('hover:text-foreground transition-colors', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-page\"\n\t\t\trole=\"link\"\n\t\t\taria-disabled=\"true\"\n\t\t\taria-current=\"page\"\n\t\t\tclassName={cn('text-foreground font-normal', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BreadcrumbSeparator({\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"breadcrumb-separator\"\n\t\t\trole=\"presentation\"\n\t\t\tclassName={cn('[&>svg]:size-icon-md', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <ChevronRight />}\n\t\t</li>\n\t);\n}\n\nfunction BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"breadcrumb-ellipsis\"\n\t\t\trole=\"presentation\"\n\t\t\tclassName={cn('flex size-9 items-center justify-center', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<MoreHorizontal className=\"size-icon\" />\n\t\t\t<span className=\"sr-only\">More</span>\n\t\t</span>\n\t);\n}\n\nexport {\n\tBreadcrumb,\n\tBreadcrumbList,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n\tBreadcrumbEllipsis,\n};\n\n","/**\n * Breadcrumbs — page hierarchy trail. Last item is rendered as the current\n * page (non-link); preceding items become links when an `href` is provided.\n * The public scale follows the shared component scale; CSS variables control\n * display spacing and typography across the library.\n */\nimport { forwardRef, Fragment, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport {\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from '../../ui/breadcrumb';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\n\nexport interface BreadcrumbItemType {\n\tlabel: ReactNode;\n\thref?: string;\n\thandle?: string;\n}\n\nexport type BreadcrumbSize = ComponentScale;\n\nexport interface BreadcrumbsStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultBreadcrumbsStrings: BreadcrumbsStrings = {\n\tnavigationLabel: 'Breadcrumb',\n};\n\ntype BreadcrumbLinkRenderer = (props: {\n\thref?: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\t'aria-label'?: string;\n}) => ReactNode;\n\nexport interface BreadcrumbsProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'> {\n\t/** Trail entries, root first. */\n\tbreadcrumbs: BreadcrumbItemType[];\n\t/** Typography scale for the trail. */\n\tsize?: BreadcrumbSize;\n\t/** Renders entries carrying an `href` through the consumer's router. */\n\trenderLink?: BreadcrumbLinkRenderer;\n\t/** Overrides the trail's own copy. */\n\tstrings?: StringsProp<BreadcrumbsStrings>;\n}\n\nconst hashString = (value: string): string => {\n\tlet hash = 0;\n\tfor (let i = 0; i < value.length; i += 1) {\n\t\thash = (hash << 5) - hash + value.charCodeAt(i);\n\t\thash |= 0;\n\t}\n\n\treturn Math.abs(hash).toString(36);\n};\n\nconst labelToKey = (label: ReactNode): string => {\n\tif (typeof label === 'string' || typeof label === 'number') return String(label);\n\treturn 'breadcrumb';\n};\n\nconst defaultRenderLink: BreadcrumbLinkRenderer = ({ href, children, ...props }) => (\n\t<a href={href} {...props}>{children}</a>\n);\n\nfunction BreadcrumbLabel({ children }: { children: ReactNode }) {\n\tif (\n\t\ttypeof children !== 'string' &&\n\t\ttypeof children !== 'number' &&\n\t\ttypeof children !== 'bigint'\n\t) {\n\t\treturn children;\n\t}\n\n\treturn (\n\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nconst sizeConfig: Record<BreadcrumbSize, { item: string; list: string; separator: string; color: string }> = {\n\tsm: {\n\t\titem: 'text-pxs',\n\t\tlist: '!gap-space-sm',\n\t\tseparator: '!mx-space-2xs',\n\t\t// Full-strength secondary ink at every size; a translucent ancestor link fails text contrast.\n\t\tcolor: 'text-muted-foreground',\n\t},\n\tmd: {\n\t\titem: 'text-sm',\n\t\tlist: '!gap-space-md',\n\t\tseparator: '!mx-space-sm',\n\t\tcolor: 'text-muted-foreground',\n\t},\n\tlg: {\n\t\titem: 'text-base',\n\t\tlist: '!gap-space-lg',\n\t\tseparator: '!mx-space-md',\n\t\tcolor: 'text-muted-foreground',\n\t},\n};\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs({\n\tbreadcrumbs,\n\tsize: sizeProp,\n\tclassName,\n\trenderLink = defaultRenderLink,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...props\n}, ref) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultBreadcrumbsStrings, stringsProp);\n\tif (breadcrumbs.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst { item: itemSizeClass, list: listSpacingClass, separator: separatorSpacingClass, color: baseColorClass } =\n\t\tsizeConfig[size];\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tdata-slot=\"breadcrumb\"\n\t\t\tclassName={cn('breadcrumbs--component font-sans', baseColorClass, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<BreadcrumbList className={cn('m-0 p-0 list-none flex flex-wrap items-center break-words', listSpacingClass)}>\n\t\t\t\t{breadcrumbs.map((item, index) => {\n\t\t\t\t\tconst isLast = index === breadcrumbs.length - 1;\n\t\t\t\t\tconst itemKey = item.handle ?? item.href ?? `crumb-${hashString(labelToKey(item.label))}-${index}`;\n\t\t\t\t\tconst renderedLabel = <BreadcrumbLabel>{item.label}</BreadcrumbLabel>;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={itemKey}>\n\t\t\t\t\t\t\t<BreadcrumbItem className={cn(itemSizeClass, 'font-medium')}>\n\t\t\t\t\t\t\t\t{isLast || !item.href ? (\n\t\t\t\t\t\t\t\t\t<BreadcrumbPage>\n\t\t\t\t\t\t\t\t\t\t<BreadcrumbLabel>{item.label}</BreadcrumbLabel>\n\t\t\t\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<BreadcrumbLink asChild className={`text-inherit no-underline rounded-inner ${focusRecipes.text}`}>\n\t\t\t\t\t\t\t\t\t\t{renderLink({ href: item.href, children: renderedLabel })}\n\t\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t<BreadcrumbSeparator\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName={cn(separatorSpacingClass)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</BreadcrumbList>\n\t\t</nav>\n\t);\n});\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./utils-
|
|
2
|
+
import { t as e } from "./utils-BRhFDwuU.js";
|
|
3
3
|
import { t } from "./focus-recipes-B653VaLq.js";
|
|
4
4
|
import * as n from "react";
|
|
5
5
|
import { jsx as r } from "react/jsx-runtime";
|
|
@@ -45,4 +45,4 @@ var o = i(`box-border inline-flex items-center justify-center gap-space-md white
|
|
|
45
45
|
//#endregion
|
|
46
46
|
export { o as n, s as t };
|
|
47
47
|
|
|
48
|
-
//# sourceMappingURL=button-
|
|
48
|
+
//# sourceMappingURL=button-DVzspB_G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-
|
|
1
|
+
{"version":3,"file":"button-DVzspB_G.js","names":["Button","React","ButtonPrimitive","cn","React$1","buttonVariants","cva","focusRecipes","Button$1","props","Button","variant","size","className","state"],"sources":["../src/components/ui/button.tsx"],"sourcesContent":["import { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { focusRecipes } from '../../lib/focus-recipes';\n\n/** Internal presentation only; public buttons own the stable tone/style API. */\nexport const buttonVariants = cva(`box-border inline-flex items-center justify-center gap-space-md whitespace-nowrap rounded-inner font-sans text-sm font-medium shrink-0 border border-transparent transition-colors outline-none ${focusRecipes.frame} disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-icon`, {\n variants: {\n variant: {default:'bg-primary text-primary-foreground hover:bg-primary/90', destructive:'bg-destructive text-destructive-foreground hover:bg-destructive/90', outline:'border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground', secondary:'bg-secondary text-secondary-foreground hover:bg-secondary/80', ghost:'hover:bg-accent hover:text-accent-foreground', link:'text-link-color underline-offset-4 hover:underline'},\n size: {default:'h-action px-control', xs:'h-action-xs px-control-xs', sm:'h-action-sm px-control-sm', lg:'h-action-lg px-control', icon:'size-action p-0', 'icon-xs':'size-action-xs p-0', 'icon-sm':'size-action-sm p-0', 'icon-lg':'size-action-lg p-0'},\n }, defaultVariants:{variant:'default',size:'default'},\n});\nexport namespace Button { export type Props = ButtonPrimitive.Props & VariantProps<typeof buttonVariants>; }\nexport const Button = React.forwardRef<HTMLElement, Button.Props>(function Button({className,variant,size,...props},ref) {\n // Unspecified recipe props leave presentation ownership with the public wrapper.\n return <ButtonPrimitive {...props} ref={ref} data-slot=\"button\" className={state => cn(variant != null || size != null ? buttonVariants({variant,size}) : undefined, typeof className === 'function' ? className(state) : className)} />;\n});\n"],"mappings":";;;;;;;;AAOA,IAAaK,IAAiBC,EAAI,mMAAmMC,EAAa,MAAM,kMAAkM;CACzb,UAAU;EACT,SAAS;GAAC,SAAQ;GAA0D,aAAY;GAAsE,SAAQ;GAA4F,WAAU;GAAgE,OAAM;GAAgD,MAAK;EAAoD;EAC3b,MAAM;GAAC,SAAQ;GAAuB,IAAG;GAA6B,IAAG;GAA6B,IAAG;GAA0B,MAAK;GAAmB,WAAU;GAAsB,WAAU;GAAsB,WAAU;EAAoB;CAC1P;CAAG,iBAAgB;EAAC,SAAQ;EAAU,MAAK;CAAS;AACrD,CAAC,GAEYP,IAASC,EAAM,WAAsC,SAAgB,EAAC,cAAU,YAAQ,SAAK,GAAGQ,KAAO,GAAK;CAExH,OAAO,kBAACP,GAAD;EAAiB,GAAIO;EAAY;EAAK,aAAU;EAAS,YAAW,MAASN,EAAGQ,KAAW,QAAQC,KAAQ,OAAOP,EAAe;GAAC;GAAQ;EAAI,CAAC,IAAI,KAAA,GAAW,OAAOQ,KAAc,aAAaA,EAAUC,CAAK,IAAID,CAAS;CAAI,CAAA;AACxO,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { r as e, s as t, v as n } from "./ui-provider-
|
|
2
|
+
import { r 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 { t as a } from "./affordance-geometry.generated-
|
|
6
|
-
import { t as o } from "./separator-
|
|
7
|
-
import { s } from "./typography-
|
|
4
|
+
import { t as i } from "./utils-BRhFDwuU.js";
|
|
5
|
+
import { t as a } from "./affordance-geometry.generated-tF36bREk.js";
|
|
6
|
+
import { t as o } from "./separator-Bom7NsGO.js";
|
|
7
|
+
import { c as s } from "./typography-UTnveOEy.js";
|
|
8
8
|
import { t as c } from "./focus-recipes-B653VaLq.js";
|
|
9
|
-
import { i as l, n as u, t as d } from "./tooltip-
|
|
10
|
-
import { t as f } from "./button-
|
|
9
|
+
import { i as l, n as u, t as d } from "./tooltip-yiRJUFjp.js";
|
|
10
|
+
import { t as f } from "./button-DVzspB_G.js";
|
|
11
11
|
import * as p from "react";
|
|
12
12
|
import { forwardRef as m, useCallback as h, useEffect as g, useLayoutEffect as _, useRef as v, useState as y } from "react";
|
|
13
13
|
import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
@@ -464,8 +464,8 @@ function W({ loading: e = !1, handlesLoading: t, strings: n }) {
|
|
|
464
464
|
strings: i
|
|
465
465
|
};
|
|
466
466
|
}
|
|
467
|
-
function G({ isLoading: e, loadingText: t, icon: n, iconPosition: r = "left",
|
|
468
|
-
let
|
|
467
|
+
function G({ isLoading: e, loadingText: t, icon: n, iconPosition: r = "left", iconOnly: a = !1, size: o, truncate: c = !1, children: l }) {
|
|
468
|
+
let u = e ? t : l, d = typeof u == "string" || typeof u == "number" || typeof u == "bigint";
|
|
469
469
|
return /* @__PURE__ */ S(b, { children: [
|
|
470
470
|
!!e && /* @__PURE__ */ x(C, {
|
|
471
471
|
className: i(I.icon, I.spinner),
|
|
@@ -475,14 +475,17 @@ function G({ isLoading: e, loadingText: t, icon: n, iconPosition: r = "left", si
|
|
|
475
475
|
className: I.icon,
|
|
476
476
|
"aria-hidden": "true"
|
|
477
477
|
}),
|
|
478
|
-
|
|
478
|
+
e && a ? /* @__PURE__ */ x("span", {
|
|
479
|
+
className: "sr-only",
|
|
480
|
+
children: t
|
|
481
|
+
}) : d ? /* @__PURE__ */ x(s, {
|
|
479
482
|
tag: "span",
|
|
480
483
|
size: "inherit",
|
|
481
484
|
weight: "medium",
|
|
482
485
|
lineHeight: "tight",
|
|
483
|
-
className: i("text-inherit",
|
|
484
|
-
children:
|
|
485
|
-
}) :
|
|
486
|
+
className: i("text-inherit", c && "min-w-0 truncate"),
|
|
487
|
+
children: u
|
|
488
|
+
}) : u,
|
|
486
489
|
!!n && r === "right" && !e && /* @__PURE__ */ x(n, {
|
|
487
490
|
className: I.icon,
|
|
488
491
|
"aria-hidden": "true"
|
|
@@ -506,6 +509,7 @@ var K = p.forwardRef(({ loading: e = !1, handlesLoading: t, strings: n, icon: r,
|
|
|
506
509
|
loadingText: f.loading,
|
|
507
510
|
icon: r,
|
|
508
511
|
iconPosition: a,
|
|
512
|
+
iconOnly: l.iconOnly,
|
|
509
513
|
size: l.size,
|
|
510
514
|
truncate: l.truncate,
|
|
511
515
|
children: o
|
|
@@ -554,6 +558,7 @@ var Y = p.forwardRef(({ loading: e, handlesLoading: t, strings: n, icon: r, icon
|
|
|
554
558
|
loadingText: f.strings.loading,
|
|
555
559
|
icon: r,
|
|
556
560
|
iconPosition: a,
|
|
561
|
+
iconOnly: u.iconOnly,
|
|
557
562
|
size: c,
|
|
558
563
|
truncate: u.truncate,
|
|
559
564
|
children: o
|
|
@@ -650,7 +655,7 @@ var ee = {
|
|
|
650
655
|
buttonStyle: "ghost",
|
|
651
656
|
size: d,
|
|
652
657
|
disabled: o,
|
|
653
|
-
className: i("text-button--component", "hover:bg-transparent dark:hover:bg-transparent", "inline-flex items-center justify-center underline decoration-border underline-offset-
|
|
658
|
+
className: i("text-button--component", "hover:bg-transparent dark:hover:bg-transparent", "inline-flex items-center justify-center underline decoration-border underline-offset-[0.2em] transition-colors hover:decoration-current", `text-primary-accent focus-visible:border-transparent ${c.text}`, "disabled:pointer-events-none disabled:opacity-50", ee[d], e),
|
|
654
659
|
...s
|
|
655
660
|
});
|
|
656
661
|
});
|
|
@@ -658,4 +663,4 @@ $.displayName = "TextButton";
|
|
|
658
663
|
//#endregion
|
|
659
664
|
export { L as a, P as c, H as i, D as l, Q as n, M as o, V as r, F as s, $ as t };
|
|
660
665
|
|
|
661
|
-
//# sourceMappingURL=buttons-
|
|
666
|
+
//# sourceMappingURL=buttons-DPZekJFu.js.map
|