@easemate/web-kit 0.2.0 → 0.3.1
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/README.md +99 -5
- package/build/decorators.cjs +921 -0
- package/build/decorators.cjs.map +1 -0
- package/build/decorators.d.cts +123 -0
- package/build/decorators.d.ts +123 -0
- package/build/decorators.js +889 -0
- package/build/decorators.js.map +1 -0
- package/build/elements.cjs +27604 -0
- package/build/elements.cjs.map +1 -0
- package/build/elements.d.cts +373 -0
- package/build/elements.d.ts +373 -0
- package/build/elements.js +27528 -0
- package/build/elements.js.map +1 -0
- package/build/{elements/monitor/index.d.ts → index-31iOHBv0.d.cts} +26 -5
- package/build/{elements/monitor/index.d.cts → index-31iOHBv0.d.ts} +26 -5
- package/build/{elements/panel/index.d.cts → index-NzGpn7ai.d.cts} +6 -3
- package/build/{elements/panel/index.d.ts → index-NzGpn7ai.d.ts} +6 -3
- package/build/{elements/state/index.d.ts → index-qZoNKsHn.d.cts} +46 -5
- package/build/{elements/state/index.d.cts → index-qZoNKsHn.d.ts} +46 -5
- package/build/index.cjs +38651 -38
- package/build/index.cjs.map +1 -0
- package/build/index.d.cts +85 -6
- package/build/index.d.ts +85 -6
- package/build/index.js +38535 -12
- package/build/index.js.map +1 -0
- package/build/init-B7gNNyTd.d.ts +235 -0
- package/build/init-DwVGVxkx.d.cts +235 -0
- package/build/jsx.cjs +31 -0
- package/build/jsx.cjs.map +1 -0
- package/build/jsx.d.cts +317 -0
- package/build/jsx.d.ts +317 -0
- package/build/jsx.js +6 -0
- package/build/jsx.js.map +1 -0
- package/build/outside-click-rZ3Di_WX.d.cts +16 -0
- package/build/outside-click-rZ3Di_WX.d.ts +16 -0
- package/build/react.cjs +37827 -0
- package/build/react.cjs.map +1 -0
- package/build/react.d.cts +356 -0
- package/build/react.d.ts +356 -0
- package/build/react.js +37802 -0
- package/build/react.js.map +1 -0
- package/build/register.cjs +35832 -36
- package/build/register.cjs.map +1 -0
- package/build/register.d.cts +4 -33
- package/build/register.d.ts +4 -33
- package/build/register.js +35831 -35
- package/build/register.js.map +1 -0
- package/build/register.server.cjs +19 -0
- package/build/register.server.cjs.map +1 -0
- package/build/register.server.d.cts +2 -0
- package/build/register.server.d.ts +2 -0
- package/build/register.server.js +1 -0
- package/build/register.server.js.map +1 -0
- package/build/registry-9GX9KTG1.d.cts +264 -0
- package/build/registry-9GX9KTG1.d.ts +264 -0
- package/build/template-helpers-CguLXtLD.d.cts +10 -0
- package/build/template-helpers-CguLXtLD.d.ts +10 -0
- package/build/theme.cjs +746 -0
- package/build/theme.cjs.map +1 -0
- package/build/{theme/index.d.cts → theme.d.cts} +41 -21
- package/build/{theme/index.d.ts → theme.d.ts} +41 -21
- package/build/theme.js +692 -0
- package/build/theme.js.map +1 -0
- package/build/utils.cjs +205 -0
- package/build/utils.cjs.map +1 -0
- package/build/utils.d.cts +26 -0
- package/build/utils.d.ts +26 -0
- package/build/utils.js +167 -0
- package/build/utils.js.map +1 -0
- package/package.json +47 -33
- package/build/components/code/index.cjs +0 -152
- package/build/components/code/index.d.cts +0 -11
- package/build/components/code/index.d.ts +0 -11
- package/build/components/code/index.js +0 -148
- package/build/components/code/utils/highlight-api.cjs +0 -18
- package/build/components/code/utils/highlight-api.d.cts +0 -7
- package/build/components/code/utils/highlight-api.d.ts +0 -7
- package/build/components/code/utils/highlight-api.js +0 -14
- package/build/components/code/utils/syntax-grammars.cjs +0 -62
- package/build/components/code/utils/syntax-grammars.d.cts +0 -7
- package/build/components/code/utils/syntax-grammars.d.ts +0 -7
- package/build/components/code/utils/syntax-grammars.js +0 -59
- package/build/components/code/utils/syntax-highlighter-theme.cjs +0 -27
- package/build/components/code/utils/syntax-highlighter-theme.d.cts +0 -3
- package/build/components/code/utils/syntax-highlighter-theme.d.ts +0 -3
- package/build/components/code/utils/syntax-highlighter-theme.js +0 -23
- package/build/components/code/utils/syntax-highlighter-types.cjs +0 -2
- package/build/components/code/utils/syntax-highlighter-types.d.cts +0 -12
- package/build/components/code/utils/syntax-highlighter-types.d.ts +0 -12
- package/build/components/code/utils/syntax-highlighter-types.js +0 -1
- package/build/components/code/utils/syntax-tokenizer.cjs +0 -63
- package/build/components/code/utils/syntax-tokenizer.d.cts +0 -3
- package/build/components/code/utils/syntax-tokenizer.d.ts +0 -3
- package/build/components/code/utils/syntax-tokenizer.js +0 -58
- package/build/components/curve/bezier-conversion.cjs +0 -23
- package/build/components/curve/bezier-conversion.d.cts +0 -2
- package/build/components/curve/bezier-conversion.d.ts +0 -2
- package/build/components/curve/bezier-conversion.js +0 -19
- package/build/components/curve/canvas-controls.cjs +0 -300
- package/build/components/curve/canvas-controls.d.cts +0 -12
- package/build/components/curve/canvas-controls.d.ts +0 -12
- package/build/components/curve/canvas-controls.js +0 -296
- package/build/components/curve/canvas.cjs +0 -1208
- package/build/components/curve/canvas.d.cts +0 -24
- package/build/components/curve/canvas.d.ts +0 -24
- package/build/components/curve/canvas.js +0 -1204
- package/build/components/curve/constants.cjs +0 -203
- package/build/components/curve/constants.d.cts +0 -23
- package/build/components/curve/constants.d.ts +0 -23
- package/build/components/curve/constants.js +0 -200
- package/build/components/curve/controls.cjs +0 -942
- package/build/components/curve/controls.d.cts +0 -37
- package/build/components/curve/controls.d.ts +0 -37
- package/build/components/curve/controls.js +0 -938
- package/build/components/curve/index.cjs +0 -335
- package/build/components/curve/index.d.cts +0 -31
- package/build/components/curve/index.d.ts +0 -31
- package/build/components/curve/index.js +0 -330
- package/build/components/curve/output.cjs +0 -141
- package/build/components/curve/output.d.cts +0 -19
- package/build/components/curve/output.d.ts +0 -19
- package/build/components/curve/output.js +0 -137
- package/build/components/curve/styles.cjs +0 -493
- package/build/components/curve/styles.d.cts +0 -6
- package/build/components/curve/styles.d.ts +0 -6
- package/build/components/curve/styles.js +0 -490
- package/build/components/curve/svg-renderer.cjs +0 -185
- package/build/components/curve/svg-renderer.d.cts +0 -9
- package/build/components/curve/svg-renderer.d.ts +0 -9
- package/build/components/curve/svg-renderer.js +0 -175
- package/build/components/curve/toolbar.cjs +0 -368
- package/build/components/curve/toolbar.d.cts +0 -26
- package/build/components/curve/toolbar.d.ts +0 -26
- package/build/components/curve/toolbar.js +0 -364
- package/build/components/curve/types.cjs +0 -10
- package/build/components/curve/types.d.cts +0 -33
- package/build/components/curve/types.d.ts +0 -33
- package/build/components/curve/types.js +0 -7
- package/build/components/curve/utils.cjs +0 -541
- package/build/components/curve/utils.d.cts +0 -33
- package/build/components/curve/utils.d.ts +0 -33
- package/build/components/curve/utils.js +0 -521
- package/build/components/index.cjs +0 -18
- package/build/components/index.d.cts +0 -2
- package/build/components/index.d.ts +0 -2
- package/build/components/index.js +0 -2
- package/build/decorators/Component.cjs +0 -127
- package/build/decorators/Component.d.cts +0 -28
- package/build/decorators/Component.d.ts +0 -28
- package/build/decorators/Component.js +0 -123
- package/build/decorators/Listen.cjs +0 -154
- package/build/decorators/Listen.d.cts +0 -18
- package/build/decorators/Listen.d.ts +0 -18
- package/build/decorators/Listen.js +0 -151
- package/build/decorators/OutsideClick.cjs +0 -64
- package/build/decorators/OutsideClick.d.cts +0 -16
- package/build/decorators/OutsideClick.d.ts +0 -16
- package/build/decorators/OutsideClick.js +0 -59
- package/build/decorators/Prop.cjs +0 -273
- package/build/decorators/Prop.d.cts +0 -22
- package/build/decorators/Prop.d.ts +0 -22
- package/build/decorators/Prop.js +0 -270
- package/build/decorators/Query.cjs +0 -79
- package/build/decorators/Query.d.cts +0 -27
- package/build/decorators/Query.d.ts +0 -27
- package/build/decorators/Query.js +0 -76
- package/build/decorators/Watch.cjs +0 -52
- package/build/decorators/Watch.d.cts +0 -11
- package/build/decorators/Watch.d.ts +0 -11
- package/build/decorators/Watch.js +0 -49
- package/build/decorators/index.cjs +0 -15
- package/build/decorators/index.d.cts +0 -6
- package/build/decorators/index.d.ts +0 -6
- package/build/decorators/index.js +0 -6
- package/build/elements/button/index.cjs +0 -214
- package/build/elements/button/index.d.cts +0 -11
- package/build/elements/button/index.d.ts +0 -11
- package/build/elements/button/index.js +0 -210
- package/build/elements/checkbox/index.cjs +0 -316
- package/build/elements/checkbox/index.d.cts +0 -14
- package/build/elements/checkbox/index.d.ts +0 -14
- package/build/elements/checkbox/index.js +0 -312
- package/build/elements/color/index.cjs +0 -154
- package/build/elements/color/index.d.cts +0 -18
- package/build/elements/color/index.d.ts +0 -18
- package/build/elements/color/index.js +0 -150
- package/build/elements/color/picker.cjs +0 -544
- package/build/elements/color/picker.d.cts +0 -37
- package/build/elements/color/picker.d.ts +0 -37
- package/build/elements/color/picker.js +0 -540
- package/build/elements/color/utils.cjs +0 -235
- package/build/elements/color/utils.d.cts +0 -37
- package/build/elements/color/utils.d.ts +0 -37
- package/build/elements/color/utils.js +0 -218
- package/build/elements/dropdown/index.cjs +0 -875
- package/build/elements/dropdown/index.d.cts +0 -30
- package/build/elements/dropdown/index.d.ts +0 -30
- package/build/elements/dropdown/index.js +0 -871
- package/build/elements/field/index.cjs +0 -82
- package/build/elements/field/index.d.cts +0 -4
- package/build/elements/field/index.d.ts +0 -4
- package/build/elements/field/index.js +0 -78
- package/build/elements/icons/animation/chevron.cjs +0 -57
- package/build/elements/icons/animation/chevron.d.cts +0 -10
- package/build/elements/icons/animation/chevron.d.ts +0 -10
- package/build/elements/icons/animation/chevron.js +0 -53
- package/build/elements/icons/animation/clear.cjs +0 -74
- package/build/elements/icons/animation/clear.d.cts +0 -3
- package/build/elements/icons/animation/clear.d.ts +0 -3
- package/build/elements/icons/animation/clear.js +0 -70
- package/build/elements/icons/animation/grid.cjs +0 -77
- package/build/elements/icons/animation/grid.d.cts +0 -8
- package/build/elements/icons/animation/grid.d.ts +0 -8
- package/build/elements/icons/animation/grid.js +0 -73
- package/build/elements/icons/animation/loading.cjs +0 -68
- package/build/elements/icons/animation/loading.d.cts +0 -3
- package/build/elements/icons/animation/loading.d.ts +0 -3
- package/build/elements/icons/animation/loading.js +0 -64
- package/build/elements/icons/animation/snap.cjs +0 -133
- package/build/elements/icons/animation/snap.d.cts +0 -8
- package/build/elements/icons/animation/snap.d.ts +0 -8
- package/build/elements/icons/animation/snap.js +0 -129
- package/build/elements/icons/index.cjs +0 -40
- package/build/elements/icons/index.d.cts +0 -24
- package/build/elements/icons/index.d.ts +0 -24
- package/build/elements/icons/index.js +0 -24
- package/build/elements/icons/interface/anchor-add.cjs +0 -35
- package/build/elements/icons/interface/anchor-add.d.cts +0 -3
- package/build/elements/icons/interface/anchor-add.d.ts +0 -3
- package/build/elements/icons/interface/anchor-add.js +0 -31
- package/build/elements/icons/interface/anchor-remove.cjs +0 -34
- package/build/elements/icons/interface/anchor-remove.d.cts +0 -3
- package/build/elements/icons/interface/anchor-remove.d.ts +0 -3
- package/build/elements/icons/interface/anchor-remove.js +0 -30
- package/build/elements/icons/interface/arrow-up.cjs +0 -30
- package/build/elements/icons/interface/arrow-up.d.cts +0 -3
- package/build/elements/icons/interface/arrow-up.d.ts +0 -3
- package/build/elements/icons/interface/arrow-up.js +0 -26
- package/build/elements/icons/interface/arrows-vertical.cjs +0 -30
- package/build/elements/icons/interface/arrows-vertical.d.cts +0 -3
- package/build/elements/icons/interface/arrows-vertical.d.ts +0 -3
- package/build/elements/icons/interface/arrows-vertical.js +0 -26
- package/build/elements/icons/interface/bezier-angle.cjs +0 -33
- package/build/elements/icons/interface/bezier-angle.d.cts +0 -3
- package/build/elements/icons/interface/bezier-angle.d.ts +0 -3
- package/build/elements/icons/interface/bezier-angle.js +0 -29
- package/build/elements/icons/interface/bezier-distribute.cjs +0 -34
- package/build/elements/icons/interface/bezier-distribute.d.cts +0 -3
- package/build/elements/icons/interface/bezier-distribute.d.ts +0 -3
- package/build/elements/icons/interface/bezier-distribute.js +0 -30
- package/build/elements/icons/interface/bezier-length.cjs +0 -31
- package/build/elements/icons/interface/bezier-length.d.cts +0 -3
- package/build/elements/icons/interface/bezier-length.d.ts +0 -3
- package/build/elements/icons/interface/bezier-length.js +0 -27
- package/build/elements/icons/interface/bezier-mirror.cjs +0 -31
- package/build/elements/icons/interface/bezier-mirror.d.cts +0 -3
- package/build/elements/icons/interface/bezier-mirror.d.ts +0 -3
- package/build/elements/icons/interface/bezier-mirror.js +0 -27
- package/build/elements/icons/interface/bezier.cjs +0 -26
- package/build/elements/icons/interface/bezier.d.cts +0 -3
- package/build/elements/icons/interface/bezier.d.ts +0 -3
- package/build/elements/icons/interface/bezier.js +0 -22
- package/build/elements/icons/interface/check.cjs +0 -30
- package/build/elements/icons/interface/check.d.cts +0 -3
- package/build/elements/icons/interface/check.d.ts +0 -3
- package/build/elements/icons/interface/check.js +0 -26
- package/build/elements/icons/interface/circle-arrow-left.cjs +0 -30
- package/build/elements/icons/interface/circle-arrow-left.d.cts +0 -3
- package/build/elements/icons/interface/circle-arrow-left.d.ts +0 -3
- package/build/elements/icons/interface/circle-arrow-left.js +0 -26
- package/build/elements/icons/interface/circle-arrow-right.cjs +0 -30
- package/build/elements/icons/interface/circle-arrow-right.d.cts +0 -3
- package/build/elements/icons/interface/circle-arrow-right.d.ts +0 -3
- package/build/elements/icons/interface/circle-arrow-right.js +0 -26
- package/build/elements/icons/interface/code.cjs +0 -30
- package/build/elements/icons/interface/code.d.cts +0 -3
- package/build/elements/icons/interface/code.d.ts +0 -3
- package/build/elements/icons/interface/code.js +0 -26
- package/build/elements/icons/interface/dots.cjs +0 -32
- package/build/elements/icons/interface/dots.d.cts +0 -3
- package/build/elements/icons/interface/dots.d.ts +0 -3
- package/build/elements/icons/interface/dots.js +0 -28
- package/build/elements/icons/interface/mention.cjs +0 -30
- package/build/elements/icons/interface/mention.d.cts +0 -3
- package/build/elements/icons/interface/mention.d.ts +0 -3
- package/build/elements/icons/interface/mention.js +0 -26
- package/build/elements/icons/interface/minus.cjs +0 -30
- package/build/elements/icons/interface/minus.d.cts +0 -3
- package/build/elements/icons/interface/minus.d.ts +0 -3
- package/build/elements/icons/interface/minus.js +0 -26
- package/build/elements/icons/interface/picker.cjs +0 -34
- package/build/elements/icons/interface/picker.d.cts +0 -3
- package/build/elements/icons/interface/picker.d.ts +0 -3
- package/build/elements/icons/interface/picker.js +0 -30
- package/build/elements/icons/interface/plus.cjs +0 -30
- package/build/elements/icons/interface/plus.d.cts +0 -3
- package/build/elements/icons/interface/plus.d.ts +0 -3
- package/build/elements/icons/interface/plus.js +0 -26
- package/build/elements/icons/interface/settings.cjs +0 -30
- package/build/elements/icons/interface/settings.d.cts +0 -3
- package/build/elements/icons/interface/settings.d.ts +0 -3
- package/build/elements/icons/interface/settings.js +0 -26
- package/build/elements/index.cjs +0 -65
- package/build/elements/index.d.cts +0 -23
- package/build/elements/index.d.ts +0 -23
- package/build/elements/index.js +0 -23
- package/build/elements/input/index.cjs +0 -273
- package/build/elements/input/index.d.cts +0 -17
- package/build/elements/input/index.d.ts +0 -17
- package/build/elements/input/index.js +0 -269
- package/build/elements/logo/index.cjs +0 -732
- package/build/elements/logo/index.d.cts +0 -17
- package/build/elements/logo/index.d.ts +0 -17
- package/build/elements/logo/index.js +0 -728
- package/build/elements/monitor/fps.cjs +0 -432
- package/build/elements/monitor/fps.d.cts +0 -21
- package/build/elements/monitor/fps.d.ts +0 -21
- package/build/elements/monitor/fps.js +0 -428
- package/build/elements/monitor/index.cjs +0 -670
- package/build/elements/monitor/index.js +0 -666
- package/build/elements/number/index.cjs +0 -173
- package/build/elements/number/index.d.cts +0 -19
- package/build/elements/number/index.d.ts +0 -19
- package/build/elements/number/index.js +0 -169
- package/build/elements/origin/index.cjs +0 -169
- package/build/elements/origin/index.d.cts +0 -12
- package/build/elements/origin/index.d.ts +0 -12
- package/build/elements/origin/index.js +0 -165
- package/build/elements/panel/index.cjs +0 -496
- package/build/elements/panel/index.js +0 -492
- package/build/elements/popover/index.cjs +0 -209
- package/build/elements/popover/index.d.cts +0 -19
- package/build/elements/popover/index.d.ts +0 -19
- package/build/elements/popover/index.js +0 -205
- package/build/elements/radio/index.cjs +0 -301
- package/build/elements/radio/index.d.cts +0 -13
- package/build/elements/radio/index.d.ts +0 -13
- package/build/elements/radio/index.js +0 -283
- package/build/elements/radio/input.cjs +0 -329
- package/build/elements/radio/input.d.cts +0 -15
- package/build/elements/radio/input.d.ts +0 -15
- package/build/elements/radio/input.js +0 -325
- package/build/elements/radio/option.cjs +0 -15
- package/build/elements/radio/option.d.cts +0 -3
- package/build/elements/radio/option.d.ts +0 -3
- package/build/elements/radio/option.js +0 -11
- package/build/elements/shared.cjs +0 -66
- package/build/elements/shared.d.cts +0 -40
- package/build/elements/shared.d.ts +0 -40
- package/build/elements/shared.js +0 -59
- package/build/elements/slider/index.cjs +0 -232
- package/build/elements/slider/index.d.cts +0 -20
- package/build/elements/slider/index.d.ts +0 -20
- package/build/elements/slider/index.js +0 -228
- package/build/elements/state/index.cjs +0 -274
- package/build/elements/state/index.js +0 -270
- package/build/elements/toggle/index.cjs +0 -151
- package/build/elements/toggle/index.d.cts +0 -9
- package/build/elements/toggle/index.d.ts +0 -9
- package/build/elements/toggle/index.js +0 -147
- package/build/elements/tooltip/index.cjs +0 -187
- package/build/elements/tooltip/index.d.cts +0 -17
- package/build/elements/tooltip/index.d.ts +0 -17
- package/build/elements/tooltip/index.js +0 -183
- package/build/init.cjs +0 -325
- package/build/init.d.cts +0 -157
- package/build/init.d.ts +0 -157
- package/build/init.js +0 -289
- package/build/internal/component-loaders.cjs +0 -208
- package/build/internal/component-loaders.d.cts +0 -52
- package/build/internal/component-loaders.d.ts +0 -52
- package/build/internal/component-loaders.js +0 -169
- package/build/internal/fonts.cjs +0 -128
- package/build/internal/fonts.d.cts +0 -32
- package/build/internal/fonts.d.ts +0 -32
- package/build/internal/fonts.js +0 -123
- package/build/internal/lazy-load.cjs +0 -89
- package/build/internal/lazy-load.d.cts +0 -32
- package/build/internal/lazy-load.d.ts +0 -32
- package/build/internal/lazy-load.js +0 -86
- package/build/internal/style-inject.cjs +0 -236
- package/build/internal/style-inject.d.cts +0 -44
- package/build/internal/style-inject.d.ts +0 -44
- package/build/internal/style-inject.js +0 -226
- package/build/react/events.cjs +0 -25
- package/build/react/events.d.cts +0 -39
- package/build/react/events.d.ts +0 -39
- package/build/react/events.js +0 -22
- package/build/react/index.cjs +0 -19
- package/build/react/index.d.cts +0 -13
- package/build/react/index.d.ts +0 -13
- package/build/react/index.js +0 -12
- package/build/react/provider.cjs +0 -134
- package/build/react/provider.d.cts +0 -81
- package/build/react/provider.d.ts +0 -81
- package/build/react/provider.js +0 -98
- package/build/react/types.cjs +0 -8
- package/build/react/types.d.cts +0 -55
- package/build/react/types.d.ts +0 -55
- package/build/react/types.js +0 -7
- package/build/react/use-ease-state.cjs +0 -129
- package/build/react/use-ease-state.d.cts +0 -95
- package/build/react/use-ease-state.d.ts +0 -95
- package/build/react/use-ease-state.js +0 -126
- package/build/react/use-web-kit.cjs +0 -150
- package/build/react/use-web-kit.d.cts +0 -80
- package/build/react/use-web-kit.d.ts +0 -80
- package/build/react/use-web-kit.js +0 -114
- package/build/theme/index.cjs +0 -452
- package/build/theme/index.js +0 -423
- package/build/theme/presets.cjs +0 -54
- package/build/theme/presets.d.cts +0 -19
- package/build/theme/presets.d.ts +0 -19
- package/build/theme/presets.js +0 -51
- package/build/theme/registry.cjs +0 -204
- package/build/theme/registry.d.cts +0 -99
- package/build/theme/registry.d.ts +0 -99
- package/build/theme/registry.js +0 -194
- package/build/theme/tokens.cjs +0 -148
- package/build/theme/tokens.d.cts +0 -163
- package/build/theme/tokens.d.ts +0 -163
- package/build/theme/tokens.js +0 -145
- package/build/utils/dismiss-controller.cjs +0 -77
- package/build/utils/dismiss-controller.d.cts +0 -14
- package/build/utils/dismiss-controller.d.ts +0 -14
- package/build/utils/dismiss-controller.js +0 -73
- package/build/utils/index.cjs +0 -18
- package/build/utils/index.d.cts +0 -3
- package/build/utils/index.d.ts +0 -3
- package/build/utils/index.js +0 -3
- package/build/utils/outside-click.cjs +0 -82
- package/build/utils/outside-click.d.cts +0 -18
- package/build/utils/outside-click.d.ts +0 -18
- package/build/utils/outside-click.js +0 -74
- package/build/utils/template-helpers.cjs +0 -39
- package/build/utils/template-helpers.d.cts +0 -13
- package/build/utils/template-helpers.d.ts +0 -13
- package/build/utils/template-helpers.js +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/web-kit/web-kit/packages/core/src/theme/tokens.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/presets.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/registry.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/style-inject.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/fonts.ts","../src/decorators/Component.ts","../src/decorators/Prop.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/button/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/shared.ts","../src/decorators/Listen.ts","../src/decorators/Query.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/checkbox/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/popover/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/chevron.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts","../src/utils/outside-click.ts","../src/decorators/OutsideClick.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/dropdown/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/input/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/utils.ts","../src/utils/template-helpers.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrows-vertical.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/minus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/plus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/number/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/origin/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/option.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/input.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/slider/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/toggle/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/field/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/panel/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/state/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/tooltip/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/logo/index.ts","../src/decorators/Watch.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/fps.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-add.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-remove.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrow-up.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-angle.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-distribute.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-length.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-mirror.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/check.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-left.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-right.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/clear.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/code.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/dots.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/grid.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/loading.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/mention.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/settings.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/snap.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/bezier-conversion.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/styles.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/types.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/utils.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/constants.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/svg-renderer.ts","../src/elements/shared.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/canvas.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/canvas-controls.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/controls.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/highlight-api.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-highlighter-theme.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-grammars.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-tokenizer.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/output.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/toolbar.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/register.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/component-loaders.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/lazy-load.ts","/home/runner/work/web-kit/web-kit/packages/core/src/init.ts","/home/runner/work/web-kit/web-kit/packages/core/src/react/events.ts","/home/runner/work/web-kit/web-kit/packages/core/src/react/jsx.ts","/home/runner/work/web-kit/web-kit/packages/core/src/react/provider.ts","/home/runner/work/web-kit/web-kit/packages/core/src/react/use-ease-state.ts","/home/runner/work/web-kit/web-kit/packages/core/src/react/use-web-kit.ts"],"sourcesContent":["/**\n * Color scale levels\n */\nexport type ColorScale = {\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n 1000?: string;\n 1100?: string;\n};\n\n/**\n * Gray color scale with additional intermediate values\n */\nexport type GrayScale = ColorScale & {\n 0?: string;\n 825?: string;\n 850?: string;\n 875?: string;\n};\n\n/**\n * Alpha color variations\n */\nexport type AlphaColors = {\n 0?: string;\n 2?: string;\n 4?: string;\n 6?: string;\n 8?: string;\n 10?: string;\n 12?: string;\n 15?: string;\n 20?: string;\n 30?: string;\n 40?: string;\n 50?: string;\n 70?: string;\n 80?: string;\n 90?: string;\n};\n\n/**\n * Color palette configuration\n */\nexport interface ColorPalette {\n /** Gray scale colors */\n gray?: GrayScale;\n /** Blue scale colors */\n blue?: ColorScale;\n /** Green scale colors */\n green?: ColorScale;\n /** Red scale colors */\n red?: ColorScale;\n /** Orange scale colors */\n orange?: ColorScale;\n /** Yellow scale colors */\n yellow?: ColorScale;\n /** Base white color */\n white?: string;\n /** Base black color */\n black?: string;\n /** White alpha variations */\n whiteAlpha?: AlphaColors;\n /** Black alpha variations */\n blackAlpha?: AlphaColors;\n /** Foreground color */\n foreground?: string;\n}\n\n/**\n * Border radius configuration\n */\nexport interface RadiiConfig {\n /** Small radius (4px default) */\n sm?: string;\n /** Medium radius (8px default) */\n md?: string;\n /** Large radius (12px default) */\n lg?: string;\n /** Extra large radius (16px default) */\n xl?: string;\n /** Full/pill radius */\n full?: string;\n}\n\n/**\n * Spacing configuration\n */\nexport interface SpacingConfig {\n /** Extra small spacing */\n xs?: string;\n /** Small spacing */\n sm?: string;\n /** Medium spacing */\n md?: string;\n /** Large spacing */\n lg?: string;\n /** Extra large spacing */\n xl?: string;\n}\n\n/**\n * Typography configuration\n */\nexport interface TypographyConfig {\n /** Font family for body text */\n fontFamily?: string;\n /** Font family for monospace/code */\n fontMono?: string;\n /** Base font size */\n fontSize?: string;\n /** Line height */\n lineHeight?: string;\n}\n\n/**\n * Arbitrary CSS custom properties to apply alongside the theme tokens.\n *\n * Keys may be provided with or without the `--` prefix.\n *\n * @example\n * ```ts\n * vars: {\n * '--ease-panel-padding': '16px',\n * 'ease-field-label-width': '40%'\n * }\n * ```\n */\nexport type ThemeVars = Record<string, string | number | null | undefined>;\n\n/**\n * Complete theme configuration\n */\nexport interface ThemeConfig {\n /** Color palette */\n colors?: ColorPalette;\n /** Border radii */\n radii?: RadiiConfig;\n /** Spacing values */\n spacing?: SpacingConfig;\n /** Typography settings */\n typography?: TypographyConfig;\n /**\n * Extra CSS variables (component tokens, app tokens, etc).\n * This is the recommended place to set `--ease-*` variables.\n */\n vars?: ThemeVars;\n}\n\n/**\n * Default color values (oklab)\n */\nexport const defaultColors: Required<ColorPalette> = {\n gray: {\n 0: 'oklab(98.81% 0 0)',\n 100: 'oklab(97.64% 0.0004 -0.0013)',\n 300: 'oklab(93.49% 0.0011 -0.0039)',\n 400: 'oklab(89.52% 0.0009 -0.0068)',\n 500: 'oklab(81.71% -0.0002 -0.0073)',\n 600: 'oklab(65.21% -0.0019 -0.0144)',\n 700: 'oklab(37.92% -0.0006 -0.0179)',\n 800: 'oklab(28.45% -0.0012 -0.0118)',\n 825: 'oklab(26.45% -0.0012 -0.0105)',\n 850: 'oklab(24.50% -0.0012 -0.0105)',\n 875: 'oklab(22.66% -0.0009 -0.0097)',\n 900: 'oklab(20.68% -0.0006 -0.0065)',\n 1000: 'oklab(18.81% -0.0012 -0.006)'\n },\n blue: {\n 100: 'oklab(98.65% 0.0019 -0.0063)',\n 200: 'oklab(97.45% 0.0057 -0.0121)',\n 300: 'oklab(95.88% 0.0086 -0.0183)',\n 400: 'oklab(91.21% 0.0179 -0.0399)',\n 500: 'oklab(84.61% 0.0327 -0.0725)',\n 600: 'oklab(76.85% 0.0462 -0.1115)',\n 700: 'oklab(68.28% 0.0582 -0.1575)',\n 800: 'oklab(59.36% 0.0641 -0.2083)',\n 900: 'oklab(50.69% 0.0492 -0.2575)',\n 1000: 'oklab(46.82% 0.0475 -0.2273)',\n 1100: 'oklch(0.4013 0.171 284.66)'\n },\n green: {\n 100: 'oklab(98.44% -0.009 0.0042)',\n 200: 'oklab(97.57% -0.0127 0.0058)',\n 300: 'oklab(96.32% -0.0176 0.0071)',\n 400: 'oklab(93.66% -0.0341 0.0149)',\n 500: 'oklab(89.96% -0.0529 0.0237)',\n 600: 'oklab(85.44% -0.0759 0.0346)',\n 700: 'oklab(80.59% -0.1005 0.0484)',\n 800: 'oklab(75.87% -0.1245 0.0639)',\n 900: 'oklab(71.18% -0.1439 0.0799)',\n 1000: 'oklab(64.89% -0.1265 0.0677)'\n },\n red: {\n 100: 'oklab(99.04% 0.0031 0.0009)',\n 200: 'oklab(97.85% 0.0072 0.0022)',\n 300: 'oklab(95.52% 0.0159 0.0036)',\n 400: 'oklab(89.9% 0.037 0.0091)',\n 500: 'oklab(82.78% 0.0664 0.0181)',\n 600: 'oklab(74.46% 0.105 0.031)',\n 700: 'oklab(65.73% 0.1467 0.0503)',\n 800: 'oklab(58.28% 0.1811 0.0773)',\n 900: 'oklab(53.11% 0.1914 0.1028)',\n 1000: 'oklab(48.4% 0.1727 0.0903)'\n },\n orange: {\n 100: 'oklab(99.47% 0.0009 0.0044)',\n 200: 'oklab(98.95% 0.0018 0.0088)',\n 300: 'oklab(97.58% 0.0073 0.0133)',\n 400: 'oklab(94.81% 0.0136 0.0305)',\n 500: 'oklab(90.97% 0.0248 0.0519)',\n 600: 'oklab(86.55% 0.0389 0.0778)',\n 700: 'oklab(81.73% 0.0568 0.1053)',\n 800: 'oklab(77.05% 0.0777 0.1296)',\n 900: 'oklab(72.25% 0.108 0.143)',\n 1000: 'oklab(65.81% 0.092 0.1281)'\n },\n yellow: {\n 100: 'oklab(99.14% 0.0004 0.0098)',\n 200: 'oklab(97.98% 0.0003 0.0248)',\n 300: 'oklab(96.81% -0.0002 0.0409)',\n 400: 'oklab(95.68% -0.0003 0.0555)',\n 500: 'oklab(91.97% 0.0002 0.102)',\n 600: 'oklab(88.75% 0.0018 0.1409)',\n 700: 'oklab(85.67% 0.0101 0.1648)',\n 800: 'oklab(76.85% 0.0212 0.1568)'\n },\n white: 'oklab(95.14% -0.0013 -0.0186)',\n black: 'oklab(0% 0 0)',\n whiteAlpha: {\n 0: 'oklab(95.14% -0.0013 -0.0186 / 0)',\n 2: 'oklab(95.14% -0.0013 -0.0186 / 0.02)',\n 4: 'oklab(95.14% -0.0013 -0.0186 / 0.04)',\n 6: 'oklab(95.14% -0.0013 -0.0186 / 0.06)',\n 8: 'oklab(95.14% -0.0013 -0.0186 / 0.08)',\n 10: 'oklab(95.14% -0.0013 -0.0186 / 0.1)',\n 12: 'oklab(95.14% -0.0013 -0.0186 / 0.12)',\n 15: 'oklab(95.14% -0.0013 -0.0186 / 0.15)',\n 20: 'oklab(95.14% -0.0013 -0.0186 / 0.2)',\n 30: 'oklab(95.14% -0.0013 -0.0186 / 0.3)',\n 40: 'oklab(95.14% -0.0013 -0.0186 / 0.4)',\n 50: 'oklab(95.14% -0.0013 -0.0186 / 0.5)',\n 70: 'oklab(95.14% -0.0013 -0.0186 / 0.7)',\n 80: 'oklab(95.14% -0.0013 -0.0186 / 0.8)',\n 90: 'oklab(95.14% -0.0013 -0.0186 / 0.9)'\n },\n blackAlpha: {\n 0: 'oklab(0% 0 0 / 0)',\n 2: 'oklab(0% 0 0 / 0.02)',\n 4: 'oklab(0% 0 0 / 0.04)',\n 6: 'oklab(0% 0 0 / 0.06)',\n 8: 'oklab(0% 0 0 / 0.08)',\n 10: 'oklab(0% 0 0 / 0.1)',\n 12: 'oklab(0% 0 0 / 0.12)',\n 15: 'oklab(0% 0 0 / 0.15)',\n 20: 'oklab(0% 0 0 / 0.2)',\n 30: 'oklab(0% 0 0 / 0.3)',\n 40: 'oklab(0% 0 0 / 0.4)',\n 50: 'oklab(0% 0 0 / 0.5)',\n 70: 'oklab(0% 0 0 / 0.7)',\n 80: 'oklab(0% 0 0 / 0.8)',\n 90: 'oklab(0% 0 0 / 0.9)'\n },\n foreground: 'var(--color-gray-0)'\n};\n\n/**\n * Default border radius values\n */\nexport const defaultRadii: Required<RadiiConfig> = {\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n full: '9999px'\n};\n\n/**\n * Default spacing values\n */\nexport const defaultSpacing: Required<SpacingConfig> = {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px'\n};\n\n/**\n * Default typography values\n */\nexport const defaultTypography: Required<TypographyConfig> = {\n fontFamily: '\"Instrument Sans\", system-ui, sans-serif',\n fontMono: '\"Geist Mono\", monospace',\n fontSize: '13px',\n lineHeight: '1.5'\n};\n","import type { ThemeConfig, ThemeVars } from './tokens';\n\nimport { defaultColors, defaultRadii, defaultSpacing, defaultTypography } from './tokens';\n\n/**\n * Default ease UI kit CSS variables (--ease-*).\n * These are component-level design tokens that components consume.\n */\nexport const defaultEaseVars: ThemeVars = {\n // Typography aliases\n '--ease-font-family': 'var(--font-family)',\n '--ease-font-mono': 'var(--font-mono)',\n '--ease-font-size': 'var(--font-size)',\n '--ease-font-size-sm': '12px',\n '--ease-line-height': 'var(--font-line-height)',\n\n // Panel (ease-state)\n '--ease-panel-max-width': '332px',\n '--ease-panel-padding': 'var(--spacing-md)',\n '--ease-panel-radius': 'var(--radii-lg)',\n '--ease-panel-border-color': 'var(--color-white-6)',\n '--ease-panel-background': 'var(--color-gray-1000)',\n '--ease-panel-shadow': '0 0 40px 0 var(--color-white-2) inset',\n '--ease-panel-title-font-size': '14px',\n '--ease-panel-title-font-weight': '500',\n '--ease-panel-title-line-height': '24px',\n '--ease-panel-title-color': 'var(--color-blue-100)',\n\n // Field (ease-field)\n '--ease-field-label-width': '36%',\n '--ease-field-column-gap': 'var(--spacing-md)',\n '--ease-field-row-gap': '6px',\n '--ease-field-min-height': '30px',\n '--ease-field-label-font-size': 'var(--ease-font-size-sm)',\n '--ease-field-label-color': 'var(--color-gray-600)',\n '--ease-field-label-padding-left': '4px'\n};\n\n/**\n * The complete default (dark) theme configuration.\n * Includes colors, radii, spacing, typography, and component-level --ease-* vars.\n */\nexport const defaultThemeConfig: ThemeConfig = {\n colors: defaultColors,\n radii: defaultRadii,\n spacing: defaultSpacing,\n typography: defaultTypography,\n vars: defaultEaseVars\n};\n\n/**\n * Default built-in theme name.\n */\nexport const DEFAULT_THEME_NAME = 'default' as const;\n\n/**\n * Legacy alias for the built-in dark theme.\n */\nexport const DARK_THEME_ALIAS = 'dark' as const;\n","import type { ThemeConfig } from './tokens';\n\nimport { DARK_THEME_ALIAS, DEFAULT_THEME_NAME, defaultThemeConfig } from './presets';\n\n// --------------------------\n// Type definitions\n// --------------------------\n\n/**\n * Augmentable interface for theme names.\n * Consumers can extend this via module augmentation to add custom theme names:\n *\n * @example\n * ```ts\n * declare module '@easemate/web-kit' {\n * interface WebKitThemeRegistry {\n * custom: true;\n * brand: true;\n * }\n * }\n * ```\n */\nexport interface WebKitThemeRegistry {\n default: true;\n dark: true;\n}\n\n/**\n * Union of all registered theme names.\n */\nexport type WebKitThemeName = keyof WebKitThemeRegistry;\n\n/**\n * A strongly-typed theme reference.\n * Use this for type-safe theme references without module augmentation.\n */\nexport interface WebKitThemeRef<Name extends string = string> {\n readonly __brand: 'WebKitThemeRef';\n readonly name: Name;\n}\n\n/**\n * Valid theme input for APIs: a registered theme name, a theme ref, or an inline config.\n */\nexport type ThemeInput = WebKitThemeName | WebKitThemeRef | ThemeConfig;\n\n/**\n * Options for registering a theme.\n */\nexport interface RegisterThemeOptions {\n /**\n * Base theme to extend from.\n * - `'default'` (or any registered name) - extends that theme\n * - `null` - no base, starts from scratch\n * - `undefined` - defaults to `'default'`\n */\n base?: WebKitThemeName | WebKitThemeRef | null;\n /**\n * Theme configuration (overrides on top of base).\n */\n config?: ThemeConfig;\n}\n\n/**\n * Resolved theme entry in the registry.\n */\ninterface ThemeEntry {\n name: string;\n base: string | null;\n config: ThemeConfig;\n resolved: ThemeConfig | null; // lazily computed\n}\n\n// --------------------------\n// Registry implementation\n// --------------------------\n\nconst registry = new Map<string, ThemeEntry>();\n\n/**\n * Deep merge two theme configs.\n */\nconst mergeConfigs = (base: ThemeConfig, overrides: ThemeConfig): ThemeConfig => {\n return {\n colors: {\n ...base.colors,\n ...overrides.colors,\n gray: { ...base.colors?.gray, ...overrides.colors?.gray },\n blue: { ...base.colors?.blue, ...overrides.colors?.blue },\n green: { ...base.colors?.green, ...overrides.colors?.green },\n red: { ...base.colors?.red, ...overrides.colors?.red },\n orange: { ...base.colors?.orange, ...overrides.colors?.orange },\n yellow: { ...base.colors?.yellow, ...overrides.colors?.yellow },\n whiteAlpha: { ...base.colors?.whiteAlpha, ...overrides.colors?.whiteAlpha },\n blackAlpha: { ...base.colors?.blackAlpha, ...overrides.colors?.blackAlpha }\n },\n radii: { ...base.radii, ...overrides.radii },\n spacing: { ...base.spacing, ...overrides.spacing },\n typography: { ...base.typography, ...overrides.typography },\n vars: { ...base.vars, ...overrides.vars }\n };\n};\n\n/**\n * Resolve a theme by name, following base chain.\n */\nconst resolveThemeConfig = (name: string, visited = new Set<string>()): ThemeConfig => {\n if (visited.has(name)) {\n throw new Error(`[web-kit] Circular theme dependency detected: ${Array.from(visited).join(' -> ')} -> ${name}`);\n }\n\n const entry = registry.get(name);\n if (!entry) {\n throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n }\n\n // Return cached resolution\n if (entry.resolved) {\n return entry.resolved;\n }\n\n visited.add(name);\n\n let resolved: ThemeConfig;\n if (entry.base === null) {\n // No base - use config as-is\n resolved = entry.config;\n } else {\n // Resolve base first\n const baseConfig = resolveThemeConfig(entry.base, visited);\n resolved = mergeConfigs(baseConfig, entry.config);\n }\n\n // Cache the resolution\n entry.resolved = resolved;\n return resolved;\n};\n\n/**\n * Initialize built-in themes.\n */\nconst initBuiltInThemes = (): void => {\n if (registry.has(DEFAULT_THEME_NAME)) {\n return;\n }\n\n // Register 'default' theme\n registry.set(DEFAULT_THEME_NAME, {\n name: DEFAULT_THEME_NAME,\n base: null,\n config: defaultThemeConfig,\n resolved: defaultThemeConfig\n });\n\n // Register 'dark' as alias to 'default'\n registry.set(DARK_THEME_ALIAS, {\n name: DARK_THEME_ALIAS,\n base: DEFAULT_THEME_NAME,\n config: {},\n resolved: null\n });\n};\n\n// Initialize on module load\ninitBuiltInThemes();\n\n// --------------------------\n// Public API\n// --------------------------\n\n/**\n * Check if a value is a theme ref.\n */\nexport const isThemeRef = (value: unknown): value is WebKitThemeRef =>\n typeof value === 'object' && value !== null && '__brand' in value && value.__brand === 'WebKitThemeRef';\n\n/**\n * Check if a value is a theme config object.\n */\nexport const isThemeConfig = (value: unknown): value is ThemeConfig => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n if (isThemeRef(value)) {\n return false;\n }\n // Check if it looks like a ThemeConfig\n const obj = value as Record<string, unknown>;\n return (\n obj.colors !== undefined ||\n obj.radii !== undefined ||\n obj.spacing !== undefined ||\n obj.typography !== undefined ||\n obj.vars !== undefined\n );\n};\n\n/**\n * Register a custom theme.\n *\n * @param name - Theme name (must be unique)\n * @param options - Theme options (base + config)\n * @returns A typed theme reference\n *\n * @example\n * ```ts\n * const custom = registerTheme('custom', {\n * base: 'default',\n * config: {\n * vars: { '--ease-panel-radius': '14px' }\n * }\n * });\n *\n * initWebKit({ theme: custom });\n * ```\n */\nexport function registerTheme<Name extends string>(\n name: Name,\n options: RegisterThemeOptions = {}\n): WebKitThemeRef<Name> {\n const { base = DEFAULT_THEME_NAME, config = {} } = options;\n\n // Resolve base name\n let baseName: string | null = null;\n if (base !== null) {\n baseName = isThemeRef(base) ? base.name : base;\n // Validate base exists\n if (!registry.has(baseName)) {\n throw new Error(`[web-kit] Base theme \"${baseName}\" is not registered.`);\n }\n }\n\n // Invalidate cache for themes that depend on this one (if re-registering)\n if (registry.has(name)) {\n for (const entry of registry.values()) {\n if (entry.base === name) {\n entry.resolved = null;\n }\n }\n }\n\n registry.set(name, {\n name,\n base: baseName,\n config,\n resolved: null\n });\n\n return {\n __brand: 'WebKitThemeRef',\n name\n } as WebKitThemeRef<Name>;\n}\n\n/**\n * Get a theme's resolved configuration.\n *\n * @param theme - Theme name, ref, or inline config\n * @returns Resolved theme configuration\n */\nexport function getTheme(theme: ThemeInput): ThemeConfig {\n if (isThemeConfig(theme)) {\n return theme;\n }\n\n const name = isThemeRef(theme) ? theme.name : theme;\n return resolveThemeConfig(name);\n}\n\n/**\n * Check if a theme is registered.\n */\nexport function hasTheme(name: string): boolean {\n return registry.has(name);\n}\n\n/**\n * Get all registered theme names.\n */\nexport function getThemeNames(): string[] {\n return Array.from(registry.keys());\n}\n\n/**\n * Create a theme ref for a registered theme name.\n * Useful for type-safe references without module augmentation.\n */\nexport function themeRef<Name extends WebKitThemeName>(name: Name): WebKitThemeRef<Name> {\n if (!registry.has(name)) {\n throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n }\n return {\n __brand: 'WebKitThemeRef',\n name\n } as WebKitThemeRef<Name>;\n}\n","import {\n type ColorPalette,\n defaultColors,\n defaultRadii,\n defaultSpacing,\n defaultTypography,\n type RadiiConfig,\n type SpacingConfig,\n type ThemeConfig,\n type ThemeVars,\n type TypographyConfig\n} from './tokens';\n\nexport * from './presets';\nexport * from './registry';\nexport * from './tokens';\n\n/**\n * CSS variable prefix\n */\nconst CSS_PREFIX = '--color';\nconst RADII_PREFIX = '--radii';\nconst SPACING_PREFIX = '--spacing';\nconst TYPOGRAPHY_PREFIX = '--font';\n\n/**\n * Convert a nested object path to CSS variable name\n * e.g., ['gray', '100'] -> '--color-gray-100'\n */\nconst toVarName = (prefix: string, ...parts: (string | number)[]): string => `${prefix}-${parts.join('-')}`;\n\n/**\n * Generate CSS variables from a color scale\n */\nconst generateColorScaleVars = (\n name: string,\n scale: Record<string | number, string | undefined>\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [level, value] of Object.entries(scale)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, name, level)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Add alpha to an OKLab/OKLCH color string.\n * Falls back to `color-mix()` for non-oklab/oklch formats.\n */\nconst withAlpha = (color: string, alpha: number): string => {\n const trimmed = color.trim();\n const match = /^(oklab|oklch)\\((.+)\\)$/.exec(trimmed);\n if (match) {\n const fn = match[1];\n const innerRaw = match[2];\n\n if (fn && innerRaw) {\n const inner = innerRaw.trim();\n\n // If the color already has an alpha, keep it as-is.\n if (inner.includes('/')) {\n return `${fn}(${inner})`;\n }\n\n return `${fn}(${inner} / ${alpha})`;\n }\n }\n\n // Fallback: approximate alpha using color-mix\n const pct = Math.round(alpha * 1000) / 10;\n return `color-mix(in oklab, ${trimmed} ${pct}%, transparent)`;\n};\n\n/**\n * Generate CSS variables from a color palette\n */\nconst generateColorVars = (colors: ColorPalette): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (colors.gray) {\n Object.assign(vars, generateColorScaleVars('gray', colors.gray));\n }\n\n if (colors.blue) {\n Object.assign(vars, generateColorScaleVars('blue', colors.blue));\n }\n\n // Derived convenience tokens used by some components\n const blue = colors.blue as Record<string, string | undefined> | undefined;\n if (blue?.['200']) {\n vars[toVarName(CSS_PREFIX, 'blue', '100-50')] = withAlpha(blue['200'], 0.5);\n }\n if (blue?.['300']) {\n vars[toVarName(CSS_PREFIX, 'blue', '300-40')] = withAlpha(blue['300'], 0.4);\n }\n\n if (colors.green) {\n Object.assign(vars, generateColorScaleVars('green', colors.green));\n }\n\n if (colors.red) {\n Object.assign(vars, generateColorScaleVars('red', colors.red));\n }\n\n if (colors.orange) {\n Object.assign(vars, generateColorScaleVars('orange', colors.orange));\n }\n\n if (colors.yellow) {\n Object.assign(vars, generateColorScaleVars('yellow', colors.yellow));\n }\n\n if (colors.white) {\n vars[toVarName(CSS_PREFIX, 'white')] = colors.white;\n }\n\n if (colors.black) {\n vars[toVarName(CSS_PREFIX, 'black')] = colors.black;\n }\n\n if (colors.whiteAlpha) {\n for (const [level, value] of Object.entries(colors.whiteAlpha)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, 'white', level)] = value;\n }\n }\n }\n\n // Ensure `--color-white-0` exists (used by slider thumb gradients)\n if (!vars[toVarName(CSS_PREFIX, 'white', 0)] && colors.white) {\n vars[toVarName(CSS_PREFIX, 'white', 0)] = withAlpha(colors.white, 0);\n }\n\n if (colors.blackAlpha) {\n for (const [level, value] of Object.entries(colors.blackAlpha)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, 'black', level)] = value;\n }\n }\n }\n\n if (colors.foreground) {\n vars[toVarName(CSS_PREFIX, 'foreground')] = colors.foreground;\n }\n\n return vars;\n};\n\n/**\n * Resolve the theme target element.\n * This keeps the theme API SSR-safe (no-ops when `document` is not available).\n */\nconst resolveThemeTarget = (element?: HTMLElement | null): HTMLElement | null => {\n if (element) {\n return element;\n }\n if (typeof document === 'undefined') {\n return null;\n }\n return document.documentElement;\n};\n\n/**\n * Generate CSS variables from radii config\n */\nconst generateRadiiVars = (radii: RadiiConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(radii)) {\n if (value !== undefined) {\n vars[toVarName(RADII_PREFIX, name)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Generate CSS variables from spacing config\n */\nconst generateSpacingVars = (spacing: SpacingConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(spacing)) {\n if (value !== undefined) {\n vars[toVarName(SPACING_PREFIX, name)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Generate CSS variables from typography config\n */\nconst generateTypographyVars = (typography: TypographyConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (typography.fontFamily) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'family')] = typography.fontFamily;\n }\n\n if (typography.fontMono) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'mono')] = typography.fontMono;\n }\n\n if (typography.fontSize) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'size')] = typography.fontSize;\n }\n\n if (typography.lineHeight) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'line-height')] = typography.lineHeight;\n }\n\n return vars;\n};\n\nconst normalizeCustomVarName = (name: string): string | null => {\n const trimmed = name.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed.startsWith('--') ? trimmed : `--${trimmed}`;\n};\n\nconst generateCustomVars = (vars: ThemeVars): Record<string, string> => {\n const out: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(vars)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n const name = normalizeCustomVarName(key);\n if (!name) {\n continue;\n }\n\n out[name] = String(value);\n }\n\n return out;\n};\n\n/**\n * Generate all CSS variables from a theme config\n */\nconst generateThemeVars = (config: ThemeConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (config.colors) {\n Object.assign(vars, generateColorVars(config.colors));\n }\n\n if (config.radii) {\n Object.assign(vars, generateRadiiVars(config.radii));\n }\n\n if (config.spacing) {\n Object.assign(vars, generateSpacingVars(config.spacing));\n }\n\n if (config.typography) {\n Object.assign(vars, generateTypographyVars(config.typography));\n }\n\n if (config.vars) {\n Object.assign(vars, generateCustomVars(config.vars));\n }\n\n return vars;\n};\n\n/**\n * Create a CSS string from theme configuration\n *\n * @param config - Theme configuration object\n * @param selector - CSS selector to apply variables to (default: ':root')\n * @returns CSS string with variables\n *\n * @example\n * ```typescript\n * const css = createTheme({\n * colors: {\n * blue: { 500: '#3b82f6' }\n * }\n * });\n * // Returns: ':root { --color-blue-500: #3b82f6; }'\n * ```\n */\nexport const createTheme = (config: ThemeConfig, selector = ':root'): string => {\n const vars = generateThemeVars(config);\n const declarations = Object.entries(vars)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${declarations}\\n}`;\n};\n\n/**\n * Apply theme configuration to an element (default: document root)\n *\n * @param config - Theme configuration object\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * // Apply to document root\n * defineTheme({\n * colors: {\n * blue: { 500: '#3b82f6' }\n * }\n * });\n *\n * // Apply to specific element\n * defineTheme({ colors: { gray: { 900: '#111' } } }, myElement);\n * ```\n */\nexport const defineTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const vars = generateThemeVars(config);\n\n for (const [name, value] of Object.entries(vars)) {\n target.style.setProperty(name, value);\n }\n};\n\n/**\n * Remove theme configuration from an element\n *\n * @param config - Theme configuration object (to know which variables to remove)\n * @param element - Target element (default: document.documentElement)\n */\nexport const removeTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const vars = generateThemeVars(config);\n\n for (const name of Object.keys(vars)) {\n target.style.removeProperty(name);\n }\n};\n\n/**\n * Get the current value of a CSS theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param element - Element to read from (default: document.documentElement)\n * @returns The computed value or empty string if not found\n *\n * @example\n * ```typescript\n * const blue500 = getThemeValue('color-blue-500');\n * const radius = getThemeValue('--radii-md');\n * ```\n */\nexport const getThemeValue = (token: string, element?: HTMLElement | null): string => {\n const target = resolveThemeTarget(element);\n if (!target || typeof getComputedStyle === 'undefined') {\n return '';\n }\n\n const varName = token.startsWith('--') ? token : `--${token}`;\n return getComputedStyle(target).getPropertyValue(varName).trim();\n};\n\n/**\n * Set a single theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param value - Value to set\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * setThemeValue('color-blue-500', '#3b82f6');\n * ```\n */\nexport const setThemeValue = (token: string, value: string, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const varName = token.startsWith('--') ? token : `--${token}`;\n target.style.setProperty(varName, value);\n};\n\nexport type SystemThemeMode = 'dark' | 'light';\n\n/** Attribute used for CSS-based theme switching */\nexport const EASE_THEME_ATTRIBUTE = 'data-ease-theme';\n\n/**\n * Merge a theme with the library defaults (dark baseline).\n * Use this when you want to start from the built-in design tokens and override a few values.\n */\nexport const mergeTheme = (overrides: ThemeConfig = {}): ThemeConfig => {\n return {\n colors: {\n ...defaultColors,\n ...overrides.colors,\n gray: { ...defaultColors.gray, ...overrides.colors?.gray },\n blue: { ...defaultColors.blue, ...overrides.colors?.blue },\n green: { ...defaultColors.green, ...overrides.colors?.green },\n red: { ...defaultColors.red, ...overrides.colors?.red },\n orange: { ...defaultColors.orange, ...overrides.colors?.orange },\n yellow: { ...defaultColors.yellow, ...overrides.colors?.yellow },\n whiteAlpha: { ...defaultColors.whiteAlpha, ...overrides.colors?.whiteAlpha },\n blackAlpha: { ...defaultColors.blackAlpha, ...overrides.colors?.blackAlpha }\n },\n radii: { ...defaultRadii, ...overrides.radii },\n spacing: { ...defaultSpacing, ...overrides.spacing },\n typography: { ...defaultTypography, ...overrides.typography },\n vars: overrides.vars ? { ...overrides.vars } : undefined\n };\n};\n\n/**\n * Alias for `mergeTheme()`.\n * This package ships a dark baseline theme; light/custom themes should be provided by the consumer.\n */\nexport const createDarkTheme = (overrides: ThemeConfig = {}): ThemeConfig => mergeTheme(overrides);\n\nexport interface SetThemeNameOptions {\n /** Target element (defaults to `document.documentElement` in the browser). */\n element?: HTMLElement | null;\n /** Attribute name to set (defaults to `data-ease-theme`). */\n attribute?: string;\n /** Optional `color-scheme` value to set on the target element. */\n colorScheme?: SystemThemeMode;\n /** Set `element.style.colorScheme` (default: true when `colorScheme` is provided). */\n setColorScheme?: boolean;\n}\n\n/**\n * Set the active theme name on an element via `[data-ease-theme=\"<name>\"]`.\n * Useful for CSS-scoped themes.\n */\nexport const setThemeName = (name: string, options: SetThemeNameOptions = {}): void => {\n const target = resolveThemeTarget(options.element);\n if (!target) {\n return;\n }\n\n const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n target.setAttribute(attribute, name);\n\n if (options.colorScheme && options.setColorScheme !== false) {\n target.style.colorScheme = options.colorScheme;\n }\n};\n\nexport const getThemeName = (element?: HTMLElement | null, attribute = EASE_THEME_ATTRIBUTE): string | null => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return null;\n }\n\n return target.getAttribute(attribute);\n};\n\nexport interface ApplyThemeOptions {\n /** Target element (defaults to `document.documentElement` in the browser). */\n element?: HTMLElement | null;\n /** Optional theme name to set as `[data-ease-theme=\"<name>\"]`. */\n name?: string;\n /** Attribute name to use when `name` is provided. Defaults to `data-ease-theme`. */\n attribute?: string;\n /** Optional `color-scheme` value to set on the target element. */\n colorScheme?: SystemThemeMode;\n /** Set `[data-ease-theme]` when `name` is provided (default: true). */\n setAttribute?: boolean;\n /** Set `element.style.colorScheme` when `colorScheme` is provided (default: true). */\n setColorScheme?: boolean;\n /**\n * If true, the provided theme is first merged with the library defaults via `mergeTheme()`.\n * Use this when you only pass partial overrides.\n */\n mergeWithDefaults?: boolean;\n}\n\n/**\n * Apply a theme config (and optional theme name + color-scheme) to an element.\n * This is SSR-safe: it becomes a no-op when `document` is not available.\n */\nexport const applyTheme = (theme: ThemeConfig, options: ApplyThemeOptions = {}): ThemeConfig => {\n const target = resolveThemeTarget(options.element);\n const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n\n const config = options.mergeWithDefaults ? mergeTheme(theme) : theme;\n\n defineTheme(config, target);\n\n if (!target) {\n return config;\n }\n\n if (options.name && options.setAttribute !== false) {\n target.setAttribute(attribute, options.name);\n }\n\n if (options.colorScheme && options.setColorScheme !== false) {\n target.style.colorScheme = options.colorScheme;\n }\n\n return config;\n};\n\nexport const getSystemThemeMode = (): SystemThemeMode => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return 'dark';\n }\n return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';\n};\n\nexport interface FollowSystemThemeOptions extends Omit<ApplyThemeOptions, 'name' | 'colorScheme'> {\n /** Theme name for dark mode (default: 'dark'). */\n darkName?: string;\n /** Theme name for light mode (default: 'light'). */\n lightName?: string;\n}\n\n/**\n * Follow `prefers-color-scheme` and apply the provided themes.\n *\n * This package does NOT ship a light theme preset; you supply both themes.\n * Returns a cleanup function to remove the media query listener.\n */\nexport const followSystemTheme = (\n themes: { dark: ThemeConfig; light: ThemeConfig },\n options: FollowSystemThemeOptions = {}\n): (() => void) => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return () => {};\n }\n\n const media = window.matchMedia('(prefers-color-scheme: light)');\n const apply = (): void => {\n const mode: SystemThemeMode = media.matches ? 'light' : 'dark';\n const theme = mode === 'light' ? themes.light : themes.dark;\n\n applyTheme(theme, {\n ...options,\n name: mode === 'light' ? (options.lightName ?? 'light') : (options.darkName ?? 'dark'),\n colorScheme: mode\n });\n };\n\n apply();\n\n media.addEventListener('change', apply);\n return () => media.removeEventListener('change', apply);\n};\n","/**\n * Style injection utilities for runtime CSS application.\n */\n\nconst STYLE_ID_PREFIX = 'ease-webkit-';\n\n/**\n * Check if we're in a browser environment.\n */\nexport const isBrowser = (): boolean => typeof document !== 'undefined' && typeof window !== 'undefined';\n\n/**\n * Inject a style tag with the given CSS content.\n */\nexport function injectStyle(id: string, css: string, nonce?: string): HTMLStyleElement | null {\n if (!isBrowser()) {\n return null;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n\n // Check if already injected\n let style = document.getElementById(fullId) as HTMLStyleElement | null;\n if (style) {\n // Update content if different\n if (style.textContent !== css) {\n style.textContent = css;\n }\n return style;\n }\n\n // Create new style element\n style = document.createElement('style');\n style.id = fullId;\n style.textContent = css;\n\n if (nonce) {\n style.nonce = nonce;\n }\n\n document.head.appendChild(style);\n return style;\n}\n\n/**\n * Remove an injected style tag.\n */\nexport function removeStyle(id: string): void {\n if (!isBrowser()) {\n return;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n const style = document.getElementById(fullId);\n if (style) {\n style.remove();\n }\n}\n\n/**\n * Check if a style is already injected.\n */\nexport function hasStyle(id: string): boolean {\n if (!isBrowser()) {\n return false;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n return document.getElementById(fullId) !== null;\n}\n\n// --------------------------\n// Preset styles\n// --------------------------\n\n/**\n * Minimal reset styles (box-sizing, etc.)\n */\nexport const RESET_CSS = `\n@layer ease-reset {\n *,\n *::after,\n *::before {\n box-sizing: border-box;\n transition-timing-function: cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n :where(html) {\n color-scheme: light dark;\n hanging-punctuation: first allow-end last;\n interpolate-size: allow-keywords;\n scroll-behavior: smooth;\n scrollbar-gutter: stable;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n }\n\n :where(html.translated-rtl) {\n direction: rtl;\n }\n\n @media (prefers-reduced-motion: reduce) {\n :where(html) {\n scroll-behavior: auto;\n }\n }\n\n :where(body) {\n min-block-size: 100svb;\n min-inline-size: 300px;\n }\n\n :where(canvas, img, picture, svg, video) {\n block-size: auto;\n border: none;\n display: block;\n max-inline-size: 100%;\n }\n\n :where(button) {\n cursor: pointer;\n user-select: none;\n }\n\n :where(textarea) {\n resize: vertical;\n }\n\n :where(textarea:not([rows])) {\n field-sizing: content;\n }\n\n :where(fieldset, iframe) {\n border: none;\n }\n\n :where(p, li, h1, h2, h3, h4, h5, h6) {\n overflow-wrap: break-word;\n text-wrap: pretty;\n margin: 0;\n }\n\n :where(abbr[title]) {\n border: none;\n text-decoration: none;\n }\n\n :where(cite) {\n font-style: inherit;\n }\n\n :where(small) {\n font-size: inherit;\n }\n\n :where(li, ol, ul) {\n list-style: none;\n }\n\n :where(nav:not([role='list'])):is(ul, li, ol, ul) {\n margin: 0;\n padding: 0;\n }\n\n :where(dialog, [popover]) {\n background: transparent;\n border: none;\n color: inherit;\n margin: auto;\n max-block-size: none;\n max-inline-size: none;\n position: fixed;\n }\n\n :where([popover]) {\n inset: auto;\n }\n\n :where(dialog:not([open], [popover]), [popover]:not(:popover-open)) {\n display: none;\n }\n\n :where([hidden]:not([hidden='until-found'])) {\n display: none;\n }\n}\n`.trim();\n\n/**\n * Base body/html styles for dark theme.\n */\nexport const BASE_CSS = `\nhtml,\nbody {\n background-color: var(--color-gray-900);\n}\n\nbody {\n font-family: var(--ease-font-family, 'Instrument Sans', sans-serif);\n font-optical-sizing: auto;\n font-weight: 400;\n font-style: normal;\n font-variation-settings: 'wdth' 100;\n min-height: 100dvh;\n color: var(--color-gray-600);\n}\n`.trim();\n\n/**\n * Combined main styles (reset + base).\n */\nexport const MAIN_CSS = `${RESET_CSS}\\n\\n${BASE_CSS}`;\n\nexport type StylePreset = 'reset' | 'base' | 'main';\n\n/**\n * Get CSS content for a preset.\n */\nexport function getPresetCSS(preset: StylePreset): string {\n switch (preset) {\n case 'reset':\n return RESET_CSS;\n case 'base':\n return BASE_CSS;\n case 'main':\n return MAIN_CSS;\n default:\n return '';\n }\n}\n\n/**\n * Inject preset styles.\n */\nexport function injectPreset(preset: StylePreset, nonce?: string): HTMLStyleElement | null {\n const css = getPresetCSS(preset);\n return injectStyle(preset, css, nonce);\n}\n\n/**\n * Remove preset styles.\n */\nexport function removePreset(preset: StylePreset): void {\n removeStyle(preset);\n}\n","/**\n * Font loading utilities.\n */\n\nimport { isBrowser } from './style-inject';\n\nconst FONT_LINK_ID_PREFIX = 'ease-webkit-font-';\nconst PRECONNECT_ID = 'ease-webkit-preconnect-google';\n\n/**\n * Font source configuration.\n */\nexport interface FontSource {\n /** Source type */\n source: 'google' | 'css';\n /** For Google fonts: the family name */\n family?: string;\n /** For Google fonts: the css2 query params (e.g., 'wght@400..700') */\n css2?: string;\n /** For CSS source: the URL to the CSS file */\n url?: string;\n}\n\n/**\n * Font configuration map.\n */\nexport type FontConfig = Record<string, FontSource>;\n\n/**\n * Default fonts used by the kit.\n */\nexport const DEFAULT_FONTS: FontConfig = {\n 'Instrument Sans': {\n source: 'google',\n family: 'Instrument Sans',\n css2: 'opsz,wght@14..32,400..700'\n },\n 'Geist Mono': {\n source: 'google',\n family: 'Geist Mono',\n css2: 'wght@100..900'\n }\n};\n\n/**\n * Generate a Google Fonts URL.\n */\nfunction buildGoogleFontUrl(family: string, css2?: string): string {\n const encodedFamily = encodeURIComponent(family).replace(/%20/g, '+');\n const params = css2 ? `:${css2}` : '';\n return `https://fonts.googleapis.com/css2?family=${encodedFamily}${params}&display=swap`;\n}\n\n/**\n * Inject preconnect links for Google Fonts.\n */\nfunction injectPreconnect(): void {\n if (!isBrowser()) {\n return;\n }\n\n // Check if already added\n if (document.getElementById(PRECONNECT_ID)) {\n return;\n }\n\n const head = document.head;\n\n // preconnect to fonts.googleapis.com\n const preconnect1 = document.createElement('link');\n preconnect1.id = PRECONNECT_ID;\n preconnect1.rel = 'preconnect';\n preconnect1.href = 'https://fonts.googleapis.com';\n head.appendChild(preconnect1);\n\n // preconnect to fonts.gstatic.com\n const preconnect2 = document.createElement('link');\n preconnect2.rel = 'preconnect';\n preconnect2.href = 'https://fonts.gstatic.com';\n preconnect2.crossOrigin = 'anonymous';\n head.appendChild(preconnect2);\n}\n\n/**\n * Inject a font link.\n */\nfunction injectFontLink(id: string, url: string): HTMLLinkElement | null {\n if (!isBrowser()) {\n return null;\n }\n\n const fullId = FONT_LINK_ID_PREFIX + id;\n\n // Check if already injected\n let link = document.getElementById(fullId) as HTMLLinkElement | null;\n if (link) {\n return link;\n }\n\n link = document.createElement('link');\n link.id = fullId;\n link.rel = 'stylesheet';\n link.href = url;\n\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Remove a font link.\n */\nfunction removeFontLink(id: string): void {\n if (!isBrowser()) {\n return;\n }\n\n const fullId = FONT_LINK_ID_PREFIX + id;\n const link = document.getElementById(fullId);\n if (link) {\n link.remove();\n }\n}\n\n/**\n * Inject fonts based on configuration.\n */\nexport function injectFonts(config: FontConfig | 'default' | false, preconnect = true): void {\n if (config === false) {\n return;\n }\n\n const fonts = config === 'default' ? DEFAULT_FONTS : config;\n\n if (preconnect) {\n // Check if any Google fonts are being loaded\n const hasGoogleFonts = Object.values(fonts).some((f) => f.source === 'google');\n if (hasGoogleFonts) {\n injectPreconnect();\n }\n }\n\n for (const [name, source] of Object.entries(fonts)) {\n const id = name.toLowerCase().replace(/\\s+/g, '-');\n\n if (source.source === 'google' && source.family) {\n const url = buildGoogleFontUrl(source.family, source.css2);\n injectFontLink(id, url);\n } else if (source.source === 'css' && source.url) {\n injectFontLink(id, source.url);\n }\n }\n}\n\n/**\n * Remove all injected fonts.\n */\nexport function removeFonts(config: FontConfig | 'default'): void {\n const fonts = config === 'default' ? DEFAULT_FONTS : config;\n\n for (const name of Object.keys(fonts)) {\n const id = name.toLowerCase().replace(/\\s+/g, '-');\n removeFontLink(id);\n }\n}\n","import { html, render, type TemplateResult } from 'lit-html';\n\ntype Constructor<T extends HTMLElement> = new (...args: unknown[]) => T;\n\ninterface LifecycleElement {\n connectedCallback?(): void;\n disconnectedCallback?(): void;\n attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void;\n}\n\ntype RenderableElement = HTMLElement & {\n render?(): TemplateResult | null | undefined;\n afterRender?(): void;\n wrapRender?(commit: () => void, context: RenderContext): void;\n onAttributeChange?(name: string, oldValue: string | null, newValue: string | null): void;\n requestRender?(): void;\n renderRoot?: ShadowRoot | HTMLElement;\n};\n\ntype TemplateValue<TElement extends RenderableElement> =\n | TemplateResult\n | null\n | undefined\n | ((this: TElement, host: TElement) => TemplateResult | null | undefined);\n\ninterface ComponentOptions<TElement extends RenderableElement = RenderableElement> {\n tag: string;\n template?: TemplateValue<TElement>;\n styles?: string;\n styleUrls?: string[];\n observedAttributes?: string[];\n shadowMode?: ShadowRootMode;\n autoSlot?: boolean;\n}\n\n// Exporting RenderContext\nexport interface RenderContext {\n fragment: DocumentFragment;\n root: ShadowRoot | HTMLElement;\n}\n\nconst styleCache = new Map<string, Promise<string>>();\n\nconst normalizeTemplate = <TElement extends RenderableElement>(\n template?: TemplateValue<TElement>\n): ((this: TElement, host: TElement) => TemplateResult | null | undefined) => {\n if (typeof template === 'function') {\n return template as (this: TElement, host: TElement) => TemplateResult | null | undefined;\n }\n\n if (template && typeof template === 'object' && '_$litTemplate$' in template) {\n return function (this: TElement): TemplateResult | null | undefined {\n return template as TemplateResult;\n };\n }\n\n return function (this: TElement): TemplateResult | null | undefined {\n return null;\n };\n};\n\nconst fetchStyles = async (urls: readonly string[]): Promise<string[]> =>\n Promise.all(\n urls.map((url) => {\n const cached = styleCache.get(url);\n if (cached) {\n return cached;\n }\n\n const request = fetch(url)\n .then((response) => (response.ok ? response.text() : ''))\n .catch(() => '');\n\n styleCache.set(url, request);\n return request;\n })\n );\n\nexport const Component =\n <TElement extends RenderableElement = RenderableElement>(options: ComponentOptions<TElement>) =>\n <TBase extends Constructor<TElement> & { observedAttributes?: string[] }>(\n Base: TBase,\n _context: ClassDecoratorContext\n ): TBase => {\n const {\n tag,\n template,\n styles = '',\n styleUrls = [],\n observedAttributes = [],\n shadowMode = 'open',\n autoSlot = true\n } = options;\n\n if (!tag) {\n throw new Error('@Component requires a \"tag\" option.');\n }\n\n const templateFn = normalizeTemplate<TElement>(template);\n\n class Decorated extends (Base as unknown as Constructor<RenderableElement>) {\n static get observedAttributes(): string[] {\n const parent =\n 'observedAttributes' in Base && Array.isArray(Base.observedAttributes)\n ? (Base.observedAttributes as string[])\n : [];\n const own = Array.isArray(observedAttributes) ? observedAttributes : [];\n return Array.from(new Set([...parent, ...own]));\n }\n\n #shadow: ShadowRoot;\n #styles = styles;\n #styleUrls = [...styleUrls];\n #renderScheduled = false;\n\n constructor(...args: unknown[]) {\n super(...args);\n this.#shadow = this.attachShadow({ mode: shadowMode });\n this.renderRoot = this.#shadow;\n }\n\n get shadow(): HTMLElement | ShadowRoot | undefined {\n return this.renderRoot;\n }\n\n connectedCallback(): void {\n (Base.prototype as LifecycleElement).connectedCallback?.call(this);\n\n void this.#loadStyles().finally(() => {\n this.requestRender();\n });\n }\n\n disconnectedCallback(): void {\n (Base.prototype as LifecycleElement).disconnectedCallback?.call(this);\n this.#renderScheduled = false;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n (Base.prototype as LifecycleElement).attributeChangedCallback?.call(this, name, oldValue, newValue);\n\n if (oldValue !== newValue) {\n this.onAttributeChange?.(name, oldValue, newValue);\n }\n }\n\n requestRender(): void {\n if (this.#renderScheduled) {\n return;\n }\n\n this.#renderScheduled = true;\n\n requestAnimationFrame(() => {\n this.#renderScheduled = false;\n this.#render();\n });\n }\n\n async #loadStyles(): Promise<void> {\n if (!this.#styleUrls.length) {\n return;\n }\n\n const fetched = await fetchStyles(this.#styleUrls);\n const inlineStyles = this.#styles ? [this.#styles] : [];\n this.#styles = [...inlineStyles, ...fetched.filter(Boolean)].join('\\n');\n }\n\n #render(): void {\n const root = this.#shadow;\n\n let templateResult: TemplateResult | null | undefined;\n\n if (typeof this.render === 'function') {\n templateResult = this.render();\n } else {\n templateResult = templateFn.call(this as unknown as TElement, this as unknown as TElement);\n }\n\n const styleTemplate = this.#styles ? html`<style>${this.#styles}</style>` : null;\n const slotTemplate = autoSlot ? html`<slot></slot>` : null;\n\n const completeTemplate = html`\n ${styleTemplate}\n ${templateResult ?? null}\n ${slotTemplate}\n `;\n\n const commit = (): void => {\n render(completeTemplate, root);\n this.afterRender?.();\n };\n\n if (typeof this.wrapRender === 'function') {\n const fragment = document.createDocumentFragment();\n const tempDiv = document.createElement('div');\n\n render(completeTemplate, tempDiv);\n\n fragment.append(...tempDiv.childNodes);\n\n this.wrapRender(commit, { fragment, root });\n return;\n }\n\n commit();\n }\n }\n\n // SSR safety: only register in browser environments\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, Decorated as unknown as CustomElementConstructor);\n }\n\n return Decorated as unknown as TBase;\n };\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n connectedCallback?(): void;\n disconnectedCallback?(...args: unknown[]): void;\n};\n\ntype PropTypeDescriptor =\n | BooleanConstructor\n | NumberConstructor\n | StringConstructor\n | ObjectConstructor\n | ArrayConstructor\n | 'boolean'\n | 'number'\n | 'string'\n | 'json';\n\ntype Formatter<TValue, THost extends RenderHost> = (this: THost, value: TValue) => string | null | undefined;\ntype Parser<TValue, THost extends RenderHost> = (this: THost, value: string | null) => TValue;\n\ninterface PropOptions<TValue, THost extends RenderHost> {\n attribute?: string;\n reflect?: boolean;\n type?: PropTypeDescriptor;\n parse?: Parser<TValue, THost>;\n format?: Formatter<TValue, THost>;\n defaultValue?: TValue | ((this: THost) => TValue);\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n onAttributeChange?: (this: THost, next: TValue, previous: TValue) => void;\n}\n\ninterface AttributeObserverEntry {\n observer: MutationObserver;\n callbacks: Map<string, Set<(value: string | null) => void>>;\n}\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\nconst cleanupRegistry = new WeakMap<RenderHost, Set<() => void>>();\nconst observerRegistry = new WeakMap<RenderHost, AttributeObserverEntry>();\nconst internalMutations = new WeakMap<RenderHost, Set<string>>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.delete(instance);\n instance.render?.();\n });\n};\n\nconst toKebabCase = (value: PropertyKey): string =>\n String(value)\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n\nconst registerCleanup = (instance: RenderHost, cleanup: () => void): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n const original = instance.disconnectedCallback;\n\n instance.disconnectedCallback = function (this: RenderHost, ...args: unknown[]) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error('[Prop] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n\n if (typeof original === 'function') {\n return original.apply(this, args as []);\n }\n\n return undefined;\n } as typeof instance.disconnectedCallback;\n }\n\n callbacks.add(cleanup);\n};\n\nconst markInternalMutation = (host: RenderHost, attribute: string): void => {\n let attributes = internalMutations.get(host);\n\n if (!attributes) {\n attributes = new Set();\n internalMutations.set(host, attributes);\n }\n\n attributes.add(attribute);\n};\n\nconst isInternalMutation = (host: RenderHost, attribute: string): boolean => {\n const attributes = internalMutations.get(host);\n\n if (!attributes) {\n return false;\n }\n\n const hasAttribute = attributes.has(attribute);\n\n if (hasAttribute) {\n attributes.delete(attribute);\n if (attributes.size === 0) {\n internalMutations.delete(host);\n }\n }\n\n return hasAttribute;\n};\n\nconst observeAttribute = (host: RenderHost, attribute: string, handler: (value: string | null) => void): void => {\n let entry = observerRegistry.get(host);\n\n if (!entry) {\n const callbacks = new Map<string, Set<(value: string | null) => void>>();\n const observer = new MutationObserver((records) => {\n records.forEach((record) => {\n const attributeName = record.attributeName;\n\n if (!attributeName) {\n return;\n }\n\n if (isInternalMutation(host, attributeName)) {\n return;\n }\n\n const listeners = callbacks.get(attributeName);\n if (!listeners) {\n return;\n }\n\n const currentValue = (record.target as Element).getAttribute(attributeName);\n\n for (const listener of listeners) {\n listener(currentValue);\n }\n });\n });\n\n observer.observe(host, { attributes: true });\n\n entry = { observer, callbacks };\n observerRegistry.set(host, entry);\n\n registerCleanup(host, () => {\n observer.disconnect();\n observerRegistry.delete(host);\n });\n }\n\n let listeners = entry.callbacks.get(attribute);\n\n if (!listeners) {\n listeners = new Set();\n entry.callbacks.set(attribute, listeners);\n }\n\n listeners.add(handler);\n};\n\nconst updateAttribute = (host: RenderHost, attribute: string, value: string | null | undefined | boolean): void => {\n markInternalMutation(host, attribute);\n\n if (value === undefined || value === null || value === false) {\n host.removeAttribute(attribute);\n return;\n }\n\n if (value === true) {\n host.setAttribute(attribute, '');\n return;\n }\n\n host.setAttribute(attribute, String(value));\n};\n\nconst resolveType = (type: PropTypeDescriptor | undefined): 'boolean' | 'number' | 'json' | 'string' | null => {\n if (!type) {\n return null;\n }\n\n if (type === Boolean || type === 'boolean') {\n return 'boolean';\n }\n\n if (type === Number || type === 'number') {\n return 'number';\n }\n\n if (type === Object || type === Array || type === 'json') {\n return 'json';\n }\n\n return 'string';\n};\n\nconst typeParsers: Record<'boolean' | 'number' | 'json' | 'string', Parser<unknown, RenderHost>> = {\n boolean(value: string | null): boolean {\n return value !== null;\n },\n number(value: string | null): number | null {\n if (value === null || value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n },\n json(value: string | null): unknown {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n console.warn('[Prop] failed to parse JSON attribute', error);\n return null;\n }\n },\n string(value: string | null): string | null {\n return value;\n }\n};\n\nconst typeFormatters: Record<'boolean' | 'number' | 'json' | 'string', Formatter<unknown, RenderHost>> = {\n boolean(value: unknown): string | null {\n return value ? '' : null;\n },\n number(value: unknown): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return String(value);\n },\n json(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n },\n string(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\nexport function Prop<TValue, THost extends RenderHost = RenderHost>(options: PropOptions<TValue, THost> = {}) {\n const {\n attribute,\n reflect = true,\n type,\n parse,\n format,\n defaultValue,\n compare = defaultCompare,\n onChange,\n onAttributeChange\n } = options;\n\n const resolvedType = resolveType(type);\n\n const parseValue: Parser<TValue, THost> = parse\n ? parse\n : function (this: THost, value) {\n if (!resolvedType) {\n return value as unknown as TValue;\n }\n return typeParsers[resolvedType].call(this, value) as TValue;\n };\n\n const formatValue: Formatter<TValue, THost> = format\n ? format\n : function (this: THost, value) {\n if (!resolvedType) {\n return (value as unknown as string | null | undefined) ?? null;\n }\n return typeFormatters[resolvedType].call(this, value as unknown) as string | null;\n };\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Prop requires the \"accessor\" keyword on the property.');\n }\n\n const attributeName = attribute ?? toKebabCase(context.name);\n\n context.addInitializer(function (this: THost) {\n if (!reflect) {\n return;\n }\n\n observeAttribute(this, attributeName, (rawValue) => {\n if (isInternalMutation(this, attributeName)) {\n return;\n }\n\n const parsed = parseValue.call(this, rawValue);\n const previous = accessor.get.call(this);\n\n if (compare(previous, parsed)) {\n return;\n }\n\n accessor.set.call(this, parsed);\n\n onAttributeChange?.call(this, parsed, previous);\n scheduleRender(this);\n });\n });\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n onChange?.call(this, value, previous);\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n let value = initialValue;\n\n if (this.hasAttribute(attributeName)) {\n value = parseValue.call(this, this.getAttribute(attributeName));\n } else if (value === undefined && defaultValue !== undefined) {\n value =\n typeof defaultValue === 'function' ? (defaultValue as (this: THost) => TValue).call(this) : defaultValue;\n }\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n return value;\n }\n };\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-button',\n autoSlot: true,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n :host([data-variant=\"headless\"]) {\n display: inline-flex;\n width: auto;\n }\n\n button {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-button-font-size, var(--ease-font-size-sm, 12px));\n font-weight: 550;\n color: var(--ease-button-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-button-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-button-radius, 5px);\n background-color: var(--ease-button-background, var(--color-gray-850));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-button-line-height, 14px);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n transition: color 0.2s, background-color 0.2s, scale 0.2s, box-shadow 0.2s;\n cursor: pointer;\n min-width: var(--ease-button-min-width, 88px);\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n text-align: center;\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-full-width=\"true\"] {\n width: 100%;\n }\n\n &[data-block=\"icon\"] {\n --ease-icon-size: 16px;\n width: 28px;\n height: 28px;\n min-width: 28px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-gray-700);\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"] {\n --ease-icon-size: 16px;\n width: auto;\n height: auto;\n padding: 0;\n min-width: 0;\n margin: -1px;\n }\n }\n \n &[data-block=\"small\"] {\n padding: 5px 8px;\n font-size: 12px;\n line-height: 14px;\n border-radius: 5px;\n }\n \n &[data-block=\"large\"] {\n padding: 9px 12px;\n font-size: 13px;\n line-height: 14px;\n border-radius: 8px;\n }\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-825));\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"],\n &[data-variant=\"headless-muted\"] {\n background-color: transparent;\n box-shadow: none;\n min-width: 0;\n width: auto;\n padding: 0;\n transition: scale 0.2s, color 0.2s;\n\n &:hover,\n &:focus-visible {\n scale: 1.05;\n }\n\n &:active {\n scale: 0.95;\n }\n }\n\n &[data-variant=\"headless-muted\"] {\n color: var(--ease-button-color, var(--color-gray-600));\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n }\n\n &[data-variant=\"link\"] {\n background-color: transparent;\n box-shadow: none;\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-875));\n }\n }\n\n &[data-variant=\"primary\"] {\n color: var(--color-blue-100);\n font-weight: 450;\n border-radius: 36px;\n \n background: radial-gradient(217.29% 45.98% at 99.13% 4.17%, rgba(21, 24, 220, 0.40) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(104.75% 41.7% at 3.06% 100%, rgba(233, 208, 254, 0.30) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(30.53% 47.92% at 46.51% -14.58%, rgba(233, 208, 254, 0.60) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(22.57% 35.42% at 46.29% 112.5%, rgba(233, 208, 254, 0.20) 0%, rgba(21, 24, 220, 0.00) 100%), rgba(255, 255, 255, 0.12);\n background-repeat: no-repeat;\n\n box-shadow: \n 0px 1px 0px 0px rgba(255, 255, 255, 0.2), \n inset 0px 0px 50px 0px rgba(255, 255, 255, 0.02), \n inset 0px 0px 0px 1px rgba(255, 255, 255, 0.02), \n inset 0px 0px 4px 0px rgba(69, 40, 255, 0.4);\n\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--color-white-2);\n box-shadow: inset 0px 0.5px 0.75px 0px var(--color-white-30);\n mix-blend-mode: overlay;\n pointer-events: none;\n z-index: 1;\n border-radius: inherit;\n }\n\n &:hover,\n &:focus-visible {\n filter: brightness(1.1);\n }\n }\n }\n `\n})\nexport class Button extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth: boolean = false;\n\n @Prop<'submit' | 'reset' | 'button'>({ type: String, reflect: true, defaultValue: 'button' })\n accessor type!: 'submit' | 'reset' | 'button';\n\n @Prop<'icon' | 'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'icon' | 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<'default' | 'primary' | 'headless' | 'headless-muted' | 'link'>({\n type: String,\n reflect: true,\n defaultValue: 'default'\n })\n accessor variant!: 'default' | 'primary' | 'headless' | 'headless-muted' | 'link';\n\n render(): TemplateResult {\n return html`\n <button\n type=${this.type}\n ?disabled=${this.disabled}\n data-variant=${this.variant}\n data-full-width=${this.fullWidth}\n data-pill=${this.pill}\n data-block=\"${this.block}\"\n >\n <slot></slot>\n </button>\n `;\n }\n}\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","type ListenHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype LifecycleHookName = 'connectedCallback' | 'disconnectedCallback';\n\ntype LifecycleCallback<THost extends ListenHost> = (this: THost) => void;\n\ntype ListenTargetResolver<THost extends ListenHost> =\n | 'document'\n | 'window'\n | 'shadow'\n | 'root'\n | 'light'\n | EventTarget\n | ((host: THost) => EventTarget | null | undefined);\n\ntype Predicate<TEvent extends Event, TElement extends Element> = (event: TEvent, matched: TElement | null) => boolean;\n\ninterface ListenOptions<THost extends ListenHost, TElement extends Element, TEvent extends Event> {\n selector?: string;\n target?: ListenTargetResolver<THost>;\n prevent?: boolean;\n stop?: boolean;\n stopImmediate?: boolean;\n once?: boolean;\n passive?: boolean;\n capture?: boolean;\n when?: Predicate<TEvent, TElement>;\n}\n\ntype Cleanup = () => void;\n\nconst lifecycleHooks: Record<LifecycleHookName, WeakMap<ListenHost, Set<LifecycleCallback<ListenHost>>>> = {\n connectedCallback: new WeakMap(),\n disconnectedCallback: new WeakMap()\n};\n\nconst cleanupRegistry = new WeakMap<ListenHost, Set<Cleanup>>();\n\nconst addLifecycleHook = <THost extends ListenHost>(\n instance: THost,\n hookName: LifecycleHookName,\n handler: LifecycleCallback<THost>\n): void => {\n const store = lifecycleHooks[hookName] as WeakMap<THost, Set<LifecycleCallback<THost>>>;\n let callbacks = store.get(instance);\n\n if (!callbacks) {\n callbacks = new Set<LifecycleCallback<THost>>();\n store.set(instance, callbacks);\n\n const original = (instance as unknown as Record<LifecycleHookName, unknown>)[hookName];\n\n (instance as unknown as Record<LifecycleHookName, unknown>)[hookName] = function (...args: unknown[]) {\n callbacks?.forEach((callback) => {\n callback.apply(this as THost);\n });\n\n if (typeof original === 'function') {\n return (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n return undefined;\n };\n }\n\n callbacks.add(handler);\n};\n\nconst registerCleanup = <THost extends ListenHost>(instance: THost, cleanup: Cleanup): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n addLifecycleHook(instance, 'disconnectedCallback', function (this: THost) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((fn) => {\n try {\n fn();\n } catch (error) {\n console.error('[Listen] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n });\n }\n\n callbacks.add(cleanup);\n};\n\nconst resolveTarget = <THost extends ListenHost>(\n host: THost,\n target: ListenTargetResolver<THost> | undefined\n): EventTarget | null => {\n if (typeof target === 'function') {\n return target(host) ?? null;\n }\n\n if (target instanceof EventTarget) {\n return target;\n }\n\n switch (target) {\n case 'document':\n return document;\n case 'window':\n return window;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst normalizeOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n selectorOrOptions: string | ListenOptions<THost, TElement, TEvent> | undefined\n): ListenOptions<THost, TElement, TEvent> => {\n if (typeof selectorOrOptions === 'string') {\n return { selector: selectorOrOptions };\n }\n\n return selectorOrOptions ?? {};\n};\n\nconst buildOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n options: ListenOptions<THost, TElement, TEvent>\n) => {\n return {\n selector: options.selector ?? null,\n target: options.target ?? 'shadow',\n prevent: options.prevent ?? false,\n stop: options.stop ?? false,\n stopImmediate: options.stopImmediate ?? false,\n once: options.once ?? false,\n passive: options.passive,\n capture: options.capture ?? false,\n when: options.when ?? null\n };\n};\n\nexport function Listen<THost extends ListenHost, TEvent extends Event = Event, TElement extends Element = Element>(\n eventName: keyof HTMLElementEventMap | string,\n selectorOrOptions?: string | ListenOptions<THost, TElement, TEvent>\n) {\n if (!eventName) {\n throw new Error('@Listen requires an event name.');\n }\n\n const listenConfig = buildOptions(normalizeOptions(selectorOrOptions));\n\n return (\n originalMethod: (this: THost, event: TEvent, matched?: TElement | null) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n let attached = false;\n\n const attach = () => {\n if (attached) {\n return;\n }\n\n const target = resolveTarget(this, listenConfig.target);\n\n if (!target || typeof (target as EventTarget).addEventListener !== 'function') {\n console.warn(`@Listen unable to resolve target for ${String(eventName)}`);\n return;\n }\n\n const eventOptions: AddEventListenerOptions = {\n capture: listenConfig.capture,\n once: listenConfig.once,\n passive: listenConfig.passive !== undefined ? listenConfig.passive : !listenConfig.prevent\n };\n\n const handler = (event: Event): void => {\n const typedEvent = event as TEvent;\n\n if (listenConfig.prevent) {\n typedEvent.preventDefault();\n }\n\n if (listenConfig.stopImmediate) {\n typedEvent.stopImmediatePropagation();\n } else if (listenConfig.stop) {\n typedEvent.stopPropagation();\n }\n\n let matched: TElement | null = null;\n\n if (listenConfig.selector) {\n const path = typedEvent.composedPath();\n matched =\n path.find(\n (node): node is TElement => node instanceof Element && node.matches(listenConfig.selector as string)\n ) ?? null;\n\n if (!matched) {\n return;\n }\n }\n\n if (listenConfig.when && !listenConfig.when(typedEvent, matched)) {\n return;\n }\n\n if (listenConfig.selector) {\n void originalMethod.call(this, typedEvent, matched);\n } else {\n const targetNode = (\n typedEvent.target instanceof Element ? (typedEvent.target as TElement) : null\n ) as TElement | null;\n void originalMethod.call(this, typedEvent, targetNode);\n }\n };\n\n target.addEventListener(eventName as string, handler, eventOptions);\n attached = true;\n\n registerCleanup(this, () => {\n target.removeEventListener(eventName as string, handler, eventOptions);\n attached = false;\n });\n };\n\n // IMPORTANT:\n // Many components are created inside templates/shadow DOM. At construction time they are often not connected yet,\n // and patching instance lifecycle callbacks is not reliably invoked by the platform.\n // Attach the listener ASAP (microtask) so it works for nested components as well.\n queueMicrotask(attach);\n\n // Best-effort attach on connect too (idempotent).\n addLifecycleHook(this, 'connectedCallback', attach);\n });\n };\n}\n","type QueryRoot = 'shadow' | 'light' | 'document';\n\ntype QueryHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype QueryFallback<TResult, THost extends QueryHost> = TResult | ((host: THost) => TResult);\n\ninterface BaseQueryOptions<TResult, THost extends QueryHost> {\n from?: QueryRoot;\n fallback?: QueryFallback<TResult, THost>;\n}\n\ninterface QueryAllOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement[], THost> {\n all: true;\n closest?: false;\n}\n\ninterface QueryClosestOptions<THost extends QueryHost> extends BaseQueryOptions<Element | null, THost> {\n closest: true;\n all?: false;\n}\n\ninterface QuerySingleOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement | null, THost> {\n all?: false;\n closest?: false;\n}\n\ntype QueryOptions<TElement extends Element, THost extends QueryHost> =\n | QueryAllOptions<TElement, THost>\n | QueryClosestOptions<THost>\n | QuerySingleOptions<TElement, THost>;\n\ntype QueryReturnType<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = TOptions extends QueryAllOptions<TElement, THost>\n ? TElement[]\n : TOptions extends QueryClosestOptions<THost>\n ? Element | null\n : TElement | null;\n\ntype QueryDecorator<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = (\n target: ClassAccessorDecoratorTarget<THost, QueryReturnType<TElement, THost, TOptions>> | undefined,\n context:\n | ClassFieldDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n | ClassAccessorDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n) => ClassAccessorDecoratorResult<THost, QueryReturnType<TElement, THost, TOptions>> | undefined;\n\nconst defaultOptions = {\n all: false,\n closest: false,\n from: 'shadow' as QueryRoot | undefined,\n fallback: null\n} as const satisfies QuerySingleOptions<Element, QueryHost>;\n\nconst resolveFallback = <TResult, THost extends QueryHost>(\n fallback: QueryFallback<TResult, THost> | undefined,\n host: THost\n): TResult | undefined => {\n if (typeof fallback === 'function') {\n return (fallback as (instance: THost) => TResult)(host);\n }\n\n return fallback;\n};\n\nconst resolveRoot = (host: QueryHost, option: QueryRoot | undefined): ParentNode | null => {\n switch (option) {\n case 'document':\n return document;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst resolveQuery = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n host: THost,\n selector: string,\n options: TOptions\n) => {\n if (options.closest) {\n const result = host.closest(selector);\n return result ?? resolveFallback(options.fallback as QueryFallback<Element | null, THost>, host) ?? null;\n }\n\n const root = resolveRoot(host, options.from);\n\n if (!root) {\n return options.all\n ? (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? [])\n : (resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null);\n }\n\n if (options.all) {\n const elements = Array.from(root.querySelectorAll<TElement>(selector));\n return elements.length > 0\n ? elements\n : (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? []);\n }\n\n const match = root.querySelector<TElement>(selector);\n return match ?? resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null;\n};\n\nconst createQueryDecorator = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n selector: string,\n options: TOptions\n): QueryDecorator<TElement, THost, TOptions> => {\n type Result = QueryReturnType<TElement, THost, TOptions>;\n\n return (\n _target: ClassAccessorDecoratorTarget<THost, Result> | undefined,\n context: ClassFieldDecoratorContext<THost, Result> | ClassAccessorDecoratorContext<THost, Result>\n ): ClassAccessorDecoratorResult<THost, Result> | undefined => {\n if (context.kind === 'accessor') {\n const descriptor: ClassAccessorDecoratorResult<THost, Result> = {\n get(this: THost) {\n return resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result;\n },\n set(_value: Result) {\n // Readonly accessor\n }\n };\n return descriptor;\n }\n\n context.addInitializer(function (this: THost) {\n Object.defineProperty(this, context.name, {\n configurable: true,\n enumerable: true,\n get: () => resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result\n });\n });\n\n return;\n };\n};\n\nexport function Query<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(selector: string, userOptions: TOptions): QueryDecorator<TElement, THost, TOptions>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string\n): QueryDecorator<TElement, THost, QuerySingleOptions<TElement, THost>>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string,\n userOptions?: QueryOptions<TElement, THost>\n) {\n if (!selector) {\n throw new Error('@Query requires a selector.');\n }\n\n if (userOptions) {\n const merged = { ...defaultOptions, ...userOptions } as QueryOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n }\n\n const merged = defaultOptions as QuerySingleOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-checkbox',\n styles: `\n .checkbox {\n display: table;\n border-radius: var(--ease-checkbox-radius, 5px);\n position: relative;\n\n svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n\n .tick {\n fill: none;\n stroke-width: 3px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform-origin: 10.5px 16px;\n transform: scale(1) translateZ(0);\n }\n\n .dot {\n transform-origin: 10.5px 15.5px;\n transform: scale(1) translateZ(0);\n transform-box: fill-box;\n }\n\n .drop {\n transform-origin: 25px -1px;\n transform: scale(1) translateZ(0);\n opacity: 0;\n }\n }\n }\n\n [part=\"checkbox\"] {\n display: table;\n margin: 0;\n padding: 0;\n appearance: none;\n cursor: pointer;\n background: none;\n border: none;\n outline: none;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-checkbox-size, 24px);\n height: var(--ease-checkbox-size, 24px);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n\n .tick {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n\n .dot {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .tick {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked {\n animation: checkbox-border-fill 0.2s ease-out forwards, checkbox-morph 0.5s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked + svg {\n .tick {\n animation: checkbox-tick 0.65s ease-out forwards;\n }\n\n .dot {\n animation: checkbox-dot-move 0.6s ease-out forwards;\n }\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked {\n animation: checkbox-border-default 0.4s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked + svg {\n .tick {\n animation: checkbox-tick-default 0.2s ease-out forwards;\n }\n .dot {\n animation: checkbox-dot-hide 0.2s ease-out forwards;\n }\n }\n \n @keyframes checkbox-border-fill {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes checkbox-morph {\n 0%, 40% {\n border-radius: 5px 14px 5px 5px;\n }\n 100% {\n border-radius: 5px;\n }\n }\n\n @keyframes checkbox-tick {\n 0% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n 47% {\n stroke-dasharray: 14px 33px;\n stroke-dashoffset: 48px;\n }\n 100% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n }\n\n @keyframes checkbox-dot-move {\n 0%, 40% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n 100% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes checkbox-dot-hide {\n 0% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes checkbox-border-default {\n 0%,\n 40% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes checkbox-tick-default {\n 0% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n 100% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n }\n `,\n template(this: Checkbox) {\n return html`\n <button\n part=\"checkbox\"\n type=\"button\"\n role=\"checkbox\"\n aria-checked=${this.checked}\n ?disabled=${this.disabled}\n >\n <div class=\"checkbox\">\n <input\n part=\"control\"\n name=${this.name}\n value=${this.value}\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n type=\"checkbox\"\n />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <path class=\"tick\" d=\"M4.5 10L10.5 16L24.5 1\" />\n <circle class=\"dot\" cx=\"10.5\" cy=\"15.5\" r=\"1.5\" />\n <circle class=\"drop\" cx=\"25\" cy=\"-1\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation=\"1.25\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\"\n result=\"gooey\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Checkbox extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const control = this.shadowRoot?.querySelector('[part=\"control\"]');\n const svg = this.shadowRoot?.querySelector('svg');\n if (!control || !svg) {\n return;\n }\n\n control.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n const duration = checked ? 650 : 400;\n\n control.classList.add(animClass);\n svg.classList.add(animClass);\n\n setTimeout(() => {\n control.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<Checkbox, MouseEvent, HTMLButtonElement>('click', {\n selector: 'button'\n })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'checkbox', { value: this.checked, event });\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\nexport type Placement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end'\n | 'left-start'\n | 'left-center'\n | 'left-end'\n | 'right-start'\n | 'right-center'\n | 'right-end';\n\nconst nextAnchorName = (): string => `--ease-popover-anchor-${crypto.randomUUID()}`;\n\n@Component({\n tag: 'ease-popover',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n --ease-popover-offset: 8px;\n --ease-popover-anchor-name: --ease-popover-anchor;\n --ease-popover-transform-origin: center center;\n --ease-popover-duration: 200ms;\n --ease-popover-content-min-width: auto;\n --ease-popover-content-max-width: none;\n --ease-popover-content-width: max-content;\n }\n\n ::slotted([slot=\"trigger\"]) {\n anchor-name: var(--ease-popover-anchor-name);\n }\n\n [part=\"content\"] {\n position-anchor: var(--ease-popover-anchor-name);\n position: fixed;\n margin: 0;\n transform-origin: var(--ease-popover-transform-origin);\n width: var(--ease-popover-content-width);\n min-width: var(--ease-popover-content-min-width);\n max-width: var(--ease-popover-content-max-width);\n box-sizing: border-box;\n overscroll-behavior: contain;\n z-index: 100;\n display: none;\n }\n\n :host([open]) [part=\"content\"] {\n display: block;\n }\n\n :host([placement=\"top-start\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-center\"]) [part=\"content\"] {\n position-area: top center;\n top: anchor(top);\n left: anchor(center);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-end\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"bottom-start\"]) [part=\"content\"] {\n position-area: bottom right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-center\"]) [part=\"content\"] {\n position-area: bottom center;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-end\"]) [part=\"content\"] {\n position-area: bottom left;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"left-start\"]) [part=\"content\"] {\n position-area: left bottom;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-center\"]) [part=\"content\"] {\n position-area: left center;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-end\"]) [part=\"content\"] {\n position-area: left top;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"right-start\"]) [part=\"content\"] {\n position-area: right end;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-center\"]) [part=\"content\"] {\n position-area: right center;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-end\"]) [part=\"content\"] {\n position-area: right start;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n `\n})\nexport class Popover extends HTMLElement {\n #anchorName = nextAnchorName();\n #contentElement: HTMLElement | null = null;\n #initialized = false;\n\n declare requestRender: () => void;\n\n public get contentElement(): HTMLElement | null {\n return this.#contentElement;\n }\n\n @Prop<Placement>({\n reflect: true,\n defaultValue: 'bottom-start',\n onChange() {\n (this as Popover).handlePlacementChange();\n }\n })\n accessor placement!: Placement;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n defaultValue: 8,\n onChange() {\n (this as Popover).handleOffsetChange();\n }\n })\n accessor offset = 8;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor open = false;\n\n connectedCallback(): void {\n this.#syncAnchorName();\n this.#syncOffset();\n }\n\n disconnectedCallback(): void {\n this.#contentElement = null;\n this.#initialized = false;\n }\n\n render(): TemplateResult {\n return html`\n <slot slot=\"trigger\" name=\"trigger\"></slot>\n <div\n part=\"content\"\n data-popover-content\n role=\"region\"\n data-placement=${this.placement}\n >\n <slot></slot>\n </div>\n `;\n }\n\n handlePlacementChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncPlacement();\n }\n\n handleOffsetChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncOffset();\n }\n\n #syncPlacement(): void {\n this.dataset.placement = this.placement;\n\n if (this.#contentElement) {\n this.#contentElement.dataset.placement = this.placement;\n }\n }\n\n #syncOffset(): void {\n const offset = Number.isFinite(this.offset) ? this.offset : 0;\n this.style.setProperty('--ease-popover-offset', `${offset}px`);\n }\n\n #syncAnchorName(): void {\n this.style.setProperty('--ease-popover-anchor-name', this.#anchorName);\n }\n}\n\nexport default {\n Popover\n};\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype ChevronState = 'down' | 'up';\ntype ChevronPath = Record<ChevronState, string>;\n\n@Component({\n tag: 'ease-icon-chevron',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"chevron\"] {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconChevron extends HTMLElement {\n declare requestRender: () => void;\n\n accessor paths: ChevronPath = {\n down: 'M5 7L8 10L11 7',\n up: 'M5 9L8 6L11 9'\n };\n\n @Prop<ChevronState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'down',\n onAttributeChange(next: ChevronState, previous: ChevronState) {\n this.shadowRoot\n ?.querySelector<SVGPathElement>('path')\n ?.animate(\n [\n { d: `path('${(this as IconChevron).paths[previous]}')` },\n { d: `path('${(this as IconChevron).paths[next]}')` }\n ],\n {\n duration: 200,\n easing: 'cubic-bezier(0.25, 0, 0.5, 1)'\n }\n );\n }\n })\n accessor state!: ChevronState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"chevron\" viewBox=\"0 0 16 16\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg \">\n <path d=${this.paths[this.state]} />\n </svg>\n `;\n }\n}\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { OutsideClickResolution } from '~/utils/outside-click';\n\nimport {\n createOutsideClickHandle,\n disconnectOutsideClickHandles,\n registerOutsideClickHandle,\n updateOutsideClickHandles\n} from '~/utils/outside-click';\n\ntype OutsideClickHost = HTMLElement & {\n connectedCallback?: (...args: unknown[]) => unknown;\n disconnectedCallback?: (...args: unknown[]) => unknown;\n afterRender?: (...args: unknown[]) => unknown;\n};\n\ntype HookName = 'connectedCallback' | 'disconnectedCallback' | 'afterRender';\n\ninterface OutsideClickOptions<THost extends OutsideClickHost> {\n resolve?: (host: THost) => OutsideClickResolution | null | undefined;\n owner?: (host: THost) => HTMLElement | null | undefined;\n content?: (host: THost) => HTMLElement | null | undefined;\n triggers?: (host: THost) => Array<HTMLElement | null | undefined>;\n disabled?: (host: THost) => boolean;\n}\n\nconst lifecycleApplied = new WeakSet<OutsideClickHost>();\n\nconst wrapMethod = (\n host: OutsideClickHost,\n name: HookName,\n hook: (this: OutsideClickHost) => void,\n callHookFirst = false\n): void => {\n const original = host[name];\n\n (host as Required<OutsideClickHost>)[name] = function (...args: unknown[]) {\n if (callHookFirst) {\n hook.call(this);\n }\n\n let result: unknown;\n\n if (typeof original === 'function') {\n result = (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n if (!callHookFirst) {\n hook.call(this);\n }\n\n return result;\n };\n};\n\nconst ensureLifecycle = (host: OutsideClickHost): void => {\n if (lifecycleApplied.has(host)) {\n return;\n }\n\n lifecycleApplied.add(host);\n\n wrapMethod(host, 'connectedCallback', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(host, 'afterRender', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(\n host,\n 'disconnectedCallback',\n function (this: OutsideClickHost) {\n disconnectOutsideClickHandles(this);\n },\n true\n );\n};\n\nexport function OutsideClick<THost extends OutsideClickHost, TEvent extends Event = Event>(\n options: OutsideClickOptions<THost> = {}\n) {\n return (\n originalMethod: (this: THost, event: TEvent) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n ensureLifecycle(this);\n\n const resolve =\n options.resolve ??\n ((host: THost): OutsideClickResolution => {\n return {\n owner: options.owner?.(host),\n content: options.content?.(host),\n triggers: options.triggers?.(host)\n };\n });\n\n const handle = createOutsideClickHandle(\n this,\n (event) => {\n originalMethod.call(this, event as TEvent);\n },\n {\n resolve,\n disabled: options.disabled\n }\n );\n\n registerOutsideClickHandle(this, handle);\n\n if (this.isConnected) {\n updateOutsideClickHandles(this);\n }\n });\n };\n}\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\nexport type { OutsideClickOptions };\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\nimport '../icons/animation/chevron';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ninterface OptionRecord {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\n\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-dropdown',\n styles: `\n :host {\n display: grid;\n width: 100%;\n }\n\n ease-popover {\n --ease-popover-content-min-width: var(--ease-dropdown-panel-min-width, anchor-size(width));\n --ease-popover-content-width: var(--ease-dropdown-panel-width, max-content);\n --ease-popover-content-max-width: var(--ease-dropdown-panel-max-width, none);\n }\n\n [part=\"trigger\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n padding: var(--ease-dropdown-trigger-padding, 8px 8px 8px 12px);\n border-radius: var(--ease-dropdown-radius, var(--radii-md));\n background-color: var(--ease-dropdown-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-dropdown-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n box-sizing: border-box;\n font-size: var(--ease-dropdown-font-size, var(--ease-font-size, 13px));\n font-weight: var(--ease-dropdown-font-weight, 500);\n color: var(--ease-dropdown-color, var(--color-foreground));\n min-width: 0;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n text-align: left;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-dropdown-background-hover, var(--color-gray-825));\n }\n\n [part=\"trigger-icon\"] {\n display: block;\n margin: -1px 0 -1px -2px;\n }\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-block=\"small\"] {\n padding: 4px 8px 4px 4px;\n }\n\n &[data-headless=\"true\"] {\n background: transparent;\n box-shadow: none;\n padding: 0;\n border-radius: 0;\n gap: 4px;\n\n &:hover,\n &:focus-within {\n background: transparent;\n }\n }\n }\n\n input[part=\"trigger-input\"] {\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n width: fit-content;\n min-width: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n field-sizing: var(--ease-dropdown-field-sizing, fixed);\n }\n \n :host([open]) input[part=\"trigger-input\"] {\n cursor: text;\n }\n\n [part=\"trigger\"][data-placeholder=\"true\"],\n [part=\"trigger\"] [part=\"trigger-label\"][data-placeholder=\"true\"],\n input[part=\"trigger-input\"]::placeholder {\n color: var(--ease-dropdown-placeholder-color, var(--color-gray-600));\n }\n\n [part=\"trigger\"] [part=\"trigger-label\"] {\n flex-grow: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"content\"] {\n border-radius: var(--ease-dropdown-panel-radius, var(--ease-dropdown-radius, var(--radii-md)));\n background: var(--ease-dropdown-panel-background, var(--color-gray-875));\n border: none;\n outline: none;\n box-shadow: var(\n --ease-dropdown-panel-shadow,\n 0 5px 20px 0 var(--color-black-15),\n 0 1px 4px 0 var(--color-black-15),\n 0 0 0 1px var(--color-white-4) inset,\n 0 1px 0 0 var(--color-white-4) inset\n );\n background-clip: padding-box;\n border: 1px solid var(--ease-dropdown-panel-border-color, var(--color-gray-825));\n box-sizing: border-box;\n padding: var(--ease-dropdown-panel-padding, 4px);\n }\n \n [part=\"content\"] ::slotted(hr) {\n margin: 4px 0;\n height: 1px;\n background-color: var(--color-white-4);\n border: none;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"content\"] ::slotted(h4) {\n margin: 4px 0 8px 0 !important;\n font-size: var(--ease-dropdown-group-label-font-size, 11px);\n line-height: 1;\n padding: var(--ease-dropdown-group-label-padding, 0 8px);\n font-family: var(--ease-font-family, inherit);\n font-weight: 450;\n color: var(--ease-dropdown-group-label-color, var(--color-gray-700));\n display: block;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"section\"] {\n flex-grow: 1;\n min-width: max(100%, var(--ease-dropdown-min-width, 140px));\n display: grid;\n grid-gap: 3px;\n max-height: var(--ease-dropdown-max-height, auto);\n overflow-y: auto;\n overscroll-behavior: contain;\n container-type: inline-size;\n container-name: scroll-area;\n mask: linear-gradient(to bottom,\n #0000,\n #ffff var(--top-fade) calc(100% - var(--bottom-fade)),\n #0000\n );\n animation: scroll;\n animation-timeline: --scroll;\n scroll-timeline: --scroll y;\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n -ms-overflow-style: none;\n box-sizing: border-box;\n }\n\n [part=\"section\"]::-webkit-scrollbar {\n width: 0;\n height: 0;\n display: none;\n }\n\n @property --top-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @property --bottom-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @keyframes scroll {\n 0% {\n --bottom-fade: 16px;\n --top-fade: 0;\n }\n 10%,\n 100% {\n --top-fade: 16px;\n }\n 90% {\n --bottom-fade: 16px;\n }\n 100% {\n --bottom-fade: 0;\n }\n }\n\n ::slotted(button[slot=\"content\"]) {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-dropdown-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-dropdown-option-font-weight, 400);\n color: var(--ease-dropdown-option-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-dropdown-option-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-dropdown-option-radius, 5px);\n background-color: var(--ease-dropdown-option-background, var(--color-gray-875));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-option-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n cursor: pointer;\n width: 100%;\n text-align: left;\n }\n\n ::slotted(button[slot=\"content\"]:hover),\n ::slotted(button[slot=\"content\"]:focus-visible),\n ::slotted(button[slot=\"content\"][data-active=\"true\"]),\n ::slotted(button[slot=\"content\"][aria-selected=\"true\"]) {\n background-color: var(--ease-dropdown-option-background-active, var(--color-gray-825));\n color: var(--ease-dropdown-option-color-active, var(--color-white));\n }\n `\n})\nexport class Dropdown extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Dropdown).handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor headless = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor searchable = false;\n\n @Prop<'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<string>({\n reflect: true,\n defaultValue: 'auto',\n onChange(next) {\n (this as Dropdown).style.setProperty('--ease-dropdown-max-height', next ?? 'auto');\n }\n })\n accessor maxHeight: string = 'auto';\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor name: string | null = null;\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor value: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'placeholder',\n defaultValue: 'Select an option'\n })\n accessor placeholder: string | null = 'Select an option';\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n @Query<HTMLElement>('[part=\"trigger\"]')\n accessor trigger!: HTMLElement | null;\n\n @Query<HTMLInputElement>('input[part=\"trigger-input\"]')\n accessor searchInput!: HTMLInputElement | null;\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor panelContent!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: OptionRecord[] = [];\n #selectedLabel: string | null = null;\n #currentSlot: HTMLSlotElement | null = null;\n #pendingFocus: 'first' | 'last' | null = null;\n #optionsInitialized = false;\n #lastToggleOrigin: Event | null = null;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n this.#lastToggleOrigin = null;\n }\n\n afterRender(): void {\n const trigger = this.trigger;\n const ariaLabel = this.getAttribute('aria-label');\n\n if (trigger) {\n if (trigger instanceof HTMLButtonElement) {\n trigger.disabled = Boolean(this.disabled);\n }\n trigger.setAttribute('aria-expanded', this.open && !this.disabled ? 'true' : 'false');\n trigger.setAttribute('aria-haspopup', 'listbox');\n\n if (trigger instanceof HTMLButtonElement) {\n if (ariaLabel && ariaLabel.trim().length > 0) {\n trigger.setAttribute('aria-label', ariaLabel.trim());\n } else {\n trigger.removeAttribute('aria-label');\n }\n }\n }\n\n if (this.searchInput) {\n this.searchInput.disabled = Boolean(this.disabled);\n\n if (ariaLabel && ariaLabel.trim().length > 0) {\n this.searchInput.setAttribute('aria-label', ariaLabel.trim());\n } else {\n this.searchInput.removeAttribute('aria-label');\n }\n }\n\n const panel = this.panelContent;\n const isInteractive = this.open && !this.disabled;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'listbox');\n panel.setAttribute('aria-hidden', isInteractive ? 'false' : 'true');\n\n if (trigger) {\n trigger.setAttribute('aria-controls', panel.id);\n }\n } else if (trigger) {\n trigger.removeAttribute('aria-controls');\n }\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.#updateOptionSelectionState();\n }\n\n if (this.disabled && this.open) {\n this.#lastToggleOrigin = null;\n this.open = false;\n }\n }\n\n render(): TemplateResult {\n const placeholderActive = this.#isPlaceholderActive();\n\n return html`\n <ease-popover\n .placement=${this.placement}\n .open=${this.open && !this.disabled}\n >\n ${this.searchable ? this.#renderSearchTrigger(placeholderActive) : this.#renderButtonTrigger(placeholderActive)}\n <div\n part=\"content\"\n role=\"listbox\"\n tabindex=\"-1\"\n data-open=${this.open && !this.disabled ? 'true' : 'false'}\n ?hidden=${!this.open || this.disabled}\n @keydown=${this.#handlePanelKeydown}\n >\n <div part=\"section\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </ease-popover>\n `;\n }\n\n #renderButtonTrigger(placeholderActive: boolean) {\n return html`\n <button\n part=\"trigger\"\n slot=\"trigger\"\n type=\"button\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @keydown=${this.#handleTriggerKeydown}\n @click=${this.#handleTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <span part=\"trigger-label\" data-placeholder=${placeholderActive ? 'true' : 'false'}>\n ${this.#getTriggerLabel()}\n </span>\n\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </button>\n `;\n }\n\n #renderSearchTrigger(placeholderActive: boolean) {\n return html`\n <div\n part=\"trigger\"\n slot=\"trigger\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @click=${this.#handleSearchTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <input \n part=\"trigger-input\"\n type=\"text\"\n .value=${this.open ? (this.searchInput?.value ?? '') : this.#getTriggerLabel()}\n placeholder=${this.placeholder ?? ''}\n ?readonly=${!this.open}\n @input=${this.#handleSearchInput}\n @keydown=${this.#handleTriggerKeydown}\n />\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </div>\n `;\n }\n\n #handleSearchTriggerClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.open) {\n this.toggle(true, event);\n\n if (this.searchInput) {\n this.searchInput.value = '';\n this.#filterOptions('');\n this.searchInput.focus();\n }\n } else {\n if (event.target !== this.searchInput) {\n this.toggle(false, event);\n }\n }\n };\n\n #handleSearchInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.#filterOptions(input.value);\n\n if (!this.open) {\n this.toggle(true, event);\n }\n };\n\n #filterOptions(query: string): void {\n const lowerQuery = query.toLowerCase();\n this.#options.forEach((option) => {\n const match = option.label.toLowerCase().includes(lowerQuery);\n if (match) {\n option.element.style.display = '';\n } else {\n option.element.style.display = 'none';\n }\n });\n }\n\n toggle(force?: boolean, originEvent?: Event): void {\n if (this.disabled) {\n return;\n }\n\n const current = this.open;\n const next = force ?? !current;\n\n if (current === next) {\n return;\n }\n\n this.#lastToggleOrigin = originEvent ?? null;\n this.open = next;\n\n if (!next) {\n this.#pendingFocus = null;\n // Reset filter when closing\n this.#filterOptions('');\n // Restore label in input if searchable\n if (this.searchable && this.searchInput) {\n this.searchInput.value = this.#getTriggerLabel();\n this.searchInput.blur(); // Blur to look like static text\n }\n }\n }\n\n handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#pendingFocus = null;\n }\n\n const origin = this.#lastToggleOrigin ?? new Event(next ? 'open' : 'close');\n this.#lastToggleOrigin = null;\n\n if (next) {\n if (this.searchable && this.searchInput) {\n this.searchInput.focus();\n } else {\n queueMicrotask(() => this.#focusActiveOption());\n }\n }\n\n dispatchControlEvent(this, 'toggle', { value: next, event: origin });\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Dropdown>({\n content: (host) => host.panelContent,\n triggers: (host) => [host.trigger, host.panelContent],\n disabled: (host) => host.disabled || !host.open\n })\n handleOutsideDismiss(event: Event): void {\n if (!this.open) {\n return;\n }\n\n this.toggle(false, event);\n }\n\n #handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#pendingFocus = 'first';\n this.toggle(true, event);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#pendingFocus = 'last';\n this.toggle(true, event);\n break;\n case 'Enter':\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case ' ': // Space\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case 'Escape':\n if (this.open) {\n event.preventDefault();\n this.toggle(false, event);\n }\n break;\n default:\n break;\n }\n };\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #handleTriggerClick = (event: Event): void => {\n this.toggle(!this.open, event);\n };\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: OptionRecord[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as OptionRecord['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.#updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n this.#selectedLabel = null;\n }\n\n #removeOptionListeners(options: OptionRecord[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n #updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n this.toggleAttribute('data-has-value', false);\n return;\n }\n\n let selectedLabel: string | null = null;\n const previousLabel = this.#selectedLabel;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n\n this.#selectedLabel = selectedLabel;\n const hasValue = Boolean(this.value && this.#selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n\n if (previousLabel !== this.#selectedLabel && typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n #isPlaceholderActive(): boolean {\n return !this.value || !this.#selectedLabel;\n }\n\n #getTriggerLabel(): string {\n if (this.#selectedLabel) {\n return this.#selectedLabel;\n }\n\n if (typeof this.placeholder === 'string' && this.placeholder.trim().length > 0) {\n return this.placeholder.trim();\n }\n\n return 'Select';\n }\n\n #focusActiveOption(): void {\n if (!this.open) {\n return;\n }\n\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n let target: OptionRecord | undefined = options[0];\n\n if (this.#pendingFocus === 'first') {\n target = options[0];\n } else if (this.#pendingFocus === 'last') {\n target = options[options.length - 1];\n } else if (this.#pendingFocus === null && this.value !== null) {\n const match = this.#findOptionByValue(this.value);\n if (match && match.element.style.display !== 'none') {\n target = match;\n }\n }\n\n if (target) {\n this.#focusOption(target);\n }\n this.#pendingFocus = null;\n }\n\n #focusOption(option: OptionRecord): void {\n this.#options.forEach((entry) => {\n entry.element.tabIndex = entry === option ? 0 : -1;\n });\n\n option.element.focus({ preventScroll: true });\n }\n\n #focusOptionByIndex(index: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const normalized = Math.max(0, Math.min(index, options.length - 1));\n const option = options[normalized];\n if (option) {\n this.#focusOption(option);\n }\n }\n\n #findOptionByValue(value: string | null): OptionRecord | undefined {\n if (value === null) {\n return undefined;\n }\n\n return this.#options.find((option) => option.value === value);\n }\n\n #moveFocus(step: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement | null;\n const currentIndex = options.findIndex((option) => option.element === activeElement);\n\n if (currentIndex === -1) {\n this.#focusOptionByIndex(step > 0 ? 0 : options.length - 1);\n return;\n }\n\n const nextIndex = (currentIndex + step + options.length) % options.length;\n this.#focusOptionByIndex(nextIndex);\n }\n\n #handlePanelKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.#focusOptionByIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.#focusOptionByIndex(this.#options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.#activateFocusedOption(event);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.toggle(false, event);\n this.trigger?.focus();\n break;\n default:\n break;\n }\n };\n\n #activateFocusedOption(event: Event): void {\n const active = this.#options.find((option) => option.element === document.activeElement);\n\n if (active) {\n this.#selectOption(active.value, active.label, event);\n }\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n if (this.disabled) {\n return;\n }\n\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n this.#selectedLabel = label;\n this.#updateOptionSelectionState();\n\n this.toggle(false, originEvent);\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n\n if (!this.searchable) {\n queueMicrotask(() => this.trigger?.focus());\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-input',\n shadowMode: 'open',\n autoSlot: true,\n styles: `\n :host {\n display: contents;\n cursor: text;\n }\n\n @keyframes custom-caret {\n 0%,\n 100% {\n caret-color: transparent;\n }\n 33.33%,\n 66.66% {\n caret-color: var(--color-blue-300);\n }\n }\n\n [part=\"container\"] {\n display: grid;\n align-items: center;\n text-align: inherit;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n padding: var(--ease-input-padding, 8px);\n border-radius: var(--ease-input-radius, var(--radii-md));\n background-color: var(--ease-input-background, var(--color-gray-875));\n cursor: text;\n animation: custom-caret 1s infinite;\n caret-animation: manual;\n transition: background-color 0.2s;\n box-shadow: var(\n --ease-input-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n &:not([data-has-prefix]):not([data-has-suffix]) {\n padding: var(--ease-input-padding, 8px 12px);\n }\n\n &:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.75;\n }\n\n &:not(:has(input:disabled)) {\n\n &:hover {\n background-color: var(--ease-input-background-hover, var(--color-gray-850));\n }\n\n &:has(input:focus-visible) {\n background-color: var(--ease-input-background-focus, var(--color-gray-825));\n }\n\n }\n\n &[data-has-prefix][data-has-suffix] {\n padding: var(--ease-input-padding, 0);\n grid-template-columns: 30px 1fr 30px;\n }\n\n &[data-has-prefix]:not([data-has-suffix]) {\n padding-right: var(--ease-input-padding, 12px);\n grid-template-columns: 30px 1fr;\n }\n\n &[data-has-suffix]:not([data-has-prefix]) {\n padding-left: var(--ease-input-padding, 12px);\n grid-template-columns: 1fr 30px;\n }\n\n &[data-headless=\"true\"] {\n background-color: transparent;\n box-shadow: none;\n border: none;\n padding: 0;\n margin: 0;\n outline: none;\n border-radius: 0;\n }\n }\n\n ::slotted(button) {\n --ease-icon-size: 12px;\n width: 30px;\n height: 30px;\n appearance: none;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 0;\n margin: 0;\n line-height: 14px;\n transition: color 0.2s;\n cursor: pointer;\n display: grid;\n place-items: center;\n color: var(--color-gray-600);\n transition: color 0.2s;\n\n &:hover,\n &:focus-visible {\n color: var(--color-blue-100);\n }\n\n &.isActive {\n animation: blink .6s forwards;\n }\n\n @keyframes blink {\n 50% {\n background-color: var(--color-white-8);\n }\n }\n }\n\n ::slotted(button[slot=\"prefix\"]) {\n border-radius: var(--radii-md) 0 0 var(--radii-md);\n border-right: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n ::slotted([slot=\"prefix\"]:not(button)) {\n margin: calc(var(--ease-input-padding, 8px) * -1);\n margin-right: 0;\n margin-left: 0;\n }\n\n ::slotted(button[slot=\"suffix\"]) {\n border-radius: 0 var(--radii-md) var(--radii-md) 0;\n border-left: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n input {\n font-family: inherit;\n font-optical-sizing: auto;\n font-size: var(--ease-input-font-size, var(--ease-font-size, 13px));\n appearance: none;\n -moz-appearance: textfield;\n font-weight: var(--ease-input-font-weight, 500);\n color: var(--ease-input-color, var(--color-blue-100));\n min-width: 0;\n cursor: inherit;\n text-align: inherit;\n padding: 0;\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-input-line-height, 14px);\n transition: color 0.2s;\n\n &::placeholder {\n color: var(--ease-input-placeholder-color, var(--color-gray-600));\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n `,\n template(this: Input) {\n return html`\n <div part=\"container\" data-headless=${Boolean(this.headless)}>\n <slot name=\"prefix\" part=\"prefix\"></slot>\n <input part=\"control\" .disabled=${Boolean(this.disabled)} ?disabled=${Boolean(this.disabled)} ?aria-disabled=${Boolean(this.disabled)} />\n \n <slot name=\"suffix\" part=\"suffix\"></slot>\n </div>\n `;\n }\n})\nexport class Input extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor placeholder!: string | null;\n\n @Prop<string>({ reflect: true, defaultValue: 'text' })\n accessor type!: string;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor headless = false;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n private updatePrefixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const prefixSlot = this.shadowRoot?.querySelector('slot[name=\"prefix\"]') as HTMLSlotElement;\n const hasPrefix = Boolean(prefixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-prefix', hasPrefix);\n }\n\n private updateSuffixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const suffixSlot = this.shadowRoot?.querySelector('slot[name=\"suffix\"]') as HTMLSlotElement;\n const hasSuffix = Boolean(suffixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-suffix', hasSuffix);\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? '';\n\n if (control.value !== value) {\n control.value = value;\n }\n\n control.type = this.type ?? 'text';\n control.placeholder = this.placeholder ?? '';\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n this.updatePrefixAttribute();\n this.updateSuffixAttribute();\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"prefix\"]' })\n onPrefixSlotChange(): void {\n this.updatePrefixAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"suffix\"]' })\n onSuffixSlotChange(): void {\n this.updateSuffixAttribute();\n }\n\n @Listen<Input, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'input', { value: this.value ?? '', event });\n }\n\n @Listen<Input, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'change', { value: this.value ?? '', event });\n }\n}\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HSV {\n h: number;\n s: number;\n v: number;\n}\n\nexport interface HSL {\n h: number;\n s: number;\n l: number;\n}\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsb';\n\nconst clamp01 = (value: number) => Math.max(0, Math.min(1, value));\n\nexport function hsvToRgb(h: number, s: number, v: number): RGB {\n let hue = ((h % 360) + 360) % 360;\n hue /= 60;\n\n const saturation = clamp01(s);\n const value = clamp01(v);\n const c = value * saturation;\n const x = c * (1 - Math.abs((hue % 2) - 1));\n const m = value - c;\n\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (hue < 1) {\n r = c;\n g = x;\n } else if (hue < 2) {\n r = x;\n g = c;\n } else if (hue < 3) {\n g = c;\n b = x;\n } else if (hue < 4) {\n g = x;\n b = c;\n } else if (hue < 5) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n\n let h = 0;\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n if (delta !== 0) {\n switch (max) {\n case rn:\n h = (gn - bn) / delta + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / delta + 2;\n break;\n case bn:\n h = (rn - gn) / delta + 4;\n break;\n default:\n break;\n }\n\n h *= 60;\n }\n\n return { h, s, v };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (component: number) => component.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport function hexToRgb(hex: string): RGB | null {\n let normalized = hex.trim();\n\n if (/^#([0-9a-f]{3})$/i.test(normalized)) {\n normalized = `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16)\n };\n}\n\nexport function hexToHsv(hex: string): HSV | null {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(rgb.r, rgb.g, rgb.b) : null;\n}\n\nexport function hsvToHex(h: number, s: number, v: number): string {\n const rgb = hsvToRgb(h, s, v);\n return rgbToHex(rgb.r, rgb.g, rgb.b);\n}\n\nexport function isValidHex(hex: string): boolean {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex.trim());\n}\n\nexport function getLuminance(r: number, g: number, b: number): number {\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\nexport function isLightColor(r: number, g: number, b: number): boolean {\n return getLuminance(r, g, b) > 0.5;\n}\n\nexport function hsvToHsl(h: number, s: number, v: number): HSL {\n const l = v * (1 - s / 2);\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return { h, s: sl, l };\n}\n\nexport function hslToHsv(h: number, s: number, l: number): HSV {\n const v = l + s * Math.min(l, 1 - l);\n const sv = v === 0 ? 0 : 2 * (1 - l / v);\n return { h, s: sv, v };\n}\n\nexport function formatColor(hsv: HSV, format: ColorFormat, alpha = 1): string {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return hsvToHex(h, s, v);\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${alpha})`;\n }\n case 'hsb':\n return `hsb(${Math.round(h)}, ${Math.round(s * 100)}%, ${Math.round(v * 100)}%)`;\n default:\n return hsvToHex(h, s, v);\n }\n}\n\nexport interface ColorComponents {\n labels: string[];\n values: (string | number)[];\n max: number[];\n suffix: string[];\n}\n\nexport function getColorComponents(hsv: HSV, format: ColorFormat): ColorComponents {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return {\n labels: ['R', 'G', 'B'],\n values: [rgb.r, rgb.g, rgb.b],\n max: [255, 255, 255],\n suffix: ['', '', '']\n };\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return {\n labels: ['H', 'S', 'L'],\n values: [Math.round(hsl.h), Math.round(hsl.s * 100), Math.round(hsl.l * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n }\n case 'hsb':\n return {\n labels: ['H', 'S', 'B'],\n values: [Math.round(h), Math.round(s * 100), Math.round(v * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n default:\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n }\n}\n\nexport function updateHsvFromComponents(hsv: HSV, format: ColorFormat, index: number, value: number | string): HSV {\n const newHsv = { ...hsv };\n\n switch (format) {\n case 'hex': {\n if (typeof value === 'string' && isValidHex(value)) {\n const parsed = hexToHsv(value);\n if (parsed) {\n return parsed;\n }\n }\n break;\n }\n case 'rgb': {\n const rgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [rgb.r, rgb.g, rgb.b];\n vals[index] = Math.max(0, Math.min(255, Number(value)));\n return rgbToHsv(vals[0], vals[1], vals[2]);\n }\n case 'hsl': {\n const hsl = hsvToHsl(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [hsl.h, hsl.s * 100, hsl.l * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return hslToHsv(vals[0], vals[1] / 100, vals[2] / 100);\n }\n case 'hsb': {\n const vals: [number, number, number] = [hsv.h, hsv.s * 100, hsv.v * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return { h: vals[0], s: vals[1] / 100, v: vals[2] / 100 };\n }\n }\n\n return newHsv;\n}\n\nexport const COLOR_FORMATS: ColorFormat[] = ['hex', 'rgb', 'hsl', 'hsb'];\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrows-vertical',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 24px);\n height: var(--ease-icon-size, 24px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9.00006L11.1161 5.88394C11.6043 5.39578 12.3957 5.39578 12.8839 5.88394L16 9.00006M8 15.0001L11.1161 18.1162C11.6043 18.6043 12.3957 18.6043 12.8839 18.1162L16 15.0001\" />\n </svg>\n `;\n }\n})\nexport class IconArrowsVertical extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-picker',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"picker\"] {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.25;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg part=\"picker\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 3.50003L8.5 7.00003M2.14645 7.85358L7.5 2.50003C8.05228 1.94774 8.94772 1.94774 9.5 2.50003C10.0523 3.05231 10.0523 3.94774 9.5 4.50003L4.14645 9.85358C4.05268 9.94735 3.9255 10 3.79289 10H2.5C2.22386 10 2 9.77617 2 9.50003V8.20714C2 8.07453 2.05268 7.94735 2.14645 7.85358Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n }\n})\nexport class IconPicker extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent } from '../shared';\nimport {\n COLOR_FORMATS,\n type ColorFormat,\n getColorComponents,\n type HSV,\n hexToHsv,\n hsvToHex,\n hsvToRgb,\n isLightColor,\n isValidHex,\n updateHsvFromComponents\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { styleMap } from '~/utils/template-helpers';\nimport '../icons/interface/arrows-vertical';\nimport '../icons/interface/picker';\n\n@Component({\n tag: 'ease-color-picker',\n autoSlot: false,\n styles: `\n :host {\n display: grid;\n grid-gap: 8px;\n user-select: none;\n -webkit-user-select: none;\n\n --ease-color-picker-width: 180px;\n }\n\n [part=\"saturation\"] {\n position: relative;\n width: 100%;\n height: 124px;\n cursor: pointer;\n background-image: linear-gradient(to top, black, transparent), linear-gradient(to right, white, transparent);\n border-radius: 7px;\n touch-action: none;\n }\n\n [part=\"saturation-handle\"] {\n position: absolute;\n width: 10px;\n height: 10px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"hue\"] {\n position: relative;\n height: 8px;\n align-self: center;\n flex-grow: 1;\n cursor: pointer;\n border-radius: 9px;\n background-image: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);\n touch-action: none;\n }\n\n [part=\"hue-handle\"] {\n position: absolute;\n top: 0;\n width: 8px;\n height: 8px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"preview\"] {\n position: relative;\n width: 20px;\n height: 20px;\n border-radius: 5px;\n box-shadow: inset 0 0 0 .75px var(--color-blue-80);\n display: grid;\n place-items: center;\n\n &[data-eyedropper] {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n ease-icon-picker {\n scale: 1.1;\n }\n }\n\n ease-icon-picker {\n color: var(--icon-color, var(--color-blue-100));\n transition: scale 0.2s, color 0.15s;\n filter: drop-shadow(0 0 2px var(--color-black-15));\n }\n }\n }\n\n [part=\"toolbar\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n position: relative;\n z-index: 1;\n }\n\n [part=\"toolbar\"] ease-button {\n padding: 4px;\n width: max-content;\n }\n\n [part=\"format-container\"] {\n display: grid;\n grid-template-columns: 30px 1fr;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-inputs\"] {\n padding: 2px 4px;\n width: 100%;\n border-radius: var(--ease-color-picker-format-radius, var(--radii-md));\n background-color: var(--ease-color-picker-format-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-color-picker-format-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n box-sizing: border-box;\n display: flex;\n justify-content: space-around;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-color-picker-format-background-hover, var(--color-gray-825));\n }\n }\n\n [part=\"format-input\"] {\n appearance: none;\n -moz-appearance: textfield;\n cursor: pointer;\n box-sizing: border-box;\n font-size: var(--ease-color-picker-format-font-size, 11px);\n font-weight: 500;\n color: var(--color-gray-600);\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n padding: 4px;\n margin: 0;\n background-color: transparent;\n line-height: 12px;\n transition: color 0.2s;\n width: 100%;\n text-align: center;\n font-optical-sizing: auto;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &:hover,\n &:focus-within {\n color: var(--color-blue-100);\n }\n\n &::placeholder {\n color: var(--color-gray-800);\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n [part=\"color-container\"] {\n display: grid;\n grid-template-columns: 1fr 20px;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-trigger\"] {\n --ease-icon-size: var(--ease-color-picker-format-icon-size, 10px);\n\n display: flex;\n align-items: center;\n gap: 2px;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-optical-sizing: auto;\n font-size: var(--ease-color-picker-format-trigger-font-size, 10px);\n font-weight: 500;\n color: var(--color-gray-400);\n cursor: pointer;\n transition: color 0.15s;\n overflow: hidden;\n position: relative;\n height: 14px;\n\n &:hover {\n color: var(--color-gray-200);\n }\n\n ease-icon-arrows-vertical {\n color: var(--color-gray-600);\n flex-shrink: 0;\n }\n }\n\n [part=\"format-label\"] {\n display: inline-block;\n }\n\n [part=\"format-label\"][data-animating=\"out\"] {\n animation: formatOut 0.15s ease-in forwards;\n }\n\n [part=\"format-label\"][data-animating=\"in\"] {\n animation: formatIn 0.15s ease-out forwards;\n }\n\n @keyframes formatOut {\n 0% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n 100% {\n transform: translateY(6px) scale(0.8);\n opacity: 0;\n }\n }\n\n @keyframes formatIn {\n 0% {\n transform: translateY(-6px) scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n }\n\n `,\n template(this: ColorPicker) {\n const { h, s, v } = this.hsv;\n const pureHue = hsvToRgb(h, 1, 1);\n const currentRgb = hsvToRgb(h, s, v);\n const saturationBg = `rgb(${pureHue.r}, ${pureHue.g}, ${pureHue.b})`;\n const huePercent = h / 360;\n const vInverted = 1 - v;\n // Position handles so they stay within container bounds (handle is 10px)\n const saturationHandleStyles = {\n left: `calc(${s * 100}% - ${s * 10}px)`,\n top: `calc(${vInverted * 100}% - ${vInverted * 10}px)`\n } as const;\n const hueHandleStyles = {\n left: `calc(${huePercent * 100}% - ${huePercent * 10}px)`\n } as const;\n const isLight = isLightColor(currentRgb.r, currentRgb.g, currentRgb.b);\n const hasEyeDropper = 'EyeDropper' in window;\n const previewStyles = {\n backgroundColor: this.value,\n '--icon-color': isLight ? 'var(--color-gray-900)' : 'var(--color-blue-100)'\n } as const;\n const components = getColorComponents(this.hsv, this.format);\n\n return html`\n <div \n part=\"saturation\" \n style=${styleMap({ backgroundColor: saturationBg })}\n @pointerdown=${this.handleSaturationPointerDown}\n @pointermove=${this.handleSaturationPointerMove}\n @pointerup=${this.handleSaturationPointerUp}\n @pointercancel=${this.handleSaturationPointerUp}\n >\n <div part=\"saturation-handle\" style=${styleMap(saturationHandleStyles)}></div>\n </div>\n <div part=\"color-container\">\n <div \n part=\"hue\"\n @pointerdown=${this.handleHuePointerDown}\n @pointermove=${this.handleHuePointerMove}\n @pointerup=${this.handleHuePointerUp}\n @pointercancel=${this.handleHuePointerUp}\n >\n <div part=\"hue-handle\" style=${styleMap(hueHandleStyles)}></div>\n </div>\n\n <div \n part=\"preview\" \n style=${styleMap(previewStyles)}\n ?data-eyedropper=${hasEyeDropper}\n @click=${hasEyeDropper ? this.handleEyeDropperClick : null}\n >\n ${hasEyeDropper ? html`<ease-icon-picker></ease-icon-picker>` : null}\n </div>\n </div>\n <div part=\"format-container\">\n <div part=\"format-trigger\" @click=${this.handleFormatCycle}>\n <span part=\"format-label\" data-animating=${this.formatAnimating}>${this.format.toUpperCase()}</span>\n <ease-icon-arrows-vertical />\n </div>\n <div part=\"format-inputs\">\n ${\n this.format === 'hex'\n ? html`\n <input \n part=\"format-input\" \n data-hex\n type=\"text\" \n .value=${components.values[0]}\n @input=${(e: Event) => this.handleComponentChange(0, (e.target as HTMLInputElement).value)}\n />\n `\n : components.labels.map(\n (_, i) => html`\n <input \n part=\"format-input\" \n type=\"number\" \n min=\"0\"\n max=${components.max[i]}\n .value=${String(components.values[i])}\n @input=${(e: Event) => this.handleComponentChange(i, Number((e.target as HTMLInputElement).value))}\n />\n `\n )\n }\n </div>\n </div>\n <div part=\"toolbar\">\n <ease-button variant=\"headless-muted\" @click=${this.handleCancelButtonClick}>Cancel</ease-button>\n <ease-button variant=\"headless\" @click=${this.handleApplyButtonClick}>Apply</ease-button>\n </div>\n `;\n }\n})\nexport class ColorPicker extends HTMLElement {\n declare requestRender: () => void;\n\n private hsv: HSV = { h: 0, s: 1, v: 1 };\n private originalValue: string = '#FF0000';\n private format: ColorFormat = 'hex';\n formatAnimating: 'out' | 'in' | 'none' = 'none';\n #isDraggingSaturation = false;\n #isDraggingHue = false;\n #activeSaturationPointer: number | null = null;\n #activeHuePointer: number | null = null;\n isInternalUpdate = false;\n\n @Query('[part=\"saturation\"]') accessor saturationArea!: HTMLElement | null;\n @Query('[part=\"hue\"]') accessor hueArea!: HTMLElement | null;\n @Query<HTMLInputElement>('[part=\"hex-input\"]') accessor hexInput!: HTMLInputElement | null;\n\n @Prop({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(this: ColorPicker, value: string | null) {\n if (!this.isInternalUpdate) {\n this.updateFromHex(value ?? '#FF0000');\n }\n }\n })\n accessor value!: string;\n\n connectedCallback(): void {\n this.originalValue = this.value;\n this.updateFromHex(this.value);\n }\n\n private updateFromHex(hex: string): void {\n if (!isValidHex(hex)) {\n return;\n }\n\n const hsv = hexToHsv(hex);\n\n if (hsv) {\n this.hsv = hsv;\n }\n }\n\n #updateValue(event: Event | null): void {\n const newValue = hsvToHex(this.hsv.h, this.hsv.s, this.hsv.v);\n\n if (this.value !== newValue) {\n this.isInternalUpdate = true;\n this.value = newValue;\n this.isInternalUpdate = false;\n\n if (this.hexInput && document.activeElement !== this.hexInput) {\n this.hexInput.value = newValue;\n }\n\n if (event) {\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n }\n }\n\n readonly handleSaturationPointerDown = (event: PointerEvent): void => {\n if (!this.saturationArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingSaturation = true;\n this.#activeSaturationPointer = event.pointerId;\n this.saturationArea.setPointerCapture(event.pointerId);\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n event.preventDefault();\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n this.#isDraggingSaturation = false;\n this.#activeSaturationPointer = null;\n\n if (this.saturationArea?.hasPointerCapture(event.pointerId)) {\n this.saturationArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateSaturationValue(event: PointerEvent): void {\n if (!this.saturationArea) {\n return;\n }\n const rect = this.saturationArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n const y = Math.max(0, Math.min(rect.height, event.clientY - rect.top));\n\n this.hsv.s = x / rect.width;\n this.hsv.v = 1 - y / rect.height;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHuePointerDown = (event: PointerEvent): void => {\n if (!this.hueArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingHue = true;\n this.#activeHuePointer = event.pointerId;\n this.hueArea.setPointerCapture(event.pointerId);\n this.updateHue(event);\n };\n\n readonly handleHuePointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n event.preventDefault();\n this.updateHue(event);\n };\n\n readonly handleHuePointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n this.#isDraggingHue = false;\n this.#activeHuePointer = null;\n\n if (this.hueArea?.hasPointerCapture(event.pointerId)) {\n this.hueArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateHue(event: PointerEvent): void {\n if (!this.hueArea) {\n return;\n }\n const rect = this.hueArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n\n this.hsv.h = (x / rect.width) * 360;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHexInputChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n\n if (isValidHex(newValue)) {\n this.updateFromHex(newValue);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n } else if (this.hexInput) {\n this.hexInput.value = this.value;\n }\n };\n\n readonly handleComponentChange = (index: number, value: number | string): void => {\n this.hsv = updateHsvFromComponents(this.hsv, this.format, index, value);\n this.#updateValue(null);\n this.requestRender();\n };\n\n readonly handleFormatChange = (format: ColorFormat): void => {\n this.format = format;\n this.requestRender();\n };\n\n readonly handleFormatCycle = (): void => {\n // Start exit animation\n this.formatAnimating = 'out';\n this.requestRender();\n\n // After exit animation, change format and start enter animation\n setTimeout(() => {\n const currentIndex = COLOR_FORMATS.indexOf(this.format);\n const nextIndex = (currentIndex + 1) % COLOR_FORMATS.length;\n this.format = COLOR_FORMATS[nextIndex] as ColorFormat;\n this.formatAnimating = 'in';\n this.requestRender();\n\n // Clear animation state after enter animation\n setTimeout(() => {\n this.formatAnimating = 'none';\n this.requestRender();\n }, 150);\n }, 150);\n };\n\n readonly handleCancelButtonClick = (event: Event): void => {\n this.updateFromHex(this.originalValue);\n this.isInternalUpdate = true;\n this.value = this.originalValue;\n this.isInternalUpdate = false;\n this.requestRender();\n dispatchControlEvent(this, 'cancel', { value: this.originalValue, event });\n };\n\n readonly handleApplyButtonClick = (event: Event): void => {\n this.originalValue = this.value;\n dispatchControlEvent(this, 'apply', { value: this.value, event });\n };\n\n readonly handleEyeDropperClick = async (event: Event): Promise<void> => {\n if (!('EyeDropper' in window)) {\n return;\n }\n\n try {\n const eyeDropper = new (\n window as typeof window & { EyeDropper: new () => { open: () => Promise<{ sRGBHex: string }> } }\n ).EyeDropper();\n const result = await eyeDropper.open();\n\n if (result.sRGBHex) {\n this.updateFromHex(result.sRGBHex);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n } catch {\n // User cancelled or API error - silently ignore\n }\n };\n}\n\nexport default {\n ColorPicker\n};\n","import type { Placement } from '~/elements/popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../dropdown';\nimport '../input';\nimport './picker';\n\nimport { isValidHex } from './utils';\n\nimport { styleMap } from '~/utils/template-helpers';\n\n@Component({\n tag: 'ease-color-input',\n styles: `\n :host {\n display: block;\n position: relative;\n }\n\n ease-dropdown {\n --ease-dropdown-panel-min-width: auto;\n --ease-dropdown-panel-width: max-content;\n --ease-dropdown-panel-max-width: max-content;\n }\n\n :host(:not([custom-trigger])) ease-input {\n --ease-input-padding: 0 4px 0 4px;\n display: block;\n width: 76px;\n cursor: pointer;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &::part(control) {\n margin-left: -12px;\n cursor: pointer;\n }\n }\n\n ease-dropdown::part(trigger):disabled {\n cursor: default;\n opacity: 0.75;\n }\n\n :host(:not([custom-trigger])) [slot=\"prefix\"] {\n display: block;\n width: 14px;\n height: 14px;\n margin-left: -4px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--color-white-10);\n }\n\n [part=\"value-text\"] {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n ease-dropdown::part(content) {\n padding: var(--ease-color-input-dropdown-padding, 12px 12px 8px 12px);\n overflow: visible;\n }\n\n ::slotted([slot=\"trigger\"]) {\n cursor: pointer;\n }\n `\n})\nexport class ColorInput extends HTMLElement {\n declare requestRender: () => void;\n\n #hasCustomTrigger = false;\n\n @Query('ease-dropdown') accessor dropdown!: (HTMLElement & { open: boolean }) | null;\n\n @Prop<string, ColorInput>({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(next) {\n if (next && isValidHex(next)) {\n const normalized = next.toUpperCase();\n if (this.value !== normalized) {\n this.value = normalized;\n }\n } else if (!next) {\n this.value = '#000000';\n }\n }\n })\n accessor value!: string;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n connectedCallback(): void {\n this.#hasCustomTrigger = this.querySelector('[slot=\"trigger\"]') !== null;\n setBooleanAttribute(this, 'custom-trigger', this.#hasCustomTrigger);\n }\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n #renderDefaultTrigger(): TemplateResult {\n const swatchStyle = {\n backgroundColor: this.value\n } as const;\n\n return html`\n <div slot=\"trigger\" part=\"trigger-content\">\n <ease-input part=\"input\" type=\"text\" .value=${this.value} @change=${this.#handleInputChange} headless>\n <div slot=\"prefix\" style=${styleMap(swatchStyle)}></div>\n </ease-input>\n </div>\n `;\n }\n\n render(): TemplateResult {\n return html`\n <ease-dropdown .disabled=${this.disabled} .placement=${this.placement}>\n ${this.#hasCustomTrigger ? html`<slot name=\"trigger\" slot=\"trigger\"></slot>` : this.#renderDefaultTrigger()}\n <ease-color-picker slot=\"content\"\n data-select-ignore\n .value=${this.value}\n @input=${this.#handlePickerInput}\n @change=${this.#handlePickerChange}\n @cancel=${this.#handlePickerCancel}\n @apply=${this.#handlePickerApply}\n ></ease-color-picker>\n </ease-dropdown>\n `;\n }\n\n #handleInputChange = (event: Event): void => {\n this.value = (event.target as HTMLInputElement).value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerInput = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerChange = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n #handlePickerCancel = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n this.requestRender();\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n\n #handlePickerApply = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-minus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.99995H11\" />\n </svg>\n `;\n }\n})\nexport class IconMinus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-plus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00018 4.28591C8.00018 4.28591 8.00018 8.42263 8.00018 11.714M4.28613 7.99995H11.7142\" />\n </svg>\n `;\n }\n})\nexport class IconPlus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nimport '../input';\nimport '../icons/interface/minus';\nimport '../icons/interface/plus';\n@Component({\n tag: 'ease-number-input',\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n [part=\"container\"] {\n min-width: 0;\n }\n\n ease-input {\n --ease-input-padding: 0;\n text-align: center;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n }\n\n [part=\"button\"] {\n position: relative;\n overflow: hidden;\n \n & > div {\n animation: blink .75s forwards;\n position: absolute;\n pointer-events: none;\n inset: 0;\n background-color: var(--ease-number-blink-color, var(--color-white-8));\n }\n }\n\n @keyframes blink {\n 0%,\n 90%,\n 100% {\n opacity: 0;\n }\n 30% {\n opacity: 1;\n }\n }\n `,\n template(this: NumberInput) {\n return html`\n <div part=\"container\">\n <ease-input\n part=\"control\"\n type=\"number\"\n .value=${this.value}\n ?disabled=${this.disabled}\n ?min=${this.min}\n ?max=${this.max}\n ?step=${this.step}\n @input=${this.handleInput}\n @change=${this.handleChange}\n >\n <button\n slot=\"prefix\"\n @click=${this.handleDecrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n ?aria-disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n >\n <ease-icon-minus />\n </button>\n <button\n slot=\"suffix\"\n @click=${this.handleIncrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n ?aria-disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n >\n <ease-icon-plus />\n </button>\n </ease-input>\n </div>\n `;\n }\n})\nexport class NumberInput extends HTMLElement {\n declare requestRender: () => void;\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.value = this.value === null || this.value === undefined ? '' : String(this.value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n addActiveLayer(button: HTMLButtonElement): void {\n const layer = document.createElement('div');\n layer.classList.add('active-layer');\n button.appendChild(layer);\n\n setTimeout(() => {\n layer.remove();\n }, 600);\n }\n\n handleDecrement(event: MouseEvent): void {\n if (this.disabled || this.min === null || Number(this.control?.value) <= this.min) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current - (this.step ?? 1);\n\n if (this.value <= this.min) {\n this.disabled = true;\n }\n }\n\n handleIncrement(event: MouseEvent): void {\n if (this.disabled || this.max === null || Number(this.control?.value) >= this.max) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current + (this.step ?? 1);\n\n if (this.value >= this.max) {\n this.disabled = true;\n }\n }\n}\n","import '../dropdown';\n\nimport type { Dropdown } from '../dropdown';\n\nimport { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-origin',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n flex: 1;\n width: 100%;\n display: grid;\n grid-template-columns: 30px auto;\n grid-gap: 8px;\n }\n\n [part=\"preview\"] {\n width: 30px;\n height: 30px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n cursor: pointer;\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n border-radius: var(--radii-md);\n position: relative;\n\n &::before,\n &::after {\n content: '';\n display: block;\n width: 3px;\n height: 3px;\n background-color: var(--color-blue-100);\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -1.5px;\n margin-left: -1.5px;\n }\n\n &::before {\n background-color: var(--color-gray-700);\n box-shadow: -6.5px -6.5px 0 0 var(--color-gray-700), 0 -6.5px 0 0 var(--color-gray-700), 6.5px -6.5px 0 0 var(--color-gray-700), -6.5px 0 0 0 var(--color-gray-700), 6.5px 0 0 0 var(--color-gray-700), -6.5px 6.5px 0 0 var(--color-gray-700), 0 6.5px 0 0 var(--color-gray-700), 6.5px 6.5px 0 0 var(--color-gray-700);\n }\n\n &::after {\n translate: var(--ease-origin-translate-x, 0) var(--ease-origin-translate-y, 0);\n scale: 1.25;\n transition: translate 0.3s cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n &:hover {\n background-color: var(--color-gray-850);\n }\n\n &:focus-within {\n background-color: var(--color-gray-825);\n }\n\n &[data-value=\"top-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"top-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: -6.5px; \n }\n \n &[data-value=\"top-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"center-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 0\n }\n\n &[data-value=\"center-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 0;\n }\n\n &[data-value=\"center-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 0;\n }\n \n &[data-value=\"bottom-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n }\n\n ease-dropdown[part=\"dropdown\"] {\n --ease-dropdown-max-height: 180px;\n\n width: 100%;\n }\n `,\n template(this: Origin) {\n return html`\n <div part=\"container\">\n <div part=\"preview\" data-value=${this.value ?? 'center-center'}></div>\n \n <ease-dropdown part=\"dropdown\" placeholder=\"Select\" id=\"origin-dropdown\" .value=${this.value ?? 'center-center'} fullWidth name=${this.name} @value-change=${this.handleValueChange}>\n <button slot=\"content\" value=\"top-left\">Top Left</button>\n <button slot=\"content\" value=\"top-center\">Top Center</button>\n <button slot=\"content\" value=\"top-right\">Top Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"center-left\">Center Left</button>\n <button slot=\"content\" value=\"center-center\">Center Center</button>\n <button slot=\"content\" value=\"center-right\">Center Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"bottom-left\">Bottom Left</button>\n <button slot=\"content\" value=\"bottom-center\">Bottom Center</button>\n <button slot=\"content\" value=\"bottom-right\">Bottom Right</button>\n </ease-dropdown>\n </div>\n `;\n }\n})\nexport class Origin extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'center-center' })\n accessor value: string = 'center-center';\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<Dropdown>('ease-dropdown')\n accessor control!: Dropdown | null;\n\n @Prop<string>({ reflect: true, defaultValue: '' })\n accessor name: string = '';\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Origin, Event, Dropdown>('change', { selector: 'ease-dropdown' })\n handleChange(event: Event, target?: Dropdown | null): void {\n if (!target) {\n return;\n }\n\n this.value = String(target.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n handleValueChange = (event: Event): void => {\n this.value = String(this.control?.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n}\n","export class RadioOption extends HTMLElement {\n connectedCallback(): void {\n this.hidden = true;\n if (!this.hasAttribute('slot')) {\n this.setAttribute('slot', 'option');\n }\n }\n}\n\nif (!customElements.get('radio-option')) {\n customElements.define('radio-option', RadioOption);\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../button';\n\nimport { dispatchControlEvent } from '../shared';\n\nexport * from './option';\n\ninterface RadioEntry {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-radio-group',\n shadowMode: 'open',\n styles: `\n :host {\n display: flex;\n }\n\n [part=\"option\"] {\n flex: 0 0 50%;\n display: block;\n }\n\n [part=\"group\"] {\n display: flex;\n position: relative;\n z-index: 0;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n padding: var(--ease-radio-padding, 3px);\n border-radius: var(--ease-radio-radius, var(--radii-md));\n background-color: var(--ease-radio-background, var(--color-gray-875));\n box-shadow: var(\n --ease-radio-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n ::slotted(button) {\n padding: var(--ease-radio-option-padding, 4px 0);\n line-height: var(--ease-radio-option-line-height, 16px);\n margin: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-radio-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-radio-option-font-weight, 500);\n color: var(--ease-radio-option-color, var(--color-gray-600));\n transition: color 0.2s;\n flex-grow: 1;\n }\n\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n color: var(--color-blue-100);\n }\n\n ::slotted(button[data-active=\"true\"]) {\n color: var(--color-blue-100);\n }\n }\n `,\n template() {\n return html`\n <div part=\"group\">\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n})\nexport class RadioGroup extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null, RadioGroup>({\n reflect: true,\n defaultValue: null,\n onChange(this: RadioGroup, next, previous) {\n if (next === previous) {\n return;\n }\n this.updateOptionSelectionState();\n }\n })\n accessor value: string | null = null;\n\n @Query<HTMLElement>('[part=\"group\"]')\n accessor groupElement!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: RadioEntry[] = [];\n #currentSlot: HTMLSlotElement | null = null;\n #optionsInitialized = false;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n }\n\n afterRender(): void {\n const panel = this.groupElement;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'radiogroup');\n }\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.updateOptionSelectionState();\n }\n }\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: RadioEntry[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.setAttribute('variant', this.value === value ? 'default' : 'link');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as RadioEntry['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n }\n\n #removeOptionListeners(options: RadioEntry[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n return;\n }\n\n let selectedLabel: string | null = null;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n option.element.setAttribute('variant', isSelected ? 'default' : 'link');\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n const hasValue = Boolean(this.value && selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-radio-input',\n shadowMode: 'open',\n styles: `\n .radio {\n display: table;\n border-radius: var(--ease-radio-input-radius, 12px);\n position: relative;\n }\n\n [part=\"radio\"] {\n display: table;\n appearance: none;\n outline: none;\n border: none;\n background: none;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-radio-input-size, 24px);\n height: var(--ease-radio-input-size, 24px);\n }\n\n .radio svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-radio-input-dot-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n\n .radio svg .top {\n transform-origin: 12px -12px;\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .dot {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .drop {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .top {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .drop {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"].anim-checked {\n animation: radio-border-expand 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-checked + svg .top {\n animation: radio-top 0.8s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .dot {\n animation: radio-dot 0.6s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .drop {\n animation: radio-drop 0.6s ease-out 0.4s forwards;\n }\n\n [part=\"control\"].anim-unchecked {\n animation: radio-border-contract 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .top {\n animation: radio-top-reverse 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .dot {\n animation: radio-dot-reverse 0.6s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .drop {\n animation: radio-drop-reverse 0.6s ease-out forwards;\n }\n\n @keyframes radio-border-expand {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n 25% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes radio-top {\n 0% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n }\n 25% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n }\n 100% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n }\n }\n\n @keyframes radio-dot {\n 0% {\n transform: translateY(-17px) translateZ(0);\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-drop {\n 0% {\n transform: translateY(-14px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-border-contract {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 75% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes radio-top-reverse {\n 0% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n 75% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-dot-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-drop-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n }\n `,\n template(this: RadioInput) {\n return html`\n <button part=\"radio\" type=\"button\" role=\"radio\" aria-checked=${this.checked} ?disabled=${this.disabled}>\n <div class=\"radio\">\n <input part=\"control\" name=${this.name} value=${this.value} ?checked=${this.checked} ?disabled=${this.disabled} type=\"radio\" />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <circle class=\"top\" cx=\"12\" cy=\"-12\" r=\"8\" />\n <circle class=\"dot\" cx=\"12\" cy=\"12\" r=\"5\" />\n <circle class=\"drop\" cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"1.25\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class RadioInput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, RadioInput>({\n type: Boolean,\n reflect: true,\n onChange(this: RadioInput, next: boolean) {\n if (next && this.name) {\n const form = this.closest('form');\n const root = form ?? (this.getRootNode() as Document | ShadowRoot);\n const others = Array.from(root.querySelectorAll(`ease-radio-input[name=\"${this.name}\"]`)) as RadioInput[];\n\n others.forEach((other) => {\n if (other !== this && other.checked) {\n other.checked = false;\n }\n });\n }\n }\n })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n private _firstRender = true;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n if (this._firstRender) {\n this._firstRender = false;\n this._prevChecked = this.checked;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const input = this.shadowRoot?.querySelector('[part=\"control\"]') as HTMLInputElement;\n const svg = this.shadowRoot?.querySelector('svg[viewBox=\"0 0 24 24\"]');\n if (!input || !svg) {\n return;\n }\n\n input.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n input.classList.add(animClass);\n svg.classList.add(animClass);\n\n const duration = 800; // Longest animation duration in ms\n\n setTimeout(() => {\n input.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<RadioInput, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.checked) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = true;\n\n dispatchControlEvent(this, 'radio', { value: this.checked, event });\n }\n}\n","import '../input';\n\nimport { html } from 'lit-html';\n\nimport { type ControlEventDetail, coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-slider',\n styles: `\n :host {\n display: contents;\n --track-color: var(--ease-slider-track-color, var(--color-gray-825));\n --active-track-color: var(--ease-slider-active-track-color, var(--color-blue-1100));\n --thumb-color: var(--ease-slider-thumb-color, var(--color-blue-900));\n --thumb-size: var(--ease-slider-thumb-size, 18px);\n --track-height: var(--ease-slider-track-height, 4px);\n }\n\n [part=\"container\"] {\n flex: 1;\n display: grid;\n grid-template-columns: auto var(--ease-slider-value-width, 36px);\n grid-gap: var(--ease-slider-gap, 12px);\n }\n\n ease-input[part=\"value\"] {\n --ease-input-padding: 8px 0;\n min-width: 0;\n text-align: center;\n width: var(--ease-slider-value-width, 36px);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n input[part=\"control\"][type=\"range\"] {\n height: var(--ease-slider-height, 30px);\n margin: 0;\n padding: 0;\n appearance: none;\n background-color: transparent;\n width: 100%;\n cursor: pointer;\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: var(--track-height);\n background: linear-gradient(to right, var(--active-track-color) var(--progress, 0%), var(--track-color) var(--progress, 0%));\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-track {\n width: 100%;\n height: var(--track-height);\n background: var(--track-color);\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-progress {\n background-color: var(--active-track-color);\n height: var(--track-height);\n border-radius: calc(var(--track-height) / 2);\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n margin-top: calc((var(--track-height) - var(--thumb-size)) / 2);\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n }\n \n input[part=\"control\"][type=\"range\"]:hover::-webkit-slider-thumb {\n transform: scale(1.075);\n }\n \n input[part=\"control\"][type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(.975);\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-thumb {\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n border: none;\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n }\n\n input[part=\"control\"][type=\"range\"]:hover::-moz-range-thumb {\n transform: scale(1.075);\n }\n\n input[part=\"control\"][type=\"range\"]:active::-moz-range-thumb {\n transform: scale(.975);\n }\n `,\n template(this: Slider) {\n return html`\n <div part=\"container\">\n <input\n part=\"control\"\n type=\"range\"\n .min=${this.min ?? 0}\n .max=${this.max ?? 100}\n .step=${this.step ?? 1}\n .value=${String(this.value ?? 0)}\n ?disabled=${this.disabled}\n ?aria-disabled=${this.disabled}\n />\n \n <ease-input\n part=\"value\"\n type=\"number\"\n placeholder=\"-\"\n .disabled=${Boolean(this.disabled)}\n .value=${this.value === null || this.value === undefined ? '' : String(this.value)}\n />\n </div>\n `;\n }\n})\nexport class Slider extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n @Query<HTMLElement>('ease-input')\n accessor valueControl!: (HTMLElement & { value?: string | null }) | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? 0;\n\n control.value = String(value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.type = 'range';\n control.setAttribute('part', 'control');\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n this.updateProgress();\n }\n\n @Listen<Slider, Event, HTMLInputElement>('input', { selector: 'input[type=\"range\"]' })\n handleRangeInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<Slider, Event, HTMLInputElement>('change', { selector: 'input[type=\"range\"]' })\n handleRangeChange(event: Event, target?: HTMLInputElement | null): void {\n if (target) {\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('input', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueInput(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event: event.detail?.event ?? event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('change', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueChange(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event: event.detail?.event ?? event });\n }\n\n updateProgress(): void {\n if (!this.control) {\n return;\n }\n\n // Ensure numeric coercion for proper calculation\n const value = Number(this.value) || 0;\n const min = Number(this.min) || 0;\n const max = Number(this.max) || 100;\n const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;\n this.control.style.setProperty('--progress', `${Math.max(0, Math.min(100, percent))}%`);\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-toggle',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"control\"] {\n display: block;\n border-radius: var(--ease-toggle-radius, 10px);\n padding: var(--ease-toggle-padding, 4px);\n margin: 0;\n border: none;\n outline: none;\n appearance: none;\n cursor: pointer;\n background-color: var(--ease-toggle-on-background, var(--color-blue-900));\n transition: box-shadow 0.2s, background-color 0.2s;\n }\n\n [part=\"control\"] svg {\n width: var(--ease-toggle-width, 26px);\n height: var(--ease-toggle-height, 12px);\n display: block;\n fill: none;\n overflow: visible;\n\n path {\n transition: scale 0.2s, translate 0.2s, opacity 0.2s;\n stroke: var(--color-white);\n fill: var(--color-white-80);\n stroke-width: 1.5;\n }\n\n [part=\"default\"] {\n transform-origin: 6px 6px;\n }\n\n [part=\"active\"] {\n transform-origin: 23px 6px;\n }\n\n }\n\n :host([disabled]) [part=\"control\"] {\n cursor: default;\n opacity: 0.75;\n }\n\n :host([checked]) [part=\"control\"] {\n box-shadow: inset 0 0 0 1px var(--color-white-15), inset 0 1px 0 0 var(--color-white-20), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-12));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-30);\n }\n\n svg {\n [part=\"default\"] {\n scale: .25;\n translate: 10px 0;\n opacity: 0;\n }\n\n [part=\"active\"] {\n scale: 1;\n translate: 0 0;\n }\n }\n }\n\n :host(:not([checked])) [part=\"control\"] {\n background-color: var(--ease-toggle-off-background, var(--color-gray-800));\n box-shadow: inset 0 0 0 1px var(--color-white-10), inset 0 1px 0 0 var(--color-white-10), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-6));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-12);\n }\n\n svg {\n [part=\"default\"] {\n scale: 1;\n translate: 0 0;\n }\n\n [part=\"active\"] {\n scale: .25;\n translate: -10px 0;\n opacity: 0;\n }\n }\n }\n `,\n template(this: Toggle) {\n return html`\n <button part=\"control\" type=\"button\" aria-pressed=\"false\">\n <svg viewBox=\"0 0 26 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"url(#${this.filterId})\">\n <path part=\"default\" d=\"M0 6C0 2.68629 2.68629 0 6 0V0C9.31371 0 12 2.68629 12 6V6C12 9.31371 9.31371 12 6 12V12C2.68629 12 0 9.31371 0 6V6Z\" />\n <path part=\"active\" d=\"M14 6C14 2.68629 16.6863 0 20 0V0C23.3137 0 26 2.68629 26 6V6C26 9.31371 23.3137 12 20 12V12C16.6863 12 14 9.31371 14 6V6Z\" />\n </svg>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Toggle extends HTMLElement {\n declare requestRender: () => void;\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n filterId: string = `filter-${crypto.randomUUID()}`;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.setAttribute('aria-pressed', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Toggle, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'toggle', { value: this.checked, event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-field',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n [part=\"field\"] {\n display: grid;\n grid-template-columns: var(--ease-field-label-width, 36%) auto;\n column-gap: var(--ease-field-column-gap, 12px);\n row-gap: var(--ease-field-row-gap, 6px);\n align-items: center;\n width: 100%;\n min-height: var(--ease-field-min-height, 30px);\n margin: 0;\n padding: 0;\n }\n\n :host([full-width]) [part=\"field\"] {\n grid-template-columns: 1fr;\n }\n\n label {\n grid-column: 1;\n font-size: var(--ease-field-label-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-field-label-line-height, 1.25);\n font-weight: var(--ease-field-label-font-weight, 400);\n text-wrap: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-left: var(--ease-field-label-padding-left, 4px);\n box-sizing: border-box;\n display: block;\n max-width: 100%;\n color: var(--ease-field-label-color, var(--color-gray-600));\n }\n\n [part=\"content\"] {\n grid-column: 2;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n :host([full-width]) [part=\"content\"] {\n grid-column: 1;\n align-items: stretch;\n }\n `,\n template(this: Field) {\n return html`\n <div part=\"field\">\n <label>\n ${this.label ?? ''}\n </label>\n\n <div part=\"content\" class=${this.fullWidth ? 'full-width' : ''}>\n <slot></slot>\n </div>\n </div>\n `;\n }\n})\nexport class Field extends HTMLElement {\n @Prop<string | null>({ reflect: true })\n accessor label!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth = false;\n}\n","import { html, nothing, type TemplateResult } from 'lit-html';\n\nimport { setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n/**\n * Event detail for tab change events\n */\nexport interface TabChangeEventDetail {\n /** The index of the active tab */\n index: number;\n /** The tab id */\n id: string;\n /** The original event */\n event: Event;\n}\n\n/**\n * Panel component - visual container with optional tabs and header actions.\n *\n * Use this component when you want the panel UI without state management,\n * or wrap it around `<ease-state>` for full functionality.\n *\n * @tag ease-panel\n *\n * @slot headline - Panel title text (hidden when tabs are present)\n * @slot actions - Header action buttons, links, or dropdowns\n * @slot - Default slot for main content\n * @slot tab-{id} - Tab panel content (use `data-tab-label` for display name)\n * @slot footer - Footer content below all panels\n *\n * @csspart section - Outer container\n * @csspart header - Header row containing headline/tabs and actions\n * @csspart headline - Title element\n * @csspart tabs - Tab button container\n * @csspart tab - Individual tab button\n * @csspart actions - Actions container\n * @csspart content - Content wrapper (handles height animations)\n * @csspart body - Inner body container\n * @csspart tab-panel - Individual tab panel\n * @csspart footer - Footer container\n *\n * @fires tab-change - Fired when the active tab changes\n */\n@Component({\n tag: 'ease-panel',\n shadowMode: 'open',\n styles: `\n :host {\n --ease-panel-transition-duration: 120ms;\n --ease-panel-transition-easing: cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"section\"] {\n display: block;\n width: 100%;\n max-width: var(--ease-panel-max-width, 332px);\n border-radius: var(--ease-panel-radius, 12px);\n border: 1px solid var(--ease-panel-border-color, var(--color-white-6));\n background-clip: padding-box;\n background: var(--ease-panel-background, var(--color-gray-1000));\n box-shadow: var(--ease-panel-shadow, 0 0 40px 0 var(--color-white-2) inset);\n box-sizing: border-box;\n padding: var(--ease-panel-padding, 12px);\n margin: auto;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n margin-bottom: 12px;\n }\n\n [part=\"header\"]:not(:has([part=\"headline\"] slot[name=\"headline\"]::slotted(*))):not(:has([part=\"tabs\"]:not(:empty))):not(:has([part=\"actions\"] slot[name=\"actions\"]::slotted(*))) {\n display: none;\n margin-bottom: 0;\n }\n\n [part=\"headline\"] {\n font-size: var(--ease-panel-title-font-size, 14px);\n font-weight: var(--ease-panel-title-font-weight, 500);\n line-height: var(--ease-panel-title-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-title-color, var(--color-blue-100));\n margin: 0 0 0 4px;\n flex-grow: 1;\n text-ellipsis: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"headline\"]:has(+ [part=\"tabs\"]:not(:empty)) {\n display: none;\n }\n\n [part=\"tabs\"] {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-grow: 1;\n margin: 0 0 0 4px;\n }\n\n [part=\"tabs\"]:empty {\n display: none;\n }\n\n [part=\"tab\"] {\n appearance: none;\n font-size: var(--ease-panel-tab-font-size, 13px);\n font-weight: var(--ease-panel-tab-font-weight, 500);\n line-height: var(--ease-panel-tab-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-tab-color, var(--color-gray-600));\n background: transparent;\n border: none;\n padding: 4px 8px;\n margin: 0;\n cursor: pointer;\n border-radius: var(--ease-panel-tab-radius, 6px);\n transition: color 0.2s, background-color 0.2s;\n }\n\n [part=\"tab\"]:hover {\n color: var(--ease-panel-tab-color-hover, var(--color-blue-100));\n }\n\n [part=\"tab\"][aria-selected=\"true\"] {\n color: var(--ease-panel-tab-color-active, var(--color-blue-100));\n background: var(--ease-panel-tab-background-active, var(--color-white-4));\n }\n\n [part=\"actions\"] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n slot[name=\"actions\"]::slotted(button),\n slot[name=\"actions\"]::slotted(a) {\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n\n appearance: none;\n flex: 0 0 24px;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 4px;\n margin: 0;\n cursor: pointer;\n color: var(--color-gray-600);\n transition: color 0.2s;\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n slot[name=\"actions\"]::slotted(button:hover),\n slot[name=\"actions\"]::slotted(button:focus-visible),\n slot[name=\"actions\"]::slotted(a:hover),\n slot[name=\"actions\"]::slotted(a:focus-visible) {\n color: var(--color-blue-100);\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown) {\n flex: 0 0 auto;\n width: auto;\n\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n --ease-dropdown-trigger-padding: 4px;\n --ease-dropdown-radius: 6px;\n --ease-dropdown-background: transparent;\n --ease-dropdown-background-hover: transparent;\n --ease-dropdown-shadow: none;\n --ease-dropdown-color: var(--color-gray-600);\n --ease-popover-placement: bottom-end;\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown:hover),\n slot[name=\"actions\"]::slotted(ease-dropdown:focus-within) {\n --ease-dropdown-color: var(--color-blue-100);\n }\n\n [part=\"content\"] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n margin: auto;\n overflow: hidden;\n }\n\n [part=\"content\"][data-animating=\"true\"] {\n transition: height var(--ease-panel-transition-duration) var(--ease-panel-transition-easing);\n }\n\n [part=\"body\"] {\n width: 100%;\n position: relative;\n }\n\n [part=\"tab-panel\"] {\n width: 100%;\n pointer-events: none;\n display: none;\n }\n\n [part=\"tab-panel\"][data-state=\"active\"] {\n display: block;\n pointer-events: auto;\n }\n\n [part=\"tab-panel\"][data-state=\"hidden\"] {\n display: none;\n pointer-events: none;\n }\n\n [part=\"footer\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--ease-panel-footer-padding, 12px);\n box-sizing: border-box;\n border-top: 1px solid var(--color-white-4);\n\n &:not(:has([data-has-content=\"true\"])) {\n display: none;\n }\n }\n\n ::slotted(:not([slot])),\n ::slotted([slot^=\"tab-\"]) {\n display: grid;\n gap: 12px;\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class Panel extends HTMLElement {\n declare requestRender: () => void;\n\n #tabs: { id: string; label: string }[] = [];\n #isAnimating = false;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n attribute: 'active-tab',\n defaultValue: 0,\n onChange(next, previous) {\n const self = this as Panel;\n if (next !== previous && previous !== undefined) {\n self.handleActiveTabChange(previous, next);\n }\n }\n })\n accessor activeTab: number = 0;\n\n /** @internal */\n handleActiveTabChange(previous: number, next: number): void {\n this.performTabAnimation(previous, next);\n }\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor contentElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[part=\"body\"]')\n accessor bodyElement!: HTMLElement | null;\n\n /**\n * Get the tab configuration\n */\n get tabs(): ReadonlyArray<{ id: string; label: string }> {\n return this.#tabs;\n }\n\n /**\n * Switch to a specific tab by index\n * @param index - The tab index (0-based)\n */\n setTab(index: number): void {\n if (index >= 0 && index < this.#tabs.length && index !== this.activeTab) {\n this.activeTab = index;\n }\n }\n\n connectedCallback(): void {\n this.#syncTabs();\n }\n\n afterRender(): void {\n this.#syncTabs();\n }\n\n render(): TemplateResult {\n const hasTabs = this.#tabs.length > 0;\n\n return html`\n <section part=\"section\">\n <div part=\"header\">\n <h3 part=\"headline\"><slot name=\"headline\"></slot></h3>\n ${this.#renderTabs()}\n <div part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div part=\"content\">\n <div part=\"body\">\n ${hasTabs ? this.#renderTabPanels() : html`<slot></slot>`}\n </div>\n </div>\n <div part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n </section>\n `;\n }\n\n #renderTabs(): TemplateResult | typeof nothing {\n if (this.#tabs.length === 0) {\n return nothing;\n }\n\n return html`\n <div part=\"tabs\" role=\"tablist\">\n ${this.#tabs.map(\n (tab, index) => html`\n <button\n part=\"tab\"\n role=\"tab\"\n aria-selected=${index === this.activeTab ? 'true' : 'false'}\n aria-controls=${`panel-${tab.id}`}\n tabindex=${index === this.activeTab ? 0 : -1}\n @click=${(e: Event) => this.#handleTabClick(index, tab.id, e)}\n @keydown=${(e: KeyboardEvent) => this.#handleTabKeydown(e, index)}\n >\n ${tab.label}\n </button>\n `\n )}\n </div>\n `;\n }\n\n #renderTabPanels(): TemplateResult {\n return html`\n ${this.#tabs.map(\n (tab, index) => html`\n <div\n part=\"tab-panel\"\n role=\"tabpanel\"\n id=${`panel-${tab.id}`}\n aria-labelledby=${`tab-${tab.id}`}\n data-state=${index === this.activeTab ? 'active' : 'hidden'}\n data-index=${index}\n >\n <slot name=${`tab-${tab.id}`}></slot>\n </div>\n `\n )}\n `;\n }\n\n #handleTabClick(index: number, id: string, event: Event): void {\n if (index === this.activeTab) {\n return;\n }\n\n this.activeTab = index;\n\n this.dispatchEvent(\n new CustomEvent<TabChangeEventDetail>('tab-change', {\n detail: { index, id, event },\n bubbles: true,\n composed: true\n })\n );\n }\n\n #handleTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : this.#tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < this.#tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.#tabs.length - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n this.activeTab = newIndex;\n\n // Focus the new tab button\n queueMicrotask(() => {\n const tabButtons = this.shadowRoot?.querySelectorAll('[part=\"tab\"]');\n const newTabButton = tabButtons?.[newIndex] as HTMLButtonElement | undefined;\n newTabButton?.focus();\n });\n }\n }\n\n async performTabAnimation(fromIndex: number, toIndex: number): Promise<void> {\n if (this.#isAnimating) {\n return;\n }\n\n this.#isAnimating = true;\n\n const duration = 120;\n const easing = 'cubic-bezier(.25, 0, .5, 1)';\n\n const content = this.contentElement;\n\n if (!content) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Get the panels by data-index attribute for reliability\n const fromPanel = this.shadowRoot?.querySelector(\n `[part=\"tab-panel\"][data-index=\"${fromIndex}\"]`\n ) as HTMLElement | null;\n const toPanel = this.shadowRoot?.querySelector(`[part=\"tab-panel\"][data-index=\"${toIndex}\"]`) as HTMLElement | null;\n\n if (!fromPanel || !toPanel) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Lock the current height\n const startHeight = content.getBoundingClientRect().height;\n content.style.height = `${startHeight}px`;\n\n // FIX: Ensure the new panel is hidden immediately.\n toPanel.style.display = 'none';\n toPanel.style.opacity = '0';\n\n // Fade out old content via WAAPI\n try {\n const fadeOut = fromPanel.animate([{ opacity: 1 }, { opacity: 0 }], { duration, easing, fill: 'forwards' });\n await fadeOut.finished;\n fadeOut.cancel();\n } catch {\n // ignore\n }\n\n fromPanel.setAttribute('data-state', 'hidden');\n\n // Prepare and measure new panel while completely invisible\n const previousToState = toPanel.getAttribute('data-state');\n\n toPanel.style.display = 'block';\n toPanel.style.visibility = 'hidden';\n toPanel.style.opacity = '0';\n\n // Force layout, then measure\n void toPanel.offsetHeight;\n const endHeight = toPanel.getBoundingClientRect().height;\n\n // Animate height\n if (startHeight !== endHeight) {\n content.setAttribute('data-animating', 'true');\n void content.offsetHeight;\n content.style.height = `${endHeight}px`;\n await this.#wait(duration);\n }\n\n // Show panel but keep opacity at 0, then fade in\n toPanel.style.visibility = 'visible';\n toPanel.style.opacity = '0';\n\n void toPanel.offsetHeight;\n\n try {\n const fadeIn = toPanel.animate([{ opacity: 0 }, { opacity: 1 }], { duration, easing, fill: 'forwards' });\n await fadeIn.finished;\n fadeIn.cancel();\n } catch {\n // ignore\n }\n\n // Finalize new tab state and cleanup\n toPanel.style.display = '';\n toPanel.style.visibility = '';\n toPanel.style.opacity = '';\n\n if (previousToState !== 'active') {\n toPanel.setAttribute('data-state', 'active');\n }\n\n content.style.height = '';\n content.removeAttribute('data-animating');\n this.#isAnimating = false;\n }\n\n #wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n #syncTabs(): void {\n const tabs: { id: string; label: string }[] = [];\n\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (slot?.startsWith('tab-')) {\n const id = slot.replace('tab-', '');\n const label = child.getAttribute('data-tab-label') || id;\n tabs.push({ id, label });\n }\n }\n\n this.#tabs = tabs.slice(0, 3);\n\n if (this.activeTab >= this.#tabs.length && this.#tabs.length > 0) {\n this.activeTab = 0;\n }\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"footer\"]' })\n onFooterSlotChange(): void {\n this.updateFooterAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot:not([name])' })\n onDefaultSlotChange(): void {\n this.#syncTabs();\n this.requestRender();\n }\n\n private updateFooterAttribute(): void {\n const footer = this.shadowRoot?.querySelector('[part=\"footer\"]');\n\n if (!footer) {\n return;\n }\n\n const footerSlot = this.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement;\n const hasFooter = Boolean(footerSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(footer, 'data-has-content', hasFooter);\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { CONTROL_CHANGE_EVENT, type ControlEventDetail, dispatchControlEvent } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n name?: string;\n};\n\ntype StateChangeCallback<T = unknown> = (value: T, name: string) => void;\ntype StateSubscription = { unsubscribe: () => void };\n\n/**\n * Event detail for state change events\n */\nexport interface StateChangeEventDetail {\n /** The name of the control that changed */\n name: string;\n /** The new value */\n value: unknown;\n /** The complete state object */\n state: Record<string, unknown>;\n /** The original event */\n event: Event;\n}\n\nconst readControlValue = (element: ControlElement): unknown => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return element.value;\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked;\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n\nconst getControlName = (element: ControlElement): string | null => {\n if (typeof element.name === 'string' && element.name) {\n return element.name;\n }\n return element.getAttribute?.('name') ?? null;\n};\n\n/**\n * State aggregator component - collects and manages state from child controls.\n *\n * This component provides state management without any visual styling.\n * Use it standalone or wrap it with `<ease-panel>` for a styled container.\n *\n * @tag ease-state\n *\n * @slot - Default slot for controls\n *\n * @fires state-change - Fired when any control value changes\n *\n * @example\n * ```html\n * <!-- Standalone usage (no panel) -->\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * <ease-field label=\"Loop\">\n * <ease-toggle name=\"loop\"></ease-toggle>\n * </ease-field>\n * </ease-state>\n *\n * <!-- With panel wrapper -->\n * <ease-panel>\n * <span slot=\"headline\">Animation Controls</span>\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * </ease-state>\n * </ease-panel>\n * ```\n */\n@Component({\n tag: 'ease-state',\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: var(--ease-state-gap, 12px);\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class State extends HTMLElement {\n declare requestRender: () => void;\n\n #controls: Map<string, ControlElement> = new Map();\n #state: Record<string, unknown> = {};\n #initialState: Record<string, unknown> = {};\n #subscribers: Map<string | '*', Set<StateChangeCallback>> = new Map();\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Query<HTMLSlotElement>('slot')\n accessor defaultSlot!: HTMLSlotElement | null;\n\n /**\n * Get the current state object with all control values\n */\n get state(): Readonly<Record<string, unknown>> {\n return { ...this.#state };\n }\n\n /**\n * Get a specific control value by name\n * @param name - The control name\n * @returns The control value or undefined\n */\n get(name: string): unknown {\n return this.#state[name];\n }\n\n /**\n * Set a control value programmatically\n * @param name - The control name\n * @param value - The new value\n */\n set(name: string, value: unknown): void {\n const control = this.#controls.get(name);\n if (control) {\n // Update the control element\n if ('value' in control) {\n (control as { value: unknown }).value = value;\n } else if (typeof value === 'boolean' && 'checked' in control) {\n (control as { checked: boolean }).checked = value;\n }\n }\n\n this.#updateState(name, value, new Event('programmatic'));\n }\n\n /**\n * Subscribe to state changes\n * @param nameOrCallback - Control name to watch, '*' for all, or callback for all changes\n * @param callback - Callback when using name filter\n * @returns Subscription with unsubscribe method\n */\n subscribe(callback: StateChangeCallback): StateSubscription;\n subscribe(name: string, callback: StateChangeCallback): StateSubscription;\n subscribe(nameOrCallback: string | StateChangeCallback, callback?: StateChangeCallback): StateSubscription {\n let name: string;\n let cb: StateChangeCallback;\n\n if (typeof nameOrCallback === 'function') {\n name = '*';\n cb = nameOrCallback;\n } else {\n name = nameOrCallback;\n if (!callback) {\n throw new Error('[ease-state] subscribe(name, callback) requires a callback');\n }\n cb = callback;\n }\n\n if (!this.#subscribers.has(name)) {\n this.#subscribers.set(name, new Set());\n }\n this.#subscribers.get(name)?.add(cb);\n\n return {\n unsubscribe: () => {\n this.#subscribers.get(name)?.delete(cb);\n }\n };\n }\n\n /**\n * Reset all controls to their initial values\n */\n reset(): void {\n for (const [name, value] of Object.entries(this.#initialState)) {\n this.set(name, value);\n }\n }\n\n connectedCallback(): void {\n this.#attach();\n this.defaultSlot?.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n disconnectedCallback(): void {\n this.#detach();\n this.defaultSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('input', { target: (host) => host })\n handleInternalInput(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('change', { target: (host) => host })\n handleInternalChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>(CONTROL_CHANGE_EVENT, { target: (host) => host })\n handleControlChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n #handleControlEvent(event: Event | CustomEvent<ControlEventDetail>): void {\n if ('detail' in event && event.detail?.name) {\n this.#updateState(event.detail.name, event.detail.value, event);\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n const control = event.target as ControlElement;\n const name = getControlName(control);\n\n if (!name || !this.#controls.has(name)) {\n return;\n }\n\n const value = readControlValue(control);\n this.#updateState(name, value, event);\n }\n\n #handleSlotChange = (): void => {\n this.#detach();\n this.#attach();\n };\n\n #attach(): void {\n const slot = this.defaultSlot;\n if (!slot) {\n return;\n }\n\n const findControls = (el: Element): ControlElement[] => {\n const controls: ControlElement[] = [];\n const name = getControlName(el as ControlElement);\n\n if (name) {\n controls.push(el as ControlElement);\n }\n\n if (el.shadowRoot) {\n for (const child of el.shadowRoot.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n }\n\n for (const child of el.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n\n return controls;\n };\n\n this.#controls.clear();\n this.#state = {};\n\n const elements = slot.assignedElements({ flatten: true });\n\n for (const element of elements) {\n const controls = findControls(element);\n for (const control of controls) {\n const name = getControlName(control);\n if (name) {\n this.#controls.set(name, control);\n const value = readControlValue(control);\n this.#state[name] = value;\n this.#initialState[name] = value;\n }\n }\n }\n\n const first = this.#controls.values().next().value;\n if (first) {\n const name = getControlName(first);\n this.value = name && this.#state[name] != null ? String(this.#state[name]) : null;\n }\n }\n\n #detach(): void {\n this.#controls.clear();\n }\n\n #updateState(name: string, value: unknown, event: Event): void {\n const prevValue = this.#state[name];\n if (prevValue === value) {\n return;\n }\n\n this.#state[name] = value;\n\n this.value = String(value);\n\n for (const cb of this.#subscribers.get(name) ?? []) {\n cb(value, name);\n }\n for (const cb of this.#subscribers.get('*') ?? []) {\n cb(value, name);\n }\n\n dispatchControlEvent(this, 'state-change', {\n name,\n value,\n state: this.state,\n event\n } as StateChangeEventDetail & { event: Event });\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-tooltip',\n shadowMode: 'open',\n styles: `\n :host {\n display: inline-block;\n position: relative;\n }\n\n ease-popover::part(content) {\n inset: auto;\n }\n\n [data-tooltip-content] {\n background-color: var(--ease-tooltip-background, var(--color-gray-400));\n color: var(--ease-tooltip-color, var(--color-gray-900));\n padding: var(--ease-tooltip-padding, 4px 8px);\n border-radius: var(--ease-tooltip-radius, 4px);\n font-family: var(--ease-font-family, inherit);\n font-size: var(--ease-tooltip-font-size, 10px);\n font-weight: var(--ease-tooltip-font-weight, 500);\n max-width: var(--ease-tooltip-max-width, 220px);\n box-shadow: var(--ease-tooltip-shadow, 0 2px 8px rgba(0, 0, 0, 0.2));\n display: none;\n }\n\n :host([open]) [data-tooltip-content] {\n display: block;\n }\n `\n})\nexport class Tooltip extends HTMLElement {\n #hoverTimer: number | null = null;\n\n #trigger: HTMLElement | null = null;\n #content: HTMLElement | null = null;\n\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Tooltip)._handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 300 })\n accessor delay = 300;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'top-center' })\n accessor placement: Placement = 'top-center';\n\n @Query<HTMLElement>('[slot=\"trigger\"]')\n accessor triggerElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[data-tooltip-content]')\n accessor contentElement!: HTMLElement | null;\n\n disconnectedCallback(): void {\n this.#clearTimer();\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n this.#trigger = null;\n }\n\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n this.#content = null;\n }\n }\n\n afterRender(): void {\n this.#updateListeners();\n const content = this.contentElement;\n const isVisible = this.open;\n\n if (content) {\n content.setAttribute('role', 'tooltip');\n content.setAttribute('aria-hidden', isVisible ? 'false' : 'true');\n content.dataset.open = isVisible ? 'true' : 'false';\n content.hidden = !isVisible;\n }\n }\n\n render(): TemplateResult {\n return html`\n <ease-popover .placement=${this.placement} ?open=${this.open}>\n <slot name=\"trigger\" slot=\"trigger\"></slot>\n <div\n data-tooltip-content\n role=\"tooltip\"\n data-open=${this.open ? 'true' : 'false'}\n ?hidden=${!this.open}\n >\n <slot></slot>\n </div>\n </ease-popover>\n `;\n }\n\n _handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#clearTimer();\n }\n\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Tooltip>({\n content: (host) => host.contentElement,\n triggers: (host) => [host.triggerElement],\n disabled: (host) => !host.open\n })\n handleOutsideDismiss(): void {\n if (!this.open) {\n return;\n }\n\n this.#clearTimer();\n this.open = false;\n }\n\n #clearTimer(): void {\n if (this.#hoverTimer !== null) {\n window.clearTimeout(this.#hoverTimer);\n this.#hoverTimer = null;\n }\n }\n\n #startTimer(callback: () => void): void {\n this.#clearTimer();\n const wait = this.delay ?? 0;\n\n if (wait > 0) {\n this.#hoverTimer = window.setTimeout(callback, wait);\n } else {\n callback();\n }\n }\n\n #handleEnter = (): void => {\n this.#startTimer(() => {\n this.open = true;\n });\n };\n\n #handleLeave = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #handleFocusIn = (): void => {\n this.#clearTimer();\n this.open = true;\n };\n\n #handleFocusOut = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #updateListeners(): void {\n const trigger = this.triggerElement;\n const content = this.contentElement ?? null;\n\n if (trigger !== this.#trigger) {\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n }\n if (trigger) {\n trigger.addEventListener('mouseenter', this.#handleEnter);\n trigger.addEventListener('mouseleave', this.#handleLeave);\n trigger.addEventListener('focusin', this.#handleFocusIn);\n trigger.addEventListener('focusout', this.#handleFocusOut);\n }\n this.#trigger = trigger;\n }\n\n if (content !== this.#content) {\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n }\n if (content) {\n content.addEventListener('mouseenter', this.#handleEnter);\n content.addEventListener('mouseleave', this.#handleLeave);\n }\n this.#content = content ?? null;\n }\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype LogoLoaderState = 'idle' | 'intro' | 'loop' | 'exit';\n\nexport type LogoIntroVariant = 'wave' | 'particle';\n\ninterface DotData {\n id: string;\n cx: number;\n cy: number;\n}\n\nconst CENTER = { x: 74, y: 74 };\n\nconst DOTS_DATA: DotData[] = [\n { id: 'dot-1', cx: 7.22725, cy: 73.99975 },\n { id: 'dot-2', cx: 8.0, cy: 107.63685 },\n { id: 'dot-3', cx: 41.36365, cy: 7.72734 },\n { id: 'dot-4', cx: 40.36105, cy: 40.36375 },\n { id: 'dot-5', cx: 40.36105, cy: 107.63625 },\n { id: 'dot-6', cx: 41.36365, cy: 140.77285 },\n { id: 'dot-7', cx: 73.99995, cy: 7.22725 },\n { id: 'dot-8', cx: 73.99995, cy: 140.77325 },\n { id: 'dot-9', cx: 108.13785, cy: 7.72734 },\n { id: 'dot-10', cx: 107.88425, cy: 73.99975 },\n { id: 'dot-11', cx: 108.13785, cy: 140.77285 },\n { id: 'dot-12', cx: 141.27285, cy: 40.86385 },\n { id: 'dot-13', cx: 140.77225, cy: 73.99975 },\n { id: 'dot-14', cx: 141.27285, cy: 107.63685 },\n { id: 'dot-15', cx: 40.36165, cy: 73.99925 },\n { id: 'dot-16', cx: 74.00125, cy: 40.36345 },\n { id: 'dot-17', cx: 74.00125, cy: 73.99925 },\n { id: 'dot-18', cx: 74.00125, cy: 107.63585 },\n { id: 'dot-19', cx: 107.63485, cy: 40.36345 },\n { id: 'dot-20', cx: 107.63485, cy: 107.63585 },\n { id: 'dot-21', cx: 141.77, cy: 8.23 },\n { id: 'dot-22', cx: 141.77, cy: 140.77 },\n { id: 'dot-23', cx: 7.73019, cy: 140.77 },\n { id: 'dot-24', cx: 7.72018, cy: 8.22 },\n { id: 'dot-25', cx: 7.73518, cy: 40.865 }\n];\n\nconst INNER_DOT_IDS = ['dot-19', 'dot-20', 'dot-18', 'dot-15', 'dot-17', 'dot-16'];\n\nconst OUTER_DOT_IDS = DOTS_DATA.map((d) => d.id).filter((id) => !INNER_DOT_IDS.includes(id));\n\nconst forceReflow = (el: Element): void => {\n void window.getComputedStyle(el).opacity;\n};\n\nconst getAngle = (dot: DotData): number => Math.atan2(dot.cy - CENTER.y, dot.cx - CENTER.x);\n\nconst sortByAngle = (ids: string[]): DotData[] =>\n ids\n .map((id) => DOTS_DATA.find((d) => d.id === id))\n .filter((dot): dot is DotData => dot != null)\n .sort((a, b) => getAngle(a) - getAngle(b));\n\nconst LOOP_DURATION = 1500;\nconst ROTATION_DURATION = 600;\n\n@Component({\n tag: 'ease-logo-loader',\n styles: `\n :host {\n display: inline-block;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);\n --ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);\n \n --dot-dark: var(--color-gray-0, oklab(98.81% 0 0));\n --dot-medium: var(--color-gray-600, oklab(65.21% -0.0019 -0.0144));\n --dot-light: var(--color-gray-700, oklab(37.92% -0.0006 -0.0179));\n --dot-accent: var(--color-blue-600, oklab(76.85% 0.0462 -0.1115));\n }\n\n .logo-loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--logo-loader-size, 36px);\n height: var(--logo-loader-size, 36px);\n }\n\n .logo-loader__svg {\n width: 100%;\n height: 100%;\n display: block;\n transform-origin: center;\n overflow: visible;\n }\n\n .logo-loader__svg rect {\n transform-box: fill-box;\n transform-origin: center;\n transition:\n transform 380ms var(--ease-out),\n fill 320ms ease,\n opacity 320ms ease;\n }\n\n /* State: intro - dots are animating in */\n .logo-loader[data-state='intro'] .logo-loader__svg rect {\n opacity: 0;\n transform: scale(0);\n }\n\n /* Outer dots loading animation */\n @keyframes loading-outer {\n 0%, 100% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-light);\n opacity: 0.4;\n }\n 15% {\n transform: scale(calc(var(--base-scale, 1) * 1.35));\n fill: var(--dot-dark);\n opacity: 1;\n }\n 35% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-medium);\n opacity: 0.8;\n }\n }\n\n /* Inner dots loading animation */\n @keyframes loading-inner {\n 0%, 100% {\n transform: scale(var(--base-scale, 0.6));\n opacity: 0.7;\n fill: var(--dot-medium);\n }\n 50% {\n transform: scale(calc(var(--base-scale, 0.6) * 1.9));\n opacity: 0.1;\n fill: var(--dot-light);\n }\n }\n\n .dot-loading {\n animation-name: loading-outer;\n animation-duration: 600ms;\n animation-timing-function: cubic-bezier(0.3, 0.6, 0.4, 1);\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n .dot-loading-inner {\n animation-name: loading-inner;\n animation-duration: 1500ms;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n /* Exit animation class */\n .restoring {\n transition:\n transform 450ms cubic-bezier(0.25, 0, 0.5, 1),\n fill 350ms ease,\n opacity 350ms ease;\n }\n\n /* Particle intro animation */\n @keyframes particle-bounce {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.25); }\n 65% { transform: scale(0.95); }\n 85% { transform: scale(1.05); }\n 100% { transform: scale(1); }\n }\n\n .particle-bounce {\n animation: particle-bounce 400ms var(--ease-overshoot) both;\n }\n\n /* Shockwave ring animation */\n @keyframes shockwave-expansion {\n 0% {\n transform: scale(1);\n opacity: 1;\n stroke-width: 1.5px;\n }\n 100% {\n transform: scale(4);\n opacity: 0;\n stroke-width: 0.5px;\n }\n }\n\n .shockwave-ring {\n fill: none;\n stroke: var(--dot-dark);\n transform-box: fill-box;\n transform-origin: center;\n animation: shockwave-expansion 900ms cubic-bezier(0.165, 0.84, 0.44, 1) both;\n }\n\n /* Pulse wave for intro */\n @keyframes pulse-wave {\n 0% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.2);\n filter: brightness(1.6);\n fill: var(--dot-light);\n }\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n }\n\n .dot-pulse-wave {\n animation: pulse-wave var(--pulse-duration, 500ms) var(--pulse-delay, 0ms) cubic-bezier(0.455, 0.03, 0.515, 0.955);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .logo-loader__svg {\n transition: none;\n transform: scale(1);\n }\n .logo-loader__svg rect {\n animation: none !important;\n transition: none;\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n template(host: LogoLoader) {\n const size = host.size ?? 36;\n const state = host.state;\n const ariaLabel = host.ariaLabel;\n const ariaLabelTrimmed = ariaLabel?.trim() ?? '';\n\n return html`\n <div\n class=\"logo-loader\"\n data-state=${state}\n style=${`--logo-loader-size:${size}px;`}\n >\n <svg\n viewBox=\"0 0 148 148\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"logo-loader__svg\"\n role=${ariaLabelTrimmed ? 'img' : null}\n aria-label=${ariaLabelTrimmed || null}\n aria-hidden=${ariaLabelTrimmed ? null : 'true'}\n focusable=${ariaLabelTrimmed ? null : 'false'}\n >\n <g class=\"shockwave-container\"></g>\n \n <rect id=\"dot-1\" x=\"0.5\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-2\" x=\"3.5\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-3\" x=\"36.8788\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-4\" x=\"33.6338\" y=\"33.6365\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-5\" x=\"33.6338\" y=\"100.909\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-6\" x=\"36.8788\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-7\" x=\"67.2727\" y=\"0.5\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-8\" x=\"67.2727\" y=\"134.046\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-9\" x=\"103.653\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-10\" x=\"101.407\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-11\" x=\"103.653\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-12\" x=\"136.788\" y=\"36.379\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-13\" x=\"134.045\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-14\" x=\"136.788\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n \n <rect id=\"dot-15\" x=\"26.9071\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-16\" x=\"60.5467\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-17\" x=\"60.5467\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-18\" x=\"60.5467\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-19\" x=\"94.1803\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-20\" x=\"94.1803\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n \n <rect id=\"dot-21\" x=\"139.53\" y=\"5.98999\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-22\" x=\"139.53\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-23\" x=\"5.49019\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-24\" x=\"5.48018\" y=\"5.97998\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-25\" x=\"4.37018\" y=\"37.5\" width=\"6.73\" height=\"6.73\" rx=\"3.365\" fill=\"var(--dot-light)\" />\n </svg>\n </div>\n `;\n }\n})\nexport class LogoLoader extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, LogoLoader>({\n type: Boolean,\n attribute: 'loading',\n defaultValue: false,\n onChange(next) {\n (this as LogoLoader).handleLoadingChange(next);\n }\n })\n accessor loading = false;\n\n @Prop<LogoIntroVariant, LogoLoader>({\n type: 'string',\n attribute: 'intro',\n defaultValue: 'wave'\n })\n accessor intro: LogoIntroVariant = 'wave';\n\n @Prop<number | null, LogoLoader>({\n type: Number,\n attribute: 'size',\n defaultValue: 36\n })\n accessor size: number | null = 36;\n\n @Prop<string | null, LogoLoader>({\n type: 'string',\n attribute: 'aria-label',\n defaultValue: null\n })\n accessor ariaLabel: string | null = null;\n\n #state: LogoLoaderState = 'intro';\n #loopStartTime = 0;\n #animationTimers: number[] = [];\n #introCompleted = false;\n\n get state(): LogoLoaderState {\n return this.#state;\n }\n\n set state(value: LogoLoaderState) {\n if (this.#state === value) {\n return;\n }\n this.#state = value;\n if (typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n connectedCallback(): void {\n // Wait for first render before starting intro animation\n // The Component decorator renders after connectedCallback via requestAnimationFrame\n requestAnimationFrame(() => {\n // Double RAF to ensure render is complete\n requestAnimationFrame(() => {\n if (this.loading) {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.#startLoopAnimation();\n });\n } else {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.state = 'idle';\n });\n }\n });\n });\n }\n\n disconnectedCallback(): void {\n this.#clearTimers();\n }\n\n #clearTimers(): void {\n for (const id of this.#animationTimers) {\n window.clearTimeout(id);\n }\n this.#animationTimers = [];\n }\n\n #setTimeout(fn: () => void, delay: number): number {\n const id = window.setTimeout(fn, delay);\n this.#animationTimers.push(id);\n return id;\n }\n\n #getDot(id: string): SVGRectElement | null {\n const svg = this.shadowRoot?.querySelector('.logo-loader__svg');\n return svg?.querySelector(`#${id}`) as SVGRectElement | null;\n }\n\n #getShockwaveContainer(): SVGGElement | null {\n return this.shadowRoot?.querySelector('.shockwave-container') as SVGGElement | null;\n }\n\n #resetDotsState(instant = false, keepOpacity = false): void {\n const container = this.#getShockwaveContainer();\n if (container) {\n container.innerHTML = '';\n }\n\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n\n if (instant) {\n el.style.transition = 'none';\n } else {\n el.style.transition = '';\n }\n\n // Remove all animation classes\n el.classList.remove('dot-loading', 'dot-loading-inner', 'restoring', 'dot-pulse-wave', 'particle-bounce');\n\n el.style.removeProperty('--base-scale');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--pulse-delay');\n el.style.removeProperty('--pulse-duration');\n\n // Reset inline styles\n el.style.transform = 'scale(1)';\n\n if (!keepOpacity) {\n el.style.opacity = instant ? '1' : '';\n }\n el.style.removeProperty('fill');\n el.style.removeProperty('filter');\n\n if (instant) {\n forceReflow(el);\n el.style.removeProperty('transition');\n }\n }\n }\n\n /** Ensure all dots are visible */\n #ensureVisibility(): void {\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (el && (el.style.opacity === '0' || el.style.opacity === '')) {\n el.style.transition = 'opacity 200ms ease-out';\n el.style.opacity = '1';\n }\n }\n }\n\n /** Run wave intro animation */\n #runWaveIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n const innerDots = DOTS_DATA.filter((d) => innerDotIds.has(d.id));\n const outerDots = DOTS_DATA.filter((d) => !innerDotIds.has(d.id));\n\n // WAVE 1: Inner dots appear at half scale\n const orderedInner = sortByAngle(innerDots.map((d) => d.id));\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.fill = 'var(--dot-medium)';\n forceReflow(el);\n el.style.removeProperty('transition');\n\n const delay = index * 75;\n this.#setTimeout(() => {\n el.style.transition = 'transform 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 400ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(0.5)';\n }, delay);\n });\n\n // WAVE 2: Inner to full scale + outer appear\n this.#setTimeout(() => {\n // Inner dots to full scale\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = index * 65;\n this.#setTimeout(() => {\n el.style.transition = 'transform 600ms cubic-bezier(0.34, 1.56, 0.64, 1), fill 450ms ease-out';\n el.style.transform = 'scale(1)';\n el.style.removeProperty('fill');\n }, delay);\n });\n\n // Outer dots appear\n const orderedOuter = sortByAngle(outerDots.map((d) => d.id));\n orderedOuter.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.removeProperty('transition');\n const delay = 150 + index * 40;\n this.#setTimeout(() => {\n el.style.transition = 'transform 650ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 550ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(1)';\n }, delay);\n });\n }, 650);\n\n // Completion\n this.#setTimeout(() => {\n onComplete?.();\n }, 1400);\n }\n\n /** Run particle intro animation */\n #runParticleIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n\n // Create particle animation data\n const particles = DOTS_DATA.map((dot, index) => {\n const finalAngle = getAngle(dot);\n const startDistance = 110 + Math.random() * 80;\n const angleVariation = (Math.random() - 0.5) * Math.PI * 0.35;\n const startAngle = finalAngle + angleVariation;\n const startX = Math.cos(startAngle) * startDistance;\n const startY = Math.sin(startAngle) * startDistance;\n\n const curvature = Math.random() * 0.4 + 0.3;\n const controlAngle = startAngle + (Math.random() - 0.5) * Math.PI * curvature;\n const controlDistance = startDistance * 0.6;\n const controlX = Math.cos(controlAngle) * controlDistance;\n const controlY = Math.sin(controlAngle) * controlDistance;\n\n const group = Math.floor(index / 5);\n const groupDelay = group * 110;\n const withinGroupDelay = (index % 5) * 40;\n const delay = groupDelay + withinGroupDelay + Math.random() * 40;\n const duration = 600 + Math.random() * 300;\n\n return {\n ...dot,\n startX,\n startY,\n controlX,\n controlY,\n delay,\n duration,\n impactTime: delay + duration,\n rotationSpeed: 720 + Math.random() * 360,\n isInner: innerDotIds.has(dot.id)\n };\n });\n\n particles.sort((a, b) => a.delay - b.delay);\n\n // First 3 inner dots for shockwaves\n const shockwaveParticles = particles\n .filter((p) => p.isInner)\n .sort((a, b) => a.impactTime - b.impactTime)\n .slice(0, 3);\n const shockwaveSet = new Set(shockwaveParticles.map((p) => p.id));\n\n // Animate each particle\n for (const particle of particles) {\n const el = this.#getDot(particle.id);\n if (!el) {\n continue;\n }\n\n el.style.transform = `translate(${particle.startX}px, ${particle.startY}px) scale(0.05)`;\n\n this.#setTimeout(() => {\n el.style.opacity = '1';\n\n const steps = 30;\n let step = 0;\n\n const animateStep = (): void => {\n step++;\n const progress = step / steps;\n const t = progress;\n const mt = 1 - t;\n\n const x = mt * mt * particle.startX + 2 * mt * t * particle.controlX + t * t * 0;\n const y = mt * mt * particle.startY + 2 * mt * t * particle.controlY + t * t * 0;\n\n const easeOut = 1 - (1 - progress) ** 4;\n const scale = 0.05 + easeOut * 0.95;\n const rotation = progress * particle.rotationSpeed;\n\n el.style.transition = 'transform 33ms linear';\n el.style.transform = `translate(${x}px, ${y}px) scale(${scale}) rotate(${rotation}deg)`;\n\n if (step < steps) {\n requestAnimationFrame(animateStep);\n } else {\n // Impact - clear all transforms\n const bounceDuration = 250;\n el.style.transition = `transform ${bounceDuration}ms cubic-bezier(0.34, 1.56, 0.64, 1)`;\n el.style.transform = 'scale(1)';\n\n if (shockwaveSet.has(particle.id)) {\n this.#triggerShockwave(particle);\n }\n\n this.#setTimeout(() => {\n el.classList.add('particle-bounce');\n this.#setTimeout(() => {\n el.classList.remove('particle-bounce');\n }, 400);\n }, bounceDuration);\n }\n };\n\n requestAnimationFrame(animateStep);\n }, particle.delay);\n }\n\n // Early completion\n const earlyRevealTime = Math.max(...particles.map((p) => p.delay)) * 0.6;\n this.#setTimeout(() => {\n onComplete?.();\n }, earlyRevealTime);\n\n // Final cleanup\n const maxTime = Math.max(...particles.map((p) => p.impactTime + 500));\n this.#setTimeout(() => {\n this.#resetDotsState(false, true);\n }, maxTime);\n }\n\n #triggerShockwave(dot: DotData): void {\n const container = this.#getShockwaveContainer();\n if (!container) {\n return;\n }\n\n const ring = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n ring.setAttribute('cx', String(dot.cx));\n ring.setAttribute('cy', String(dot.cy));\n ring.setAttribute('r', '13.45');\n ring.classList.add('shockwave-ring');\n\n container.appendChild(ring);\n\n this.#setTimeout(() => {\n ring.remove();\n }, 900);\n }\n\n #runIntro(onComplete?: () => void): void {\n if (this.intro === 'particle') {\n this.#runParticleIntro(onComplete);\n } else {\n this.#runWaveIntro(onComplete);\n }\n }\n\n #startLoopAnimation(): void {\n this.#loopStartTime = performance.now();\n this.#ensureVisibility();\n\n // Inner dots - scale down with transition, then add animation class\n const orderedInnerDots = sortByAngle(INNER_DOT_IDS);\n let seedDelay = 0;\n\n orderedInnerDots.forEach((dot) => {\n this.#setTimeout(() => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const targetScale = 0.6;\n\n el.style.transition = 'all 450ms cubic-bezier(0.4, 0, 0.2, 1)';\n el.style.transform = `scale(${targetScale})`;\n el.style.fill = 'var(--dot-medium)';\n el.style.opacity = '0.7';\n\n el.style.setProperty('--base-scale', `${targetScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * LOOP_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading-inner');\n }, 100);\n }, seedDelay);\n\n seedDelay += 60;\n });\n\n const orderedOuterDots = sortByAngle(OUTER_DOT_IDS);\n this.#setTimeout(() => {\n orderedOuterDots.forEach((dot) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.transition = 'all 350ms ease-out';\n\n const baseScale = 1.2;\n el.style.setProperty('--base-scale', `${baseScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * ROTATION_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading');\n }, 50);\n });\n\n this.state = 'loop';\n }, seedDelay + 100);\n }\n\n #endLoopAnimation(): void {\n const now = performance.now();\n const elapsed = Math.max(0, now - this.#loopStartTime);\n\n const timeInCycle = elapsed % LOOP_DURATION;\n const timeLeft = LOOP_DURATION - timeInCycle + 50;\n\n this.state = 'exit';\n\n this.#setTimeout(() => {\n const orderedAllDots = sortByAngle(DOTS_DATA.map((d) => d.id));\n\n orderedAllDots.forEach((dot, i) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = i * 18;\n\n this.#setTimeout(() => {\n el.classList.remove('dot-loading', 'dot-loading-inner');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--base-scale');\n\n el.classList.add('restoring');\n el.style.transform = 'scale(1)';\n el.style.opacity = '1';\n el.style.removeProperty('fill');\n\n this.#setTimeout(() => {\n el.classList.remove('restoring');\n }, 500);\n }, delay);\n });\n\n this.#setTimeout(\n () => {\n this.state = 'idle';\n },\n orderedAllDots.length * 18 + 500\n );\n }, timeLeft);\n }\n\n handleLoadingChange(next: boolean): void {\n if (!this.#introCompleted) {\n return;\n }\n\n this.#clearTimers();\n\n if (next) {\n if (this.state === 'idle' || this.state === 'exit') {\n this.#resetDotsState(true, true);\n this.#startLoopAnimation();\n }\n } else {\n if (this.state === 'loop') {\n this.#endLoopAnimation();\n } else if (this.state !== 'intro' && this.state !== 'exit') {\n this.state = 'idle';\n }\n }\n }\n\n playIntro(variant?: LogoIntroVariant): void {\n this.#clearTimers();\n this.#resetDotsState(true);\n\n const originalIntro = this.intro;\n if (variant) {\n this.intro = variant;\n }\n\n this.#runIntro(() => {\n this.#introCompleted = true;\n if (this.loading) {\n this.#startLoopAnimation();\n } else {\n this.state = 'idle';\n }\n });\n\n if (variant) {\n this.intro = originalIntro;\n }\n }\n}\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n};\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.set(instance, false);\n\n instance.render?.();\n });\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\ninterface WatchOptions<TValue, THost extends RenderHost> {\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n transform?: (this: THost, initial: TValue) => TValue;\n}\n\nexport function Watch<TValue, THost extends RenderHost = RenderHost>(options: WatchOptions<TValue, THost> = {}) {\n const { compare = defaultCompare, onChange, transform } = options;\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Watch requires the \"accessor\" keyword on the property.');\n }\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (onChange) {\n onChange.call(this, value, previous);\n }\n\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n if (transform) {\n return transform.call(this, initialValue);\n }\n\n return initialValue;\n }\n };\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nexport type MonitorFpsDetail = {\n fps: number | null;\n refreshRate: number | null;\n frameTimeAvg: number | null;\n frameTimeP95: number | null;\n frameTimeMax: number | null;\n droppedFrames: number;\n jankFrames: number;\n longFrames: number;\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(max, value));\n\nconst mean = (values: readonly number[]): number | null => {\n if (values.length === 0) {\n return null;\n }\n let sum = 0;\n for (const value of values) {\n sum += value;\n }\n return sum / values.length;\n};\n\nconst quantile = (sorted: readonly number[], q: number): number | null => {\n if (sorted.length === 0) {\n return null;\n }\n const clamped = clamp(q, 0, 1);\n const index = Math.floor(clamped * (sorted.length - 1));\n return sorted[index] ?? null;\n};\n\nconst computePercentile = (values: readonly number[], q: number): number | null => {\n if (values.length === 0) {\n return null;\n }\n const sorted = [...values].sort((a, b) => a - b);\n return quantile(sorted, q);\n};\n\nconst computeMedian = (values: readonly number[]): number | null => computePercentile(values, 0.5);\n\nconst formatNumber = (value: number | null, decimals = 0): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return value.toFixed(decimals);\n};\n\nconst formatMs = (value: number | null, decimals = 1): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return `${value.toFixed(decimals)}ms`;\n};\n\nconst rateFps = (fps: number | null, targetFps: number | null): 'good' | 'needs-improvement' | 'poor' | 'unknown' => {\n if (fps === null || !Number.isFinite(fps)) {\n return 'unknown';\n }\n const target = targetFps && Number.isFinite(targetFps) ? targetFps : 60;\n const ratio = fps / target;\n if (ratio >= 0.92) {\n return 'good';\n }\n if (ratio >= 0.75) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\n@Component({\n tag: 'ease-monitor-fps',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n color: var(--color-foreground);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n font-variant-numeric: tabular-nums;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"title\"] {\n display: inline-flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n }\n\n [part=\"fps\"] {\n font-size: var(--ease-monitor-fps-font-size, 14px);\n font-weight: 650;\n letter-spacing: -0.01em;\n line-height: 1;\n }\n\n [part=\"fps\"][data-rating=\"good\"] {\n color: #22c55e;\n }\n [part=\"fps\"][data-rating=\"needs-improvement\"] {\n color: #eab308;\n }\n [part=\"fps\"][data-rating=\"poor\"] {\n color: #ef4444;\n }\n [part=\"fps\"][data-rating=\"unknown\"] {\n color: var(--color-gray-600);\n }\n\n [part=\"unit\"] {\n font-size: var(--ease-monitor-unit-font-size, var(--ease-font-size-sm, 12px));\n color: var(--color-gray-600);\n font-weight: 500;\n }\n\n [part=\"subtitle\"] {\n font-size: var(--ease-monitor-subtitle-font-size, 11px);\n color: var(--color-gray-600);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n text-align: right;\n }\n\n canvas[part=\"graph\"] {\n width: 100%;\n height: 44px;\n display: block;\n background: var(--color-gray-900);\n box-shadow: inset 0 0 0 1px var(--color-white-4);\n }\n\n [part=\"stats\"] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n font-size: var(--ease-monitor-stats-font-size, var(--ease-font-size-sm, 12px));\n padding-left: var(--ease-monitor-stats-padding-left, 4px);\n color: var(--color-gray-600);\n }\n\n [part=\"stat\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n }\n\n [part=\"stat\"] strong {\n font-weight: 550;\n color: var(--color-gray-700);\n }\n `\n})\nexport class MonitorFps extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor paused: boolean = false;\n\n @Query<HTMLCanvasElement>('canvas[part=\"graph\"]')\n accessor canvasEl!: HTMLCanvasElement | null;\n\n #rafId: number | null = null;\n #lastNow = 0;\n #lastSampleNow = 0;\n #framesSinceSample = 0;\n\n #frameDeltas: number[] = [];\n #fpsSamples: number[] = [];\n\n #maxFrameDeltas = 240;\n #maxFpsSamples = 90; // 90 * 250ms = ~22.5s\n #sampleIntervalMs = 250;\n #statsWindowFrames = 120;\n\n #data: MonitorFpsDetail = {\n fps: null,\n refreshRate: null,\n frameTimeAvg: null,\n frameTimeP95: null,\n frameTimeMax: null,\n droppedFrames: 0,\n jankFrames: 0,\n longFrames: 0\n };\n\n connectedCallback(): void {\n this.#attachVisibilityHandling();\n if (!this.paused && !document.hidden) {\n this.#start();\n }\n }\n\n disconnectedCallback(): void {\n this.#stop();\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n }\n\n afterRender(): void {\n this.#syncCanvasSize();\n this.#draw();\n }\n\n render(): TemplateResult {\n const fps = this.#data.fps;\n const hz = this.#data.refreshRate;\n const rating = rateFps(fps, hz);\n\n const subtitleParts = [\n this.#data.frameTimeAvg !== null ? `avg ${formatMs(this.#data.frameTimeAvg)}` : null,\n this.#data.frameTimeP95 !== null ? `p95 ${formatMs(this.#data.frameTimeP95)}` : null\n ].filter(Boolean);\n\n return html`\n <div part=\"container\">\n <div part=\"header\">\n <div part=\"title\">\n <span part=\"fps\" data-rating=${rating}>${formatNumber(fps, 0)}</span>\n <span part=\"unit\">FPS</span>\n </div>\n <div part=\"subtitle\">${subtitleParts.join(' · ')}</div>\n </div>\n\n <canvas part=\"graph\" aria-label=\"FPS graph\"></canvas>\n\n <div part=\"stats\">\n <div part=\"stat\"><span>Refresh</span><strong>${hz ? `~${formatNumber(hz, 0)}Hz` : '—'}</strong></div>\n <div part=\"stat\"><span>Dropped</span><strong>${this.#data.droppedFrames}</strong></div>\n <div part=\"stat\"><span>Jank</span><strong>${this.#data.jankFrames}</strong></div>\n <div part=\"stat\"><span>Long frames</span><strong>${this.#data.longFrames}</strong></div>\n <div part=\"stat\"><span>Worst</span><strong>${formatMs(this.#data.frameTimeMax)}</strong></div>\n <div part=\"stat\"><span>Avg</span><strong>${formatMs(this.#data.frameTimeAvg)}</strong></div>\n </div>\n </div>\n `;\n }\n\n #attachVisibilityHandling(): void {\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n document.addEventListener('visibilitychange', this.#handleVisibilityChange, { passive: true });\n }\n\n #handleVisibilityChange = (): void => {\n if (document.hidden) {\n this.#stop();\n return;\n }\n\n if (!this.paused) {\n this.#start();\n }\n };\n\n #start(): void {\n if (this.#rafId !== null) {\n return;\n }\n\n const now = performance.now();\n this.#lastNow = now;\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#rafId = requestAnimationFrame(this.#tick);\n }\n\n #stop(): void {\n if (this.#rafId !== null) {\n cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n }\n\n #tick = (now: number): void => {\n if (this.paused) {\n this.#stop();\n return;\n }\n\n const delta = now - this.#lastNow;\n this.#lastNow = now;\n\n // Ignore huge deltas (tab switch / breakpoints).\n if (delta > 0 && delta < 250) {\n this.#frameDeltas.push(delta);\n if (this.#frameDeltas.length > this.#maxFrameDeltas) {\n this.#frameDeltas.shift();\n }\n }\n\n this.#framesSinceSample += 1;\n\n if (now - this.#lastSampleNow >= this.#sampleIntervalMs) {\n const elapsed = now - this.#lastSampleNow;\n const fpsSample = elapsed > 0 ? (this.#framesSinceSample * 1000) / elapsed : 0;\n\n this.#fpsSamples.push(fpsSample);\n if (this.#fpsSamples.length > this.#maxFpsSamples) {\n this.#fpsSamples.shift();\n }\n\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#updateStats();\n this.#emit();\n this.requestRender();\n }\n\n this.#rafId = requestAnimationFrame(this.#tick);\n };\n\n #updateStats(): void {\n const frameWindow = this.#frameDeltas.slice(-this.#statsWindowFrames);\n const fpsWindow = this.#fpsSamples.slice(-Math.min(4, this.#fpsSamples.length));\n\n const frameAvg = mean(frameWindow);\n const frameP95 = computePercentile(frameWindow, 0.95);\n const frameMax = frameWindow.length > 0 ? Math.max(...frameWindow) : null;\n const median = computeMedian(frameWindow);\n\n const refreshRate =\n median && median > 0 ? clamp((1000 / median) as number, 30, 240) : (this.#data.refreshRate ?? null);\n\n const ideal = refreshRate ? 1000 / refreshRate : 1000 / 60;\n\n let droppedFrames = 0;\n let jankFrames = 0;\n let longFrames = 0;\n\n for (const ft of frameWindow) {\n const missed = Math.max(0, Math.round(ft / ideal) - 1);\n droppedFrames += missed;\n\n if (ft > ideal * 1.5) {\n jankFrames += 1;\n }\n\n if (ft > Math.max(50, ideal * 3)) {\n longFrames += 1;\n }\n }\n\n const fps = fpsWindow.length > 0 ? mean(fpsWindow) : null;\n\n this.#data = {\n fps,\n refreshRate,\n frameTimeAvg: frameAvg,\n frameTimeP95: frameP95,\n frameTimeMax: frameMax,\n droppedFrames,\n jankFrames,\n longFrames\n };\n }\n\n #emit(): void {\n this.dispatchEvent(\n new CustomEvent<MonitorFpsDetail>('monitor-fps', {\n detail: this.#data,\n bubbles: true,\n composed: true\n })\n );\n }\n\n #syncCanvasSize(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = Math.max(1, Math.floor(rect.width * dpr));\n const height = Math.max(1, Math.floor(rect.height * dpr));\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n }\n }\n\n #draw(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = canvas.width / dpr;\n const height = canvas.height / dpr;\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n const samples = this.#fpsSamples;\n if (samples.length < 2) {\n return;\n }\n\n const target = this.#data.refreshRate ?? 60;\n const scaleMax = Math.max(60, Math.round(target / 10) * 10);\n\n const rating = rateFps(this.#data.fps, this.#data.refreshRate);\n const stroke =\n rating === 'good'\n ? '#22c55e'\n : rating === 'needs-improvement'\n ? '#eab308'\n : rating === 'poor'\n ? '#ef4444'\n : '#6b7280';\n\n // guide lines\n ctx.save();\n ctx.globalAlpha = 0.35;\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.setLineDash([3, 3]);\n\n const drawGuide = (fps: number) => {\n const y = height - clamp(fps / scaleMax, 0, 1) * height;\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n };\n\n drawGuide(Math.min(60, scaleMax));\n drawGuide(Math.min(30, scaleMax));\n\n ctx.restore();\n\n const toY = (fps: number) => height - clamp(fps / scaleMax, 0, 1) * height;\n\n // area fill\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.lineTo(width, height);\n ctx.lineTo(0, height);\n ctx.closePath();\n ctx.globalAlpha = 0.12;\n ctx.fillStyle = stroke;\n ctx.fill();\n\n // line\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1.75;\n ctx.setLineDash([]);\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n ctx.stroke();\n }\n}\n","import type { MonitorFpsDetail } from './fps';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Watch } from '~/decorators/Watch';\nimport { styleObject } from '~/utils/template-helpers';\nimport './fps';\n\ninterface LayoutShift extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n}\n\ninterface PerformanceEventTiming extends PerformanceEntry {\n duration: number;\n interactionId?: number;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n duration: number;\n}\n\ntype CoreWebVitals = {\n LCP: number | null;\n INP: number | null;\n CLS: number;\n FCP: number | null;\n TBT: number;\n};\n\ntype NavigationMetrics = {\n ttfb: number | null;\n domInteractive: number | null;\n loadTime: number | null;\n};\n\ntype ResourceSummary = {\n js: { count: number; size: number };\n css: { count: number; size: number };\n img: { count: number; size: number };\n other: { count: number; size: number };\n totalSize: number;\n};\n\ntype MemoryUsage = {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n} | null;\n\ninterface PerformanceMetrics {\n coreWebVitals: CoreWebVitals;\n navigation: NavigationMetrics;\n resources: ResourceSummary;\n memory: MemoryUsage;\n fps: number | null;\n longTasks: { count: number; totalDuration: number };\n}\n\n// Network Information\ninterface ConnectionInfo {\n effectiveType: string;\n rtt: number;\n}\n\ntype MetricKey = keyof CoreWebVitals | keyof NavigationMetrics | 'fps' | 'TBT';\ntype MetricRating = 'good' | 'needs-improvement' | 'poor' | 'unknown';\n\ndeclare global {\n interface Performance {\n memory?: {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n };\n }\n interface Navigator {\n connection?: {\n effectiveType: string;\n rtt: number;\n addEventListener: (type: string, listener: EventListener) => void;\n removeEventListener: (type: string, listener: EventListener) => void;\n };\n }\n}\n\nconst METRIC_THRESHOLDS = {\n LCP: { good: 2500, poor: 4000 },\n INP: { good: 200, poor: 500 },\n CLS: { good: 0.1, poor: 0.25 },\n FCP: { good: 1800, poor: 3000 },\n ttfb: { good: 800, poor: 1800 },\n loadTime: { good: 3000, poor: 6000 },\n domInteractive: { good: 1500, poor: 3500 },\n fps: { good: 55, poor: 30 },\n TBT: { good: 200, poor: 600 }\n};\n\nconst GLOBAL_BENCHMARKS: Partial<Record<MetricKey, number>> = {\n LCP: 2400,\n INP: 250,\n CLS: 0.05,\n FCP: 1600,\n TBT: 300\n};\n\nconst rateMetric = (metric: MetricKey, value: number | null): MetricRating => {\n if (value === null) {\n return 'unknown';\n }\n const thresholds = METRIC_THRESHOLDS[metric as keyof typeof METRIC_THRESHOLDS];\n if (!thresholds) {\n return 'unknown';\n }\n\n if (metric === 'fps') {\n if (value >= thresholds.good) {\n return 'good';\n }\n if (value >= thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n }\n\n if (value <= thresholds.good) {\n return 'good';\n }\n if (value < thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\nconst formatMetric = (metric: MetricKey, value: number | null): string => {\n if (value === null) {\n return 'N/A';\n }\n if (metric === 'CLS') {\n return value.toFixed(3);\n }\n if (metric === 'fps') {\n return `${Math.round(value)}`;\n }\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n return `${(value / 1000).toFixed(2)}s`;\n};\n\nconst formatBytes = (bytes: number | null | undefined, decimals = 1): string => {\n if (bytes == null || !Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst estimateCarbonFootprint = (totalBytes: number): string => {\n if (totalBytes <= 0) {\n return '0g CO2 eq.';\n }\n const emissions = (totalBytes / 1000000000) * 0.81;\n return `${emissions.toFixed(3)}g CO2 eq.`;\n};\n\n@Component({\n tag: 'ease-monitor',\n styles: `\n :host {\n position: relative;\n z-index: 100000;\n user-select: none;\n -webkit-user-select: none;\n \n }\n\n [part=\"container\"] {\n width: 320px;\n overflow: hidden; \n }\n\n [part=\"header\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n [part=\"title\"] {\n display: flex;\n align-items: center;\n gap: 0.5em;\n }\n\n [part=\"content\"] {\n display: grid;\n gap: 1em;\n max-height: 80vh;\n overflow-y: auto;\n }\n\n .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));\n gap: 0.5em;\n }\n\n .metric-box {\n text-align: center;\n cursor: help;\n }\n\n .metric-value {\n font-variant-numeric: tabular-nums; \n }\n\n .rating-good {\n color: #22c55e;\n }\n .rating-needs-improvement {\n color: #eab308;\n }\n .rating-poor {\n color: #ef4444;\n }\n .rating-unknown {\n color: #6b7280;\n }\n\n .status-indicator.rating-good {\n background-color: #22c55e;\n }\n .status-indicator.rating-needs-improvement {\n background-color: #eab308;\n }\n .status-indicator.rating-poor {\n background-color: #ef4444;\n }\n .status-indicator.rating-unknown {\n background-color: #6b7280;\n }\n\n .memory-used.rating-good {\n background-color: #22c55e;\n }\n .memory-used.rating-needs-improvement {\n background-color: #eab308;\n }\n .memory-used.rating-poor {\n background-color: #ef4444;\n }\n\n .resource-list, .memory-usage, .network-info {\n display: grid;\n gap: 0.25em;\n }\n\n .resource-item, .network-item, .longtask-item {\n display: flex;\n justify-content: space-between;\n font-variant-numeric: tabular-nums;\n }\n\n .memory-bar {\n height: 10px;\n overflow: hidden;\n position: relative;\n }\n\n .memory-used {\n height: 100%;\n transition: width 0.5s ease-in-out;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n }\n \n .carbon-estimate {\n text-align: right;\n }\n\n .trend-indicator {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `\n})\nexport class Monitor extends HTMLElement {\n declare requestRender: () => void;\n\n @Watch<PerformanceMetrics>({})\n accessor metrics: PerformanceMetrics = {\n navigation: { loadTime: null, domInteractive: null, ttfb: null },\n coreWebVitals: { LCP: null, INP: null, CLS: 0, FCP: null, TBT: 0 },\n resources: {\n js: { count: 0, size: 0 },\n css: { count: 0, size: 0 },\n img: { count: 0, size: 0 },\n other: { count: 0, size: 0 },\n totalSize: 0\n },\n memory: null,\n fps: null,\n longTasks: { count: 0, totalDuration: 0 }\n };\n\n @Watch<ConnectionInfo>({})\n accessor network: ConnectionInfo = {\n effectiveType: 'N/A',\n rtt: 0\n };\n\n private observers: PerformanceObserver[] = [];\n private memoryInterval: number | null = null;\n\n private clsEntries: LayoutShift[] = [];\n\n private inpEntries: PerformanceEventTiming[] = [];\n private maxINP = 0;\n\n private longTaskEntries: PerformanceLongTaskTiming[] = [];\n\n private trendHistory: Partial<Record<MetricKey, number[]>> = {};\n private maxTrendLength = 5;\n\n connectedCallback(): void {\n this.initObservers();\n this.collectInitialMetrics();\n this.startMemoryMonitoring();\n this.initNetworkMonitoring();\n\n if (document.readyState !== 'complete') {\n window.addEventListener('load', this.handlePageLoad);\n } else {\n this.handlePageLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.observers.forEach((observer) => {\n observer.disconnect();\n });\n this.observers = [];\n this.stopMemoryMonitoring();\n this.stopNetworkMonitoring();\n window.removeEventListener('load', this.handlePageLoad);\n }\n\n @Listen<Monitor, CustomEvent<MonitorFpsDetail>>('monitor-fps')\n handleFpsUpdate(event: CustomEvent<MonitorFpsDetail>): void {\n const fps = event.detail?.fps ?? null;\n this.metrics.fps = fps;\n this.updateTrend('fps', fps);\n this.requestRender();\n }\n\n private handlePageLoad = (): void => {\n setTimeout(() => {\n this.collectNavigationTiming();\n this.requestRender();\n }, 500);\n };\n\n private initObservers(): void {\n if (!('PerformanceObserver' in window)) {\n console.warn('PerformanceObserver API not supported.');\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.processPerformanceEntry(entry);\n }\n });\n\n observer.observe({ type: 'largest-contentful-paint', buffered: true });\n observer.observe({ type: 'event', buffered: true });\n observer.observe({ type: 'layout-shift', buffered: true });\n observer.observe({ type: 'paint', buffered: true });\n observer.observe({ type: 'resource', buffered: true });\n observer.observe({ type: 'longtask', buffered: true });\n\n this.observers.push(observer);\n } catch (e) {\n console.error('Error initializing PerformanceObserver:', e);\n }\n }\n\n private collectInitialMetrics(): void {\n this.collectNavigationTiming();\n const resourceEntries = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n this.processResourceEntries(resourceEntries);\n }\n\n private collectNavigationTiming(): void {\n const navigationEntries = performance.getEntriesByType('navigation');\n if (navigationEntries.length > 0) {\n const navTiming = navigationEntries[0] as PerformanceNavigationTiming;\n\n let ttfb = null;\n if (navTiming.responseStart > 0 && navTiming.fetchStart > 0) {\n ttfb = navTiming.responseStart - navTiming.fetchStart;\n }\n\n let loadTime = null;\n if (navTiming.loadEventEnd > 0) {\n loadTime = navTiming.loadEventEnd - navTiming.startTime;\n }\n\n let domInteractive = null;\n if (navTiming.domInteractive > 0) {\n domInteractive = navTiming.domInteractive - navTiming.startTime;\n }\n\n this.metrics.navigation = { ttfb, loadTime, domInteractive };\n this.updateTrend('loadTime', loadTime);\n this.updateTrend('ttfb', ttfb);\n }\n }\n\n private processPerformanceEntry(entry: PerformanceEntry): void {\n switch (entry.entryType) {\n case 'largest-contentful-paint':\n this.metrics.coreWebVitals.LCP = entry.startTime;\n this.updateTrend('LCP', entry.startTime);\n break;\n case 'event': {\n const eventEntry = entry as PerformanceEventTiming;\n if (eventEntry.interactionId && eventEntry.duration > this.maxINP) {\n this.maxINP = eventEntry.duration;\n this.metrics.coreWebVitals.INP = this.maxINP;\n this.updateTrend('INP', this.maxINP);\n }\n this.inpEntries.push(eventEntry);\n break;\n }\n case 'layout-shift': {\n const lsEntry = entry as LayoutShift;\n if (!lsEntry.hadRecentInput) {\n this.clsEntries.push(lsEntry);\n this.calculateSessionWindowCLS();\n }\n break;\n }\n case 'paint':\n if (entry.name === 'first-contentful-paint') {\n this.metrics.coreWebVitals.FCP = entry.startTime;\n this.updateTrend('FCP', entry.startTime);\n }\n break;\n case 'resource':\n this.processResourceEntries([entry as PerformanceResourceTiming]);\n return;\n case 'longtask': {\n const ltEntry = entry as PerformanceLongTaskTiming;\n this.longTaskEntries.push(ltEntry);\n this.calculateLongTasksAndTBT();\n break;\n }\n }\n this.requestRender();\n }\n\n private calculateSessionWindowCLS(): void {\n let maxCls = 0;\n let currentSessionCls = 0;\n let sessionStartTime = Infinity;\n let lastTime = -Infinity;\n\n this.clsEntries.sort((a, b) => a.startTime - b.startTime);\n\n for (const entry of this.clsEntries) {\n const timeDiff = entry.startTime - lastTime;\n\n if (timeDiff > 1000 || entry.startTime - sessionStartTime > 5000) {\n if (currentSessionCls > 0) {\n maxCls = Math.max(maxCls, currentSessionCls);\n }\n currentSessionCls = 0;\n sessionStartTime = entry.startTime;\n }\n\n currentSessionCls += entry.value;\n lastTime = entry.startTime;\n }\n\n maxCls = Math.max(maxCls, currentSessionCls);\n this.metrics.coreWebVitals.CLS = maxCls;\n this.updateTrend('CLS', maxCls);\n }\n\n private processResourceEntries(entries: PerformanceResourceTiming[]): void {\n const summary = this.metrics.resources;\n\n entries.forEach((entry) => {\n const size = entry.transferSize || 0;\n const initiator = entry.initiatorType;\n const name = entry.name.toLowerCase();\n\n if (initiator === 'script' || name.endsWith('.js')) {\n summary.js.count++;\n summary.js.size += size;\n } else if (initiator === 'css' || name.endsWith('.css') || initiator === 'link') {\n summary.css.count++;\n summary.css.size += size;\n } else if (initiator === 'img' || initiator === 'image' || /\\.(jpg|jpeg|png|gif|svg|webp|avif)$/.test(name)) {\n summary.img.count++;\n summary.img.size += size;\n } else {\n summary.other.count++;\n summary.other.size += size;\n }\n summary.totalSize += size;\n });\n }\n\n private calculateLongTasksAndTBT(): void {\n let tbt = 0;\n let count = 0;\n const referenceTime = this.metrics.coreWebVitals.FCP ?? 0;\n\n this.longTaskEntries.forEach((task) => {\n if (task.startTime >= referenceTime) {\n count++;\n if (task.duration > 50) {\n tbt += task.duration - 50;\n }\n }\n });\n this.metrics.longTasks = { count, totalDuration: tbt };\n this.metrics.coreWebVitals.TBT = tbt;\n this.updateTrend('TBT', tbt);\n }\n\n private startMemoryMonitoring(): void {\n if (!performance.memory) {\n return;\n }\n\n const updateMemory = () => {\n if (performance.memory) {\n const mem = performance.memory;\n this.metrics.memory = {\n jsHeapSizeLimit: Number(mem.jsHeapSizeLimit) || 0,\n totalJSHeapSize: Number(mem.totalJSHeapSize) || 0,\n usedJSHeapSize: Number(mem.usedJSHeapSize) || 0\n };\n this.requestRender();\n }\n };\n\n updateMemory();\n this.memoryInterval = window.setInterval(updateMemory, 3000);\n }\n\n private stopMemoryMonitoring(): void {\n if (this.memoryInterval) {\n clearInterval(this.memoryInterval);\n this.memoryInterval = null;\n }\n }\n\n private initNetworkMonitoring(): void {\n if (navigator.connection) {\n this.updateNetworkInfo();\n navigator.connection.addEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private stopNetworkMonitoring(): void {\n if (navigator.connection) {\n navigator.connection.removeEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private updateNetworkInfo = (): void => {\n if (navigator.connection) {\n this.network = {\n effectiveType: navigator.connection.effectiveType ?? 'N/A',\n rtt: navigator.connection.rtt ?? 0\n };\n }\n };\n\n private updateTrend(key: MetricKey, value: number | null): void {\n if (value === null) {\n return;\n }\n const history = this.trendHistory[key] || [];\n history.push(value);\n if (history.length > this.maxTrendLength) {\n history.shift();\n }\n this.trendHistory[key] = history;\n }\n\n private getTrendDirection(key: MetricKey): string {\n const history = this.trendHistory[key];\n if (!history || history.length < 2) {\n return '';\n }\n\n const currentValue = history[history.length - 1];\n const previousAvg = history.slice(0, history.length - 1).reduce((a, b) => a + b, 0) / (history.length - 1);\n\n const threshold = Math.abs(previousAvg * 0.05);\n const delta = currentValue ?? 0 - previousAvg;\n\n if (Math.abs(delta) < threshold) {\n return '→';\n }\n\n if (key === 'fps') {\n return delta > 0 ? '↑' : '↓';\n } else {\n return delta < 0 ? '↓' : '↑';\n }\n }\n\n private getOverallStatus(): MetricRating {\n const ratings: MetricRating[] = [\n rateMetric('LCP', this.metrics.coreWebVitals.LCP),\n rateMetric('CLS', this.metrics.coreWebVitals.CLS),\n rateMetric('INP', this.metrics.coreWebVitals.INP),\n rateMetric('fps', this.metrics.fps)\n ];\n\n if (ratings.includes('poor')) {\n return 'poor';\n }\n if (ratings.includes('needs-improvement')) {\n return 'needs-improvement';\n }\n if (ratings.every((r) => r === 'unknown')) {\n return 'unknown';\n }\n\n if (ratings.some((r) => r === 'good')) {\n return 'good';\n }\n\n return 'unknown';\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n ${this.renderExpanded()}\n </div>\n `;\n }\n\n private renderExpanded(): TemplateResult {\n return html`\n <div part=\"header\">\n <div part=\"title\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline></svg>\n Performance Monitor\n </div>\n </div>\n <div part=\"content\">\n ${this.renderVitalsAndTiming()}\n ${this.renderRealtime()}\n ${this.renderNetworkInfo()}\n ${this.renderResources()}\n </div>\n `;\n }\n\n private renderMetricBox(label: string, key: MetricKey, value: number | null, description: string): TemplateResult {\n const rating = rateMetric(key, value);\n const formattedValue = formatMetric(key, value);\n const trend = this.getTrendDirection(key);\n const benchmark = GLOBAL_BENCHMARKS[key];\n const vsBenchmark = benchmark ? ` (vs avg ${formatMetric(key, benchmark)})` : '';\n return html`\n <div class=\"metric-box\" title=\"${description}${vsBenchmark}\">\n <div part=\"metric-label\" class=\"metric-label\">${label}</div>\n <div part=\"metric-value\" class=\"metric-value rating-${rating}\" data-rating=${rating}>\n ${formattedValue}\n <span class=\"trend-indicator\">${trend}</span>\n </div>\n </div>\n `;\n }\n\n private renderVitalsAndTiming(): TemplateResult {\n const { LCP, INP, CLS, FCP, TBT } = this.metrics.coreWebVitals;\n const { ttfb, loadTime } = this.metrics.navigation;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Vitals & Timing</div>\n <div class=\"metrics-grid\">\n ${this.renderMetricBox('LCP', 'LCP', LCP, 'Largest Contentful Paint: Measures loading performance.')}\n ${this.renderMetricBox('INP', 'INP', INP, 'Interaction to Next Paint: Measures responsiveness.')}\n ${this.renderMetricBox('CLS', 'CLS', CLS, 'Cumulative Layout Shift: Measures visual stability.')}\n ${this.renderMetricBox('FCP', 'FCP', FCP, 'First Contentful Paint: When the browser renders the first bit of content.')}\n ${this.renderMetricBox('TBT', 'TBT', TBT, 'Total Blocking Time: Sum of blocking portions of long tasks.')}\n ${this.renderMetricBox('TTFB', 'ttfb', ttfb, 'Time to First Byte: Measures server responsiveness.')}\n ${this.renderMetricBox('Load', 'loadTime', loadTime, 'Total Page Load Time.')}\n </div>\n </section>\n `;\n }\n\n private renderRealtime(): TemplateResult {\n const { memory, longTasks } = this.metrics;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Realtime Monitoring</div>\n <ease-monitor-fps></ease-monitor-fps>\n <div class=\"longtask-item\">\n <span>Long Tasks (Count / Blocked ms)</span>\n <span>${longTasks.count} / ${longTasks.totalDuration.toFixed(0)}ms</span>\n </div>\n ${this.renderMemory(memory)}\n </section>\n `;\n }\n\n private renderMemory(memory: MemoryUsage): TemplateResult {\n if (!memory) {\n return html`\n <div class=\"memory-usage\">\n (performance.memory API not supported)\n </div>\n `;\n }\n\n const usedPercent = memory.totalJSHeapSize > 0 ? (memory.usedJSHeapSize / memory.totalJSHeapSize) * 100 : 0;\n\n let rating: MetricRating = 'good';\n if (usedPercent > 85) {\n rating = 'poor';\n } else if (usedPercent > 60) {\n rating = 'needs-improvement';\n }\n\n return html`\n <div class=\"memory-usage\">\n <div class=\"resource-item\">\n <span>Used / Total Heap</span>\n <span>${formatBytes(memory.usedJSHeapSize)} / ${formatBytes(memory.totalJSHeapSize)}</span>\n </div>\n <div class=\"memory-bar\" title=\"${usedPercent.toFixed(1)}% Used\">\n <div class=\"memory-used rating-${rating}\" style=${styleObject({ width: `${Math.min(100, usedPercent)}%` })} data-rating=${rating}></div>\n </div>\n <div class=\"resource-item\">\n <span>Heap Limit</span>\n <span>${formatBytes(memory.jsHeapSizeLimit)}</span>\n </div>\n </div>\n `;\n }\n\n private renderNetworkInfo(): TemplateResult {\n const { effectiveType, rtt } = this.network;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Network Connection</div>\n <div class=\"network-info\">\n <div class=\"network-item\">\n <span>Effective Type</span>\n <span>${effectiveType.toUpperCase()}</span>\n </div>\n <div class=\"network-item\">\n <span>Round Trip Time (RTT)</span>\n <span>${rtt > 0 ? `${rtt}ms` : 'N/A'}</span>\n </div>\n </div>\n </section>\n `;\n }\n\n private renderResources(): TemplateResult {\n const { js, css, img, other, totalSize } = this.metrics.resources;\n const totalCount = js.count + css.count + img.count + other.count;\n\n const renderItem = (label: string, data: { count: number; size: number }) => html`\n <div class=\"resource-item\">\n <span>${label} (${data.count})</span>\n <span>${formatBytes(data.size)}</span>\n </div>\n `;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Resources (Total: ${formatBytes(totalSize)} / ${totalCount} reqs)</div>\n <div class=\"resource-list\">\n ${renderItem('JS', js)}\n ${renderItem('CSS/Links', css)}\n ${renderItem('Images', img)}\n ${renderItem('Other', other)}\n </div>\n <div part=\"carbon-estimate\" class=\"carbon-estimate\">\n Est. Carbon: ${estimateCarbonFootprint(totalSize)}\n </div>\n <div>\n Overall Status: ${this.getOverallStatus()}\n </div>\n </section>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-add',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M3.4993 2.69516V4.30289\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorAdd extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-remove',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorRemove extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrow-up',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.99992 12.6666V3.33331M6.99992 3.33331L2.33325 7.99998M6.99992 3.33331L11.6666 7.99998\" />\n </svg>\n `;\n }\n})\nexport class ArrowUp extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.44279 8.84005C9.56156 9.00972 9.79538 9.05098 9.96505 8.93221C10.1347 8.81344 10.176 8.57962 10.0572 8.40995L9.75 8.625L9.44279 8.84005ZM1.94279 8.40995C1.82402 8.57962 1.86528 8.81344 2.03495 8.93221C2.20462 9.05098 2.43844 9.00972 2.55721 8.84005L2.25 8.625L1.94279 8.40995ZM7.21875 4.21875H6.84375C6.84375 4.68474 6.46599 5.0625 6 5.0625V5.4375V5.8125C6.8802 5.8125 7.59375 5.09895 7.59375 4.21875H7.21875ZM6 5.4375V5.0625C5.53401 5.0625 5.15625 4.68474 5.15625 4.21875H4.78125H4.40625C4.40625 5.09895 5.1198 5.8125 6 5.8125V5.4375ZM4.78125 4.21875H5.15625C5.15625 3.75276 5.53401 3.375 6 3.375V3V2.625C5.1198 2.625 4.40625 3.33855 4.40625 4.21875H4.78125ZM6 3V3.375C6.46599 3.375 6.84375 3.75276 6.84375 4.21875H7.21875H7.59375C7.59375 3.33855 6.8802 2.625 6 2.625V3ZM7.125 4.875L6.81779 5.09005L9.44279 8.84005L9.75 8.625L10.0572 8.40995L7.43221 4.65995L7.125 4.875ZM4.875 4.875L4.56779 4.65995L1.94279 8.40995L2.25 8.625L2.55721 8.84005L5.18221 5.09005L4.875 4.875Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezier extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-angle',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.875 4.21875C1.875 4.63296 1.53921 4.96875 1.125 4.96875C0.710786 4.96875 0.375 4.63296 0.375 4.21875C0.375 3.80454 0.710786 3.46875 1.125 3.46875C1.53921 3.46875 1.875 3.80454 1.875 4.21875Z\" fill-opacity=\"0.9\"/>\n <path d=\"M1.64062 4.21875C1.64062 3.93398 1.40977 3.70312 1.125 3.70312C0.840228 3.70312 0.609375 3.93398 0.609375 4.21875C0.609375 4.50352 0.840228 4.73438 1.125 4.73438C1.40977 4.73438 1.64062 4.50352 1.64062 4.21875ZM2.10938 4.21875C2.10938 4.76241 1.66866 5.20312 1.125 5.20312C0.581345 5.20312 0.140625 4.76241 0.140625 4.21875C0.140625 3.67509 0.581345 3.23438 1.125 3.23438C1.66866 3.23438 2.10938 3.67509 2.10938 4.21875Z\" />\n <path d=\"M9.23535 6.49023L8.76465 6.94727L6.88965 5.00977L7.36035 4.55273L9.23535 6.49023Z\" />\n <path d=\"M10.25 7.34375C10.25 7.75796 9.91421 8.09375 9.5 8.09375C9.08579 8.09375 8.75 7.75796 8.75 7.34375C8.75 6.92954 9.08579 6.59375 9.5 6.59375C9.91421 6.59375 10.25 6.92954 10.25 7.34375Z\" fill-opacity=\"0.9\"/>\n <path d=\"M10.0156 7.34375C10.0156 7.05898 9.78477 6.82812 9.5 6.82812C9.21523 6.82812 8.98438 7.05898 8.98438 7.34375C8.98438 7.62852 9.21523 7.85938 9.5 7.85938C9.78477 7.85938 10.0156 7.62852 10.0156 7.34375ZM10.4844 7.34375C10.4844 7.88741 10.0437 8.32812 9.5 8.32812C8.95634 8.32812 8.51562 7.88741 8.51562 7.34375C8.51562 6.80009 8.95634 6.35938 9.5 6.35938C10.0437 6.35938 10.4844 6.80009 10.4844 7.34375Z\" />\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM7.5127 9C7.5127 7.09758 7.32324 6.08783 7.15039 5.56738C7.06453 5.30889 6.98595 5.1804 6.94434 5.125C6.92803 5.1033 6.91762 5.09324 6.91504 5.09082C6.91648 5.09202 6.92022 5.09529 6.92676 5.09961C6.93038 5.102 6.93521 5.10442 6.94043 5.10742C6.94302 5.10891 6.94624 5.11071 6.94922 5.1123C6.95072 5.1131 6.9525 5.11442 6.9541 5.11523L6.95703 5.11621L6.95801 5.11719L7.29199 4.44531L7.29297 4.44629C7.29386 4.44673 7.29499 4.4468 7.2959 4.44727C7.29775 4.44821 7.29983 4.44917 7.30176 4.4502C7.30557 4.45222 7.30938 4.45469 7.31348 4.45703C7.32177 4.46178 7.33053 4.46749 7.33984 4.47363C7.35849 4.48593 7.37956 4.50097 7.40137 4.51953C7.44494 4.55668 7.49313 4.60714 7.54395 4.6748C7.64536 4.80983 7.75747 5.0154 7.8623 5.33105C8.07087 5.95905 8.2627 7.0587 8.2627 9C8.2627 9.20711 8.0948 9.375 7.8877 9.375C7.68065 9.37492 7.5127 9.20706 7.5127 9Z\" />\n <path d=\"M2.04004 3.89014H4.71004V4.55014H2.04004V3.89014Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierAngle extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-distribute',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.125 5.64502C5.33211 5.64502 5.5 5.81291 5.5 6.02002C5.5 6.22713 5.33211 6.39502 5.125 6.39502H2.5C2.29289 6.39502 2.125 6.22713 2.125 6.02002C2.125 5.81291 2.29289 5.64502 2.5 5.64502H5.125Z\" />\n <path d=\"M2.125 6.02002C2.125 5.81313 1.95689 5.64502 1.75 5.64502C1.54311 5.64502 1.375 5.81313 1.375 6.02002C1.375 6.22691 1.54311 6.39502 1.75 6.39502C1.95689 6.39502 2.125 6.22691 2.125 6.02002ZM2.875 6.02002C2.875 6.64113 2.37111 7.14502 1.75 7.14502C1.12889 7.14502 0.625 6.64113 0.625 6.02002C0.625 5.39891 1.12889 4.89502 1.75 4.89502C2.37111 4.89502 2.875 5.39891 2.875 6.02002Z\" />\n <path d=\"M6.5 5.67285C6.5 5.60396 6.44389 5.54785 6.375 5.54785H5.625C5.55611 5.54785 5.5 5.60396 5.5 5.67285V6.42285C5.5 6.49174 5.55611 6.54785 5.625 6.54785H6.375C6.44389 6.54785 6.5 6.49174 6.5 6.42285V5.67285ZM7.25 6.42285C7.25 6.90596 6.85811 7.29785 6.375 7.29785H5.625C5.14189 7.29785 4.75 6.90596 4.75 6.42285V5.67285C4.75 5.18974 5.14189 4.79785 5.625 4.79785H6.375C6.85811 4.79785 7.25 5.18974 7.25 5.67285V6.42285Z\" />\n <path d=\"M3.125 9.25C3.125 9.18111 3.06889 9.125 3 9.125H2.25C2.18111 9.125 2.125 9.18111 2.125 9.25V10C2.125 10.0689 2.18111 10.125 2.25 10.125H3C3.06889 10.125 3.125 10.0689 3.125 10V9.25ZM3.875 10C3.875 10.4831 3.48311 10.875 3 10.875H2.25C1.76689 10.875 1.375 10.4831 1.375 10V9.25C1.375 8.76689 1.76689 8.375 2.25 8.375H3C3.48311 8.375 3.875 8.76689 3.875 9.25V10Z\" />\n <path d=\"M9.797 2C9.797 1.93111 9.74089 1.875 9.672 1.875H8.922C8.85285 1.875 8.797 1.93086 8.797 2V2.75C8.797 2.81889 8.8531 2.875 8.922 2.875H9.672C9.74089 2.875 9.797 2.81889 9.797 2.75V2ZM10.547 2.75C10.547 3.23311 10.1551 3.625 9.672 3.625H8.922C8.43889 3.625 8.047 3.23311 8.047 2.75V2C8.047 1.51714 8.43815 1.125 8.922 1.125H9.672C10.1551 1.125 10.547 1.51689 10.547 2V2.75Z\" />\n <path d=\"M9.33883 2.87576C9.54514 2.89263 9.69927 3.07377 9.68258 3.28005C9.56091 4.76814 8.50457 5.99034 7.09078 6.34255C6.88985 6.39261 6.6858 6.27003 6.6357 6.06912C6.58565 5.86818 6.70822 5.66414 6.90914 5.61404C8.01222 5.33926 8.83909 4.38526 8.93453 3.21951C8.9514 3.01316 9.1325 2.859 9.33883 2.87576Z\" />\n <path d=\"M9.5 5.60498C9.70711 5.60498 9.875 5.77287 9.875 5.97998C9.875 6.18709 9.70711 6.35498 9.5 6.35498H6.875C6.66789 6.35498 6.5 6.18709 6.5 5.97998C6.5 5.77287 6.66789 5.60498 6.875 5.60498H9.5Z\" />\n <path d=\"M10.625 5.97998C10.625 5.77309 10.4569 5.60498 10.25 5.60498C10.0431 5.60498 9.875 5.77309 9.875 5.97998C9.875 6.18687 10.0431 6.35498 10.25 6.35498C10.4569 6.35498 10.625 6.18687 10.625 5.97998ZM11.375 5.97998C11.375 6.60109 10.8711 7.10498 10.25 7.10498C9.62889 7.10498 9.125 6.60109 9.125 5.97998C9.125 5.35887 9.62889 4.85498 10.25 4.85498C10.8711 4.85498 11.375 5.35887 11.375 5.97998Z\" />\n <path d=\"M4.83132 5.65719C5.03226 5.60714 5.23631 5.72969 5.28639 5.93062C5.33644 6.13153 5.21382 6.33557 5.01296 6.3857C3.90988 6.66049 3.08301 7.61448 2.98757 8.78023C2.9707 8.98655 2.78956 9.14068 2.58327 9.12398C2.37696 9.10711 2.22283 8.92597 2.23952 8.71969C2.36119 7.23157 3.41749 6.00938 4.83132 5.65719Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierDistribute extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-length',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M10.4844 4.21875C10.4844 4.76241 10.0437 5.20312 9.5 5.20312C8.95634 5.20312 8.51562 4.76241 8.51562 4.21875C8.51562 3.67509 8.95634 3.23438 9.5 3.23438C10.0437 3.23438 10.4844 3.67509 10.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016L4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383L7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H8.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierLength extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-mirror',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M11.4844 4.21875C11.4844 4.76241 11.0437 5.20312 10.5 5.20312C9.95634 5.20312 9.51562 4.76241 9.51562 4.21875C9.51562 3.67509 9.95634 3.23438 10.5 3.23438C11.0437 3.23438 11.4844 3.67509 11.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383C7.17481 4.40931 7.17639 4.40997 7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H9.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierMirror extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-check',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 6.5L5.33333 9L10 4\" path-length=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconCheck extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-left',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.6667 6.66667C14.6667 6.66667 13.33 4.84548 12.2441 3.75883C11.1582 2.67218 9.6576 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14C10.7354 14 13.0433 12.1695 13.7655 9.66667M14.6667 6.66667V2.66667M14.6667 6.66667H10.6667\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowLeft extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-right',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.33333 6.66667C1.33333 6.66667 2.66999 4.84548 3.75589 3.75883C4.84179 2.67218 6.3424 2 8 2C11.3137 2 14 4.68629 14 8C14 11.3137 11.3137 14 8 14C5.2646 14 2.95674 12.1695 2.23451 9.66667M1.33333 6.66667V2.66667M1.33333 6.66667H5.33333\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowRight extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-clear',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"clear\"] {\n & > path {\n\n &:first-child {\n translate: var(--ease-icon-clear-path-translate, 0);\n transition: translate var(--ease-icon-clear-path-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-path-delay, 0s);\n }\n\n &:not(:first-child) {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-clear-lines-offset, 100);\n transition: stroke-dashoffset var(--ease-icon-clear-lines-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-lines-delay, 0s);\n }\n }\n\n g {\n path {\n transform-box: fill-box;\n transform-origin: 50% 50%;\n transition: rotate var(--ease-icon-clear-star-duration, 0.2s), scale var(--ease-icon-clear-star-duration, 0.2s);\n\n &:first-child {\n rotate: var(--ease-icon-clear-star-1-rotate, 0deg);\n scale: var(--ease-icon-clear-star-1-scale, 1);\n transition-delay: var(--ease-icon-clear-star-1-delay, 0s);\n }\n\n &:last-child {\n rotate: var(--ease-icon-clear-star-2-rotate, 0deg);\n scale: var(--ease-icon-clear-star-2-scale, 1);\n transition-delay: var(--ease-icon-clear-star-2-delay, 0s);\n }\n }\n }\n }\n `,\n template() {\n return html`\n <svg part=\"clear\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.7613 10.334L13.7071 12.2798C14.1011 12.6739 14.1011 13.3127 13.7071 13.7067C13.3131 14.1007 12.6742 14.1007 12.2802 13.7067L10.3344 11.7609M11.7613 10.334L10.9541 8.08932M11.7613 10.334L10.3344 11.7609M10.3344 11.7609L8.08973 10.9537M6.69581 12.3476L12.348 6.69544C12.6942 6.34922 12.6942 5.7879 12.348 5.44168L11.892 4.98574C11.5458 4.63952 10.9845 4.63952 10.6383 4.98574L4.9861 10.6379C4.63989 10.9841 4.63989 11.5454 4.9861 11.8917L5.44204 12.3476C5.78826 12.6938 6.34959 12.6938 6.69581 12.3476Z\" />\n <g>\n <path d=\"M3.3313 2.6645H4.66519M3.99824 1.99756V3.33145\" />\n <path d=\"M4.66516 5.99946H5.99905M5.33211 5.33252V6.66641\" />\n </g>\n <path d=\"M7.33301 1.99756L8.6669 3.33145\" pathlength=\"100\" />\n <path d=\"M3.6648 8.33386L1.99744 6.6665\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconClear extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-code',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9L11 6L8 3M4 3L1 6L4 9\" />\n </svg>\n `;\n }\n})\nexport class IconCode extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-dots',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00008 8.66655C8.36827 8.66655 8.66675 8.36808 8.66675 7.99989C8.66675 7.6317 8.36827 7.33322 8.00008 7.33322C7.63189 7.33322 7.33341 7.6317 7.33341 7.99989C7.33341 8.36808 7.63189 8.66655 8.00008 8.66655Z\" />\n <path d=\"M12.6667 8.66655C13.0349 8.66655 13.3334 8.36808 13.3334 7.99989C13.3334 7.6317 13.0349 7.33322 12.6667 7.33322C12.2986 7.33322 12.0001 7.6317 12.0001 7.99989C12.0001 8.36808 12.2986 8.66655 12.6667 8.66655Z\" />\n <path d=\"M3.33341 8.66655C3.7016 8.66655 4.00008 8.36808 4.00008 7.99989C4.00008 7.6317 3.7016 7.33322 3.33341 7.33322C2.96522 7.33322 2.66675 7.6317 2.66675 7.99989C2.66675 8.36808 2.96522 8.66655 3.33341 8.66655Z\" />\n </svg>\n `;\n }\n})\nexport class IconDots extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype GridState = 'show' | 'hide';\n\n@Component({\n tag: 'ease-icon-grid',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"grid\"] {\n --ease-icon-grid-offset: 100;\n --ease-icon-grid-rotate: 0deg;\n\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n\n g {\n &:first-of-type {\n path {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-grid-offset);\n transition: stroke-dashoffset 0.2s;\n }\n }\n\n &:last-child {\n transform-origin: 72.92% 72.92%;\n transition: rotate 0.35s linear(0, 0.472 7.5%, 0.832 15.5%, 0.97 19.7%, 1.081 24%, 1.166 28.5%, 1.226 33.2%, 1.255 36.9%, 1.271 40.8%, 1.275 44.9%, 1.266 49.4%, 1.222 57.8%, 1.092 75.1%, 1.042 83%, 1.01 91.4%, 1);\n rotate: var(--ease-icon-grid-rotate);\n }\n }\n\n [data-state=\"hide\"] {\n --ease-icon-grid-offset: 200;\n --ease-icon-grid-rotate: 45deg;\n }\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconGrid extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<GridState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'show'\n })\n accessor state!: GridState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"grid\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.5018 5.49971V3.99909C10.5018 2.6178 9.38204 1.49805 8.00076 1.49805H3.99909C2.6178 1.49805 1.49805 2.6178 1.49805 3.99909V8.00076C1.49805 9.38204 2.6178 10.5018 3.99909 10.5018H5.49971\" />\n <g data-state=${this.state}>\n <path d=\"M7.50059 1.49805V5.49971\" pathlength=\"100\" />\n <path d=\"M4.49937 1.49805V10.5018\" pathlength=\"100\" />\n <path d=\"M1.49805 7.47081H5.49971\" pathlength=\"100\" />\n <path d=\"M1.49805 4.46934H10.5018\" pathlength=\"100\" />\n </g>\n <path d=\"M8.75118 11.0019C7.50813 11.0018 6.50043 9.99415 6.50024 8.7511C6.51896 7.51461 7.5176 6.51719 8.75412 6.5C9.99728 6.50081 11.0044 7.50925 11.0036 8.75241C11.0028 9.99556 9.99434 11.0027 8.75118 11.0019\" />\n <g data-state=${this.state}>\n <path d=\"M8.7512 7.86672V9.63523\" />\n <path d=\"M9.63545 8.75098H7.86694\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-loading',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"loading\"] {\n transform-origin: center center;\n animation-name: loading, loading-dash, loading-dash-offset;\n animation-duration: .4s, .8s, .8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n stroke-dasharray: 35 65 35 65;\n stroke-dashoffset: 75;\n }\n\n @keyframes loading {\n 0% {\n transform: rotate(-90deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n\n @keyframes loading-dash {\n 33% {\n stroke-dasharray: 15 85 15 85;\n }\n 66% {\n stroke-dasharray: 45 55 45 55;\n }\n }\n\n @keyframes loading-dash-offset {\n 33% {\n stroke-dashoffset: 55;\n }\n 66% {\n stroke-dashoffset: 85;\n }\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke-opacity=\"0.25\" />\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" part=\"loading\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class Loading extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-mention',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.4 5.59963V8.59962C10.4 9.07701 10.5896 9.53485 10.9272 9.87242C11.2648 10.21 11.7226 10.3996 12.2 10.3996C12.6774 10.3996 13.1352 10.21 13.4728 9.87242C13.8104 9.53485 14 9.07701 14 8.59962V7.99962C13.9999 6.64544 13.5417 5.33111 12.7 4.27035C11.8582 3.20958 10.6823 2.46476 9.36359 2.15701C8.04484 1.84925 6.66076 1.99665 5.43641 2.57525C4.21206 3.15384 3.21944 4.1296 2.61996 5.34386C2.02048 6.55812 1.84939 7.93947 2.13451 9.26329C2.41963 10.5871 3.14419 11.7756 4.19038 12.6354C5.23657 13.4952 6.54286 13.9758 7.89684 13.9991C9.25083 14.0224 10.5729 13.587 11.648 12.7636M10.4 7.99962C10.4 9.32511 9.32549 10.3996 8 10.3996C6.67452 10.3996 5.6 9.32511 5.6 7.99962C5.6 6.67414 6.67452 5.59963 8 5.59963C9.32549 5.59963 10.4 6.67414 10.4 7.99962Z\" />\n </svg>\n `;\n }\n})\nexport class IconMention extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-settings',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5.33319L10 5.33319M10 5.33319C10 6.43776 10.8954 7.33319 12 7.33319C13.1046 7.33319 14 6.43776 14 5.33319C14 4.22862 13.1046 3.33319 12 3.33319C10.8954 3.33319 10 4.22862 10 5.33319ZM6 10.6665L14 10.6665M6 10.6665C6 11.7711 5.10457 12.6665 4 12.6665C2.89543 12.6665 2 11.7711 2 10.6665C2 9.56195 2.89543 8.66652 4 8.66652C5.10457 8.66652 6 9.56195 6 10.6665Z\" />\n </svg>\n `;\n }\n})\nexport class Settings extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype SnapState = 'active' | 'default';\n\n@Component({\n tag: 'ease-icon-snap',\n styles: `\n :host {\n display: contents;\n }\n [part=\"snap\"] {\n --ease-icon-snap-cursor-rotate: 0deg;\n --ease-icon-snap-lines-rotate: 0deg;\n --ease-icon-snap-lines-translate: 0 0;\n --ease-icon-snap-lines-translate-1: 0 0;\n --ease-icon-snap-lines-translate-2: 0 0;\n --ease-icon-snap-lines-translate-3: 0 0;\n --ease-icon-snap-lines-translate-4: 0 0;\n --ease-icon-snap-lines-rotate-1: 0deg;\n --ease-icon-snap-lines-rotate-2: 0deg;\n --ease-icon-snap-lines-rotate-3: 0deg;\n --ease-icon-snap-lines-rotate-4: 0deg;\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n g {\n transform-origin: 68.75% 68.75%;\n &:first-child {\n rotate: var(--ease-icon-snap-cursor-rotate);\n transition: rotate 0.2s;\n\n path {\n transition: d 0.2s;\n }\n }\n &:last-child {\n rotate: var(--ease-icon-snap-lines-rotate);\n translate: var(--ease-icon-snap-lines-translate);\n transition: rotate 0.2s, translate 0.2s;\n path {\n transition: translate 0.2s;\n transform-box: fill-box;\n transform-origin: 50% 50%;\n &:nth-child(1) {\n translate: var(--ease-icon-snap-lines-translate-1);\n rotate: var(--ease-icon-snap-lines-rotate-1);\n }\n &:nth-child(2) {\n translate: var(--ease-icon-snap-lines-translate-2);\n rotate: var(--ease-icon-snap-lines-rotate-2);\n }\n &:nth-child(3) {\n translate: var(--ease-icon-snap-lines-translate-3);\n rotate: var(--ease-icon-snap-lines-rotate-3);\n }\n &:nth-child(4) {\n translate: var(--ease-icon-snap-lines-translate-4);\n rotate: var(--ease-icon-snap-lines-rotate-4);\n }\n }\n }\n }\n }\n [part=\"cursor\"] {\n stroke: transparent;\n stroke-width: 0;\n fill: currentColor;\n }\n [state=\"active\"] {\n --ease-icon-snap-cursor-rotate: -90deg;\n --ease-icon-snap-lines-rotate: -90deg;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate-1: 1.25px .5px;\n --ease-icon-snap-lines-translate-2: 1.25px -.15px;\n --ease-icon-snap-lines-translate-3: .15px -1.25px;\n --ease-icon-snap-lines-translate-4: -.5px -1.25px;\n --ease-icon-snap-lines-rotate-1: 5deg;\n --ease-icon-snap-lines-rotate-2: 20deg;\n --ease-icon-snap-lines-rotate-3: -20deg;\n --ease-icon-snap-lines-rotate-4: -5deg;\n }\n `,\n observedAttributes: ['state']\n})\nexport class Snap extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<SnapState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'default'\n })\n accessor state!: SnapState;\n\n render(): TemplateResult {\n const defaultPath =\n 'M8.48446 6.48383C8.59007 6.37822 8.71218 6.29901 8.84253 6.24620C8.97289 6.19340 9.11149 6.16699 9.25009 6.16699C9.38869 6.16699 9.52729 6.19340 9.65764 6.24620C9.78799 6.29901 9.91009 6.37822 10.01570 6.48383C10.12128 6.58940 10.20044 6.71143 10.25320 6.84168C10.30597 6.97193 10.33233 7.11041 10.33231 7.24889C10.33229 7.38738 10.30589 7.52587 10.25312 7.65615C10.20034 7.78642 10.12120 7.90848 10.01570 8.01410C9.88354 8.14659 9.75139 8.27907 9.61923 8.41156C9.54601 8.48478 9.44981 8.52139 9.35361 8.52139C9.25741 8.52139 9.16120 8.48478 9.08798 8.41156C9.01476 8.33834 8.97815 8.24214 8.97815 8.14594C8.97815 8.04974 9.01476 7.95353 9.08798 7.88031C9.22014 7.74815 9.35230 7.61599 9.48446 7.48383C9.54924 7.41905 9.58163 7.33401 9.58163 7.24896C9.58163 7.16392 9.54924 7.07888 9.48446 7.01410C9.41974 6.94964 9.33492 6.91741 9.25009 6.91741C9.16526 6.91741 9.08043 6.94963 9.01571 7.01410C8.88355 7.14659 8.75139 7.27907 8.61923 7.41156C8.54601 7.48478 8.44981 7.52139 8.35361 7.52139C8.25741 7.52139 8.16120 7.48478 8.08798 7.41156C8.01476 7.33834 7.97815 7.24214 7.97815 7.14594C7.97815 7.04974 8.01476 6.95354 8.08798 6.88031C8.22014 6.74815 8.35230 6.61599 8.48446 6.48383C8.48446 6.48383 8.48446 6.48383 8.48446 6.48383Z';\n\n const defaultPath2 =\n 'M6.88092 8.08737C6.91753 8.05076 6.95989 8.02330 7.00512 8.00500C7.05035 7.98669 7.09845 7.97754 7.14655 7.97754C7.24275 7.97754 7.33895 8.01415 7.41217 8.08737C7.44878 8.12398 7.47624 8.16634 7.49454 8.21156C7.51285 8.25679 7.52200 8.30489 7.52200 8.35299C7.52200 8.40110 7.51285 8.44920 7.49454 8.49443C7.47624 8.53965 7.44878 8.58201 7.41217 8.61862C7.34593 8.68470 7.27968 8.75078 7.21344 8.81686C7.14720 8.88294 7.08095 8.94902 7.01471 9.01510C6.95024 9.07982 6.91802 9.16465 6.91802 9.24948C6.91802 9.33431 6.95025 9.41914 7.01471 9.48385C7.07949 9.54863 7.16453 9.58102 7.24957 9.58102C7.33462 9.58102 7.41966 9.54863 7.48444 9.48385C7.55052 9.41777 7.61660 9.35169 7.68268 9.28561C7.74876 9.21953 7.81484 9.15345 7.88092 9.08737C7.91753 9.05076 7.95989 9.02330 8.00512 9.00500C8.05035 8.98669 8.09845 8.97754 8.14655 8.97754C8.24275 8.97754 8.33895 9.01415 8.41217 9.08737C8.44878 9.12398 8.47624 9.16634 8.49454 9.21156C8.51285 9.25679 8.52200 9.30489 8.52200 9.35299C8.52200 9.44920 8.48539 9.54540 8.41217 9.61862C8.34593 9.68470 8.27968 9.75078 8.21344 9.81686C8.14720 9.88294 8.08095 9.94902 8.01471 10.01510C7.96190 10.06785 7.90498 10.11401 7.84498 10.15358C7.78498 10.19315 7.72189 10.22613 7.65676 10.25252C7.59162 10.27890 7.52443 10.29870 7.45621 10.31190C7.38799 10.32510 7.31875 10.33170 7.24950 10.33171C7.18026 10.33172 7.11102 10.32514 7.04281 10.31195C6.97460 10.29877 6.90741 10.27898 6.84229 10.25260C6.77716 10.22622 6.71409 10.19324 6.65411 10.15365C6.59413 10.11407 6.53723 10.06789 6.48444 10.01510C6.43163 9.96230 6.38543 9.90537 6.34582 9.84534C6.30622 9.78532 6.27322 9.72221 6.24681 9.65703C6.22041 9.59186 6.20061 9.52462 6.18740 9.45635C6.17420 9.38808 6.16760 9.31878 6.16760 9.24948C6.16760 9.18018 6.17420 9.11088 6.18740 9.04261C6.20061 8.97434 6.22041 8.90710 6.24681 8.84192C6.27322 8.77675 6.30622 8.71363 6.34582 8.65361C6.38543 8.59359 6.43163 8.53666 6.48444 8.48385C6.55052 8.41777 6.61660 8.35169 6.68268 8.28561C6.74876 8.21953 6.81484 8.15345 6.88092 8.08737C6.88092 8.08737 6.88092 8.08737 6.88092 8.08737Z';\n\n const activePath =\n 'M9.25193 6.28166C9.4768 6.23094 9.80415 6.20744 10.0781 6.48185C10.3368 6.74117 10.3461 7.05052 10.3008 7.29338C10.2792 7.40896 10.2435 7.52323 10.2119 7.61955C10.1784 7.72179 10.1479 7.80498 10.124 7.89201C10.12433 7.89234 10.12467 7.89266 10.125 7.89299C9.92512 8.64299 9.72525 9.39300 9.52537 10.14300C9.47203 10.34300 9.2664 10.46180 9.06638 10.40860C8.86627 10.35520 8.74739 10.14970 8.80076 9.94963C9.00063 9.19963 9.20050 8.44963 9.40037 7.69963C9.40069 7.69898 9.40102 7.69832 9.40134 7.69767C9.43192 7.58586 9.47025 7.47290 9.49900 7.38517C9.53005 7.29041 9.55180 7.21804 9.56345 7.15568C9.58449 7.04289 9.56329 7.02762 9.54685 7.01115C9.54547 7.00815 9.54373 6.98452 9.41697 7.01310C9.34508 7.02932 9.27319 7.05278 9.16502 7.08537C9.07787 7.11162 8.97189 7.13866 8.85837 7.15764C8.85870 7.15796 8.85902 7.15829 8.85935 7.15861C8.10935 7.35848 7.35935 7.55835 6.60935 7.75822C6.40924 7.81159 6.20373 7.69271 6.15037 7.49260C6.09724 7.29260 6.21600 7.08695 6.41599 7.03361C7.16599 6.83374 7.91599 6.63387 8.66599 6.43400C8.68104 6.42999 8.69646 6.42733 8.71189 6.42521C8.78100 6.41576 8.85573 6.39545 8.94822 6.36760C9.03125 6.34259 9.14580 6.30560 9.25193 6.28166C9.25193 6.28166 9.25193 6.28166 9.25193 6.28166Z';\n\n const activePath2 =\n 'M6.30855 7.08196C6.48218 6.9692 6.71426 7.01871 6.8271 7.19231C6.93984 7.36595 6.89035 7.59803 6.71675 7.71087C6.55769 7.8143 6.51399 7.8829 6.50288 7.9052C6.50718 7.91375 6.51671 7.92905 6.53804 7.95208C6.59186 8.01016 6.676 8.06871 6.76265 8.11614C6.80333 8.1384 6.83994 8.15555 6.86519 8.16692C6.87727 8.17236 6.88667 8.1762 6.89253 8.17864C6.89522 8.17976 6.89739 8.18117 6.89839 8.18157C6.92411 8.19492 6.94982 8.20826 6.97554 8.22161C7.34059 8.4726 7.44425 8.52362 7.48433 8.54387C7.51885 8.56133 7.56761 8.58533 7.62788 8.63665C7.66711 8.67009 7.71609 8.719 7.77827 8.78118C7.84064 8.84354 7.88955 8.89167 7.9228 8.93059C7.97354 8.98999 7.99693 9.03787 8.0146 9.07219C8.02503 9.09247 8.04365 9.12833 8.09077 9.20501C8.1741 9.33099 8.25744 9.45696 8.34077 9.58294C8.35477 9.60931 8.36876 9.63567 8.38276 9.66204C8.38276 9.66171 8.38276 9.66139 8.38276 9.66106C8.38311 9.66194 8.3836 9.6642 8.38472 9.66692C8.38713 9.67278 8.39182 9.68272 8.39741 9.69524C8.40866 9.72041 8.42527 9.75637 8.44722 9.7968C8.49432 9.88353 8.55171 9.96872 8.60933 10.0224C8.63022 10.0418 8.64563 10.0499 8.65425 10.0546C8.67716 10.0429 8.74616 9.99929 8.84858 9.84173C8.96155 9.66836 9.19361 9.61954 9.36714 9.73235C9.54063 9.84525 9.59026 10.0773 9.47749 10.2509C9.29202 10.5362 9.06335 10.7493 8.77534 10.7988C8.47563 10.8502 8.24137 10.7041 8.09858 10.5712C7.95494 10.4374 7.85125 10.2716 7.78804 10.1552C7.75497 10.0943 7.72938 10.0401 7.71187 10.0009C7.70702 9.99006 7.70284 9.98022 7.69917 9.97161C7.45448 9.61671 7.38641 9.49034 7.34761 9.41497C7.34662 9.41306 7.34544 9.41155 7.34468 9.41009C7.33244 9.39698 7.30693 9.37136 7.24702 9.31145C7.18316 9.24759 7.15849 9.22387 7.14644 9.21282C7.07033 9.17434 6.9431 9.10751 6.58589 8.86321C6.57737 8.85954 6.56726 8.85532 6.55659 8.85052C6.51749 8.83289 6.46383 8.80746 6.40327 8.77434C6.28687 8.71066 6.12089 8.60606 5.98726 8.46184C5.85457 8.31851 5.70938 8.0836 5.76069 7.78411C5.81025 7.49606 6.02305 7.26752 6.30855 7.08196C6.30855 7.08196 6.30855 7.08196 6.30855 7.08196Z';\n\n const path1 = this.state === 'active' ? activePath : defaultPath;\n const path2 = this.state === 'active' ? activePath2 : defaultPath2;\n\n return html`\n <svg part=\"snap\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <g part=\"cursor\">\n <path d=${path1} />\n <path d=${path2} />\n </g>\n \n <path d=\"M2.5 3.5V8.5\" />\n <path d=\"M9.5 5V3.5\" />\n <path d=\"M3.5 9.5H5\" />\n <path d=\"M8.5 2.5H3.5\" />\n \n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 3.5V3.5C1.948 3.5 1.5 3.052 1.5 2.5V2.5C1.5 1.948 1.948 1.5 2.5 1.5V1.5C3.052 1.5 3.5 1.948 3.5 2.5V2.5C3.5 3.052 3.052 3.5 2.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.5 3.5V3.5C8.948 3.5 8.5 3.052 8.5 2.5V2.5C8.5 1.948 8.948 1.5 9.5 1.5V1.5C10.052 1.5 10.5 1.948 10.5 2.5V2.5C10.5 3.052 10.052 3.5 9.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 10.5V10.5C1.948 10.5 1.5 10.052 1.5 9.5V9.5C1.5 8.948 1.948 8.5 2.5 8.5V8.5C3.052 8.5 3.5 8.948 3.5 9.5V9.5C3.5 10.052 3.052 10.5 2.5 10.5Z\" />\n \n <g part=\"lines\">\n <path d=\"M7.5 6V6.5\" />\n <path d=\"M6.5 7.5H6\" />\n <path d=\"M9 10.5V10\" />\n <path d=\"M10 9H10.5\" />\n </g>\n </svg>\n `;\n }\n}\n","import type { CubicBezierPoints, LinearPoints } from './types';\n\nexport const cubicBezierToLinearPoints = (points: CubicBezierPoints): LinearPoints => {\n const start = {\n x: 0,\n y: 0,\n cpOutX: points.p1.x,\n cpOutY: points.p1.y,\n isLinked: true,\n mirrorLength: true\n };\n\n const end = {\n x: 1,\n y: 1,\n cpInX: points.p2.x - 1,\n cpInY: points.p2.y - 1,\n isLinked: true,\n mirrorLength: true\n };\n\n return [start, end];\n};\n","export const canvasStyles = `\n :host {\n display: block;\n width: 100%;\n max-width: 500px;\n position: relative;\n }\n\n svg {\n width: 300px;\n height: auto;\n cursor: pointer;\n touch-action: none;\n user-select: none;\n overflow: visible;\n border-radius: 8px;\n }\n\n .grid-line {\n stroke: var(--color-white-4);\n stroke-width: .75;\n }\n\n .curve-path {\n stroke: var(--color-blue-100);\n stroke-width: 2.5;\n fill: none;\n stroke-linecap: round;\n stroke-linejoin: round;\n transition: stroke-width 150ms ease;\n }\n\n .curve-path--preview {\n stroke: var(--color-blue-800);\n stroke-width: 2.5;\n stroke-dasharray: 5, 5;\n opacity: 0;\n pointer-events: none;\n animation: previewPathFade 180ms ease forwards;\n }\n\n .control-point {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1.5;\n cursor: grab;\n }\n\n .control-point:active {\n cursor: grabbing;\n }\n\n .control-point.selected {\n }\n\n .anchor-point-start {\n fill: var(--color-blue-100);\n pointer-events: none;\n r: 5px;\n transition: r .2s;\n }\n\n .anchor-point {\n fill: var(--color-blue-900);\n stroke: var(--color-blue-900);\n stroke-width: 1;\n pointer-events: none;\n r: 5px;\n transition: r .2s;\n }\n\n .anchor-point:hover {\n r: 5.5px;\n }\n\n .control-line {\n stroke: var(--color-blue-800);\n stroke-width: 3;\n pointer-events: none;\n display: none;\n }\n\n .linear-point {\n fill: var(--color-blue-100);\n cursor: grab;\n r: 3px;\n transition: r .2s;\n }\n\n .hit-area-point:hover + .linear-point,\n .linear-point:hover,\n .linear-point:active,\n .linear-point.selected {\n r: 5px;\n }\n\n .linear-point.selected {\n fill: var(--color-blue-300);\n stroke-width: 1.5;\n }\n\n .linear-handle-line {\n stroke: var(--color-blue-800);\n stroke-width: 3;\n pointer-events: none;\n transition: opacity 150ms ease;\n display: none;\n }\n\n .linear-handle {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1;\n cursor: grab;\n }\n\n .linear-handle.selected {\n }\n\n .linear-handle:active {\n cursor: grabbing;\n }\n\n .hit-area-point,\n .hit-area-handle {\n fill: transparent;\n stroke: transparent;\n pointer-events: all;\n cursor: inherit;\n r: 10px;\n }\n\n @keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.6;\n }\n 100% {\n opacity: 1;\n }\n }\n\n .curve-path.animating {\n animation: pulse 1s ease-in-out infinite;\n }\n\n @keyframes previewPathFade {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.6;\n }\n }\n\n @keyframes previewElementFade {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.85;\n }\n }\n\n .linear-preview-group {\n pointer-events: none;\n }\n\n .linear-point--preview,\n .linear-handle--preview,\n .linear-handle-line--preview {\n animation: previewElementFade 180ms ease forwards;\n }\n\n .linear-point--preview {\n fill: var(--color-blue-100);\n }\n\n .linear-handle--preview {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1.5;\n }\n\n .linear-handle-line--preview {\n stroke: var(--color-blue-800);\n stroke-width: 2.5;\n stroke-dasharray: 4 4;\n display: none;\n }\n`;\n\nexport const controlsStyles = `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.75rem;\n }\n\n [part=\"radio-group\"] {\n width: 100%;\n box-sizing: border-box;\n }\n\n [part=\"easing-type-dropdown\"] {\n --ease-dropdown-max-height: 212px;\n }\n`;\n\nexport const outputStyles = `\n :host {\n display: block;\n }\n\n .output-container {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .output-group {\n position: relative;\n display: block;\n }\n\n .output-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--color-gray-1000);\n margin: 0;\n }\n\n .output-code {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-size: 0.8125rem;\n line-height: 1.6;\n padding: 1rem;\n background: var(--color-gray-1000);\n color: var(--color-gray-700);\n border-radius: 0.375rem;\n border: 1px solid #334155;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n max-width: 100%;\n tab-size: 2;\n }\n\n .copy-button {\n align-self: flex-start;\n padding: 0.425rem 0.875rem;\n border: 1px solid var(--color-white-6);\n border-radius: 0.375rem;\n background: white;\n color: var(--color-gray-1000);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n user-select: none;\n }\n\n .copy-button:hover {\n background: var(--color-gray-1000);\n border-color: #9ca3af;\n transform: translateY(-1px);\n }\n\n .copy-button:active {\n transform: translateY(0);\n }\n\n .copy-button:focus-visible {\n outline: 2px solid var(--color-blue-700);\n outline-offset: 2px;\n }\n\n .copy-button.copied {\n background: var(--color-blue-100);\n border-color: var(--color-blue-100);\n color: white;\n }\n\n .preview-container {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .preview-box {\n width: 100%;\n max-width: 300px;\n height: 80px;\n background: linear-gradient(135deg, var(--color-blue-700) 0%, var(--color-blue-100) 100%);\n border-radius: 0.5rem;\n position: relative;\n overflow: hidden;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n transition: box-shadow 150ms ease;\n }\n\n .preview-box:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .preview-animation {\n width: 24px;\n height: 24px;\n background: white;\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 12px;\n transform: translateY(-50%);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n transition-property: transform;\n transition-duration: 2s;\n }\n\n .preview-animation.animate {\n transform: translateY(-50%) translateX(calc(100% - 48px));\n }\n`;\n\nexport const containerStyles = `\n :host {\n display: block;\n }\n\n .curve-container {\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .curve-header {\n }\n\n .curve-canvas-wrapper {\n position: relative;\n margin-top: 16px;\n }\n\n .curve-canvas {\n background-color: var(--color-white-2);\n box-shadow: 0 0 32px 0 var(--color-white-2) inset;\n border-radius: 7px;\n }\n\n .curve-toolbar {\n margin-top: 8px;\n }\n`;\n\nexport const canvasControlsStyles = `\n :host {\n position: absolute;\n top: 8px;\n left: 8px;\n z-index: 10;\n display: flex;\n flex-direction: column;\n gap: 4px;\n pointer-events: none;\n }\n\n :host([hidden]) {\n display: none;\n }\n\n .overlay-controls {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n pointer-events: auto;\n }\n\n .overlay-button {\n --ease-icon-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n color: var(--color-gray-600);\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n cursor: pointer;\n transition: color 0.2s;\n appearance: none;\n border: none;\n outline: none;\n margin: 0;\n }\n\n .overlay-button:hover {\n color: var(--color-gray-300);\n }\n\n .overlay-button:disabled {\n color: var(--color-gray-700);\n cursor: not-allowed;\n }\n\n .overlay-button.inactive {\n color: var(--color-blue-100);\n }\n`;\n\nexport const toolbarStyles = `\n :host {\n display: block;\n width: 100%;\n }\n\n .toolbar-container {\n width: 100%;\n display: grid;\n gap: 8px;\n }\n\n .toolbar-group {\n width: 100%;\n display: flex;\n gap: 8px;\n box-sizing: border-box;\n align-items: center;\n padding: 6px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n }\n\n .toolbar-button {\n --ease-icon-size: 16px;\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px;\n color: var(--color-gray-600);\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n appearance: none;\n cursor: pointer;\n transition: color 0.2s;\n }\n\n .toolbar-button:hover {\n color: var(--color-blue-100);\n }\n\n .toolbar-button:disabled {\n color: var(--color-gray-700);\n cursor: not-allowed;\n }\n\n .grid-size-controls {\n display: grid;\n grid-template-columns: 24px auto 24px;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n }\n\n .grid-size-controls ease-button {\n --ease-icon-size: 14px;\n width: 24px;\n height: 24px;\n box-sizing: border-box;\n display: flex;\n padding: 0;\n align-items: center;\n justify-content: center;\n }\n\n .grid-size-value {\n display: flex;\n width: 20px;\n justify-content: center;\n align-items: center;\n font-feature-settings: 'tnum' on;\n font-variant-numeric: tabular-nums;\n font-size: 11px;\n font-weight: 500;\n line-height: 14px;\n text-align: center;\n }\n`;\n","export enum EasingType {\n CUBIC_BEZIER = 'cubic-bezier',\n LINEAR = 'linear'\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface CSSCode {\n code: string;\n timingFunction: string;\n}\n\nexport interface LinearPoint extends Point {\n cpInX?: number;\n cpInY?: number;\n cpOutX?: number;\n cpOutY?: number;\n isLinked?: boolean;\n mirrorLength?: boolean;\n id?: string;\n}\n\nexport interface CubicBezierPoints {\n p1: Point;\n p2: Point;\n}\n\nexport type LinearPoints = LinearPoint[];\n\nexport interface EasingData {\n type: EasingType;\n points: CubicBezierPoints | LinearPoints;\n name: string;\n}\n\nexport const MIN_LINEAR_POINTS = 2;\nexport const MAX_LINEAR_POINTS = 30;\n","import type { CSSCode, CubicBezierPoints, LinearPoint, LinearPoints, Point } from './types';\n\nexport const clampPoint = (\n point: Point,\n bounds?: { minX?: number; maxX?: number; minY?: number; maxY?: number }\n): Point => {\n const minX = bounds?.minX ?? 0;\n const maxX = bounds?.maxX ?? 1;\n const minY = bounds?.minY ?? 0;\n const maxY = bounds?.maxY ?? 1;\n\n return {\n x: Math.max(minX, Math.min(maxX, point.x)),\n y: Math.max(minY, Math.min(maxY, point.y))\n };\n};\n\nexport const MIN_LINEAR_DELTA = 0.0001;\n\nlet linearPointIdCounter = 0;\n\nconst nextLinearPointId = (): string => {\n linearPointIdCounter += 1;\n return `linear-point-${linearPointIdCounter}`;\n};\n\nexport const ensureLinearPointId = (point: LinearPoint): string => {\n if (!point.id) {\n point.id = nextLinearPointId();\n }\n return point.id;\n};\n\nexport const cloneLinearPoint = (point: LinearPoint): LinearPoint => {\n const sourceId = ensureLinearPointId(point);\n return {\n ...point,\n id: sourceId\n };\n};\n\nexport const cubicBezierPath = (points: CubicBezierPoints): string => {\n const { p1, p2 } = points;\n const startX = 0;\n const startY = 300;\n const endX = 400;\n const endY = 0;\n\n const cp1x = p1.x * 400;\n const cp1y = (1 - p1.y) * 300;\n const cp2x = p2.x * 400;\n const cp2y = (1 - p2.y) * 300;\n\n return `M ${startX} ${startY} C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${endX} ${endY}`;\n};\n\nexport const linearDisplayPath = (points: LinearPoints): string => {\n if (points.length < 2) {\n return '';\n }\n\n const toSvg = (p: Point): Point => {\n return {\n x: p.x * 400,\n y: (1 - p.y) * 300\n };\n };\n\n const startPoint = points[0];\n if (!startPoint) {\n return '';\n }\n\n const start = toSvg(startPoint);\n let d = `M ${start.x} ${start.y}`;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const p1 = points[index];\n const p2 = points[index + 1];\n\n if (!p1 || !p2) {\n continue;\n }\n\n const cp1 = {\n x: p1.x + (p1.cpOutX ?? 0),\n y: p1.y + (p1.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: p2.x + (p2.cpInX ?? 0),\n y: p2.y + (p2.cpInY ?? 0)\n };\n\n if (cp1.x === p1.x && cp1.y === p1.y && cp2.x === p2.x && cp2.y === p2.y) {\n const end = toSvg(p2);\n d += ` L ${end.x} ${end.y}`;\n } else {\n const svgCp1 = toSvg(cp1);\n const svgCp2 = toSvg(cp2);\n const end = toSvg(p2);\n d += ` C ${svgCp1.x} ${svgCp1.y}, ${svgCp2.x} ${svgCp2.y}, ${end.x} ${end.y}`;\n }\n }\n\n return d;\n};\n\nconst perpendicularDistance = (point: Point, lineStart: Point, lineEnd: Point): number => {\n const dx = lineEnd.x - lineStart.x;\n const dy = lineEnd.y - lineStart.y;\n\n if (dx === 0 && dy === 0) {\n return Math.sqrt((point.x - lineStart.x) ** 2 + (point.y - lineStart.y) ** 2);\n }\n\n const numerator = Math.abs(dy * point.x - dx * point.y + lineEnd.x * lineStart.y - lineEnd.y * lineStart.x);\n const denominator = Math.sqrt(dx * dx + dy * dy);\n\n return numerator / denominator;\n};\n\nconst simplifyPoints = (points: Point[], epsilon: number): Point[] => {\n if (points.length < 3) {\n return points;\n }\n\n let dmax = 0;\n let index = 0;\n const end = points.length - 1;\n const startPoint = points[0];\n const endPoint = points[end];\n\n if (!startPoint || !endPoint) {\n return points;\n }\n\n for (let i = 1; i < end; i++) {\n const point = points[i];\n if (!point) {\n continue;\n }\n\n const d = perpendicularDistance(point, startPoint, endPoint);\n if (d > dmax) {\n index = i;\n dmax = d;\n }\n }\n\n if (dmax > epsilon) {\n const recResults1 = simplifyPoints(points.slice(0, index + 1), epsilon);\n const recResults2 = simplifyPoints(points.slice(index, end + 1), epsilon);\n\n return [...recResults1.slice(0, -1), ...recResults2];\n }\n\n return [startPoint, endPoint];\n};\n\nexport const generateCubicBezierCSS = (\n points: CubicBezierPoints,\n name: string,\n variant: 'animation' | 'transition' = 'animation'\n): CSSCode => {\n const { p1, p2 } = points;\n const timingFunction = `cubic-bezier(${p1.x.toFixed(3)}, ${p1.y.toFixed(3)}, ${p2.x.toFixed(3)}, ${p2.y.toFixed(3)})`;\n const code = `\n .${name} {\n ${variant}-timing-function: ${timingFunction};\n }\n `;\n\n return {\n code,\n timingFunction\n };\n};\n\nexport const getLinearApproximation = (\n points: LinearPoints,\n options: { simplify?: number; round?: number } = {}\n): Point[] => {\n const { simplify = 0, round = 5 } = options;\n\n const samples: Point[] = [];\n const numSamplesPerSegment = 20;\n\n const sortedPoints = [...points].sort((a, b) => a.x - b.x);\n\n for (let index = 0; index < sortedPoints.length - 1; index += 1) {\n const p1 = sortedPoints[index];\n const p2 = sortedPoints[index + 1];\n\n if (!p1 || !p2) {\n continue;\n }\n\n if (index === 0) {\n samples.push({ x: p1.x, y: p1.y });\n }\n\n const cp1 = {\n x: p1.x + (p1.cpOutX ?? 0),\n y: p1.y + (p1.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: p2.x + (p2.cpInX ?? 0),\n y: p2.y + (p2.cpInY ?? 0)\n };\n\n for (let step = 1; step <= numSamplesPerSegment; step += 1) {\n const t = step / numSamplesPerSegment;\n const x = cubicBezier(t, p1.x, cp1.x, cp2.x, p2.x);\n const y = cubicBezier(t, p1.y, cp1.y, cp2.y, p2.y);\n samples.push({ x, y });\n }\n }\n\n const normalizedSamples: Point[] = [];\n let lastX = -Infinity;\n\n for (const sample of samples) {\n const clampedX = Math.max(0, Math.min(1, sample.x));\n const clampedY = Math.max(-2, Math.min(3, sample.y));\n\n if (clampedX > lastX + MIN_LINEAR_DELTA) {\n normalizedSamples.push({ x: clampedX, y: clampedY });\n lastX = clampedX;\n }\n }\n\n if (normalizedSamples.length < 2) {\n return [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n }\n\n const firstPoint = sortedPoints[0];\n if (firstPoint && Math.abs(firstPoint.x) < MIN_LINEAR_DELTA && normalizedSamples.length > 0) {\n const firstSample = normalizedSamples[0];\n if (firstSample) {\n firstSample.x = 0;\n }\n }\n\n const lastPoint = sortedPoints[sortedPoints.length - 1];\n if (lastPoint && Math.abs(lastPoint.x - 1) < MIN_LINEAR_DELTA && normalizedSamples.length > 0) {\n const lastSample = normalizedSamples[normalizedSamples.length - 1];\n if (lastSample) {\n lastSample.x = 1;\n }\n }\n\n let finalSamples = normalizedSamples;\n if (simplify > 0) {\n finalSamples = simplifyPoints(normalizedSamples, simplify);\n }\n\n return finalSamples.map((sample) => {\n return {\n x: sample.x,\n y: Number(sample.y.toFixed(round))\n };\n });\n};\n\nexport const generateLinearCSS = (\n points: LinearPoints | undefined,\n name: string,\n variant: 'animation' | 'transition' = 'animation',\n options: { simplify?: number; round?: number } = {}\n): CSSCode => {\n if (!Array.isArray(points) || points.length < 2) {\n return { code: '', timingFunction: '' };\n }\n\n const finalSamples = getLinearApproximation(points, options);\n\n const parts = finalSamples.map((sample) => {\n const y = sample.y;\n const x = Number((sample.x * 100).toFixed(2));\n return `${y} ${x}%`;\n });\n const timingFunction = `linear(${parts.join(', ')})`;\n const code = `\n .${name} {\n ${variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n};\n\nexport const cubicBezierToLinear = (points: CubicBezierPoints, steps: number = 20): LinearPoints => {\n const linearPoints: LinearPoints = [];\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = cubicBezier(t, 0, points.p1.x, points.p2.x, 1);\n const y = cubicBezier(t, 0, points.p1.y, points.p2.y, 1);\n linearPoints.push({ x, y });\n }\n\n return linearPoints;\n};\n\nconst cubicBezier = (t: number, p0: number, p1: number, p2: number, p3: number): number => {\n const u = 1 - t;\n const tt = t * t;\n const uu = u * u;\n const uuu = uu * u;\n const ttt = tt * t;\n\n return uuu * p0 + 3 * uu * t * p1 + 3 * u * tt * p2 + ttt * p3;\n};\n\nexport const validateCubicBezierPoints = (points: CubicBezierPoints): boolean => {\n const { p1, p2 } = points;\n return p1.x >= 0 && p1.x <= 1 && p2.x >= 0 && p2.x <= 1;\n};\n\nexport const validateLinearPoints = (points: LinearPoints): boolean => {\n if (points.length < 2) {\n return false;\n }\n\n const sortedPoints = [...points].sort((a, b) => a.x - b.x);\n\n for (let index = 0; index < sortedPoints.length; index += 1) {\n const point = sortedPoints[index];\n\n if (!point) {\n return false;\n }\n if (point.x < 0 || point.x > 1) {\n return false;\n }\n\n if (index >= sortedPoints.length - 1) {\n continue;\n }\n\n const next = sortedPoints[index + 1];\n\n if (!next) {\n return false;\n }\n\n if (next.x <= point.x + MIN_LINEAR_DELTA) {\n return false;\n }\n }\n\n const first = sortedPoints[0];\n const last = sortedPoints[sortedPoints.length - 1];\n if (first && Math.abs(first.x) > MIN_LINEAR_DELTA) {\n return false;\n }\n if (last && Math.abs(last.x - 1) > MIN_LINEAR_DELTA) {\n return false;\n }\n\n return true;\n};\n\nexport const normalizeLinearPoints = (points: LinearPoints): LinearPoints => {\n if (points.length === 0) {\n return [];\n }\n\n const normalized: LinearPoints = [...points].sort((a, b) => a.x - b.x).map((point) => cloneLinearPoint(point));\n\n const first = normalized[0];\n if (first) {\n first.x = 0;\n }\n\n const last = normalized[normalized.length - 1];\n if (last) {\n last.x = 1;\n }\n\n for (let index = 0; index < normalized.length; index += 1) {\n const point = normalized[index];\n if (!point) {\n continue;\n }\n\n const minY = -2;\n const maxY = 3;\n point.y = Math.max(minY, Math.min(maxY, point.y));\n\n if ((point.cpInX ?? 0) > 0) {\n point.cpInX = 0;\n }\n if ((point.cpOutX ?? 0) < 0) {\n point.cpOutX = 0;\n }\n\n const handleThreshold = 0;\n if (Math.abs(point.cpInX ?? 0) < handleThreshold && Math.abs(point.cpInY ?? 0) < handleThreshold) {\n delete point.cpInX;\n delete point.cpInY;\n }\n if (Math.abs(point.cpOutX ?? 0) < handleThreshold && Math.abs(point.cpOutY ?? 0) < handleThreshold) {\n delete point.cpOutX;\n delete point.cpOutY;\n }\n\n if (point.cpInX === undefined && point.cpOutX === undefined) {\n delete point.isLinked;\n delete point.mirrorLength;\n } else if (point.isLinked !== true) {\n point.mirrorLength = false;\n }\n }\n\n return normalized;\n};\n\nconst clamp01 = (value: number): number => {\n if (Number.isNaN(value)) {\n return 0;\n }\n return Math.min(1, Math.max(0, value));\n};\n\nexport const parseCubicBezierValue = (input: string): CubicBezierPoints | null => {\n const match = input.trim().match(/^cubic-bezier\\s*\\((.+)\\)$/i);\n\n if (!match) {\n return null;\n }\n\n const body = match[1];\n if (!body) {\n return null;\n }\n\n const parts = body\n .split(',')\n .map((part) => Number.parseFloat(part.trim()))\n .filter((value) => Number.isFinite(value));\n\n if (parts.length !== 4) {\n return null;\n }\n\n const [x1, y1, x2, y2] = parts as [number, number, number, number];\n\n if ([x1, y1, x2, y2].some((value) => Number.isNaN(value))) {\n return null;\n }\n\n return {\n p1: { x: clamp01(x1), y: y1 },\n p2: { x: clamp01(x2), y: y2 }\n };\n};\n\ntype LinearStop = {\n y: number;\n x: number | null;\n};\n\nconst ensureStopPositions = (stops: LinearStop[]): void => {\n if (stops.length === 0) {\n return;\n }\n\n const first = stops[0];\n if (first && first.x == null) {\n first.x = 0;\n }\n\n const lastIndex = stops.length - 1;\n const last = stops[lastIndex];\n if (last && last.x == null) {\n last.x = 1;\n }\n\n const assignBetween = (startIndex: number, endIndex: number): void => {\n const startStop = stops[startIndex];\n const endStop = stops[endIndex];\n\n if (!startStop || !endStop || startStop.x == null || endStop.x == null) {\n return;\n }\n\n const span = endStop.x - startStop.x;\n const segments = endIndex - startIndex;\n\n if (segments <= 1) {\n return;\n }\n\n for (let offset = 1; offset < segments; offset += 1) {\n const index = startIndex + offset;\n const ratio = offset / segments;\n const target = stops[index];\n if (target) {\n target.x = startStop.x + span * ratio;\n }\n }\n };\n\n let lastDefined = 0;\n\n for (let index = 1; index < stops.length; index += 1) {\n if (stops[index]?.x != null) {\n assignBetween(lastDefined, index);\n lastDefined = index;\n }\n }\n\n if (lastDefined < stops.length - 1) {\n assignBetween(lastDefined, stops.length - 1);\n }\n};\n\nexport const parseLinearTimingFunction = (input: string): LinearPoints | null => {\n const match = input.trim().match(/^linear\\s*\\((.+)\\)$/is);\n\n if (!match) {\n return null;\n }\n\n const body = match[1];\n if (!body) {\n return null;\n }\n\n const segments = body\n .split(',')\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n\n if (segments.length < 2) {\n return null;\n }\n\n const stops: LinearStop[] = [];\n\n for (const segment of segments) {\n const parts = segment.split(/\\s+/).filter((part) => part.length > 0);\n if (parts.length === 0) {\n continue;\n }\n\n const valueToken = parts[0];\n if (!valueToken) {\n continue;\n }\n const value = Number.parseFloat(valueToken);\n if (Number.isNaN(value)) {\n return null;\n }\n\n let position: number | null = null;\n\n for (let index = 1; index < parts.length; index += 1) {\n const token = parts[index];\n if (!token) {\n continue;\n }\n const percentMatch = token.match(/^(-?\\d+(?:\\.\\d+)?)%$/);\n if (percentMatch) {\n const [, percentValue] = percentMatch;\n if (percentValue === undefined) {\n break;\n }\n const parsed = Number.parseFloat(percentValue);\n if (!Number.isNaN(parsed)) {\n position = clamp01(parsed / 100);\n }\n break;\n }\n }\n\n stops.push({ y: value, x: position });\n }\n\n if (stops.length < 2) {\n return null;\n }\n\n ensureStopPositions(stops);\n\n const rawPoints: LinearPoints = stops.map((stop) => {\n const x = stop.x ?? 0;\n return { x: clamp01(x), y: stop.y };\n });\n\n return normalizeLinearPoints(rawPoints);\n};\n\nexport const vectorLength = (dx: number, dy: number): number => Math.sqrt(dx * dx + dy * dy);\n\nexport const normalizeVector = (dx: number, dy: number): { dx: number; dy: number } => {\n const length = vectorLength(dx, dy);\n\n if (length === 0) {\n return { dx: 0, dy: 0 };\n }\n\n return { dx: dx / length, dy: dy / length };\n};\n\nexport const smoothLinearPoints = (points: LinearPoints, tension = 0.25): LinearPoints => {\n if (points.length < 2) {\n return points;\n }\n\n return points.map((point, index) => {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n const smoothedPoint: LinearPoint = { ...point, isLinked: true, mirrorLength: true };\n\n if (index === 0 && next) {\n const dx = next.x - point.x;\n const dy = next.y - point.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const handleLength = length * tension;\n\n if (length > 0) {\n smoothedPoint.cpOutX = (dx / length) * handleLength;\n smoothedPoint.cpOutY = (dy / length) * handleLength;\n }\n return smoothedPoint;\n }\n\n if (index === points.length - 1 && prev) {\n const dx = point.x - prev.x;\n const dy = point.y - prev.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const handleLength = length * tension;\n\n if (length > 0) {\n smoothedPoint.cpInX = -(dx / length) * handleLength;\n smoothedPoint.cpInY = -(dy / length) * handleLength;\n }\n return smoothedPoint;\n }\n\n if (prev && next) {\n const tangentX = next.x - prev.x;\n const tangentY = next.y - prev.y;\n const tangentLength = Math.sqrt(tangentX * tangentX + tangentY * tangentY);\n\n if (tangentLength > 0) {\n const normalizedTx = tangentX / tangentLength;\n const normalizedTy = tangentY / tangentLength;\n\n const distToPrev = Math.sqrt((point.x - prev.x) ** 2 + (point.y - prev.y) ** 2);\n const distToNext = Math.sqrt((next.x - point.x) ** 2 + (next.y - point.y) ** 2);\n\n const inHandleLength = distToPrev * tension;\n const outHandleLength = distToNext * tension;\n\n smoothedPoint.cpInX = -normalizedTx * inHandleLength;\n smoothedPoint.cpInY = -normalizedTy * inHandleLength;\n smoothedPoint.cpOutX = normalizedTx * outHandleLength;\n smoothedPoint.cpOutY = normalizedTy * outHandleLength;\n }\n }\n\n return smoothedPoint;\n });\n};\n","export const HANDLE_RADIUS = 5;\nexport const POINT_RADIUS = 6;\nexport const HIT_AREA_RADIUS = 12;\n\nexport const LINEAR_HIT_THRESHOLD = 0.1;\nexport const LINEAR_PATH_SAMPLES = 40;\nexport const DRAG_ACTIVATION_DISTANCE_PX = 4;\nexport const DRAG_ACTIVATION_DISTANCE_PX_SQUARED = DRAG_ACTIVATION_DISTANCE_PX * DRAG_ACTIVATION_DISTANCE_PX;\n\nexport const DEFAULT_HANDLE_LENGTH = 0.15;\nexport const SVG_WIDTH = 400;\nexport const SVG_HEIGHT = 300;\n\nexport const GRID_SNAP_THRESHOLD = 0.05;\n\nexport const BEZIER_CONTROL_MIN_Y = -0.5;\nexport const BEZIER_CONTROL_MAX_Y = 1.5;\n\ntype EasingPresetOption = {\n value: string;\n label: string;\n};\n\ntype EasingPreset = {\n label: string;\n options: EasingPresetOption[];\n};\n\nexport const EASING_PRESETS: EasingPreset[] = [\n {\n label: 'Standard',\n options: [\n {\n value: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n label: 'ease'\n },\n {\n value: 'cubic-bezier(0.42, 0, 1, 1)',\n label: 'ease-in'\n },\n {\n value: 'cubic-bezier(0, 0, 0.58, 1)',\n label: 'ease-out'\n },\n {\n value: 'cubic-bezier(0.42, 0, 0.58, 1)',\n label: 'ease-in-out'\n }\n ]\n },\n {\n label: 'Cubic',\n options: [\n {\n value: 'cubic-bezier(0.55, 0.055, 0.675, 0.19)',\n label: 'easeInCubic'\n },\n {\n value: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n label: 'easeOutCubic'\n },\n {\n value: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n label: 'easeInOutCubic'\n }\n ]\n },\n {\n label: 'Back (overshoot)',\n options: [\n {\n value: 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n label: 'easeInBack'\n },\n {\n value: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n label: 'easeOutBack'\n },\n {\n value: 'cubic-bezier(0.68, -0.4, 0.32, 1.4)',\n label: 'easeInOutBack'\n }\n ]\n },\n {\n label: 'Spring',\n options: [\n {\n value: 'linear(0, 0.6 18%, 1.1 36%, 0.94 48%, 1.02 60%, 0.98 72%, 1.01 84%, 1)',\n label: 'springGentle'\n },\n {\n value: 'linear(0, 0.8 12%, 1.2 28%, 0.88 44%, 1.08 58%, 0.96 72%, 1.02 86%, 1)',\n label: 'springBouncy'\n },\n {\n value: 'linear(0, 1.4 20%, 0.85 40%, 1.1 60%, 0.95 80%, 1)',\n label: 'springSnappy'\n },\n {\n value:\n 'linear(0, 0.03 1.1%, 0.125 2.4%, 0.906 9.8%, 1.046 12.3%, 1.11 15%, 1.116 16.3%, 1.11 17.8%, 1.014 25.8%, 0.987 31.2%, 1.001 47.2%, 1)',\n label: 'springSnap'\n },\n {\n value:\n 'linear(0, 0.012 0.9%, 0.05 2%, 0.411 9.2%, 0.517 11.8%, 0.611 14.6%, 0.694 17.7%, 0.765 21.1%, 0.824 24.8%, 0.872 28.9%, 0.91 33.4%, 0.939 38.4%, 0.977 50.9%, 0.994 68.4%, 1)',\n label: 'springGlide'\n },\n {\n value:\n 'linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1)',\n label: 'springLazy'\n }\n ]\n },\n {\n label: 'Bounce',\n options: [\n {\n value: 'linear(0, 0.22 15%, 0.5 30%, 0.78 45%, 1 60%, 0.88 70%, 1 80%, 0.95 88%, 1)',\n label: 'bounceOut'\n },\n {\n value: 'linear(0, 0.05 12%, 0 24%, 0.12 36%, 0.5 50%, 0.88 64%, 1 76%, 0.95 88%, 1)',\n label: 'bounceInOut'\n },\n {\n value:\n 'linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1)',\n label: 'bounceGentle'\n },\n {\n value:\n 'linear(0, 0.453 7.8%, 0.803 16.1%, 1.048 24.9%, 1.132 29.5%, 1.194 34.4%, 1.227 38.4%, 1.245 42.5%, 1.25 46.9%, 1.242 51.7%, 1.2 60.5%, 1.038 84.9%, 1.009 92.5%, 1)',\n label: 'bounceSmooth'\n }\n ]\n },\n {\n label: 'Elastic',\n options: [\n {\n value: 'linear(0, 1.3 24%, 0.85 42%, 1.1 58%, 0.95 74%, 1.02 88%, 1)',\n label: 'elasticOut'\n },\n {\n value: 'linear(0, -0.1 18%, 0.15 36%, 0.5 50%, 0.85 64%, 1.1 82%, 1)',\n label: 'elasticInOut'\n },\n {\n value:\n 'linear(0, 0.43 3.9%, 0.72 7.4%, 0.95 14.2%, 0.77 20.8%, -0.1 35.9%, -0.3 46.3%, -0.05 63.6%, 0.03 77.2%, 0)',\n label: 'elasticBounce'\n },\n {\n value:\n 'linear(0, 0.59 6.1%, 0.77 11.4%, 0.6 16.9%, -0.24 29%, -0.41 35.7%, 0.03 51.2%, 0.14 59.9%, -0.02 82.8%, 0)',\n label: 'elasticBounceHard'\n }\n ]\n },\n {\n label: 'Overshoot',\n options: [\n {\n value: 'linear(0, 1 44.7%, 0.898 51.8%, 0.874 55.1%, 0.866 58.4%, 0.888 64.3%, 1 77.4%, 0.98 84.5%, 1)',\n label: 'overshootSettle'\n },\n {\n value:\n 'linear(0, 0.402 7.4%, 0.711 15.3%, 0.929 23.7%, 1.008 28.2%, 1.067 33%, 1.099 36.9%, 1.12 41%, 1.13 45.4%, 1.13 50.1%, 1.111 58.5%, 1.019 83.2%, 1.004 91.3%, 1)',\n label: 'overshootSmooth'\n },\n {\n value:\n 'linear(0, 0.544 5.5%, 0.947 11.5%, 1.14 18.1%, 1.23 25.5%, 1.25 31.1%, 1.23 37.6%, 1.08 61.8%, 1.03 73.7%, 1)',\n label: 'overshootStrong'\n },\n {\n value:\n 'linear(0, -0.004 8.7%, -0.019 16.8%, -0.111 41.5%, -0.13 49.9%, -0.13 54.6%, -0.12 59%, -0.099 63.1%, -0.067 67%, -0.008 71.8%, 0.071 76.3%, 0.289 84.7%, 0.598 92.6%, 1)',\n label: 'overshootSoftIn'\n },\n {\n value:\n 'linear(0, 0.402 7.4%, 0.711 15.3%, 0.929 23.7%, 1.008 28.2%, 1.067 33%, 1.099 36.9%, 1.12 41%, 1.13 45.4%, 1.13 50.1%, 1.111 58.5%, 1.019 83.2%, 1.004 91.3%, 1)',\n label: 'overshootSoftOut'\n },\n {\n value:\n 'linear(0, -0.004 4.9%, -0.02 9.4%, -0.124 26.4%, -0.126 30.5%, -0.104 34.1%, -0.027 38.8%, 0.108 43.1%, 0.299 47%, 0.817 55.2%, 0.97 59.1%, 1.071 63.4%, 1.118 67.7%, 1.127 72.6%, 1.108 77.2%, 1.019 90.7%, 1.004 95.2%, 1)',\n label: 'overshootSoftInOut'\n }\n ]\n },\n {\n label: 'Anticipate',\n options: [\n {\n value:\n 'linear(0, -0.009 7.5%, -0.038 15.1%, -0.2 39.5%, -0.242 48.3%, -0.25 53.1%, -0.245 57.5%, -0.227 61.6%, -0.194 65.6%, -0.132 70.5%, -0.048 75.1%, 0.197 83.9%, 0.547 92.2%, 1)',\n label: 'anticipate'\n },\n {\n value:\n 'linear(0, -0.008 4.1%, -0.035 8.3%, -0.179 21.1%, -0.216 25.3%, -0.228 29.5%, -0.208 33.3%, -0.121 38.2%, 0.036 42.7%, 0.261 46.8%, 0.881 55.6%, 1.058 59.7%, 1.172 64.1%, 1.222 68.6%, 1.228 71.1%, 1.221 73.7%, 1.183 78.5%, 1.034 91.8%, 1.008 95.9%, 1)',\n label: 'anticipateOvershoot'\n }\n ]\n },\n {\n label: 'Expo',\n options: [\n {\n value: 'cubic-bezier(0.95, 0.05, 0.795, 0.035)',\n label: 'easeInExpo'\n },\n {\n value: 'cubic-bezier(0.19, 1, 0.22, 1)',\n label: 'easeOutExpo'\n },\n {\n value: 'cubic-bezier(1, 0, 0, 1)',\n label: 'easeInOutExpo'\n }\n ]\n }\n];\n","import type { LinearPoint, Point } from './types';\n\nimport { type SVGTemplateResult, svg } from 'lit-html';\n\nimport { HANDLE_RADIUS, HIT_AREA_RADIUS, POINT_RADIUS, SVG_HEIGHT, SVG_WIDTH } from './constants';\n\nexport const generateGridLines = (gridStep: number): SVGTemplateResult[] => {\n const lines: SVGTemplateResult[] = [];\n\n const xSteps = Math.ceil(SVG_WIDTH / gridStep);\n const ySteps = Math.ceil(SVG_HEIGHT / gridStep);\n\n for (let i = 0; i <= xSteps; i++) {\n const x = i * gridStep;\n if (x > SVG_WIDTH) {\n break;\n }\n\n lines.push(svg`\n <line\n class=\"grid-line\"\n x1=${x}\n y1=\"0\"\n x2=${x}\n y2=${SVG_HEIGHT}\n />\n `);\n }\n\n for (let i = 0; i <= ySteps; i++) {\n const y = i * gridStep;\n if (y > SVG_HEIGHT) {\n break;\n }\n\n lines.push(svg`\n <line\n class=\"grid-line\"\n x1=\"0\"\n y1=${y}\n x2=${SVG_WIDTH}\n y2=${y}\n />\n `);\n }\n\n return lines;\n};\n\nexport const renderBezierControlPoint = (\n point: Point,\n anchor: Point,\n isSelected: boolean,\n onPointerDown: (event: PointerEvent) => void\n): SVGTemplateResult => {\n const x = point.x * SVG_WIDTH;\n const y = (1 - point.y) * SVG_HEIGHT;\n const anchorX = anchor.x * SVG_WIDTH;\n const anchorY = (1 - anchor.y) * SVG_HEIGHT;\n\n return svg`\n <g>\n <line\n class=\"control-line\"\n x1=${anchorX}\n y1=${anchorY}\n x2=${x}\n y2=${y}\n />\n <circle\n class=\"control-point ${isSelected ? 'selected' : ''}\"\n cx=${x}\n cy=${y}\n r=${POINT_RADIUS}\n @pointerdown=${onPointerDown}\n />\n <circle\n class=\"hit-area-point\"\n cx=${x}\n cy=${y}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${onPointerDown}\n />\n </g>\n `;\n};\n\nexport const renderLinearPoint = (\n point: LinearPoint,\n index: number,\n isSelected: boolean,\n isFocused: boolean,\n onPointerDown: (event: PointerEvent) => void,\n onHandlePointerDown?: (event: PointerEvent, handleType: 'in' | 'out') => void\n): SVGTemplateResult => {\n const x = point.x * SVG_WIDTH;\n const y = (1 - point.y) * SVG_HEIGHT;\n\n const handles: SVGTemplateResult[] = [];\n\n if (point.cpInX !== undefined && point.cpInY !== undefined) {\n const handleX = x + point.cpInX * SVG_WIDTH;\n const handleY = y - point.cpInY * SVG_HEIGHT;\n\n handles.push(svg`\n <g>\n <line\n class=\"linear-handle-line\"\n x1=${x}\n y1=${y}\n x2=${handleX}\n y2=${handleY}\n />\n <circle\n class=\"linear-handle ${isSelected ? 'selected' : ''}\"\n cx=${handleX}\n cy=${handleY}\n r=${HANDLE_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'in')}\n />\n <circle\n class=\"hit-area-handle\"\n cx=${handleX}\n cy=${handleY}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'in')}\n />\n </g>\n `);\n }\n\n if (point.cpOutX !== undefined && point.cpOutY !== undefined) {\n const handleX = x + point.cpOutX * SVG_WIDTH;\n const handleY = y - point.cpOutY * SVG_HEIGHT;\n\n handles.push(svg`\n <g>\n <line\n class=\"linear-handle-line\"\n x1=${x}\n y1=${y}\n x2=${handleX}\n y2=${handleY}\n />\n <circle\n class=\"linear-handle ${isSelected ? 'selected' : ''}\"\n cx=${handleX}\n cy=${handleY}\n r=${HANDLE_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'out')}\n />\n <circle\n class=\"hit-area-handle\"\n cx=${handleX}\n cy=${handleY}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'out')}\n />\n </g>\n `);\n }\n\n return svg`\n <g>\n ${handles}\n <circle\n class=\"linear-point ${isSelected ? 'selected' : ''} ${isFocused ? 'focused' : ''}\"\n cx=${x}\n cy=${y}\n r=${POINT_RADIUS}\n tabindex=${isFocused ? '0' : '-1'}\n role=\"slider\"\n aria-label=\"Linear point ${index + 1}\"\n aria-valuenow=${point.x}\n aria-valuemin=\"0\"\n aria-valuemax=\"1\"\n @pointerdown=${onPointerDown}\n />\n <circle\n class=\"hit-area-point\"\n cx=${x}\n cy=${y}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${onPointerDown}\n />\n </g>\n `;\n};\n\nexport const toSvgCoords = (point: Point): Point => {\n return {\n x: point.x * SVG_WIDTH,\n y: (1 - point.y) * SVG_HEIGHT\n };\n};\n\nexport const fromSvgCoords = (x: number, y: number): Point => {\n return {\n x: x / SVG_WIDTH,\n y: 1 - y / SVG_HEIGHT\n };\n};\n\nexport const getSvgBounds = (svg: SVGSVGElement): DOMRect => svg.getBoundingClientRect();\n\nexport const clientToSvgCoords = (clientX: number, clientY: number, svgBounds: DOMRect): Point => {\n const x = ((clientX - svgBounds.left) / svgBounds.width) * SVG_WIDTH;\n const y = ((clientY - svgBounds.top) / svgBounds.height) * SVG_HEIGHT;\n\n return { x, y };\n};\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","import { html, type SVGTemplateResult, svg } from 'lit-html';\n\nimport {\n BEZIER_CONTROL_MAX_Y,\n BEZIER_CONTROL_MIN_Y,\n DEFAULT_HANDLE_LENGTH,\n DRAG_ACTIVATION_DISTANCE_PX_SQUARED,\n HIT_AREA_RADIUS,\n LINEAR_HIT_THRESHOLD,\n LINEAR_PATH_SAMPLES,\n SVG_HEIGHT,\n SVG_WIDTH\n} from './constants';\nimport { canvasStyles } from './styles';\nimport { generateGridLines } from './svg-renderer';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n type Point\n} from './types';\nimport {\n clampPoint,\n cloneLinearPoint,\n cubicBezierPath,\n ensureLinearPointId,\n getLinearApproximation,\n linearDisplayPath,\n MIN_LINEAR_DELTA,\n normalizeLinearPoints,\n normalizeVector,\n vectorLength\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\ntype CurveHost = HTMLElement & {\n points: CubicBezierPoints | LinearPoints;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n};\n\ntype LinearInsertPreview = {\n path: string;\n normalizedPoints: LinearPoints;\n insertedIndex: number;\n insertedPoint: LinearPoint;\n};\n\n@Component({\n tag: 'ease-curve-canvas',\n styles: canvasStyles,\n template(this: CurveCanvas) {\n const hoverPreviewPath = this.getHoverCurvePath();\n const controlElements = this.getControlElements();\n const hoverInsertElements = this.getHoverInsertElements();\n const curvePath = this.getCurvePath();\n\n return html`\n <svg\n viewBox=\"0 0 ${SVG_WIDTH} ${SVG_HEIGHT}\"\n width=\"${SVG_WIDTH}\"\n height=\"${SVG_HEIGHT}\"\n @pointerdown=${this.handlePointerDown}\n @pointermove=${this.handlePointerMove}\n @pointerup=${this.handlePointerUp}\n @pointerleave=${this.handlePointerLeave}\n @pointercancel=${this.handlePointerLeave}\n >\n ${this.showGrid ? svg`<g style=\"view-transition-name: grid-lines\">${this.getGridLines()}</g>` : null}\n ${hoverPreviewPath ? html`<path class=\"curve-path curve-path--preview\" d=${hoverPreviewPath}></path>` : null}\n <path class=\"curve-path\" d=${curvePath} />\n ${controlElements}\n ${hoverInsertElements}\n </svg>\n `;\n }\n})\nexport class CurveCanvas extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify: number = 0;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round: number = 5;\n\n @Query<SVGSVGElement>('svg')\n accessor svgElement!: SVGSVGElement | null;\n\n #isDragging = false;\n #dragIndex: number | null = null;\n #dragMode: 'point' | 'handleIn' | 'handleOut' | null = null;\n #hoverPoint: Point | null = null;\n #hoverInsertPreview: LinearInsertPreview | null = null;\n #dragStartPoints: Map<string, LinearPoint> | null = null;\n #dragPointId: string | null = null;\n #pendingDrag: { mode: 'point' | 'handleIn' | 'handleOut'; index: number; startX: number; startY: number } | null =\n null;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as CurveHost;\n };\n\n #renderCubicBezier = (): SVGTemplateResult[] => {\n const points = this.#getCubicBezierPoints();\n\n if (!points) {\n console.warn('Invalid cubic-bezier points for rendering:', this.points);\n return [];\n }\n\n try {\n const anchorStart = this.#toSvgCoords({ x: 0, y: 0 });\n const anchorEnd = this.#toSvgCoords({ x: 1, y: 1 });\n const controlOne = this.#toSvgCoords(points.p1);\n const controlTwo = this.#toSvgCoords(points.p2);\n\n const elements: SVGTemplateResult[] = [];\n\n const handlePathOne = this.#createHandlePath(anchorStart, controlOne);\n const handlePathTwo = this.#createHandlePath(anchorEnd, controlTwo);\n\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${controlOne.x}\"\n cy=\"${controlOne.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"0\"\n data-role=\"point\"\n />`);\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${controlTwo.x}\"\n cy=\"${controlTwo.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"1\"\n data-role=\"point\"\n />`);\n\n if (handlePathOne) {\n elements.push(svg`<path\n class=\"control-point ${this.#dragIndex === 0 && this.#dragMode === 'point' ? 'selected' : ''}\"\n d=\"${handlePathOne}\"\n data-index=\"0\"\n data-role=\"point\"\n />`);\n }\n\n if (handlePathTwo) {\n elements.push(svg`<path\n class=\"control-point ${this.#dragIndex === 1 && this.#dragMode === 'point' ? 'selected' : ''}\"\n d=\"${handlePathTwo}\"\n data-index=\"1\"\n data-role=\"point\"\n />`);\n }\n\n elements.push(svg`<circle class=\"anchor-point-start\" cx=\"${anchorStart.x}\" cy=\"${anchorStart.y}\" />`);\n elements.push(svg`<circle class=\"anchor-point-start\" cx=\"${anchorEnd.x}\" cy=\"${anchorEnd.y}\" />`);\n\n return elements;\n } catch (error) {\n console.error('Error rendering cubic-bezier elements:', error);\n return [];\n }\n };\n\n #toSvgCoords = (p: Point) => {\n return {\n x: p.x * SVG_WIDTH,\n y: (1 - p.y) * SVG_HEIGHT\n };\n };\n\n #renderLinear = (): SVGTemplateResult[] => {\n const points = this.#getLinearPoints();\n\n if (!points) {\n return [];\n }\n\n try {\n const elements: SVGTemplateResult[] = [];\n const focusedIndex = this.focusedLinearIndex;\n\n points.forEach((point, index) => {\n if (!point) {\n return;\n }\n\n const isPointFocused = focusedIndex === index;\n const isDraggingPoint = this.#isDragging && this.#dragIndex === index;\n\n if (!isPointFocused && !isDraggingPoint) {\n return;\n }\n\n const anchorSvg = this.#toSvgCoords(point);\n\n if (index > 0 && (point.cpInX !== undefined || point.cpInY !== undefined)) {\n this.#renderLinearHandle(elements, point, anchorSvg, index, 'In');\n }\n\n if (index < points.length - 1 && (point.cpOutX !== undefined || point.cpOutY !== undefined)) {\n this.#renderLinearHandle(elements, point, anchorSvg, index, 'Out');\n }\n });\n\n points.forEach((point, index) => {\n if (!point) {\n return;\n }\n\n const isPointFocused = focusedIndex === index;\n const isPointActive = (this.#dragMode === 'point' && this.#dragIndex === index) || isPointFocused;\n\n const anchorSvg = this.#toSvgCoords(point);\n\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${anchorSvg.x}\"\n cy=\"${anchorSvg.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"${index}\"\n data-role=\"point\"\n />`);\n elements.push(svg`<circle\n class=\"linear-point ${isPointActive ? 'selected' : ''}\"\n cx=\"${anchorSvg.x}\"\n cy=\"${anchorSvg.y}\"\n data-index=\"${index}\"\n data-role=\"point\"\n title=\"Point P${index + 1}: ${Math.round(point.x * 100)}%, ${Math.round(point.y * 100)}%\"\n />`);\n });\n\n return elements;\n } catch (error) {\n console.error('Error rendering linear points:', error);\n return [];\n }\n };\n\n #renderLinearHandle(\n elements: SVGTemplateResult[],\n point: LinearPoint,\n anchorSvg: Point,\n index: number,\n direction: 'In' | 'Out'\n ): void {\n const dx = direction === 'In' ? (point.cpInX ?? 0) : (point.cpOutX ?? 0);\n const dy = direction === 'In' ? (point.cpInY ?? 0) : (point.cpOutY ?? 0);\n\n const handlePos = { x: point.x + dx, y: point.y + dy };\n const handleSvg = this.#toSvgCoords(handlePos);\n const role = direction === 'In' ? 'handleIn' : 'handleOut';\n const dragMode = direction === 'In' ? 'handleIn' : 'handleOut';\n\n const isHandleActive = this.#dragMode === dragMode && this.#dragIndex === index;\n\n const handlePath = this.#createHandlePath(anchorSvg, handleSvg);\n\n if (!handlePath) {\n return;\n }\n\n elements.push(svg`<circle\n class=\"hit-area-handle\"\n cx=\"${handleSvg.x}\"\n cy=\"${handleSvg.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"${index}\"\n data-role=\"${role}\"\n />`);\n\n elements.push(svg`<path\n class=\"linear-handle ${isHandleActive ? 'selected' : ''}\"\n d=\"${handlePath}\"\n data-index=\"${index}\"\n data-role=\"${role}\"\n title=\"Handle ${direction}: ${Math.round(handlePos.x * 100)}%, ${Math.round(handlePos.y * 100)}%\"\n />`);\n }\n\n #getCurvePath = (): string => {\n try {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const points = this.#getCubicBezierPoints();\n\n if (!points) {\n console.warn('Invalid cubic-bezier points:', this.points);\n return '';\n }\n\n return cubicBezierPath(points);\n }\n\n const points = this.#getLinearPoints();\n\n if (!points || points.length < 2) {\n return '';\n }\n\n if (this.simplify > 0) {\n const approxPoints = getLinearApproximation(points, {\n simplify: this.simplify,\n round: this.round\n });\n return linearDisplayPath(approxPoints as LinearPoints);\n }\n\n return linearDisplayPath(points);\n } catch (error) {\n console.error('Error generating curve path:', error);\n return '';\n }\n };\n\n #getHoverCurvePath = (): string => {\n if (this.#isDragging) {\n return '';\n }\n\n try {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const hoverPoint = this.#hoverPoint;\n if (!hoverPoint) {\n return '';\n }\n\n const points = this.#getCubicBezierPoints();\n if (!points) {\n return '';\n }\n\n return cubicBezierPath({\n p1: hoverPoint,\n p2: points.p2\n });\n }\n\n if (this.easingType === EasingType.LINEAR) {\n return this.#hoverInsertPreview?.path ?? '';\n }\n\n return '';\n } catch (error) {\n console.error('Error generating hover curve path:', error);\n return '';\n }\n };\n\n getHoverInsertElements(): SVGTemplateResult | null {\n if (this.easingType !== EasingType.LINEAR) {\n return null;\n }\n\n const preview = this.#hoverInsertPreview;\n if (!preview || !preview.insertedPoint) {\n return null;\n }\n\n const point = preview.insertedPoint;\n const anchor = this.#toSvgCoords(point);\n const elements: SVGTemplateResult[] = [];\n\n if (point.cpInX !== undefined || point.cpInY !== undefined) {\n const handlePoint = this.#toSvgCoords({\n x: point.x + (point.cpInX ?? 0),\n y: point.y + (point.cpInY ?? 0)\n });\n const handlePath = this.#createHandlePath(anchor, handlePoint);\n if (handlePath) {\n elements.push(\n svg`<path\n class=\"linear-handle linear-handle--preview\"\n d=\"${handlePath}\"\n />`\n );\n }\n }\n\n if (point.cpOutX !== undefined || point.cpOutY !== undefined) {\n const handlePoint = this.#toSvgCoords({\n x: point.x + (point.cpOutX ?? 0),\n y: point.y + (point.cpOutY ?? 0)\n });\n const handlePath = this.#createHandlePath(anchor, handlePoint);\n if (handlePath) {\n elements.push(\n svg`<path\n class=\"linear-handle linear-handle--preview\"\n d=\"${handlePath}\"\n />`\n );\n }\n }\n\n elements.push(svg`<circle class=\"linear-point linear-point--preview\" cx=\"${anchor.x}\" cy=\"${anchor.y}\" />`);\n\n return svg`<g class=\"linear-preview-group\" pointer-events=\"none\">${elements}</g>`;\n }\n\n #createHandlePath(anchorSvg: Point, handleSvg: Point): string | null {\n const vecX = handleSvg.x - anchorSvg.x;\n const vecY = handleSvg.y - anchorSvg.y;\n const length = Math.sqrt(vecX * vecX + vecY * vecY);\n\n const circleRadius = 4.5;\n const barHalfHeight = 0.66;\n\n if (length < circleRadius + 2) {\n return null;\n }\n\n const dirX = vecX / length;\n const dirY = vecY / length;\n const perpX = -dirY;\n const perpY = dirX;\n\n const cx = handleSvg.x;\n const cy = handleSvg.y;\n\n const transitionZone = Math.min(8, (length - circleRadius) * 0.5);\n\n const barEndDist = length - circleRadius - transitionZone;\n\n const barTopStartX = anchorSvg.x + perpX * barHalfHeight;\n const barTopStartY = anchorSvg.y + perpY * barHalfHeight;\n const barBottomStartX = anchorSvg.x - perpX * barHalfHeight;\n const barBottomStartY = anchorSvg.y - perpY * barHalfHeight;\n\n const barTopEndX = anchorSvg.x + dirX * barEndDist + perpX * barHalfHeight;\n const barTopEndY = anchorSvg.y + dirY * barEndDist + perpY * barHalfHeight;\n const barBottomEndX = anchorSvg.x + dirX * barEndDist - perpX * barHalfHeight;\n const barBottomEndY = anchorSvg.y + dirY * barEndDist - perpY * barHalfHeight;\n\n const circleTopX = cx + perpX * circleRadius;\n const circleTopY = cy + perpY * circleRadius;\n const circleBottomX = cx - perpX * circleRadius;\n const circleBottomY = cy - perpY * circleRadius;\n\n const ctrl1Dist = transitionZone * 0.35;\n const ctrl2Dist = transitionZone * 0.65;\n\n const ctrl1TopX = barTopEndX + dirX * ctrl1Dist;\n const ctrl1TopY = barTopEndY + dirY * ctrl1Dist;\n const ctrl2TopX = circleTopX - dirX * ctrl2Dist;\n const ctrl2TopY = circleTopY - dirY * ctrl2Dist;\n\n const ctrl1BottomX = barBottomEndX + dirX * ctrl1Dist;\n const ctrl1BottomY = barBottomEndY + dirY * ctrl1Dist;\n const ctrl2BottomX = circleBottomX - dirX * ctrl2Dist;\n const ctrl2BottomY = circleBottomY - dirY * ctrl2Dist;\n\n return `\n M ${circleBottomX} ${circleBottomY}\n C ${ctrl2BottomX} ${ctrl2BottomY} ${ctrl1BottomX} ${ctrl1BottomY} ${barBottomEndX} ${barBottomEndY}\n L ${barBottomStartX} ${barBottomStartY}\n A ${barHalfHeight} ${barHalfHeight} 0 0 0 ${barTopStartX} ${barTopStartY}\n L ${barTopEndX} ${barTopEndY}\n C ${ctrl1TopX} ${ctrl1TopY} ${ctrl2TopX} ${ctrl2TopY} ${circleTopX} ${circleTopY}\n A ${circleRadius} ${circleRadius} 0 1 0 ${circleBottomX} ${circleBottomY}\n Z\n `;\n }\n\n #getCubicBezierPoints = (): CubicBezierPoints | null => {\n if (Array.isArray(this.points)) {\n return null;\n }\n\n return this.points ?? null;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n\n this.#ensureLinearPointIds(this.points);\n return this.points;\n };\n\n #ensureLinearPointIds = (points: LinearPoints | null): void => {\n if (!points) {\n return;\n }\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n ensureLinearPointId(point);\n }\n };\n\n #createLinearStartPointMap = (points: LinearPoints | null): Map<string, LinearPoint> | null => {\n if (!points) {\n return null;\n }\n\n const map = new Map<string, LinearPoint>();\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n const id = ensureLinearPointId(point);\n map.set(id, cloneLinearPoint(point));\n }\n\n return map;\n };\n\n #getDistanceToLinearPath(point: Point, points: LinearPoints): number {\n if (points.length < 2) {\n return Number.POSITIVE_INFINITY;\n }\n\n let minDistanceSquared = Number.POSITIVE_INFINITY;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const cp1 = {\n x: start.x + (start.cpOutX ?? 0),\n y: start.y + (start.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: end.x + (end.cpInX ?? 0),\n y: end.y + (end.cpInY ?? 0)\n };\n\n for (let sample = 0; sample <= LINEAR_PATH_SAMPLES; sample += 1) {\n const t = sample / LINEAR_PATH_SAMPLES;\n const samplePoint = evaluateCubicPointNormalized(t, start, cp1, cp2, end);\n const dx = point.x - samplePoint.x;\n const dy = point.y - samplePoint.y;\n const distanceSquared = dx * dx + dy * dy;\n if (distanceSquared < minDistanceSquared) {\n minDistanceSquared = distanceSquared;\n }\n }\n }\n\n return Math.sqrt(minDistanceSquared);\n }\n\n #isPointNearLinearPath(point: Point, points: LinearPoints): boolean {\n const distance = this.#getDistanceToLinearPath(point, points);\n return distance <= LINEAR_HIT_THRESHOLD;\n }\n\n #isNearExistingPointOrHandle(position: Point, points: LinearPoints): boolean {\n const mouseSvg = this.#toSvgCoords(position);\n const thresholdSquared = HIT_AREA_RADIUS * HIT_AREA_RADIUS;\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n\n const pointSvg = this.#toSvgCoords(point);\n const dx = pointSvg.x - mouseSvg.x;\n const dy = pointSvg.y - mouseSvg.y;\n\n if (dx * dx + dy * dy < thresholdSquared) {\n return true;\n }\n\n if (point.cpInX !== undefined || point.cpInY !== undefined) {\n const handleIn = {\n x: point.x + (point.cpInX ?? 0),\n y: point.y + (point.cpInY ?? 0)\n };\n const handleInSvg = this.#toSvgCoords(handleIn);\n const hdx = handleInSvg.x - mouseSvg.x;\n const hdy = handleInSvg.y - mouseSvg.y;\n\n if (hdx * hdx + hdy * hdy < thresholdSquared) {\n return true;\n }\n }\n\n if (point.cpOutX !== undefined || point.cpOutY !== undefined) {\n const handleOut = {\n x: point.x + (point.cpOutX ?? 0),\n y: point.y + (point.cpOutY ?? 0)\n };\n const handleOutSvg = this.#toSvgCoords(handleOut);\n const hdx = handleOutSvg.x - mouseSvg.x;\n const hdy = handleOutSvg.y - mouseSvg.y;\n\n if (hdx * hdx + hdy * hdy < thresholdSquared) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n #getMousePosition = (event: PointerEvent, options?: { skipSnap?: boolean }): Point => {\n const svgElement = this.svgElement;\n\n if (!svgElement) {\n return { x: 0, y: 0 };\n }\n\n const rect = svgElement.getBoundingClientRect();\n const svgX = event.clientX - rect.left;\n const svgY = event.clientY - rect.top;\n\n let x = svgX / rect.width;\n let y = 1 - svgY / rect.height;\n\n const skipSnap = options?.skipSnap ?? false;\n\n const shouldSnap =\n !skipSnap &&\n this.snapToGrid &&\n !(this.#isDragging && (this.#dragMode === 'handleIn' || this.#dragMode === 'handleOut'));\n\n if (shouldSnap) {\n const ratioX = SVG_WIDTH / this.gridSize;\n const ratioY = SVG_HEIGHT / this.gridSize;\n x = Math.round(x * ratioX) / ratioX;\n y = Math.round(y * ratioY) / ratioY;\n }\n\n const bezierBounds =\n this.easingType === EasingType.CUBIC_BEZIER\n ? { minY: BEZIER_CONTROL_MIN_Y, maxY: BEZIER_CONTROL_MAX_Y }\n : undefined;\n\n return clampPoint({ x, y }, bezierBounds);\n };\n\n #constrainLinearPoint = (index: number, position: Point, points: LinearPoints): LinearPoint => {\n let x = position.x;\n\n if (index === 0) {\n x = 0;\n } else if (index === points.length - 1) {\n x = 1;\n } else {\n x = Math.min(Math.max(x, MIN_LINEAR_DELTA), 1 - MIN_LINEAR_DELTA);\n }\n\n const clamped = clampPoint({ x, y: position.y }, { minY: -2, maxY: 3 });\n const sourcePoint = points[index];\n\n return {\n ...sourcePoint,\n x: clamped.x,\n y: clamped.y\n };\n };\n\n #emitPoints = (value: CubicBezierPoints | LinearPoints, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<CubicBezierPoints | LinearPoints> = { value, event };\n\n dispatchControlEvent(target, 'points-change', detail);\n };\n\n #notifyLinearFocus = (index: number | null, event: Event): void => {\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<number | null> = { value: index, event };\n dispatchControlEvent(target, 'linear-point-focus', detail);\n };\n\n #toggleLinearHandleLinking = (index: number, event: Event): void => {\n const points = this.#getLinearPoints();\n if (!points || index < 0 || index >= points.length) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const newLinkingState = !updatedPoint.isLinked;\n updatedPoint.isLinked = newLinkingState;\n updatedPoint.mirrorLength = Boolean(newLinkingState);\n\n if (newLinkingState) {\n this.#ensureLinkedHandles(updatedPoint, index, points);\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n this.#notifyLinearFocus(index, event);\n this.requestRender();\n };\n\n #ensureLinkedHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy) || DEFAULT_HANDLE_LENGTH;\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n\n if (point.mirrorLength !== false) {\n this.#alignLinkedHandleLengths(point);\n }\n }\n\n #alignLinkedHandleLengths(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n\n getGridLines(): SVGTemplateResult[] {\n return generateGridLines(this.gridSize);\n }\n\n getControlElements(): SVGTemplateResult[] {\n return this.easingType === EasingType.CUBIC_BEZIER ? this.#renderCubicBezier() : this.#renderLinear();\n }\n\n getCurvePath(): string {\n return this.#getCurvePath();\n }\n\n getHoverCurvePath(): string {\n return this.#getHoverCurvePath();\n }\n\n readonly handlePointerDown = (event: PointerEvent): void => {\n event.preventDefault();\n let linearPoints = this.easingType === EasingType.LINEAR ? this.#getLinearPoints() : null;\n this.#dragStartPoints = this.#createLinearStartPointMap(linearPoints);\n this.#pendingDrag = null;\n this.#dragPointId = null;\n\n const target = event.target;\n\n if (!(target instanceof SVGElement)) {\n return;\n }\n\n const role = target.getAttribute('data-role');\n const indexAttribute = target.getAttribute('data-index');\n\n if (indexAttribute !== null) {\n const index = Number.parseInt(indexAttribute, 10);\n if (Number.isNaN(index)) {\n return;\n }\n\n if (this.easingType === EasingType.LINEAR) {\n if (role === 'handleIn' || role === 'handleOut') {\n const point = linearPoints?.[index];\n if (point) {\n this.#dragPointId = ensureLinearPointId(point);\n }\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = role;\n this.#dragIndex = index;\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#notifyLinearFocus(index, event);\n this.handlePointerMove(event);\n this.requestRender();\n return;\n }\n\n if (role === 'point') {\n if (event.detail === 2) {\n this.#toggleLinearHandleLinking(index, event);\n return;\n }\n\n const point = linearPoints?.[index];\n if (point) {\n this.#dragPointId = ensureLinearPointId(point);\n }\n this.#notifyLinearFocus(index, event);\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = false;\n this.#dragMode = 'point';\n this.#dragIndex = index;\n this.#pendingDrag = {\n mode: 'point',\n index,\n startX: event.clientX,\n startY: event.clientY\n };\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER && role === 'point') {\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = index;\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n }\n\n if (indexAttribute === null) {\n if (this.easingType === EasingType.LINEAR) {\n const insertResult = this.#insertLinearPoint(this.#getMousePosition(event), event);\n\n if (insertResult) {\n linearPoints = this.#getLinearPoints();\n this.#dragStartPoints = this.#createLinearStartPointMap(linearPoints);\n this.#dragPointId = insertResult.pointId;\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = insertResult.index;\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#notifyLinearFocus(insertResult.index, event);\n this.requestRender();\n return;\n } else {\n this.#notifyLinearFocus(null, event);\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n this.#hoverPoint = this.#getMousePosition(event);\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = 0;\n this.#pendingDrag = null;\n this.handlePointerMove(event);\n this.requestRender();\n return;\n }\n }\n };\n\n readonly handlePointerMove = (event: PointerEvent): void => {\n if (!this.svgElement) {\n return;\n }\n\n const skipSnapForPending = !this.#isDragging && this.#pendingDrag !== null && this.#pendingDrag.mode === 'point';\n let position = this.#getMousePosition(event, { skipSnap: skipSnapForPending });\n\n if (this.#pendingDrag && !this.#isDragging) {\n const deltaX = event.clientX - this.#pendingDrag.startX;\n const deltaY = event.clientY - this.#pendingDrag.startY;\n const distanceSquared = deltaX * deltaX + deltaY * deltaY;\n\n if (distanceSquared >= DRAG_ACTIVATION_DISTANCE_PX_SQUARED) {\n this.#isDragging = true;\n this.#pendingDrag = null;\n\n if (skipSnapForPending) {\n position = this.#getMousePosition(event);\n }\n } else {\n return;\n }\n }\n\n if (this.#isDragging && this.#dragIndex !== null) {\n event.preventDefault();\n this.#hoverInsertPreview = null;\n\n if (this.easingType === EasingType.LINEAR) {\n const points = this.#getLinearPoints();\n if (!points || this.#dragIndex >= points.length) {\n return;\n }\n\n if (this.#dragMode === 'point') {\n this.#handleLinearPointDrag(points, this.#dragIndex, position, event);\n return;\n }\n\n if (this.#dragMode === 'handleIn' || this.#dragMode === 'handleOut') {\n this.#handleLinearHandleDrag(points, this.#dragIndex, position, event);\n return;\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const points = this.#getCubicBezierPoints();\n if (!points) {\n return;\n }\n\n const updatedPoints: CubicBezierPoints = { ...points };\n let adjustedPosition = position;\n\n if (event.shiftKey) {\n const reference = this.#dragIndex === 0 ? points.p1 : points.p2;\n\n if (reference) {\n const deltaX = Math.abs(position.x - reference.x);\n const deltaY = Math.abs(position.y - reference.y);\n\n adjustedPosition = deltaX > deltaY ? { x: position.x, y: reference.y } : { x: reference.x, y: position.y };\n }\n }\n\n const clampedPosition = clampPoint(adjustedPosition, {\n minY: BEZIER_CONTROL_MIN_Y,\n maxY: BEZIER_CONTROL_MAX_Y\n });\n\n if (this.#dragIndex === 0) {\n updatedPoints.p1 = clampedPosition;\n } else if (this.#dragIndex === 1) {\n updatedPoints.p2 = clampedPosition;\n } else {\n return;\n }\n\n this.points = updatedPoints;\n this.#emitPoints(updatedPoints, event);\n this.requestRender();\n return;\n }\n\n return;\n }\n\n if (this.easingType === EasingType.LINEAR) {\n const points = this.#getLinearPoints();\n // Use rawPosition for the hit test to avoid flickering when snapToGrid is on\n if (points && this.#isNearExistingPointOrHandle(position, points)) {\n this.#hoverInsertPreview = null;\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n\n const preview = this.#buildLinearInsertPreview(position);\n this.#hoverInsertPreview = preview;\n if (!preview) {\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n } else {\n this.#hoverInsertPreview = null;\n }\n\n this.#hoverPoint = position;\n this.requestRender();\n };\n\n #handleLinearPointDrag(points: LinearPoints, index: number, position: Point, event: PointerEvent): void {\n let workingPosition = position;\n const currentPoint = points[index];\n const activePointId = currentPoint ? (this.#dragPointId ?? ensureLinearPointId(currentPoint)) : null;\n\n if (event.shiftKey && this.#dragStartPoints && activePointId) {\n const startPoint = this.#dragStartPoints.get(activePointId);\n if (startPoint) {\n const deltaX = Math.abs(position.x - startPoint.x);\n const deltaY = Math.abs(position.y - startPoint.y);\n workingPosition = deltaX > deltaY ? { x: position.x, y: startPoint.y } : { x: startPoint.x, y: position.y };\n }\n }\n\n const constrainedPoint = this.#constrainLinearPoint(index, workingPosition, points);\n const updatedPoints: LinearPoints = points.map((point, i) => {\n if (i === index) {\n return constrainedPoint;\n }\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n\n if (activePointId) {\n const newIndex = normalizedPoints.findIndex((point) => point?.id === activePointId);\n if (newIndex !== -1) {\n this.#dragIndex = newIndex;\n this.#dragPointId = activePointId;\n this.#notifyLinearFocus(newIndex, event);\n } else {\n this.#notifyLinearFocus(index, event);\n }\n } else {\n this.#notifyLinearFocus(index, event);\n }\n\n this.requestRender();\n }\n\n #handleLinearHandleDrag(points: LinearPoints, index: number, position: Point, event: PointerEvent): void {\n const point = points[index];\n if (!point) {\n return;\n }\n\n const activePointId = this.#dragPointId ?? ensureLinearPointId(point);\n const direction = this.#dragMode === 'handleIn' ? 'In' : 'Out';\n\n let dx = position.x - point.x;\n const dy = position.y - point.y;\n\n if (direction === 'In') {\n dx = Math.min(0, dx);\n } else {\n dx = Math.max(0, dx);\n }\n\n let isLinked = point.isLinked ?? false;\n if (event.shiftKey) {\n isLinked = false;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n updatedPoint.isLinked = isLinked;\n\n if (direction === 'In') {\n updatedPoint.cpInX = dx;\n updatedPoint.cpInY = dy;\n } else {\n updatedPoint.cpOutX = dx;\n updatedPoint.cpOutY = dy;\n }\n\n const mirrorAngle = isLinked;\n const mirrorLength = mirrorAngle && updatedPoint.mirrorLength !== false;\n\n if (mirrorAngle || mirrorLength) {\n const draggedLength = vectorLength(dx, dy);\n\n if (draggedLength <= MIN_LINEAR_DELTA) {\n if (direction === 'In') {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n if (mirrorAngle) {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n }\n } else {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n if (mirrorAngle) {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n }\n }\n } else {\n const normalized = normalizeVector(dx, dy);\n\n if (mirrorAngle) {\n if (direction === 'In') {\n const existingLength = mirrorLength\n ? draggedLength\n : vectorLength(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0) || draggedLength;\n updatedPoint.cpOutX = -normalized.dx * existingLength;\n updatedPoint.cpOutY = -normalized.dy * existingLength;\n } else {\n const existingLength = mirrorLength\n ? draggedLength\n : vectorLength(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0) || draggedLength;\n updatedPoint.cpInX = -normalized.dx * existingLength;\n updatedPoint.cpInY = -normalized.dy * existingLength;\n }\n } else if (mirrorLength) {\n if (direction === 'In') {\n const inDirection = normalizeVector(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n const outDirection = normalizeVector(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n const outLength = vectorLength(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n if (outLength > 0) {\n updatedPoint.cpOutX = outDirection.dx * draggedLength;\n updatedPoint.cpOutY = outDirection.dy * draggedLength;\n }\n updatedPoint.cpInX = inDirection.dx * draggedLength;\n updatedPoint.cpInY = inDirection.dy * draggedLength;\n } else {\n const inDirection = normalizeVector(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n const outDirection = normalizeVector(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n const inLength = vectorLength(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n if (inLength > 0) {\n updatedPoint.cpInX = inDirection.dx * draggedLength;\n updatedPoint.cpInY = inDirection.dy * draggedLength;\n }\n updatedPoint.cpOutX = outDirection.dx * draggedLength;\n updatedPoint.cpOutY = outDirection.dy * draggedLength;\n }\n }\n\n if (mirrorLength) {\n this.#alignLinkedHandleLengths(updatedPoint);\n }\n }\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n\n if (activePointId) {\n const newIndex = normalizedPoints.findIndex((candidate) => candidate?.id === activePointId);\n if (newIndex !== -1) {\n this.#dragIndex = newIndex;\n this.#dragPointId = activePointId;\n this.#notifyLinearFocus(newIndex, event);\n } else {\n this.#notifyLinearFocus(index, event);\n }\n } else {\n this.#notifyLinearFocus(index, event);\n }\n\n this.requestRender();\n }\n\n readonly handlePointerUp = (event: PointerEvent): void => {\n const previousIndex = this.#dragIndex;\n\n if (this.svgElement?.hasPointerCapture(event.pointerId)) {\n this.svgElement.releasePointerCapture(event.pointerId);\n }\n\n this.#isDragging = false;\n this.#dragIndex = null;\n this.#dragMode = null;\n this.#dragStartPoints = null;\n this.#dragPointId = null;\n this.#pendingDrag = null;\n this.#hoverInsertPreview = null;\n\n if (previousIndex !== null && this.easingType === EasingType.LINEAR) {\n this.#notifyLinearFocus(previousIndex, event);\n }\n this.requestRender();\n };\n\n readonly handlePointerLeave = (event: PointerEvent): void => {\n if (this.#isDragging) {\n this.handlePointerUp(event);\n }\n\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#dragPointId = null;\n this.#hoverInsertPreview = null;\n this.requestRender();\n };\n\n #insertLinearPoint(position: Point, event: PointerEvent): { index: number; pointId: string | null } | null {\n const preview = this.#hoverInsertPreview ?? this.#buildLinearInsertPreview(position);\n if (!preview) {\n return null;\n }\n\n const { normalizedPoints, insertedIndex, insertedPoint } = preview;\n const insertedPointId = insertedPoint ? ensureLinearPointId(insertedPoint) : null;\n\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n this.requestRender();\n this.#hoverInsertPreview = null;\n\n return {\n index: insertedIndex,\n pointId: insertedPointId\n };\n }\n\n #buildLinearInsertPreview(position: Point): LinearInsertPreview | null {\n if (this.easingType !== EasingType.LINEAR) {\n return null;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length >= MAX_LINEAR_POINTS) {\n return null;\n }\n\n // Allow Y values outside [0, 1] for bounce/elastic effects\n const clamped = clampPoint(position, { minY: -2, maxY: 3 });\n if (!this.#isPointNearLinearPath(clamped, points)) {\n return null;\n }\n\n const insertIndex = points.findIndex((point) => clamped.x < point.x);\n if (insertIndex <= 0) {\n return null;\n }\n\n const prev = points[insertIndex - 1];\n const next = points[insertIndex];\n\n if (!prev || !next) {\n return null;\n }\n\n if (clamped.x - prev.x < MIN_LINEAR_DELTA || next.x - clamped.x < MIN_LINEAR_DELTA) {\n return null;\n }\n\n let updatedPoints: LinearPoints;\n let insertedPointId: string | null = null;\n\n const splitResult = splitCurveSegment(prev, next, clamped);\n\n if (splitResult) {\n const { prev: newPrev, newPoint, next: newNext } = splitResult;\n insertedPointId = ensureLinearPointId(newPoint);\n updatedPoints = [\n ...points.slice(0, insertIndex - 1),\n newPrev,\n newPoint,\n newNext,\n ...points.slice(insertIndex + 1)\n ];\n } else {\n const newPoint: LinearPoint = {\n x: clamped.x,\n y: clamped.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n insertedPointId = ensureLinearPointId(newPoint);\n updatedPoints = [...points.slice(0, insertIndex), newPoint, ...points.slice(insertIndex)];\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n const normalizedIndex =\n insertedPointId !== null ? normalizedPoints.findIndex((point) => point?.id === insertedPointId) : -1;\n\n const insertedIndex = normalizedIndex !== -1 ? normalizedIndex : insertIndex;\n const insertedPoint = normalizedPoints[insertedIndex];\n\n if (!insertedPoint) {\n return null;\n }\n\n return {\n path: linearDisplayPath(normalizedPoints),\n normalizedPoints,\n insertedIndex,\n insertedPoint\n };\n }\n}\n\nconst lerp = (a: number, b: number, t: number): number => a + (b - a) * t;\n\nconst lerpPoint = (p1: Point, p2: Point, t: number): Point => {\n return {\n x: lerp(p1.x, p2.x, t),\n y: lerp(p1.y, p2.y, t)\n };\n};\n\n// Helper to find t for a given x on a cubic bezier curve\nconst findTForX = (x: number, p0: Point, cp1: Point, cp2: Point, p3: Point): number => {\n let minT = 0;\n let maxT = 1;\n let t = 0.5;\n const tolerance = 0.0001;\n const maxIterations = 20;\n\n // Use binary search since x is monotonic\n for (let i = 0; i < maxIterations; i++) {\n const px = (1 - t) ** 3 * p0.x + 3 * (1 - t) ** 2 * t * cp1.x + 3 * (1 - t) * t ** 2 * cp2.x + t ** 3 * p3.x;\n\n if (Math.abs(px - x) < tolerance) {\n return t;\n }\n\n if (px < x) {\n minT = t;\n } else {\n maxT = t;\n }\n t = (minT + maxT) / 2;\n }\n\n return t;\n};\n\nconst splitCurveSegment = (\n prev: LinearPoint,\n next: LinearPoint,\n position: Point\n): { prev: LinearPoint; newPoint: LinearPoint; next: LinearPoint } | null => {\n const cp1 = {\n x: prev.x + (prev.cpOutX ?? 0),\n y: prev.y + (prev.cpOutY ?? 0)\n };\n const cp2 = {\n x: next.x + (next.cpInX ?? 0),\n y: next.y + (next.cpInY ?? 0)\n };\n\n const wasCurved = prev.cpOutX || prev.cpOutY || next.cpInX || next.cpInY;\n\n if (!wasCurved) {\n return null;\n }\n\n // Find the correct t parameter that corresponds to the mouse X position\n const t = findTForX(position.x, prev, cp1, cp2, next);\n\n const P01 = lerpPoint(prev, cp1, t);\n const P12 = lerpPoint(cp1, cp2, t);\n const P23 = lerpPoint(cp2, next, t);\n\n const P012 = lerpPoint(P01, P12, t);\n const P123 = lerpPoint(P12, P23, t);\n\n const P_new = lerpPoint(P012, P123, t);\n\n const newPoint: LinearPoint = {\n x: P_new.x,\n y: P_new.y,\n cpInX: P012.x - P_new.x,\n cpInY: P012.y - P_new.y,\n cpOutX: P123.x - P_new.x,\n cpOutY: P123.y - P_new.y,\n isLinked: true,\n mirrorLength: prev.mirrorLength === false && next.mirrorLength\n };\n ensureLinearPointId(newPoint);\n\n const newPrev: LinearPoint = {\n ...prev,\n cpOutX: P01.x - prev.x,\n cpOutY: P01.y - prev.y\n };\n\n const newNext: LinearPoint = {\n ...next,\n cpInX: P23.x - next.x,\n cpInY: P23.y - next.y\n };\n\n return {\n prev: newPrev,\n newPoint,\n next: newNext\n };\n};\n\nconst evaluateCubicPointNormalized = (t: number, p0: Point, cp1: Point, cp2: Point, p3: Point): Point => {\n const P01 = lerpPoint(p0, cp1, t);\n const P12 = lerpPoint(cp1, cp2, t);\n const P23 = lerpPoint(cp2, p3, t);\n\n const P012 = lerpPoint(P01, P12, t);\n const P123 = lerpPoint(P12, P23, t);\n\n return lerpPoint(P012, P123, t);\n};\n","import { html } from 'lit-html';\n\nimport { DEFAULT_HANDLE_LENGTH } from './constants';\nimport { canvasControlsStyles } from './styles';\nimport { type CubicBezierPoints, EasingType, type LinearPoint, type LinearPoints } from './types';\nimport { normalizeLinearPoints, normalizeVector, vectorLength } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n focusedLinearIndex: number | null;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-canvas-controls',\n styles: canvasControlsStyles,\n template(this: CanvasControls) {\n if (this.easingType !== EasingType.LINEAR || !Array.isArray(this.points)) {\n return null;\n }\n\n const focusedIndex = this.focusedLinearIndex;\n if (focusedIndex === null) {\n return null;\n }\n\n const points = this.points as LinearPoints;\n const selectedPoint = points[focusedIndex];\n if (!selectedPoint) {\n return null;\n }\n\n const isInnerPoint = focusedIndex > 0 && focusedIndex < points.length - 1;\n if (!isInnerPoint) {\n return null;\n }\n\n const hasInHandle = selectedPoint.cpInX !== undefined || selectedPoint.cpInY !== undefined;\n const hasOutHandle = selectedPoint.cpOutX !== undefined || selectedPoint.cpOutY !== undefined;\n const hasAnyHandle = hasInHandle || hasOutHandle;\n\n return html`\n <div class=\"overlay-controls\">\n <button\n type=\"button\"\n class=\"overlay-button ${selectedPoint.isLinked ? 'active' : 'inactive'}\"\n @click=${this.handleToggleMirrorAngle}\n >\n <ease-icon-bezier-angle></ease-icon-bezier-angle>\n </button>\n <button\n type=\"button\"\n class=\"overlay-button ${selectedPoint.mirrorLength !== false && selectedPoint.isLinked ? 'active' : 'inactive'}\"\n @click=${this.handleToggleMirrorLength}\n ?disabled=${!selectedPoint.isLinked}\n >\n <ease-icon-bezier-length></ease-icon-bezier-length>\n </button>\n ${\n hasAnyHandle\n ? html`\n <button\n type=\"button\"\n class=\"overlay-button\"\n @click=${this.handleRemoveSmoothing}\n >\n <ease-icon-bezier></ease-icon-bezier>\n </button>\n `\n : html`\n <button\n type=\"button\"\n class=\"overlay-button\"\n @click=${this.handleAddSmoothing}\n >\n <ease-icon-bezier-mirror></ease-icon-bezier-mirror>\n </button>\n `\n }\n </div>\n `;\n }\n})\nexport class CanvasControls extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as unknown as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n return this.points;\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n dispatchControlEvent(target, type, detail);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n readonly handleToggleMirrorAngle = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const nextState = !updatedPoint.isLinked;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n } else {\n updatedPoint.mirrorLength = false;\n }\n updatedPoint.isLinked = nextState;\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleToggleMirrorLength = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point || !point.isLinked) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const nextState = updatedPoint.mirrorLength === false;\n updatedPoint.mirrorLength = nextState;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n this.#alignMirrorLength(updatedPoint);\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleRemoveSmoothing = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const existingPoint = points[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n delete updatedPoint.isLinked;\n delete updatedPoint.mirrorLength;\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleAddSmoothing = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.isLinked = true;\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #ensureSmoothHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy);\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n }\n\n #alignMirrorLength(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { DEFAULT_HANDLE_LENGTH, EASING_PRESETS } from './constants';\nimport { controlsStyles } from './styles';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n MIN_LINEAR_POINTS\n} from './types';\nimport {\n clampPoint,\n MIN_LINEAR_DELTA,\n normalizeLinearPoints,\n normalizeVector,\n parseCubicBezierValue,\n parseLinearTimingFunction,\n smoothLinearPoints,\n vectorLength\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\nimport '~/elements/icons/interface/minus';\nimport '~/elements/icons/interface/plus';\nimport '~/elements/button';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n showGrid: boolean;\n snapToGrid: boolean;\n gridSize: number;\n focusedLinearIndex: number | null;\n handleEasingTypeChange?: (event: CustomEvent<ControlEventDetail<EasingType>>) => void;\n handleGridToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleGridSizeChange?: (event: KeyboardEvent) => void;\n handleSnapToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'easing-type-change': 'handleEasingTypeChange',\n 'grid-toggle': 'handleGridToggle',\n 'snap-toggle': 'handleSnapToggle',\n 'grid-size-change': 'handleGridSizeChange',\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-controls',\n styles: controlsStyles,\n template(this: CurveControls) {\n return html`\n <ease-field label=\"Easing\">\n <ease-dropdown\n part=\"easing-type-dropdown\"\n placeholder=\"Select\"\n id=\"demo-easing-type\"\n name=\"demo-easing-type\"\n searchable\n .value=${this._activePresetValue}\n @change=${this.handlePresetSelection}\n >\n ${EASING_PRESETS.map(\n ({ label, options }, index) => html`\n ${index > 0 ? html`<hr slot=\"content\" />` : null}\n\n <h4 slot=\"content\">${label}</h4>\n ${options.map(\n ({ value, label }) => html`\n <button slot=\"content\" type=\"button\" value=${value}>${label}</button>`\n )}\n `\n )}\n </ease-dropdown>\n </ease-field>\n\n <ease-field label=\"Type\">\n <ease-radio-group .value=${this.easingType} @change=${this.handleTypeChange} part=\"radio-group\">\n <button slot=\"content\" value=${EasingType.CUBIC_BEZIER}>Cubic</button>\n <button slot=\"content\" value=${EasingType.LINEAR}>Linear</button>\n </ease-radio-group>\n </ease-field>\n `;\n }\n})\nexport class CurveControls extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints, CurveControls>({\n type: Object,\n reflect: false,\n onChange(this: CurveControls) {\n this.handlePointsPropChange();\n }\n })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number | null, CurveControls>({\n type: Number,\n reflect: false,\n defaultValue: null,\n onChange(this: CurveControls, value: number | null) {\n this.handleFocusedLinearIndexPropChange(value);\n }\n })\n accessor focusedLinearIndex: number | null = null;\n\n private _activePresetValue: string | null = null;\n private isApplyingPreset = false;\n\n #setActivePreset(value: string | null): void {\n if (this._activePresetValue === value) {\n return;\n }\n this._activePresetValue = value;\n this.requestRender();\n }\n\n #clearActivePreset(): void {\n if (this._activePresetValue === null) {\n return;\n }\n this._activePresetValue = null;\n this.requestRender();\n }\n\n handleFocusedLinearIndexPropChange(_value: number | null): void {\n this.requestRender();\n }\n\n handlePointsPropChange(): void {\n if (this.isApplyingPreset) {\n return;\n }\n this.#clearActivePreset();\n }\n\n get maxPointsReached(): boolean {\n const points = this.#getLinearPoints();\n return points !== null && points.length >= MAX_LINEAR_POINTS;\n }\n\n get minPointsReached(): boolean {\n const points = this.#getLinearPoints();\n return points !== null && points.length <= MIN_LINEAR_POINTS;\n }\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n\n return this.points;\n };\n\n renderLinearDetailsControls(): TemplateResult | null {\n const points = this.#getLinearPoints();\n\n if (!points) {\n return null;\n }\n\n if (points.length < MIN_LINEAR_POINTS) {\n return html`\n <div class=\"control-group details-group\">\n <span class=\"details-empty\">Curve requires at least 2 points.</span>\n </div>\n `;\n }\n\n const focusedIndex = this.focusedLinearIndex;\n\n if (focusedIndex === null) {\n return html`\n <div class=\"control-group details-group\">\n <div class=\"details-panel\">\n <span class=\"details-empty\">Select a point on the canvas to edit its details.</span>\n </div>\n </div>\n `;\n }\n\n const selectedPoint = points[focusedIndex];\n if (!selectedPoint) {\n return null;\n }\n\n const previousIndex = focusedIndex > 0 ? focusedIndex - 1 : null;\n const nextIndex = focusedIndex < points.length - 1 ? focusedIndex + 1 : null;\n\n const isInnerPoint = focusedIndex > 0 && focusedIndex < points.length - 1;\n\n const pointMeta = `${(selectedPoint.x * 100).toFixed(0)}%, ${(selectedPoint.y * 100).toFixed(0)}%`;\n const pointType = selectedPoint.isLinked ? 'Smooth' : 'Corner';\n const hasInHandle = selectedPoint.cpInX !== undefined || selectedPoint.cpInY !== undefined;\n const hasOutHandle = selectedPoint.cpOutX !== undefined || selectedPoint.cpOutY !== undefined;\n const hasAnyHandle = hasInHandle || hasOutHandle;\n\n return html`\n <div class=\"control-group details-group\">\n <div class=\"details-panel\" role=\"group\" aria-label=\"Linear point details\">\n <div class=\"point-navigation\">\n <button\n type=\"button\"\n class=\"control-button\"\n @click=${(event: Event) => this.#focusIndex(event, previousIndex)}\n ?disabled=${previousIndex === null}\n >\n Previous\n </button>\n <div class=\"point-state\" aria-live=\"polite\">\n <span>P${focusedIndex + 1}</span>\n <span>${pointMeta}</span>\n <span>(${pointType})</span>\n </div>\n <button\n type=\"button\"\n class=\"control-button\"\n @click=${(event: Event) => this.#focusIndex(event, nextIndex)}\n ?disabled=${nextIndex === null}\n >\n Next\n </button>\n </div>\n\n <div class=\"coordinate-editor\" role=\"group\" aria-label=\"Point coordinates\">\n <label class=\"coordinate-field\">\n <span>X</span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${selectedPoint.x.toFixed(2)}\n data-axis=\"x\"\n ?disabled=${!isInnerPoint}\n @change=${this.#handleCoordinateInput}\n />\n </label>\n <label class=\"coordinate-field\">\n <span>Y</span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${selectedPoint.y.toFixed(2)}\n data-axis=\"y\"\n @change=${this.#handleCoordinateInput}\n />\n </label>\n <button\n type=\"button\"\n class=\"coordinate-remove\"\n ?disabled=${!isInnerPoint || points.length <= MIN_LINEAR_POINTS}\n @click=${this.#handleRemoveSelectedPoint}\n >\n Remove\n </button>\n </div>\n\n ${\n isInnerPoint\n ? html`\n <div class=\"point-type-controls\" role=\"group\" aria-label=\"Point type controls\">\n <button\n type=\"button\"\n class=\"control-button ${!selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"corner\"\n @click=${this.#handlePointTypeChange}\n >\n Corner (Independent)\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"smooth\"\n @click=${this.#handlePointTypeChange}\n >\n Smooth (Linked)\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"mirror-angle\"\n @click=${this.#handlePointTypeChange}\n >\n Mirror Angle: ${selectedPoint.isLinked ? 'On' : 'Off'}\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.mirrorLength !== false ? 'active' : ''}\"\n data-type=\"mirror-length\"\n @click=${this.#handlePointTypeChange}\n ?disabled=${!selectedPoint.isLinked}\n >\n Mirror Length: ${selectedPoint.mirrorLength === false ? 'Off' : 'On'}\n </button>\n </div>\n\n <div class=\"handle-actions\" role=\"group\" aria-label=\"Handle removal controls\">\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"both\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasAnyHandle}\n >\n Remove Both Handles\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"in\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasInHandle}\n >\n Remove Incoming Handle\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"out\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasOutHandle}\n >\n Remove Outgoing Handle\n </button>\n </div>\n `\n : this.#renderEndpointHandleControls(selectedPoint, focusedIndex)\n }\n </div>\n </div>\n `;\n }\n\n #handleCoordinateInput = (event: Event): void => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n const axis = target.dataset.axis;\n if (axis !== 'x' && axis !== 'y') {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const selectedPoint = points[index];\n if (!selectedPoint) {\n return;\n }\n\n const parsed = Number.parseFloat(target.value);\n\n if (Number.isNaN(parsed)) {\n target.value = selectedPoint[axis].toFixed(2);\n return;\n }\n\n const updatedPoints: LinearPoints = points.map((point, pointIndex) => {\n if (pointIndex !== index) {\n return { ...point };\n }\n\n const updated: LinearPoint = { ...point };\n\n if (axis === 'x') {\n if (index === 0 || index === points.length - 1) {\n return updated;\n }\n\n const previous = points[index - 1];\n const next = points[index + 1];\n const minX = previous ? previous.x + MIN_LINEAR_DELTA : 0;\n const maxX = next ? next.x - MIN_LINEAR_DELTA : 1;\n updated.x = Math.min(Math.max(parsed, minX), maxX);\n } else {\n updated.y = Math.min(Math.max(parsed, 0), 1);\n }\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n\n const refreshedPoint = normalizedPoints[index];\n\n if (refreshedPoint) {\n target.value = refreshedPoint[axis].toFixed(2);\n }\n };\n\n #handleRemoveSelectedPoint = (event: Event): void => {\n const index = this.focusedLinearIndex;\n\n if (index === null) {\n return;\n }\n\n this.#removeLinearPointAt(index, event);\n };\n\n #handlePointTypeChange = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const type = target.dataset.type;\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n switch (type) {\n case 'corner': {\n updatedPoint.isLinked = false;\n updatedPoint.mirrorLength = false;\n break;\n }\n case 'smooth': {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.isLinked = true;\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n break;\n }\n case 'mirror-angle': {\n const nextState = !updatedPoint.isLinked;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n } else {\n updatedPoint.mirrorLength = false;\n }\n updatedPoint.isLinked = nextState;\n break;\n }\n case 'mirror-length': {\n if (!updatedPoint.isLinked) {\n break;\n }\n const nextState = updatedPoint.mirrorLength === false;\n updatedPoint.mirrorLength = nextState;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n this.#alignMirrorLength(updatedPoint);\n }\n break;\n }\n default:\n return;\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #ensureSmoothHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy);\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n }\n\n #alignMirrorLength(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n\n #handleRemoveHandles = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const mode = (target.dataset.handle as 'in' | 'out' | 'both' | undefined) ?? 'both';\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const updatedPoints = [...points];\n const existingPoint = updatedPoints[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n const removeIncoming = mode === 'both' || mode === 'in';\n const removeOutgoing = mode === 'both' || mode === 'out';\n\n if (removeIncoming) {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n }\n\n if (removeOutgoing) {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n }\n\n if (removeIncoming && removeOutgoing) {\n delete updatedPoint.isLinked;\n delete updatedPoint.mirrorLength;\n } else if (removeIncoming || removeOutgoing) {\n updatedPoint.isLinked = false;\n updatedPoint.mirrorLength = false;\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #renderEndpointHandleControls(point: LinearPoint, index: number): TemplateResult {\n const isStart = index === 0;\n const handleKey: 'in' | 'out' = isStart ? 'out' : 'in';\n const handleLabel = isStart ? 'Outgoing' : 'Incoming';\n const hasHandle =\n handleKey === 'out'\n ? point.cpOutX !== undefined || point.cpOutY !== undefined\n : point.cpInX !== undefined || point.cpInY !== undefined;\n\n return html`\n <div class=\"handle-actions\" role=\"group\" aria-label=\"${handleLabel} handle controls\">\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=${handleKey}\n @click=${this.#handleEndpointHandleAdd}\n ?disabled=${hasHandle}\n >\n Add ${handleLabel} Handle\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=${handleKey}\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasHandle}\n >\n Remove ${handleLabel} Handle\n </button>\n </div>\n `;\n }\n\n #handleEndpointHandleAdd = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const handle = target.dataset.handle;\n if (handle !== 'in' && handle !== 'out') {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const neighborIndex = handle === 'out' ? index + 1 : index - 1;\n const neighbor = points[neighborIndex];\n if (!neighbor) {\n return;\n }\n\n const updatedPoints = [...points];\n const existingPoint = updatedPoints[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n this.#createEndpointHandle(updatedPoint, neighbor, handle);\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #createEndpointHandle(point: LinearPoint, neighbor: LinearPoint, handle: 'in' | 'out'): void {\n const dx = neighbor.x - point.x;\n const dy = neighbor.y - point.y;\n\n const direction = normalizeVector(dx, dy);\n const fallbackDirection = handle === 'out' ? { dx: 1, dy: 0 } : { dx: -1, dy: 0 };\n const finalDirection = direction.dx === 0 && direction.dy === 0 ? fallbackDirection : direction;\n\n const gap = Math.abs(dx);\n const baseLength = gap > 0 ? gap * 0.5 : MIN_LINEAR_DELTA * 0.5;\n const length = Math.min(DEFAULT_HANDLE_LENGTH, Math.max(MIN_LINEAR_DELTA * 0.5, baseLength));\n\n if (handle === 'out') {\n point.cpOutX = finalDirection.dx * length;\n point.cpOutY = finalDirection.dy * length;\n } else {\n point.cpInX = finalDirection.dx * length;\n point.cpInY = finalDirection.dy * length;\n }\n\n point.isLinked = false;\n point.mirrorLength = false;\n }\n\n #removeLinearPointAt(index: number, event: Event): void {\n const points = this.#getLinearPoints();\n\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n if (index <= 0 || index >= points.length - 1) {\n return;\n }\n\n const updatedPoints: LinearPoints = points\n .filter((_, pointIndex) => pointIndex !== index)\n .map((point) => {\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n\n const nextIndex = index - 1;\n\n this.focusedLinearIndex = nextIndex;\n this.#notifyHost('linear-point-focus', nextIndex, event);\n }\n\n readonly resetCurve = (event: Event): void => {\n event.preventDefault();\n this.#clearActivePreset();\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const defaults: CubicBezierPoints = {\n p1: { x: 0.25, y: 0.1 },\n p2: { x: 0.25, y: 1 }\n };\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n return;\n }\n\n const defaults: LinearPoints = [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n this.focusedLinearIndex = null;\n this.#notifyHost('linear-point-focus', null, event);\n };\n\n readonly distributeLinearPoints = (event: Event): void => {\n event.preventDefault();\n\n const points = this.#getLinearPoints();\n\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n const lastIndex = points.length - 1;\n const step = lastIndex > 0 ? 1 / lastIndex : 0;\n\n const distributed: LinearPoints = points.map((point, index) => {\n const updated: LinearPoint = { ...point };\n\n if (index === 0) {\n updated.x = 0;\n } else if (index === lastIndex) {\n updated.x = 1;\n } else {\n updated.x = Number.parseFloat((step * index).toFixed(4));\n }\n\n delete updated.cpInX;\n delete updated.cpInY;\n delete updated.cpOutX;\n delete updated.cpOutY;\n delete updated.isLinked;\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(distributed);\n this.#emitPoints(normalizedPoints, event);\n\n if (this.focusedLinearIndex !== null) {\n this.#notifyHost('linear-point-focus', this.focusedLinearIndex, event);\n }\n };\n\n #focusIndex = (event: Event, index: number | null): void => {\n event.preventDefault();\n if (index !== null) {\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n }\n };\n\n #setEasingType = (type: EasingType, event: Event): void => {\n if (this.easingType === type) {\n return;\n }\n\n if (!this.isApplyingPreset) {\n this.#clearActivePreset();\n }\n\n this.easingType = type;\n this.#notifyHost('easing-type-change', type, event);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n if (!this.isApplyingPreset) {\n this.#clearActivePreset();\n }\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n #applyPreset = (\n points: CubicBezierPoints | LinearPoints,\n type: EasingType,\n presetValue: string,\n event: Event\n ): void => {\n this.isApplyingPreset = true;\n if (this.easingType !== type) {\n this.#setEasingType(type, event);\n }\n\n this.points = points;\n this.focusedLinearIndex = null;\n this.#setActivePreset(presetValue);\n this.#notifyHost('points-change', points, event);\n\n if (type === EasingType.LINEAR) {\n this.#notifyHost('linear-point-focus', null, event);\n }\n\n this.isApplyingPreset = false;\n };\n\n readonly handleTypeChange = (event: CustomEvent<ControlEventDetail<string>>): void => {\n const detail = event.detail;\n\n if (!detail) {\n return;\n }\n\n const { value, event: originEvent } = detail;\n\n if (value === EasingType.CUBIC_BEZIER || value === EasingType.LINEAR) {\n this.#clearActivePreset();\n this.#setEasingType(value, originEvent ?? event);\n }\n };\n\n readonly handlePresetSelection = (event: CustomEvent<ControlEventDetail<string>>): void => {\n const detail = event.detail;\n\n if (!detail) {\n return;\n }\n\n const rawValue = detail.value;\n const originEvent = detail.event ?? event;\n\n if (typeof rawValue !== 'string') {\n return;\n }\n\n const cssValue = rawValue.trim();\n\n if (cssValue.length === 0) {\n this.#clearActivePreset();\n return;\n }\n\n if (cssValue.startsWith(EasingType.CUBIC_BEZIER)) {\n const parsed = parseCubicBezierValue(cssValue);\n if (!parsed) {\n this.#clearActivePreset();\n return;\n }\n this.#applyPreset(parsed, EasingType.CUBIC_BEZIER, cssValue, originEvent);\n return;\n }\n\n if (cssValue.startsWith(EasingType.LINEAR)) {\n const parsedLinear = parseLinearTimingFunction(cssValue);\n if (!parsedLinear) {\n this.#clearActivePreset();\n return;\n }\n // Apply smoothing to linear presets for better visual curves\n const smoothedLinear = smoothLinearPoints(parsedLinear, 0.3);\n this.#applyPreset(smoothedLinear, EasingType.LINEAR, cssValue, originEvent);\n return;\n }\n\n this.#clearActivePreset();\n };\n\n readonly handleSelectCubic = (event: Event): void => {\n event.preventDefault();\n this.#setEasingType(EasingType.CUBIC_BEZIER, event);\n };\n\n readonly handleSelectLinear = (event: Event): void => {\n event.preventDefault();\n this.#setEasingType(EasingType.LINEAR, event);\n };\n\n readonly addLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || this.maxPointsReached) {\n return;\n }\n\n let insertIndex = 0;\n let largestGap = -Infinity;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const gap = end.x - start.x;\n\n if (gap > largestGap) {\n largestGap = gap;\n insertIndex = index;\n }\n }\n\n const startPoint = points[insertIndex];\n const endPoint = points[insertIndex + 1];\n\n if (!startPoint || !endPoint) {\n return;\n }\n\n const newPointPosition = clampPoint({\n x: (startPoint.x + endPoint.x) / 2,\n y: (startPoint.y + endPoint.y) / 2\n });\n const newPoint: LinearPoint = {\n x: newPointPosition.x,\n y: newPointPosition.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n\n const updatedPoints: LinearPoints = [\n ...points.slice(0, insertIndex + 1),\n newPoint,\n ...points.slice(insertIndex + 1)\n ];\n\n const insertedIndex = insertIndex + 1;\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = insertedIndex;\n this.#notifyHost('linear-point-focus', insertedIndex, event);\n };\n\n readonly removeLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || this.minPointsReached) {\n return;\n }\n\n let removeIndex = 1;\n let smallestSpan = Number.POSITIVE_INFINITY;\n\n for (let index = 1; index < points.length - 1; index += 1) {\n const previous = points[index - 1];\n const next = points[index + 1];\n\n if (!previous || !next) {\n continue;\n }\n\n const span = next.x - previous.x;\n\n if (span < smallestSpan) {\n smallestSpan = span;\n removeIndex = index;\n }\n }\n\n if (removeIndex > 0 && removeIndex < points.length - 1) {\n this.#removeLinearPointAt(removeIndex, event);\n }\n };\n\n readonly toggleGrid = (event: Event): void => {\n event.preventDefault();\n\n const nextValue = !this.showGrid;\n this.showGrid = nextValue;\n this.#notifyHost('grid-toggle', nextValue, event);\n };\n\n readonly toggleSnapToGrid = (event: Event): void => {\n event.preventDefault();\n\n const nextValue = !this.snapToGrid;\n this.snapToGrid = nextValue;\n this.#notifyHost('snap-toggle', nextValue, event);\n };\n\n readonly incrementGridSize = (event: Event): void => {\n event.preventDefault();\n\n this.#commitGridSize(this.gridSize + 1, event);\n };\n\n readonly decrementGridSize = (event: Event): void => {\n event.preventDefault();\n\n this.#commitGridSize(this.gridSize - 1, event);\n };\n\n readonly handleGridSliderInput = (event: Event): void => {\n event.preventDefault();\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n this.#commitGridSize(Number(target.value), event);\n };\n\n readonly handleGridSizeChange = (event: Event): void => {\n event.preventDefault();\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n const parsed = Number(target.value);\n if (Number.isNaN(parsed)) {\n target.value = String(this.gridSize);\n return;\n }\n this.#commitGridSize(parsed, event);\n target.value = String(this.gridSize);\n };\n\n #clampGridSize = (value: number): number => Math.max(1, Math.min(24, Math.round(value)));\n\n #commitGridSize = (value: number, event: Event): void => {\n const nextValue = this.#clampGridSize(value);\n if (this.gridSize === nextValue) {\n this.requestRender();\n return;\n }\n this.gridSize = nextValue;\n this.#notifyHost('grid-size-change', this.gridSize, event);\n this.requestRender();\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n\n dispatchControlEvent(target, type, detail);\n };\n}\n","interface HighlightAPI {\n Highlight: new (...ranges: Range[]) => unknown;\n highlights: Map<string, unknown>;\n}\n\ninterface WindowWithHighlightAPI extends Window {\n CSS: {\n highlights: Map<string, unknown>;\n };\n Highlight: new (...ranges: Range[]) => unknown;\n}\n\nexport const SUPPORTS_HIGHLIGHT_API =\n typeof window !== 'undefined' &&\n typeof (window as unknown as WindowWithHighlightAPI).CSS !== 'undefined' &&\n !!(window as unknown as WindowWithHighlightAPI).CSS?.highlights &&\n typeof (window as unknown as WindowWithHighlightAPI).Highlight === 'function';\n\nexport const getHighlightAPI = (): HighlightAPI | null => {\n if (!SUPPORTS_HIGHLIGHT_API) {\n return null;\n }\n\n const w = window as unknown as WindowWithHighlightAPI;\n return {\n Highlight: w.Highlight,\n highlights: w.CSS.highlights\n };\n};\n","import type { TokenType } from './syntax-highlighter-types';\n\nexport const DEFAULT_THEME: Record<TokenType, string> = {\n keyword: 'var(--ease-syntax-keyword, #e47ab4)',\n string: 'var(--ease-syntax-string, #6ad09d)',\n comment: 'var(--ease-syntax-comment, var(--color-gray-700))',\n number: 'var(--ease-syntax-number, #f2c24b)',\n operator: 'var(--ease-syntax-operator, var(--color-gray-500))',\n tag: 'var(--ease-syntax-tag, #c36571)',\n attribute: 'var(--ease-syntax-attribute, #ff6600)',\n property: 'var(--ease-syntax-property, #61bf90)',\n type: 'var(--ease-syntax-type, #FFAB77)',\n variable: 'var(--ease-syntax-variable, #ea7987)',\n selector: 'var(--ease-syntax-selector, #4F9CED)',\n function: 'var(--ease-syntax-function, #71a4f4)'\n};\n\nexport const generateHighlightStyles = (\n instanceId: string,\n theme: Record<TokenType, string> = DEFAULT_THEME\n): string => {\n let styles = '';\n\n for (const [type, color] of Object.entries(theme)) {\n const highlightName = `syntax-${type}-${instanceId}`;\n const italic = type === 'comment' ? 'font-style: italic;' : '';\n styles += `::highlight(${highlightName}) { color: ${color}; ${italic} }`;\n }\n\n return styles;\n};\n","import type { Grammar } from './syntax-highlighter-types';\n\nexport const JS_BASE: Grammar = [\n ['comment', /(\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/)/m],\n ['string', /('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")|(`[^`\\\\]*(?:\\\\.[^`\\\\]*)*`)/],\n ['number', /\\b\\d+(\\.\\d+)?\\b|0x[a-fA-F0-9]+\\b/],\n [\n 'keyword',\n /\\b(if|else|while|for|do|return|const|let|var|function|class|new|try|catch|finally|throw|import|export|default|async|await|extends|super|break|continue|switch|case|in|of|instanceof|typeof|delete|this|true|false|null|from|as)\\b/\n ],\n ['function', /\\b\\w+(?=\\()/],\n ['operator', /[+\\-*/%=<>!&|?.:]{1,3}/]\n];\n\nexport const TS_ADDITIONS: Grammar = [\n [\n 'keyword',\n /\\b(type|interface|enum|public|private|protected|readonly|namespace|module|declare|abstract|implements|static|any|unknown|never|string|number|boolean|void|symbol|bigint)\\b/\n ],\n ['type', /\\b([A-Z]\\w*)\\b/]\n];\n\nexport const HTML_BASE: Grammar = [\n ['comment', /<!--[\\s\\S]*?-->/m],\n ['attribute', /(\\s[a-zA-Z0-9_-]+)(?=\\s*=)/],\n ['string', /('[^']*')|(\"[^\"]*\")/],\n ['tag', /(<\\/?)([a-zA-Z0-9-]+)/],\n ['keyword', /<!DOCTYPE[^>]*>/i]\n];\n\nexport const CSS_BASE: Grammar = [\n ['comment', /\\/\\*[\\s\\S]*?\\*\\//m],\n ['string', /('[^']*')|(\"[^\"]*\")/],\n ['number', /(#[0-9a-fA-F]{3,8})|\\b-?\\d+(\\.\\d+)?(px|em|rem|%|deg|s|ms|vh|vw|vmin|vmax)?\\b/],\n ['keyword', /(!important|@media|@import|@keyframes|@font-face|inherit|initial|unset|auto|none)\\b/],\n ['variable', /(--[a-zA-Z0-9_-]+)/],\n ['property', /([a-zA-Z-]+)\\s*(?=:)/],\n ['selector', /(\\.|#)([a-zA-Z0-9_-]+)|\\[[^\\]]+\\]/],\n ['tag', /\\b([a-zA-Z]+)(?=\\s*\\{)/]\n];\n\nexport const JSON_BASE: Grammar = [\n ['property', /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"(?=\\s*:)/],\n ['string', /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/],\n ['number', /\\b-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?\\b/],\n ['keyword', /\\b(true|false|null)\\b/]\n];\n\nconst baseGrammars: Record<string, Grammar> = {\n javascript: JS_BASE,\n js: JS_BASE,\n typescript: [...JS_BASE, ...TS_ADDITIONS],\n ts: [...JS_BASE, ...TS_ADDITIONS],\n html: HTML_BASE,\n css: CSS_BASE,\n json: JSON_BASE\n};\n\nconst TSX_GRAMMAR: Grammar = [\n ...HTML_BASE,\n ...(baseGrammars.typescript?.filter(([type]) => type !== 'operator') || [])\n];\n\nexport const GRAMMARS: Record<string, Grammar> = {\n ...baseGrammars,\n tsx: TSX_GRAMMAR,\n jsx: TSX_GRAMMAR\n};\n","import type { Token, TokenType } from './syntax-highlighter-types';\n\nimport { GRAMMARS } from './syntax-grammars';\n\nexport const tokenize = (code: string, language: string): Token[] => {\n const grammar = GRAMMARS[language.toLowerCase()];\n\n if (!grammar) {\n return [];\n }\n\n const regexParts: string[] = [];\n const groupMap = new Map<string, TokenType>();\n let groupIndex = 0;\n\n grammar.forEach(([type, pattern]) => {\n const groupName = `G${groupIndex++}`;\n groupMap.set(groupName, type);\n regexParts.push(`(?<${groupName}>${pattern.source})`);\n });\n\n const masterRegex = new RegExp(regexParts.join('|'), 'gm');\n const tokens: Token[] = [];\n\n let match: RegExpExecArray | null;\n\n while (true) {\n match = masterRegex.exec(code);\n if (match === null) {\n break;\n }\n if (match.index === masterRegex.lastIndex) {\n masterRegex.lastIndex++;\n }\n\n if (match.groups) {\n for (const groupName in match.groups) {\n if (match.groups[groupName] !== undefined) {\n const type = groupMap.get(groupName);\n if (type) {\n const start = match.index;\n const end = start + match[0].length;\n\n if ((language === 'html' || language === 'tsx' || language === 'jsx') && type === 'tag') {\n const tagNameMatch = match[0].match(/[a-zA-Z0-9-]+/);\n if (tagNameMatch && tagNameMatch.index !== undefined) {\n const tagNameStart = start + tagNameMatch.index;\n const tagNameEnd = tagNameStart + tagNameMatch[0].length;\n tokens.push({ type, start: tagNameStart, end: tagNameEnd });\n break;\n }\n }\n\n tokens.push({ type, start, end });\n break;\n }\n }\n }\n }\n }\n\n return tokens;\n};\n\nexport const normalizeIndent = (code: string): string => {\n const lines = code.split('\\n').filter((line) => line.trim());\n\n if (!lines.length) {\n return '';\n }\n\n const minIndent = Math.min(...lines.map((line) => line.match(/^\\s*/)?.[0].length || 0));\n\n return lines.map((line) => line.substring(minIndent)).join('\\n');\n};\n","import { html } from 'lit-html';\n\nimport { outputStyles } from './styles';\nimport { type CSSCode, type CubicBezierPoints, EasingType, type LinearPoints } from './types';\nimport { generateCubicBezierCSS, generateLinearCSS } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport '~/components/code';\n\n@Component({\n tag: 'ease-curve-output',\n styles: outputStyles,\n template(this: CurveOutput) {\n return html`\n <div class=\"output-container\">\n <div class=\"output-group\">\n <h4 class=\"output-label\">CSS Easing Function</h4>\n <ease-code language=\"css\">${this.generatedCSS.code}</ease-code>\n <button class=\"copy-button\" @click=${this.handleCopyClick}>\n ${this.copyStatus}\n </button>\n </div>\n </div>\n `;\n }\n})\nexport class CurveOutput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ type: String, reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<string>({ reflect: true, defaultValue: 'ease-custom' })\n accessor name!: string;\n\n @Prop<'animation' | 'transition'>({ reflect: true, defaultValue: 'animation' })\n accessor variant!: 'animation' | 'transition';\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round!: number;\n\n #copyTimeout: number | null = null;\n #animationTimeout: number | null = null;\n #isAnimating = false;\n\n get timingFunction(): string {\n const { timingFunction } = this.generatedCSS;\n return timingFunction;\n }\n\n get generatedCSS(): CSSCode {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n if (!this.points || Array.isArray(this.points)) {\n const timingFunction = 'cubic-bezier(0.25, 0.1, 0.25, 1)';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n return generateCubicBezierCSS(this.points as CubicBezierPoints, this.name, this.variant);\n }\n\n if (this.easingType === EasingType.LINEAR) {\n if (Array.isArray(this.points)) {\n return generateLinearCSS(this.points, this.name, this.variant, {\n simplify: this.simplify,\n round: this.round\n });\n }\n\n const timingFunction = 'linear(0, 1)';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n const timingFunction = 'ease';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n get copyStatus(): string {\n return this.#copyTimeout ? 'Copied!' : 'Copy CSS';\n }\n\n get isAnimating(): boolean {\n return this.#isAnimating;\n }\n\n #copyToClipboard = async (event: Event): Promise<void> => {\n event.preventDefault();\n\n try {\n await navigator.clipboard.writeText(this.timingFunction);\n\n if (this.#copyTimeout) {\n clearTimeout(this.#copyTimeout);\n }\n\n this.#copyTimeout = window.setTimeout(() => {\n this.#copyTimeout = null;\n this.requestRender();\n }, 2000);\n\n this.requestRender();\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n };\n\n #playPreview = (event: Event): void => {\n event.preventDefault();\n\n if (this.#isAnimating) {\n this.#isAnimating = false;\n this.requestRender();\n void this.offsetHeight;\n }\n\n if (this.#animationTimeout) {\n clearTimeout(this.#animationTimeout);\n }\n\n this.#isAnimating = true;\n this.requestRender();\n\n this.#animationTimeout = window.setTimeout(() => {\n this.#isAnimating = false;\n\n this.requestRender();\n }, 2000);\n };\n\n readonly handleCopyClick = (event: Event): void => {\n void this.#copyToClipboard(event);\n };\n\n handlePreviewClick(event: Event): void {\n this.#playPreview(event);\n }\n\n disconnectedCallback(): void {\n if (this.#copyTimeout) {\n clearTimeout(this.#copyTimeout);\n\n this.#copyTimeout = null;\n }\n\n if (this.#animationTimeout) {\n clearTimeout(this.#animationTimeout);\n\n this.#animationTimeout = null;\n }\n }\n}\n","import { html } from 'lit-html';\n\nimport { toolbarStyles } from './styles';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n MIN_LINEAR_POINTS\n} from './types';\nimport { clampPoint, normalizeLinearPoints } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\nimport '~/elements/icons/interface/minus';\nimport '~/elements/icons/interface/plus';\nimport '~/elements/button';\nimport '~/elements/tooltip';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n showGrid: boolean;\n snapToGrid: boolean;\n gridSize: number;\n focusedLinearIndex: number | null;\n handleGridToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleSnapToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleGridSizeChange?: (event: KeyboardEvent) => void;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n handleSimplifyChange?: (event: CustomEvent<ControlEventDetail<number>>) => void;\n handleRoundChange?: (event: CustomEvent<ControlEventDetail<number>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'grid-toggle': 'handleGridToggle',\n 'snap-toggle': 'handleSnapToggle',\n 'grid-size-change': 'handleGridSizeChange',\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus',\n 'simplify-change': 'handleSimplifyChange',\n 'round-change': 'handleRoundChange'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-toolbar',\n styles: toolbarStyles,\n template(this: CurveToolbar) {\n const isGridAtMinimum = this.gridSize <= 1;\n const isGridAtMaximum = this.gridSize >= 24;\n const isLinear = this.easingType === EasingType.LINEAR;\n const points = isLinear && Array.isArray(this.points) ? (this.points as LinearPoints) : null;\n\n return html`\n <div class=\"toolbar-container\">\n <div class=\"toolbar-group\">\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button ${this.showGrid ? 'active' : ''}\"\n @click=${this.toggleGrid}\n slot=\"trigger\"\n >\n <ease-icon-grid state=${this.showGrid ? 'hide' : 'show'}></ease-icon-grid>\n </button>\n Toggle Grid\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button ${this.snapToGrid ? 'active' : ''}\"\n @click=${this.toggleSnapToGrid}\n slot=\"trigger\"\n >\n <ease-icon-snap state=${this.snapToGrid ? 'active' : 'default'}></ease-icon-snap>\n </button>\n Snap to Grid\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.resetCurve}\n slot=\"trigger\"\n >\n <ease-icon-clear></ease-icon-clear>\n </button>\n Reset Curve\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.addLinearPoint}\n ?disabled=${(points && points.length >= MAX_LINEAR_POINTS) || !isLinear}\n slot=\"trigger\"\n >\n <ease-icon-anchor-add></ease-icon-anchor-add>\n </button>\n Add Point\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.removeLinearPoint}\n ?disabled=${(points && points.length <= MIN_LINEAR_POINTS) || !isLinear}\n slot=\"trigger\"\n >\n <ease-icon-anchor-remove></ease-icon-anchor-remove>\n </button>\n Remove Point\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.distributeLinearPoints}\n ?disabled=${!isLinear}\n slot=\"trigger\"\n >\n <ease-icon-bezier-distribute></ease-icon-bezier-distribute>\n </button>\n Distribute Points\n </ease-tooltip>\n\n <div class=\"grid-size-controls\">\n <ease-button\n class=\"grid-size-button minus\"\n type=\"button\"\n block=\"icon\"\n pill=\"true\"\n variant=\"headless\"\n @click=${this.decrementGridSize}\n ?disabled=${isGridAtMinimum}\n >\n <ease-icon-minus></ease-icon-minus>\n </ease-button>\n <div class=\"grid-size-value\">\n ${this.gridSize}x\n </div>\n <ease-button\n class=\"grid-size-button plus\"\n type=\"button\"\n block=\"icon\"\n pill=\"true\"\n variant=\"headless\"\n @click=${this.incrementGridSize}\n ?disabled=${isGridAtMaximum}\n >\n <ease-icon-plus></ease-icon-plus>\n </ease-button>\n </div>\n </div>\n\n <ease-field label=\"Simplify\">\n <ease-slider .value=${this.simplify} .min=${0} .max=${0.05} .step=${0.001} @input=${this.handleSimplifyInput}></ease-slider>\n </ease-field>\n\n <ease-field label=\"Round\">\n <ease-slider .value=${this.round} .min=${0} .max=${5} .step=${1} @input=${this.handleRoundInput}></ease-slider>\n </ease-field>\n\n </div>\n `;\n }\n})\nexport class CurveToolbar extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify: number = 0;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round: number = 5;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as unknown as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n return this.points;\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n dispatchControlEvent(target, type, detail);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n readonly toggleGrid = (event: Event): void => {\n event.preventDefault();\n const nextValue = !this.showGrid;\n this.showGrid = nextValue;\n this.#notifyHost('grid-toggle', nextValue, event);\n };\n\n readonly toggleSnapToGrid = (event: Event): void => {\n event.preventDefault();\n const nextValue = !this.snapToGrid;\n this.snapToGrid = nextValue;\n this.#notifyHost('snap-toggle', nextValue, event);\n };\n\n readonly resetCurve = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const defaults: CubicBezierPoints = {\n p1: { x: 0.25, y: 0.1 },\n p2: { x: 0.25, y: 1 }\n };\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n return;\n }\n\n const defaults: LinearPoints = [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n this.#notifyHost('linear-point-focus', null, event);\n };\n\n readonly distributeLinearPoints = (event: Event): void => {\n event.preventDefault();\n\n const points = this.#getLinearPoints();\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n const lastIndex = points.length - 1;\n const step = lastIndex > 0 ? 1 / lastIndex : 0;\n\n const distributed: LinearPoints = points.map((point, index) => {\n const updated: LinearPoint = { ...point };\n\n if (index === 0) {\n updated.x = 0;\n } else if (index === lastIndex) {\n updated.x = 1;\n } else {\n updated.x = Number.parseFloat((step * index).toFixed(4));\n }\n\n delete updated.cpInX;\n delete updated.cpInY;\n delete updated.cpOutX;\n delete updated.cpOutY;\n delete updated.isLinked;\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(distributed);\n this.#emitPoints(normalizedPoints, event);\n };\n\n readonly addLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length >= MAX_LINEAR_POINTS) {\n return;\n }\n\n let insertIndex = 0;\n let largestGap = -Infinity;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const gap = end.x - start.x;\n\n if (gap > largestGap) {\n largestGap = gap;\n insertIndex = index;\n }\n }\n\n const startPoint = points[insertIndex];\n const endPoint = points[insertIndex + 1];\n\n if (!startPoint || !endPoint) {\n return;\n }\n\n const newPointPosition = clampPoint(\n {\n x: (startPoint.x + endPoint.x) / 2,\n y: (startPoint.y + endPoint.y) / 2\n },\n { minY: -2, maxY: 3 }\n );\n const newPoint: LinearPoint = {\n x: newPointPosition.x,\n y: newPointPosition.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n\n const updatedPoints: LinearPoints = [\n ...points.slice(0, insertIndex + 1),\n newPoint,\n ...points.slice(insertIndex + 1)\n ];\n\n const insertedIndex = insertIndex + 1;\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.#notifyHost('linear-point-focus', insertedIndex, event);\n };\n\n readonly removeLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n let removeIndex = 1;\n let smallestSpan = Number.POSITIVE_INFINITY;\n\n for (let index = 1; index < points.length - 1; index += 1) {\n const previous = points[index - 1];\n const next = points[index + 1];\n\n if (!previous || !next) {\n continue;\n }\n\n const span = next.x - previous.x;\n\n if (span < smallestSpan) {\n smallestSpan = span;\n removeIndex = index;\n }\n }\n\n if (removeIndex > 0 && removeIndex < points.length - 1) {\n const updatedPoints: LinearPoints = points\n .filter((_, pointIndex) => pointIndex !== removeIndex)\n .map((point) => {\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n\n const nextIndex = removeIndex - 1;\n this.#notifyHost('linear-point-focus', nextIndex, event);\n }\n };\n\n readonly incrementGridSize = (event: Event): void => {\n event.preventDefault();\n this.#commitGridSize(this.gridSize + 1, event);\n };\n\n readonly decrementGridSize = (event: Event): void => {\n event.preventDefault();\n this.#commitGridSize(this.gridSize - 1, event);\n };\n\n readonly handleSimplifyInput = (event: Event): void => {\n const customEvent = event as CustomEvent<ControlEventDetail<number>>;\n const value = customEvent.detail?.value ?? 0;\n this.simplify = Number(value);\n this.#notifyHost('simplify-change', this.simplify, event);\n };\n\n readonly handleRoundInput = (event: Event): void => {\n const customEvent = event as CustomEvent<ControlEventDetail<number>>;\n const value = customEvent.detail?.value ?? 0;\n this.round = Number(value);\n this.#notifyHost('round-change', this.round, event);\n };\n\n #clampGridSize = (value: number): number => Math.max(1, Math.min(24, Math.round(value)));\n\n #commitGridSize = (value: number, event: Event): void => {\n const nextValue = this.#clampGridSize(value);\n if (this.gridSize === nextValue) {\n this.requestRender();\n return;\n }\n this.gridSize = nextValue;\n this.#notifyHost('grid-size-change', this.gridSize, event);\n this.requestRender();\n };\n}\n","import type { ControlEventDetail } from '~/elements/shared';\n\nimport { html } from 'lit-html';\n\nimport { cubicBezierToLinearPoints } from './bezier-conversion';\nimport { containerStyles } from './styles';\nimport { type CubicBezierPoints, EasingType, type LinearPoints, MIN_LINEAR_POINTS } from './types';\nimport { MIN_LINEAR_DELTA, normalizeLinearPoints } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-curve',\n styles: containerStyles,\n template(this: Curve) {\n return html`\n <div class=\"curve-container\">\n <div class=\"curve-header\">\n <ease-curve-controls\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .focusedLinearIndex=${this.focusedLinearIndex}\n ></ease-curve-controls>\n </div>\n\n <div class=\"curve-canvas-wrapper\">\n <div class=\"curve-canvas\">\n <ease-curve-canvas\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .focusedLinearIndex=${this.focusedLinearIndex}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-canvas>\n </div>\n <ease-curve-canvas-controls\n .easingType=${this.easingType}\n .points=${this.points}\n .focusedLinearIndex=${this.focusedLinearIndex}\n ></ease-curve-canvas-controls>\n </div>\n\n <div class=\"curve-toolbar\">\n <ease-curve-toolbar\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-toolbar>\n </div>\n\n <!-- <div class=\"curve-footer\">\n <ease-curve-output\n .easingType=${this.easingType}\n .points=${this.points}\n .name=${this.name}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-output>\n </div> -->\n </div>\n `;\n }\n})\nexport class Curve extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'ease-custom' })\n accessor name!: string;\n\n @Prop<EasingType, Curve>({\n reflect: true,\n defaultValue: EasingType.CUBIC_BEZIER,\n onChange(this: Curve, next: EasingType, previous: EasingType) {\n if (next !== previous) {\n this.points = this.getDefaultPointsForType(next);\n this.focusedLinearIndex = null;\n }\n }\n })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({\n type: Object,\n reflect: false,\n defaultValue: () => {\n return { p1: { x: 0.25, y: 0.1 }, p2: { x: 0.25, y: 1 } };\n }\n })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round!: number;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n private getDefaultPointsForType(type: EasingType): CubicBezierPoints | LinearPoints {\n return type === EasingType.CUBIC_BEZIER\n ? { p1: { x: 0.25, y: 0.1 }, p2: { x: 0.25, y: 1 } }\n : [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<EasingType>>>('easing-type-change', { target: 'light' })\n handleEasingTypeChange(event: CustomEvent<ControlEventDetail<EasingType>>): void {\n const { value } = event.detail;\n\n if (this.easingType === value) {\n return;\n }\n\n const previousType = this.easingType;\n const previousPoints = this.points;\n this.easingType = value;\n this.focusedLinearIndex = null;\n\n if (previousType === EasingType.CUBIC_BEZIER && value === EasingType.LINEAR) {\n if (previousPoints && !Array.isArray(previousPoints)) {\n const bezierPoints = previousPoints as CubicBezierPoints;\n const linearPoints = cubicBezierToLinearPoints(bezierPoints);\n this.points = linearPoints;\n this.emitPointsChange(linearPoints, event.detail.event);\n return;\n } else {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n }\n } else if (previousType === EasingType.LINEAR && value === EasingType.CUBIC_BEZIER) {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n } else {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n }\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<boolean>>>('grid-toggle', { target: 'light' })\n handleGridToggle(event: CustomEvent<ControlEventDetail<boolean>>): void {\n const { value } = event.detail;\n\n if (this.showGrid === value) {\n return;\n }\n\n this.showGrid = value;\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<boolean>>>('snap-toggle', { target: 'light' })\n handleSnapToggle(event: CustomEvent<ControlEventDetail<boolean>>): void {\n const { value } = event.detail;\n\n if (this.snapToGrid === value) {\n return;\n }\n\n this.snapToGrid = value;\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('grid-size-change', { target: 'light' })\n handleGridSizeChange(event: CustomEvent<ControlEventDetail<number>>): void {\n let { value } = event.detail;\n value = Math.max(1, Math.min(24, value));\n if (this.gridSize === value) {\n return;\n }\n this.gridSize = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('simplify-change', { target: 'light' })\n handleSimplifyChange(event: CustomEvent<ControlEventDetail<number>>): void {\n const { value } = event.detail;\n if (this.simplify === value) {\n return;\n }\n this.simplify = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('round-change', { target: 'light' })\n handleRoundChange(event: CustomEvent<ControlEventDetail<number>>): void {\n const { value } = event.detail;\n if (this.round === value) {\n return;\n }\n this.round = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>>('points-change', {\n target: 'light'\n })\n handlePointsChange(event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>): void {\n const { value } = event.detail;\n this.points = value;\n\n if (Array.isArray(value)) {\n if (this.focusedLinearIndex !== null) {\n if (this.focusedLinearIndex >= value.length) {\n this.focusedLinearIndex = value.length - 1;\n }\n }\n } else {\n this.focusedLinearIndex = null;\n }\n }\n\n @Listen<Curve, KeyboardEvent>('keydown', { target: 'window', passive: false })\n handleKeyboardShortcuts(event: KeyboardEvent): void {\n if (event.defaultPrevented) {\n return;\n }\n\n const activeElement = event.target;\n\n if (\n activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement ||\n (activeElement instanceof HTMLElement && activeElement.isContentEditable)\n ) {\n return;\n }\n\n if (this.easingType !== EasingType.LINEAR || !Array.isArray(this.points)) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n\n if (index === null) {\n return;\n }\n\n const lastIndex = this.points.length - 1;\n const clonedPoints: LinearPoints = this.points.map((point) => {\n return { ...point };\n });\n const point = clonedPoints[index];\n\n if (!point) {\n return;\n }\n\n const step = event.shiftKey ? 0.05 : 0.01;\n let handled = false;\n\n switch (event.key) {\n case 'ArrowLeft': {\n if (index <= 0 || index >= lastIndex) {\n break;\n }\n const previous = clonedPoints[index - 1];\n const next = clonedPoints[index + 1];\n\n if (!previous || !next) {\n break;\n }\n\n const minX = previous.x + MIN_LINEAR_DELTA;\n const maxX = next.x - MIN_LINEAR_DELTA;\n point.x = Math.min(Math.max(point.x - step, minX), maxX);\n handled = true;\n break;\n }\n case 'ArrowRight': {\n if (index <= 0 || index >= lastIndex) {\n break;\n }\n const previous = clonedPoints[index - 1];\n const next = clonedPoints[index + 1];\n\n if (!previous || !next) {\n break;\n }\n\n const minX = previous.x + MIN_LINEAR_DELTA;\n const maxX = next.x - MIN_LINEAR_DELTA;\n point.x = Math.min(Math.max(point.x + step, minX), maxX);\n handled = true;\n break;\n }\n case 'ArrowUp': {\n point.y = Math.min(Math.max(point.y + step, 0), 1);\n handled = true;\n break;\n }\n case 'ArrowDown': {\n point.y = Math.min(Math.max(point.y - step, 0), 1);\n handled = true;\n break;\n }\n case 'Delete':\n case 'Backspace': {\n if (clonedPoints.length <= MIN_LINEAR_POINTS || index <= 0 || index >= lastIndex) {\n break;\n }\n\n clonedPoints.splice(index, 1);\n\n const normalized = normalizeLinearPoints(clonedPoints);\n this.points = normalized;\n this.emitPointsChange(normalized, event);\n\n const nextFocus = index - 1;\n\n this.focusedLinearIndex = nextFocus;\n handled = true;\n break;\n }\n default:\n break;\n }\n\n if (handled && event.key !== 'Delete' && event.key !== 'Backspace') {\n const normalized = normalizeLinearPoints(clonedPoints);\n this.points = normalized;\n this.emitPointsChange(normalized, event);\n this.focusedLinearIndex = index;\n }\n\n if (handled) {\n event.preventDefault();\n }\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number | null>>>('linear-point-focus', { target: 'light' })\n handleLinearPointFocus(event: CustomEvent<ControlEventDetail<number | null>>): void {\n const { value } = event.detail;\n if (this.focusedLinearIndex === value) {\n return;\n }\n this.focusedLinearIndex = value ?? null;\n }\n\n private emitPointsChange(value: CubicBezierPoints | LinearPoints, sourceEvent?: Event): void {\n const detail: ControlEventDetail<CubicBezierPoints | LinearPoints> = {\n value,\n event: sourceEvent ?? new Event('points-change')\n };\n\n this.dispatchEvent(\n new CustomEvent('points-change', {\n detail,\n bubbles: true,\n composed: true\n })\n );\n }\n}\n\nimport './canvas';\nimport './canvas-controls';\nimport './controls';\nimport './output';\nimport './toolbar';\n\nexport {\n type CubicBezierPoints,\n type EasingData,\n EasingType,\n type LinearPoints,\n type Point\n} from './types';\n","import type { TokenType } from './utils/syntax-highlighter-types';\n\nimport { html } from 'lit-html';\n\nimport { getHighlightAPI, SUPPORTS_HIGHLIGHT_API } from './utils/highlight-api';\nimport { generateHighlightStyles } from './utils/syntax-highlighter-theme';\nimport { normalizeIndent, tokenize } from './utils/syntax-tokenizer';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-code',\n shadowMode: 'open',\n autoSlot: false,\n styles: `\n :host {\n display: block;\n position: relative;\n color: var(--ease-code-color, var(--color-blue-100));\n }\n\n pre {\n margin: 0;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-size: var(--ease-code-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-code-line-height, 1.4);\n }\n\n code {\n white-space: pre-wrap;\n }\n `,\n template() {\n return html`<pre><code><slot></slot></code></pre>`;\n }\n})\nexport class Code extends HTMLElement {\n declare requestRender: () => void;\n\n #instanceId: string = `hl-${crypto.randomUUID()}`;\n #registeredHighlights: Set<string> = new Set();\n #observer: MutationObserver | null = null;\n\n @Prop<string | null>({ reflect: true })\n accessor language: string | null = null;\n\n @Query<HTMLElement>('code')\n accessor codeElement: HTMLElement | null = null;\n\n connectedCallback(): void {\n this.#observer = new MutationObserver(() => this.#processContent());\n\n this.#observer.observe(this, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n this.#processContent();\n }\n\n disconnectedCallback(): void {\n this.#observer?.disconnect();\n this.#cleanupHighlights();\n }\n\n attributeChangedCallback(name: string): void {\n if (name === 'language') {\n this.#processContent();\n }\n }\n\n get currentLanguage(): string {\n return this.language?.toLowerCase() ?? 'plaintext';\n }\n\n afterRender(): void {\n this.#processContent();\n }\n\n #renderStyles = (): void => {\n const style = document.createElement('style');\n\n style.setAttribute('data-highlight-styles', this.#instanceId);\n\n const highlightStyles = generateHighlightStyles(this.#instanceId);\n style.textContent = highlightStyles;\n\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(style);\n }\n };\n\n #cleanupStyles() {\n const styles = this.shadowRoot?.querySelectorAll<HTMLStyleElement>(\n `style[data-highlight-styles=\"${this.#instanceId}\"]`\n );\n\n if (styles) {\n for (const style of styles) {\n style.remove();\n }\n }\n }\n\n #getHighlightName(type: TokenType): string {\n return `syntax-${type}-${this.#instanceId}`;\n }\n\n #processContent() {\n let rawCode = this.textContent || '';\n rawCode = normalizeIndent(rawCode);\n\n if (!this.codeElement) {\n return;\n }\n\n this.codeElement.textContent = rawCode;\n\n this.#cleanupHighlights();\n\n if (!rawCode.trim() || !SUPPORTS_HIGHLIGHT_API) {\n return;\n }\n\n const textNode = this.codeElement.firstChild as Text;\n\n if (!textNode) {\n return;\n }\n\n this.#highlightCode(rawCode, this.currentLanguage, textNode);\n }\n\n #highlightCode(code: string, language: string, textNode: Text) {\n const api = getHighlightAPI();\n\n if (!api) {\n return;\n }\n\n const tokens = tokenize(code, language);\n const highlightMap = new Map<TokenType, Range[]>();\n\n for (const token of tokens) {\n if (token.start >= token.end) {\n continue;\n }\n\n try {\n this.#renderStyles();\n\n const range = document.createRange();\n range.setStart(textNode, token.start);\n range.setEnd(textNode, token.end);\n\n if (!highlightMap.has(token.type)) {\n highlightMap.set(token.type, []);\n }\n\n highlightMap.get(token.type)?.push(range);\n } catch {\n // Ignore range creation errors\n }\n }\n\n for (const [type, ranges] of highlightMap.entries()) {\n if (ranges.length) {\n const highlightName = this.#getHighlightName(type);\n const highlight = new api.Highlight(...ranges);\n api.highlights.set(highlightName, highlight);\n this.#registeredHighlights.add(highlightName);\n }\n }\n }\n\n #cleanupHighlights() {\n const api = getHighlightAPI();\n\n if (!api) {\n return;\n }\n\n for (const name of this.#registeredHighlights) {\n api.highlights.delete(name);\n }\n\n this.#cleanupStyles();\n\n this.#registeredHighlights.clear();\n }\n}\n","export * from './animation/chevron';\nexport * from './animation/clear';\nexport * from './animation/grid';\nexport * from './animation/loading';\nexport * from './animation/snap';\nexport * from './interface/anchor-add';\nexport * from './interface/anchor-remove';\nexport * from './interface/arrow-up';\nexport * from './interface/arrows-vertical';\nexport * from './interface/bezier';\nexport * from './interface/bezier-angle';\nexport * from './interface/bezier-distribute';\nexport * from './interface/bezier-length';\nexport * from './interface/bezier-mirror';\nexport * from './interface/check';\nexport * from './interface/circle-arrow-left';\nexport * from './interface/circle-arrow-right';\nexport * from './interface/code';\nexport * from './interface/dots';\nexport * from './interface/mention';\nexport * from './interface/minus';\nexport * from './interface/picker';\nexport * from './interface/plus';\nexport * from './interface/settings';\n","/**\n * Side-effect import that registers all custom elements.\n * Use this for browser environments where you want all components available immediately.\n *\n * @example\n * ```ts\n * import '@easemate/web-kit/register';\n * ```\n */\n\n// JSX type augmentation - export a non-empty type to force TS to include the module\n// This ensures JSX types are available when this module is imported\nexport type { EaseElements as WebKitJSXElements } from './react/jsx';\n\n// Elements (side-effects - each imports and registers its custom element)\nimport './elements/button';\nimport './elements/checkbox';\nimport './elements/color';\nimport './elements/color/picker';\nimport './elements/dropdown';\nimport './elements/field';\nimport './elements/icons';\nimport './elements/input';\nimport './elements/logo';\nimport './elements/monitor';\nimport './elements/monitor/fps';\nimport './elements/number';\nimport './elements/origin';\nimport './elements/panel';\nimport './elements/popover';\nimport './elements/radio';\nimport './elements/radio/input';\nimport './elements/radio/option';\nimport './elements/slider';\nimport './elements/state';\nimport './elements/toggle';\nimport './elements/tooltip';\n\n// Components (advanced elements)\nimport './components/code';\nimport './components/curve';\n","/**\n * Component loader map for dynamic imports.\n * Maps tag names to their module paths for selective/lazy loading.\n */\n\n/**\n * All root-level web-kit element tags (excludes internal sub-components).\n */\nexport const WEB_KIT_ELEMENT_TAGS = [\n // Controls\n 'ease-button',\n 'ease-checkbox',\n 'ease-color-input',\n 'ease-color-picker',\n 'ease-dropdown',\n 'ease-input',\n 'ease-number-input',\n 'ease-origin',\n 'ease-radio-group',\n 'ease-radio-input',\n 'ease-slider',\n 'ease-toggle',\n\n // Layout\n 'ease-field',\n 'ease-panel',\n 'ease-popover',\n 'ease-state',\n 'ease-tooltip',\n\n // Display\n 'ease-logo-loader',\n 'ease-monitor',\n 'ease-monitor-fps',\n\n // Icons\n 'ease-icon-anchor-add',\n 'ease-icon-anchor-remove',\n 'ease-icon-arrow-up',\n 'ease-icon-arrows-vertical',\n 'ease-icon-bezier',\n 'ease-icon-bezier-angle',\n 'ease-icon-bezier-distribute',\n 'ease-icon-bezier-length',\n 'ease-icon-bezier-mirror',\n 'ease-icon-check',\n 'ease-icon-chevron',\n 'ease-icon-circle-arrow-left',\n 'ease-icon-circle-arrow-right',\n 'ease-icon-clear',\n 'ease-icon-code',\n 'ease-icon-dots',\n 'ease-icon-grid',\n 'ease-icon-loading',\n 'ease-icon-mention',\n 'ease-icon-minus',\n 'ease-icon-picker',\n 'ease-icon-plus',\n 'ease-icon-settings',\n 'ease-icon-snap'\n] as const;\n\n/**\n * Advanced component tags (curve, code editor, etc.)\n */\nexport const WEB_KIT_COMPONENT_TAGS = ['ease-curve', 'ease-code'] as const;\n\n/**\n * All public web-kit tags.\n */\nexport const WEB_KIT_ALL_TAGS = [...WEB_KIT_ELEMENT_TAGS, ...WEB_KIT_COMPONENT_TAGS] as const;\n\n/**\n * Union type of all element tag names.\n */\nexport type WebKitElementTag = (typeof WEB_KIT_ELEMENT_TAGS)[number];\n\n/**\n * Union type of all component tag names.\n */\nexport type WebKitComponentTag = (typeof WEB_KIT_COMPONENT_TAGS)[number];\n\n/**\n * Union type of all public tag names.\n */\nexport type WebKitTag = (typeof WEB_KIT_ALL_TAGS)[number];\n\n/**\n * Internal/sub-component tags that are auto-registered with their parents.\n */\nexport const WEB_KIT_INTERNAL_TAGS = [\n 'ease-curve-canvas',\n 'ease-curve-canvas-controls',\n 'ease-curve-controls',\n 'ease-curve-output',\n 'ease-curve-toolbar',\n 'radio-option'\n] as const;\n\n/**\n * Map of tag names to their loader functions.\n * These use dynamic imports so we only load what's needed.\n */\nexport const COMPONENT_LOADERS: Record<WebKitTag, () => Promise<unknown>> = {\n // Controls\n 'ease-button': () => import('../elements/button'),\n 'ease-checkbox': () => import('../elements/checkbox'),\n 'ease-color-input': () => import('../elements/color'),\n 'ease-color-picker': () => import('../elements/color/picker'),\n 'ease-dropdown': () => import('../elements/dropdown'),\n 'ease-input': () => import('../elements/input'),\n 'ease-number-input': () => import('../elements/number'),\n 'ease-origin': () => import('../elements/origin'),\n 'ease-radio-group': () => import('../elements/radio'),\n 'ease-radio-input': () => import('../elements/radio/input'),\n 'ease-slider': () => import('../elements/slider'),\n 'ease-toggle': () => import('../elements/toggle'),\n\n // Layout\n 'ease-field': () => import('../elements/field'),\n 'ease-panel': () => import('../elements/panel'),\n 'ease-popover': () => import('../elements/popover'),\n 'ease-state': () => import('../elements/state'),\n 'ease-tooltip': () => import('../elements/tooltip'),\n\n // Display\n 'ease-logo-loader': () => import('../elements/logo'),\n 'ease-monitor': () => import('../elements/monitor'),\n 'ease-monitor-fps': () => import('../elements/monitor/fps'),\n\n // Icons\n 'ease-icon-anchor-add': () => import('../elements/icons/interface/anchor-add'),\n 'ease-icon-anchor-remove': () => import('../elements/icons/interface/anchor-remove'),\n 'ease-icon-arrow-up': () => import('../elements/icons/interface/arrow-up'),\n 'ease-icon-arrows-vertical': () => import('../elements/icons/interface/arrows-vertical'),\n 'ease-icon-bezier': () => import('../elements/icons/interface/bezier'),\n 'ease-icon-bezier-angle': () => import('../elements/icons/interface/bezier-angle'),\n 'ease-icon-bezier-distribute': () => import('../elements/icons/interface/bezier-distribute'),\n 'ease-icon-bezier-length': () => import('../elements/icons/interface/bezier-length'),\n 'ease-icon-bezier-mirror': () => import('../elements/icons/interface/bezier-mirror'),\n 'ease-icon-check': () => import('../elements/icons/interface/check'),\n 'ease-icon-chevron': () => import('../elements/icons/animation/chevron'),\n 'ease-icon-circle-arrow-left': () => import('../elements/icons/interface/circle-arrow-left'),\n 'ease-icon-circle-arrow-right': () => import('../elements/icons/interface/circle-arrow-right'),\n 'ease-icon-clear': () => import('../elements/icons/animation/clear'),\n 'ease-icon-code': () => import('../elements/icons/interface/code'),\n 'ease-icon-dots': () => import('../elements/icons/interface/dots'),\n 'ease-icon-grid': () => import('../elements/icons/animation/grid'),\n 'ease-icon-loading': () => import('../elements/icons/animation/loading'),\n 'ease-icon-mention': () => import('../elements/icons/interface/mention'),\n 'ease-icon-minus': () => import('../elements/icons/interface/minus'),\n 'ease-icon-picker': () => import('../elements/icons/interface/picker'),\n 'ease-icon-plus': () => import('../elements/icons/interface/plus'),\n 'ease-icon-settings': () => import('../elements/icons/interface/settings'),\n 'ease-icon-snap': () => import('../elements/icons/animation/snap'),\n\n // Advanced components\n 'ease-curve': () => import('../components/curve'),\n 'ease-code': () => import('../components/code')\n};\n\n/**\n * Load specific components by tag name.\n */\nexport async function loadComponents(tags: readonly WebKitTag[]): Promise<void> {\n const promises = tags.map((tag) => {\n const loader = COMPONENT_LOADERS[tag];\n if (loader) {\n return loader();\n }\n return Promise.resolve();\n });\n await Promise.all(promises);\n}\n\n/**\n * Load all components (equivalent to importing register.ts).\n */\nexport async function loadAllComponents(): Promise<void> {\n await import('../register');\n}\n\n/**\n * Resolve which tags to load based on include/exclude options.\n */\nexport function resolveTags(options: { include?: readonly string[]; exclude?: readonly string[] }): WebKitTag[] {\n const { include, exclude } = options;\n\n // If include is specified, use those (filtered to valid tags)\n if (include && include.length > 0) {\n return include.filter((tag): tag is WebKitTag => WEB_KIT_ALL_TAGS.includes(tag as WebKitTag));\n }\n\n // Otherwise, start with all tags and remove excluded ones\n let tags: WebKitTag[] = [...WEB_KIT_ALL_TAGS];\n\n if (exclude && exclude.length > 0) {\n const excludeSet = new Set(exclude);\n tags = tags.filter((tag) => !excludeSet.has(tag));\n }\n\n return tags;\n}\n","/**\n * Lazy loading utilities using MutationObserver.\n */\n\nimport { COMPONENT_LOADERS, WEB_KIT_ALL_TAGS, type WebKitTag } from './component-loaders';\nimport { isBrowser } from './style-inject';\n\n/**\n * Lazy load configuration.\n */\nexport interface LazyLoadConfig {\n /** MutationObserver strategy */\n strategy?: 'mutation';\n /** Root element to observe (default: document) */\n root?: Document | Element;\n /** Tags to include in lazy loading */\n include?: readonly string[];\n /** Tags to exclude from lazy loading */\n exclude?: readonly string[];\n /** Tags to preload immediately */\n preload?: readonly string[];\n}\n\n/**\n * Lazy loader instance.\n */\nexport interface LazyLoader {\n /** Stop observing and cleanup */\n dispose: () => void;\n /** Manually load a component */\n load: (tag: WebKitTag) => Promise<void>;\n}\n\n/**\n * Create a lazy loader that auto-registers components when they appear in DOM.\n */\nexport function createLazyLoader(config: LazyLoadConfig = {}): LazyLoader {\n if (!isBrowser()) {\n return {\n dispose: () => {},\n load: async () => {}\n };\n }\n\n const { root = document, include, exclude, preload } = config;\n\n // Determine which tags to watch\n let watchTags = new Set<WebKitTag>([...WEB_KIT_ALL_TAGS]);\n\n if (include && include.length > 0) {\n watchTags = new Set(include.filter((tag): tag is WebKitTag => WEB_KIT_ALL_TAGS.includes(tag as WebKitTag)));\n }\n\n if (exclude && exclude.length > 0) {\n for (const tag of exclude) {\n watchTags.delete(tag as WebKitTag);\n }\n }\n\n // Track loaded components\n const loaded = new Set<string>();\n\n // Load a component\n const load = async (tag: WebKitTag): Promise<void> => {\n if (loaded.has(tag)) {\n return;\n }\n\n const loader = COMPONENT_LOADERS[tag];\n if (loader) {\n loaded.add(tag);\n await loader();\n }\n };\n\n // Check if an element or its descendants need loading\n const checkElement = (element: Element): void => {\n const tagName = element.tagName.toLowerCase();\n\n if (watchTags.has(tagName as WebKitTag) && !loaded.has(tagName)) {\n void load(tagName as WebKitTag);\n }\n\n // Check children\n for (const child of element.querySelectorAll('*')) {\n const childTag = child.tagName.toLowerCase();\n if (watchTags.has(childTag as WebKitTag) && !loaded.has(childTag)) {\n void load(childTag as WebKitTag);\n }\n }\n };\n\n // Create observer\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n checkElement(node);\n }\n }\n }\n });\n\n // Start observing\n const target = root instanceof Document ? root.documentElement : root;\n observer.observe(target, {\n childList: true,\n subtree: true\n });\n\n // Check existing elements\n checkElement(target);\n\n // Preload specified tags\n if (preload && preload.length > 0) {\n for (const tag of preload) {\n if (WEB_KIT_ALL_TAGS.includes(tag as WebKitTag)) {\n void load(tag as WebKitTag);\n }\n }\n }\n\n return {\n dispose: () => {\n observer.disconnect();\n },\n load\n };\n}\n","/**\n * Main initialization API for @easemate/web-kit\n */\n\nimport type { FontConfig } from './internal/fonts';\nimport type { LazyLoadConfig } from './internal/lazy-load';\nimport type { StylePreset } from './internal/style-inject';\n\nimport { applyTheme, followSystemTheme, type SystemThemeMode } from './theme';\nimport { getTheme, isThemeRef, type ThemeInput } from './theme/registry';\n\n// --------------------------\n// Types\n// --------------------------\n\n/**\n * Theme mode configuration for light/dark switching.\n */\nexport interface ThemeModeConfig {\n /** Mode selection: 'light', 'dark', or 'system' for auto-switching */\n mode: 'light' | 'dark' | 'system';\n /** Theme to use in light mode */\n light: ThemeInput;\n /** Theme to use in dark mode */\n dark: ThemeInput;\n /** Persist user preference to localStorage */\n persist?: { key: string };\n}\n\n/**\n * Style injection configuration.\n */\nexport type StylesConfig = false | StylePreset | { reset?: boolean; base?: boolean };\n\n/**\n * Component replacement configuration.\n * Keys are tag names, values are either:\n * - A custom element constructor\n * - A string tag name to alias to\n */\nexport type ReplaceConfig = Record<string, CustomElementConstructor | string>;\n\n/**\n * initWebKit options.\n */\nexport interface InitWebKitOptions {\n /**\n * Tags to include (register only these).\n * If not provided, all components are registered.\n */\n include?: readonly string[];\n\n /**\n * Tags to exclude (register all except these).\n * Ignored if `include` is provided.\n */\n exclude?: readonly string[];\n\n /**\n * Replace components with custom implementations.\n * - Constructor: registers your class under the tag name\n * - String: creates a bridge element that renders the aliased tag\n */\n replace?: ReplaceConfig;\n\n /**\n * Theme to apply.\n * - String: registered theme name (e.g., 'default', 'dark')\n * - WebKitThemeRef: theme reference from registerTheme()\n * - ThemeConfig: inline theme configuration\n * - ThemeModeConfig: light/dark mode configuration\n */\n theme?: ThemeInput | ThemeModeConfig;\n\n /**\n * Element to scope theme variables to (default: document.documentElement).\n */\n target?: HTMLElement;\n\n /**\n * Inject global styles.\n * - false: no styles (default)\n * - 'reset': minimal CSS reset\n * - 'base': body/html dark theme styles\n * - 'main': reset + base\n * - { reset?: boolean; base?: boolean }: fine-grained control\n */\n styles?: StylesConfig;\n\n /**\n * Font loading configuration.\n * - false: no font loading (default)\n * - 'default': load default fonts (Instrument Sans, Geist Mono)\n * - FontConfig: custom font configuration\n */\n fonts?: FontConfig | 'default' | false;\n\n /**\n * Enable lazy loading of components.\n * - false: eager loading (default)\n * - true: lazy load with default config\n * - LazyLoadConfig: custom lazy load config\n */\n lazyLoad?: boolean | LazyLoadConfig;\n\n /**\n * CSP nonce for injected style/link elements.\n */\n cspNonce?: string;\n\n /**\n * Development mode options.\n */\n dev?: {\n /** Warn about unknown tag names in include/exclude */\n warnUnknownTags?: boolean;\n /** Log component loads */\n logLoads?: boolean;\n };\n}\n\n/**\n * Controller returned by initWebKit.\n */\nexport interface WebKitController {\n /** Cleanup all injected styles, fonts, and listeners */\n dispose: () => void;\n\n /** Theme controller (if theme was configured) */\n theme?: {\n /** Set theme by name or config */\n set: (theme: ThemeInput) => void;\n /** Set theme mode (only for ThemeModeConfig) */\n mode?: (mode: 'light' | 'dark' | 'system') => void;\n };\n\n /** Promise that resolves when all components are loaded */\n ready: Promise<void>;\n}\n\n// --------------------------\n// Helpers\n// --------------------------\n\nconst isBrowser = (): boolean => typeof document !== 'undefined' && typeof window !== 'undefined';\n\nconst isThemeModeConfig = (value: unknown): value is ThemeModeConfig => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const obj = value as Record<string, unknown>;\n return obj.mode !== undefined && (obj.light !== undefined || obj.dark !== undefined);\n};\n\n/**\n * Register replacement components before loading built-in ones.\n */\nfunction registerReplacements(replace: ReplaceConfig): void {\n if (!isBrowser()) {\n return;\n }\n\n for (const [tag, replacement] of Object.entries(replace)) {\n // Skip if already defined\n if (customElements.get(tag)) {\n continue;\n }\n\n if (typeof replacement === 'function') {\n // Register custom constructor\n customElements.define(tag, replacement);\n } else if (typeof replacement === 'string') {\n // Create a bridge element that renders the aliased tag\n const aliasTag = replacement;\n class BridgeElement extends HTMLElement {\n private _inner: HTMLElement | null = null;\n\n connectedCallback(): void {\n // Create the aliased element\n this._inner = document.createElement(aliasTag);\n\n // Copy attributes\n for (const attr of this.attributes) {\n this._inner.setAttribute(attr.name, attr.value);\n }\n\n // Move children\n while (this.firstChild) {\n this._inner.appendChild(this.firstChild);\n }\n\n // Use shadow DOM to contain the aliased element\n const shadow = this.attachShadow({ mode: 'open' });\n shadow.appendChild(this._inner);\n }\n\n disconnectedCallback(): void {\n this._inner = null;\n }\n }\n customElements.define(tag, BridgeElement);\n }\n }\n}\n\n/**\n * Resolve and apply styles configuration.\n */\nasync function applyStyles(styles: StylesConfig, nonce?: string): Promise<{ dispose: () => void }> {\n if (styles === false) {\n return { dispose: () => {} };\n }\n\n const { injectPreset, removePreset } = await import('./internal/style-inject');\n\n const injected: StylePreset[] = [];\n\n if (typeof styles === 'string') {\n injectPreset(styles, nonce);\n injected.push(styles);\n } else if (typeof styles === 'object') {\n if (styles.reset) {\n injectPreset('reset', nonce);\n injected.push('reset');\n }\n if (styles.base) {\n injectPreset('base', nonce);\n injected.push('base');\n }\n }\n\n return {\n dispose: () => {\n for (const preset of injected) {\n removePreset(preset);\n }\n }\n };\n}\n\n/**\n * Resolve and apply theme configuration.\n */\nfunction applyThemeConfig(\n theme: ThemeInput | ThemeModeConfig,\n target?: HTMLElement\n): { dispose: () => void; controller?: WebKitController['theme'] } {\n if (isThemeModeConfig(theme)) {\n // Light/dark mode configuration\n const lightConfig = getTheme(theme.light);\n const darkConfig = getTheme(theme.dark);\n\n if (theme.mode === 'system') {\n const cleanup = followSystemTheme({ light: lightConfig, dark: darkConfig }, { element: target });\n\n return {\n dispose: cleanup,\n controller: {\n set: (t: ThemeInput) => {\n const config = getTheme(t);\n applyTheme(config, { element: target });\n },\n mode: (m: 'light' | 'dark' | 'system') => {\n if (m === 'system') {\n // Re-apply system theme\n const systemMode: SystemThemeMode = window.matchMedia('(prefers-color-scheme: light)').matches\n ? 'light'\n : 'dark';\n const config = systemMode === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: systemMode,\n colorScheme: systemMode\n });\n } else {\n const config = m === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: m,\n colorScheme: m\n });\n }\n }\n }\n };\n }\n\n // Fixed mode\n const config = theme.mode === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: theme.mode,\n colorScheme: theme.mode\n });\n\n return {\n dispose: () => {},\n controller: {\n set: (t: ThemeInput) => {\n const resolvedConfig = getTheme(t);\n applyTheme(resolvedConfig, { element: target });\n }\n }\n };\n }\n\n // Simple theme (name, ref, or config)\n const config = getTheme(theme);\n const name = isThemeRef(theme) ? theme.name : typeof theme === 'string' ? theme : undefined;\n\n applyTheme(config, {\n element: target,\n name,\n colorScheme: 'dark'\n });\n\n return {\n dispose: () => {},\n controller: {\n set: (t: ThemeInput) => {\n const resolvedConfig = getTheme(t);\n const themeName = isThemeRef(t) ? t.name : typeof t === 'string' ? t : undefined;\n applyTheme(resolvedConfig, { element: target, name: themeName });\n }\n }\n };\n}\n\n// --------------------------\n// Main API\n// --------------------------\n\n/**\n * Initialize the web-kit.\n *\n * @example\n * ```ts\n * // Basic usage - register all components with default theme\n * initWebKit({ theme: 'default' });\n *\n * // Selective loading\n * initWebKit({\n * include: ['ease-button', 'ease-slider'],\n * theme: 'default'\n * });\n *\n * // With styles\n * initWebKit({\n * theme: 'default',\n * styles: 'main',\n * fonts: 'default'\n * });\n *\n * // Light/dark mode\n * initWebKit({\n * theme: {\n * mode: 'system',\n * light: myLightTheme,\n * dark: 'default'\n * }\n * });\n * ```\n */\nexport function initWebKit(options: InitWebKitOptions = {}): WebKitController {\n // SSR safety - no-op on server\n if (!isBrowser()) {\n return {\n dispose: () => {},\n ready: Promise.resolve()\n };\n }\n\n const {\n include,\n exclude,\n replace,\n theme,\n target,\n styles = false,\n fonts = false,\n lazyLoad = false,\n cspNonce,\n dev\n } = options;\n\n const disposers: Array<() => void> = [];\n\n // Controller object that will be populated\n const controller: WebKitController = {\n dispose: () => {\n for (const dispose of disposers) {\n dispose();\n }\n },\n theme: undefined,\n ready: Promise.resolve()\n };\n\n // Build the ready promise\n const readyPromise = (async () => {\n // 1. Register replacements first (before loading any components)\n if (replace) {\n registerReplacements(replace);\n }\n\n // 2. Apply styles\n const stylesResult = await applyStyles(styles, cspNonce);\n disposers.push(stylesResult.dispose);\n\n // 3. Apply theme\n if (theme) {\n const themeResult = applyThemeConfig(theme, target);\n disposers.push(themeResult.dispose);\n controller.theme = themeResult.controller;\n }\n\n // 4. Load fonts\n if (fonts !== false) {\n const { injectFonts, removeFonts } = await import('./internal/fonts');\n injectFonts(fonts);\n const fontsToRemove = fonts;\n disposers.push(() => removeFonts(fontsToRemove));\n }\n\n // 5. Load components\n if (lazyLoad) {\n // Lazy loading mode\n const { createLazyLoader } = await import('./internal/lazy-load');\n const lazyConfig: LazyLoadConfig = typeof lazyLoad === 'object' ? lazyLoad : {};\n\n // Apply include/exclude to lazy loader\n if (include) {\n lazyConfig.include = include;\n } else if (exclude) {\n lazyConfig.exclude = exclude;\n }\n\n const loader = createLazyLoader(lazyConfig);\n disposers.push(loader.dispose);\n } else {\n // Eager loading mode\n const { loadAllComponents, loadComponents, resolveTags } = await import('./internal/component-loaders');\n\n if (include || exclude) {\n const tags = resolveTags({ include, exclude });\n\n if (dev?.warnUnknownTags) {\n const { WEB_KIT_ALL_TAGS } = await import('./internal/component-loaders');\n const allTags = new Set(WEB_KIT_ALL_TAGS);\n const unknown = (include ?? exclude ?? []).filter((t) => !allTags.has(t as never));\n if (unknown.length > 0) {\n console.warn('[web-kit] Unknown tags:', unknown);\n }\n }\n\n if (dev?.logLoads) {\n console.log('[web-kit] Loading components:', tags);\n }\n\n await loadComponents(tags);\n } else {\n if (dev?.logLoads) {\n console.log('[web-kit] Loading all components');\n }\n await loadAllComponents();\n }\n }\n })();\n\n controller.ready = readyPromise;\n return controller;\n}\n\nexport type { WebKitComponentTag, WebKitElementTag, WebKitTag } from './internal/component-loaders';\n// Re-export useful types\nexport type { FontConfig, FontSource } from './internal/fonts';\nexport type { LazyLoadConfig, LazyLoader } from './internal/lazy-load';\nexport type { StylePreset } from './internal/style-inject';\n","/**\n * React event handling utilities for @easemate/web-kit\n */\n\nimport type { TabChangeEventDetail } from '../elements/panel';\nimport type { ControlEventDetail } from '../elements/shared';\nimport type { StateChangeEventDetail } from '../elements/state';\n\n/**\n * Control change event type for React\n */\nexport interface ControlChangeEvent<T = unknown> extends CustomEvent<ControlEventDetail<T>> {\n detail: ControlEventDetail<T>;\n}\n\n/**\n * State change event type for React\n */\nexport interface StateChangeEvent extends CustomEvent<StateChangeEventDetail> {\n detail: StateChangeEventDetail;\n}\n\n/**\n * Tab change event type for React\n */\nexport interface TabChangeEvent extends CustomEvent<TabChangeEventDetail> {\n detail: TabChangeEventDetail;\n}\n\n/**\n * Creates a type-safe event handler for control-change events.\n *\n * @example\n * ```tsx\n * <ease-slider\n * name=\"opacity\"\n * value={0.5}\n * onControlChange={createEventHandler<number>((value, name) => {\n * console.log(`${name} changed to ${value}`);\n * })}\n * />\n * ```\n */\nexport function createEventHandler<T = unknown>(\n callback: (value: T, name: string | undefined, event: Event) => void\n): (e: CustomEvent<ControlEventDetail<T>>) => void {\n return (e: CustomEvent<ControlEventDetail<T>>) => {\n callback(e.detail.value, e.detail.name, e.detail.event);\n };\n}\n","/**\n * JSX type declarations for @easemate/web-kit\n *\n * Import this module to get JSX IntrinsicElements type support:\n * ```ts\n * import '@easemate/web-kit/react/jsx';\n * ```\n */\n\n// Import React types to enable proper module augmentation\n// This ensures 'react' and 'react/jsx-runtime' are resolvable for augmentation\nimport type {} from 'react';\nimport type {} from 'react/jsx-dev-runtime';\nimport type {} from 'react/jsx-runtime';\nimport type { StateChangeEventDetail } from '../elements/state/index';\n\n// Re-export for convenience\nexport type { StateChangeEventDetail };\n\n// Event detail types\nexport interface TabChangeEventDetail {\n index: number;\n id: string;\n event: Event;\n}\n\nexport interface ControlEventDetail<T = unknown> {\n name?: string;\n value: T;\n event: Event;\n}\n\n// Ref types\ntype RefCallback<T> = (instance: T | null) => void;\ntype RefObject<T> = { current: T | null };\ntype Ref<T> = RefCallback<T> | RefObject<T> | null;\n\n// Event handler type\ntype CustomEventHandler<T = unknown> = (event: CustomEvent<T>) => void;\n\n// Base HTML attributes shared by all elements\ninterface BaseHTMLAttributes {\n id?: string;\n class?: string;\n className?: string;\n style?: string | Partial<CSSStyleDeclaration>;\n slot?: string;\n hidden?: boolean;\n tabIndex?: number;\n title?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-hidden'?: boolean | 'true' | 'false';\n 'aria-disabled'?: boolean | 'true' | 'false';\n 'data-testid'?: string;\n onClick?: (event: MouseEvent) => void;\n onFocus?: (event: FocusEvent) => void;\n onBlur?: (event: FocusEvent) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onKeyUp?: (event: KeyboardEvent) => void;\n children?: unknown;\n}\n\n// Element ref interfaces\nexport interface StateElement extends HTMLElement {\n getState(): Record<string, unknown>;\n get(name: string): unknown;\n set(name: string, value: unknown): void;\n reset(): void;\n}\n\nexport interface PanelElement extends HTMLElement {\n collapsed?: boolean;\n setActiveTab(indexOrId: number | string): void;\n getActiveTab(): { index: number; id: string } | null;\n}\n\nexport interface SliderElement extends HTMLElement {\n value?: number | null;\n min?: number | null;\n max?: number | null;\n step?: number | null;\n disabled?: boolean;\n}\n\nexport interface ToggleElement extends HTMLElement {\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport interface CheckboxElement extends HTMLElement {\n checked?: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n}\n\nexport interface InputElement extends HTMLElement {\n value?: string | null;\n placeholder?: string;\n disabled?: boolean;\n type?: string;\n focus(): void;\n blur(): void;\n}\n\nexport interface NumberInputElement extends HTMLElement {\n value?: number | null;\n min?: number | null;\n max?: number | null;\n step?: number | null;\n disabled?: boolean;\n}\n\nexport interface ColorInputElement extends HTMLElement {\n value?: string;\n disabled?: boolean;\n}\n\nexport interface DropdownElement extends HTMLElement {\n value?: string;\n disabled?: boolean;\n open?: boolean;\n}\n\nexport interface ButtonElement extends HTMLElement {\n disabled?: boolean;\n type?: string;\n variant?: string;\n}\n\nexport interface FieldElement extends HTMLElement {\n label?: string;\n}\n\nexport interface TooltipElement extends HTMLElement {\n content?: string;\n placement?: string;\n}\n\nexport interface PopoverElement extends HTMLElement {\n open?: boolean;\n placement?: string;\n}\n\nexport interface OriginElement extends HTMLElement {\n value?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupElement extends HTMLElement {\n value?: string;\n}\n\nexport interface CurveElement extends HTMLElement {\n name?: string;\n easingType?: 'cubic-bezier' | 'linear';\n showGrid?: boolean;\n snapToGrid?: boolean;\n}\n\n// Props interfaces\nexport interface StateProps extends BaseHTMLAttributes {\n ref?: Ref<StateElement>;\n onStateChange?: CustomEventHandler<StateChangeEventDetail>;\n}\n\nexport interface PanelProps extends BaseHTMLAttributes {\n ref?: Ref<PanelElement>;\n collapsed?: boolean;\n onTabChange?: CustomEventHandler<TabChangeEventDetail>;\n}\n\nexport interface SliderProps extends BaseHTMLAttributes {\n ref?: Ref<SliderElement>;\n value?: number | string;\n min?: number | string;\n max?: number | string;\n step?: number | string;\n disabled?: boolean;\n onInput?: CustomEventHandler<ControlEventDetail<number>>;\n onChange?: CustomEventHandler<ControlEventDetail<number>>;\n}\n\nexport interface ToggleProps extends BaseHTMLAttributes {\n ref?: Ref<ToggleElement>;\n checked?: boolean;\n disabled?: boolean;\n onToggle?: CustomEventHandler<ControlEventDetail<boolean>>;\n onChange?: CustomEventHandler<ControlEventDetail<boolean>>;\n}\n\nexport interface CheckboxProps extends BaseHTMLAttributes {\n ref?: Ref<CheckboxElement>;\n checked?: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n onChange?: CustomEventHandler<ControlEventDetail<boolean>>;\n}\n\nexport interface InputProps extends BaseHTMLAttributes {\n ref?: Ref<InputElement>;\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n type?: string;\n onInput?: CustomEventHandler<ControlEventDetail<string>>;\n onChange?: CustomEventHandler<ControlEventDetail<string>>;\n}\n\nexport interface NumberInputProps extends BaseHTMLAttributes {\n ref?: Ref<NumberInputElement>;\n value?: number | string;\n min?: number | string;\n max?: number | string;\n step?: number | string;\n disabled?: boolean;\n onInput?: CustomEventHandler<ControlEventDetail<number>>;\n onChange?: CustomEventHandler<ControlEventDetail<number>>;\n}\n\nexport interface ColorInputProps extends BaseHTMLAttributes {\n ref?: Ref<ColorInputElement>;\n value?: string;\n disabled?: boolean;\n onInput?: CustomEventHandler<ControlEventDetail<string>>;\n onChange?: CustomEventHandler<ControlEventDetail<string>>;\n}\n\nexport interface DropdownProps extends BaseHTMLAttributes {\n ref?: Ref<DropdownElement>;\n value?: string;\n disabled?: boolean;\n open?: boolean;\n placement?: string;\n onChange?: CustomEventHandler<ControlEventDetail<string>>;\n}\n\nexport interface ButtonProps extends BaseHTMLAttributes {\n ref?: Ref<ButtonElement>;\n disabled?: boolean;\n type?: 'button' | 'submit' | 'reset';\n variant?: 'primary' | 'secondary' | 'ghost';\n pill?: boolean;\n block?: string;\n fullWidth?: boolean;\n}\n\nexport interface FieldProps extends BaseHTMLAttributes {\n ref?: Ref<FieldElement>;\n label?: string;\n inline?: boolean;\n}\n\nexport interface TooltipProps extends BaseHTMLAttributes {\n ref?: Ref<TooltipElement>;\n content?: string;\n placement?: string;\n delay?: number | string;\n}\n\nexport interface PopoverProps extends BaseHTMLAttributes {\n ref?: Ref<PopoverElement>;\n open?: boolean;\n placement?: string;\n}\n\nexport interface OriginProps extends BaseHTMLAttributes {\n ref?: Ref<OriginElement>;\n value?: string;\n disabled?: boolean;\n onChange?: CustomEventHandler<ControlEventDetail<string>>;\n}\n\nexport interface RadioGroupProps extends BaseHTMLAttributes {\n ref?: Ref<RadioGroupElement>;\n value?: string;\n onChange?: CustomEventHandler<ControlEventDetail<string>>;\n}\n\nexport interface RadioInputProps extends BaseHTMLAttributes {\n value?: string;\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport interface CurveProps extends BaseHTMLAttributes {\n ref?: Ref<CurveElement>;\n name?: string;\n easingType?: 'cubic-bezier' | 'linear';\n 'easing-type'?: 'cubic-bezier' | 'linear';\n showGrid?: boolean;\n 'show-grid'?: boolean;\n snapToGrid?: boolean;\n 'snap-to-grid'?: boolean;\n gridSize?: number | string;\n 'grid-size'?: number | string;\n}\n\nexport interface CodeProps extends BaseHTMLAttributes {\n language?: string;\n}\n\nexport interface MonitorProps extends BaseHTMLAttributes {}\n\nexport interface MonitorFpsProps extends BaseHTMLAttributes {\n interval?: number | string;\n}\n\nexport interface LogoLoaderProps extends BaseHTMLAttributes {\n intro?: 'none' | 'simple' | 'full';\n playing?: boolean;\n}\n\n// JSX IntrinsicElements\nexport interface EaseElements {\n 'ease-state': StateProps;\n 'ease-panel': PanelProps;\n 'ease-slider': SliderProps;\n 'ease-toggle': ToggleProps;\n 'ease-checkbox': CheckboxProps;\n 'ease-input': InputProps;\n 'ease-number-input': NumberInputProps;\n 'ease-color-input': ColorInputProps;\n 'ease-color-picker': ColorInputProps;\n 'ease-dropdown': DropdownProps;\n 'ease-button': ButtonProps;\n 'ease-field': FieldProps;\n 'ease-tooltip': TooltipProps;\n 'ease-popover': PopoverProps;\n 'ease-origin': OriginProps;\n 'ease-radio-group': RadioGroupProps;\n 'ease-radio-input': RadioInputProps;\n 'ease-curve': CurveProps;\n 'ease-code': CodeProps;\n 'ease-monitor': MonitorProps;\n 'ease-monitor-fps': MonitorFpsProps;\n 'ease-logo-loader': LogoLoaderProps;\n}\n\n// Augment global JSX namespace\n// This provides type support in both React and non-React environments\ndeclare global {\n namespace JSX {\n interface IntrinsicElements extends EaseElements {}\n }\n}\n\n// Augment React's JSX namespace for React 17/18/19 (classic JSX transform)\ndeclare module 'react' {\n namespace JSX {\n interface IntrinsicElements extends EaseElements {}\n }\n}\n\n// Augment React's jsx-runtime for React 17+ (new JSX transform)\n// This is required for Next.js App Router and other projects using the new transform\ndeclare module 'react/jsx-runtime' {\n export namespace JSX {\n interface IntrinsicElements extends EaseElements {}\n }\n}\n\n// Augment React's jsx-dev-runtime for development mode\ndeclare module 'react/jsx-dev-runtime' {\n export namespace JSX {\n interface IntrinsicElements extends EaseElements {}\n }\n}\n\n// Runtime marker to ensure this module is processed by TypeScript\n// This is needed because purely type-only modules may not trigger augmentation\nexport const __JSX_TYPES_LOADED__ = true;\n","/**\n * React context provider for @easemate/web-kit\n *\n * This module provides a simple way to initialize the web kit in a React context.\n * For simpler use cases, consider using `initWebKit()` directly in a useEffect.\n */\n\nimport type { InitWebKitOptions, WebKitController } from '../init';\n\n/**\n * WebKit context value\n */\nexport interface WebKitContextValue {\n /** Whether the web kit is ready */\n ready: boolean;\n /** Theme controller */\n theme?: WebKitController['theme'];\n}\n\n/**\n * Props for createWebKitProvider\n */\nexport interface WebKitProviderProps {\n /** Initialization options */\n options?: InitWebKitOptions;\n /**\n * Render children even before ready\n * @default true\n */\n immediate?: boolean;\n}\n\n/**\n * React hooks interface for provider creation\n */\nexport interface ReactHooksForProvider {\n useState: <S>(initial: S) => [S, (value: S) => void];\n useEffect: (effect: () => (() => void) | undefined, deps?: unknown[]) => void;\n useMemo: <T>(factory: () => T, deps: unknown[]) => T;\n createContext: <T>(defaultValue: T) => {\n Provider: unknown;\n Consumer: unknown;\n };\n useContext: <T>(context: { Provider: unknown; Consumer: unknown }) => T;\n createElement: (type: unknown, props: Record<string, unknown> | null, ...children: unknown[]) => unknown;\n}\n\n/**\n * Creates a WebKit provider and context hook.\n *\n * This function creates a React context and provider component\n * that initializes the web kit and provides access to its state.\n *\n * @example\n * ```tsx\n * // providers.tsx\n * 'use client';\n *\n * import * as React from 'react';\n * import { createWebKitProvider } from '@easemate/web-kit/react';\n *\n * const { WebKitProvider, useWebKitContext } = createWebKitProvider(React);\n *\n * export { WebKitProvider, useWebKitContext };\n *\n * // layout.tsx\n * import { WebKitProvider } from './providers';\n *\n * export default function Layout({ children }) {\n * return (\n * <WebKitProvider options={{ theme: 'default', styles: 'main' }}>\n * {children}\n * </WebKitProvider>\n * );\n * }\n * ```\n */\nexport function createWebKitProvider(React: ReactHooksForProvider): {\n WebKitProvider: (props: WebKitProviderProps & { children: unknown }) => unknown;\n useWebKitContext: () => WebKitContextValue;\n} {\n const defaultValue: WebKitContextValue = {\n ready: false,\n theme: undefined\n };\n\n const WebKitContext = React.createContext<WebKitContextValue>(defaultValue);\n\n function WebKitProvider(props: WebKitProviderProps & { children: unknown }): unknown {\n const { options = {}, immediate = true, children } = props;\n const isSSR = typeof window === 'undefined';\n const { useState, useEffect, useMemo, createElement } = React;\n\n const [ready, setReady] = useState(false);\n const [controller, setController] = useState<WebKitController | null>(null);\n\n useEffect(() => {\n // Skip initialization on SSR\n if (isSSR) {\n return;\n }\n\n let isMounted = true;\n\n const initialize = async () => {\n const { initWebKit } = await import('../init');\n const ctrl = initWebKit(options);\n\n if (isMounted) {\n setController(ctrl);\n }\n\n await ctrl.ready;\n\n if (isMounted) {\n setReady(true);\n }\n };\n\n initialize();\n\n return () => {\n isMounted = false;\n controller?.dispose();\n return undefined;\n };\n }, []);\n\n const value = useMemo<WebKitContextValue>(() => {\n return {\n ready,\n theme: controller?.theme\n };\n }, [ready, controller]);\n\n // On SSR, just render children directly\n if (isSSR) {\n return children;\n }\n\n // Don't render children until ready if immediate is false\n if (!immediate && !ready) {\n return null;\n }\n\n return createElement(WebKitContext.Provider, { value }, children);\n }\n\n function useWebKitContext(): WebKitContextValue {\n const context = React.useContext(WebKitContext) as WebKitContextValue;\n // On SSR, context will be the default value anyway\n return context;\n }\n\n return {\n WebKitProvider,\n useWebKitContext\n };\n}\n","/**\n * React hook for working with ease-state component\n */\n\nimport type { EasePanelRef, EaseStateRef, StateChangeEventDetail, TabChangeEventDetail } from './types';\n\n/**\n * Options for useEaseState hook\n */\nexport interface UseEaseStateOptions {\n /**\n * Initial state values to set when the component mounts\n */\n initialState?: Record<string, unknown>;\n\n /**\n * Callback fired when any control value changes\n */\n onChange?: (detail: StateChangeEventDetail) => void;\n\n /**\n * Callback fired when the active tab changes (requires ease-panel)\n */\n onTabChange?: (detail: TabChangeEventDetail) => void;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Required for React hook compatibility\ntype AnyFunction = (...args: any[]) => any;\n\n/**\n * React hooks interface - compatible with React's hook signatures\n */\nexport interface ReactHooksLike {\n useState: <S>(initial: S) => [S, (value: S | ((prev: S) => S)) => void];\n useCallback: <F extends AnyFunction>(callback: F, deps: unknown[]) => F;\n useRef: <R>(initial: R) => { current: R };\n}\n\n/**\n * Return type for useEaseState hook\n */\nexport interface UseEaseStateReturn<T extends Record<string, unknown> = Record<string, unknown>> {\n /** Ref callback to attach to the ease-state element */\n stateRef: (element: EaseStateRef | null) => void;\n /** Ref callback to attach to the ease-panel element (optional) */\n panelRef: (element: EasePanelRef | null) => void;\n /** Current state values (reactive) */\n state: T;\n /** Get a specific control value */\n get: <K extends keyof T>(name: K) => T[K] | undefined;\n /** Set a specific control value */\n set: <K extends keyof T>(name: K, value: T[K]) => void;\n /** Reset all controls to initial values */\n reset: () => void;\n /** Switch to a specific tab (requires ease-panel) */\n setTab: (index: number) => void;\n /** Current active tab index (requires ease-panel) */\n activeTab: number;\n}\n\n/**\n * React hook for working with ease-state components.\n *\n * Provides a reactive state object and methods for interacting\n * with the ease-state web component.\n *\n * @example\n * ```tsx\n * import { useState, useCallback, useRef } from 'react';\n * import { useEaseState } from '@easemate/web-kit/react';\n *\n * function AnimationControls() {\n * const {\n * stateRef,\n * panelRef,\n * state,\n * set,\n * reset\n * } = useEaseState<{ duration: number; easing: string; loop: boolean }>(\n * {\n * onChange: ({ name, value }) => {\n * console.log(`${name} changed to ${value}`);\n * }\n * },\n * { useState, useCallback, useRef }\n * );\n *\n * return (\n * <ease-panel ref={panelRef}>\n * <span slot=\"headline\">Animation</span>\n * <ease-state ref={stateRef}>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\" />\n * </ease-field>\n * </ease-state>\n * </ease-panel>\n * );\n * }\n * ```\n */\nexport function useEaseState<T extends Record<string, unknown> = Record<string, unknown>>(\n options: UseEaseStateOptions,\n hooks: ReactHooksLike\n): UseEaseStateReturn<T> {\n const { useState, useCallback, useRef } = hooks;\n const { initialState, onChange, onTabChange } = options;\n\n const stateElementRef = useRef<EaseStateRef | null>(null);\n const panelElementRef = useRef<EasePanelRef | null>(null);\n const [state, setState] = useState<T>((initialState ?? {}) as T);\n const [activeTab, setActiveTab] = useState(0);\n\n // Handle state changes\n const handleStateChange = useCallback(\n (e: Event) => {\n const customEvent = e as CustomEvent<StateChangeEventDetail>;\n const { name, value } = customEvent.detail;\n setState((prev: T) => {\n return { ...prev, [name]: value };\n });\n onChange?.(customEvent.detail);\n },\n [onChange]\n );\n\n // Handle tab changes\n const handleTabChange = useCallback(\n (e: Event) => {\n const customEvent = e as CustomEvent<TabChangeEventDetail>;\n setActiveTab(customEvent.detail.index);\n onTabChange?.(customEvent.detail);\n },\n [onTabChange]\n );\n\n // Ref callback for the ease-state element\n const stateRef = useCallback(\n (element: EaseStateRef | null) => {\n // Cleanup previous element\n if (stateElementRef.current) {\n stateElementRef.current.removeEventListener('state-change', handleStateChange);\n }\n\n stateElementRef.current = element;\n\n if (element) {\n // Add event listeners\n element.addEventListener('state-change', handleStateChange);\n\n // Set initial state values\n if (initialState) {\n for (const [name, value] of Object.entries(initialState)) {\n element.set(name, value);\n }\n }\n\n // Sync current state from element\n const currentState = element.state;\n if (Object.keys(currentState).length > 0) {\n setState(currentState as T);\n }\n }\n },\n [handleStateChange, initialState]\n );\n\n // Ref callback for the ease-panel element\n const panelRef = useCallback(\n (element: EasePanelRef | null) => {\n // Cleanup previous element\n if (panelElementRef.current) {\n panelElementRef.current.removeEventListener('tab-change', handleTabChange);\n }\n\n panelElementRef.current = element;\n\n if (element) {\n // Add event listeners\n element.addEventListener('tab-change', handleTabChange);\n setActiveTab(element.activeTab);\n }\n },\n [handleTabChange]\n );\n\n // Get a specific value\n const get = useCallback(<K extends keyof T>(name: K): T[K] | undefined => state[name], [state]);\n\n // Set a specific value\n const set = useCallback(<K extends keyof T>(name: K, value: T[K]): void => {\n stateElementRef.current?.set(name as string, value);\n }, []);\n\n // Reset all values\n const reset = useCallback((): void => {\n stateElementRef.current?.reset();\n }, []);\n\n // Set active tab\n const setTab = useCallback((index: number): void => {\n panelElementRef.current?.setTab(index);\n }, []);\n\n return {\n stateRef,\n panelRef,\n state,\n get,\n set,\n reset,\n setTab,\n activeTab\n };\n}\n","/**\n * React hook for initializing @easemate/web-kit\n *\n * This module provides hooks for React integration.\n * React is a peer dependency - users must install it separately.\n *\n * @module\n */\n\nimport type { InitWebKitOptions, WebKitController } from '../init';\n\n/**\n * Options for useWebKit hook\n */\nexport interface UseWebKitOptions extends InitWebKitOptions {\n /**\n * Skip initialization (useful for conditional rendering)\n * @default false\n */\n skip?: boolean;\n}\n\n/**\n * Return type for useWebKit hook\n */\nexport interface UseWebKitReturn {\n /** Whether the web kit is ready */\n ready: boolean;\n /** Theme controller (if theme was configured) */\n theme?: WebKitController['theme'];\n /** Dispose function for cleanup */\n dispose: () => void;\n}\n\n// Singleton to track if web-kit has been initialized globally\nlet globalController: WebKitController | null = null;\nlet initCount = 0;\n\n/**\n * React hook for initializing @easemate/web-kit.\n *\n * This hook handles initialization and cleanup of the web kit,\n * ensuring components are registered before rendering.\n *\n * **Important for Next.js App Router:**\n * - Use this hook in a client component (`'use client'`)\n * - Place it at the top of your component tree (e.g., in a layout)\n * - The hook is SSR-safe and will only initialize on the client\n *\n * **Note:** This hook requires React to be installed. Import React hooks\n * directly in your component and pass them to this function, or use the\n * imperative `initWebKit()` function directly.\n *\n * @example\n * ```tsx\n * // app/providers.tsx\n * 'use client';\n *\n * import { useEffect, useState, useRef } from 'react';\n * import { initWebKit } from '@easemate/web-kit';\n *\n * export function Providers({ children }: { children: React.ReactNode }) {\n * const [ready, setReady] = useState(false);\n * const controllerRef = useRef<WebKitController | null>(null);\n *\n * useEffect(() => {\n * const controller = initWebKit({\n * theme: 'default',\n * styles: 'main',\n * fonts: 'default'\n * });\n * controllerRef.current = controller;\n * controller.ready.then(() => setReady(true));\n *\n * return () => controller.dispose();\n * }, []);\n *\n * return <>{children}</>;\n * }\n * ```\n */\nexport function useWebKit(\n options: UseWebKitOptions,\n hooks: {\n useState: <T>(initial: T) => [T, (value: T) => void];\n useEffect: (effect: () => (() => void) | undefined, deps?: unknown[]) => void;\n useRef: <T>(initial: T) => { current: T };\n }\n): UseWebKitReturn {\n const isSSR = typeof window === 'undefined';\n const { useState, useEffect, useRef } = hooks;\n const { skip = false, ...initOptions } = options;\n\n const [ready, setReady] = useState(false);\n const controllerRef = useRef<WebKitController | null>(null);\n const optionsRef = useRef(initOptions);\n\n useEffect(() => {\n // Skip on SSR or if explicitly skipped\n if (isSSR || skip) {\n return;\n }\n\n let isMounted = true;\n\n const initialize = async () => {\n // If already initialized globally, reuse the controller\n if (globalController) {\n initCount++;\n controllerRef.current = globalController;\n await globalController.ready;\n if (isMounted) {\n setReady(true);\n }\n return;\n }\n\n // Dynamic import to ensure this only runs on client\n const { initWebKit } = await import('../init');\n\n const controller = initWebKit(optionsRef.current);\n globalController = controller;\n initCount++;\n controllerRef.current = controller;\n\n await controller.ready;\n if (isMounted) {\n setReady(true);\n }\n };\n\n initialize();\n\n return () => {\n isMounted = false;\n initCount--;\n\n // Only dispose if this was the last user of the global controller\n if (initCount <= 0 && globalController) {\n globalController.dispose();\n globalController = null;\n initCount = 0;\n }\n };\n }, [skip]);\n\n return {\n ready,\n theme: controllerRef.current?.theme,\n dispose: () => {\n controllerRef.current?.dispose();\n if (controllerRef.current === globalController) {\n globalController = null;\n initCount = 0;\n }\n controllerRef.current = null;\n }\n };\n}\n"],"mappings":"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uB;AAY7B,IAAMC,iBAAiC;MAC5C;QACEC,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OA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","names":["defaultColors","defaultRadii","defaultSpacing","defaultTypography","gray","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","sm","md","lg","xl","full","xs","fontFamily","fontMono","fontSize","lineHeight","defaultEaseVars","defaultThemeConfig","DEFAULT_THEME_NAME","DARK_THEME_ALIAS","colors","defaultColors","radii","defaultRadii","spacing","defaultSpacing","typography","defaultTypography","vars","getTheme","theme","isThemeConfig","name","isThemeRef","resolveThemeConfig","registry","mergeConfigs","initBuiltInThemes","Map","base","overrides","colors","gray","blue","green","red","orange","yellow","whiteAlpha","blackAlpha","radii","spacing","typography","vars","visited","Set","has","Error","Array","from","join","entry","get","resolved","add","config","baseConfig","DEFAULT_THEME_NAME","set","defaultThemeConfig","DARK_THEME_ALIAS","value","__brand","obj","undefined","CSS_PREFIX","RADII_PREFIX","SPACING_PREFIX","TYPOGRAPHY_PREFIX","toVarName","generateColorScaleVars","withAlpha","generateColorVars","resolveThemeTarget","generateRadiiVars","generateSpacingVars","generateTypographyVars","normalizeCustomVarName","generateCustomVars","generateThemeVars","defineTheme","EASE_THEME_ATTRIBUTE","mergeTheme","applyTheme","followSystemTheme","prefix","parts","join","name","scale","vars","level","value","Object","entries","undefined","color","alpha","trimmed","trim","match","exec","fn","innerRaw","inner","includes","pct","Math","round","colors","gray","assign","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","element","document","documentElement","radii","spacing","typography","fontFamily","fontMono","fontSize","lineHeight","startsWith","out","key","String","config","target","style","setProperty","overrides","defaultColors","defaultRadii","defaultSpacing","defaultTypography","theme","options","attribute","mergeWithDefaults","setAttribute","colorScheme","setColorScheme","themes","window","matchMedia","media","apply","mode","matches","light","dark","lightName","darkName","addEventListener","removeEventListener","injectStyle","id","css","nonce","isBrowser","fullId","STYLE_ID_PREFIX","style","document","getElementById","textContent","createElement","head","appendChild","removeStyle","remove","hasStyle","getPresetCSS","preset","RESET_CSS","BASE_CSS","MAIN_CSS","injectPreset","removePreset","window","trim","buildGoogleFontUrl","family","css2","encodedFamily","encodeURIComponent","replace","params","injectPreconnect","isBrowser","document","getElementById","PRECONNECT_ID","head","preconnect1","createElement","id","rel","href","appendChild","preconnect2","crossOrigin","injectFontLink","url","fullId","FONT_LINK_ID_PREFIX","link","removeFontLink","remove","injectFonts","config","preconnect","fonts","DEFAULT_FONTS","hasGoogleFonts","Object","values","some","f","source","name","entries","toLowerCase","removeFonts","keys","html","render","styleCache","normalizeTemplate","fetchStyles","Component","Map","template","urls","Promise","all","map","url","cached","get","request","fetch","then","response","ok","text","catch","set","options","Base","_context","tag","styles","styleUrls","observedAttributes","shadowMode","autoSlot","Error","templateFn","Decorated","parent","Array","isArray","own","from","Set","args","attachShadow","mode","renderRoot","shadow","connectedCallback","prototype","call","finally","requestRender","disconnectedCallback","attributeChangedCallback","name","oldValue","newValue","onAttributeChange","requestAnimationFrame","length","fetched","inlineStyles","filter","Boolean","join","root","templateResult","styleTemplate","slotTemplate","completeTemplate","commit","afterRender","wrapRender","fragment","document","createDocumentFragment","tempDiv","createElement","append","childNodes","customElements","define","Prop","options","attribute","reflect","type","parse","format","defaultValue","compare","defaultCompare","onChange","onAttributeChange","resolvedType","resolveType","parseValue","value","typeParsers","call","formatValue","typeFormatters","accessor","context","kind","Error","attributeName","toKebabCase","name","addInitializer","observeAttribute","rawValue","isInternalMutation","parsed","previous","get","set","scheduleRender","formatted","updateAttribute","init","initialValue","hasAttribute","getAttribute","undefined","renderQueue","cleanupRegistry","observerRegistry","internalMutations","registerCleanup","markInternalMutation","WeakMap","instance","requestRender","render","requestAnimationFrame","delete","String","replace","toLowerCase","cleanup","callbacks","Set","original","disconnectedCallback","args","registered","forEach","callback","error","console","apply","add","host","attributes","has","size","handler","entry","Map","observer","MutationObserver","records","record","listeners","currentValue","target","listener","observe","disconnect","removeAttribute","setAttribute","Boolean","Number","Object","Array","boolean","number","isNaN","json","JSON","warn","string","stringify","next","html","HTMLElement","disabled","pill","fullWidth","type","block","variant","Button","Component","tag","autoSlot","shadowMode","styles","Prop","Boolean","reflect","String","defaultValue","onAttributeChange","requestRender","render","CONTROL_CHANGE_EVENT","dispatchControlEvent","setBooleanAttribute","coerceNumber","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","element","name","value","setAttribute","removeAttribute","parsed","Number","isNaN","Listen","eventName","selectorOrOptions","Error","listenConfig","buildOptions","normalizeOptions","originalMethod","context","addInitializer","attached","attach","target","resolveTarget","addEventListener","console","warn","String","eventOptions","capture","once","passive","undefined","prevent","handler","event","typedEvent","preventDefault","stopImmediate","stopImmediatePropagation","stop","stopPropagation","matched","selector","path","composedPath","find","node","Element","matches","when","call","targetNode","registerCleanup","removeEventListener","queueMicrotask","addLifecycleHook","lifecycleHooks","cleanupRegistry","connectedCallback","WeakMap","disconnectedCallback","instance","hookName","store","callbacks","get","Set","set","original","args","forEach","callback","apply","add","cleanup","registered","fn","error","delete","host","EventTarget","document","window","renderRoot","shadowRoot","options","Query","selector","userOptions","Error","merged","defaultOptions","createQueryDecorator","resolveFallback","resolveRoot","resolveQuery","all","closest","from","fallback","host","option","document","renderRoot","shadowRoot","options","result","root","elements","Array","querySelectorAll","length","match","querySelector","_target","context","kind","descriptor","get","set","_value","addInitializer","Object","defineProperty","name","configurable","enumerable","html","HTMLElement","checked","name","value","disabled","control","Checkbox","Component","tag","styles","template","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","handleClick","connectedCallback","_prevChecked","afterRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","shadowRoot","querySelector","svg","classList","remove","animClass","duration","add","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","HTMLElement","placement","offset","open","nextAnchorName","Popover","crypto","randomUUID","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","reflect","defaultValue","onChange","handlePlacementChange","_dec2","type","Number","handleOffsetChange","_dec3","Boolean","contentElement","connectedCallback","disconnectedCallback","render","requestRender","dataset","isFinite","style","setProperty","_initProto","html","HTMLElement","state","IconChevron","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","onAttributeChange","next","previous","shadowRoot","querySelector","animate","d","paths","duration","easing","render","_initProto","down","up","DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","registry","toDismissContext","createOutsideClickHandle","registerOutsideClickHandle","updateOutsideClickHandles","disconnectOutsideClickHandles","requestOutsideClickUpdate","WeakMap","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","handle","handles","get","Set","set","add","forEach","OutsideClick","options","originalMethod","context","addInitializer","ensureLifecycle","resolve","host","owner","content","triggers","handle","createOutsideClickHandle","event","call","disabled","registerOutsideClickHandle","isConnected","updateOutsideClickHandles","lifecycleApplied","wrapMethod","WeakSet","name","hook","callHookFirst","original","args","result","apply","has","add","disconnectOutsideClickHandles","html","HTMLElement","open","disabled","pill","headless","searchable","block","maxHeight","name","value","placeholder","placement","trigger","searchInput","panelContent","contentSlot","nextOptionId","nextPanelId","Dropdown","counter","Component","tag","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","handleOpenChange","_dec2","_dec3","_dec4","_dec5","_dec6","String","defaultValue","onAttributeChange","requestRender","_dec7","style","setProperty","_dec8","_dec9","_dec10","attribute","_dec12","Query","_dec13","_dec14","_dec15","OutsideClick","content","host","triggers","handleOutsideDismiss","connectedCallback","disconnectedCallback","afterRender","ariaLabel","getAttribute","HTMLButtonElement","setAttribute","trim","length","removeAttribute","panel","isInteractive","id","tabIndex","setBooleanAttribute","queueMicrotask","render","placeholderActive","query","lowerQuery","toLowerCase","forEach","option","match","label","includes","element","display","toggle","force","originEvent","current","blur","origin","Event","focus","dispatchControlEvent","event","requestOutsideClickUpdate","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","hasAttribute","dataset","active","handlers","click","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","selected","toggleAttribute","selectedLabel","previousLabel","isSelected","fallback","hasValue","o","target","entry","preventScroll","index","normalized","Math","max","min","undefined","step","activeElement","document","currentIndex","findIndex","nextIndex","previousValue","explicitValue","text","textContent","explicitLabel","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","input","html","HTMLElement","value","placeholder","type","name","disabled","headless","control","Input","Component","tag","shadowMode","autoSlot","styles","template","Boolean","_dec1","Prop","reflect","_dec2","_dec3","defaultValue","_dec4","_dec5","_dec6","_dec7","Query","_dec8","Listen","selector","_dec9","_dec10","_dec11","onPrefixSlotChange","onSuffixSlotChange","handleInput","handleChange","updatePrefixAttribute","container","shadowRoot","querySelector","prefixSlot","hasPrefix","assignedNodes","flatten","length","setBooleanAttribute","updateSuffixAttribute","suffixSlot","hasSuffix","afterRender","event","target","dispatchControlEvent","_initProto","hsvToRgb","h","s","v","hue","saturation","clamp01","value","c","x","Math","abs","m","r","g","b","round","rgbToHsv","rn","gn","bn","max","min","delta","rgbToHex","toHex","component","toString","padStart","toUpperCase","hexToRgb","hex","normalized","trim","test","match","exec","parseInt","hexToHsv","rgb","hsvToHex","isValidHex","getLuminance","isLightColor","hsvToHsl","l","sl","hslToHsv","sv","getColorComponents","hsv","format","labels","values","suffix","hsl","updateHsvFromComponents","index","newHsv","parsed","vals","Number","COLOR_FORMATS","nothing","classMap","ifDefined","repeat","styleMap","unsafeHTML","when","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","html","HTMLElement","IconArrowsVertical","Component","tag","styles","template","html","HTMLElement","IconPicker","Component","tag","styles","template","html","HTMLElement","saturationArea","hueArea","hexInput","value","ColorPicker","Component","tag","autoSlot","styles","template","h","s","v","hsv","pureHue","hsvToRgb","currentRgb","saturationBg","r","g","b","huePercent","vInverted","saturationHandleStyles","left","top","hueHandleStyles","isLight","isLightColor","hasEyeDropper","window","previewStyles","backgroundColor","components","getColorComponents","format","styleMap","handleSaturationPointerDown","handleSaturationPointerMove","handleSaturationPointerUp","handleHuePointerDown","handleHuePointerMove","handleHuePointerUp","handleEyeDropperClick","handleFormatCycle","formatAnimating","toUpperCase","values","e","handleComponentChange","target","labels","map","_","i","max","String","Number","handleCancelButtonClick","handleApplyButtonClick","_dec1","Query","_dec2","_dec3","_dec4","Prop","reflect","defaultValue","onChange","isInternalUpdate","updateFromHex","connectedCallback","originalValue","hex","isValidHex","hexToHsv","event","newValue","hsvToHex","document","activeElement","dispatchControlEvent","updateSaturationValue","rect","getBoundingClientRect","x","Math","min","width","clientX","y","height","clientY","requestRender","updateHue","button","undefined","preventDefault","stopPropagation","pointerId","setPointerCapture","hasPointerCapture","releasePointerCapture","handleHexInputChange","input","index","updateHsvFromComponents","handleFormatChange","setTimeout","currentIndex","COLOR_FORMATS","indexOf","nextIndex","length","eyeDropper","EyeDropper","result","open","sRGBHex","html","HTMLElement","dropdown","value","disabled","placement","ColorInput","init_picker","Component","tag","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","onChange","next","isValidHex","normalized","toUpperCase","_dec3","type","Boolean","_dec4","connectedCallback","querySelector","setBooleanAttribute","afterRender","swatchStyle","backgroundColor","styleMap","render","_initProto","event","target","dispatchControlEvent","detail","requestRender","open","html","HTMLElement","IconMinus","Component","tag","styles","template","html","HTMLElement","IconPlus","Component","tag","styles","template","html","HTMLElement","value","min","max","step","name","disabled","control","NumberInput","Component","tag","styles","template","handleInput","handleChange","handleDecrement","bind","Number","handleIncrement","_dec1","Prop","type","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Boolean","_dec7","Query","_dec8","Listen","selector","_dec9","afterRender","undefined","String","setBooleanAttribute","event","target","coerceNumber","dispatchControlEvent","addActiveLayer","button","layer","document","createElement","classList","add","appendChild","setTimeout","remove","currentTarget","current","_initProto","html","HTMLElement","value","disabled","control","name","Origin","Component","tag","styles","template","handleValueChange","_dec1","Prop","reflect","defaultValue","_dec2","type","Boolean","_dec3","Query","_dec4","_dec5","Listen","selector","handleChange","afterRender","setBooleanAttribute","event","target","String","dispatchControlEvent","_initProto","RadioOption","HTMLElement","connectedCallback","hidden","hasAttribute","setAttribute","customElements","get","define","html","HTMLElement","value","groupElement","contentSlot","nextOptionId","nextPanelId","RadioGroup","counter","Component","tag","shadowMode","styles","template","_dec1","Prop","reflect","defaultValue","onChange","next","previous","updateOptionSelectionState","_dec2","Query","_dec3","connectedCallback","disconnectedCallback","afterRender","panel","id","tabIndex","setAttribute","queueMicrotask","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","forEach","element","hasAttribute","getAttribute","label","trim","length","dataset","active","handlers","click","event","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","option","selected","selectedLabel","isSelected","fallback","hasValue","Boolean","toggleAttribute","originEvent","previousValue","explicitValue","text","textContent","explicitLabel","dispatchControlEvent","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","html","HTMLElement","checked","name","value","disabled","control","RadioInput","Component","tag","shadowMode","styles","template","filterId","_dec1","Prop","type","Boolean","reflect","onChange","next","form","closest","root","getRootNode","others","Array","from","querySelectorAll","forEach","other","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","handleClick","connectedCallback","_prevChecked","afterRender","_firstRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","input","shadowRoot","querySelector","svg","classList","remove","animClass","add","duration","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","HTMLElement","value","min","max","step","disabled","control","valueControl","Slider","Component","tag","styles","template","String","Boolean","undefined","_dec1","Prop","type","Number","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Query","_dec7","_dec8","Listen","selector","_dec9","_dec10","when","event","CustomEvent","detail","_dec11","handleRangeInput","handleRangeChange","handleValueInput","handleValueChange","afterRender","setAttribute","setBooleanAttribute","updateProgress","target","numericValue","coerceNumber","dispatchControlEvent","rawValue","percent","style","setProperty","Math","_initProto","html","HTMLElement","checked","disabled","control","Toggle","Component","tag","styles","template","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","Query","_dec4","Listen","selector","handleClick","afterRender","setAttribute","setBooleanAttribute","event","preventDefault","stopPropagation","dispatchControlEvent","value","_initProto","crypto","randomUUID","html","HTMLElement","label","fullWidth","Field","Component","tag","autoSlot","shadowMode","styles","template","_dec1","Prop","reflect","_dec2","type","Boolean","_initProto","html","nothing","HTMLElement","activeTab","contentElement","bodyElement","Panel","Component","tag","shadowMode","styles","_dec1","Prop","type","Number","reflect","attribute","defaultValue","onChange","next","previous","self","undefined","handleActiveTabChange","_dec2","Query","_dec3","_dec4","Listen","selector","_dec5","onFooterSlotChange","onDefaultSlotChange","performTabAnimation","tabs","setTab","index","length","connectedCallback","afterRender","render","hasTabs","map","tab","id","e","label","event","dispatchEvent","CustomEvent","detail","bubbles","composed","currentIndex","newIndex","key","preventDefault","queueMicrotask","tabButtons","shadowRoot","querySelectorAll","newTabButton","focus","fromIndex","toIndex","duration","easing","content","requestRender","fromPanel","querySelector","toPanel","startHeight","getBoundingClientRect","height","style","display","opacity","fadeOut","animate","fill","finished","cancel","setAttribute","previousToState","getAttribute","visibility","offsetHeight","endHeight","fadeIn","removeAttribute","ms","Promise","resolve","setTimeout","child","Array","from","children","slot","startsWith","replace","push","slice","updateFooterAttribute","footer","footerSlot","hasFooter","Boolean","assignedNodes","flatten","setBooleanAttribute","_initProto","html","HTMLElement","value","defaultSlot","readControlValue","getControlName","State","element","checked","attr","getAttribute","textContent","trim","name","Component","tag","shadowMode","styles","_dec1","Prop","reflect","_dec2","Query","_dec3","Listen","target","host","_dec4","_dec5","CONTROL_CHANGE_EVENT","handleInternalInput","handleInternalChange","handleControlChange","state","get","set","control","Event","subscribe","nameOrCallback","callback","cb","Error","has","Set","add","unsubscribe","delete","reset","Object","entries","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","render","event","detail","Element","slot","findControls","el","controls","push","shadowRoot","child","querySelectorAll","childName","clear","elements","assignedElements","flatten","first","values","next","String","prevValue","dispatchControlEvent","_initProto","Map","html","HTMLElement","open","delay","placement","triggerElement","contentElement","Tooltip","Component","tag","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","_handleOpenChange","_dec2","Number","defaultValue","_dec3","_dec4","Query","_dec5","_dec6","OutsideClick","content","host","triggers","disabled","handleOutsideDismiss","disconnectedCallback","removeEventListener","afterRender","isVisible","setAttribute","dataset","hidden","render","requestOutsideClickUpdate","window","clearTimeout","callback","wait","setTimeout","trigger","addEventListener","_initProto","html","HTMLElement","loading","intro","size","ariaLabel","CENTER","DOTS_DATA","INNER_DOT_IDS","OUTER_DOT_IDS","forceReflow","getAngle","sortByAngle","LOOP_DURATION","ROTATION_DURATION","LogoLoader","x","y","id","cx","cy","map","d","filter","includes","el","window","getComputedStyle","opacity","dot","Math","atan2","ids","find","sort","a","b","Component","tag","styles","template","host","state","ariaLabelTrimmed","trim","_dec1","Prop","type","Boolean","attribute","defaultValue","onChange","next","handleLoadingChange","_dec2","_dec3","Number","_dec4","value","requestRender","connectedCallback","requestAnimationFrame","disconnectedCallback","clearTimeout","fn","delay","setTimeout","push","svg","shadowRoot","querySelector","instant","keepOpacity","container","innerHTML","style","transition","classList","remove","removeProperty","transform","onComplete","innerDotIds","Set","innerDots","has","outerDots","orderedInner","forEach","index","fill","orderedOuter","particles","finalAngle","startDistance","random","angleVariation","PI","startAngle","startX","cos","startY","sin","curvature","controlAngle","controlDistance","controlX","controlY","group","floor","groupDelay","withinGroupDelay","duration","impactTime","rotationSpeed","isInner","shockwaveParticles","p","slice","shockwaveSet","particle","steps","step","animateStep","progress","t","mt","easeOut","scale","rotation","bounceDuration","add","earlyRevealTime","max","maxTime","ring","document","createElementNS","setAttribute","String","appendChild","performance","now","orderedInnerDots","seedDelay","targetScale","setProperty","angle","normalizedAngle","animationDelayMs","orderedOuterDots","baseScale","elapsed","timeInCycle","timeLeft","orderedAllDots","i","length","playIntro","variant","originalIntro","_initProto","Watch","options","compare","defaultCompare","onChange","transform","accessor","context","kind","Error","get","call","set","value","previous","scheduleRender","init","initialValue","renderQueue","WeakMap","instance","requestRender","render","requestAnimationFrame","next","html","HTMLElement","paused","canvasEl","clamp","mean","quantile","computePercentile","computeMedian","formatNumber","formatMs","rateFps","MonitorFps","value","min","max","Math","values","length","sum","sorted","q","clamped","index","floor","sort","a","b","decimals","Number","isFinite","toFixed","fps","targetFps","target","ratio","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","defaultValue","_dec2","Query","connectedCallback","document","hidden","disconnectedCallback","removeEventListener","afterRender","render","hz","refreshRate","rating","subtitleParts","frameTimeAvg","frameTimeP95","filter","join","droppedFrames","jankFrames","longFrames","frameTimeMax","addEventListener","passive","now","performance","requestAnimationFrame","cancelAnimationFrame","frameWindow","slice","fpsWindow","frameAvg","frameP95","frameMax","median","ideal","ft","missed","round","dispatchEvent","CustomEvent","detail","bubbles","composed","canvas","rect","getBoundingClientRect","dpr","window","devicePixelRatio","width","height","ctx","getContext","setTransform","clearRect","samples","scaleMax","stroke","save","globalAlpha","strokeStyle","lineWidth","setLineDash","drawGuide","y","beginPath","moveTo","lineTo","restore","toY","i","x","closePath","fillStyle","fill","lineJoin","lineCap","_initProto","delta","push","shift","elapsed","fpsSample","requestRender","html","HTMLElement","metrics","network","METRIC_THRESHOLDS","GLOBAL_BENCHMARKS","rateMetric","formatMetric","formatBytes","estimateCarbonFootprint","Monitor","LCP","good","poor","INP","CLS","FCP","ttfb","loadTime","domInteractive","fps","TBT","metric","value","thresholds","toFixed","Math","round","bytes","decimals","Number","isFinite","k","dm","sizes","i","floor","log","parseFloat","totalBytes","emissions","Component","tag","styles","_dec1","Watch","_dec2","_dec3","Listen","handleFpsUpdate","connectedCallback","initObservers","collectInitialMetrics","startMemoryMonitoring","initNetworkMonitoring","document","readyState","window","addEventListener","handlePageLoad","disconnectedCallback","observers","forEach","observer","disconnect","stopMemoryMonitoring","stopNetworkMonitoring","removeEventListener","event","detail","updateTrend","requestRender","console","warn","PerformanceObserver","list","entry","getEntries","processPerformanceEntry","observe","type","buffered","push","e","error","collectNavigationTiming","resourceEntries","performance","getEntriesByType","processResourceEntries","navigationEntries","length","navTiming","responseStart","fetchStart","loadEventEnd","startTime","navigation","entryType","coreWebVitals","eventEntry","interactionId","duration","maxINP","inpEntries","lsEntry","hadRecentInput","clsEntries","calculateSessionWindowCLS","name","ltEntry","longTaskEntries","calculateLongTasksAndTBT","maxCls","currentSessionCls","sessionStartTime","Infinity","lastTime","sort","a","b","timeDiff","max","entries","summary","resources","size","transferSize","initiator","initiatorType","toLowerCase","endsWith","js","count","css","test","img","other","totalSize","tbt","referenceTime","task","longTasks","totalDuration","memory","updateMemory","mem","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memoryInterval","setInterval","clearInterval","navigator","connection","updateNetworkInfo","key","history","trendHistory","maxTrendLength","shift","getTrendDirection","currentValue","previousAvg","slice","reduce","threshold","abs","delta","getOverallStatus","ratings","includes","every","r","some","render","renderExpanded","renderVitalsAndTiming","renderRealtime","renderNetworkInfo","renderResources","renderMetricBox","label","description","rating","formattedValue","trend","benchmark","vsBenchmark","renderMemory","usedPercent","styleObject","width","min","effectiveType","rtt","toUpperCase","totalCount","renderItem","data","_initProto","setTimeout","html","HTMLElement","IconAnchorAdd","Component","tag","styles","template","html","HTMLElement","IconAnchorRemove","Component","tag","styles","template","html","HTMLElement","ArrowUp","Component","tag","styles","template","html","HTMLElement","IconBezier","Component","tag","styles","template","html","HTMLElement","IconBezierAngle","Component","tag","styles","template","html","HTMLElement","IconBezierDistribute","Component","tag","styles","template","html","HTMLElement","IconBezierLength","Component","tag","styles","template","html","HTMLElement","IconBezierMirror","Component","tag","styles","template","html","HTMLElement","IconCheck","Component","tag","styles","template","html","HTMLElement","IconCircleArrowLeft","Component","tag","styles","template","html","HTMLElement","IconCircleArrowRight","Component","tag","styles","template","html","HTMLElement","IconClear","Component","tag","styles","template","html","HTMLElement","IconCode","Component","tag","styles","template","html","HTMLElement","IconDots","Component","tag","styles","template","html","HTMLElement","state","IconGrid","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","render","_initProto","html","HTMLElement","Loading","Component","tag","styles","template","html","HTMLElement","IconMention","Component","tag","styles","template","html","HTMLElement","Settings","Component","tag","styles","template","html","HTMLElement","state","Snap","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","render","defaultPath","defaultPath2","activePath","activePath2","path1","path2","_initProto","cubicBezierToLinearPoints","points","start","x","y","cpOutX","p1","cpOutY","isLinked","mirrorLength","end","cpInX","p2","cpInY","canvasStyles","controlsStyles","outputStyles","containerStyles","canvasControlsStyles","toolbarStyles","EasingType","MIN_LINEAR_POINTS","MAX_LINEAR_POINTS","clampPoint","MIN_LINEAR_DELTA","linearPointIdCounter","nextLinearPointId","ensureLinearPointId","cloneLinearPoint","cubicBezierPath","linearDisplayPath","perpendicularDistance","simplifyPoints","generateCubicBezierCSS","getLinearApproximation","generateLinearCSS","cubicBezier","normalizeLinearPoints","clamp01","parseCubicBezierValue","ensureStopPositions","parseLinearTimingFunction","vectorLength","normalizeVector","smoothLinearPoints","init_utils","point","bounds","minX","maxX","minY","maxY","x","Math","max","min","y","id","sourceId","points","p1","p2","startX","startY","endX","endY","cp1x","cp1y","cp2x","cp2y","length","toSvg","p","startPoint","start","d","index","cp1","cpOutX","cpOutY","cp2","cpInX","cpInY","end","svgCp1","svgCp2","lineStart","lineEnd","dx","dy","sqrt","numerator","abs","denominator","epsilon","dmax","endPoint","i","recResults1","slice","recResults2","name","variant","timingFunction","toFixed","code","options","simplify","round","samples","numSamplesPerSegment","sortedPoints","sort","a","b","push","step","t","normalizedSamples","lastX","sample","clampedX","clampedY","firstPoint","firstSample","lastPoint","lastSample","finalSamples","map","Number","Array","isArray","parts","join","p0","p3","u","tt","uu","uuu","ttt","normalized","first","last","handleThreshold","undefined","isLinked","mirrorLength","value","isNaN","input","match","trim","body","split","part","parseFloat","filter","isFinite","x1","y1","x2","y2","some","stops","lastIndex","assignBetween","startIndex","endIndex","startStop","endStop","span","segments","offset","ratio","target","lastDefined","segment","valueToken","position","token","percentMatch","percentValue","parsed","rawPoints","stop","tension","prev","next","smoothedPoint","handleLength","tangentX","tangentY","tangentLength","normalizedTx","normalizedTy","distToPrev","distToNext","inHandleLength","outHandleLength","HIT_AREA_RADIUS","LINEAR_HIT_THRESHOLD","LINEAR_PATH_SAMPLES","DRAG_ACTIVATION_DISTANCE_PX","DRAG_ACTIVATION_DISTANCE_PX_SQUARED","DEFAULT_HANDLE_LENGTH","SVG_WIDTH","SVG_HEIGHT","BEZIER_CONTROL_MIN_Y","BEZIER_CONTROL_MAX_Y","EASING_PRESETS","label","options","value","svg","generateGridLines","gridStep","lines","xSteps","Math","ceil","SVG_WIDTH","ySteps","SVG_HEIGHT","i","x","push","y","dispatchControlEvent","init_shared","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","html","svg","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","focusedLinearIndex","simplify","round","svgElement","CurveCanvas","lerp","lerpPoint","findTForX","splitCurveSegment","evaluateCubicPointNormalized","init_utils","init_shared","Component","tag","styles","canvasStyles","template","hoverPreviewPath","getHoverCurvePath","controlElements","getControlElements","hoverInsertElements","getHoverInsertElements","curvePath","getCurvePath","SVG_WIDTH","SVG_HEIGHT","handlePointerDown","handlePointerMove","handlePointerUp","handlePointerLeave","getGridLines","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Boolean","defaultValue","_dec4","_dec5","Number","_dec6","_dec7","_dec8","_dec9","Query","elements","point","anchorSvg","index","direction","dx","cpInX","cpOutX","dy","cpInY","cpOutY","handlePos","x","y","handleSvg","role","dragMode","isHandleActive","handlePath","push","HIT_AREA_RADIUS","Math","EasingType","LINEAR","preview","insertedPoint","anchor","undefined","handlePoint","vecX","vecY","length","sqrt","circleRadius","barHalfHeight","dirX","dirY","perpX","perpY","cx","cy","transitionZone","min","barEndDist","barTopStartX","barTopStartY","barBottomStartX","barBottomStartY","barTopEndX","barTopEndY","barBottomEndX","barBottomEndY","circleTopX","circleTopY","circleBottomX","circleBottomY","ctrl1Dist","ctrl2Dist","ctrl1TopX","ctrl1TopY","ctrl2TopX","ctrl2TopY","ctrl1BottomX","ctrl1BottomY","ctrl2BottomX","ctrl2BottomY","POSITIVE_INFINITY","minDistanceSquared","start","end","cp1","cp2","sample","LINEAR_PATH_SAMPLES","t","samplePoint","distanceSquared","distance","LINEAR_HIT_THRESHOLD","position","mouseSvg","thresholdSquared","pointSvg","handleIn","handleInSvg","hdx","hdy","handleOut","handleOutSvg","prev","next","refDx","refDy","normalizeVector","DEFAULT_HANDLE_LENGTH","normalized","referenceLength","vectorLength","inLength","outLength","mirrorLength","isLinked","targetLength","max","outDirection","inDirection","generateGridLines","CUBIC_BEZIER","event","workingPosition","currentPoint","activePointId","ensureLinearPointId","shiftKey","startPoint","get","deltaX","abs","deltaY","constrainedPoint","updatedPoints","map","i","normalizedPoints","normalizeLinearPoints","newIndex","findIndex","id","requestRender","updatedPoint","mirrorAngle","draggedLength","MIN_LINEAR_DELTA","existingLength","candidate","insertedIndex","insertedPointId","pointId","MAX_LINEAR_POINTS","clamped","clampPoint","minY","maxY","insertIndex","splitResult","newPrev","newPoint","newNext","slice","normalizedIndex","path","linearDisplayPath","_initProto","root","getRootNode","ShadowRoot","host","console","warn","anchorStart","anchorEnd","controlOne","p1","controlTwo","p2","handlePathOne","handlePathTwo","error","p","focusedIndex","forEach","isPointFocused","isDraggingPoint","isPointActive","cubicBezierPath","approxPoints","getLinearApproximation","hoverPoint","Array","isArray","Map","set","cloneLinearPoint","options","rect","getBoundingClientRect","svgX","clientX","left","svgY","clientY","top","width","height","skipSnap","shouldSnap","ratioX","ratioY","bezierBounds","BEZIER_CONTROL_MIN_Y","BEZIER_CONTROL_MAX_Y","sourcePoint","value","target","detail","dispatchControlEvent","newLinkingState","preventDefault","linearPoints","SVGElement","getAttribute","indexAttribute","parseInt","isNaN","setPointerCapture","pointerId","mode","startX","startY","insertResult","skipSnapForPending","DRAG_ACTIVATION_DISTANCE_PX_SQUARED","adjustedPosition","reference","clampedPosition","previousIndex","hasPointerCapture","releasePointerCapture","a","b","p0","p3","minT","maxT","tolerance","maxIterations","px","wasCurved","P01","P12","P23","P012","P123","P_new","html","HTMLElement","easingType","points","focusedLinearIndex","CanvasControls","init_utils","init_shared","Component","tag","styles","canvasControlsStyles","template","EasingType","LINEAR","Array","isArray","focusedIndex","selectedPoint","isInnerPoint","length","hasInHandle","cpInX","undefined","cpInY","hasOutHandle","cpOutX","cpOutY","hasAnyHandle","isLinked","handleToggleMirrorAngle","mirrorLength","handleToggleMirrorLength","handleRemoveSmoothing","handleAddSmoothing","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Number","defaultValue","point","index","prev","next","refDx","refDy","dirX","dirY","x","y","direction","normalizeVector","DEFAULT_HANDLE_LENGTH","dx","dy","normalized","referenceLength","vectorLength","inLength","outLength","targetLength","Math","max","outDirection","inDirection","_initProto","root","getRootNode","ShadowRoot","host","value","event","target","detail","dispatchControlEvent","preventDefault","updatedPoints","updatedPoint","nextState","normalizedPoints","normalizeLinearPoints","existingPoint","html","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","focusedLinearIndex","CurveControls","init_utils","init_shared","Component","tag","styles","controlsStyles","template","_activePresetValue","handlePresetSelection","EASING_PRESETS","map","label","options","index","value","handleTypeChange","EasingType","CUBIC_BEZIER","LINEAR","_dec1","Prop","reflect","_dec2","type","Object","onChange","handlePointsPropChange","_dec3","Boolean","defaultValue","_dec4","_dec5","Number","_dec6","handleFocusedLinearIndexPropChange","requestRender","_value","isApplyingPreset","maxPointsReached","length","MAX_LINEAR_POINTS","minPointsReached","MIN_LINEAR_POINTS","renderLinearDetailsControls","focusedIndex","selectedPoint","previousIndex","nextIndex","isInnerPoint","pointMeta","x","toFixed","y","pointType","isLinked","hasInHandle","cpInX","undefined","cpInY","hasOutHandle","cpOutX","cpOutY","hasAnyHandle","event","mirrorLength","point","prev","next","refDx","refDy","dirX","dirY","direction","normalizeVector","DEFAULT_HANDLE_LENGTH","dx","dy","normalized","referenceLength","vectorLength","inLength","outLength","targetLength","Math","max","outDirection","inDirection","isStart","handleKey","handleLabel","hasHandle","neighbor","handle","fallbackDirection","finalDirection","gap","abs","baseLength","MIN_LINEAR_DELTA","min","updatedPoints","filter","_","pointIndex","normalizedPoints","normalizeLinearPoints","_initProto","root","getRootNode","ShadowRoot","host","Array","isArray","target","HTMLInputElement","axis","dataset","parsed","parseFloat","isNaN","updated","previous","minX","maxX","refreshedPoint","preventDefault","currentTarget","HTMLButtonElement","updatedPoint","nextState","mode","existingPoint","removeIncoming","removeOutgoing","neighborIndex","resetCurve","defaults","p1","p2","distributeLinearPoints","lastIndex","step","distributed","presetValue","detail","originEvent","rawValue","cssValue","trim","startsWith","parseCubicBezierValue","parsedLinear","parseLinearTimingFunction","smoothedLinear","smoothLinearPoints","handleSelectCubic","handleSelectLinear","addLinearPoint","insertIndex","largestGap","start","end","startPoint","endPoint","newPointPosition","clampPoint","newPoint","slice","insertedIndex","removeLinearPoint","removeIndex","smallestSpan","POSITIVE_INFINITY","span","toggleGrid","nextValue","toggleSnapToGrid","incrementGridSize","decrementGridSize","handleGridSliderInput","handleGridSizeChange","String","round","dispatchControlEvent","SUPPORTS_HIGHLIGHT_API","getHighlightAPI","window","CSS","highlights","Highlight","w","DEFAULT_THEME","generateHighlightStyles","keyword","string","comment","number","operator","tag","attribute","property","type","variable","selector","function","instanceId","theme","styles","color","Object","entries","highlightName","italic","JS_BASE","TS_ADDITIONS","HTML_BASE","CSS_BASE","JSON_BASE","baseGrammars","TSX_GRAMMAR","GRAMMARS","javascript","js","typescript","ts","html","css","json","filter","type","tsx","jsx","tokenize","normalizeIndent","code","language","grammar","GRAMMARS","toLowerCase","regexParts","groupMap","Map","groupIndex","forEach","type","pattern","groupName","set","push","source","masterRegex","RegExp","join","tokens","match","exec","index","lastIndex","groups","undefined","get","start","end","length","tagNameMatch","tagNameStart","tagNameEnd","lines","split","filter","line","trim","minIndent","Math","min","map","substring","html","HTMLElement","easingType","points","name","variant","simplify","round","CurveOutput","init_utils","Component","tag","styles","outputStyles","template","generatedCSS","code","handleCopyClick","copyStatus","_dec1","Prop","type","String","reflect","_dec2","Object","_dec3","defaultValue","_dec4","_dec5","Number","_dec6","timingFunction","EasingType","CUBIC_BEZIER","Array","isArray","generateCubicBezierCSS","LINEAR","generateLinearCSS","isAnimating","handlePreviewClick","event","disconnectedCallback","clearTimeout","_initProto","preventDefault","navigator","clipboard","writeText","window","setTimeout","requestRender","error","console","offsetHeight","html","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","simplify","round","CurveToolbar","init_utils","init_shared","Component","tag","styles","toolbarStyles","template","isGridAtMinimum","isGridAtMaximum","isLinear","EasingType","LINEAR","Array","isArray","toggleGrid","toggleSnapToGrid","resetCurve","addLinearPoint","length","MAX_LINEAR_POINTS","removeLinearPoint","MIN_LINEAR_POINTS","distributeLinearPoints","decrementGridSize","incrementGridSize","handleSimplifyInput","handleRoundInput","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Boolean","defaultValue","_dec4","_dec5","Number","_dec6","_dec7","_initProto","root","getRootNode","ShadowRoot","host","value","event","target","detail","dispatchControlEvent","preventDefault","nextValue","CUBIC_BEZIER","defaults","p1","x","y","p2","lastIndex","step","distributed","map","point","index","updated","parseFloat","toFixed","cpInX","cpInY","cpOutX","cpOutY","isLinked","normalizedPoints","normalizeLinearPoints","insertIndex","largestGap","start","end","gap","startPoint","endPoint","newPointPosition","clampPoint","minY","maxY","newPoint","mirrorLength","updatedPoints","slice","insertedIndex","removeIndex","smallestSpan","POSITIVE_INFINITY","previous","next","span","filter","_","pointIndex","nextIndex","customEvent","Math","max","min","requestRender","html","HTMLElement","name","easingType","points","showGrid","snapToGrid","gridSize","simplify","round","focusedLinearIndex","Curve","init_utils","Component","tag","styles","containerStyles","template","_dec1","Prop","reflect","defaultValue","_dec2","EasingType","CUBIC_BEZIER","onChange","next","previous","getDefaultPointsForType","_dec3","type","Object","p1","x","y","p2","_dec4","Boolean","_dec5","_dec6","Number","_dec7","_dec8","_dec9","_dec10","Listen","target","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","passive","_dec18","handleEasingTypeChange","handleGridToggle","handleSnapToggle","handleGridSizeChange","handleSimplifyChange","handleRoundChange","handlePointsChange","handleKeyboardShortcuts","handleLinearPointFocus","event","value","detail","previousType","previousPoints","LINEAR","Array","isArray","bezierPoints","linearPoints","cubicBezierToLinearPoints","emitPointsChange","Math","max","min","requestRender","length","defaultPrevented","activeElement","HTMLInputElement","HTMLTextAreaElement","isContentEditable","index","lastIndex","clonedPoints","map","point","step","shiftKey","handled","key","minX","MIN_LINEAR_DELTA","maxX","MIN_LINEAR_POINTS","splice","normalized","normalizeLinearPoints","nextFocus","preventDefault","sourceEvent","Event","dispatchEvent","CustomEvent","bubbles","composed","_initProto","html","HTMLElement","language","codeElement","Code","Component","tag","shadowMode","autoSlot","styles","template","_dec1","Prop","reflect","_dec2","Query","connectedCallback","MutationObserver","observe","childList","subtree","characterData","disconnectedCallback","disconnect","attributeChangedCallback","name","currentLanguage","toLowerCase","afterRender","shadowRoot","querySelectorAll","style","remove","type","rawCode","textContent","normalizeIndent","trim","SUPPORTS_HIGHLIGHT_API","textNode","firstChild","code","api","getHighlightAPI","tokens","tokenize","highlightMap","Map","token","start","end","range","document","createRange","setStart","setEnd","has","set","get","push","ranges","entries","length","highlightName","highlight","Highlight","highlights","add","delete","clear","_initProto","crypto","randomUUID","Set","createElement","setAttribute","highlightStyles","generateHighlightStyles","appendChild","init_picker","init_input","init_code","loadComponents","tags","promises","map","tag","loader","COMPONENT_LOADERS","Promise","resolve","all","loadAllComponents","resolveTags","options","include","exclude","length","filter","WEB_KIT_ALL_TAGS","includes","excludeSet","Set","has","WEB_KIT_ELEMENT_TAGS","WEB_KIT_COMPONENT_TAGS","WEB_KIT_INTERNAL_TAGS","createLazyLoader","config","isBrowser","dispose","load","root","document","include","exclude","preload","watchTags","Set","WEB_KIT_ALL_TAGS","length","filter","tag","includes","delete","loaded","has","loader","COMPONENT_LOADERS","add","checkElement","element","tagName","toLowerCase","child","querySelectorAll","childTag","observer","MutationObserver","mutations","mutation","node","addedNodes","Element","target","Document","documentElement","observe","childList","subtree","disconnect","registerReplacements","replace","isBrowser","tag","replacement","Object","entries","customElements","get","define","aliasTag","BridgeElement","HTMLElement","connectedCallback","_inner","document","createElement","attr","attributes","setAttribute","name","value","firstChild","appendChild","shadow","attachShadow","mode","disconnectedCallback","applyStyles","styles","nonce","dispose","injectPreset","removePreset","injected","push","reset","base","preset","applyThemeConfig","theme","target","isThemeModeConfig","lightConfig","getTheme","light","darkConfig","dark","cleanup","followSystemTheme","element","controller","set","t","config","applyTheme","m","systemMode","window","matchMedia","matches","colorScheme","resolvedConfig","isThemeRef","undefined","themeName","initWebKit","options","ready","Promise","resolve","include","exclude","fonts","lazyLoad","cspNonce","dev","disposers","readyPromise","stylesResult","themeResult","injectFonts","removeFonts","fontsToRemove","createLazyLoader","lazyConfig","loader","loadAllComponents","loadComponents","resolveTags","tags","warnUnknownTags","WEB_KIT_ALL_TAGS","allTags","Set","unknown","filter","has","length","console","warn","logLoads","log","obj","createEventHandler","callback","e","detail","value","name","event","__JSX_TYPES_LOADED__","createWebKitProvider","React","defaultValue","ready","theme","undefined","WebKitContext","createContext","WebKitProvider","props","options","immediate","children","isSSR","window","useState","useEffect","useMemo","createElement","setReady","controller","setController","isMounted","initialize","initWebKit","ctrl","dispose","value","Provider","useWebKitContext","context","useContext","useEaseState","options","hooks","useState","useCallback","useRef","initialState","onChange","onTabChange","stateElementRef","panelElementRef","state","setState","activeTab","setActiveTab","handleStateChange","e","customEvent","name","value","detail","prev","handleTabChange","index","stateRef","element","current","removeEventListener","addEventListener","Object","entries","set","currentState","keys","length","panelRef","get","reset","setTab","globalController","initCount","useWebKit","options","hooks","isSSR","window","useState","useEffect","useRef","skip","initOptions","ready","setReady","controllerRef","optionsRef","isMounted","initialize","current","initWebKit","controller","dispose","theme"]}
|