themelia-react-ui 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +190 -1
- package/README.md +92 -13
- package/dist/{accordion-BRWh3BM1.js → accordion-BRTcsp8J.js} +8 -8
- package/dist/accordion-BRTcsp8J.js.map +1 -0
- package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
- package/dist/action-menu-Drxw_vJk.js.map +1 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
- package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-DLVdK0Py.js} +151 -155
- package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
- package/dist/{app-shell-BH_bGcE2.js → app-shell-C_fKpljx.js} +11 -10
- package/dist/app-shell-C_fKpljx.js.map +1 -0
- package/dist/{attachment-DsLgNHXt.js → attachment-DbjUWsP0.js} +12 -12
- package/dist/{attachment-DsLgNHXt.js.map → attachment-DbjUWsP0.js.map} +1 -1
- package/dist/auth-CAQcasMV.js +723 -0
- package/dist/auth-CAQcasMV.js.map +1 -0
- package/dist/{avatar-CsnWaYmt.js → avatar-Bu2HhitA.js} +76 -71
- package/dist/avatar-Bu2HhitA.js.map +1 -0
- package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
- package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/buttons.js +3 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +25 -27
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +150 -148
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +3 -3
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +233 -0
- package/dist/base/inline-edit.js.map +1 -0
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/navigation.js +6 -6
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +33 -33
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +83 -81
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +6 -6
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/blocks/admin.js +134 -134
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +120 -117
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +3 -0
- package/dist/blocks/analytics.js +530 -491
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +2 -2
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +395 -383
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +1 -1
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +311 -0
- package/dist/blocks/planning.js.map +1 -0
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
- package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
- package/dist/button-BZDasD04.js +651 -0
- package/dist/button-BZDasD04.js.map +1 -0
- package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
- package/dist/button-BZyfTvwm.js.map +1 -0
- package/dist/buttons-D_6KJvEE.js +99 -0
- package/dist/buttons-D_6KJvEE.js.map +1 -0
- package/dist/{cards-BMB0laLG.js → cards-qGSErLw_.js} +12 -12
- package/dist/{cards-BMB0laLG.js.map → cards-qGSErLw_.js.map} +1 -1
- package/dist/chart-Bsc5BICK.js +150 -0
- package/dist/chart-Bsc5BICK.js.map +1 -0
- package/dist/checkbox-BQNDjUCh.js +34 -0
- package/dist/checkbox-BQNDjUCh.js.map +1 -0
- package/dist/choice-inputs-Mk3iWbhr.js +725 -0
- package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
- package/dist/{code-block-DIlqzoiD.js → code-block-DzHKRybS.js} +23 -23
- package/dist/code-block-DzHKRybS.js.map +1 -0
- package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
- package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
- package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
- package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
- package/dist/{combobox-HDftpzxt.js → combobox-BFnbJJp3.js} +18 -18
- package/dist/combobox-BFnbJJp3.js.map +1 -0
- package/dist/{combobox-CHD750do.js → combobox-hozNwUcc.js} +313 -316
- package/dist/combobox-hozNwUcc.js.map +1 -0
- package/dist/{command-D0kWBZfd.js → command-BnmSchli.js} +9 -9
- package/dist/command-BnmSchli.js.map +1 -0
- package/dist/comments-u5L0OGip.js +1156 -0
- package/dist/comments-u5L0OGip.js.map +1 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
- package/dist/components/base/buttons/button.recipes.d.ts +10 -19
- package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
- package/dist/components/base/cards/card.recipes.d.ts +13 -5
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
- package/dist/components/base/cards/smart-card.types.d.ts +3 -1
- package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
- package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
- package/dist/components/base/forms/form-field.d.ts +1 -0
- package/dist/components/base/forms/form-sizing.d.ts +3 -3
- package/dist/components/base/inline-edit/index.d.ts +2 -0
- package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
- package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
- package/dist/components/base/navigation/tabs.d.ts +3 -5
- package/dist/components/base/popover/popover.recipes.d.ts +3 -3
- package/dist/components/base/structure/structure.recipes.d.ts +6 -0
- package/dist/components/base/table/index.d.ts +1 -1
- package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
- package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
- package/dist/components/blocks/analytics/index.d.ts +1 -0
- package/dist/components/blocks/analytics/types.d.ts +1 -1
- package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
- package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
- package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
- package/dist/components/blocks/planning/index.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
- package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
- package/dist/components/features/combobox/components/error-message.d.ts +1 -1
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
- package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
- package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.types.d.ts +9 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
- package/dist/components/features/overlays/overlays.types.d.ts +5 -4
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
- package/dist/components/layout/auth/auth.types.d.ts +1 -0
- package/dist/components/layout/page/page.d.ts +0 -1
- package/dist/components/layout/page/page.types.d.ts +9 -3
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
- package/dist/components/typography/heading.d.ts +5 -2
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text.styles.d.ts +10 -0
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/table.d.ts +2 -1
- package/dist/container.recipes-D9t8MHR3.js +27 -0
- package/dist/container.recipes-D9t8MHR3.js.map +1 -0
- package/dist/{containers-CPNyNo1_.js → containers-DqB-bSYE.js} +34 -56
- package/dist/containers-DqB-bSYE.js.map +1 -0
- package/dist/control-group-recipes-DBXmfh2E.js +21 -0
- package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
- package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
- package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
- package/dist/{data-display-b3d1TfL4.js → data-display-Bihs9Ven.js} +542 -329
- package/dist/data-display-Bihs9Ven.js.map +1 -0
- package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
- package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
- package/dist/{date-picker-DI6kPNof.js → date-picker-DzP5HQq7.js} +492 -472
- package/dist/date-picker-DzP5HQq7.js.map +1 -0
- package/dist/date-pickers-BpgGz7S-.js +196 -0
- package/dist/date-pickers-BpgGz7S-.js.map +1 -0
- package/dist/{display-ByI5tkqy.js → display-CS6Hbk18.js} +8 -8
- package/dist/{display-ByI5tkqy.js.map → display-CS6Hbk18.js.map} +1 -1
- package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
- package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
- package/dist/features/activities.js +152 -141
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +182 -179
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +9 -9
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +25 -23
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +103 -104
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +375 -373
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +222 -224
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +29 -29
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +59 -58
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +856 -855
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1210 -1209
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +133 -132
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +29 -31
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +13 -13
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +82 -82
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +4 -4
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +456 -450
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-CJkUAapr.js +233 -0
- package/dist/feedback-CJkUAapr.js.map +1 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
- package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
- package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
- package/dist/{filters-qtrcv1hf.js → filters-D6FF8L6s.js} +715 -720
- package/dist/filters-D6FF8L6s.js.map +1 -0
- package/dist/{form-field-C6W-y2hR.js → form-field-CZwrkP7m.js} +17 -9
- package/dist/form-field-CZwrkP7m.js.map +1 -0
- package/dist/{form-sizing-39NohSqn.js → form-sizing-QP8aIRaW.js} +10 -6
- package/dist/form-sizing-QP8aIRaW.js.map +1 -0
- package/dist/{forms-BF-HSbff.js → forms-B5NCbkSC.js} +35 -35
- package/dist/{forms-BF-HSbff.js.map → forms-B5NCbkSC.js.map} +1 -1
- package/dist/forms-numeric-Crrm80Lm.js +867 -0
- package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
- package/dist/{header-B8ex54cY.js → header-kxruN3RM.js} +53 -49
- package/dist/header-kxruN3RM.js.map +1 -0
- package/dist/{hooks-D6UBVzf2.js → hooks-BrlnCwQd.js} +2 -2
- package/dist/{hooks-D6UBVzf2.js.map → hooks-BrlnCwQd.js.map} +1 -1
- package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
- package/dist/http-CdEIHyQf.js.map +1 -0
- package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
- package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/input-SX9V0AL3.js +255 -0
- package/dist/input-SX9V0AL3.js.map +1 -0
- package/dist/input-vxcaNCYC.js +20 -0
- package/dist/input-vxcaNCYC.js.map +1 -0
- package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
- package/dist/item-DE4YnuJx.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +44 -4
- package/dist/lib/control-group-recipes.d.ts +22 -0
- package/dist/lib/field-affordance-recipes.d.ts +35 -2
- package/dist/lib/field-state-recipes.d.ts +2 -2
- package/dist/lib/navigation-row-recipes.d.ts +3 -2
- package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
- package/dist/lib/surface-recipes.d.ts +5 -2
- package/dist/lib/token-merge.generated.d.ts +144 -2
- package/dist/lib/ui-provider/types.d.ts +4 -2
- package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DLp3HAz0.js} +75 -74
- package/dist/media-gallery-DLp3HAz0.js.map +1 -0
- package/dist/{mentions-CRio8mTm.js → mentions-Cl0Kt_Pd.js} +52 -50
- package/dist/{mentions-CRio8mTm.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
- package/dist/message-SZUNB1eX.js +127 -0
- package/dist/message-SZUNB1eX.js.map +1 -0
- package/dist/{navigation-BTrEb5u4.js → navigation-DnQSNMT0.js} +64 -55
- package/dist/navigation-DnQSNMT0.js.map +1 -0
- package/dist/{navigation-DqEITuD2.js → navigation-DyytsLRB.js} +37 -37
- package/dist/navigation-DyytsLRB.js.map +1 -0
- package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
- package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
- package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
- package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
- package/dist/overlays-DUbs1KEi.js +1011 -0
- package/dist/overlays-DUbs1KEi.js.map +1 -0
- package/dist/{page-BMBGjJY8.js → page-hGmT4nWK.js} +75 -64
- package/dist/page-hGmT4nWK.js.map +1 -0
- package/dist/{page-header-BH41wCyY.js → page-header-D8nERkn5.js} +9 -9
- package/dist/page-header-D8nERkn5.js.map +1 -0
- package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
- package/dist/pagination-NLGqRirf.js.map +1 -0
- package/dist/{popover-TInGXsjg.js → popover-CghIYdQf.js} +23 -22
- package/dist/popover-CghIYdQf.js.map +1 -0
- package/dist/{popover-menu-BzqXqE72.js → popover-menu-B4PoWhRl.js} +6 -6
- package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
- package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
- package/dist/popover.recipes-QlD4JenO.js.map +1 -0
- package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
- package/dist/primitives-C7ff0QaI.js.map +1 -0
- package/dist/primitives.js +3 -3
- package/dist/progress-BroqrAyV.js +169 -0
- package/dist/progress-BroqrAyV.js.map +1 -0
- package/dist/{receipt-DYWTQGEc.js → receipt-BuJynLgf.js} +8 -8
- package/dist/{receipt-DYWTQGEc.js.map → receipt-BuJynLgf.js.map} +1 -1
- package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
- package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
- package/dist/rich-text-editor-BKyG7rWz.js +574 -0
- package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
- package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
- package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
- package/dist/scroll-area-D-pIhEKl.js.map +1 -0
- package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
- package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
- package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
- package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-D9f_wdIC.js → settings-DOTOzeZ2.js} +10 -9
- package/dist/{settings-D9f_wdIC.js.map → settings-DOTOzeZ2.js.map} +1 -1
- package/dist/{sheet-vOUloJ4O.js → sheet-BFhrNehm.js} +11 -11
- package/dist/sheet-BFhrNehm.js.map +1 -0
- package/dist/{sidebar-CNBKFDRW.js → sidebar-CyR4XKwR.js} +219 -200
- package/dist/sidebar-CyR4XKwR.js.map +1 -0
- package/dist/{sidebar-C3UKkbC5.js → sidebar-SvGJ0Zwi.js} +63 -58
- package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
- package/dist/{skeleton-BvRhK8y-.js → skeleton-3F0uhYn3.js} +4 -4
- package/dist/{skeleton-BvRhK8y-.js.map → skeleton-3F0uhYn3.js.map} +1 -1
- package/dist/{smart-card-B5FcKODh.js → smart-card-DjGVV2xr.js} +206 -199
- package/dist/smart-card-DjGVV2xr.js.map +1 -0
- package/dist/{spinner-JtlFJ7Nc.js → spinner-Cpf7oRkF.js} +5 -5
- package/dist/{spinner-JtlFJ7Nc.js.map → spinner-Cpf7oRkF.js.map} +1 -1
- package/dist/{structure-BvW4vG4H.js → structure-CRdqVawd.js} +14 -14
- package/dist/{structure-BvW4vG4H.js.map → structure-CRdqVawd.js.map} +1 -1
- package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
- package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
- package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
- package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
- package/dist/table-CLtJTxoR.js.map +1 -0
- package/dist/table-CcRDZiLP.js +1444 -0
- package/dist/table-CcRDZiLP.js.map +1 -0
- package/dist/tabs-BNgu7g0u.js +188 -0
- package/dist/tabs-BNgu7g0u.js.map +1 -0
- package/dist/text-inputs-DsR56TR-.js +330 -0
- package/dist/text-inputs-DsR56TR-.js.map +1 -0
- package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
- package/dist/text.styles-Q4sGAIgA.js.map +1 -0
- package/dist/theme.css +77 -115
- package/dist/{timelines-CnZ2S_Gr.js → timelines-D1pkt3se.js} +84 -78
- package/dist/timelines-D1pkt3se.js.map +1 -0
- package/dist/{tree-COD9BGdU.js → tree-BtmYyMZV.js} +8 -8
- package/dist/{tree-COD9BGdU.js.map → tree-BtmYyMZV.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-BxQgiZyw.js +96 -0
- package/dist/typography-BxQgiZyw.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
- package/dist/ui-provider-DRPn3qNl.js.map +1 -0
- package/dist/ui-provider.js +1 -1
- package/dist/{upload-DIzw1dx1.js → upload-CDbYw1WN.js} +326 -323
- package/dist/upload-CDbYw1WN.js.map +1 -0
- package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-CNd_hH_a.js} +25 -25
- package/dist/upload-queue-CNd_hH_a.js.map +1 -0
- package/dist/usage-card-VyJLUwRr.js +457 -0
- package/dist/usage-card-VyJLUwRr.js.map +1 -0
- package/dist/utils-BvH9PSmq.js +4275 -0
- package/dist/utils-BvH9PSmq.js.map +1 -0
- package/dist/value-inputs-D0KCrfVC.js +840 -0
- package/dist/value-inputs-D0KCrfVC.js.map +1 -0
- package/dist/{workspace-Cbqz4FzN.js → workspace-CcR8r-Nt.js} +115 -122
- package/dist/workspace-CcR8r-Nt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +112 -18
- package/docs/consumer-skill/examples/analytics.tsx +34 -0
- package/docs/consumer-skill/examples/app-layout.tsx +42 -12
- package/docs/consumer-skill/examples/detail.tsx +24 -9
- package/docs/consumer-skill/examples/manifest.json +27 -1
- package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
- package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
- package/docs/consumer-skill/examples/website.tsx +56 -0
- package/docs/consumer-skill/references/analytics.md +70 -0
- package/docs/consumer-skill/references/composition.md +219 -2
- package/docs/consumer-skill/references/design-contract.md +37 -10
- package/docs/consumer-skill/references/discovery.md +93 -5
- package/docs/consumer-skill/references/installation.md +20 -3
- package/docs/consumer-skill/references/integration.md +26 -0
- package/docs/consumer-skill/references/public-api.json +2416 -388
- package/docs/consumer-skill/references/review.md +126 -0
- package/docs/consumer-skill/references/theming.md +52 -7
- package/docs/consumer-skill/references/tokens.json +177 -9
- package/docs/consumer-skill/references/workflows.md +129 -1
- package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +317 -0
- package/docs/consumer-skill/scripts/discovery.mjs +65 -8
- package/docs/consumer-skill/scripts/surface-policy.mjs +66 -0
- package/package.json +30 -6
- package/dist/accordion-BRWh3BM1.js.map +0 -1
- package/dist/action-menu-Cx3SdfbN.js.map +0 -1
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js +0 -23
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
- package/dist/ai-artifact-DkOArd3-.js.map +0 -1
- package/dist/app-shell-BH_bGcE2.js.map +0 -1
- package/dist/auth-BDB1V_2q.js +0 -704
- package/dist/auth-BDB1V_2q.js.map +0 -1
- package/dist/avatar-CsnWaYmt.js.map +0 -1
- package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
- package/dist/button-BS6l5JUw.js.map +0 -1
- package/dist/buttons-Co6GavvM.js +0 -674
- package/dist/buttons-Co6GavvM.js.map +0 -1
- package/dist/chart-DVfcwQu6.js +0 -149
- package/dist/chart-DVfcwQu6.js.map +0 -1
- package/dist/choice-inputs-CavA-SGV.js +0 -644
- package/dist/choice-inputs-CavA-SGV.js.map +0 -1
- package/dist/code-block-DIlqzoiD.js.map +0 -1
- package/dist/combobox-CHD750do.js.map +0 -1
- package/dist/combobox-HDftpzxt.js.map +0 -1
- package/dist/command-D0kWBZfd.js.map +0 -1
- package/dist/comments-CvYeglMS.js +0 -1132
- package/dist/comments-CvYeglMS.js.map +0 -1
- package/dist/containers-CPNyNo1_.js.map +0 -1
- package/dist/data-display-b3d1TfL4.js.map +0 -1
- package/dist/date-picker-DI6kPNof.js.map +0 -1
- package/dist/date-pickers-ByP6Cv2z.js +0 -224
- package/dist/date-pickers-ByP6Cv2z.js.map +0 -1
- package/dist/feedback-a9j9J-9A.js +0 -391
- package/dist/feedback-a9j9J-9A.js.map +0 -1
- package/dist/field-affordance-recipes-CHdUtn2Z.js +0 -17
- package/dist/field-affordance-recipes-CHdUtn2Z.js.map +0 -1
- package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
- package/dist/filters-qtrcv1hf.js.map +0 -1
- package/dist/form-field-C6W-y2hR.js.map +0 -1
- package/dist/form-sizing-39NohSqn.js.map +0 -1
- package/dist/forms-numeric-Y15Bg5Nr.js +0 -867
- package/dist/forms-numeric-Y15Bg5Nr.js.map +0 -1
- package/dist/header-B8ex54cY.js.map +0 -1
- package/dist/http-CLTVJc5I.js.map +0 -1
- package/dist/input-DMorJiTI.js +0 -202
- package/dist/input-DMorJiTI.js.map +0 -1
- package/dist/input-ci9fIgFH.js +0 -20
- package/dist/input-ci9fIgFH.js.map +0 -1
- package/dist/item-pJ0GsOiJ.js.map +0 -1
- package/dist/media-gallery-Ca4YmvBi.js.map +0 -1
- package/dist/message-B5-6LeYl.js +0 -108
- package/dist/message-B5-6LeYl.js.map +0 -1
- package/dist/navigation-BTrEb5u4.js.map +0 -1
- package/dist/navigation-DqEITuD2.js.map +0 -1
- package/dist/navigation-row-recipes-BFpvGPGE.js.map +0 -1
- package/dist/overlays-DBqV0J_V.js +0 -982
- package/dist/overlays-DBqV0J_V.js.map +0 -1
- package/dist/page-BMBGjJY8.js.map +0 -1
- package/dist/page-header-BH41wCyY.js.map +0 -1
- package/dist/pagination-C29vvt3I.js.map +0 -1
- package/dist/popover-TInGXsjg.js.map +0 -1
- package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
- package/dist/primitives-DKPOGVpj.js.map +0 -1
- package/dist/rich-text-editor-BZSJchAF.js +0 -575
- package/dist/rich-text-editor-BZSJchAF.js.map +0 -1
- package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
- package/dist/scroll-area-BheMQ270.js.map +0 -1
- package/dist/select-B2mb-qN2.js +0 -108
- package/dist/select-B2mb-qN2.js.map +0 -1
- package/dist/sheet-vOUloJ4O.js.map +0 -1
- package/dist/sidebar-C3UKkbC5.js.map +0 -1
- package/dist/sidebar-CNBKFDRW.js.map +0 -1
- package/dist/smart-card-B5FcKODh.js.map +0 -1
- package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
- package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
- package/dist/table-DnlAJ-xR.js.map +0 -1
- package/dist/table-ghtAQ-JJ.js +0 -1424
- package/dist/table-ghtAQ-JJ.js.map +0 -1
- package/dist/tabs-DY09eoZg.js +0 -187
- package/dist/tabs-DY09eoZg.js.map +0 -1
- package/dist/text-inputs-BhOcedTo.js +0 -331
- package/dist/text-inputs-BhOcedTo.js.map +0 -1
- package/dist/text.styles-BwB7vAF2.js.map +0 -1
- package/dist/timelines-CnZ2S_Gr.js.map +0 -1
- package/dist/typography-Cv8MT-82.js +0 -96
- package/dist/typography-Cv8MT-82.js.map +0 -1
- package/dist/ui-provider-CftIB6TY.js.map +0 -1
- package/dist/upload-DIzw1dx1.js.map +0 -1
- package/dist/upload-queue-xRJ3qDmd.js.map +0 -1
- package/dist/utils-C2EKeIw3.js +0 -72
- package/dist/utils-C2EKeIw3.js.map +0 -1
- package/dist/value-inputs-Co1fu-xv.js +0 -824
- package/dist/value-inputs-Co1fu-xv.js.map +0 -1
- package/dist/workspace-Cbqz4FzN.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { t } from "../utils-
|
|
4
|
-
import { n } from "../
|
|
5
|
-
import {
|
|
6
|
-
import { t as i } from "../structure-
|
|
7
|
-
import { t as a } from "../field-state-recipes-
|
|
8
|
-
import { t as o } from "../input-
|
|
9
|
-
import { t as s } from "../form-field-
|
|
10
|
-
import { forwardRef as c, useEffect as l, useId as ee, useImperativeHandle as te,
|
|
3
|
+
import { t } from "../utils-BvH9PSmq.js";
|
|
4
|
+
import { a as n } from "../typography-BxQgiZyw.js";
|
|
5
|
+
import { t as r } from "../button-BZDasD04.js";
|
|
6
|
+
import { t as i } from "../structure-CRdqVawd.js";
|
|
7
|
+
import { t as a } from "../field-state-recipes-DQQpiLWC.js";
|
|
8
|
+
import { t as o } from "../input-SX9V0AL3.js";
|
|
9
|
+
import { t as s } from "../form-field-CZwrkP7m.js";
|
|
10
|
+
import { forwardRef as c, useEffect as l, useId as ee, useImperativeHandle as te, useLayoutEffect as ne, useMemo as re, useRef as u, useState as d } from "react";
|
|
11
11
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
12
12
|
//#region src/components/base/signature-pad/signature-pad.types.ts
|
|
13
|
-
var
|
|
13
|
+
var ie = {
|
|
14
14
|
label: "Signature",
|
|
15
15
|
instructions: "Draw with a pointer or type your name below. Escape cancels a stroke; Control or Command Z undoes it.",
|
|
16
16
|
drawingInstructions: "Draw with a pointer. Escape cancels a stroke; Control or Command Z undoes it.",
|
|
@@ -21,22 +21,22 @@ var m = {
|
|
|
21
21
|
clear: "Clear signature",
|
|
22
22
|
empty: "Signature is empty",
|
|
23
23
|
signed: "Signature entered"
|
|
24
|
-
},
|
|
25
|
-
function
|
|
24
|
+
}, m = { strokes: [] };
|
|
25
|
+
function h(e) {
|
|
26
26
|
return !e.typedName?.trim() && !e.strokes.some((e) => e.points.length > 0);
|
|
27
27
|
}
|
|
28
|
-
var
|
|
29
|
-
function
|
|
28
|
+
var g = (e) => Number.isFinite(e) ? Math.min(1, Math.max(0, e)) : 0;
|
|
29
|
+
function _(e) {
|
|
30
30
|
return {
|
|
31
31
|
strokes: e.strokes.filter((e) => e.points.length > 0).map((e) => ({ points: e.points.map((e) => ({
|
|
32
|
-
x:
|
|
33
|
-
y:
|
|
34
|
-
pressure:
|
|
32
|
+
x: g(e.x),
|
|
33
|
+
y: g(e.y),
|
|
34
|
+
pressure: g(e.pressure)
|
|
35
35
|
})) })),
|
|
36
36
|
...e.typedName === void 0 ? {} : { typedName: e.typedName }
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function v(e, t, n, r, i) {
|
|
40
40
|
e.clearRect(0, 0, n, r), e.lineCap = "round", e.lineJoin = "round";
|
|
41
41
|
for (let a of t.strokes) {
|
|
42
42
|
let t = a.points[0];
|
|
@@ -50,29 +50,31 @@ function y(e, t, n, r, i) {
|
|
|
50
50
|
}
|
|
51
51
|
t.typedName && (e.font = `${Math.max(12, r / 5)}px cursive`, e.textBaseline = "bottom", e.fillText(t.typedName, n * .04, r * .9, n * .92));
|
|
52
52
|
}
|
|
53
|
-
var
|
|
53
|
+
var y = (e) => e.replace(/[&<>"']/g, (e) => ({
|
|
54
54
|
"&": "&",
|
|
55
55
|
"<": "<",
|
|
56
56
|
">": ">",
|
|
57
57
|
"\"": """,
|
|
58
58
|
"'": "'"
|
|
59
59
|
})[e]);
|
|
60
|
-
function
|
|
61
|
-
let a =
|
|
60
|
+
function ae(e, t = 600, n = 200, r = 2, i = "currentColor") {
|
|
61
|
+
let a = _(e);
|
|
62
62
|
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${n}" width="${t}" height="${n}">${a.strokes.map((e) => {
|
|
63
63
|
let a = e.points[0];
|
|
64
|
-
return e.points.length === 1 ? `<circle cx="${a.x * t}" cy="${a.y * n}" r="${r * (.5 + a.pressure) / 2}" fill="${
|
|
64
|
+
return e.points.length === 1 ? `<circle cx="${a.x * t}" cy="${a.y * n}" r="${r * (.5 + a.pressure) / 2}" fill="${y(i)}"/>` : e.points.slice(1).map((a, o) => {
|
|
65
65
|
let s = e.points[o];
|
|
66
|
-
return `<path d="M${s.x * t} ${s.y * n}L${a.x * t} ${a.y * n}" fill="none" stroke="${
|
|
66
|
+
return `<path d="M${s.x * t} ${s.y * n}L${a.x * t} ${a.y * n}" fill="none" stroke="${y(i)}" stroke-width="${r * (.5 + (s.pressure + a.pressure) / 2)}" stroke-linecap="round"/>`;
|
|
67
67
|
}).join("");
|
|
68
|
-
}).join("")}${a.typedName ? `<text x="${t * .04}" y="${n * .9}" textLength="${Math.min(t * .92, a.typedName.length * n * .1)}" font-family="cursive" font-size="${Math.max(12, n / 5)}" fill="${
|
|
68
|
+
}).join("")}${a.typedName ? `<text x="${t * .04}" y="${n * .9}" textLength="${Math.min(t * .92, a.typedName.length * n * .1)}" font-family="cursive" font-size="${Math.max(12, n / 5)}" fill="${y(i)}">${y(a.typedName)}</text>` : ""}</svg>`;
|
|
69
69
|
}
|
|
70
70
|
//#endregion
|
|
71
71
|
//#region src/components/base/signature-pad/signature-pad.tsx
|
|
72
|
-
var
|
|
73
|
-
let { value:
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
var b = c(function(c, g) {
|
|
73
|
+
let { value: y, defaultValue: b = m, onValueChange: x, disabled: S = !1, readOnly: C = !1, invalid: w, name: T, form: E, required: D, allowTypedSignature: O = !0, strokeWidth: k = 2, strings: oe, className: se, id: ce, ...le } = c, A = Object.prototype.hasOwnProperty.call(c, "value"), [ue, de] = d(() => _(b)), fe = re(() => _(y ?? m), [y]), j = A ? fe : ue, M = u(j);
|
|
74
|
+
ne(() => {
|
|
75
|
+
M.current = j;
|
|
76
|
+
}, [j]);
|
|
77
|
+
let N = u([]), P = u([]), [pe, F] = d(0), I = u(null), [me, L] = d(!1), R = u(null), z = u(null), B = u(null), V = u(null), he = ee(), H = ce ?? `signature-${he}`, U = e(ie, oe), ge = O ? U.instructions : oe?.instructions ?? U.drawingInstructions, W = S || C, G = Number.isFinite(k) ? Math.max(.25, k) : 2, K = (e) => {
|
|
76
78
|
let t = R.current;
|
|
77
79
|
if (!t) return;
|
|
78
80
|
let n = t.getBoundingClientRect();
|
|
@@ -80,15 +82,15 @@ var x = c(function(c, _) {
|
|
|
80
82
|
let r = window.devicePixelRatio || 1;
|
|
81
83
|
t.width !== Math.round(n.width * r) && (t.width = Math.round(n.width * r)), t.height !== Math.round(n.height * r) && (t.height = Math.round(n.height * r));
|
|
82
84
|
let i = t.getContext("2d");
|
|
83
|
-
i && (i.setTransform(r, 0, 0, r, 0, 0), i.strokeStyle = i.fillStyle = getComputedStyle(t).color,
|
|
85
|
+
i && (i.setTransform(r, 0, 0, r, 0, 0), i.strokeStyle = i.fillStyle = getComputedStyle(t).color, v(i, _(e), n.width, n.height, G));
|
|
84
86
|
}, q = () => {
|
|
85
87
|
let e = I.current;
|
|
86
88
|
I.current = null, L(!1), e && R.current?.hasPointerCapture?.(e.pointerId) && R.current.releasePointerCapture(e.pointerId), K(M.current);
|
|
87
89
|
}, J = (e, t = !0) => {
|
|
88
90
|
if (W) return;
|
|
89
91
|
q();
|
|
90
|
-
let n =
|
|
91
|
-
t && (N.current.push(M.current), P.current = []), V.current = n, A || (M.current = n,
|
|
92
|
+
let n = _(e);
|
|
93
|
+
t && (N.current.push(M.current), P.current = []), V.current = n, A || (M.current = n, de(n)), x?.(n), F((e) => e + 1);
|
|
92
94
|
}, Y = () => {
|
|
93
95
|
if (W || !N.current.length) return;
|
|
94
96
|
let e = N.current.pop();
|
|
@@ -97,29 +99,29 @@ var x = c(function(c, _) {
|
|
|
97
99
|
if (W || !P.current.length) return;
|
|
98
100
|
let e = P.current.pop();
|
|
99
101
|
N.current.push(M.current), J(e, !1);
|
|
100
|
-
}, Z = () => (
|
|
101
|
-
te(
|
|
102
|
+
}, Z = () => (O ? B.current : R.current)?.focus();
|
|
103
|
+
te(g, () => ({
|
|
102
104
|
focus: Z,
|
|
103
105
|
undo: Y,
|
|
104
106
|
redo: X,
|
|
105
|
-
clear: () => J(
|
|
107
|
+
clear: () => J(m),
|
|
106
108
|
serialize: (e = "png", t = {}) => {
|
|
107
|
-
let n =
|
|
109
|
+
let n = _(M.current);
|
|
108
110
|
if (e === "json") return JSON.stringify(n);
|
|
109
111
|
let r = R.current?.getBoundingClientRect(), i = Number.isFinite(t.width) ? Math.max(1, t.width) : r?.width || 600, a = Number.isFinite(t.height) ? Math.max(1, t.height) : r?.height || 200, o = R.current ? getComputedStyle(R.current).color : "currentColor";
|
|
110
|
-
if (e === "svg") return
|
|
112
|
+
if (e === "svg") return ae(n, i, a, G, o);
|
|
111
113
|
let s = Number.isFinite(t.scale) ? Math.max(.1, Math.min(8, t.scale)) : window.devicePixelRatio || 1, c = document.createElement("canvas");
|
|
112
114
|
c.width = Math.round(i * s), c.height = Math.round(a * s);
|
|
113
115
|
let l = c.getContext("2d");
|
|
114
116
|
if (!l) throw Error("Canvas export is unavailable in this environment. Use SVG or JSON.");
|
|
115
|
-
return l.scale(s, s), l.strokeStyle = l.fillStyle = o,
|
|
117
|
+
return l.scale(s, s), l.strokeStyle = l.fillStyle = o, v(l, n, i, a, G), c.toDataURL("image/png");
|
|
116
118
|
}
|
|
117
119
|
})), l(() => {
|
|
118
120
|
A && JSON.stringify(j) !== JSON.stringify(V.current) && (N.current = [], P.current = [], F((e) => e + 1)), V.current = j, q();
|
|
119
121
|
}, [
|
|
120
122
|
j,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
+
S,
|
|
124
|
+
C
|
|
123
125
|
]), l(() => {
|
|
124
126
|
let e = R.current;
|
|
125
127
|
if (!e) return;
|
|
@@ -145,21 +147,21 @@ var x = c(function(c, _) {
|
|
|
145
147
|
}, [G]), l(() => {
|
|
146
148
|
let e = z.current?.form ?? B.current?.form ?? R.current?.closest("form"), t = !0, n, r = (e) => {
|
|
147
149
|
clearTimeout(n), n = setTimeout(() => {
|
|
148
|
-
n = void 0, t && !e.defaultPrevented && !W && (N.current = [], P.current = [], J(
|
|
150
|
+
n = void 0, t && !e.defaultPrevented && !W && (N.current = [], P.current = [], J(b, !1));
|
|
149
151
|
}, 0);
|
|
150
152
|
};
|
|
151
153
|
return e?.addEventListener("reset", r), () => {
|
|
152
154
|
t = !1, clearTimeout(n), e?.removeEventListener("reset", r);
|
|
153
155
|
};
|
|
154
156
|
}, [
|
|
155
|
-
|
|
157
|
+
b,
|
|
156
158
|
A,
|
|
157
159
|
W,
|
|
158
|
-
|
|
159
|
-
D,
|
|
160
|
+
x,
|
|
160
161
|
E,
|
|
161
|
-
|
|
162
|
-
|
|
162
|
+
T,
|
|
163
|
+
D,
|
|
164
|
+
O
|
|
163
165
|
]);
|
|
164
166
|
let Q = (e, t = e) => {
|
|
165
167
|
let n = e.currentTarget.getBoundingClientRect();
|
|
@@ -168,7 +170,7 @@ var x = c(function(c, _) {
|
|
|
168
170
|
y: Math.max(0, Math.min(1, (t.clientY - n.top) / (n.height || 1))),
|
|
169
171
|
pressure: e.pointerType === "pen" && t.pressure || .5
|
|
170
172
|
};
|
|
171
|
-
},
|
|
173
|
+
}, _e = (e) => {
|
|
172
174
|
let t = I.current;
|
|
173
175
|
if (!t || t.pointerId !== e.pointerId) return;
|
|
174
176
|
let n = Q(e), r = t.points[t.points.length - 1];
|
|
@@ -176,36 +178,36 @@ var x = c(function(c, _) {
|
|
|
176
178
|
...t.initial,
|
|
177
179
|
strokes: [...t.initial.strokes, { points: t.points }]
|
|
178
180
|
});
|
|
179
|
-
}, $ =
|
|
181
|
+
}, $ = h(j);
|
|
180
182
|
return /* @__PURE__ */ p(i, {
|
|
181
|
-
...
|
|
183
|
+
...le,
|
|
182
184
|
id: H,
|
|
183
185
|
role: "group",
|
|
184
|
-
"aria-label":
|
|
186
|
+
"aria-label": le["aria-label"] ?? U.label,
|
|
185
187
|
gap: "sm",
|
|
186
|
-
className: t("signature-pad--component min-w-0",
|
|
187
|
-
"data-history-version":
|
|
188
|
-
"data-disabled":
|
|
189
|
-
"data-readonly":
|
|
188
|
+
className: t("signature-pad--component min-w-0", se),
|
|
189
|
+
"data-history-version": pe,
|
|
190
|
+
"data-disabled": S || void 0,
|
|
191
|
+
"data-readonly": C || void 0,
|
|
190
192
|
children: [
|
|
191
|
-
/* @__PURE__ */ f(
|
|
193
|
+
/* @__PURE__ */ f(n, {
|
|
192
194
|
id: `${H}-instructions`,
|
|
193
195
|
size: "xs",
|
|
194
196
|
type: "secondary",
|
|
195
|
-
children:
|
|
197
|
+
children: ge
|
|
196
198
|
}),
|
|
197
199
|
/* @__PURE__ */ p("div", {
|
|
198
|
-
className: t("signature-pad--area relative overflow-hidden rounded-
|
|
199
|
-
"aria-invalid":
|
|
200
|
+
className: t("signature-pad--area relative overflow-hidden rounded-inner border border-input bg-background text-foreground", a.invalid, S && "cursor-not-allowed opacity-50"),
|
|
201
|
+
"aria-invalid": w || void 0,
|
|
200
202
|
children: [/* @__PURE__ */ f("canvas", {
|
|
201
203
|
ref: R,
|
|
202
204
|
className: t("signature-pad--canvas block w-full aspect-[3/1] min-h-40 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset", !W && "touch-none cursor-crosshair"),
|
|
203
|
-
tabIndex:
|
|
205
|
+
tabIndex: S ? -1 : 0,
|
|
204
206
|
role: "img",
|
|
205
207
|
"aria-label": U.label,
|
|
206
208
|
"aria-describedby": `${H}-instructions ${H}-status`,
|
|
207
|
-
"aria-disabled":
|
|
208
|
-
"aria-invalid":
|
|
209
|
+
"aria-disabled": S || void 0,
|
|
210
|
+
"aria-invalid": w || void 0,
|
|
209
211
|
onPointerDown: (e) => {
|
|
210
212
|
W || I.current || e.button !== 0 || (e.preventDefault(), e.currentTarget.focus(), e.currentTarget.setPointerCapture?.(e.pointerId), I.current = {
|
|
211
213
|
pointerId: e.pointerId,
|
|
@@ -226,7 +228,7 @@ var x = c(function(c, _) {
|
|
|
226
228
|
strokes: [...t.initial.strokes, { points: t.points }]
|
|
227
229
|
});
|
|
228
230
|
},
|
|
229
|
-
onPointerUp:
|
|
231
|
+
onPointerUp: _e,
|
|
230
232
|
onPointerCancel: (e) => {
|
|
231
233
|
I.current?.pointerId === e.pointerId && q();
|
|
232
234
|
},
|
|
@@ -239,26 +241,26 @@ var x = c(function(c, _) {
|
|
|
239
241
|
onKeyDown: (e) => {
|
|
240
242
|
e.key === "Escape" && q(), !W && ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "z" && (e.preventDefault(), e.shiftKey ? X() : Y()), (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "y" && (e.preventDefault(), X()));
|
|
241
243
|
},
|
|
242
|
-
children:
|
|
243
|
-
}), $ && !
|
|
244
|
+
children: ge
|
|
245
|
+
}), $ && !me && /* @__PURE__ */ f("div", {
|
|
244
246
|
"aria-hidden": "true",
|
|
245
247
|
className: "signature-pad--placeholder pointer-events-none absolute inset-0 flex items-center justify-center",
|
|
246
|
-
children: /* @__PURE__ */ f(
|
|
248
|
+
children: /* @__PURE__ */ f(n, {
|
|
247
249
|
type: "secondary",
|
|
248
250
|
children: U.placeholder
|
|
249
251
|
})
|
|
250
252
|
})]
|
|
251
253
|
}),
|
|
252
|
-
|
|
254
|
+
O && /* @__PURE__ */ f(s, {
|
|
253
255
|
label: U.typedName,
|
|
254
256
|
htmlFor: `${H}-typed`,
|
|
255
257
|
children: /* @__PURE__ */ f(o, {
|
|
256
258
|
ref: B,
|
|
257
259
|
id: `${H}-typed`,
|
|
258
260
|
value: j.typedName ?? "",
|
|
259
|
-
disabled:
|
|
260
|
-
readOnly:
|
|
261
|
-
invalid:
|
|
261
|
+
disabled: S,
|
|
262
|
+
readOnly: C,
|
|
263
|
+
invalid: w,
|
|
262
264
|
onChange: (e) => J({
|
|
263
265
|
...M.current,
|
|
264
266
|
typedName: e.target.value
|
|
@@ -270,7 +272,7 @@ var x = c(function(c, _) {
|
|
|
270
272
|
gap: "xs",
|
|
271
273
|
wrap: !0,
|
|
272
274
|
children: [
|
|
273
|
-
/* @__PURE__ */ f(
|
|
275
|
+
/* @__PURE__ */ f(r, {
|
|
274
276
|
type: "button",
|
|
275
277
|
buttonStyle: "outline",
|
|
276
278
|
disabled: W || !N.current.length,
|
|
@@ -279,7 +281,7 @@ var x = c(function(c, _) {
|
|
|
279
281
|
},
|
|
280
282
|
children: U.undo
|
|
281
283
|
}),
|
|
282
|
-
/* @__PURE__ */ f(
|
|
284
|
+
/* @__PURE__ */ f(r, {
|
|
283
285
|
type: "button",
|
|
284
286
|
buttonStyle: "outline",
|
|
285
287
|
disabled: W || !P.current.length,
|
|
@@ -288,35 +290,35 @@ var x = c(function(c, _) {
|
|
|
288
290
|
},
|
|
289
291
|
children: U.redo
|
|
290
292
|
}),
|
|
291
|
-
/* @__PURE__ */ f(
|
|
293
|
+
/* @__PURE__ */ f(r, {
|
|
292
294
|
type: "button",
|
|
293
295
|
buttonStyle: "outline",
|
|
294
296
|
disabled: W || $,
|
|
295
297
|
onClick: () => {
|
|
296
|
-
J(
|
|
298
|
+
J(m), Z();
|
|
297
299
|
},
|
|
298
300
|
children: U.clear
|
|
299
301
|
})
|
|
300
302
|
]
|
|
301
303
|
}),
|
|
302
|
-
/* @__PURE__ */ f(
|
|
304
|
+
/* @__PURE__ */ f(n, {
|
|
303
305
|
id: `${H}-status`,
|
|
304
306
|
role: "status",
|
|
305
307
|
size: "xs",
|
|
306
308
|
type: "secondary",
|
|
307
309
|
children: $ ? U.empty : U.signed
|
|
308
310
|
}),
|
|
309
|
-
(
|
|
311
|
+
(T || D) && /* @__PURE__ */ f("input", {
|
|
310
312
|
ref: z,
|
|
311
313
|
className: "sr-only",
|
|
312
314
|
type: "text",
|
|
313
315
|
tabIndex: -1,
|
|
314
316
|
"aria-hidden": "true",
|
|
315
|
-
name:
|
|
316
|
-
form:
|
|
317
|
-
disabled:
|
|
318
|
-
readOnly:
|
|
319
|
-
required:
|
|
317
|
+
name: T,
|
|
318
|
+
form: E,
|
|
319
|
+
disabled: S,
|
|
320
|
+
readOnly: C,
|
|
321
|
+
required: D,
|
|
320
322
|
value: $ ? "" : JSON.stringify(j),
|
|
321
323
|
onChange: () => {},
|
|
322
324
|
onFocus: Z,
|
|
@@ -324,8 +326,8 @@ var x = c(function(c, _) {
|
|
|
324
326
|
})
|
|
325
327
|
]
|
|
326
328
|
});
|
|
327
|
-
}),
|
|
328
|
-
let o =
|
|
329
|
+
}), x = c(function({ value: e, strokeWidth: n = 2, className: r, ...i }, a) {
|
|
330
|
+
let o = _(e);
|
|
329
331
|
return /* @__PURE__ */ p("svg", {
|
|
330
332
|
ref: a,
|
|
331
333
|
role: "img",
|
|
@@ -359,6 +361,6 @@ var x = c(function(c, _) {
|
|
|
359
361
|
});
|
|
360
362
|
});
|
|
361
363
|
//#endregion
|
|
362
|
-
export {
|
|
364
|
+
export { b as SignaturePad, x as SignaturePadPreview, ie as defaultSignaturePadStrings, h as isSignatureEmpty, ae as signaturePadToSVG };
|
|
363
365
|
|
|
364
366
|
//# sourceMappingURL=signature-pad.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-pad.js","names":["Text","Stack","fieldStateRecipes","Input","FormField","defaultSignaturePadStrings","emptySignature","isSignatureEmpty","value","stroke","clamp","normalizeSignature","point","drawSignature","context","width","height","first","strokeWidth","i","a","b","escapeXml","text","character","signaturePadToSVG","signature","ink","index","SignaturePad","forwardRef","controlledValue","stringsProp","rootProps","props","controlled","internalValue","setInternalValue","useState","defaultValue","normalizedControlledValue","useMemo","valueRef","useRef","undoHistory","redoHistory","historyVersion","setHistoryVersion","live","drawing","setDrawing","canvasRef","fieldRef","typedRef","lastPublished","generatedId","useId","rootId","id","strings","useStrings","instructions","allowTypedSignature","locked","disabled","readOnly","inkWidth","paint","canvas","bounds","scale","cancelStroke","publish","normalized","next","history","onValueChange","version","undo","previous","redo","focus","useImperativeHandle","ref","snapshot","format","options","useEffect","redraw","resize","theme","ancestor","owner","active","resetTimer","reset","event","form","name","required","pointFrom","sample","finish","endpoint","last","empty","cn","className","invalid","samples","Button","SignaturePadPreview","pointIndex"],"sources":["../../src/components/base/signature-pad/signature-pad.types.ts","../../src/components/base/signature-pad/signature-pad.utils.ts","../../src/components/base/signature-pad/signature-pad.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\n/** Coordinates are fractions of the drawing area, so signatures survive resize. */\nexport interface SignaturePadPoint { x: number; y: number; pressure: number }\nexport interface SignaturePadStroke { points: readonly SignaturePadPoint[] }\nexport interface SignaturePadValue {\n\tstrokes: readonly SignaturePadStroke[];\n\t/** Accessible alternative to drawing; included in exports and native form data. */\n\ttypedName?: string;\n}\nexport type SignaturePadFormat = 'png' | 'svg' | 'json';\nexport interface SignaturePadExportOptions { width?: number; height?: number; scale?: number }\nexport interface SignaturePadHandle {\n\tfocus: () => void;\n\tclear: () => void;\n\tundo: () => void;\n\tredo: () => void;\n\t/** PNG is a data URL, SVG is markup, JSON is the structured value. */\n\tserialize: (format?: SignaturePadFormat, options?: SignaturePadExportOptions) => string;\n}\nexport interface SignaturePadStrings {\n\tlabel: string; instructions: string; drawingInstructions: string; placeholder: string; typedName: string;\n\tundo: string; redo: string; clear: string; empty: string; signed: string;\n}\nexport const defaultSignaturePadStrings: SignaturePadStrings = {\n\tlabel: 'Signature', instructions: 'Draw with a pointer or type your name below. Escape cancels a stroke; Control or Command Z undoes it.',\n\tdrawingInstructions: 'Draw with a pointer. Escape cancels a stroke; Control or Command Z undoes it.',\n\tplaceholder: 'Sign here', typedName: 'Or type your full name',\n\tundo: 'Undo', redo: 'Redo', clear: 'Clear signature', empty: 'Signature is empty', signed: 'Signature entered',\n};\nexport interface SignaturePadProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'defaultValue' | 'onChange'> {\n\t/** Controlled structured signature. */\n\tvalue?: SignaturePadValue;\n\t/** Initial structured signature for uncontrolled use. */\n\tdefaultValue?: SignaturePadValue;\n\tonValueChange?: (value: SignaturePadValue) => void;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tinvalid?: boolean;\n\t/** Native field serializes JSON; an empty signature fails required validation. */\n\tname?: string;\n\tform?: string;\n\trequired?: boolean;\n\t/** Shows the keyboard-accessible typed signature alternative. @default true */\n\tallowTypedSignature?: boolean;\n\t/** Ink diameter in CSS drawing pixels; pen pressure varies it. @default 2 */\n\tstrokeWidth?: number;\n\tstrings?: StringsProp<SignaturePadStrings>;\n}\nexport interface SignaturePadPreviewProps extends ComponentPropsWithoutRef<'svg'> {\n\tvalue: SignaturePadValue;\n\tstrokeWidth?: number;\n}\n","import type { SignaturePadValue } from './signature-pad.types';\n\nexport const emptySignature: SignaturePadValue = { strokes: [] };\nexport function isSignatureEmpty(value: SignaturePadValue): boolean {\n\treturn !value.typedName?.trim() && !value.strokes.some((stroke) => stroke.points.length > 0);\n}\nconst clamp = (value: number) => Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;\nexport function normalizeSignature(value: SignaturePadValue): SignaturePadValue {\n\treturn {\n\t\tstrokes: value.strokes.filter((stroke) => stroke.points.length > 0).map((stroke) => ({\n\t\t\tpoints: stroke.points.map((point) => ({ x: clamp(point.x), y: clamp(point.y), pressure: clamp(point.pressure) })),\n\t\t})),\n\t\t...(value.typedName !== undefined ? { typedName: value.typedName } : {}),\n\t};\n}\n\n/** Drawing geometry, separate from structural UI spacing and theme tokens. */\nexport function drawSignature(context: CanvasRenderingContext2D, value: SignaturePadValue, width: number, height: number, strokeWidth: number) {\n\tcontext.clearRect(0, 0, width, height);\n\tcontext.lineCap = 'round';\n\tcontext.lineJoin = 'round';\n\tfor (const stroke of value.strokes) {\n\t\tconst first = stroke.points[0];\n\t\tif (!first) continue;\n\t\tif (stroke.points.length === 1) {\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc(first.x * width, first.y * height, strokeWidth * (0.5 + first.pressure) / 2, 0, Math.PI * 2);\n\t\t\tcontext.fill();\n\t\t}\n\t\tfor (let i = 1; i < stroke.points.length; i++) {\n\t\t\tconst a = stroke.points[i - 1]; const b = stroke.points[i];\n\t\t\tcontext.lineWidth = strokeWidth * (0.5 + (a.pressure + b.pressure) / 2);\n\t\t\tcontext.beginPath(); context.moveTo(a.x * width, a.y * height); context.lineTo(b.x * width, b.y * height); context.stroke();\n\t\t}\n\t}\n\tif (value.typedName) {\n\t\tcontext.font = `${Math.max(12, height / 5)}px cursive`;\n\t\tcontext.textBaseline = 'bottom';\n\t\tcontext.fillText(value.typedName, width * 0.04, height * 0.9, width * 0.92);\n\t}\n}\n\nconst escapeXml = (text: string) => text.replace(/[&<>\"']/g, (character) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' })[character]!);\n/** Semantic currentColor is preserved unless a resolved export ink is supplied. */\nexport function signaturePadToSVG(value: SignaturePadValue, width = 600, height = 200, strokeWidth = 2, ink = 'currentColor'): string {\n\tconst signature = normalizeSignature(value);\n\tconst shapes = signature.strokes.map((stroke) => {\n\t\tconst first = stroke.points[0];\n\t\tif (stroke.points.length === 1) return `<circle cx=\"${first.x * width}\" cy=\"${first.y * height}\" r=\"${strokeWidth * (0.5 + first.pressure) / 2}\" fill=\"${escapeXml(ink)}\"/>`;\n\t\treturn stroke.points.slice(1).map((point, index) => {\n\t\t\tconst a = stroke.points[index];\n\t\t\treturn `<path d=\"M${a.x * width} ${a.y * height}L${point.x * width} ${point.y * height}\" fill=\"none\" stroke=\"${escapeXml(ink)}\" stroke-width=\"${strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)}\" stroke-linecap=\"round\"/>`;\n\t\t}).join('');\n\t}).join('');\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${shapes}${signature.typedName ? `<text x=\"${width * 0.04}\" y=\"${height * 0.9}\" textLength=\"${Math.min(width * 0.92, signature.typedName.length * height * 0.1)}\" font-family=\"cursive\" font-size=\"${Math.max(12, height / 5)}\" fill=\"${escapeXml(ink)}\">${escapeXml(signature.typedName)}</text>` : ''}</svg>`;\n}\n","import { forwardRef, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, type PointerEvent } from 'react';\nimport { Button } from '../buttons';\nimport { FormField } from '../forms/form-field';\nimport { Input } from '../text-inputs';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useStrings } from '../../../lib/strings';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { defaultSignaturePadStrings, type SignaturePadHandle, type SignaturePadPoint, type SignaturePadProps, type SignaturePadPreviewProps, type SignaturePadValue } from './signature-pad.types';\nimport { drawSignature, emptySignature, isSignatureEmpty, normalizeSignature, signaturePadToSVG } from './signature-pad.utils';\n\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(function SignaturePad(props, ref) {\n\tconst { value: controlledValue, defaultValue = emptySignature, onValueChange, disabled = false, readOnly = false, invalid,\n\t\tname, form, required, allowTypedSignature = true, strokeWidth = 2, strings: stringsProp, className, id, ...rootProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst [internalValue, setInternalValue] = useState(() => normalizeSignature(defaultValue));\n\tconst normalizedControlledValue = useMemo(() => normalizeSignature(controlledValue ?? emptySignature), [controlledValue]);\n\tconst value = controlled ? normalizedControlledValue : internalValue;\n\tconst valueRef = useRef(value); valueRef.current = value;\n\tconst undoHistory = useRef<SignaturePadValue[]>([]);\n\tconst redoHistory = useRef<SignaturePadValue[]>([]);\n\tconst [historyVersion, setHistoryVersion] = useState(0);\n\tconst live = useRef<{ pointerId: number; points: SignaturePadPoint[]; initial: SignaturePadValue } | null>(null);\n\tconst [drawing, setDrawing] = useState(false);\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst fieldRef = useRef<HTMLInputElement>(null);\n\tconst typedRef = useRef<HTMLInputElement>(null);\n\tconst lastPublished = useRef<SignaturePadValue | null>(null);\n\tconst generatedId = useId();\n\tconst rootId = id ?? `signature-${generatedId}`;\n\tconst strings = useStrings(defaultSignaturePadStrings, stringsProp);\n\tconst instructions = allowTypedSignature ? strings.instructions : stringsProp?.instructions ?? strings.drawingInstructions;\n\tconst locked = disabled || readOnly;\n\tconst inkWidth = Number.isFinite(strokeWidth) ? Math.max(0.25, strokeWidth) : 2;\n\n\tconst paint = (signature: SignaturePadValue) => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst bounds = canvas.getBoundingClientRect();\n\t\tif (!bounds.width || !bounds.height) return;\n\t\tconst scale = window.devicePixelRatio || 1;\n\t\tif (canvas.width !== Math.round(bounds.width * scale)) canvas.width = Math.round(bounds.width * scale);\n\t\tif (canvas.height !== Math.round(bounds.height * scale)) canvas.height = Math.round(bounds.height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) return;\n\t\tcontext.setTransform(scale, 0, 0, scale, 0, 0);\n\t\tcontext.strokeStyle = context.fillStyle = getComputedStyle(canvas).color;\n\t\tdrawSignature(context, normalizeSignature(signature), bounds.width, bounds.height, inkWidth);\n\t};\n\tconst cancelStroke = () => {\n\t\tconst stroke = live.current;\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (stroke && canvasRef.current?.hasPointerCapture?.(stroke.pointerId)) canvasRef.current.releasePointerCapture(stroke.pointerId);\n\t\tpaint(valueRef.current);\n\t};\n\tconst publish = (next: SignaturePadValue, history = true) => {\n\t\tif (locked) return;\n\t\tcancelStroke();\n\t\tconst normalized = normalizeSignature(next);\n\t\tif (history) { undoHistory.current.push(valueRef.current); redoHistory.current = []; }\n\t\tlastPublished.current = normalized;\n\t\tif (!controlled) { valueRef.current = normalized; setInternalValue(normalized); }\n\t\tonValueChange?.(normalized);\n\t\tsetHistoryVersion((version) => version + 1);\n\t};\n\tconst undo = () => {\n\t\tif (locked || !undoHistory.current.length) return;\n\t\tconst previous = undoHistory.current.pop()!;\n\t\tredoHistory.current.push(valueRef.current); publish(previous, false);\n\t};\n\tconst redo = () => {\n\t\tif (locked || !redoHistory.current.length) return;\n\t\tconst next = redoHistory.current.pop()!;\n\t\tundoHistory.current.push(valueRef.current); publish(next, false);\n\t};\n\tconst focus = () => (allowTypedSignature ? typedRef.current : canvasRef.current)?.focus();\n\tuseImperativeHandle(ref, () => ({ focus, undo, redo, clear: () => publish(emptySignature), serialize: (format = 'png', options = {}) => {\n\t\tconst snapshot = normalizeSignature(valueRef.current);\n\t\tif (format === 'json') return JSON.stringify(snapshot);\n\t\tconst bounds = canvasRef.current?.getBoundingClientRect();\n\t\tconst width = Number.isFinite(options.width) ? Math.max(1, options.width!) : bounds?.width || 600;\n\t\tconst height = Number.isFinite(options.height) ? Math.max(1, options.height!) : bounds?.height || 200;\n\t\tconst ink = canvasRef.current ? getComputedStyle(canvasRef.current).color : 'currentColor';\n\t\tif (format === 'svg') return signaturePadToSVG(snapshot, width, height, inkWidth, ink);\n\t\tconst scale = Number.isFinite(options.scale) ? Math.max(0.1, Math.min(8, options.scale!)) : window.devicePixelRatio || 1;\n\t\tconst canvas = document.createElement('canvas'); canvas.width = Math.round(width * scale); canvas.height = Math.round(height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) throw new Error('Canvas export is unavailable in this environment. Use SVG or JSON.');\n\t\tcontext.scale(scale, scale); context.strokeStyle = context.fillStyle = ink;\n\t\tdrawSignature(context, snapshot, width, height, inkWidth);\n\t\treturn canvas.toDataURL('image/png');\n\t} }));\n\n\tuseEffect(() => {\n\t\t// External replacement invalidates history; an acknowledged controlled edit retains it.\n\t\tif (controlled && JSON.stringify(value) !== JSON.stringify(lastPublished.current)) { undoHistory.current = []; redoHistory.current = []; setHistoryVersion((version) => version + 1); }\n\t\tlastPublished.current = value;\n\t\tcancelStroke();\n\t}, [value, disabled, readOnly]);\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst redraw = () => paint(live.current ? { ...live.current.initial, strokes: [...live.current.initial.strokes, { points: live.current.points }] } : valueRef.current);\n\t\tredraw();\n\t\tconst resize = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(redraw) : undefined;\n\t\tresize?.observe(canvas);\n\t\t// Theme scopes can change without resizing the drawing area.\n\t\tconst theme = new MutationObserver(redraw);\n\t\tfor (let ancestor: HTMLElement | null = canvas; ancestor; ancestor = ancestor.parentElement) theme.observe(ancestor, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n\t\twindow.addEventListener('resize', redraw);\n\t\treturn () => { resize?.disconnect(); theme.disconnect(); window.removeEventListener('resize', redraw); };\n\t}, [inkWidth]);\n\tuseEffect(() => {\n\t\tconst owner = fieldRef.current?.form ?? typedRef.current?.form ?? canvasRef.current?.closest('form');\n\t\tlet active = true;\n\t\tlet resetTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t// Trusted events can run microtasks between listeners. Wait for propagation and the native default action.\n\t\tconst reset = (event: Event) => {\n\t\t\tclearTimeout(resetTimer);\n\t\t\tresetTimer = setTimeout(() => { resetTimer = undefined; if (active && !event.defaultPrevented && !locked) { undoHistory.current = []; redoHistory.current = []; publish(defaultValue, false); } }, 0);\n\t\t};\n\t\towner?.addEventListener('reset', reset);\n\t\treturn () => { active = false; clearTimeout(resetTimer); owner?.removeEventListener('reset', reset); };\n\t}, [defaultValue, controlled, locked, onValueChange, form, name, required, allowTypedSignature]);\n\tconst pointFrom = (event: PointerEvent<HTMLCanvasElement>, sample: Pick<globalThis.PointerEvent, 'clientX' | 'clientY' | 'pressure'> = event): SignaturePadPoint => {\n\t\tconst bounds = event.currentTarget.getBoundingClientRect();\n\t\treturn { x: Math.max(0, Math.min(1, (sample.clientX - bounds.left) / (bounds.width || 1))), y: Math.max(0, Math.min(1, (sample.clientY - bounds.top) / (bounds.height || 1))), pressure: event.pointerType === 'pen' ? sample.pressure || 0.5 : 0.5 };\n\t};\n\tconst finish = (event: PointerEvent<HTMLCanvasElement>) => {\n\t\tconst stroke = live.current;\n\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t// A lift can arrive beyond the last move; keep that endpoint without duplicating a resting tap.\n\t\tconst endpoint = pointFrom(event);\n\t\tconst last = stroke.points[stroke.points.length - 1];\n\t\tif (last.x !== endpoint.x || last.y !== endpoint.y) stroke.points.push(endpoint);\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (valueRef.current === stroke.initial) publish({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t};\n\tconst empty = isSignatureEmpty(value);\n\treturn <Stack {...rootProps} id={rootId} role=\"group\" aria-label={rootProps['aria-label'] ?? strings.label} gap=\"sm\" className={cn('signature-pad--component min-w-0', className)} data-history-version={historyVersion} data-disabled={disabled || undefined} data-readonly={readOnly || undefined}>\n\t\t<Text id={`${rootId}-instructions`} size=\"xs\" type=\"secondary\">{instructions}</Text>\n\t\t<div className={cn('signature-pad--area relative overflow-hidden rounded-radius border border-input bg-background text-foreground', fieldStateRecipes.invalid, disabled && 'cursor-not-allowed opacity-50')} aria-invalid={invalid || undefined}>\n\t\t\t<canvas ref={canvasRef} className={cn('signature-pad--canvas block w-full aspect-[3/1] min-h-40 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset', !locked && 'touch-none cursor-crosshair')}\n\t\t\t\ttabIndex={disabled ? -1 : 0} role=\"img\" aria-label={strings.label} aria-describedby={`${rootId}-instructions ${rootId}-status`} aria-disabled={disabled || undefined} aria-invalid={invalid || undefined}\n\t\t\t\tonPointerDown={(event) => { if (locked || live.current || event.button !== 0) return; event.preventDefault(); event.currentTarget.focus(); event.currentTarget.setPointerCapture?.(event.pointerId); live.current = { pointerId: event.pointerId, points: [pointFrom(event)], initial: valueRef.current }; setDrawing(true); paint({ ...valueRef.current, strokes: [...valueRef.current.strokes, { points: live.current.points }] }); }}\n\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\tconst stroke = live.current;\n\t\t\t\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t\t\t\tconst samples = event.nativeEvent.getCoalescedEvents?.().filter((sample) => sample.pointerId === stroke.pointerId) ?? [];\n\t\t\t\t\tfor (const sample of samples.length ? samples : [event.nativeEvent]) stroke.points.push(pointFrom(event, sample));\n\t\t\t\t\tpaint({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t\t\t\t}}\n\t\t\t\tonPointerUp={finish} onPointerCancel={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }} onLostPointerCapture={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }}\n\t\t\t\tonContextMenu={(event) => { if (live.current) event.preventDefault(); }}\n\t\t\t\tonKeyDown={(event) => { if (event.key === 'Escape') cancelStroke(); if (locked) return; if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') { event.preventDefault(); event.shiftKey ? redo() : undo(); } if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') { event.preventDefault(); redo(); } }}>\n\t\t\t\t{instructions}\n\t\t\t</canvas>\n\t\t\t{empty && !drawing && <div aria-hidden=\"true\" className=\"signature-pad--placeholder pointer-events-none absolute inset-0 flex items-center justify-center\"><Text type=\"secondary\">{strings.placeholder}</Text></div>}\n\t\t</div>\n\t\t{allowTypedSignature && <FormField label={strings.typedName} htmlFor={`${rootId}-typed`}><Input ref={typedRef} id={`${rootId}-typed`} value={value.typedName ?? ''} disabled={disabled} readOnly={readOnly} invalid={invalid} onChange={(event) => publish({ ...valueRef.current, typedName: event.target.value })} /></FormField>}\n\t\t<Stack direction=\"horizontal\" gap=\"xs\" wrap>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !undoHistory.current.length} onClick={() => { undo(); focus(); }}>{strings.undo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !redoHistory.current.length} onClick={() => { redo(); focus(); }}>{strings.redo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || empty} onClick={() => { publish(emptySignature); focus(); }}>{strings.clear}</Button>\n\t\t</Stack>\n\t\t<Text id={`${rootId}-status`} role=\"status\" size=\"xs\" type=\"secondary\">{empty ? strings.empty : strings.signed}</Text>\n\t\t{(name || required) && <input ref={fieldRef} className=\"sr-only\" type=\"text\" tabIndex={-1} aria-hidden=\"true\" name={name} form={form} disabled={disabled} readOnly={readOnly} required={required} value={empty ? '' : JSON.stringify(value)} onChange={() => {}} onFocus={focus} onInvalid={focus} />}\n\t</Stack>;\n});\n\n/** Server-renderable preview; normalized geometry follows the semantic foreground. */\nexport const SignaturePadPreview = forwardRef<SVGSVGElement, SignaturePadPreviewProps>(function SignaturePadPreview({ value, strokeWidth = 2, className, ...props }, ref) {\n\tconst normalized = normalizeSignature(value);\n\treturn <svg ref={ref} role=\"img\" viewBox=\"0 0 600 200\" aria-label=\"Signature\" {...props} className={cn('signature-pad-preview--component w-full h-auto text-foreground', className)}>\n\t\t{normalized.strokes.map((stroke, index) => stroke.points.length === 1 ? <circle key={index} cx={stroke.points[0].x * 600} cy={stroke.points[0].y * 200} r={strokeWidth * (0.5 + stroke.points[0].pressure) / 2} fill=\"currentColor\" /> : <g key={index}>{stroke.points.slice(1).map((point, pointIndex) => { const a = stroke.points[pointIndex]; return <path key={pointIndex} d={`M${a.x * 600} ${a.y * 200}L${point.x * 600} ${point.y * 200}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)} strokeLinecap=\"round\" />; })}</g>)}\n\t\t{normalized.typedName && <text x=\"24\" y=\"180\" fill=\"currentColor\" fontFamily=\"cursive\" fontSize=\"40\" textLength={Math.min(552, normalized.typedName.length * 20)}>{normalized.typedName}</text>}\n\t</svg>;\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signature-pad.js","names":["Text","Button","Stack","fieldStateRecipes","Input","FormField","defaultSignaturePadStrings","emptySignature","isSignatureEmpty","value","stroke","clamp","normalizeSignature","point","drawSignature","context","width","height","first","strokeWidth","i","a","b","escapeXml","text","character","signaturePadToSVG","signature","ink","index","SignaturePad","forwardRef","controlledValue","stringsProp","rootProps","props","controlled","internalValue","setInternalValue","useState","defaultValue","normalizedControlledValue","useMemo","valueRef","useRef","undoHistory","redoHistory","historyVersion","setHistoryVersion","live","drawing","setDrawing","canvasRef","fieldRef","typedRef","lastPublished","generatedId","useId","rootId","id","strings","useStrings","instructions","allowTypedSignature","locked","disabled","readOnly","inkWidth","paint","canvas","bounds","scale","cancelStroke","publish","normalized","next","history","onValueChange","version","undo","previous","redo","focus","useImperativeHandle","ref","snapshot","format","options","useEffect","redraw","resize","theme","ancestor","owner","active","resetTimer","reset","event","form","name","required","pointFrom","sample","finish","endpoint","last","empty","cn","className","invalid","samples","SignaturePadPreview","pointIndex"],"sources":["../../src/components/base/signature-pad/signature-pad.types.ts","../../src/components/base/signature-pad/signature-pad.utils.ts","../../src/components/base/signature-pad/signature-pad.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\n/** Coordinates are fractions of the drawing area, so signatures survive resize. */\nexport interface SignaturePadPoint { x: number; y: number; pressure: number }\nexport interface SignaturePadStroke { points: readonly SignaturePadPoint[] }\nexport interface SignaturePadValue {\n\tstrokes: readonly SignaturePadStroke[];\n\t/** Accessible alternative to drawing; included in exports and native form data. */\n\ttypedName?: string;\n}\nexport type SignaturePadFormat = 'png' | 'svg' | 'json';\nexport interface SignaturePadExportOptions { width?: number; height?: number; scale?: number }\nexport interface SignaturePadHandle {\n\tfocus: () => void;\n\tclear: () => void;\n\tundo: () => void;\n\tredo: () => void;\n\t/** PNG is a data URL, SVG is markup, JSON is the structured value. */\n\tserialize: (format?: SignaturePadFormat, options?: SignaturePadExportOptions) => string;\n}\nexport interface SignaturePadStrings {\n\tlabel: string; instructions: string; drawingInstructions: string; placeholder: string; typedName: string;\n\tundo: string; redo: string; clear: string; empty: string; signed: string;\n}\nexport const defaultSignaturePadStrings: SignaturePadStrings = {\n\tlabel: 'Signature', instructions: 'Draw with a pointer or type your name below. Escape cancels a stroke; Control or Command Z undoes it.',\n\tdrawingInstructions: 'Draw with a pointer. Escape cancels a stroke; Control or Command Z undoes it.',\n\tplaceholder: 'Sign here', typedName: 'Or type your full name',\n\tundo: 'Undo', redo: 'Redo', clear: 'Clear signature', empty: 'Signature is empty', signed: 'Signature entered',\n};\nexport interface SignaturePadProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'defaultValue' | 'onChange'> {\n\t/** Controlled structured signature. */\n\tvalue?: SignaturePadValue;\n\t/** Initial structured signature for uncontrolled use. */\n\tdefaultValue?: SignaturePadValue;\n\tonValueChange?: (value: SignaturePadValue) => void;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tinvalid?: boolean;\n\t/** Native field serializes JSON; an empty signature fails required validation. */\n\tname?: string;\n\tform?: string;\n\trequired?: boolean;\n\t/** Shows the keyboard-accessible typed signature alternative. @default true */\n\tallowTypedSignature?: boolean;\n\t/** Ink diameter in CSS drawing pixels; pen pressure varies it. @default 2 */\n\tstrokeWidth?: number;\n\tstrings?: StringsProp<SignaturePadStrings>;\n}\nexport interface SignaturePadPreviewProps extends ComponentPropsWithoutRef<'svg'> {\n\tvalue: SignaturePadValue;\n\tstrokeWidth?: number;\n}\n","import type { SignaturePadValue } from './signature-pad.types';\n\nexport const emptySignature: SignaturePadValue = { strokes: [] };\nexport function isSignatureEmpty(value: SignaturePadValue): boolean {\n\treturn !value.typedName?.trim() && !value.strokes.some((stroke) => stroke.points.length > 0);\n}\nconst clamp = (value: number) => Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;\nexport function normalizeSignature(value: SignaturePadValue): SignaturePadValue {\n\treturn {\n\t\tstrokes: value.strokes.filter((stroke) => stroke.points.length > 0).map((stroke) => ({\n\t\t\tpoints: stroke.points.map((point) => ({ x: clamp(point.x), y: clamp(point.y), pressure: clamp(point.pressure) })),\n\t\t})),\n\t\t...(value.typedName !== undefined ? { typedName: value.typedName } : {}),\n\t};\n}\n\n/** Drawing geometry, separate from structural UI spacing and theme tokens. */\nexport function drawSignature(context: CanvasRenderingContext2D, value: SignaturePadValue, width: number, height: number, strokeWidth: number) {\n\tcontext.clearRect(0, 0, width, height);\n\tcontext.lineCap = 'round';\n\tcontext.lineJoin = 'round';\n\tfor (const stroke of value.strokes) {\n\t\tconst first = stroke.points[0];\n\t\tif (!first) continue;\n\t\tif (stroke.points.length === 1) {\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc(first.x * width, first.y * height, strokeWidth * (0.5 + first.pressure) / 2, 0, Math.PI * 2);\n\t\t\tcontext.fill();\n\t\t}\n\t\tfor (let i = 1; i < stroke.points.length; i++) {\n\t\t\tconst a = stroke.points[i - 1]; const b = stroke.points[i];\n\t\t\tcontext.lineWidth = strokeWidth * (0.5 + (a.pressure + b.pressure) / 2);\n\t\t\tcontext.beginPath(); context.moveTo(a.x * width, a.y * height); context.lineTo(b.x * width, b.y * height); context.stroke();\n\t\t}\n\t}\n\tif (value.typedName) {\n\t\tcontext.font = `${Math.max(12, height / 5)}px cursive`;\n\t\tcontext.textBaseline = 'bottom';\n\t\tcontext.fillText(value.typedName, width * 0.04, height * 0.9, width * 0.92);\n\t}\n}\n\nconst escapeXml = (text: string) => text.replace(/[&<>\"']/g, (character) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' })[character]!);\n/** Semantic currentColor is preserved unless a resolved export ink is supplied. */\nexport function signaturePadToSVG(value: SignaturePadValue, width = 600, height = 200, strokeWidth = 2, ink = 'currentColor'): string {\n\tconst signature = normalizeSignature(value);\n\tconst shapes = signature.strokes.map((stroke) => {\n\t\tconst first = stroke.points[0];\n\t\tif (stroke.points.length === 1) return `<circle cx=\"${first.x * width}\" cy=\"${first.y * height}\" r=\"${strokeWidth * (0.5 + first.pressure) / 2}\" fill=\"${escapeXml(ink)}\"/>`;\n\t\treturn stroke.points.slice(1).map((point, index) => {\n\t\t\tconst a = stroke.points[index];\n\t\t\treturn `<path d=\"M${a.x * width} ${a.y * height}L${point.x * width} ${point.y * height}\" fill=\"none\" stroke=\"${escapeXml(ink)}\" stroke-width=\"${strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)}\" stroke-linecap=\"round\"/>`;\n\t\t}).join('');\n\t}).join('');\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${shapes}${signature.typedName ? `<text x=\"${width * 0.04}\" y=\"${height * 0.9}\" textLength=\"${Math.min(width * 0.92, signature.typedName.length * height * 0.1)}\" font-family=\"cursive\" font-size=\"${Math.max(12, height / 5)}\" fill=\"${escapeXml(ink)}\">${escapeXml(signature.typedName)}</text>` : ''}</svg>`;\n}\n","import { forwardRef, useEffect, useLayoutEffect, useId, useImperativeHandle, useMemo, useRef, useState, type PointerEvent } from 'react';\nimport { Button } from '../buttons';\nimport { FormField } from '../forms/form-field';\nimport { Input } from '../text-inputs';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useStrings } from '../../../lib/strings';\nimport { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { defaultSignaturePadStrings, type SignaturePadHandle, type SignaturePadPoint, type SignaturePadProps, type SignaturePadPreviewProps, type SignaturePadValue } from './signature-pad.types';\nimport { drawSignature, emptySignature, isSignatureEmpty, normalizeSignature, signaturePadToSVG } from './signature-pad.utils';\n\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(function SignaturePad(props, ref) {\n\tconst { value: controlledValue, defaultValue = emptySignature, onValueChange, disabled = false, readOnly = false, invalid,\n\t\tname, form, required, allowTypedSignature = true, strokeWidth = 2, strings: stringsProp, className, id, ...rootProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst [internalValue, setInternalValue] = useState(() => normalizeSignature(defaultValue));\n\tconst normalizedControlledValue = useMemo(() => normalizeSignature(controlledValue ?? emptySignature), [controlledValue]);\n\tconst value = controlled ? normalizedControlledValue : internalValue;\n\tconst valueRef = useRef(value);\n\tuseLayoutEffect(() => { valueRef.current = value; }, [value]);\n\tconst undoHistory = useRef<SignaturePadValue[]>([]);\n\tconst redoHistory = useRef<SignaturePadValue[]>([]);\n\tconst [historyVersion, setHistoryVersion] = useState(0);\n\tconst live = useRef<{ pointerId: number; points: SignaturePadPoint[]; initial: SignaturePadValue } | null>(null);\n\tconst [drawing, setDrawing] = useState(false);\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\tconst fieldRef = useRef<HTMLInputElement>(null);\n\tconst typedRef = useRef<HTMLInputElement>(null);\n\tconst lastPublished = useRef<SignaturePadValue | null>(null);\n\tconst generatedId = useId();\n\tconst rootId = id ?? `signature-${generatedId}`;\n\tconst strings = useStrings(defaultSignaturePadStrings, stringsProp);\n\tconst instructions = allowTypedSignature ? strings.instructions : stringsProp?.instructions ?? strings.drawingInstructions;\n\tconst locked = disabled || readOnly;\n\tconst inkWidth = Number.isFinite(strokeWidth) ? Math.max(0.25, strokeWidth) : 2;\n\n\tconst paint = (signature: SignaturePadValue) => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst bounds = canvas.getBoundingClientRect();\n\t\tif (!bounds.width || !bounds.height) return;\n\t\tconst scale = window.devicePixelRatio || 1;\n\t\tif (canvas.width !== Math.round(bounds.width * scale)) canvas.width = Math.round(bounds.width * scale);\n\t\tif (canvas.height !== Math.round(bounds.height * scale)) canvas.height = Math.round(bounds.height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) return;\n\t\tcontext.setTransform(scale, 0, 0, scale, 0, 0);\n\t\tcontext.strokeStyle = context.fillStyle = getComputedStyle(canvas).color;\n\t\tdrawSignature(context, normalizeSignature(signature), bounds.width, bounds.height, inkWidth);\n\t};\n\tconst cancelStroke = () => {\n\t\tconst stroke = live.current;\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (stroke && canvasRef.current?.hasPointerCapture?.(stroke.pointerId)) canvasRef.current.releasePointerCapture(stroke.pointerId);\n\t\tpaint(valueRef.current);\n\t};\n\tconst publish = (next: SignaturePadValue, history = true) => {\n\t\tif (locked) return;\n\t\tcancelStroke();\n\t\tconst normalized = normalizeSignature(next);\n\t\tif (history) { undoHistory.current.push(valueRef.current); redoHistory.current = []; }\n\t\tlastPublished.current = normalized;\n\t\tif (!controlled) { valueRef.current = normalized; setInternalValue(normalized); }\n\t\tonValueChange?.(normalized);\n\t\tsetHistoryVersion((version) => version + 1);\n\t};\n\tconst undo = () => {\n\t\tif (locked || !undoHistory.current.length) return;\n\t\tconst previous = undoHistory.current.pop()!;\n\t\tredoHistory.current.push(valueRef.current); publish(previous, false);\n\t};\n\tconst redo = () => {\n\t\tif (locked || !redoHistory.current.length) return;\n\t\tconst next = redoHistory.current.pop()!;\n\t\tundoHistory.current.push(valueRef.current); publish(next, false);\n\t};\n\tconst focus = () => (allowTypedSignature ? typedRef.current : canvasRef.current)?.focus();\n\tuseImperativeHandle(ref, () => ({ focus, undo, redo, clear: () => publish(emptySignature), serialize: (format = 'png', options = {}) => {\n\t\tconst snapshot = normalizeSignature(valueRef.current);\n\t\tif (format === 'json') return JSON.stringify(snapshot);\n\t\tconst bounds = canvasRef.current?.getBoundingClientRect();\n\t\tconst width = Number.isFinite(options.width) ? Math.max(1, options.width!) : bounds?.width || 600;\n\t\tconst height = Number.isFinite(options.height) ? Math.max(1, options.height!) : bounds?.height || 200;\n\t\tconst ink = canvasRef.current ? getComputedStyle(canvasRef.current).color : 'currentColor';\n\t\tif (format === 'svg') return signaturePadToSVG(snapshot, width, height, inkWidth, ink);\n\t\tconst scale = Number.isFinite(options.scale) ? Math.max(0.1, Math.min(8, options.scale!)) : window.devicePixelRatio || 1;\n\t\tconst canvas = document.createElement('canvas'); canvas.width = Math.round(width * scale); canvas.height = Math.round(height * scale);\n\t\tconst context = canvas.getContext('2d');\n\t\tif (!context) throw new Error('Canvas export is unavailable in this environment. Use SVG or JSON.');\n\t\tcontext.scale(scale, scale); context.strokeStyle = context.fillStyle = ink;\n\t\tdrawSignature(context, snapshot, width, height, inkWidth);\n\t\treturn canvas.toDataURL('image/png');\n\t} }));\n\n\tuseEffect(() => {\n\t\t// External replacement invalidates history; an acknowledged controlled edit retains it.\n\t\tif (controlled && JSON.stringify(value) !== JSON.stringify(lastPublished.current)) { undoHistory.current = []; redoHistory.current = []; setHistoryVersion((version) => version + 1); }\n\t\tlastPublished.current = value;\n\t\tcancelStroke();\n\t}, [value, disabled, readOnly]);\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas) return;\n\t\tconst redraw = () => paint(live.current ? { ...live.current.initial, strokes: [...live.current.initial.strokes, { points: live.current.points }] } : valueRef.current);\n\t\tredraw();\n\t\tconst resize = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(redraw) : undefined;\n\t\tresize?.observe(canvas);\n\t\t// Theme scopes can change without resizing the drawing area.\n\t\tconst theme = new MutationObserver(redraw);\n\t\tfor (let ancestor: HTMLElement | null = canvas; ancestor; ancestor = ancestor.parentElement) theme.observe(ancestor, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n\t\twindow.addEventListener('resize', redraw);\n\t\treturn () => { resize?.disconnect(); theme.disconnect(); window.removeEventListener('resize', redraw); };\n\t}, [inkWidth]);\n\tuseEffect(() => {\n\t\tconst owner = fieldRef.current?.form ?? typedRef.current?.form ?? canvasRef.current?.closest('form');\n\t\tlet active = true;\n\t\tlet resetTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t// Trusted events can run microtasks between listeners. Wait for propagation and the native default action.\n\t\tconst reset = (event: Event) => {\n\t\t\tclearTimeout(resetTimer);\n\t\t\tresetTimer = setTimeout(() => { resetTimer = undefined; if (active && !event.defaultPrevented && !locked) { undoHistory.current = []; redoHistory.current = []; publish(defaultValue, false); } }, 0);\n\t\t};\n\t\towner?.addEventListener('reset', reset);\n\t\treturn () => { active = false; clearTimeout(resetTimer); owner?.removeEventListener('reset', reset); };\n\t}, [defaultValue, controlled, locked, onValueChange, form, name, required, allowTypedSignature]);\n\tconst pointFrom = (event: PointerEvent<HTMLCanvasElement>, sample: Pick<globalThis.PointerEvent, 'clientX' | 'clientY' | 'pressure'> = event): SignaturePadPoint => {\n\t\tconst bounds = event.currentTarget.getBoundingClientRect();\n\t\treturn { x: Math.max(0, Math.min(1, (sample.clientX - bounds.left) / (bounds.width || 1))), y: Math.max(0, Math.min(1, (sample.clientY - bounds.top) / (bounds.height || 1))), pressure: event.pointerType === 'pen' ? sample.pressure || 0.5 : 0.5 };\n\t};\n\tconst finish = (event: PointerEvent<HTMLCanvasElement>) => {\n\t\tconst stroke = live.current;\n\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t// A lift can arrive beyond the last move; keep that endpoint without duplicating a resting tap.\n\t\tconst endpoint = pointFrom(event);\n\t\tconst last = stroke.points[stroke.points.length - 1];\n\t\tif (last.x !== endpoint.x || last.y !== endpoint.y) stroke.points.push(endpoint);\n\t\tlive.current = null;\n\t\tsetDrawing(false);\n\t\tif (valueRef.current === stroke.initial) publish({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t};\n\tconst empty = isSignatureEmpty(value);\n\treturn <Stack {...rootProps} id={rootId} role=\"group\" aria-label={rootProps['aria-label'] ?? strings.label} gap=\"sm\" className={cn('signature-pad--component min-w-0', className)} data-history-version={historyVersion} data-disabled={disabled || undefined} data-readonly={readOnly || undefined}>\n\t\t<Text id={`${rootId}-instructions`} size=\"xs\" type=\"secondary\">{instructions}</Text>\n\t\t<div className={cn('signature-pad--area relative overflow-hidden rounded-inner border border-input bg-background text-foreground', fieldStateRecipes.invalid, disabled && 'cursor-not-allowed opacity-50')} aria-invalid={invalid || undefined}>\n\t\t\t<canvas ref={canvasRef} className={cn('signature-pad--canvas block w-full aspect-[3/1] min-h-40 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset', !locked && 'touch-none cursor-crosshair')}\n\t\t\t\ttabIndex={disabled ? -1 : 0} role=\"img\" aria-label={strings.label} aria-describedby={`${rootId}-instructions ${rootId}-status`} aria-disabled={disabled || undefined} aria-invalid={invalid || undefined}\n\t\t\t\tonPointerDown={(event) => { if (locked || live.current || event.button !== 0) return; event.preventDefault(); event.currentTarget.focus(); event.currentTarget.setPointerCapture?.(event.pointerId); live.current = { pointerId: event.pointerId, points: [pointFrom(event)], initial: valueRef.current }; setDrawing(true); paint({ ...valueRef.current, strokes: [...valueRef.current.strokes, { points: live.current.points }] }); }}\n\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\tconst stroke = live.current;\n\t\t\t\t\tif (!stroke || stroke.pointerId !== event.pointerId) return;\n\t\t\t\t\tconst samples = event.nativeEvent.getCoalescedEvents?.().filter((sample) => sample.pointerId === stroke.pointerId) ?? [];\n\t\t\t\t\tfor (const sample of samples.length ? samples : [event.nativeEvent]) stroke.points.push(pointFrom(event, sample));\n\t\t\t\t\tpaint({ ...stroke.initial, strokes: [...stroke.initial.strokes, { points: stroke.points }] });\n\t\t\t\t}}\n\t\t\t\tonPointerUp={finish} onPointerCancel={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }} onLostPointerCapture={(event) => { if (live.current?.pointerId === event.pointerId) cancelStroke(); }}\n\t\t\t\tonContextMenu={(event) => { if (live.current) event.preventDefault(); }}\n\t\t\t\tonKeyDown={(event) => { if (event.key === 'Escape') cancelStroke(); if (locked) return; if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'z') { event.preventDefault(); if (event.shiftKey) redo(); else undo(); } if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y') { event.preventDefault(); redo(); } }}>\n\t\t\t\t{instructions}\n\t\t\t</canvas>\n\t\t\t{empty && !drawing && <div aria-hidden=\"true\" className=\"signature-pad--placeholder pointer-events-none absolute inset-0 flex items-center justify-center\"><Text type=\"secondary\">{strings.placeholder}</Text></div>}\n\t\t</div>\n\t\t{allowTypedSignature && <FormField label={strings.typedName} htmlFor={`${rootId}-typed`}><Input ref={typedRef} id={`${rootId}-typed`} value={value.typedName ?? ''} disabled={disabled} readOnly={readOnly} invalid={invalid} onChange={(event) => publish({ ...valueRef.current, typedName: event.target.value })} /></FormField>}\n\t\t<Stack direction=\"horizontal\" gap=\"xs\" wrap>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !undoHistory.current.length} onClick={() => { undo(); focus(); }}>{strings.undo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || !redoHistory.current.length} onClick={() => { redo(); focus(); }}>{strings.redo}</Button>\n\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || empty} onClick={() => { publish(emptySignature); focus(); }}>{strings.clear}</Button>\n\t\t</Stack>\n\t\t<Text id={`${rootId}-status`} role=\"status\" size=\"xs\" type=\"secondary\">{empty ? strings.empty : strings.signed}</Text>\n\t\t{(name || required) && <input ref={fieldRef} className=\"sr-only\" type=\"text\" tabIndex={-1} aria-hidden=\"true\" name={name} form={form} disabled={disabled} readOnly={readOnly} required={required} value={empty ? '' : JSON.stringify(value)} onChange={() => {}} onFocus={focus} onInvalid={focus} />}\n\t</Stack>;\n});\n\n/** Server-renderable preview; normalized geometry follows the semantic foreground. */\nexport const SignaturePadPreview = forwardRef<SVGSVGElement, SignaturePadPreviewProps>(function SignaturePadPreview({ value, strokeWidth = 2, className, ...props }, ref) {\n\tconst normalized = normalizeSignature(value);\n\treturn <svg ref={ref} role=\"img\" viewBox=\"0 0 600 200\" aria-label=\"Signature\" {...props} className={cn('signature-pad-preview--component w-full h-auto text-foreground', className)}>\n\t\t{normalized.strokes.map((stroke, index) => stroke.points.length === 1 ? <circle key={index} cx={stroke.points[0].x * 600} cy={stroke.points[0].y * 200} r={strokeWidth * (0.5 + stroke.points[0].pressure) / 2} fill=\"currentColor\" /> : <g key={index}>{stroke.points.slice(1).map((point, pointIndex) => { const a = stroke.points[pointIndex]; return <path key={pointIndex} d={`M${a.x * 600} ${a.y * 200}L${point.x * 600} ${point.y * 200}`} fill=\"none\" stroke=\"currentColor\" strokeWidth={strokeWidth * (0.5 + (a.pressure + point.pressure) / 2)} strokeLinecap=\"round\" />; })}</g>)}\n\t\t{normalized.typedName && <text x=\"24\" y=\"180\" fill=\"currentColor\" fontFamily=\"cursive\" fontSize=\"40\" textLength={Math.min(552, normalized.typedName.length * 20)}>{normalized.typedName}</text>}\n\t</svg>;\n});\n"],"mappings":"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"}
|
package/dist/base/skeleton.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e, i as t, n, r, t as i } from "../skeleton-
|
|
2
|
+
import { a as e, i as t, n, r, t as i } from "../skeleton-3F0uhYn3.js";
|
|
3
3
|
export { i as ContentSkeleton, n as PageSkeleton, r as Skeleton, t as TableSkeleton, e as TwoColumnPageSkeleton };
|
package/dist/base/spinner.js
CHANGED
package/dist/base/structure.js
CHANGED
package/dist/base/table.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../table-
|
|
2
|
+
import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../table-CLtJTxoR.js";
|
|
3
3
|
export { s as Table, r as TableBody, a as TableCaption, n as TableCell, e as TableFooter, i as TableHead, o as TableHeader, t as TableRow };
|
package/dist/base/text-inputs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as e, t } from "../input-
|
|
3
|
-
import { a as n, c as r, d as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../text-inputs-
|
|
2
|
+
import { n as e, t } from "../input-SX9V0AL3.js";
|
|
3
|
+
import { a as n, c as r, d as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../text-inputs-DsR56TR-.js";
|
|
4
4
|
export { t as Input, n as InputGroup, c as InputGroupAddon, u as InputGroupButton, r as InputGroupInput, o as InputGroupText, f as InputGroupTextarea, l as PasswordInput, d as SlugField, i as Textarea, e as defaultInputStrings, a as defaultPasswordInputStrings, s as slugifyValue };
|
package/dist/base/toaster.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { f as e } from "../ui-provider-
|
|
3
|
-
import { t } from "../utils-
|
|
2
|
+
import { f as e } from "../ui-provider-DRPn3qNl.js";
|
|
3
|
+
import { t } from "../utils-BvH9PSmq.js";
|
|
4
4
|
import { jsx as n } from "react/jsx-runtime";
|
|
5
5
|
import { CircleCheckIcon as r, InfoIcon as i, Loader2Icon as a, OctagonXIcon as o, TriangleAlertIcon as s } from "lucide-react";
|
|
6
6
|
import { Toaster as c } from "sonner";
|
|
@@ -24,13 +24,13 @@ var l = ({ theme: e = "system", ...t }) => /* @__PURE__ */ n(c, {
|
|
|
24
24
|
toastOptions: { classNames: { toast: "cn-toast" } },
|
|
25
25
|
...t
|
|
26
26
|
}), u = {
|
|
27
|
-
toast: "toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius
|
|
27
|
+
toast: "toaster--toast font-sans !min-h-action-lg !items-center !gap-space-md !rounded-radius !border !border-inverse-border !bg-inverse-background !p-surface has-[[data-close-button]]:!pe-[calc(var(--spacing-action-sm)+var(--spacing-space-lg))] !text-inverse-foreground !shadow-lg",
|
|
28
28
|
title: "toaster--title text-sm font-medium leading-snug text-current",
|
|
29
29
|
description: "toaster--description !text-inverse-muted text-xs leading-snug",
|
|
30
30
|
icon: "toaster--icon !m-0 flex size-icon-lg shrink-0 items-center justify-center self-center text-inverse-muted",
|
|
31
31
|
closeButton: "toaster--close-button !left-auto !right-space-sm !top-1/2 !size-action-xs !translate-x-0 !-translate-y-1/2 !transform-none !border-inverse-border !bg-transparent !text-inverse-foreground !opacity-60 transition-[background-color,opacity] hover:!bg-inverse-surface hover:!opacity-100",
|
|
32
|
-
actionButton: "toaster--action-button !h-action-sm !rounded-
|
|
33
|
-
cancelButton: "toaster--cancel-button !h-action-sm !rounded-
|
|
32
|
+
actionButton: "toaster--action-button !h-action-sm !rounded-inner !bg-inverse-foreground !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-background",
|
|
33
|
+
cancelButton: "toaster--cancel-button !h-action-sm !rounded-inner !bg-inverse-surface !m-0 shrink-0 !px-control-sm !text-sm !font-medium !text-inverse-foreground",
|
|
34
34
|
success: "toaster--success",
|
|
35
35
|
info: "toaster--info",
|
|
36
36
|
warning: "toaster--warning",
|
|
@@ -41,7 +41,7 @@ var l = ({ theme: e = "system", ...t }) => /* @__PURE__ */ n(c, {
|
|
|
41
41
|
}, d = {
|
|
42
42
|
success: /* @__PURE__ */ n(r, { className: "size-icon-lg text-success" }),
|
|
43
43
|
info: /* @__PURE__ */ n(i, { className: "size-icon-lg text-info" }),
|
|
44
|
-
warning: /* @__PURE__ */ n(s, { className: "size-icon-lg text-warning" }),
|
|
44
|
+
warning: /* @__PURE__ */ n(s, { className: "size-icon-lg text-warning-accent" }),
|
|
45
45
|
error: /* @__PURE__ */ n(o, { className: "size-icon-lg text-destructive" }),
|
|
46
46
|
loading: /* @__PURE__ */ n(a, { className: "size-icon-lg animate-spin text-inverse-muted" })
|
|
47
47
|
}, f = {
|