@logicplanes/kaeso-ui 0.4.1 → 0.4.3
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/NOTICE.md +1 -1
- package/ai/component-guides.md +333 -21
- package/ai/component-registry.json +631 -32
- package/ai/component-registry.md +164 -28
- package/ai/icons.md +3 -3
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +15 -14
- package/dist/blocks/delete-resource.js.map +1 -1
- package/dist/blocks/pages.js +5 -5
- package/dist/blocks/resource-list.js +42 -41
- package/dist/blocks/resource-list.js.map +1 -1
- package/dist/chunks/agent-avatar-0pdBTWkR.js +171 -0
- package/dist/chunks/agent-avatar-0pdBTWkR.js.map +1 -0
- package/dist/chunks/{app-frame-DZPEf2NQ.js → app-frame-DogGRmsu.js} +23 -22
- package/dist/chunks/app-frame-DogGRmsu.js.map +1 -0
- package/dist/chunks/{avatar-HnvBUoe5.js → avatar-CWbdwbJv.js} +2 -2
- package/dist/chunks/{avatar-HnvBUoe5.js.map → avatar-CWbdwbJv.js.map} +1 -1
- package/dist/chunks/{badge-CM8ahjDR.js → badge-C2KtxCLB.js} +2 -2
- package/dist/chunks/{badge-CM8ahjDR.js.map → badge-C2KtxCLB.js.map} +1 -1
- package/dist/chunks/{banner-CvYgPwCc.js → banner-BA2ALw9M.js} +4 -4
- package/dist/chunks/{banner-CvYgPwCc.js.map → banner-BA2ALw9M.js.map} +1 -1
- package/dist/chunks/{button-9q66Ta23.js → button-CzuxqawA.js} +8 -8
- package/dist/chunks/{button-9q66Ta23.js.map → button-CzuxqawA.js.map} +1 -1
- package/dist/chunks/{calendar-CeNcqLFd.js → calendar-BWaf2MXc.js} +58 -42
- package/dist/chunks/calendar-BWaf2MXc.js.map +1 -0
- package/dist/chunks/{checkbox-C_DrNA2N.js → checkbox-CQjwCPkc.js} +12 -10
- package/dist/chunks/checkbox-CQjwCPkc.js.map +1 -0
- package/dist/chunks/{cn-Isw2DnQX.js → cn-Dj6sRgkF.js} +8 -1
- package/dist/chunks/cn-Dj6sRgkF.js.map +1 -0
- package/dist/chunks/{code-block-mEH6Sy3h.js → code-block-D5A-CGXG.js} +75 -54
- package/dist/chunks/code-block-D5A-CGXG.js.map +1 -0
- package/dist/chunks/{code-Bp2p9AuD.js → code-tqj0uhBL.js} +2 -2
- package/dist/chunks/{code-Bp2p9AuD.js.map → code-tqj0uhBL.js.map} +1 -1
- package/dist/chunks/{collapsible-CtQNJn9b.js → collapsible-CKrCX_T9.js} +3 -3
- package/dist/chunks/{collapsible-CtQNJn9b.js.map → collapsible-CKrCX_T9.js.map} +1 -1
- package/dist/chunks/combobox-DjDI7SUC.js +319 -0
- package/dist/chunks/combobox-DjDI7SUC.js.map +1 -0
- package/dist/chunks/{command-list-CzMbdtJs.js → command-list-C2Y7V_lt.js} +54 -54
- package/dist/chunks/command-list-C2Y7V_lt.js.map +1 -0
- package/dist/chunks/{copy-button-Cdea0wKl.js → copy-button-FJvPJn72.js} +5 -5
- package/dist/chunks/{copy-button-Cdea0wKl.js.map → copy-button-FJvPJn72.js.map} +1 -1
- package/dist/chunks/{core-FtMDNELx.js → core-BYns5ytV.js} +146 -140
- package/dist/chunks/core-BYns5ytV.js.map +1 -0
- package/dist/chunks/{date-popup-NytWvSNh.js → date-popup-CPA_zt6o.js} +4 -4
- package/dist/chunks/{date-popup-NytWvSNh.js.map → date-popup-CPA_zt6o.js.map} +1 -1
- package/dist/chunks/{de-BnNQtBSV.js → de-CPXJh9cq.js} +3 -1
- package/dist/chunks/de-CPXJh9cq.js.map +1 -0
- package/dist/chunks/dialog-Cg9A_6SF.js +383 -0
- package/dist/chunks/dialog-Cg9A_6SF.js.map +1 -0
- package/dist/chunks/{empty-By1qTJr6.js → empty-DvhyMXQq.js} +2 -2
- package/dist/chunks/{empty-By1qTJr6.js.map → empty-DvhyMXQq.js.map} +1 -1
- package/dist/chunks/{field-DfITT6Jm.js → field-TviMvYa2.js} +2 -2
- package/dist/chunks/{field-DfITT6Jm.js.map → field-TviMvYa2.js.map} +1 -1
- package/dist/chunks/{icon-D5uD_mnL.js → icon-D7ja-_Yk.js} +2 -2
- package/dist/chunks/{icon-D5uD_mnL.js.map → icon-D7ja-_Yk.js.map} +1 -1
- package/dist/chunks/icon-DVooQfk4.js +94 -0
- package/dist/chunks/icon-DVooQfk4.js.map +1 -0
- package/dist/chunks/{icon-button-C7Du4pvb.js → icon-button-CrdF_eMG.js} +3 -3
- package/dist/chunks/{icon-button-C7Du4pvb.js.map → icon-button-CrdF_eMG.js.map} +1 -1
- package/dist/chunks/{identity-BcVQd-7H.js → identity-BmhQ6BQ-.js} +18 -18
- package/dist/chunks/identity-BmhQ6BQ-.js.map +1 -0
- package/dist/chunks/{input-B6Docqrk.js → input-2VJuj_M4.js} +13 -8
- package/dist/chunks/input-2VJuj_M4.js.map +1 -0
- package/dist/chunks/{input-group-Dgdb0JpZ.js → input-group-DQ_4DoXg.js} +4 -4
- package/dist/chunks/{input-group-Dgdb0JpZ.js.map → input-group-DQ_4DoXg.js.map} +1 -1
- package/dist/chunks/{inset-BnBj8NJV.js → inset-BUzyXLK4.js} +14 -4
- package/dist/chunks/inset-BUzyXLK4.js.map +1 -0
- package/dist/chunks/{iso-field-SOZ7Z-yE.js → iso-field-B2rTwiBo.js} +2 -2
- package/dist/chunks/{iso-field-SOZ7Z-yE.js.map → iso-field-B2rTwiBo.js.map} +1 -1
- package/dist/chunks/{json-view-DCTMY_j4.js → json-view-Dqd2TDkc.js} +3 -3
- package/dist/chunks/{json-view-DCTMY_j4.js.map → json-view-Dqd2TDkc.js.map} +1 -1
- package/dist/chunks/{kbd-9A9rX60U.js → kbd-BF1vKXJf.js} +2 -2
- package/dist/chunks/{kbd-9A9rX60U.js.map → kbd-BF1vKXJf.js.map} +1 -1
- package/dist/chunks/{link-CtII7u3h.js → link-KWI7PevW.js} +4 -4
- package/dist/chunks/{link-CtII7u3h.js.map → link-KWI7PevW.js.map} +1 -1
- package/dist/chunks/link-provider-cvl8lSTT.js +29 -0
- package/dist/chunks/link-provider-cvl8lSTT.js.map +1 -0
- package/dist/chunks/{list-CMXBTVkI.js → list-M1csq-d4.js} +21 -19
- package/dist/chunks/{list-CMXBTVkI.js.map → list-M1csq-d4.js.map} +1 -1
- package/dist/chunks/{loader-DqOUwS1j.js → loader-DCfPndXa.js} +2 -2
- package/dist/chunks/{loader-DqOUwS1j.js.map → loader-DCfPndXa.js.map} +1 -1
- package/dist/chunks/{markdown-CwVQ0niB.js → markdown-DULktoTK.js} +9 -9
- package/dist/chunks/{markdown-CwVQ0niB.js.map → markdown-DULktoTK.js.map} +1 -1
- package/dist/chunks/{menu-Cjg4RggA.js → menu-DEmBfdPm.js} +32 -29
- package/dist/chunks/menu-DEmBfdPm.js.map +1 -0
- package/dist/chunks/{meter-VrC2J2GF.js → meter-Bj4N3Xuh.js} +2 -2
- package/dist/chunks/{meter-VrC2J2GF.js.map → meter-Bj4N3Xuh.js.map} +1 -1
- package/dist/chunks/nav-sheet-CzgIwgAm.js +60 -0
- package/dist/chunks/nav-sheet-CzgIwgAm.js.map +1 -0
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js → nav-wordmark-_pjheAsZ.js} +2 -2
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js.map → nav-wordmark-_pjheAsZ.js.map} +1 -1
- package/dist/chunks/{page-header-CZCQVHYE.js → page-header-DL2y2iZp.js} +4 -4
- package/dist/chunks/{page-header-CZCQVHYE.js.map → page-header-DL2y2iZp.js.map} +1 -1
- package/dist/chunks/{pagination-BStrMDqM.js → pagination-Cn_qF4cg.js} +4 -4
- package/dist/chunks/{pagination-BStrMDqM.js.map → pagination-Cn_qF4cg.js.map} +1 -1
- package/dist/chunks/{picker-popover-BerQAEBT.js → picker-popover-BxyU1U9F.js} +17 -16
- package/dist/chunks/{picker-popover-BerQAEBT.js.map → picker-popover-BxyU1U9F.js.map} +1 -1
- package/dist/chunks/{popover-CgLt_4yG.js → popover-DNN4S47w.js} +3 -3
- package/dist/chunks/{popover-CgLt_4yG.js.map → popover-DNN4S47w.js.map} +1 -1
- package/dist/chunks/portal-context-BBbzDKmY.js.map +1 -1
- package/dist/chunks/{radio-07Muf4cX.js → radio-CDDFpdtL.js} +5 -5
- package/dist/chunks/{radio-07Muf4cX.js.map → radio-CDDFpdtL.js.map} +1 -1
- package/dist/chunks/{range-popup-BCov1iPe.js → range-popup-CRyWYUB1.js} +6 -6
- package/dist/chunks/{range-popup-BCov1iPe.js.map → range-popup-CRyWYUB1.js.map} +1 -1
- package/dist/chunks/{release-art-69WpgVik.js → release-art-ZwfFQImt.js} +2 -2
- package/dist/chunks/{release-art-69WpgVik.js.map → release-art-ZwfFQImt.js.map} +1 -1
- package/dist/chunks/{rights-UVngOX_4.js → rights-Cyp0Pzp-.js} +9 -9
- package/dist/chunks/{rights-UVngOX_4.js.map → rights-Cyp0Pzp-.js.map} +1 -1
- package/dist/chunks/scroll-area-D8MD7Vpo.js +42 -0
- package/dist/chunks/scroll-area-D8MD7Vpo.js.map +1 -0
- package/dist/chunks/{section-Bvg0EUnr.js → section-Ce1efbsP.js} +3 -3
- package/dist/chunks/{section-Bvg0EUnr.js.map → section-Ce1efbsP.js.map} +1 -1
- package/dist/chunks/{segmented-DRLDN8EW.js → segmented-CErcoxwi.js} +4 -4
- package/dist/chunks/{segmented-DRLDN8EW.js.map → segmented-CErcoxwi.js.map} +1 -1
- package/dist/chunks/{select-eFTHLeYG.js → select-x4XVsdCI.js} +4 -4
- package/dist/chunks/{select-eFTHLeYG.js.map → select-x4XVsdCI.js.map} +1 -1
- package/dist/chunks/{separator-D86IW7Ge.js → separator-D7TzNHmX.js} +2 -2
- package/dist/chunks/{separator-D86IW7Ge.js.map → separator-D7TzNHmX.js.map} +1 -1
- package/dist/chunks/{sidebar-DifJ5KgE.js → sidebar-3r1ZRXlN.js} +255 -237
- package/dist/chunks/sidebar-3r1ZRXlN.js.map +1 -0
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js → sidebar-menu-BN3jkTlK.js} +2 -2
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js.map → sidebar-menu-BN3jkTlK.js.map} +1 -1
- package/dist/chunks/{skeleton-Cu74kGJA.js → skeleton-Dcz57Zyp.js} +2 -2
- package/dist/chunks/{skeleton-Cu74kGJA.js.map → skeleton-Dcz57Zyp.js.map} +1 -1
- package/dist/chunks/{slider-Dh0qq1wa.js → slider-Ci83PGtj.js} +2 -2
- package/dist/chunks/{slider-Dh0qq1wa.js.map → slider-Ci83PGtj.js.map} +1 -1
- package/dist/chunks/{status-dot-u4Izk-uC.js → status-dot-QJTF0Yv4.js} +3 -3
- package/dist/chunks/{status-dot-u4Izk-uC.js.map → status-dot-QJTF0Yv4.js.map} +1 -1
- package/dist/chunks/{swap-text-CC77iKJF.js → swap-text-Dr0Irxz6.js} +2 -2
- package/dist/chunks/{swap-text-CC77iKJF.js.map → swap-text-Dr0Irxz6.js.map} +1 -1
- package/dist/chunks/{switch-CbU9m9gi.js → switch-BNMq_kGt.js} +3 -3
- package/dist/chunks/{switch-CbU9m9gi.js.map → switch-BNMq_kGt.js.map} +1 -1
- package/dist/chunks/table-BeOSKl_3.js +84 -0
- package/dist/chunks/table-BeOSKl_3.js.map +1 -0
- package/dist/chunks/{tag-CqSk8F7M.js → tag-D_M1s2qS.js} +4 -4
- package/dist/chunks/{tag-CqSk8F7M.js.map → tag-D_M1s2qS.js.map} +1 -1
- package/dist/chunks/{text-hFc6TDp9.js → text-CIXH8rmT.js} +3 -3
- package/dist/chunks/{text-hFc6TDp9.js.map → text-CIXH8rmT.js.map} +1 -1
- package/dist/chunks/{textarea-17Ftvph_.js → textarea--4FRL3Pb.js} +5 -5
- package/dist/chunks/{textarea-17Ftvph_.js.map → textarea--4FRL3Pb.js.map} +1 -1
- package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -1
- package/dist/chunks/{timeseries-CbnSFD5q.js → timeseries-D1xjRXfk.js} +3 -3
- package/dist/chunks/{timeseries-CbnSFD5q.js.map → timeseries-D1xjRXfk.js.map} +1 -1
- package/dist/chunks/{toolbar-B_960Ttx.js → toolbar-WA_oZgu-.js} +6 -5
- package/dist/chunks/{toolbar-B_960Ttx.js.map → toolbar-WA_oZgu-.js.map} +1 -1
- package/dist/chunks/tooltip-OcwO0VUT.js +154 -0
- package/dist/chunks/tooltip-OcwO0VUT.js.map +1 -0
- package/dist/chunks/{tooltip-root-Dssjjp-E.js → tooltip-root-DzahJDVj.js} +4 -4
- package/dist/chunks/{tooltip-root-Dssjjp-E.js.map → tooltip-root-DzahJDVj.js.map} +1 -1
- package/dist/chunks/{use-scroll-margin-DfdTc_5D.js → use-scroll-margin-atRtf0v_.js} +14 -10
- package/dist/chunks/use-scroll-margin-atRtf0v_.js.map +1 -0
- package/dist/chunks/{virtual-rows-yAMjeAwj.js → virtual-rows-CC_kc2PR.js} +2 -2
- package/dist/chunks/{virtual-rows-yAMjeAwj.js.map → virtual-rows-CC_kc2PR.js.map} +1 -1
- package/dist/chunks/{zh-CN-CKffAT7j.js → zh-CN-29X4CDLE.js} +3 -1
- package/dist/chunks/zh-CN-29X4CDLE.js.map +1 -0
- package/dist/components/agent-avatar.js +2 -0
- package/dist/components/app-frame.js +2 -2
- package/dist/components/avatar.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +4 -4
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +2 -2
- package/dist/components/charts/gauge.js +2 -2
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/sparkline.js +1 -1
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +89 -84
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +193 -189
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +9 -7
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.js +125 -91
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/display-options.js +52 -49
- package/dist/components/display-options.js.map +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/figure.js +60 -0
- package/dist/components/figure.js.map +1 -0
- package/dist/components/filter-chip.js +5 -5
- package/dist/components/filter-chip.js.map +1 -1
- package/dist/components/filter-row.js +2 -2
- package/dist/components/flow.js +2 -2
- package/dist/components/heading.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +2 -2
- package/dist/components/input.js +51 -51
- package/dist/components/input.js.map +1 -1
- package/dist/components/kaeso/conversation.js +8 -8
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +5 -5
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +12 -12
- package/dist/components/kaeso/usage.js.map +1 -1
- package/dist/components/kaeso.js +264 -96
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/key-value.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/logo.js +2 -2
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/meter.js +1 -1
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +32 -31
- package/dist/components/playground.js.map +1 -1
- package/dist/components/popover.js +13 -12
- package/dist/components/popover.js.map +1 -1
- package/dist/components/qr-code.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/release-art.js +1 -1
- package/dist/components/scroll-area.js +1 -41
- package/dist/components/section.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/settings.js +10 -10
- package/dist/components/settings.js.map +1 -1
- package/dist/components/sheet.js +3 -3
- package/dist/components/sidebar.js +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/stat.js +3 -3
- package/dist/components/status-dot.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/swap-text.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +24 -24
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-image.js +1 -1
- package/dist/components/theme-menu.js +33 -30
- package/dist/components/theme-menu.js.map +1 -1
- package/dist/components/theme-select.js +1 -1
- package/dist/components/thumbnail.js +41 -0
- package/dist/components/thumbnail.js.map +1 -0
- package/dist/components/timeline.js +1 -1
- package/dist/components/toast.js +100 -91
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toc.js +37 -22
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/visually-hidden.js +1 -1
- package/dist/format.js.map +1 -1
- package/dist/i18n-provider.js +1 -1
- package/dist/index.js +99 -95
- package/dist/kaeso.css +3 -0
- package/dist/styles.css +1 -1
- package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -5
- package/dist/types/blocks/resource-list/resource-list.d.ts +1 -4
- package/dist/types/component-docs.d.ts +1 -1
- package/dist/types/components/agent-avatar/agent-avatar.d.ts +94 -0
- package/dist/types/components/agent-avatar/docs.d.ts +19 -0
- package/dist/types/components/agent-avatar/index.d.ts +3 -0
- package/dist/types/components/agent-avatar/model-name.d.ts +9 -0
- package/dist/types/components/agent-avatar/models.d.ts +4 -0
- package/dist/types/components/app-frame/app-frame.d.ts +3 -8
- package/dist/types/components/app-frame/nav-sheet.d.ts +2 -4
- package/dist/types/components/calendar/calendar.d.ts +1 -4
- package/dist/types/components/charts/core.d.ts +11 -18
- package/dist/types/components/checkbox/checkbox.d.ts +2 -0
- package/dist/types/components/code-block/code-block.d.ts +1 -1
- package/dist/types/components/code-block/indent.d.ts +3 -0
- package/dist/types/components/combobox/combobox.d.ts +26 -2
- package/dist/types/components/command-list/command-list.d.ts +1 -0
- package/dist/types/components/command-list/docs.d.ts +1 -0
- package/dist/types/components/command-list/picker-popover.d.ts +1 -4
- package/dist/types/components/command-palette/command-palette.d.ts +2 -4
- package/dist/types/components/command-palette/docs.d.ts +1 -0
- package/dist/types/components/data-table/data-table.d.ts +2 -1
- package/dist/types/components/data-table/docs.d.ts +1 -0
- package/dist/types/components/dialog/dialog.d.ts +7 -9
- package/dist/types/components/dialog/docs.d.ts +2 -0
- package/dist/types/components/dialog/scope.d.ts +2 -0
- package/dist/types/components/dialog/step-dialog.d.ts +38 -5
- package/dist/types/components/display-options/display-options.d.ts +2 -5
- package/dist/types/components/figure/docs.d.ts +12 -0
- package/dist/types/components/figure/figure.d.ts +25 -0
- package/dist/types/components/figure/index.d.ts +1 -0
- package/dist/types/components/input/input.d.ts +23 -0
- package/dist/types/components/kaeso/client-button.d.ts +17 -0
- package/dist/types/components/kaeso/docs.d.ts +18 -0
- package/dist/types/components/kaeso/grant-summary.d.ts +12 -0
- package/dist/types/components/kaeso/identity.d.ts +2 -0
- package/dist/types/components/kaeso/index.d.ts +2 -0
- package/dist/types/components/kaeso/provider-picker.d.ts +5 -0
- package/dist/types/components/kaeso/usage.d.ts +2 -0
- package/dist/types/components/list/list.d.ts +4 -8
- package/dist/types/components/menu/docs.d.ts +8 -1
- package/dist/types/components/menu/menu.d.ts +19 -31
- package/dist/types/components/playground/parameter-panel.d.ts +1 -4
- package/dist/types/components/popover/hover-card.d.ts +2 -0
- package/dist/types/components/radio/docs.d.ts +15 -0
- package/dist/types/components/radio/radio.d.ts +2 -4
- package/dist/types/components/settings/settings.d.ts +2 -0
- package/dist/types/components/sidebar/sidebar.d.ts +13 -35
- package/dist/types/components/table/docs.d.ts +3 -1
- package/dist/types/components/table/table.d.ts +18 -1
- package/dist/types/components/tabs/tabs.d.ts +15 -0
- package/dist/types/components/theme-menu/docs.d.ts +2 -0
- package/dist/types/components/theme-menu/theme-menu.d.ts +6 -5
- package/dist/types/components/thumbnail/docs.d.ts +10 -0
- package/dist/types/components/thumbnail/index.d.ts +1 -0
- package/dist/types/components/thumbnail/thumbnail.d.ts +26 -0
- package/dist/types/components/toast/toast.d.ts +5 -12
- package/dist/types/components/toolbar/toolbar.d.ts +1 -6
- package/dist/types/components/tooltip/tooltip.d.ts +2 -4
- package/dist/types/components/tooltip/trigger-props.d.ts +0 -1
- package/dist/types/format/index.d.ts +5 -5
- package/dist/types/hooks/use-scroll-margin.d.ts +1 -1
- package/dist/types/icons/groups.d.ts +2 -2
- package/dist/types/icons/vocabulary.d.ts +15 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/utils/cn.d.ts +4 -0
- package/dist/types/utils/inset.d.ts +4 -0
- package/dist/types/utils/link-provider.d.ts +1 -1
- package/dist/types/utils/merge-refs.d.ts +3 -0
- package/dist/types/utils/portal-context.d.ts +1 -1
- package/dist/utils.js +4 -4
- package/foundations/shape.md +1 -1
- package/package.json +3 -3
- package/dist/chunks/app-frame-DZPEf2NQ.js.map +0 -1
- package/dist/chunks/calendar-CeNcqLFd.js.map +0 -1
- package/dist/chunks/checkbox-C_DrNA2N.js.map +0 -1
- package/dist/chunks/cn-Isw2DnQX.js.map +0 -1
- package/dist/chunks/code-block-mEH6Sy3h.js.map +0 -1
- package/dist/chunks/combobox-D8ZOm8uT.js +0 -314
- package/dist/chunks/combobox-D8ZOm8uT.js.map +0 -1
- package/dist/chunks/command-list-CzMbdtJs.js.map +0 -1
- package/dist/chunks/core-FtMDNELx.js.map +0 -1
- package/dist/chunks/de-BnNQtBSV.js.map +0 -1
- package/dist/chunks/dialog-BZCVFmGF.js +0 -353
- package/dist/chunks/dialog-BZCVFmGF.js.map +0 -1
- package/dist/chunks/icon-CBzvyEqC.js +0 -91
- package/dist/chunks/icon-CBzvyEqC.js.map +0 -1
- package/dist/chunks/identity-BcVQd-7H.js.map +0 -1
- package/dist/chunks/input-B6Docqrk.js.map +0 -1
- package/dist/chunks/inset-BnBj8NJV.js.map +0 -1
- package/dist/chunks/link-provider-BsUxhZKG.js +0 -27
- package/dist/chunks/link-provider-BsUxhZKG.js.map +0 -1
- package/dist/chunks/menu-Cjg4RggA.js.map +0 -1
- package/dist/chunks/nav-sheet-Y2Ite-iF.js +0 -60
- package/dist/chunks/nav-sheet-Y2Ite-iF.js.map +0 -1
- package/dist/chunks/sidebar-DifJ5KgE.js.map +0 -1
- package/dist/chunks/table-CTxDp7zC.js +0 -67
- package/dist/chunks/table-CTxDp7zC.js.map +0 -1
- package/dist/chunks/tooltip-CRApbLF6.js +0 -151
- package/dist/chunks/tooltip-CRApbLF6.js.map +0 -1
- package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +0 -1
- package/dist/chunks/zh-CN-CKffAT7j.js.map +0 -1
- package/dist/components/scroll-area.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio-
|
|
1
|
+
{"version":3,"file":"radio-CDDFpdtL.js","names":["RadioGroup","BaseRadioGroup","BaseRadio","Radio","cn","KAESO_RADIO_VARIANTS","KAESO_RADIO_DEFAULT_VARIANTS","Ctx","Group","props","RadioGroup","value","defaultValue","onValueChange","v","disabled","name","variant","orientation","className","RadioCircle","ariaLabel","labelledBy","describedBy","force","Radio","id","Root","useContext","auto","useId","rid","named","labelled","label","description","Radio$1","RadioGroup$1","RadioCards"],"sources":["../../src/components/radio/radio.tsx"],"sourcesContent":["import { createContext, forwardRef, useContext, useId, type ReactNode } from \"react\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { labelled } from \"./labelled.js\";\n\nexport const KAESO_RADIO_VARIANTS = {\n variant: {\n default: { classes: \"flex flex-col\" },\n cards: {\n classes: \"flex flex-col overflow-hidden rounded-group bg-raised shadow-xs\",\n },\n },\n} as const;\nexport const KAESO_RADIO_DEFAULT_VARIANTS = { variant: \"default\" } as const;\n\nconst Ctx = /* @__PURE__ */ createContext<{ variant: keyof typeof KAESO_RADIO_VARIANTS.variant }>({ variant: \"default\" });\n\nexport interface RadioGroupProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n disabled?: boolean | undefined;\n name?: string | undefined;\n variant?: keyof typeof KAESO_RADIO_VARIANTS.variant | undefined;\n orientation?: \"vertical\" | \"horizontal\" | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\nconst Group = /* @__PURE__ */ forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n { value, defaultValue, onValueChange, disabled, name, variant = \"default\", orientation = \"vertical\", className, children, ...props },\n ref,\n) {\n return (\n <Ctx.Provider value={{ variant }}>\n <BaseRadioGroup\n ref={ref}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange: (v: unknown) => onValueChange(String(v)) } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(name ? { name } : {})}\n className={cn(\n KAESO_RADIO_VARIANTS.variant[variant].classes,\n orientation === \"horizontal\" && variant === \"default\" && \"flex-row flex-wrap gap-x-24\",\n className,\n )}\n {...props}\n >\n {children}\n </BaseRadioGroup>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Group.displayName = \"RadioGroup\";\n\nexport interface RadioProps {\n value: string;\n label?: ReactNode | undefined;\n description?: ReactNode | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const RadioCircle = /* @__PURE__ */ forwardRef<HTMLButtonElement, RadioProps>(function RadioCircle(\n { value, disabled, id, className, \"aria-label\": ariaLabel, \"aria-labelledby\": labelledBy, \"aria-describedby\": describedBy, \"data-force\": force },\n ref,\n) {\n return (\n <BaseRadio.Root\n ref={ref}\n value={value}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(id ? { id } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(labelledBy ? { \"aria-labelledby\": labelledBy } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative inline-flex size-18 shrink-0 cursor-pointer items-center justify-center rounded-pill bg-raised shadow-selector radio-donut focus-ring tap-target\",\n \"not-checked:hover:shadow-selector-hover disabled:cursor-not-allowed disabled:bg-fill-1 disabled:shadow-none\",\n className,\n )}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") RadioCircle.displayName = \"Radio.Circle\";\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLButtonElement, RadioProps>(function Radio({ label, description, id, className, ...props }, ref) {\n const { variant } = useContext(Ctx);\n const auto = useId();\n const rid = id ?? `k-radio-${auto}`;\n const named = labelled(rid, label, description, props);\n if (variant === \"cards\") {\n return (\n <label\n htmlFor={rid}\n className={cn(\n \"flex min-h-56 cursor-pointer items-center gap-16 px-20 py-12 transition-control hover:bg-fill-1 not-first:hairline-t has-[:disabled]:cursor-not-allowed\",\n className,\n )}\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span id={named.labelId} className={cn(\"text-body-lg font-medium text-fg\", props.disabled && \"text-fg-disabled\")}>\n {label}\n </span>\n {description && (\n <span id={named.descriptionId} className=\"text-small text-fg-secondary\">\n {description}\n </span>\n )}\n </span>\n <RadioCircle ref={ref} id={rid} {...props} {...named.aria} />\n </label>\n );\n }\n if (!label) return <RadioCircle ref={ref} id={rid} className={className} {...props} />;\n return (\n <label\n htmlFor={rid}\n className={cn(\"inline-flex min-h-32 cursor-pointer items-start gap-10 py-6 select-none\", props.disabled && \"cursor-not-allowed\", className)}\n >\n <span className=\"flex h-20 items-center\">\n <RadioCircle ref={ref} id={rid} {...props} {...named.aria} />\n </span>\n <span className=\"flex flex-col\">\n <span id={named.labelId} className={cn(\"text-body text-fg\", props.disabled && \"text-fg-disabled\")}>\n {label}\n </span>\n {description && (\n <span id={named.descriptionId} className=\"text-small text-fg-secondary\">\n {description}\n </span>\n )}\n </span>\n </label>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Radio\";\n\nexport const Radio = /* @__PURE__ */ Object.assign(Root, { Group, Circle: RadioCircle });\nexport const RadioGroup = Group;\nexport type RadioCardsProps = Omit<RadioGroupProps, \"variant\">;\n\nexport const RadioCards = /* @__PURE__ */ forwardRef<HTMLDivElement, RadioCardsProps>(function RadioCards(props, ref) {\n return <Group ref={ref} variant=\"cards\" {...props} />;\n});\nif (process.env.NODE_ENV !== \"production\") RadioCards.displayName = \"RadioCards\";\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { i as e } from "./styles-CVJU9t9v.js";
|
|
3
|
-
import { t } from "./cn-
|
|
3
|
+
import { t } from "./cn-Dj6sRgkF.js";
|
|
4
4
|
import { i as n } from "./context-BELWW79w.js";
|
|
5
|
-
import { n as r } from "./button-
|
|
6
|
-
import { i } from "./popover-
|
|
7
|
-
import { t as a } from "./calendar-
|
|
8
|
-
import { t as o } from "./iso-field-
|
|
5
|
+
import { n as r } from "./button-CzuxqawA.js";
|
|
6
|
+
import { i } from "./popover-DNN4S47w.js";
|
|
7
|
+
import { t as a } from "./calendar-BWaf2MXc.js";
|
|
8
|
+
import { t as o } from "./iso-field-B2rTwiBo.js";
|
|
9
9
|
import { useState as s, useSyncExternalStore as c } from "react";
|
|
10
10
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
11
11
|
//#region src/components/date-picker/range-popup.tsx
|
|
@@ -125,4 +125,4 @@ function y({ range: c, preset: f, presets: p, onPick: m, onClose: y, weekStartsO
|
|
|
125
125
|
//#endregion
|
|
126
126
|
export { y as RangePopup };
|
|
127
127
|
|
|
128
|
-
//# sourceMappingURL=range-popup-
|
|
128
|
+
//# sourceMappingURL=range-popup-CRyWYUB1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range-popup-BCov1iPe.js","names":["MENU_ITEM","useUiText","Button","Calendar","IsoField","moveAmongOptions","options","at","step","columns","to","NARROW","subscribeNarrow","q","onChange","isNarrow","useWide","useSyncExternalStore","monthOf","d","addMonths","n","sameDay","a","b","RangePopup","wide","t","months","draft","setDraft","useState","range","custom","setCustom","preset","last","setLast","first","shows","selected","edit","next","typed","disabledDays","other","which","unchanged","item","cn","Popover","presets","id","p","onPick","m","r","onClose"],"sources":["../../src/components/date-picker/range-popup.tsx"],"sourcesContent":["import { useState, useSyncExternalStore, type KeyboardEvent } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Button } from \"../button/button.js\";\nimport { MENU_ITEM } from \"../menu/styles.js\";\nimport { IsoField } from \"./iso-field.js\";\nimport type { DateRangePreset } from \"./date-picker.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nfunction moveAmongOptions(e: KeyboardEvent<HTMLDivElement>, columns: number) {\n const options = [...e.currentTarget.querySelectorAll<HTMLElement>(\"[role=option]\")];\n const at = options.indexOf(document.activeElement as HTMLElement);\n if (at < 0) return;\n const step: Record<string, number> = { ArrowDown: columns, ArrowUp: -columns, ...(columns > 1 ? { ArrowRight: 1, ArrowLeft: -1 } : {}) };\n const to = e.key === \"Home\" ? 0 : e.key === \"End\" ? options.length - 1 : step[e.key] !== undefined ? at + step[e.key]! : null;\n if (to === null) return;\n e.preventDefault();\n options[Math.max(0, Math.min(options.length - 1, to))]?.focus();\n}\n\nexport interface RangePopupProps {\n range: DateRange | null;\n preset: string | null;\n presets: DateRangePreset[];\n onPick: (range: DateRange, preset: string | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nconst NARROW = \"(max-width: 767px)\";\nfunction subscribeNarrow(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n}\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\nconst useWide = () => !useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n\nconst monthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst sameDay = (a: Date | undefined, b: Date | undefined) => a?.toDateString() === b?.toDateString();\n\nexport function RangePopup({ range, preset, presets, onPick, onClose, weekStartsOn, disabledDays }: RangePopupProps) {\n const wide = useWide();\n const t = useUiText();\n const months = wide ? 2 : 1;\n const [draft, setDraft] = useState<DateRange | undefined>(range ?? undefined);\n const [custom, setCustom] = useState(preset === null);\n const [last, setLast] = useState(() => monthOf(range?.to ?? range?.from ?? new Date()));\n const first = addMonths(last, 1 - months);\n const shows = (d: Date) => d >= first && monthOf(d) <= last;\n const selected = custom ? null : preset;\n const edit = (next: DateRange | undefined) => {\n setDraft(next);\n setCustom(true);\n };\n const typed = (which: \"from\" | \"to\", d: Date) => {\n if (disabledDays?.(d)) return false;\n const other = which === \"from\" ? draft?.to : draft?.from;\n const next = which === \"from\" ? { from: d, to: other && other < d ? d : other } : { from: other && other > d ? d : other, to: d };\n edit(next);\n if (!shows(d)) setLast(which === \"to\" || months === 1 ? monthOf(d) : addMonths(monthOf(d), months - 1));\n return true;\n };\n const unchanged = sameDay(draft?.from, range?.from) && sameDay(draft?.to ?? draft?.from, range?.to);\n const item = cn(MENU_ITEM, \"cursor-pointer hover:bg-fill-1 focus-ring-inset aria-selected:bg-fill-2\", wide && \"coarse:min-h-40\");\n\n return (\n <Popover.Content padding=\"none\" aria-label={t(\"datePicker.chooseRange\", \"Choose a date range\")} className={cn(!wide && \"w-360 max-w-(--available-width)\")}>\n <div className={cn(\"flex\", !wide && \"flex-col\")}>\n <div\n className={cn(\"shrink-0 gap-2 p-6\", wide ? \"flex min-w-160 flex-col hairline-r\" : \"grid grid-cols-2 hairline-b\")}\n role=\"listbox\"\n aria-label={t(\"datePicker.presets\", \"Presets\")}\n aria-orientation={wide ? \"vertical\" : undefined}\n onKeyDown={(e) => moveAmongOptions(e, wide ? 1 : 2)}\n >\n {presets.map((p) => {\n const id = p.id ?? p.label;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected === id}\n tabIndex={selected === id ? 0 : -1}\n className={item}\n onClick={() => onPick(p.range(), id)}\n >\n {p.label}\n </button>\n );\n })}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={selected === null}\n tabIndex={selected === null || !presets.some((p) => (p.id ?? p.label) === selected) ? 0 : -1}\n className={item}\n onClick={() => setCustom(true)}\n >\n {t(\"datePicker.custom\", \"Custom\")}\n </button>\n </div>\n <div className={cn(\"flex flex-col p-12\", !wide && \"items-center\")}>\n <Calendar\n mode=\"range\"\n numberOfMonths={months}\n selected={draft}\n month={first}\n onMonthChange={(m) => setLast(addMonths(m, months - 1))}\n onSelect={(r) => edit(r as DateRange | undefined)}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex items-center gap-8 self-stretch\">\n <IsoField label={t(\"datePicker.startDate\", \"Start date\")} value={draft?.from} onCommit={(d) => typed(\"from\", d)} />\n <span className=\"text-fg-tertiary\" aria-hidden>\n –\n </span>\n <IsoField label={t(\"datePicker.endDate\", \"End date\")} value={draft?.to} onCommit={(d) => typed(\"to\", d)} />\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={!draft?.from}\n onClick={() => {\n if (!draft?.from) return;\n if (unchanged && !custom) onClose();\n else onPick({ from: draft.from, to: draft.to ?? draft.from }, null);\n }}\n >\n {t(\"datePicker.apply\", \"Apply\")}\n </Button>\n </div>\n </div>\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"range-popup-CRyWYUB1.js","names":["MENU_ITEM","useUiText","Button","Calendar","IsoField","moveAmongOptions","options","at","step","columns","to","NARROW","subscribeNarrow","q","onChange","isNarrow","useWide","useSyncExternalStore","monthOf","d","addMonths","n","sameDay","a","b","RangePopup","wide","t","months","draft","setDraft","useState","range","custom","setCustom","preset","last","setLast","first","shows","selected","edit","next","typed","disabledDays","other","which","unchanged","item","cn","Popover","presets","id","p","onPick","m","r","onClose"],"sources":["../../src/components/date-picker/range-popup.tsx"],"sourcesContent":["import { useState, useSyncExternalStore, type KeyboardEvent } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Button } from \"../button/button.js\";\nimport { MENU_ITEM } from \"../menu/styles.js\";\nimport { IsoField } from \"./iso-field.js\";\nimport type { DateRangePreset } from \"./date-picker.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nfunction moveAmongOptions(e: KeyboardEvent<HTMLDivElement>, columns: number) {\n const options = [...e.currentTarget.querySelectorAll<HTMLElement>(\"[role=option]\")];\n const at = options.indexOf(document.activeElement as HTMLElement);\n if (at < 0) return;\n const step: Record<string, number> = { ArrowDown: columns, ArrowUp: -columns, ...(columns > 1 ? { ArrowRight: 1, ArrowLeft: -1 } : {}) };\n const to = e.key === \"Home\" ? 0 : e.key === \"End\" ? options.length - 1 : step[e.key] !== undefined ? at + step[e.key]! : null;\n if (to === null) return;\n e.preventDefault();\n options[Math.max(0, Math.min(options.length - 1, to))]?.focus();\n}\n\nexport interface RangePopupProps {\n range: DateRange | null;\n preset: string | null;\n presets: DateRangePreset[];\n onPick: (range: DateRange, preset: string | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nconst NARROW = \"(max-width: 767px)\";\nfunction subscribeNarrow(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n}\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\nconst useWide = () => !useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n\nconst monthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst sameDay = (a: Date | undefined, b: Date | undefined) => a?.toDateString() === b?.toDateString();\n\nexport function RangePopup({ range, preset, presets, onPick, onClose, weekStartsOn, disabledDays }: RangePopupProps) {\n const wide = useWide();\n const t = useUiText();\n const months = wide ? 2 : 1;\n const [draft, setDraft] = useState<DateRange | undefined>(range ?? undefined);\n const [custom, setCustom] = useState(preset === null);\n const [last, setLast] = useState(() => monthOf(range?.to ?? range?.from ?? new Date()));\n const first = addMonths(last, 1 - months);\n const shows = (d: Date) => d >= first && monthOf(d) <= last;\n const selected = custom ? null : preset;\n const edit = (next: DateRange | undefined) => {\n setDraft(next);\n setCustom(true);\n };\n const typed = (which: \"from\" | \"to\", d: Date) => {\n if (disabledDays?.(d)) return false;\n const other = which === \"from\" ? draft?.to : draft?.from;\n const next = which === \"from\" ? { from: d, to: other && other < d ? d : other } : { from: other && other > d ? d : other, to: d };\n edit(next);\n if (!shows(d)) setLast(which === \"to\" || months === 1 ? monthOf(d) : addMonths(monthOf(d), months - 1));\n return true;\n };\n const unchanged = sameDay(draft?.from, range?.from) && sameDay(draft?.to ?? draft?.from, range?.to);\n const item = cn(MENU_ITEM, \"cursor-pointer hover:bg-fill-1 focus-ring-inset aria-selected:bg-fill-2\", wide && \"coarse:min-h-40\");\n\n return (\n <Popover.Content padding=\"none\" aria-label={t(\"datePicker.chooseRange\", \"Choose a date range\")} className={cn(!wide && \"w-360 max-w-(--available-width)\")}>\n <div className={cn(\"flex\", !wide && \"flex-col\")}>\n <div\n className={cn(\"shrink-0 gap-2 p-6\", wide ? \"flex min-w-160 flex-col hairline-r\" : \"grid grid-cols-2 hairline-b\")}\n role=\"listbox\"\n aria-label={t(\"datePicker.presets\", \"Presets\")}\n aria-orientation={wide ? \"vertical\" : undefined}\n onKeyDown={(e) => moveAmongOptions(e, wide ? 1 : 2)}\n >\n {presets.map((p) => {\n const id = p.id ?? p.label;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected === id}\n tabIndex={selected === id ? 0 : -1}\n className={item}\n onClick={() => onPick(p.range(), id)}\n >\n {p.label}\n </button>\n );\n })}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={selected === null}\n tabIndex={selected === null || !presets.some((p) => (p.id ?? p.label) === selected) ? 0 : -1}\n className={item}\n onClick={() => setCustom(true)}\n >\n {t(\"datePicker.custom\", \"Custom\")}\n </button>\n </div>\n <div className={cn(\"flex flex-col p-12\", !wide && \"items-center\")}>\n <Calendar\n mode=\"range\"\n numberOfMonths={months}\n selected={draft}\n month={first}\n onMonthChange={(m) => setLast(addMonths(m, months - 1))}\n onSelect={(r) => edit(r as DateRange | undefined)}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex items-center gap-8 self-stretch\">\n <IsoField label={t(\"datePicker.startDate\", \"Start date\")} value={draft?.from} onCommit={(d) => typed(\"from\", d)} />\n <span className=\"text-fg-tertiary\" aria-hidden>\n –\n </span>\n <IsoField label={t(\"datePicker.endDate\", \"End date\")} value={draft?.to} onCommit={(d) => typed(\"to\", d)} />\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={!draft?.from}\n onClick={() => {\n if (!draft?.from) return;\n if (unchanged && !custom) onClose();\n else onPick({ from: draft.from, to: draft.to ?? draft.from }, null);\n }}\n >\n {t(\"datePicker.apply\", \"Apply\")}\n </Button>\n </div>\n </div>\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { createElement as t, forwardRef as n, useId as r, useMemo as i, useState as a } from "react";
|
|
4
4
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
5
|
import { art as c, font as l } from "@logicplanes/kaeso-tokens";
|
|
@@ -558,4 +558,4 @@ function X({ seed: e, label: t, art: n, title: r, eyebrow: i, shape: a = "banner
|
|
|
558
558
|
//#endregion
|
|
559
559
|
export { u as a, _ as c, X as i, y as l, K as n, g as o, Y as r, v as s, q as t };
|
|
560
560
|
|
|
561
|
-
//# sourceMappingURL=release-art-
|
|
561
|
+
//# sourceMappingURL=release-art-ZwfFQImt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-art-69WpgVik.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","failed","setFailed","useState","useId","useMemo","className","label","src","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n src?: string | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, src, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const [failed, setFailed] = useState<string | null>(null);\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {src && failed !== src ? (\n <image href={src} width={w} height={h} preserveAspectRatio=\"xMidYMid slice\" onError={() => setFailed(src)} />\n ) : (\n drawn.children?.map(toElement)\n )}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":";;;;;;AAEA,IAAaC,IAAqB;CAAC;CAAW;CAAU;CAAW;CAAS;CAAW;CAAQ;CAAe;AAAO,GAiBxGC,IAAmB;CAAE,QAAQ;EAAE,GAAG;EAAK,GAAG;CAAI;CAAG,MAAM;EAAE,GAAG;EAAK,GAAG;CAAI;AAAE,GAGjFC,IAAI,IACJC,IAAQ;CAAE,IAAID,IAAI;CAAK,IAAIA,IAAI;AAAI;AAEzC,SAASE,EAAK,GAAsB;CAClC,IAAIC,IAAI;CACR,KAAK,IAAIC,IAAI,GAAGA,IAAIC,EAAK,QAAQ,KAE/B,AADA,KAAKA,EAAK,WAAWD,CAAC,GACtB,IAAI,KAAK,KAAKD,GAAG,QAAQ;CAE3B,OAAOA,MAAM;AACf;AAEA,SAASG,EAAO,GAA4B;CAC1C,IAAIC,IAAIC,MAAS;CACjB,aAAa;EACX,IAAKD,IAAI,eAAgB;EACzB,IAAIE,IAAIF;EAGR,OAFA,IAAI,KAAK,KAAKE,IAAKA,MAAM,IAAKA,IAAI,CAAC,GACnC,KAAKA,IAAI,KAAK,KAAKA,IAAKA,MAAM,GAAIA,IAAI,EAAE,KAC/BA,IAAKA,MAAM,QAAS,KAAK;CACpC;AACF;AAEA,SAAgBC,EAAiB,GAAyC;CACxE,IAAI,OAAOC,KAAU,aAAYA,GAAgB,OAAO;CACxD,IAAMC,IAAID;CACV,OACEC,EAAE,YAAY,KACd,OAAOA,EAAE,QAAS,YAClB,OAAO,UAAUA,EAAE,IAAI,KACvBA,EAAE,QAAQ,KACVA,EAAE,QAAQ,cACV,OAAOA,EAAE,SAAU,YAClBd,EAAyC,SAASc,EAAE,KAAK,KAC1D,OAAOA,EAAE,WAAY,YACrB,OAAO,UAAUA,EAAE,OAAO,KAC1BA,EAAE,WAAW,KACbA,EAAE,UAAUC,EAAI,SAAS;AAE7B;AAEA,SAAgBC,EAAiB,IAAqB,KAAK,QAAwB;CACjF,IAAMC,KAAQ,MAAc,KAAK,IAAIC,IAAI,GAAG,KAAK,MAAMC,EAAK,IAAID,CAAC,CAAC;CAClE,OAAO;EACL,SAAS;EACT,MAAM,KAAK,IAAI,YAAY,KAAK,MAAMC,EAAK,IAAI,UAAW,CAAC;EAC3D,OAAOnB,EAAmBiB,EAAKjB,EAAmB,MAAM,MAAM;EAC9D,SAASiB,EAAKF,EAAI,SAAS,MAAM;CACnC;AACF;AAEA,SAAgBK,EAAe,GAAqC,IAAqB,KAAK,QAAwB;CACpH,IAAMC,IAASC,EAAS,MAAM,EAAE,GAC1BC,IAASvB,EAAmB,QAAQ,MAAM,CAACqB,EAAO,MAAM,MAAMG,EAAE,UAAUC,CAAC,CAAC,GAC5EC,IAAWX,EAAI,SAAS,KAAK,GAAG,MAAMT,CAAC,CAAC,CAAC,QAAQ,MAAM,CAACgB,EAAS,MAAM,EAAE,CAAC,CAAC,MAAM,MAAME,EAAE,YAAYlB,CAAC,CAAC,GACvGqB,IAAQ,IAAI,IAAIL,EAAS,KAAK,MAAME,EAAE,IAAI,CAAC,GAC3CP,KAAW,MAAuBW,EAAK,KAAK,IAAIA,EAAK,SAAS,GAAG,KAAK,MAAMT,EAAK,IAAIS,EAAK,MAAM,CAAC,IACnGlB,IAAO,KAAK,IAAI,YAAY,KAAK,MAAMS,EAAK,IAAI,UAAW,CAAC;CAChE,OAAOQ,EAAM,IAAIjB,CAAI,IAAG,IAAQA,IAAO,MAAO;CAC9C,OAAO;EAAE,SAAS;EAAG;EAAM,OAAOO,EAAKM,CAAM,KAAK;EAAW,SAASN,EAAKS,CAAQ,KAAK;CAAE;AAC5F;AAEA,SAAgBG,EAAc,GAA8B;CAC1D,IAAMnB,IAAON,EAAKG,CAAI;CACtB,OAAO;EACL,SAAS;EACT;EACA,OAAOP,EAAmBU,IAAOV,EAAmB,WAAW;EAC/D,UAAUU,MAAS,KAAKK,EAAI,SAAS;CACvC;AACF;AAEA,IAAMe,KAAS,MAAc,KAAK,MAAMZ,IAAI,GAAG,IAAI,KAC7Ca,KAAQ,GAAa,GAAyB,MAAmCC,IAAW;CAAE;CAAK;CAAO;AAAS,IAAI;CAAE;CAAK;AAAM,GAgBpIC,KAAQ,GAAW,GAAW,OAAeC,IAAI/B,EAAM,OAAO,MAAMgC,EAAE,IAAIC,KAAKjC,EAAM,OAAO,IAAI,GAChGkC,KAAa,GAAW,MAAc;CAC1C,IAAMC,KAAMH,EAAE,IAAIC,KAAKjC,EAAM;CAC7B,OAAOmC,KAAM,IAAI,IAAInC,EAAM,KAAK,KAAK,KAAK,IAAImC,IAAKA,CAAE;AACvD,GACMC,KAAU,GAAW,MAAwBR,EAAK,KAAK,EAAE,MAAM,QAAQI,EAAE,GAAG,OAAO,EAAE,GAAG,GAAGH,CAAQ;AAEzG,SAASQ,EAAU,GAAW,GAAW,GAAW,GAAW,GAAc,GAA2B;CACtG,IAAMC,IAAiB,CAAC,GAClBC,IAAOP,EAAE,IAAI,GAAG,CAAC,GACjBxB,IAAI,UAAUwB,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,GAAGL,EAAMI,IAAIT,IAAI,CAAC,EAAE,GAAGK,EAAMM,IAAIX,IAAI,CAAC,EAAE;CAC7E,AAAIU,EAAE,OAAO,GAAI,KAAGM,EAAI,KAAKV,EAAK,QAAQ;EAAE;EAAG;EAAG,OAAON;EAAG,QAAQA;EAAG;CAAK,CAAC,CAAC;CAC9E,IAAMkB,IAAMF,EAAI,SAASG,IAASC;CAClC,QAAQH,GAAR;EACE,KAAK;GACH,EAAI,KAAKX,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,EAAE,GAAGX,EAAE,GAAGA,EAAE,SAASS,EAAE,GAAGE,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAChH;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,IAAIX,EAAE,GAAGA,IAAI,EAAE,GAAGA,IAAI,EAAE,SAASS,IAAIT,EAAE,GAAGW,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAClH;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,UAAU;IAAE,IAAIG,IAAIT,IAAI;IAAG,IAAIW,IAAIX,IAAI;IAAG,GAAGA,IAAI;IAAG,MAAMkB;GAAI,CAAC,CAAC;GAC9E;EACF,KAAK;GACH,EAAI,KAAKZ,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,EAAE,GAAGE,IAAIX,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GACpG;EACF,KAAK;GACH,EAAI,KAAKoB,EAAK,UAAU;IAAE,IAAIG,IAAIT,IAAI;IAAG,IAAIW,IAAIX,IAAI;IAAG,GAAGA,IAAI;IAAG,MAAMkB;GAAI,CAAC,CAAC;GAC9E;EACF,KAAK;GACH,KAAK,IAAIrC,IAAI,GAAGA,IAAI,GAAG,KAAK,EAAI,KAAKyB,EAAK,QAAQ;IAAE,GAAGG,IAAK5B,IAAImB,IAAK;IAAG;IAAG,OAAOA,IAAI;IAAG,QAAQA;IAAG,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GAC9H;EACF,KAAK;GAEH,AADA8B,EAAI,KAAKV,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGF,IAAIT,EAAE,GAAGW,EAAE,GAAGF,IAAIT,IAAI,EAAE,GAAGW,IAAIX,IAAI,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC,GAC5G8B,EAAI,KAAKV,EAAK,QAAQ;IAAE,GAAG,IAAIG,EAAE,GAAGE,IAAIX,EAAE,GAAGS,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,IAAIT,IAAI,EAAE,GAAGW,IAAIX,IAAI,EAAE;IAAI,MAAMkB;IAAK,WAAWhC;GAAE,CAAC,CAAC;GACpH;EACF,SACE,EAAI,KAAKoB,EAAK,QAAQ;GAAE,GAAG,IAAIG,EAAE,GAAGE,EAAE,GAAGX,EAAE,GAAGA,EAAE,SAASS,IAAIT,EAAE,GAAGW,IAAIX,EAAE,GAAGS,EAAE,GAAGE,IAAIX,EAAE;GAAI,MAAMkB;GAAK,WAAWhC;EAAE,CAAC,CAAC;CACxH;CACA,OAAO8B;AACT;AAEA,SAASK,EAAQ,GAAsB;CACrC,IAAMC,oBAAQ,IAAI,IAAY,GACxBC,KAAO,GAAa,MAAgB,GAAGC,EAAI,GAAGC,KAC9CC,KAAW,GAAa,MAAgBlB,EAAKE,GAAGc,IAAM/C,IAAIgD,IAAM,KAAKhD,CAAC,GACtEuC,IAAiB,CAAC,GAClBW,IAAOjB,EAAE,IAAI,GAAG,CAAC;CACvB,KAAK,IAAIkB,IAAI,GAAGA,IAAID,GAAM,KAAK;EAC7B,IAAME,IAAOnB,EAAE,IAAI,GAAG,CAAC;EACvB,KAAK,IAAIoB,IAAU,GAAGA,IAAU,IAAI,KAAW;GAC7C,IAAMN,IAAMd,EAAE,IAAI,GAAGA,EAAE,OAAOmB,CAAI,GAC5BJ,IAAMf,EAAE,IAAI,GAAGA,EAAE,OAAOmB,CAAI,GAC9BE,IAAO;GACX,KAAK,IAAIlD,IAAI,GAAGA,IAAIgD,KAAQE,GAAM,KAAK,KAAK,IAAIC,IAAI,GAAGA,IAAIH,KAAQE,GAAM,KAAK,IAAO,CAACT,EAAM,IAAIC,EAAIC,IAAM3C,GAAG4C,IAAMO,CAAC,CAAC,KAAK,CAACN,EAAQF,IAAM3C,GAAG4C,IAAMO,CAAC;GACnJ,IAAI,CAACD,GAAM;GACX,KAAK,IAAIlD,IAAI,GAAGA,IAAIgD,GAAM,KAAK,KAAK,IAAIG,IAAI,GAAGA,IAAIH,GAAM,KAAK,EAAM,IAAIN,EAAIC,IAAM3C,GAAG4C,IAAMO,CAAC,CAAC;GAC7F,IAAMhD,IAAI0B,EAAE,IAAI,GAAG,CAAC;GACpB,EAAI,KAAK,GAAGK,EAAUL,GAAGc,IAAM/C,GAAGgD,IAAMhD,GAAGoD,IAAOpD,GAAGiC,EAAE,MAAM1B,CAAC,GAAG0B,EAAE,MAAM1B,IAAI0B,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;GAC1F;EACF;CACF;CACA,IAAMuB,IAAUvB,EAAE,QAAQ,KAAM,GAAI;CACpC,KAAK,IAAIc,IAAM,GAAGA,IAAMd,EAAE,MAAM,KAC9B,KAAK,IAAIe,IAAM,GAAGA,IAAMf,EAAE,MAAM,KAAO;EACrC,IAAIY,EAAM,IAAIC,EAAIC,GAAKC,CAAG,CAAC,KAAKC,EAAQF,GAAKC,CAAG,KAAK,CAACf,EAAE,OAAOuB,CAAO,GAAG;EACzE,IAAMjD,IAAI0B,EAAE,IAAI,GAAG,CAAC;EACpB,EAAI,KAAK,GAAGK,EAAUL,GAAGc,IAAM/C,GAAGgD,IAAMhD,GAAGA,GAAGiC,EAAE,MAAM1B,CAAC,GAAG0B,EAAE,MAAM1B,IAAI0B,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;CACrF;CAEF,OAAOM;AACT;AAEA,SAASkB,EAAO,GAAsB;CACpC,IACMC,KAAUzB,EAAE,IAAI,OAAQ,GACxB0B,IAAK1D,EAAM,KAAKD,IAAI,GACpB4D,IAAK3B,EAAE,IAAIyB,IAAS,KACpBG,IAAKF,IAAK,KAAK,MAAO1B,EAAE,KAAK,IAAI,KAAK,IAAI,GAAG2B,IAAKD,CAAE,KAAM3D,IAAI,EAAE,KAAKA,IAAI,IAEzE8D,IAAS7B,EAAE,IAAI,GAAG,CAAC,GACnB8B,IAAQ;EAAC;EAAG;EAAG;EAAG;CAAC;CACzB,KAAK,IAAI3D,IAAI2D,EAAM,SAAS,GAAG3D,IAAI,GAAG,KAAK;EACzC,IAAMmD,IAAI,KAAK,MAAMtB,EAAE,KAAK,KAAK7B,IAAI,EAAE;EACvC,CAAC2D,EAAM3D,IAAI2D,EAAMR,MAAM,CAACQ,EAAMR,MAAMA,GAAGQ,EAAM3D,MAAMA,CAAC;CACtD;CACA,OAAO,MAAM,KAAK,EAAE,QAAQ0D,EAAO,IAAI,GAAG,MACxCjC,EAAK,QAAQ;EAAE,GAAGgC,IAAK,KAAWG;EAAG,GAAGN,IAAS,KAAWM;EAAG,OAAO,MAAO,KAAWA;EAAG,QAAQ,MAAO,KAAWA;EAAG,MAAM/B,EAAE,MAAM8B,EAAMC,MAAMA,CAAC;CAAE,CAAC,CACxJ;AACF;AAEA,SAASC,EAAM,GAAW,GAAe,GAAkB,GAAyB;CAClF,IAAMC,IAAO,KAAK,MAAMjC,EAAE,GAAGA,EAAE,CAAC,GAC1BkC,IAAmB,CAAC,GACtBnC,IAAI,CAACkC,GACL9D,IAAI;CACR,OAAO4B,IAAIkC,IAAM;EACf,IAAME,IAAIC,EAAOjE,IAAIiE,EAAO,WAAWrE;EAGvC,AAFAmE,EAAM,KAAKtC,EAAK,QAAQ;GAAE,GAAGD,EAAMI,CAAC;GAAG,GAAGJ,EAAM,CAACsC,CAAI;GAAG,OAAOE;GAAG,QAAQxC,EAAMsC,IAAO,CAAC;GAAG,MAAMjC,EAAE,MAAM7B,IAAIkE,CAAM;EAAE,CAAC,CAAC,GACvH,KAAKF,GACL,KAAK;CACP;CACA,OAAOvC,EAAK,KAAK,EAAE,WAAW,aAAaI,EAAE,IAAI,EAAE,GAAGA,EAAE,IAAI,EAAE,WAAWsC,EAAM,GAAG,GAAGJ,CAAK;AAC5F;AAEA,SAASK,EAAQ,GAAsB;CACrC,IAAMD,IAAQ;EAAC;EAAG;EAAI;EAAI;EAAK;EAAI;CAAG,CAAC,CAACtC,EAAE,IAAI,GAAG,CAAC,MAAM,GAClDoC,IAAS,MAAM,KAAK,EAAE,QAAQpC,EAAE,IAAI,GAAG,CAAC,EAAE,SAAUjC,IAAI,IAAKiC,EAAE,IAAI,GAAG,CAAC,CAAC,GACxEwC,IAAOxC,EAAE,GAAG,MAAM,GAClByC,IAAI1E,IAAIiC,EAAE,IAAI,GAAG,CAAC,IAAIjC,IAAI,GAC1B2E,IAAK3E,IAAIiC,EAAE,IAAI,KAAK,MAAMhC,EAAM,KAAKyE,KAAK1E,CAAC,GAAGiC,EAAE,OAAO,CAAC,GACxD2C,IAAK5E,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC;CAClC,OAAO;EACLJ,EAAK,QAAQ,CAAC,GAAG,CAACA,EAAK,YAAY,EAAE,IAAI4C,EAAK,GAAG,CAAC5C,EAAK,UAAU;GAAE;GAAI;GAAI;EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EAClFQ,EAAOJ,GAAG,CAACgC,EAAMhC,GAAGsC,GAAOF,GAAQ,CAAC,CAAC,CAAC;EACtCxC,EAAK,KAAK,EAAE,UAAU,QAAQ4C,EAAK,GAAG,GAAG,CAAC5C,EAAK,QAAQ;GAAE,OAAOI,EAAE;GAAG,QAAQA,EAAE;GAAG,MAAMA,EAAE;EAAO,CAAC,GAAGgC,EAAMhC,GAAGsC,IAAQ,IAAIF,GAAQ,CAAC,CAAC,CAAC;CACvI;AACF;AAEA,SAASQ,EAAM,GAAsB;CACnC,IAAMtC,IAAiB,CAAC,GAClBuC,IAAQ7C,EAAE,IAAI,IAAI,EAAE,GACpB8C,IAAM/E,IAAI,KAEVgF,KADS/C,EAAE,IAAIjC,IACE+E,MAAQD,IAAQ,IACjCG,IAAOhD,EAAE,IAAIA,EAAE,QAAQ,KAAM,GAAI,GACjCiD,IAASjD,EAAE,IAAIA,EAAE,QAAQ,KAAM,GAAI,GACnCS,IAAST,EAAE,OAAO,EAAG,IAAIA,EAAE,IAAI,GAAG6C,IAAQ,CAAC,IAAI;CACrD,KAAK,IAAI1E,IAAI,GAAGA,IAAI0E,GAAO,KAAK;EAC9B,IAAMK,IAAOJ,IAAM3E,IAAI4E,GACjBI,IAAQ,MAAM,KAAK,EAAE,QAAQnD,EAAE,IAAI,GAAG,CAAC,EAAE,UAAU;GAAE,GAAGgD,IAAOhD,EAAE,QAAQ,MAAM,GAAG,IAAIiD;GAAQ,GAAGjD,EAAE,QAAQ,IAAK,CAAC;GAAG,GAAGA,EAAE,QAAQ,GAAG,EAAE;EAAE,EAAE,GAC1IoD,IAAS,CAACpD,EAAE,QAAQ,GAAG,IAAI,GAAGA,EAAE,QAAQ,GAAG,IAAI,CAAC,GAChDqD,IAAQ,KAAK,IAAItF,GAAG,KAAK,MAAMmC,EAAUF,GAAGkD,CAAI,IAAInF,IAAI,KAAK,CAAC,IAAI,CAAC,GACnEuF,IAA0B,CAAC;EACjC,KAAK,IAAIvD,IAAIsD,GAAOtD,KAAKC,EAAE,IAAIjC,GAAG,KAAK,GAAG;GACxC,IAAMwF,IAAM,KAAK,IAAI,GAAGxD,IAAIiD,MAAS,MAAM,IAAIC,IAASA,EAAO,GAC3DhD,IAAI;GACR,KAAK,IAAMiB,KAAKiC,GAAO,KAAKjC,EAAE,IAAI,KAAK,IAAI,GAAGnB,IAAImB,EAAE,MAAM,MAAM,IAAIA,EAAE,IAAIA,EAAE,EAAE;GAC9E,IAAMsC,IAAO,KAAK,IAAIzD,IAAI,OAAQqD,EAAO,MAAM,EAAE,IAAI,KAAM,KAAK,IAAIrD,IAAI,OAAQqD,EAAO,MAAM,EAAE,IAAI;GACnG,EAAI,KAAK,CAACrD,GAAGE,IAAIsD,IAAMC,IAAO,OAAQ,MAAOD,EAAI,CAAC;EACpD;EACA,IAAME,IAAM,KAAK,IAAI,GAAGH,EAAI,KAAK,GAAGrD,OAAOA,CAAC,GAAG,IAAK,GAC9CyD,IAAO,KAAK,IAAIX,IAAO/C,EAAE,QAAQ,KAAK,GAAG,GAAGkD,IAAOnF,CAAC,GACpD4F,IAAO,IAAIL,EAAI,KAAK,CAACvD,GAAGE,OAAO,GAAGF,EAAE,GAAGJ,EAAMuD,IAAQjD,IAAIwD,IAAOC,CAAI,GAAG,CAAC,CAAC,KAAK,GAAG;EAEvF,AADApD,EAAI,KAAKV,EAAK,QAAQ;GAAE,GAAG,GAAG+D,EAAK,GAAG3D,EAAE,IAAIjC,EAAE,GAAG4B,EAAMuD,IAAOH,CAAI,EAAE,GAAGM,EAAM,GAAG1D,EAAMuD,IAAOH,CAAI,EAAE;GAAI,MAAM/C,EAAE;EAAO,CAAC,CAAC,GACxHM,EAAI,KACFV,EAAK,QAAQ;GAAE,GAAG+D;GAAM,MAAM;GAAQ,QAAQxF,MAAMsC,IAAST,EAAE,MAAM,CAAC,IAAIA,EAAE,MAAM,CAAC;GAAG,aAAa;GAAG,gBAAgB;GAAS,eAAe;EAAQ,CAAC,CACzJ;CACF;CACA,OAAOM;AACT;AAEA,SAASsD,EAAQ,GAAsB;CACrC,IAEMC,IAASlE,EAAM,KAAIK,EAAE,QAAQ,IAAK,EAAG,CAAC,GACtC8D,IAAQ9D,EAAE,OAAO,EAAG,GACpB+D,IAAmB,CAAC,GACpBC,IAAO,KAAK,KAAKhE,EAAE,IAAI,EAAC,GACxBiE,IAAO,KAAK,KAAKjE,EAAE,IAAI,EAAC;CAC9B,KAAK,IAAIc,IAAM,GAAGA,IAAMkD,GAAM,KAC5B,KAAK,IAAIvB,IAAI,GAAGA,IAAIwB,GAAM,KAAK;EAC7B,IAAMlE,IAAIe,IAAM,IACVb,IAAID,EAAE,KAAKyC,IAAI,KAAK;EAC1B,IAAI3C,EAAKE,GAAGD,GAAGE,IAAI,EAAC,GAAG;EACvB,IAAMiE,IAAIlE,EAAE,OAAO,EAAG,IAClB,IAAID,IAAI,GAAE,GAAGE,EAAE,eAAmBF,EAAE,GAAGE,IAAI,GAAE,GAAGF,IAAI,GAAE,GAAGE,IAAI,GAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI,OAC/F,IAAIF,IAAI,GAAE,GAAGE,EAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI,GAAE,GAAGF,EAAE,GAAGE,IAAI,GAAE,eAAmBF,IAAI,GAAE,GAAGE,IAAI;EACnG,EAAM,KAAKL,EAAK,QAAQ,EAAE,KAAE,CAAC,CAAC;CAChC;CAEF,IAAMU,IAAM,CAACV,EAAK,KAAK;EAAE,MAAM;EAAQ,QAAQI,EAAE,MAAM,CAAC;EAAG,aAAa6D;CAAO,GAAGE,CAAK,CAAC;CAExF,OADID,KAAOxD,EAAI,KAAKV,EAAK,KAAK;EAAE,MAAM;EAAQ,QAAQI,EAAE,MAAM,CAAC;EAAG,aAAaL,EAAMkE,IAAS,GAAI;CAAE,GAAGE,CAAK,CAAC,GACtGzD;AACT;AAEA,SAAS6D,EAAU,GAAW,GAAY,GAAoB;CAC5D,IAAIC,IAAO;CACX,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK;EAC5B,IAAM,IAAK,IAAI,MAAO,KAAK,KAAK;EAChC,IAAO,KAAK,IAAIA,GAAM,KAAK,MAAM1B,IAAK1E,EAAM,KAAK,KAAK,IAAI,CAAC,GAAG2E,KAAM3C,EAAE,IAAIhC,EAAM,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;CACpG;CACA,OAAO8B,EAAKE,GAAG0C,GAAIC,CAAE,IAAI,IAAIyB;AAC/B;AAEA,SAASC,EAAK,GAAsB;CAClC,IAAM/D,IAAiB,CAAC,GAClBgE,IAAUtE,EAAE,IAAI,GAAG,CAAC,GACpBuE,IAA4B;EAChC,CAACxG,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC,GAAG,CAAC;EAC5B,CAACjC,IAAIiC,EAAE,IAAI,IAAIA,EAAE,OAAO,CAAC,GAAGA,EAAE,CAAC;EAC/B,CAACA,EAAE,GAAGjC,IAAIiC,EAAE,IAAI,GAAGA,EAAE,OAAO,CAAC,CAAC;EAC9B,CAACA,EAAE,GAAG,CAAC;EACP,CAACA,EAAE,GAAGA,EAAE,CAAC;EACT,CAAC,GAAG,CAAC;CACP;CACA,KAAK,IAAI7B,IAAIoG,EAAM,SAAS,GAAGpG,IAAI,GAAG,KAAK;EACzC,IAAMmD,IAAI,KAAK,MAAMtB,EAAE,KAAK,KAAK7B,IAAI,EAAE;EACvC,CAACoG,EAAMpG,IAAIoG,EAAMjD,MAAM,CAACiD,EAAMjD,MAAM,CAACtB,EAAE,GAAG,CAAC,GAAGuE,EAAMpG,MAAM,CAAC6B,EAAE,GAAG,CAAC,CAAC;CACpE;CACA,IAAIwE,IAAS;CACb,KAAK,IAAM,CAAC9B,GAAIC,MAAO4B,GAAO;EAC5B,IAAIC,MAAWF,GAAS;EACxB,IAAMG,IAAQ1G,IAAI,IAAKiC,EAAE,IAAI,GAAG,CAAC,GAC3B0E,IAAO,KAAK,OAAOP,EAAUnE,GAAG0C,GAAIC,CAAE,IAAI5E,IAAI,KAAK0G,CAAI,GACvDE,IAAQ,KAAK,IAAID,GAAM1E,EAAE,IAAI,GAAG,EAAE,CAAC;EACzC,IAAI2E,IAAQ,GAAG;EACf,IAAMtC,IAASrC,EAAE,IAAI,GAAG,CAAC,GACnB4E,IAAS5E,EAAE,OAAO,EAAG;EAC3B,KAAK,IAAI7B,IAAIwG,GAAOxG,KAAK,GAAG,KAAK,EAAI,KAAKyB,EAAK,UAAU;GAAE;GAAI;GAAI,GAAGzB,IAAIsG;GAAM,MAAMtG,MAAM,KAAKyG,IAAS5E,EAAE,SAASA,EAAE,MAAM7B,IAAIkE,CAAM;EAAE,CAAC,CAAC;EAC3I,KAAU;CACZ;CACA,OAAO/B;AACT;AAEA,IAAMuE,IAAS;AAEf,SAASC,EAAY,GAAsB;CACzC,IAAMxE,IAAiB,CAAC,GAClBoC,IAAK1C,EAAE,IAAIA,EAAE,IAAI,IAAIjC,IAAIiC,EAAE,IAAI,GAAG,CAAC,GACnC2C,IAAK3C,EAAE,IAAI,IAAIjC,IAAIiC,EAAE,IAAI,IAAI,CAAC,GAC9B+E,IAAO/E,EAAE,QAAQ,IAAI,EAAE,GACvBgF,IAAO;EAAC;EAAG;EAAI;CAAE,CAAC,CAAChF,EAAE,IAAI,GAAG,CAAC,MAAM,IACnCiF,IAASjF,EAAE,OAAO,GAAI,GACtBkF,IAAQ,KAAK,MAAMlF,EAAE,GAAGA,EAAE,CAAC;CACjC,KAAK,IAAI7B,IAAI,IAAK,KAAK;EACrB,IAAMsE,IAAIsC,IAAO,KAAK,KAAK5G,CAAC;EAC5B,IAAIsE,IAAIyC,GAAO;EACf,IAAMnF,IAAI2C,IAAKD,IAAI,KAAK,IAAItE,IAAI0G,CAAM,GAChC5E,IAAI0C,IAAKF,IAAI,KAAK,IAAItE,IAAI0G,CAAM,GAChC1D,IAAO4D,KAAQ,KAAM,MAAO,KAAK,IAAI,GAAGtC,KAAKzC,EAAE,IAAI,EAAE;EAE3D,IADID,IAAI,CAACoB,KAAQpB,IAAIC,EAAE,IAAImB,KAAQlB,IAAI,CAACkB,KAAQlB,IAAID,EAAE,IAAImB,KACtDrB,EAAKE,GAAGD,GAAGE,CAAC,KAAKkE,EAAUnE,GAAGD,GAAGE,CAAC,IAAIkB,IAAOpD,IAAI,GAAG;EACxD,IAAMoH,IAAOF,IAAS,KAAK,MAAMxC,KAAK1E,IAAI,IAAI,IAAI,IAAI,KAAK,MAAQI,IAAI6G,IAAQA,IAAQ,CAAC;EACxF,EAAI,KAAKpF,EAAK,UAAU;GAAE,IAAID,EAAMI,CAAC;GAAG,IAAIJ,EAAMM,CAAC;GAAG,GAAGN,EAAMwB,CAAI;GAAG,MAAMnB,EAAE,MAAMmF,CAAI;EAAE,CAAC,CAAC;CAC9F;CACA,OAAO7E;AACT;AAEA,SAAS8E,EAAI,GAAW,GAAmB;CACzC,OAAOlE,IAAIkE,EAAIlE,GAAG5C,IAAI4C,CAAC,IAAI5C;AAC7B;AAEA,SAAS+G,EAAM,GAAsB;CACnC,IAAM/E,IAAiB,CAAC,GAClBoC,IAAK1C,EAAE,IAAIA,EAAE,IAAI,GACjB2C,IAAK3C,EAAE,IAAI,GACXsF,IAAStF,EAAE,IAAI,IAAIjC,GACnBwH,IAAMvF,EAAE,IAAI,GAAG,EAAE,GACnBwF,IAAQxF,EAAE,IAAI,GAAGuF,IAAM,CAAC;CAC5B,OAAOH,EAAIG,GAAKC,CAAK,MAAM,IAAG,IAAQxF,EAAE,IAAI,GAAGuF,IAAM,CAAC;CACtD,IAAME,IAASzF,EAAE,OAAO,EAAG,IAAI,IAAI;CACnC,KAAK,IAAI+B,IAAI,GAAGA,IAAI0D,GAAQ,KAAK;EAC/B,IAAMC,IAAMF,IAAQxF,EAAE,QAAQ,KAAM,IAAI,GAClC2F,KAAKJ,IAAMC,KAASA,GACpBI,IAASL,IAAMC,IAAQE,GACvBG,IAAQL,IAAQJ,EAAIG,GAAKC,CAAK,GAC9BM,IAAQD,IAAQ,KAChBE,IAAmB,CAAC,GACpBC,IAASV,KAAUvD,MAAM,IAAI,IAAI/B,EAAE,QAAQ,IAAK,GAAI,KAAM4F;EAChE,KAAK,IAAIzH,IAAI,GAAGA,KAAK2H,GAAO,KAAK;GAC/B,IAAMxH,IAAKH,IAAI2H,IAASD,IAAQ,KAAK,KAAK,GACpC9F,KAAKwF,IAAMC,KAAS,KAAK,IAAIlH,CAAC,IAAIoH,IAAM,KAAK,IAAIC,IAAIrH,CAAC,GACtD2B,KAAKsF,IAAMC,KAAS,KAAK,IAAIlH,CAAC,IAAIoH,IAAM,KAAK,IAAIC,IAAIrH,CAAC;GAC5D,EAAO,KAAK,GAAGqB,EAAM+C,IAAK3C,IAAIiG,CAAK,EAAE,GAAGrG,EAAMgD,IAAK1C,IAAI+F,CAAK,GAAG;EACjE;EACA,IAAM9B,IAAI,IAAI6B,EAAO,KAAK,GAAG,EAAE;EAC/B,EAAI,KAAKnG,EAAK,QAAQ;GAAE;GAAG,MAAMI,EAAE,MAAM+B,CAAC;GAAG,UAAU;EAAU,CAAC,CAAC;CACrE;CACA,OAAOzB;AACT;AAEA,IAAM2F,IAAQ;CAAE;CAAS;CAAQ;CAAS;CAAO;CAAS;CAAM;CAAa;AAAM,GAS7EC,KAAa,MAAyBtH,EAAI,SAASuH,EAAK,UAAUvH,EAAI,SAAS,WAAWA,EAAI,SAAS;AAE7G,SAAgBwH,EAAe,GAAsB;CACnD,OAAO;EAAE,OAAOxH,EAAI,QAAQsH,EAAUC,CAAI,CAAC,CAAC,OAAO,CAAC;EAAM,SAAS;GAAE,GAAGpI;GAAG,QAAQ;EAAG;EAAG,OAAO;GAAE,GAAG;GAAO,QAAQA;EAAE;CAAE;AAC1H;AAEA,SAAgBsI,EAAe,GAAsB,IAAuB,CAAC,GAAY;CACvF,IAAM,EAAE,MAAG,SAAMvI,EAAiBwI,EAAQ,SAAS,WAC7CtH,IAAOX,EAAO8H,EAAK,IAAI,GACvBI,KAAW,GAAY,MAAe7E,IAAK1C,EAAK,KAAK2C,IAAKD,IAC1D8E,KAAO,GAAY,MAAe,KAAK,IAAI7E,GAAID,IAAK,KAAK,MAAM1C,EAAK,KAAK2C,IAAKD,IAAK,EAAE,CAAC,GACtF+E,IAAUP,EAAUC,CAAI,GACxBO,IAAQN,EAAeD,CAAI,GAC3BQ,IAAS/H,EAAI,QAAQ6H,EAAQ,SAC7BG,IAAmB,CAAC,GAAGH,EAAQ,MAAM;CAC3C,KAAK,IAAItI,IAAIyI,EAAO,SAAS,GAAGzI,IAAI,GAAG,KAAK;EAC1C,IAAMmD,IAAI,KAAK,MAAMtC,EAAK,KAAKb,IAAI,EAAE;EACrC,CAACyI,EAAOzI,IAAIyI,EAAOtF,MAAM,CAACsF,EAAOtF,MAAMqF,EAAO,MAAMC,EAAOzI,MAAMwI,EAAO,IAAI;CAC9E;CACA,IAAME,IAASP,EAAQ,YAAY,OAC7BQ,IAAiB;EACrB;EACA;EACA,MAAM3E,IAAIpE;EACV,MAAMG,IAAIH;EACV;EACA;EACA;EACA,SAAS,MAAMiB,EAAK,IAAIK;EACxB,QAAQsH,EAAO;EACf,QAAQ,MAAMC,GAASzI,IAAIyI,EAAO,SAAUA,EAAO,UAAUA,EAAO,WAAWD,EAAO;EACtF,KAAK,MAAS,GAAGE,EAAO,GAAGE;CAC7B,GACMC,IAAOF,EAAO,GAAG,OAAO,GACxBG,IAAQhB,EAAME,EAAK,MAAM,CAACW,CAAM,GAChC1I,IAAkB,CAAC;CAsBzB,OArBIkI,EAAQ,WACVlI,EAAK,KAAK;EACR,KAAK;EACL,OAAO;GACL,GAAGsI,EAAM,QAAQ;GACjB,GAAGxI,IAAIwI,EAAM,QAAQ;GACrB,MAAMA,EAAM;GACZ,aAAa;GACb,UAAU;GACV,YAAY;GACZ,eAAe;GACf,YAAYQ,EAAK;EACnB;EACA,MAAMZ,EAAQ;CAChB,CAAC,GACCA,EAAQ,SACVlI,EAAK,KAAK;EACR,KAAK;EACL,OAAO;GAAE,GAAGsI,EAAM,MAAM;GAAG,GAAGxI,IAAIwI,EAAM,MAAM;GAAQ,MAAMA,EAAM;GAAO,UAAU;GAAI,YAAY;GAAK,eAAe;GAAM,YAAYQ,EAAK;EAAK;EACnJ,MAAMZ,EAAQ;CAChB,CAAC,GACI1G,EAAK,OAAO;EAAE,OAAO;EAA8B,SAAS,OAAOuC,EAAE,GAAGjE;CAAI,GAAG;EACpF0B,EAAK,QAAQ,CAAC,GAAG,CACfA,EAAK,QAAQ;GAAE,IAAIoH;GAAM,WAAW;GAAkB,GAAG;GAAG,GAAG;GAAG,OAAO7E;GAAG,QAAQjE;EAAE,GAAG,CACvF0B,EAAK,QAAQ;GAAE,OAAOuC;GAAG,QAAQjE;GAAG,MAAM;EAAQ,CAAC,GACnD0B,EAAK,WAAW;GAAE,IAAI;GAAG,IAAI1B;GAAG,IAAIF,EAAM;GAAI,IAAIA,EAAM;GAAI,MAAM;EAAQ,CAAC,CAC7E,CAAC,CACH,CAAC;EACD4B,EAAK,QAAQ;GAAE,OAAOuC;GAAG,QAAQjE;GAAG,MAAMyI,EAAO;EAAK,CAAC;EACvD,GAAGM;EACH,GAAG7I;CACL,CAAC;AACH;AAEA,IAAM+I,oBAAa,IAAI,IAAI,CAAC,WAAW,WAAW,CAAC,GAC7CC,KAAY,MAAkBD,EAAW,IAAIJ,CAAI,IAAIA,IAAOA,EAAK,QAAQ,WAAW,MAAM,IAAIM,EAAE,YAAY,GAAG,GAC/GC,KAAa,MAAiBlJ,EAAK,QAAQ,MAAM,OAAO,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC,QAAQ,MAAM,QAAQ;AAElI,SAAgBmJ,EAAa,GAAoB;CAC/C,IAAMC,IAAQ,OAAO,QAAQzI,EAAE,KAAK,CAAC,CAClC,KAAK,CAAC4G,GAAGhH,OAAO,IAAIyI,EAASzB,CAAC,EAAE,IAAI2B,EAAU,OAAO3I,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5D,KAAK,EAAE,GACJmF,IAAQ/E,EAAE,SAAS,KAAA,KAAiCA,EAAE,YAAY,CAAC,EAAA,CAAG,IAAIwI,CAAY,CAAC,CAAC,KAAK,EAAE,IAAhED,EAAUvI,EAAE,IAAI;CACrD,OAAO+E,IAAQ,IAAI/E,EAAE,MAAMyI,EAAM,GAAG1D,EAAM,IAAI/E,EAAE,IAAI,KAAK,IAAIA,EAAE,MAAMyI,EAAM;AAC7E;;;ACjdA,IAAaC,IAA6B,EACxC,OAAO;CACL,QAAQ,EAAE,SAAS,eAAe;CAClC,MAAM,EAAE,SAAS,cAAc;AACjC,EACF,GACaC,IAAqC,EAAE,OAAO,SAAS;AAapE,SAASC,EAAU,GAAY,GAAwB;CACrD,OAAOC,EAAc7I,EAAE,KAAK;EAAE,GAAGA,EAAE;EAAO;CAAI,GAAGA,EAAE,QAAQA,EAAE,UAAU,IAAI4I,CAAS,CAAC;AACvF;AAEA,IAAaE,IAA6B,kBAA2C,SACnF,EAAE,SAAM,UAAO,QAAK,QAAK,UAAO,YAAS,WAAQ,UAAU,gBAC3D,GACA;CACA,IAAM,EAAE,MAAG,SAAM/J,EAAiBgK,IAC5B,CAACC,GAAQC,KAAaC,EAAwB,IAAI,GAClDpB,IAAS,MAAMqB,EAAM,CAAC,CAAC,QAAQ,iBAAiB,EAAE,KAClD/B,IAAOvH,KAAOc,EAAcnB,CAAI,GAChC0I,IAAQkB,QAAc9B,EAAeF,GAAM;EAAE;EAAO,UAAUU;CAAO,CAAC,GAAG;EAACV;EAAM2B;EAAOjB;CAAM,CAAC,GAC9FzI,IAAOgI,EAAeD,CAAI;CAChC,OACE,kBAAC,QAAD;EAAM,WAAWvI,EAAG,yBAAyBwK,CAAS;EAAtD,UAAA,CACE,kBAAC,OAAD;GACO;GACL,SAAS,OAAOjG,EAAE,GAAGjE;GACrB,MAAK;GACL,cAAYmK;GACZ,qBAAoB;GACpB,WAAWzK,EAAG,6CAA6C6J,EAA2B,MAAMK,EAAM,CAAC,OAAO;GAN5G,UAAA;IAQGQ,KAAOP,MAAWO,IACjB,kBAAC,SAAD;KAAO,MAAMA;KAAK,OAAOnG;KAAG,QAAQjE;KAAG,qBAAoB;KAAiB,eAAe8J,EAAUM,CAAG;IAAI,CAAA,IAE5GrB,EAAM,UAAU,IAAIU,CAAS;IAE9BY,KACC,kBAAC,QAAD;KACE,GAAGnK,EAAK,QAAQ;KAChB,GAAGF,IAAIE,EAAK,QAAQ;KACpB,MAAMA,EAAK;KACX,aAAa;KACb,UAAU;KACV,YAAY;KACZ,eAAe;KACf,YAAY8I,EAAK;KAEhB,UAAAqB;IACG,CAAA;IAEPC,KACC,kBAAC,QAAD;KAAM,GAAGpK,EAAK,MAAM;KAAG,GAAGF,IAAIE,EAAK,MAAM;KAAQ,MAAMA,EAAK;KAAO,UAAU;KAAI,YAAY;KAAK,eAAe;KAAM,YAAY8I,EAAK;KACrI,UAAAsB;IACG,CAAA;GAEL;EACL,CAAA,GAAA,kBAAC,QAAD;GAAM,eAAA;GAAY,WAAU;EAAiE,CAAA,CACzF;;AAEV,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;AAWpE,SAAgBC,EAAc,EAAE,SAAM,UAAO,QAAK,UAAO,YAAS,WAAQ,YAA0C;CAClH,IAAM,EAAE,MAAG,SAAM3K,EAAiBgK,IAC5Bb,IAAQZ,EAAezH,KAAOc,EAAcnB,CAAI,GAAG;EAAE;EAAO;EAAO;EAAS,UAAU;CAAM,CAAC;CACnG,OAAOgJ,EAAa;EAAE,GAAGN;EAAO,OAAO;GAAE,GAAGA,EAAM;GAAO,OAAO9E,IAAI;GAAG,QAAQjE,IAAI;GAAG,MAAM;GAAO,WAAWmK;EAAM;CAAE,CAAC;AACzH"}
|
|
1
|
+
{"version":3,"file":"release-art-ZwfFQImt.js","names":["cn","RELEASE_ART_STYLES","RELEASE_ART_VIEW","U","CLEAR","hash","h","i","text","random","a","seed","t","isReleaseArtSpec","value","v","art","randomReleaseArt","pick","n","next","nextReleaseArt","recent","previous","styles","p","s","palettes","seeds","list","releaseArtFor","round","node","children","open","x","c","y","clearEdge","dy","masked","primitive","out","kind","ink","accent","fill","bauhaus","taken","key","col","row","blocked","bigs","b","size","attempt","free","j","density","albers","margin","lo","hi","x0","levels","order","l","bands","diag","rects","w","widths","offset","angle","stripes","clip","r","cx","cy","waves","lines","top","gapY","peak","spread","base","bumps","ripple","start","raw","env","fine","max","lift","line","truchet","stroke","inner","paths","cols","rows","d","clearance","best","arcs","anchors","spots","placed","band","room","count","hollow","GOLDEN","phyllotaxis","step","arms","banded","reach","tone","gcd","spiro","radius","big","small","layers","pen","k","extent","turns","steps","points","scale","STYLE","paletteOf","spec","releaseArtText","drawReleaseArt","options","between","int","palette","place","ground","colors","prefix","canvas","name","mask","drawn","font","KEEP_CAMEL","attrName","m","escapeXml","serializeArt","attrs","KAESO_RELEASE_ART_VARIANTS","KAESO_RELEASE_ART_DEFAULT_VARIANTS","toElement","createElement","ReleaseArt","shape","failed","setFailed","useState","useId","useMemo","className","label","src","eyebrow","title","releaseArtSvg"],"sources":["../../src/components/release-art/drawing.ts","../../src/components/release-art/release-art.tsx"],"sourcesContent":["import { art, font } from \"@logicplanes/kaeso-tokens\";\n\nexport const RELEASE_ART_STYLES = [\"bauhaus\", \"albers\", \"stripes\", \"waves\", \"truchet\", \"arcs\", \"phyllotaxis\", \"spiro\"] as const;\nexport type ReleaseArtStyle = (typeof RELEASE_ART_STYLES)[number];\n\nexport interface ReleaseArtSpec {\n version: 1;\n seed: number;\n style: ReleaseArtStyle;\n palette: number;\n}\n\nexport interface ArtNode {\n tag: string;\n attrs: Record<string, string | number>;\n children?: ArtNode[] | undefined;\n text?: string | undefined;\n}\n\nexport const RELEASE_ART_VIEW = { banner: { w: 640, h: 360 }, wide: { w: 840, h: 360 } } as const;\nexport type ReleaseArtShape = keyof typeof RELEASE_ART_VIEW;\n\nconst U = 40;\nconst CLEAR = { rx: U * 7.5, ry: U * 7.5 };\n\nfunction hash(text: string): number {\n let h = 2166136261;\n for (let i = 0; i < text.length; i++) {\n h ^= text.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nfunction random(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport function isReleaseArtSpec(value: unknown): value is ReleaseArtSpec {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as Record<string, unknown>;\n return (\n v.version === 1 &&\n typeof v.seed === \"number\" &&\n Number.isInteger(v.seed) &&\n v.seed >= 0 &&\n v.seed <= 0xffffffff &&\n typeof v.style === \"string\" &&\n (RELEASE_ART_STYLES as readonly string[]).includes(v.style) &&\n typeof v.palette === \"number\" &&\n Number.isInteger(v.palette) &&\n v.palette >= 0 &&\n v.palette < art.palettes.length\n );\n}\n\nexport function randomReleaseArt(next: () => number = Math.random): ReleaseArtSpec {\n const pick = (n: number) => Math.min(n - 1, Math.floor(next() * n));\n return {\n version: 1,\n seed: Math.min(0xffffffff, Math.floor(next() * 0x100000000)),\n style: RELEASE_ART_STYLES[pick(RELEASE_ART_STYLES.length)] ?? \"bauhaus\",\n palette: pick(art.palettes.length),\n };\n}\n\nexport function nextReleaseArt(previous: readonly ReleaseArtSpec[], next: () => number = Math.random): ReleaseArtSpec {\n const recent = previous.slice(-3);\n const styles = RELEASE_ART_STYLES.filter((s) => !recent.some((p) => p.style === s));\n const palettes = art.palettes.map((_, i) => i).filter((i) => !previous.slice(-4).some((p) => p.palette === i));\n const seeds = new Set(previous.map((p) => p.seed));\n const pick = <T>(list: readonly T[]) => list[Math.min(list.length - 1, Math.floor(next() * list.length))];\n let seed = Math.min(0xffffffff, Math.floor(next() * 0x100000000));\n while (seeds.has(seed)) seed = (seed + 1) >>> 0;\n return { version: 1, seed, style: pick(styles) ?? \"bauhaus\", palette: pick(palettes) ?? 0 };\n}\n\nexport function releaseArtFor(text: string): ReleaseArtSpec {\n const seed = hash(text);\n return {\n version: 1,\n seed,\n style: RELEASE_ART_STYLES[seed % RELEASE_ART_STYLES.length] ?? \"bauhaus\",\n palette: (seed >>> 8) % art.palettes.length,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst node = (tag: string, attrs: ArtNode[\"attrs\"], children?: ArtNode[]): ArtNode => (children ? { tag, attrs, children } : { tag, attrs });\n\ninterface Canvas {\n w: number;\n h: number;\n cols: number;\n rows: number;\n next: () => number;\n between: (lo: number, hi: number) => number;\n int: (lo: number, hi: number) => number;\n chance: (p: number) => boolean;\n ground: string;\n color: (i: number) => string;\n id: (name: string) => string;\n}\n\nconst open = (c: Canvas, x: number, y: number) => (x / CLEAR.rx) ** 2 + ((c.h - y) / CLEAR.ry) ** 2 < 1;\nconst clearEdge = (c: Canvas, y: number) => {\n const dy = (c.h - y) / CLEAR.ry;\n return dy >= 1 ? 0 : CLEAR.rx * Math.sqrt(1 - dy * dy);\n};\nconst masked = (c: Canvas, children: ArtNode[]) => node(\"g\", { mask: `url(#${c.id(\"clear\")})` }, children);\n\nfunction primitive(c: Canvas, x: number, y: number, s: number, fill: string, accent: string): ArtNode[] {\n const out: ArtNode[] = [];\n const kind = c.int(0, 7);\n const t = `rotate(${c.int(0, 3) * 90} ${round(x + s / 2)} ${round(y + s / 2)})`;\n if (c.chance(0.55)) out.push(node(\"rect\", { x, y, width: s, height: s, fill }));\n const ink = out.length ? accent : fill;\n switch (kind) {\n case 0:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}A${s} ${s} 0 0 1 ${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 1:\n out.push(node(\"path\", { d: `M${x} ${y + s}A${s / 2} ${s / 2} 0 0 1 ${x + s} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 2:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 2, fill: ink }));\n break;\n case 3:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n break;\n case 4:\n out.push(node(\"circle\", { cx: x + s / 2, cy: y + s / 2, r: s / 4, fill: ink }));\n break;\n case 5:\n for (let i = 0; i < 3; i++) out.push(node(\"rect\", { x: x + (i * s) / 3, y, width: s / 6, height: s, fill: ink, transform: t }));\n break;\n case 6:\n out.push(node(\"path\", { d: `M${x} ${y}L${x + s} ${y}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n out.push(node(\"path\", { d: `M${x} ${y + s}L${x + s} ${y + s}L${x + s / 2} ${y + s / 2}Z`, fill: ink, transform: t }));\n break;\n default:\n out.push(node(\"path\", { d: `M${x} ${y}A${s} ${s} 0 0 1 ${x + s} ${y + s}L${x} ${y + s}Z`, fill: ink, transform: t }));\n }\n return out;\n}\n\nfunction bauhaus(c: Canvas): ArtNode[] {\n const taken = new Set<string>();\n const key = (col: number, row: number) => `${col},${row}`;\n const blocked = (col: number, row: number) => open(c, col * U, (row + 1) * U);\n const out: ArtNode[] = [];\n const bigs = c.int(2, 4);\n for (let b = 0; b < bigs; b++) {\n const size = c.int(2, 3);\n for (let attempt = 0; attempt < 20; attempt++) {\n const col = c.int(0, c.cols - size);\n const row = c.int(0, c.rows - size);\n let free = true;\n for (let i = 0; i < size && free; i++) for (let j = 0; j < size && free; j++) free = !taken.has(key(col + i, row + j)) && !blocked(col + i, row + j);\n if (!free) continue;\n for (let i = 0; i < size; i++) for (let j = 0; j < size; j++) taken.add(key(col + i, row + j));\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, size * U, c.color(a), c.color(a + c.int(1, 3))));\n break;\n }\n }\n const density = c.between(0.55, 0.85);\n for (let col = 0; col < c.cols; col++) {\n for (let row = 0; row < c.rows; row++) {\n if (taken.has(key(col, row)) || blocked(col, row) || !c.chance(density)) continue;\n const a = c.int(0, 3);\n out.push(...primitive(c, col * U, row * U, U, c.color(a), c.color(a + c.int(1, 3))));\n }\n }\n return out;\n}\n\nfunction albers(c: Canvas): ArtNode[] {\n const side = U * 6;\n const margin = (c.h - side) / 2;\n const lo = CLEAR.rx - U / 2;\n const hi = c.w - margin - side;\n const x0 = lo + Math.round((c.next() * Math.max(0, hi - lo)) / (U / 2)) * (U / 2);\n const unit = side / 20;\n const levels = c.int(3, 4);\n const order = [0, 1, 2, 3];\n for (let i = order.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [order[i], order[j]] = [order[j] ?? j, order[i] ?? i];\n }\n return Array.from({ length: levels }, (_, l) =>\n node(\"rect\", { x: x0 + 2 * unit * l, y: margin + 3 * unit * l, width: side - 4 * unit * l, height: side - 4 * unit * l, fill: c.color(order[l] ?? l) }),\n );\n}\n\nfunction bands(c: Canvas, angle: number, widths: number[], offset: number): ArtNode {\n const diag = Math.hypot(c.w, c.h);\n const rects: ArtNode[] = [];\n let x = -diag;\n let i = 0;\n while (x < diag) {\n const w = widths[i % widths.length] ?? U;\n rects.push(node(\"rect\", { x: round(x), y: round(-diag), width: w, height: round(diag * 2), fill: c.color(i + offset) }));\n x += w;\n i += 1;\n }\n return node(\"g\", { transform: `translate(${c.w / 2} ${c.h / 2}) rotate(${angle})` }, rects);\n}\n\nfunction stripes(c: Canvas): ArtNode[] {\n const angle = [0, 90, 45, -45, 30, -60][c.int(0, 5)] ?? 0;\n const widths = Array.from({ length: c.int(5, 9) }, () => (U / 2) * c.int(1, 5));\n const clip = c.id(\"disc\");\n const r = U * c.int(2, 3) + U / 2;\n const cx = U * c.int(Math.ceil((CLEAR.rx + r) / U), c.cols - 2);\n const cy = U * c.int(3, c.rows - 3);\n return [\n node(\"defs\", {}, [node(\"clipPath\", { id: clip }, [node(\"circle\", { cx, cy, r })])]),\n masked(c, [bands(c, angle, widths, 0)]),\n node(\"g\", { clipPath: `url(#${clip})` }, [node(\"rect\", { width: c.w, height: c.h, fill: c.ground }), bands(c, angle + 90, widths, 1)]),\n ];\n}\n\nfunction waves(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const lines = c.int(14, 18);\n const top = U * 2.5;\n const bottom = c.h - U;\n const gapY = (bottom - top) / (lines - 1);\n const peak = c.w * c.between(0.58, 0.74);\n const spread = c.w * c.between(0.09, 0.14);\n const accent = c.chance(0.6) ? c.int(2, lines - 3) : -1;\n for (let i = 0; i < lines; i++) {\n const base = top + i * gapY;\n const bumps = Array.from({ length: c.int(3, 5) }, () => ({ x: peak + c.between(-1.2, 1.2) * spread, h: c.between(0.3, 1), s: c.between(9, 22) }));\n const ripple = [c.between(0, 6.28), c.between(0, 6.28)];\n const start = Math.max(U, Math.ceil((clearEdge(c, base) + U / 2) / 4) * 4);\n const raw: [number, number][] = [];\n for (let x = start; x <= c.w - U; x += 4) {\n const env = Math.exp(-((x - peak) ** 2) / (2 * spread * spread));\n let y = 0;\n for (const b of bumps) y += b.h * Math.exp(-((x - b.x) ** 2) / (2 * b.s * b.s));\n const fine = Math.sin(x * 0.21 + (ripple[0] ?? 0)) * 0.6 + Math.sin(x * 0.53 + (ripple[1] ?? 0)) * 0.4;\n raw.push([x, y * env + fine * 0.04 * (0.15 + env)]);\n }\n const max = Math.max(...raw.map(([, y]) => y), 0.001);\n const lift = Math.min(gapY * c.between(2.4, 4.4), base - U);\n const line = `M${raw.map(([x, y]) => `${x} ${round(base - (y / max) * lift)}`).join(\"L\")}`;\n out.push(node(\"path\", { d: `${line}L${c.w - U} ${round(base + gapY)}L${start} ${round(base + gapY)}Z`, fill: c.ground }));\n out.push(\n node(\"path\", { d: line, fill: \"none\", stroke: i === accent ? c.color(1) : c.color(0), strokeWidth: 2, strokeLinejoin: \"round\", strokeLinecap: \"round\" }),\n );\n }\n return out;\n}\n\nfunction truchet(c: Canvas): ArtNode[] {\n const t = U * 2;\n const h = t / 2;\n const stroke = round(t * c.between(0.2, 0.3));\n const inner = c.chance(0.5);\n const paths: ArtNode[] = [];\n const cols = Math.ceil(c.w / t);\n const rows = Math.ceil(c.h / t);\n for (let col = 0; col < cols; col++) {\n for (let r = 0; r < rows; r++) {\n const x = col * t;\n const y = c.h - (r + 1) * t;\n if (open(c, x, y + t)) continue;\n const d = c.chance(0.5)\n ? `M${x + h} ${y}A${h} ${h} 0 0 1 ${x} ${y + h}M${x + t} ${y + h}A${h} ${h} 0 0 0 ${x + h} ${y + t}`\n : `M${x + h} ${y}A${h} ${h} 0 0 0 ${x + t} ${y + h}M${x} ${y + h}A${h} ${h} 0 0 1 ${x + h} ${y + t}`;\n paths.push(node(\"path\", { d }));\n }\n }\n const out = [node(\"g\", { fill: \"none\", stroke: c.color(0), strokeWidth: stroke }, paths)];\n if (inner) out.push(node(\"g\", { fill: \"none\", stroke: c.color(1), strokeWidth: round(stroke * 0.34) }, paths));\n return out;\n}\n\nfunction clearance(c: Canvas, cx: number, cy: number): number {\n let best = Infinity;\n for (let i = 0; i <= 90; i++) {\n const a = (i / 90) * (Math.PI / 2);\n best = Math.min(best, Math.hypot(cx - CLEAR.rx * Math.cos(a), cy - (c.h - CLEAR.ry * Math.sin(a))));\n }\n return open(c, cx, cy) ? 0 : best;\n}\n\nfunction arcs(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const anchors = c.int(2, 3);\n const spots: [number, number][] = [\n [U * c.int(4, c.cols - 2), 0],\n [U * c.int(11, c.cols - 1), c.h],\n [c.w, U * c.int(2, c.rows - 2)],\n [c.w, 0],\n [c.w, c.h],\n [0, 0],\n ];\n for (let i = spots.length - 1; i > 0; i--) {\n const j = Math.floor(c.next() * (i + 1));\n [spots[i], spots[j]] = [spots[j] ?? [c.w, 0], spots[i] ?? [c.w, 0]];\n }\n let placed = 0;\n for (const [cx, cy] of spots) {\n if (placed === anchors) break;\n const band = (U / 2) * c.int(1, 2);\n const room = Math.floor((clearance(c, cx, cy) - U / 2) / band);\n const count = Math.min(room, c.int(4, 10));\n if (count < 3) continue;\n const offset = c.int(0, 3);\n const hollow = c.chance(0.4);\n for (let i = count; i >= 1; i--) out.push(node(\"circle\", { cx, cy, r: i * band, fill: i === 1 && hollow ? c.ground : c.color(i + offset) }));\n placed += 1;\n }\n return out;\n}\n\nconst GOLDEN = 2.399963229728653;\n\nfunction phyllotaxis(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2 - U * c.int(0, 2);\n const cy = c.h / 2 + U * c.int(-1, 1);\n const step = c.between(11, 14);\n const arms = [8, 13, 21][c.int(0, 2)] ?? 13;\n const banded = c.chance(0.35);\n const reach = Math.hypot(c.w, c.h);\n for (let i = 1; ; i++) {\n const r = step * Math.sqrt(i);\n if (r > reach) break;\n const x = cx + r * Math.cos(i * GOLDEN);\n const y = cy + r * Math.sin(i * GOLDEN);\n const size = step * (0.3 + 0.12 * Math.min(1, r / (c.h / 2)));\n if (x < -size || x > c.w + size || y < -size || y > c.h + size) continue;\n if (open(c, x, y) || clearance(c, x, y) < size + U / 4) continue;\n const tone = banded ? Math.floor(r / (U * 1.5)) % 4 : Math.floor(((i % arms) / arms) * 4);\n out.push(node(\"circle\", { cx: round(x), cy: round(y), r: round(size), fill: c.color(tone) }));\n }\n return out;\n}\n\nfunction gcd(a: number, b: number): number {\n return b ? gcd(b, a % b) : a;\n}\n\nfunction spiro(c: Canvas): ArtNode[] {\n const out: ArtNode[] = [];\n const cx = c.w - c.h / 2;\n const cy = c.h / 2;\n const radius = c.h / 2 - U;\n const big = c.int(7, 13);\n let small = c.int(2, big - 2);\n while (gcd(big, small) !== 1) small = c.int(2, big - 2);\n const layers = c.chance(0.5) ? 2 : 1;\n for (let l = 0; l < layers; l++) {\n const pen = small * c.between(0.75, 1.05);\n const k = (big - small) / small;\n const extent = big - small + pen;\n const turns = small / gcd(big, small);\n const steps = turns * 360;\n const points: string[] = [];\n const scale = (radius * (l === 0 ? 1 : c.between(0.4, 0.55))) / extent;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * turns * Math.PI * 2;\n const x = (big - small) * Math.cos(a) + pen * Math.cos(k * a);\n const y = (big - small) * Math.sin(a) - pen * Math.sin(k * a);\n points.push(`${round(cx + x * scale)} ${round(cy + y * scale)}`);\n }\n const d = `M${points.join(\"L\")}Z`;\n out.push(node(\"path\", { d, fill: c.color(l), fillRule: \"evenodd\" }));\n }\n return out;\n}\n\nconst STYLE = { bauhaus, albers, stripes, waves, truchet, arcs, phyllotaxis, spiro } as const;\n\nexport interface DrawOptions {\n shape?: ReleaseArtShape | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n idPrefix?: string | undefined;\n}\n\nconst paletteOf = (spec: ReleaseArtSpec) => art.palettes[spec.palette % art.palettes.length] ?? art.palettes[0];\n\nexport function releaseArtText(spec: ReleaseArtSpec) {\n return { color: art.grounds[paletteOf(spec).ground].text, eyebrow: { x: U, bottom: 96 }, title: { x: U - 2, bottom: U } };\n}\n\nexport function drawReleaseArt(spec: ReleaseArtSpec, options: DrawOptions = {}): ArtNode {\n const { w, h } = RELEASE_ART_VIEW[options.shape ?? \"banner\"];\n const next = random(spec.seed);\n const between = (lo: number, hi: number) => lo + next() * (hi - lo);\n const int = (lo: number, hi: number) => Math.min(hi, lo + Math.floor(next() * (hi - lo + 1)));\n const palette = paletteOf(spec);\n const place = releaseArtText(spec);\n const ground = art.grounds[palette.ground];\n const colors: string[] = [...palette.colors];\n for (let i = colors.length - 1; i > 0; i--) {\n const j = Math.floor(next() * (i + 1));\n [colors[i], colors[j]] = [colors[j] ?? ground.text, colors[i] ?? ground.text];\n }\n const prefix = options.idPrefix ?? \"art\";\n const canvas: Canvas = {\n w,\n h,\n cols: w / U,\n rows: h / U,\n next,\n between,\n int,\n chance: (p) => next() < p,\n ground: ground.fill,\n color: (i) => colors[((i % colors.length) + colors.length) % colors.length] ?? ground.text,\n id: (name) => `${prefix}-${name}`,\n };\n const mask = canvas.id(\"clear\");\n const drawn = STYLE[spec.style](canvas);\n const text: ArtNode[] = [];\n if (options.eyebrow)\n text.push({\n tag: \"text\",\n attrs: {\n x: place.eyebrow.x,\n y: h - place.eyebrow.bottom,\n fill: place.color,\n fillOpacity: 0.7,\n fontSize: 16,\n fontWeight: 500,\n letterSpacing: 0.1,\n fontFamily: font.sans,\n },\n text: options.eyebrow,\n });\n if (options.title)\n text.push({\n tag: \"text\",\n attrs: { x: place.title.x, y: h - place.title.bottom, fill: place.color, fontSize: 52, fontWeight: 600, letterSpacing: -1.5, fontFamily: font.sans },\n text: options.title,\n });\n return node(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${w} ${h}` }, [\n node(\"defs\", {}, [\n node(\"mask\", { id: mask, maskUnits: \"userSpaceOnUse\", x: 0, y: 0, width: w, height: h }, [\n node(\"rect\", { width: w, height: h, fill: \"white\" }),\n node(\"ellipse\", { cx: 0, cy: h, rx: CLEAR.rx, ry: CLEAR.ry, fill: \"black\" }),\n ]),\n ]),\n node(\"rect\", { width: w, height: h, fill: ground.fill }),\n ...drawn,\n ...text,\n ]);\n}\n\nconst KEEP_CAMEL = new Set([\"viewBox\", \"maskUnits\"]);\nconst attrName = (name: string) => (KEEP_CAMEL.has(name) ? name : name.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`));\nconst escapeXml = (text: string) => text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n\nexport function serializeArt(n: ArtNode): string {\n const attrs = Object.entries(n.attrs)\n .map(([k, v]) => ` ${attrName(k)}=\"${escapeXml(String(v))}\"`)\n .join(\"\");\n const inner = n.text !== undefined ? escapeXml(n.text) : (n.children ?? []).map(serializeArt).join(\"\");\n return inner ? `<${n.tag}${attrs}>${inner}</${n.tag}>` : `<${n.tag}${attrs}/>`;\n}\n","import { createElement, forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { font } from \"@logicplanes/kaeso-tokens\";\nimport { cn } from \"../../utils/cn.js\";\nimport { drawReleaseArt, releaseArtFor, releaseArtText, serializeArt, RELEASE_ART_VIEW, type ArtNode, type ReleaseArtSpec } from \"./drawing.js\";\n\nexport { RELEASE_ART_STYLES, isReleaseArtSpec, nextReleaseArt, randomReleaseArt, releaseArtFor, type ReleaseArtSpec, type ReleaseArtStyle } from \"./drawing.js\";\n\nexport const KAESO_RELEASE_ART_VARIANTS = {\n shape: {\n banner: { classes: \"aspect-video\" },\n wide: { classes: \"aspect-21/9\" },\n },\n} as const;\nexport const KAESO_RELEASE_ART_DEFAULT_VARIANTS = { shape: \"banner\" } as const;\n\nexport interface ReleaseArtProps {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n src?: string | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n className?: string | undefined;\n}\n\nfunction toElement(n: ArtNode, key: number): ReactNode {\n return createElement(n.tag, { ...n.attrs, key }, n.text ?? n.children?.map(toElement));\n}\n\nexport const ReleaseArt = /* @__PURE__ */ forwardRef<SVGSVGElement, ReleaseArtProps>(function ReleaseArt(\n { seed, label, art, src, title, eyebrow, shape = \"banner\", className },\n ref,\n) {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const [failed, setFailed] = useState<string | null>(null);\n const prefix = `art${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n const spec = art ?? releaseArtFor(seed);\n const drawn = useMemo(() => drawReleaseArt(spec, { shape, idPrefix: prefix }), [spec, shape, prefix]);\n const text = releaseArtText(spec);\n return (\n <span className={cn(\"relative block w-full\", className)}>\n <svg\n ref={ref}\n viewBox={`0 0 ${w} ${h}`}\n role=\"img\"\n aria-label={label}\n preserveAspectRatio=\"xMidYMid slice\"\n className={cn(\"block w-full overflow-hidden rounded-well\", KAESO_RELEASE_ART_VARIANTS.shape[shape].classes)}\n >\n {src && failed !== src ? (\n <image href={src} width={w} height={h} preserveAspectRatio=\"xMidYMid slice\" onError={() => setFailed(src)} />\n ) : (\n drawn.children?.map(toElement)\n )}\n {eyebrow && (\n <text\n x={text.eyebrow.x}\n y={h - text.eyebrow.bottom}\n fill={text.color}\n fillOpacity={0.7}\n fontSize={16}\n fontWeight={500}\n letterSpacing={0.1}\n fontFamily={font.sans}\n >\n {eyebrow}\n </text>\n )}\n {title && (\n <text x={text.title.x} y={h - text.title.bottom} fill={text.color} fontSize={52} fontWeight={600} letterSpacing={-1.5} fontFamily={font.sans}>\n {title}\n </text>\n )}\n </svg>\n <span aria-hidden className=\"pointer-events-none absolute inset-0 rounded-well shadow-ring\" />\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ReleaseArt.displayName = \"ReleaseArt\";\n\nexport interface ReleaseArtSvgOptions {\n seed: string;\n label: string;\n art?: ReleaseArtSpec | undefined;\n title?: string | undefined;\n eyebrow?: string | undefined;\n shape?: keyof typeof KAESO_RELEASE_ART_VARIANTS.shape | undefined;\n}\n\nexport function releaseArtSvg({ seed, label, art, title, eyebrow, shape = \"banner\" }: ReleaseArtSvgOptions): string {\n const { w, h } = RELEASE_ART_VIEW[shape];\n const drawn = drawReleaseArt(art ?? releaseArtFor(seed), { shape, title, eyebrow, idPrefix: \"art\" });\n return serializeArt({ ...drawn, attrs: { ...drawn.attrs, width: w * 2, height: h * 2, role: \"img\", ariaLabel: label } });\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
|
-
import { t as n } from "./icon-
|
|
5
|
-
import { r } from "./tooltip-
|
|
6
|
-
import { i } from "./input-
|
|
7
|
-
import { n as a } from "./checkbox-
|
|
8
|
-
import { r as o } from "./combobox-
|
|
9
|
-
import { t as s } from "./empty-
|
|
10
|
-
import { t as c } from "./badge-
|
|
4
|
+
import { t as n } from "./icon-D7ja-_Yk.js";
|
|
5
|
+
import { r } from "./tooltip-OcwO0VUT.js";
|
|
6
|
+
import { o as i } from "./input-2VJuj_M4.js";
|
|
7
|
+
import { n as a } from "./checkbox-CQjwCPkc.js";
|
|
8
|
+
import { r as o } from "./combobox-DjDI7SUC.js";
|
|
9
|
+
import { t as s } from "./empty-DvhyMXQq.js";
|
|
10
|
+
import { t as c } from "./badge-C2KtxCLB.js";
|
|
11
11
|
import { forwardRef as l, useEffect as u, useId as d, useMemo as f, useRef as p, useState as m } from "react";
|
|
12
12
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
13
13
|
import { Alert02Icon as _, MinusSignIcon as v, Tick02Icon as y } from "@hugeicons/core-free-icons";
|
|
@@ -276,4 +276,4 @@ function D({ right: i, readOnly: s, query: l, hasOrigin: u, originText: f, names
|
|
|
276
276
|
//#endregion
|
|
277
277
|
export { b as a, x as i, S as n, E as r, C as t };
|
|
278
278
|
|
|
279
|
-
//# sourceMappingURL=rights-
|
|
279
|
+
//# sourceMappingURL=rights-Cyp0Pzp-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rights-UVngOX_4.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useUiText","Icon","CheckboxBox","Highlight","Empty","Badge","rightsCascade","byCode","rights","r","dependents","req","out","seen","code","queue","next","linked","granted","c","groupCascade","state","all","group","current","n","g","KAESO_RIGHTS_MATRIX_VARIANTS","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","originTexts","t","matches","texts","q","RightsMatrix","ariaLabel","query","setQuery","useState","announcement","setAnnouncement","flashed","setFlashed","flashTimer","useRef","root","baseId","useId","useMemo","groups","names","universal","required","hasOrigins","originText","originLabels","shown","apply","changes","onRightsChange","onChange","first","rest","also","el","ref","target","boxes","i","className","searchable","SearchInput","headingId","gi","grantedCount","changeable","allOn","someOn","readOnly","RightRow","descId","nameId","name","needs","text","Tooltip","Alert02Icon","hasOrigin","s","Tick02Icon","MinusSignIcon","row","onToggle"],"sources":["../../src/components/kaeso/rights-logic.ts","../../src/components/kaeso/rights.tsx"],"sourcesContent":["export interface RightChange {\n code: string;\n granted: boolean;\n}\n\ninterface Node {\n code: string;\n granted: boolean;\n requires?: string[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport function rightsCascade(rights: readonly Node[], code: string, granted: boolean): RightChange[] {\n const byCode = new Map(rights.map((r) => [r.code, r]));\n const dependents = new Map<string, string[]>();\n for (const r of rights) for (const req of r.requires ?? []) dependents.set(req, [...(dependents.get(req) ?? []), r.code]);\n const out: RightChange[] = [{ code, granted }];\n const seen = new Set([code]);\n const queue = [code];\n while (queue.length) {\n const next = queue.shift() as string;\n const linked = granted ? (byCode.get(next)?.requires ?? []) : (dependents.get(next) ?? []);\n for (const c of linked) {\n if (seen.has(c)) continue;\n seen.add(c);\n const r = byCode.get(c);\n if (!r || r.disabled) continue;\n queue.push(c);\n if (r.granted !== granted) out.push({ code: c, granted });\n }\n }\n return out;\n}\n\nexport function groupCascade(all: readonly Node[], group: readonly Node[], granted: boolean): RightChange[] {\n const state = new Map(all.map((r) => [r.code, r.granted]));\n const out = new Map<string, boolean>();\n for (const r of group) {\n if (r.disabled || state.get(r.code) === granted) continue;\n const current = all.map((n) => ({ ...n, granted: out.get(n.code) ?? n.granted }));\n for (const c of rightsCascade(current, r.code, granted)) {\n out.set(c.code, c.granted);\n state.set(c.code, c.granted);\n }\n }\n return [...out].map(([code, g]) => ({ code, granted: g }));\n}\n","import { forwardRef, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Alert02Icon as __icon_Alert02Icon, Tick02Icon as __icon_Tick02Icon, MinusSignIcon as __icon_MinusSignIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { groupCascade, rightsCascade, type RightChange } from \"./rights-logic.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RIGHTS_MATRIX_VARIANTS = {\n origin: {\n preset: { classes: \"text-fg-tertiary\" },\n added: { classes: \"text-success-text\" },\n removed: { classes: \"text-danger-text\" },\n none: { classes: \"\" },\n },\n mode: {\n edit: { classes: \"\" },\n readOnly: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS = { origin: \"none\", mode: \"edit\" } as const;\n\ntype Origin = keyof typeof KAESO_RIGHTS_MATRIX_VARIANTS.origin;\n\nexport interface RightSource {\n label: string;\n detail?: string | undefined;\n}\n\nexport interface Right {\n code: string;\n label?: string | undefined;\n description: string;\n granted: boolean;\n origin?: Origin | undefined;\n sensitive?: boolean | undefined;\n requires?: string[] | undefined;\n sources?: RightSource[] | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n}\n\nexport interface RightsGroup {\n label: string;\n description?: string | undefined;\n rights: Right[];\n}\n\nexport interface RightsMatrixProps {\n groups: RightsGroup[];\n onChange?: ((code: string, granted: boolean) => void) | undefined;\n onRightsChange?: ((changes: RightChange[]) => void) | undefined;\n readOnly?: boolean | undefined;\n searchable?: boolean | undefined;\n originLabels?: Partial<Record<Origin, string>> | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction originTexts(t: UiText): Record<Origin, string> {\n return { preset: t(\"rightsMatrix.fromRole\", \"From role\"), added: t(\"rightsMatrix.added\", \"Added\"), removed: t(\"rightsMatrix.removed\", \"Removed\"), none: \"\" };\n}\n\nconst matches = (q: string, ...texts: (string | undefined)[]) => texts.some((t) => t?.toLowerCase().includes(q));\n\nexport const RightsMatrix = /* @__PURE__ */ forwardRef<HTMLDivElement, RightsMatrixProps>(function RightsMatrix(\n { groups, onChange, onRightsChange, readOnly, searchable, originLabels, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [announcement, setAnnouncement] = useState(\"\");\n const [flashed, setFlashed] = useState<ReadonlySet<string>>(() => new Set());\n const flashTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(flashTimer.current), []);\n const root = useRef<HTMLDivElement | null>(null);\n const baseId = useId();\n const all = useMemo(() => groups.flatMap((g) => g.rights), [groups]);\n const names = useMemo(() => new Map(all.map((r) => [r.code, r.label ?? r.code])), [all]);\n const universal = useMemo(() => {\n if (all.length < 3) return new Set<string>();\n const required = new Set(all.flatMap((r) => r.requires ?? []));\n return new Set([...required].filter((c) => all.every((r) => r.code === c || r.requires?.includes(c))));\n }, [all]);\n const hasOrigins = all.some((r) => r.origin !== undefined);\n const originText = { ...originTexts(t), ...originLabels };\n const q = query.trim().toLowerCase();\n const shown = groups\n .map((g) => (!q || matches(q, g.label) ? g : { ...g, rights: g.rights.filter((r) => matches(q, r.label, r.code, r.description)) }))\n .filter((g) => g.rights.length > 0);\n\n const apply = (changes: RightChange[]) => {\n if (!changes.length) return;\n if (onRightsChange) onRightsChange(changes);\n else if (onChange) for (const c of changes) onChange(c.code, c.granted);\n const [first, ...rest] = changes;\n const also = rest.map((c) => names.get(c.code) ?? c.code);\n setAnnouncement(\n also.length && first\n ? first.granted\n ? t(\"rightsMatrix.alsoGranted\", \"Also granted {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : t(\"rightsMatrix.alsoRemoved\", \"Also removed {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : \"\",\n );\n clearTimeout(flashTimer.current);\n setFlashed(new Set(rest.map((c) => c.code)));\n if (rest.length) flashTimer.current = setTimeout(() => setFlashed(new Set()), 1200);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.getAttribute(\"role\") !== \"checkbox\" || !root.current) return;\n const boxes = [...root.current.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const i = boxes.indexOf(target);\n const next =\n e.key === \"ArrowDown\"\n ? boxes[i + 1]\n : e.key === \"ArrowUp\"\n ? boxes[i - 1]\n : e.key === \"Home\"\n ? boxes[0]\n : e.key === \"End\"\n ? boxes[boxes.length - 1]\n : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n };\n\n return (\n <div\n ref={(el) => {\n root.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"rightsMatrix.rights\", \"Rights\")}\n onKeyDown={onKeyDown}\n className={cn(\"@container flex min-w-0 flex-col gap-24\", className)}\n >\n {searchable && (\n <SearchInput\n className=\"w-full\"\n aria-label={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n placeholder={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n )}\n {shown.length === 0 && (\n <Empty\n size=\"compact\"\n title={t(\"rightsMatrix.noMatch\", \"No rights match\")}\n description={t(\"rightsMatrix.noMatchHint\", \"Try a right's name, its code, or a word from its description.\")}\n />\n )}\n {shown.map((g, gi) => {\n const headingId = `${baseId}-g${gi}`;\n const grantedCount = g.rights.filter((r) => r.granted).length;\n const changeable = g.rights.filter((r) => !r.disabled);\n const allOn = changeable.length > 0 && changeable.every((r) => r.granted);\n const someOn = changeable.some((r) => r.granted);\n return (\n <section key={g.label} aria-labelledby={headingId} className=\"flex min-w-0 flex-col\">\n <div className=\"flex items-start gap-12 px-12 pb-4\">\n {!readOnly && (\n <span className=\"flex h-20 items-center\">\n <CheckboxBox\n aria-label={\n q\n ? t(\"rightsMatrix.everyRightShownIn\", \"Every right shown in {group}\", { group: g.label })\n : t(\"rightsMatrix.everyRightIn\", \"Every right in {group}\", { group: g.label })\n }\n checked={allOn}\n indeterminate={someOn && !allOn}\n disabled={changeable.length === 0}\n onCheckedChange={() => apply(groupCascade(all, g.rights, !allOn))}\n />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-baseline justify-between gap-12\">\n <span id={headingId} className=\"min-w-0 wrap-break-word text-body font-semibold text-fg\">\n {g.label}\n </span>\n <span className=\"shrink-0 text-small text-fg-tertiary tabular\">\n {t(\"rightsMatrix.grantedOfTotal\", \"{granted} of {total}\", { granted: grantedCount, total: g.rights.length })}\n </span>\n </span>\n {g.description && <span className=\"text-small text-fg-secondary text-pretty\">{g.description}</span>}\n </span>\n </div>\n {g.rights.map((r) => (\n <RightRow\n key={r.code}\n right={r}\n readOnly={!!readOnly}\n query={q}\n hasOrigin={hasOrigins}\n originText={originText}\n names={names}\n universal={universal}\n flashed={flashed.has(r.code)}\n onToggle={(granted) => apply(rightsCascade(all, r.code, granted))}\n />\n ))}\n </section>\n );\n })}\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RightsMatrix.displayName = \"RightsMatrix\";\n\nfunction RightRow({\n right: r,\n readOnly,\n query,\n hasOrigin,\n originText,\n names,\n universal,\n flashed,\n onToggle,\n}: {\n right: Right;\n readOnly: boolean;\n query: string;\n hasOrigin: boolean;\n originText: Record<Origin, string>;\n names: Map<string, string>;\n universal: ReadonlySet<string>;\n flashed: boolean;\n onToggle: (granted: boolean) => void;\n}) {\n const t = useUiText();\n const descId = useId();\n const nameId = useId();\n const name = r.label ?? r.code;\n const needs = readOnly ? [] : (r.requires ?? []).filter((c) => !universal.has(c)).map((c) => names.get(c) ?? c);\n const text: ReactNode = (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-start gap-8\">\n <span\n id={nameId}\n className={cn(\n \"min-w-0 wrap-break-word\",\n r.label ? \"text-body font-medium\" : \"mono text-small\",\n readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Highlight text={name} query={query} />\n </span>\n {r.label && (\n <span className=\"hidden h-20 min-w-0 items-center @auth:flex\">\n <span className=\"min-w-0 truncate mono text-caption text-fg-tertiary\">{r.code}</span>\n </span>\n )}\n {r.sensitive && (\n <span className={cn(\"flex shrink-0 items-center\", r.label ? \"h-20\" : \"h-18\")}>\n <Tooltip content={t(\"rightsMatrix.sensitiveHint\", \"Sensitive: exposes data or is hard to undo\")}>\n <span tabIndex={0} className=\"inline-flex shrink-0 rounded-pill text-warning-text focus-ring\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" label={t(\"rightsMatrix.sensitive\", \"Sensitive\")} />\n </span>\n </Tooltip>\n </span>\n )}\n {hasOrigin && !readOnly && (\n <span\n className={cn(\n \"ml-auto flex w-80 shrink-0 items-center justify-end text-right text-small\",\n r.label ? \"h-20\" : \"h-18\",\n KAESO_RIGHTS_MATRIX_VARIANTS.origin[r.origin ?? \"none\"].classes,\n )}\n >\n {originText[r.origin ?? \"none\"]}\n </span>\n )}\n </span>\n <span id={descId} className={cn(\"text-small text-pretty\", readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {r.description}\n </span>\n {needs.length > 0 && (\n <span className=\"text-caption text-fg-tertiary\">\n {t(\"rightsMatrix.needs\", \"Needs {rights}\", { rights: needs.join(t(\"rightsMatrix.listSeparator\", \", \")) })}\n </span>\n )}\n {readOnly && r.granted && !!r.sources?.length && (\n <span className=\"flex flex-wrap gap-4 pt-4\">\n {r.sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n </span>\n );\n\n if (readOnly) {\n return (\n <div className=\"flex min-h-52 items-start gap-12 px-12 py-8\">\n <span className=\"flex h-20 w-18 shrink-0 items-center justify-center\">\n <Icon\n icon={r.granted ? __icon_Tick02Icon : __icon_MinusSignIcon}\n size=\"sm\"\n className={r.granted ? \"text-fg\" : \"text-fg-disabled\"}\n label={r.granted ? t(\"rightsMatrix.granted\", \"Granted\") : t(\"rightsMatrix.notGranted\", \"Not granted\")}\n />\n </span>\n {text}\n </div>\n );\n }\n\n const row = (\n <label\n className={cn(\n \"flex min-h-52 cursor-pointer items-start gap-12 rounded-item px-12 py-8 transition-control hover:bg-fill-1\",\n flashed && \"bg-fill-2 hover:bg-fill-2\",\n r.disabled && \"cursor-not-allowed\",\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox checked={r.granted} disabled={r.disabled} onCheckedChange={onToggle} aria-labelledby={nameId} aria-describedby={descId} />\n </span>\n {text}\n </label>\n );\n return r.disabled && r.disabledReason ? <Tooltip content={r.disabledReason}>{row}</Tooltip> : row;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rights-Cyp0Pzp-.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useUiText","Icon","SearchInput","CheckboxBox","Highlight","Empty","Badge","rightsCascade","byCode","rights","r","dependents","req","out","seen","code","queue","next","linked","granted","c","groupCascade","state","all","group","current","n","g","KAESO_RIGHTS_MATRIX_VARIANTS","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","originTexts","t","matches","texts","q","RightsMatrix","ariaLabel","query","setQuery","useState","announcement","setAnnouncement","flashed","setFlashed","flashTimer","useRef","root","baseId","useId","useMemo","groups","names","universal","required","hasOrigins","originText","originLabels","shown","apply","changes","onRightsChange","onChange","first","rest","also","el","ref","target","boxes","i","className","searchable","headingId","gi","grantedCount","changeable","allOn","someOn","readOnly","RightRow","descId","nameId","name","needs","text","Tooltip","Alert02Icon","hasOrigin","s","Tick02Icon","MinusSignIcon","row","onToggle"],"sources":["../../src/components/kaeso/rights-logic.ts","../../src/components/kaeso/rights.tsx"],"sourcesContent":["export interface RightChange {\n code: string;\n granted: boolean;\n}\n\ninterface Node {\n code: string;\n granted: boolean;\n requires?: string[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport function rightsCascade(rights: readonly Node[], code: string, granted: boolean): RightChange[] {\n const byCode = new Map(rights.map((r) => [r.code, r]));\n const dependents = new Map<string, string[]>();\n for (const r of rights) for (const req of r.requires ?? []) dependents.set(req, [...(dependents.get(req) ?? []), r.code]);\n const out: RightChange[] = [{ code, granted }];\n const seen = new Set([code]);\n const queue = [code];\n while (queue.length) {\n const next = queue.shift() as string;\n const linked = granted ? (byCode.get(next)?.requires ?? []) : (dependents.get(next) ?? []);\n for (const c of linked) {\n if (seen.has(c)) continue;\n seen.add(c);\n const r = byCode.get(c);\n if (!r || r.disabled) continue;\n queue.push(c);\n if (r.granted !== granted) out.push({ code: c, granted });\n }\n }\n return out;\n}\n\nexport function groupCascade(all: readonly Node[], group: readonly Node[], granted: boolean): RightChange[] {\n const state = new Map(all.map((r) => [r.code, r.granted]));\n const out = new Map<string, boolean>();\n for (const r of group) {\n if (r.disabled || state.get(r.code) === granted) continue;\n const current = all.map((n) => ({ ...n, granted: out.get(n.code) ?? n.granted }));\n for (const c of rightsCascade(current, r.code, granted)) {\n out.set(c.code, c.granted);\n state.set(c.code, c.granted);\n }\n }\n return [...out].map(([code, g]) => ({ code, granted: g }));\n}\n","import { forwardRef, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Alert02Icon as __icon_Alert02Icon, Tick02Icon as __icon_Tick02Icon, MinusSignIcon as __icon_MinusSignIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { groupCascade, rightsCascade, type RightChange } from \"./rights-logic.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RIGHTS_MATRIX_VARIANTS = {\n origin: {\n preset: { classes: \"text-fg-tertiary\" },\n added: { classes: \"text-success-text\" },\n removed: { classes: \"text-danger-text\" },\n none: { classes: \"\" },\n },\n mode: {\n edit: { classes: \"\" },\n readOnly: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS = { origin: \"none\", mode: \"edit\" } as const;\n\ntype Origin = keyof typeof KAESO_RIGHTS_MATRIX_VARIANTS.origin;\n\nexport interface RightSource {\n label: string;\n detail?: string | undefined;\n}\n\nexport interface Right {\n code: string;\n label?: string | undefined;\n description: string;\n granted: boolean;\n origin?: Origin | undefined;\n sensitive?: boolean | undefined;\n requires?: string[] | undefined;\n sources?: RightSource[] | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n}\n\nexport interface RightsGroup {\n label: string;\n description?: string | undefined;\n rights: Right[];\n}\n\nexport interface RightsMatrixProps {\n groups: RightsGroup[];\n onChange?: ((code: string, granted: boolean) => void) | undefined;\n onRightsChange?: ((changes: RightChange[]) => void) | undefined;\n readOnly?: boolean | undefined;\n searchable?: boolean | undefined;\n originLabels?: Partial<Record<Origin, string>> | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction originTexts(t: UiText): Record<Origin, string> {\n return { preset: t(\"rightsMatrix.fromRole\", \"From role\"), added: t(\"rightsMatrix.added\", \"Added\"), removed: t(\"rightsMatrix.removed\", \"Removed\"), none: \"\" };\n}\n\nconst matches = (q: string, ...texts: (string | undefined)[]) => texts.some((t) => t?.toLowerCase().includes(q));\n\nexport const RightsMatrix = /* @__PURE__ */ forwardRef<HTMLDivElement, RightsMatrixProps>(function RightsMatrix(\n { groups, onChange, onRightsChange, readOnly, searchable, originLabels, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [announcement, setAnnouncement] = useState(\"\");\n const [flashed, setFlashed] = useState<ReadonlySet<string>>(() => new Set());\n const flashTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(flashTimer.current), []);\n const root = useRef<HTMLDivElement | null>(null);\n const baseId = useId();\n const all = useMemo(() => groups.flatMap((g) => g.rights), [groups]);\n const names = useMemo(() => new Map(all.map((r) => [r.code, r.label ?? r.code])), [all]);\n const universal = useMemo(() => {\n if (all.length < 3) return new Set<string>();\n const required = new Set(all.flatMap((r) => r.requires ?? []));\n return new Set([...required].filter((c) => all.every((r) => r.code === c || r.requires?.includes(c))));\n }, [all]);\n const hasOrigins = all.some((r) => r.origin !== undefined);\n const originText = { ...originTexts(t), ...originLabels };\n const q = query.trim().toLowerCase();\n const shown = groups\n .map((g) => (!q || matches(q, g.label) ? g : { ...g, rights: g.rights.filter((r) => matches(q, r.label, r.code, r.description)) }))\n .filter((g) => g.rights.length > 0);\n\n const apply = (changes: RightChange[]) => {\n if (!changes.length) return;\n if (onRightsChange) onRightsChange(changes);\n else if (onChange) for (const c of changes) onChange(c.code, c.granted);\n const [first, ...rest] = changes;\n const also = rest.map((c) => names.get(c.code) ?? c.code);\n setAnnouncement(\n also.length && first\n ? first.granted\n ? t(\"rightsMatrix.alsoGranted\", \"Also granted {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : t(\"rightsMatrix.alsoRemoved\", \"Also removed {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : \"\",\n );\n clearTimeout(flashTimer.current);\n setFlashed(new Set(rest.map((c) => c.code)));\n if (rest.length) flashTimer.current = setTimeout(() => setFlashed(new Set()), 1200);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.getAttribute(\"role\") !== \"checkbox\" || !root.current) return;\n const boxes = [...root.current.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const i = boxes.indexOf(target);\n const next =\n e.key === \"ArrowDown\"\n ? boxes[i + 1]\n : e.key === \"ArrowUp\"\n ? boxes[i - 1]\n : e.key === \"Home\"\n ? boxes[0]\n : e.key === \"End\"\n ? boxes[boxes.length - 1]\n : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n };\n\n return (\n <div\n ref={(el) => {\n root.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"rightsMatrix.rights\", \"Rights\")}\n onKeyDown={onKeyDown}\n className={cn(\"@container flex min-w-0 flex-col gap-24\", className)}\n >\n {searchable && (\n <SearchInput\n className=\"w-full\"\n aria-label={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n placeholder={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n )}\n {shown.length === 0 && (\n <Empty\n size=\"compact\"\n title={t(\"rightsMatrix.noMatch\", \"No rights match\")}\n description={t(\"rightsMatrix.noMatchHint\", \"Try a right's name, its code, or a word from its description.\")}\n />\n )}\n {shown.map((g, gi) => {\n const headingId = `${baseId}-g${gi}`;\n const grantedCount = g.rights.filter((r) => r.granted).length;\n const changeable = g.rights.filter((r) => !r.disabled);\n const allOn = changeable.length > 0 && changeable.every((r) => r.granted);\n const someOn = changeable.some((r) => r.granted);\n return (\n <section key={g.label} aria-labelledby={headingId} className=\"flex min-w-0 flex-col\">\n <div className=\"flex items-start gap-12 px-12 pb-4\">\n {!readOnly && (\n <span className=\"flex h-20 items-center\">\n <CheckboxBox\n aria-label={\n q\n ? t(\"rightsMatrix.everyRightShownIn\", \"Every right shown in {group}\", { group: g.label })\n : t(\"rightsMatrix.everyRightIn\", \"Every right in {group}\", { group: g.label })\n }\n checked={allOn}\n indeterminate={someOn && !allOn}\n disabled={changeable.length === 0}\n onCheckedChange={() => apply(groupCascade(all, g.rights, !allOn))}\n />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-baseline justify-between gap-12\">\n <span id={headingId} className=\"min-w-0 wrap-break-word text-body font-semibold text-fg\">\n {g.label}\n </span>\n <span className=\"shrink-0 text-small text-fg-tertiary tabular\">\n {t(\"rightsMatrix.grantedOfTotal\", \"{granted} of {total}\", { granted: grantedCount, total: g.rights.length })}\n </span>\n </span>\n {g.description && <span className=\"text-small text-fg-secondary text-pretty\">{g.description}</span>}\n </span>\n </div>\n {g.rights.map((r) => (\n <RightRow\n key={r.code}\n right={r}\n readOnly={!!readOnly}\n query={q}\n hasOrigin={hasOrigins}\n originText={originText}\n names={names}\n universal={universal}\n flashed={flashed.has(r.code)}\n onToggle={(granted) => apply(rightsCascade(all, r.code, granted))}\n />\n ))}\n </section>\n );\n })}\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RightsMatrix.displayName = \"RightsMatrix\";\n\nfunction RightRow({\n right: r,\n readOnly,\n query,\n hasOrigin,\n originText,\n names,\n universal,\n flashed,\n onToggle,\n}: {\n right: Right;\n readOnly: boolean;\n query: string;\n hasOrigin: boolean;\n originText: Record<Origin, string>;\n names: Map<string, string>;\n universal: ReadonlySet<string>;\n flashed: boolean;\n onToggle: (granted: boolean) => void;\n}) {\n const t = useUiText();\n const descId = useId();\n const nameId = useId();\n const name = r.label ?? r.code;\n const needs = readOnly ? [] : (r.requires ?? []).filter((c) => !universal.has(c)).map((c) => names.get(c) ?? c);\n const text: ReactNode = (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-start gap-8\">\n <span\n id={nameId}\n className={cn(\n \"min-w-0 wrap-break-word\",\n r.label ? \"text-body font-medium\" : \"mono text-small\",\n readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Highlight text={name} query={query} />\n </span>\n {r.label && (\n <span className=\"hidden h-20 min-w-0 items-center @auth:flex\">\n <span className=\"min-w-0 truncate mono text-caption text-fg-tertiary\">{r.code}</span>\n </span>\n )}\n {r.sensitive && (\n <span className={cn(\"flex shrink-0 items-center\", r.label ? \"h-20\" : \"h-18\")}>\n <Tooltip content={t(\"rightsMatrix.sensitiveHint\", \"Sensitive: exposes data or is hard to undo\")}>\n <span tabIndex={0} className=\"inline-flex shrink-0 rounded-pill text-warning-text focus-ring\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" label={t(\"rightsMatrix.sensitive\", \"Sensitive\")} />\n </span>\n </Tooltip>\n </span>\n )}\n {hasOrigin && !readOnly && (\n <span\n className={cn(\n \"ml-auto flex w-80 shrink-0 items-center justify-end text-right text-small\",\n r.label ? \"h-20\" : \"h-18\",\n KAESO_RIGHTS_MATRIX_VARIANTS.origin[r.origin ?? \"none\"].classes,\n )}\n >\n {originText[r.origin ?? \"none\"]}\n </span>\n )}\n </span>\n <span id={descId} className={cn(\"text-small text-pretty\", readOnly && !r.granted ? \"text-fg-tertiary\" : \"text-fg-secondary\")}>\n {r.description}\n </span>\n {needs.length > 0 && (\n <span className=\"text-caption text-fg-tertiary\">\n {t(\"rightsMatrix.needs\", \"Needs {rights}\", { rights: needs.join(t(\"rightsMatrix.listSeparator\", \", \")) })}\n </span>\n )}\n {readOnly && r.granted && !!r.sources?.length && (\n <span className=\"flex flex-wrap gap-4 pt-4\">\n {r.sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n </span>\n );\n\n if (readOnly) {\n return (\n <div className=\"flex min-h-52 items-start gap-12 px-12 py-8\">\n <span className=\"flex h-20 w-18 shrink-0 items-center justify-center\">\n <Icon\n icon={r.granted ? __icon_Tick02Icon : __icon_MinusSignIcon}\n size=\"sm\"\n className={r.granted ? \"text-fg\" : \"text-fg-disabled\"}\n label={r.granted ? t(\"rightsMatrix.granted\", \"Granted\") : t(\"rightsMatrix.notGranted\", \"Not granted\")}\n />\n </span>\n {text}\n </div>\n );\n }\n\n const row = (\n <label\n className={cn(\n \"flex min-h-52 cursor-pointer items-start gap-12 rounded-item px-12 py-8 transition-control hover:bg-fill-1\",\n flashed && \"bg-fill-2 hover:bg-fill-2\",\n r.disabled && \"cursor-not-allowed\",\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox checked={r.granted} disabled={r.disabled} onCheckedChange={onToggle} aria-labelledby={nameId} aria-describedby={descId} />\n </span>\n {text}\n </label>\n );\n return r.disabled && r.disabledReason ? <Tooltip content={r.disabledReason}>{row}</Tooltip> : row;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
|
+
import { forwardRef as t } from "react";
|
|
4
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
5
|
+
import { CSPProvider as i } from "@base-ui/react/csp-provider";
|
|
6
|
+
import { ScrollArea as a } from "@base-ui/react/scroll-area";
|
|
7
|
+
//#region src/components/scroll-area/scroll-area.tsx
|
|
8
|
+
var o = { orientation: {
|
|
9
|
+
vertical: { classes: "scroll-axis-y scroll-fade-y" },
|
|
10
|
+
horizontal: { classes: "scroll-axis-x scroll-fade-x" },
|
|
11
|
+
both: { classes: "scroll-axis-both" }
|
|
12
|
+
} }, s = { orientation: "vertical" }, c = ({ orientation: t }) => /* @__PURE__ */ n(a.Scrollbar, {
|
|
13
|
+
orientation: t,
|
|
14
|
+
className: e("flex touch-none p-2 opacity-0 select-none transition-control data-hovering:opacity-100 data-scrolling:opacity-100", t === "vertical" ? "w-10" : "h-10 flex-col"),
|
|
15
|
+
children: /* @__PURE__ */ n(a.Thumb, { className: "flex-1 rounded-pill bg-line-strong" })
|
|
16
|
+
}), l = /* @__PURE__ */ t(function({ children: t, orientation: s = "vertical", className: l, viewportClassName: u, "aria-label": d }, f) {
|
|
17
|
+
return /* @__PURE__ */ n(i, {
|
|
18
|
+
disableStyleElements: !0,
|
|
19
|
+
children: /* @__PURE__ */ r(a.Root, {
|
|
20
|
+
ref: f,
|
|
21
|
+
className: e("relative min-h-0 overflow-hidden", l),
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ n(a.Viewport, {
|
|
24
|
+
className: e("size-full focus-ring-inset", o.orientation[s].classes, u),
|
|
25
|
+
...d ? {
|
|
26
|
+
role: "region",
|
|
27
|
+
"aria-label": d
|
|
28
|
+
} : {},
|
|
29
|
+
children: t
|
|
30
|
+
}),
|
|
31
|
+
s !== "horizontal" && /* @__PURE__ */ n(c, { orientation: "vertical" }),
|
|
32
|
+
s !== "vertical" && /* @__PURE__ */ n(c, { orientation: "horizontal" }),
|
|
33
|
+
s === "both" && /* @__PURE__ */ n(a.Corner, {})
|
|
34
|
+
]
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
process.env.NODE_ENV !== "production" && (l.displayName = "ScrollArea");
|
|
39
|
+
//#endregion
|
|
40
|
+
export { o as n, l as r, s as t };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=scroll-area-D8MD7Vpo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-area-D8MD7Vpo.js","names":["BaseScrollArea","ScrollArea","cn","KAESO_SCROLL_AREA_VARIANTS","KAESO_SCROLL_AREA_DEFAULT_VARIANTS","Bar","ScrollArea","orientation","ScrollArea$1","label","CSPProvider","className","viewportClassName"],"sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { CSPProvider } from \"@base-ui/react/csp-provider\";\nimport { ScrollArea as BaseScrollArea } from \"@base-ui/react/scroll-area\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport const KAESO_SCROLL_AREA_VARIANTS = {\n orientation: {\n vertical: { classes: \"scroll-axis-y scroll-fade-y\" },\n horizontal: { classes: \"scroll-axis-x scroll-fade-x\" },\n both: { classes: \"scroll-axis-both\" },\n },\n} as const;\nexport const KAESO_SCROLL_AREA_DEFAULT_VARIANTS = { orientation: \"vertical\" } as const;\n\nexport interface ScrollAreaProps {\n children: ReactNode;\n orientation?: keyof typeof KAESO_SCROLL_AREA_VARIANTS.orientation | undefined;\n className?: string | undefined;\n viewportClassName?: string | undefined;\n \"aria-label\"?: string | undefined;\n}\n\nconst Bar = ({ orientation }: { orientation: \"vertical\" | \"horizontal\" }) => (\n <BaseScrollArea.Scrollbar\n orientation={orientation}\n className={cn(\n \"flex touch-none p-2 opacity-0 select-none transition-control data-hovering:opacity-100 data-scrolling:opacity-100\",\n orientation === \"vertical\" ? \"w-10\" : \"h-10 flex-col\",\n )}\n >\n <BaseScrollArea.Thumb className=\"flex-1 rounded-pill bg-line-strong\" />\n </BaseScrollArea.Scrollbar>\n);\n\nexport const ScrollArea = /* @__PURE__ */ forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(\n { children, orientation = \"vertical\", className, viewportClassName, \"aria-label\": label },\n ref,\n) {\n return (\n <CSPProvider disableStyleElements>\n <BaseScrollArea.Root ref={ref} className={cn(\"relative min-h-0 overflow-hidden\", className)}>\n <BaseScrollArea.Viewport\n className={cn(\"size-full focus-ring-inset\", KAESO_SCROLL_AREA_VARIANTS.orientation[orientation].classes, viewportClassName)}\n {...(label ? { role: \"region\", \"aria-label\": label } : {})}\n >\n {children}\n </BaseScrollArea.Viewport>\n {orientation !== \"horizontal\" && <Bar orientation=\"vertical\" />}\n {orientation !== \"vertical\" && <Bar orientation=\"horizontal\" />}\n {orientation === \"both\" && <BaseScrollArea.Corner />}\n </BaseScrollArea.Root>\n </CSPProvider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ScrollArea.displayName = \"ScrollArea\";\n"],"mappings":";;;;;;;AAKA,IAAaG,IAA6B,EACxC,aAAa;CACX,UAAU,EAAE,SAAS,8BAA8B;CACnD,YAAY,EAAE,SAAS,8BAA8B;CACrD,MAAM,EAAE,SAAS,mBAAmB;AACtC,EACF,GACaC,IAAqC,EAAE,aAAa,WAAW,GAUtEC,KAAO,EAAE,qBACb,kBAACL,EAAe,WAAhB;CACe;CACb,WAAWE,EACT,qHACAK,MAAgB,aAAa,SAAS,eACxC;CAEA,UAAA,kBAACP,EAAe,OAAhB,EAAsB,WAAU,qCAAsC,CAAA;AAC9C,CAAA,GAGfC,IAA6B,kBAA4C,SACpF,EAAE,aAAU,iBAAc,YAAY,cAAW,sBAAmB,cAAcQ,KAClF,GACA;CACA,OACE,kBAACC,GAAD;EAAa,sBAAA;EACX,UAAA,kBAACV,EAAe,MAAhB;GAA0B;GAAK,WAAWE,EAAG,oCAAoCS,CAAS;GAA1F,UAAA;IACE,kBAACX,EAAe,UAAhB;KACE,WAAWE,EAAG,8BAA8BC,EAA2B,YAAYI,EAAY,CAAC,SAASK,CAAiB;KAC1H,GAAKH,IAAQ;MAAE,MAAM;MAAU,cAAcA;KAAM,IAAI,CAAC;KAEvD;IACsB,CAAA;IACxBF,MAAgB,gBAAgB,kBAACF,GAAD,EAAK,aAAY,WAAY,CAAA;IAC7DE,MAAgB,cAAc,kBAACF,GAAD,EAAK,aAAY,aAAc,CAAA;IAC7DE,MAAgB,UAAU,kBAACP,EAAe,QAAhB,CAAwB,CAAA;GAChC;;CACV,CAAA;AAEjB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
|