ngwr 6.0.0 → 7.0.0
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/LICENSE +1 -3
- package/README.md +179 -32
- package/affix/styles/_index.scss +12 -0
- package/alert/styles/_index.scss +75 -32
- package/anchor/styles/_index.scss +59 -0
- package/aurora/aurora.scss +1 -0
- package/aurora/styles/_index.scss +30 -0
- package/avatar/styles/_index.scss +30 -14
- package/back-top/styles/_index.scss +42 -0
- package/badge/styles/_index.scss +80 -0
- package/badge/styles/_tag.scss +81 -0
- package/bar-chart/styles/_index.scss +56 -0
- package/blur-text/blur-text.scss +1 -0
- package/blur-text/styles/_index.scss +14 -0
- package/border-glow/border-glow.scss +4 -0
- package/border-glow/styles/_index.scss +228 -0
- package/breadcrumbs/breadcrumbs.scss +1 -0
- package/breadcrumbs/styles/_index.scss +76 -0
- package/button/styles/_index.scss +148 -125
- package/calendar/styles/_index.scss +252 -0
- package/calendar-heatmap/styles/_index.scss +69 -0
- package/card/card.scss +1 -0
- package/card/styles/_index.scss +96 -0
- package/carousel/styles/_index.scss +102 -0
- package/cascader/cascader.scss +1 -0
- package/cascader/styles/_index.scss +174 -0
- package/checkbox/styles/_index.scss +76 -60
- package/circular-text/circular-text.scss +1 -0
- package/circular-text/styles/_index.scss +45 -0
- package/click-spark/click-spark.scss +1 -0
- package/click-spark/styles/_index.scss +16 -0
- package/collapse/styles/_index.scss +92 -0
- package/color-picker/styles/_index.scss +247 -0
- package/command-palette/styles/_index.scss +188 -0
- package/compare/styles/_index.scss +100 -0
- package/context-menu/styles/_index.scss +112 -0
- package/counter/styles/_index.scss +44 -0
- package/date-picker/styles/_index.scss +204 -0
- package/decrypt-text/decrypt-text.scss +1 -0
- package/decrypt-text/styles/_index.scss +26 -0
- package/density/styles/_index.scss +37 -0
- package/descriptions/styles/_index.scss +104 -0
- package/dialog/styles/_index.scss +101 -27
- package/divider/styles/_index.scss +43 -24
- package/donut-chart/styles/_index.scss +76 -0
- package/drag-drop/sortable-list.scss +1 -0
- package/drag-drop/styles/_index.scss +99 -0
- package/drawer/styles/_index.scss +164 -0
- package/dropdown/styles/_index.scss +76 -56
- package/empty/styles/_index.scss +49 -0
- package/falling-text/falling-text.scss +1 -0
- package/falling-text/styles/_index.scss +30 -0
- package/fesm2022/ngwr-affix.mjs +102 -0
- package/fesm2022/ngwr-affix.mjs.map +1 -0
- package/fesm2022/ngwr-alert.mjs +70 -52
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +103 -0
- package/fesm2022/ngwr-anchor.mjs.map +1 -0
- package/fesm2022/ngwr-aurora.mjs +309 -0
- package/fesm2022/ngwr-aurora.mjs.map +1 -0
- package/fesm2022/ngwr-avatar.mjs +81 -71
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +81 -0
- package/fesm2022/ngwr-back-top.mjs.map +1 -0
- package/fesm2022/ngwr-badge.mjs +192 -0
- package/fesm2022/ngwr-badge.mjs.map +1 -0
- package/fesm2022/ngwr-bar-chart.mjs +69 -0
- package/fesm2022/ngwr-bar-chart.mjs.map +1 -0
- package/fesm2022/ngwr-blur-text.mjs +181 -0
- package/fesm2022/ngwr-blur-text.mjs.map +1 -0
- package/fesm2022/ngwr-border-glow.mjs +278 -0
- package/fesm2022/ngwr-border-glow.mjs.map +1 -0
- package/fesm2022/ngwr-breadcrumbs.mjs +101 -0
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -0
- package/fesm2022/ngwr-button.mjs +179 -104
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +145 -0
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -0
- package/fesm2022/ngwr-calendar.mjs +402 -0
- package/fesm2022/ngwr-calendar.mjs.map +1 -0
- package/fesm2022/ngwr-card.mjs +100 -0
- package/fesm2022/ngwr-card.mjs.map +1 -0
- package/fesm2022/ngwr-carousel.mjs +128 -0
- package/fesm2022/ngwr-carousel.mjs.map +1 -0
- package/fesm2022/ngwr-cascader.mjs +280 -0
- package/fesm2022/ngwr-cascader.mjs.map +1 -0
- package/fesm2022/ngwr-checkbox.mjs +214 -54
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +168 -0
- package/fesm2022/ngwr-circular-text.mjs.map +1 -0
- package/fesm2022/ngwr-click-spark.mjs +163 -0
- package/fesm2022/ngwr-click-spark.mjs.map +1 -0
- package/fesm2022/ngwr-clipboard.mjs +130 -0
- package/fesm2022/ngwr-clipboard.mjs.map +1 -0
- package/fesm2022/ngwr-collapse.mjs +232 -0
- package/fesm2022/ngwr-collapse.mjs.map +1 -0
- package/fesm2022/ngwr-color-picker.mjs +646 -0
- package/fesm2022/ngwr-color-picker.mjs.map +1 -0
- package/fesm2022/ngwr-command-palette.mjs +259 -0
- package/fesm2022/ngwr-command-palette.mjs.map +1 -0
- package/fesm2022/ngwr-compare.mjs +137 -0
- package/fesm2022/ngwr-compare.mjs.map +1 -0
- package/fesm2022/ngwr-confetti.mjs +160 -0
- package/fesm2022/ngwr-confetti.mjs.map +1 -0
- package/fesm2022/ngwr-context-menu.mjs +653 -0
- package/fesm2022/ngwr-context-menu.mjs.map +1 -0
- package/fesm2022/ngwr-cookie.mjs +127 -0
- package/fesm2022/ngwr-cookie.mjs.map +1 -0
- package/fesm2022/ngwr-counter.mjs +415 -0
- package/fesm2022/ngwr-counter.mjs.map +1 -0
- package/fesm2022/ngwr-date-adapter-fns.mjs +180 -0
- package/fesm2022/ngwr-date-adapter-fns.mjs.map +1 -0
- package/fesm2022/ngwr-date-adapter-luxon.mjs +201 -0
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -0
- package/fesm2022/ngwr-date-adapter.mjs +419 -0
- package/fesm2022/ngwr-date-adapter.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker.mjs +624 -0
- package/fesm2022/ngwr-date-picker.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text.mjs +396 -0
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -0
- package/fesm2022/ngwr-density.mjs +157 -0
- package/fesm2022/ngwr-density.mjs.map +1 -0
- package/fesm2022/ngwr-descriptions.mjs +83 -0
- package/fesm2022/ngwr-descriptions.mjs.map +1 -0
- package/fesm2022/ngwr-dialog.mjs +249 -383
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +315 -0
- package/fesm2022/ngwr-directives.mjs.map +1 -0
- package/fesm2022/ngwr-divider.mjs +74 -59
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +131 -0
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -0
- package/fesm2022/ngwr-drag-drop.mjs +117 -0
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -0
- package/fesm2022/ngwr-drawer.mjs +315 -0
- package/fesm2022/ngwr-drawer.mjs.map +1 -0
- package/fesm2022/ngwr-dropdown.mjs +276 -229
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +57 -0
- package/fesm2022/ngwr-empty.mjs.map +1 -0
- package/fesm2022/ngwr-falling-text.mjs +316 -0
- package/fesm2022/ngwr-falling-text.mjs.map +1 -0
- package/fesm2022/ngwr-file-upload.mjs +260 -0
- package/fesm2022/ngwr-file-upload.mjs.map +1 -0
- package/fesm2022/ngwr-form.mjs +133 -48
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +373 -0
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -0
- package/fesm2022/ngwr-gauge.mjs +83 -0
- package/fesm2022/ngwr-gauge.mjs.map +1 -0
- package/fesm2022/ngwr-glitch-text.mjs +67 -0
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -0
- package/fesm2022/ngwr-gradient-text.mjs +109 -0
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -0
- package/fesm2022/ngwr-hotkey.mjs +263 -0
- package/fesm2022/ngwr-hotkey.mjs.map +1 -0
- package/fesm2022/ngwr-i18n-en.mjs +168 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -0
- package/fesm2022/ngwr-i18n-ru.mjs +156 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -0
- package/fesm2022/ngwr-i18n.mjs +478 -0
- package/fesm2022/ngwr-i18n.mjs.map +1 -0
- package/fesm2022/ngwr-icon-adapters-feather.mjs +74 -0
- package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -0
- package/fesm2022/ngwr-icon-adapters-lucide.mjs +88 -0
- package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -0
- package/fesm2022/ngwr-icon.mjs +189 -650
- package/fesm2022/ngwr-icon.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +299 -0
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -0
- package/fesm2022/ngwr-input-number.mjs +239 -0
- package/fesm2022/ngwr-input-number.mjs.map +1 -0
- package/fesm2022/ngwr-input-otp.mjs +216 -0
- package/fesm2022/ngwr-input-otp.mjs.map +1 -0
- package/fesm2022/ngwr-input.mjs +183 -104
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +47 -0
- package/fesm2022/ngwr-keyboard.mjs.map +1 -0
- package/fesm2022/ngwr-knob.mjs +227 -0
- package/fesm2022/ngwr-knob.mjs.map +1 -0
- package/fesm2022/ngwr-layout.mjs +197 -0
- package/fesm2022/ngwr-layout.mjs.map +1 -0
- package/fesm2022/ngwr-lightbox.mjs +131 -0
- package/fesm2022/ngwr-lightbox.mjs.map +1 -0
- package/fesm2022/ngwr-line-chart.mjs +176 -0
- package/fesm2022/ngwr-line-chart.mjs.map +1 -0
- package/fesm2022/ngwr-list.mjs +132 -0
- package/fesm2022/ngwr-list.mjs.map +1 -0
- package/fesm2022/ngwr-loading-bar.mjs +160 -0
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -0
- package/fesm2022/ngwr-marquee.mjs +224 -0
- package/fesm2022/ngwr-marquee.mjs.map +1 -0
- package/fesm2022/ngwr-media.mjs +132 -0
- package/fesm2022/ngwr-media.mjs.map +1 -0
- package/fesm2022/ngwr-mention.mjs +374 -0
- package/fesm2022/ngwr-mention.mjs.map +1 -0
- package/fesm2022/ngwr-meta.mjs +266 -0
- package/fesm2022/ngwr-meta.mjs.map +1 -0
- package/fesm2022/ngwr-meter-group.mjs +73 -0
- package/fesm2022/ngwr-meter-group.mjs.map +1 -0
- package/fesm2022/ngwr-overlay.mjs +145 -0
- package/fesm2022/ngwr-overlay.mjs.map +1 -0
- package/fesm2022/ngwr-page-header.mjs +53 -0
- package/fesm2022/ngwr-page-header.mjs.map +1 -0
- package/fesm2022/ngwr-pagination.mjs +152 -96
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +290 -11
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-platform.mjs +63 -0
- package/fesm2022/ngwr-platform.mjs.map +1 -0
- package/fesm2022/ngwr-popconfirm.mjs +188 -0
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -0
- package/fesm2022/ngwr-popover.mjs +361 -0
- package/fesm2022/ngwr-popover.mjs.map +1 -0
- package/fesm2022/ngwr-progress.mjs +47 -39
- package/fesm2022/ngwr-progress.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +168 -190
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +204 -0
- package/fesm2022/ngwr-radio.mjs.map +1 -0
- package/fesm2022/ngwr-rating.mjs +180 -0
- package/fesm2022/ngwr-rating.mjs.map +1 -0
- package/fesm2022/ngwr-result.mjs +119 -0
- package/fesm2022/ngwr-result.mjs.map +1 -0
- package/fesm2022/ngwr-rotating-text.mjs +256 -0
- package/fesm2022/ngwr-rotating-text.mjs.map +1 -0
- package/fesm2022/ngwr-scramble-text.mjs +165 -0
- package/fesm2022/ngwr-scramble-text.mjs.map +1 -0
- package/fesm2022/ngwr-scroll.mjs +107 -0
- package/fesm2022/ngwr-scroll.mjs.map +1 -0
- package/fesm2022/ngwr-segmented.mjs +96 -0
- package/fesm2022/ngwr-segmented.mjs.map +1 -0
- package/fesm2022/ngwr-select.mjs +842 -307
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +127 -0
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -0
- package/fesm2022/ngwr-sidebar.mjs +134 -0
- package/fesm2022/ngwr-sidebar.mjs.map +1 -0
- package/fesm2022/ngwr-skeleton.mjs +59 -34
- package/fesm2022/ngwr-skeleton.mjs.map +1 -1
- package/fesm2022/ngwr-slider.mjs +234 -0
- package/fesm2022/ngwr-slider.mjs.map +1 -0
- package/fesm2022/ngwr-sparkline.mjs +104 -0
- package/fesm2022/ngwr-sparkline.mjs.map +1 -0
- package/fesm2022/ngwr-speed-dial.mjs +79 -0
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -0
- package/fesm2022/ngwr-spinner.mjs +34 -28
- package/fesm2022/ngwr-spinner.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor.mjs +970 -0
- package/fesm2022/ngwr-splash-cursor.mjs.map +1 -0
- package/fesm2022/ngwr-split-text.mjs +200 -0
- package/fesm2022/ngwr-split-text.mjs.map +1 -0
- package/fesm2022/ngwr-splitter.mjs +125 -0
- package/fesm2022/ngwr-splitter.mjs.map +1 -0
- package/fesm2022/ngwr-spotlight-card.mjs +138 -0
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -0
- package/fesm2022/ngwr-squircle.mjs +320 -0
- package/fesm2022/ngwr-squircle.mjs.map +1 -0
- package/fesm2022/ngwr-star-border.mjs +72 -0
- package/fesm2022/ngwr-star-border.mjs.map +1 -0
- package/fesm2022/ngwr-statistic.mjs +220 -0
- package/fesm2022/ngwr-statistic.mjs.map +1 -0
- package/fesm2022/ngwr-stepper.mjs +186 -0
- package/fesm2022/ngwr-stepper.mjs.map +1 -0
- package/fesm2022/ngwr-storage.mjs +317 -0
- package/fesm2022/ngwr-storage.mjs.map +1 -0
- package/fesm2022/ngwr-switch.mjs +99 -0
- package/fesm2022/ngwr-switch.mjs.map +1 -0
- package/fesm2022/ngwr-table.mjs +218 -207
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +217 -0
- package/fesm2022/ngwr-tabs.mjs.map +1 -0
- package/fesm2022/ngwr-textarea.mjs +106 -120
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +152 -0
- package/fesm2022/ngwr-theme.mjs.map +1 -0
- package/fesm2022/ngwr-tilt-card.mjs +137 -0
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -0
- package/fesm2022/ngwr-timeline.mjs +73 -0
- package/fesm2022/ngwr-timeline.mjs.map +1 -0
- package/fesm2022/ngwr-toast.mjs +446 -0
- package/fesm2022/ngwr-toast.mjs.map +1 -0
- package/fesm2022/ngwr-toolbar.mjs +46 -0
- package/fesm2022/ngwr-toolbar.mjs.map +1 -0
- package/fesm2022/ngwr-tree.mjs +483 -0
- package/fesm2022/ngwr-tree.mjs.map +1 -0
- package/fesm2022/ngwr-typewriter.mjs +229 -0
- package/fesm2022/ngwr-typewriter.mjs.map +1 -0
- package/fesm2022/ngwr-typography.mjs +79 -0
- package/fesm2022/ngwr-typography.mjs.map +1 -0
- package/fesm2022/ngwr-utils.mjs +535 -0
- package/fesm2022/ngwr-utils.mjs.map +1 -0
- package/fesm2022/ngwr-validators.mjs +214 -0
- package/fesm2022/ngwr-validators.mjs.map +1 -0
- package/fesm2022/ngwr-version.mjs +51 -0
- package/fesm2022/ngwr-version.mjs.map +1 -0
- package/fesm2022/ngwr-virtual-scroll.mjs +99 -0
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -0
- package/fesm2022/ngwr-waves.mjs +356 -0
- package/fesm2022/ngwr-waves.mjs.map +1 -0
- package/fesm2022/ngwr-window.mjs +1141 -0
- package/fesm2022/ngwr-window.mjs.map +1 -0
- package/fesm2022/ngwr.mjs +0 -3
- package/fesm2022/ngwr.mjs.map +1 -1
- package/file-upload/styles/_index.scss +152 -0
- package/form/styles/_index.scss +85 -42
- package/gauge/styles/_index.scss +37 -0
- package/glitch-text/glitch-text.scss +1 -0
- package/glitch-text/styles/_index.scss +144 -0
- package/gradient-text/gradient-text.scss +1 -0
- package/gradient-text/styles/_index.scss +113 -0
- package/icon/styles/_index.scss +21 -15
- package/image-cropper/styles/_index.scss +114 -0
- package/input/styles/_index.scss +133 -93
- package/input-number/styles/_index.scss +75 -0
- package/input-otp/styles/_index.scss +53 -0
- package/keyboard/styles/_index.scss +55 -0
- package/knob/styles/_index.scss +54 -0
- package/layout/styles/_index.scss +65 -0
- package/lightbox/lightbox.scss +1 -0
- package/lightbox/styles/_index.scss +144 -0
- package/line-chart/styles/_index.scss +93 -0
- package/list/list.scss +1 -0
- package/list/styles/_index.scss +101 -0
- package/loading-bar/loading-bar.scss +1 -0
- package/loading-bar/styles/_index.scss +29 -0
- package/marquee/marquee.scss +1 -0
- package/marquee/styles/_index.scss +138 -0
- package/mention/styles/_index.scss +47 -0
- package/meter-group/styles/_index.scss +61 -0
- package/package.json +576 -99
- package/page-header/styles/_index.scss +78 -0
- package/pagination/styles/_index.scss +89 -34
- package/popconfirm/styles/_index.scss +32 -0
- package/popover/styles/_index.scss +83 -0
- package/progress/styles/_index.scss +29 -14
- package/qr/styles/_index.scss +6 -3
- package/radio/styles/_index.scss +111 -0
- package/rating/styles/_index.scss +63 -0
- package/result/styles/_index.scss +69 -0
- package/rotating-text/rotating-text.scss +1 -0
- package/rotating-text/styles/_index.scss +39 -0
- package/schematics/collection.json +37 -0
- package/schematics/component-style/index.js +49 -0
- package/{alert/alert-type.d.ts → schematics/component-style/schema.js} +2 -1
- package/schematics/component-style/schema.json +20 -0
- package/schematics/icon-set/index.js +96 -0
- package/{avatar/public-api.d.ts → schematics/icon-set/schema.js} +2 -1
- package/schematics/icon-set/schema.json +39 -0
- package/schematics/migrations/v7/index.js +187 -0
- package/schematics/migrations.json +10 -0
- package/schematics/ng-add/index.js +180 -0
- package/{cdk/public-api.d.ts → schematics/ng-add/schema.js} +2 -1
- package/schematics/ng-add/schema.json +80 -0
- package/schematics/page/index.js +63 -0
- package/{alert/public-api.d.ts → schematics/page/schema.js} +2 -2
- package/schematics/page/schema.json +39 -0
- package/schematics/page/templates.js +198 -0
- package/schematics/provider/index.js +126 -0
- package/schematics/provider/schema.js +8 -0
- package/schematics/provider/schema.json +52 -0
- package/schematics/use/index.js +143 -0
- package/schematics/use/schema.js +8 -0
- package/schematics/use/schema.json +25 -0
- package/schematics/use/symbol-map.json +356 -0
- package/scramble-text/scramble-text.scss +1 -0
- package/scramble-text/styles/_index.scss +8 -0
- package/segmented/styles/_index.scss +92 -0
- package/select/styles/_index.scss +245 -159
- package/shiny-text/shiny-text.scss +1 -0
- package/shiny-text/styles/_index.scss +101 -0
- package/sidebar/styles/_index.scss +208 -0
- package/skeleton/styles/_index.scss +33 -33
- package/slider/styles/_index.scss +77 -0
- package/sparkline/styles/_index.scss +9 -0
- package/speed-dial/styles/_index.scss +158 -0
- package/spinner/styles/_index.scss +38 -22
- package/splash-cursor/splash-cursor.scss +1 -0
- package/splash-cursor/styles/_index.scss +27 -0
- package/split-text/split-text.scss +1 -0
- package/split-text/styles/_index.scss +22 -0
- package/splitter/styles/_index.scss +85 -0
- package/spotlight-card/spotlight-card.scss +1 -0
- package/spotlight-card/styles/_index.scss +43 -0
- package/squircle/styles/_index.scss +34 -0
- package/star-border/star-border.scss +1 -0
- package/star-border/styles/_index.scss +118 -0
- package/statistic/styles/_index.scss +54 -0
- package/stepper/styles/_index.scss +162 -0
- package/styles/_animations.scss +198 -0
- package/styles/_breakpoints.scss +75 -0
- package/styles/_grid.scss +71 -0
- package/styles/_reset.scss +123 -0
- package/styles/_typography.scss +122 -0
- package/styles.scss +102 -13
- package/switch/styles/_index.scss +82 -0
- package/table/styles/_index.scss +255 -4
- package/tabs/styles/_index.scss +71 -0
- package/textarea/styles/_index.scss +47 -56
- package/theme/styles/_colors.scss +83 -0
- package/theme/styles/_dark.scss +85 -0
- package/theme/styles/_focus.scss +93 -0
- package/theme/styles/_index.scss +5 -0
- package/theme/styles/_mixins.scss +57 -0
- package/theme/styles/_variables.scss +118 -0
- package/tilt-card/styles/_index.scss +40 -0
- package/tilt-card/tilt-card.scss +1 -0
- package/timeline/styles/_index.scss +127 -0
- package/toast/styles/_index.scss +263 -0
- package/toolbar/styles/_index.scss +65 -0
- package/tree/styles/_index.scss +271 -0
- package/types/ngwr-affix.d.ts +43 -0
- package/types/ngwr-alert.d.ts +68 -0
- package/types/ngwr-anchor.d.ts +53 -0
- package/types/ngwr-aurora.d.ts +52 -0
- package/types/ngwr-avatar.d.ts +90 -0
- package/types/ngwr-back-top.d.ts +37 -0
- package/types/ngwr-badge.d.ts +158 -0
- package/types/ngwr-bar-chart.d.ts +47 -0
- package/types/ngwr-blur-text.d.ts +62 -0
- package/types/ngwr-border-glow.d.ts +66 -0
- package/types/ngwr-breadcrumbs.d.ts +61 -0
- package/types/ngwr-button.d.ts +176 -0
- package/types/ngwr-calendar-heatmap.d.ts +58 -0
- package/types/ngwr-calendar.d.ts +116 -0
- package/types/ngwr-card.d.ts +50 -0
- package/types/ngwr-carousel.d.ts +57 -0
- package/types/ngwr-cascader.d.ts +107 -0
- package/types/ngwr-checkbox.d.ts +139 -0
- package/types/ngwr-circular-text.d.ts +49 -0
- package/types/ngwr-click-spark.d.ts +52 -0
- package/types/ngwr-clipboard.d.ts +53 -0
- package/types/ngwr-collapse.d.ts +139 -0
- package/types/ngwr-color-picker.d.ts +302 -0
- package/types/ngwr-command-palette.d.ts +113 -0
- package/types/ngwr-compare.d.ts +55 -0
- package/types/ngwr-confetti.d.ts +70 -0
- package/types/ngwr-context-menu.d.ts +207 -0
- package/types/ngwr-cookie.d.ts +60 -0
- package/types/ngwr-counter.d.ts +182 -0
- package/types/ngwr-date-adapter-fns.d.ts +73 -0
- package/types/ngwr-date-adapter-luxon.d.ts +73 -0
- package/types/ngwr-date-adapter.d.ts +198 -0
- package/types/ngwr-date-picker.d.ts +117 -0
- package/types/ngwr-decrypt-text.d.ts +85 -0
- package/types/ngwr-density.d.ts +97 -0
- package/types/ngwr-descriptions.d.ts +41 -0
- package/types/ngwr-dialog.d.ts +210 -0
- package/types/ngwr-directives.d.ts +125 -0
- package/types/ngwr-divider.d.ts +73 -0
- package/types/ngwr-donut-chart.d.ts +53 -0
- package/types/ngwr-drag-drop.d.ts +83 -0
- package/types/ngwr-drawer.d.ts +155 -0
- package/types/ngwr-dropdown.d.ts +124 -0
- package/types/ngwr-empty.d.ts +38 -0
- package/types/ngwr-falling-text.d.ts +63 -0
- package/types/ngwr-file-upload.d.ts +94 -0
- package/types/ngwr-form.d.ts +95 -0
- package/types/ngwr-fuzzy-text.d.ts +74 -0
- package/types/ngwr-gauge.d.ts +39 -0
- package/types/ngwr-glitch-text.d.ts +31 -0
- package/types/ngwr-gradient-text.d.ts +46 -0
- package/types/ngwr-hotkey.d.ts +142 -0
- package/types/ngwr-i18n-en.d.ts +18 -0
- package/types/ngwr-i18n-ru.d.ts +6 -0
- package/types/ngwr-i18n.d.ts +336 -0
- package/types/ngwr-icon-adapters-feather.d.ts +44 -0
- package/types/ngwr-icon-adapters-lucide.d.ts +54 -0
- package/types/ngwr-icon.d.ts +180 -0
- package/types/ngwr-image-cropper.d.ts +110 -0
- package/types/ngwr-input-number.d.ts +77 -0
- package/types/ngwr-input-otp.d.ts +78 -0
- package/types/ngwr-input.d.ts +131 -0
- package/types/ngwr-keyboard.d.ts +34 -0
- package/types/ngwr-knob.d.ts +77 -0
- package/types/ngwr-layout.d.ts +89 -0
- package/types/ngwr-lightbox.d.ts +50 -0
- package/types/ngwr-line-chart.d.ts +90 -0
- package/types/ngwr-list.d.ts +71 -0
- package/types/ngwr-loading-bar.d.ts +79 -0
- package/types/ngwr-marquee.d.ts +95 -0
- package/types/ngwr-media.d.ts +74 -0
- package/types/ngwr-mention.d.ts +110 -0
- package/types/ngwr-meta.d.ts +164 -0
- package/types/ngwr-meter-group.d.ts +57 -0
- package/types/ngwr-overlay.d.ts +110 -0
- package/types/ngwr-page-header.d.ts +35 -0
- package/types/ngwr-pagination.d.ts +119 -0
- package/types/ngwr-pipes.d.ts +177 -0
- package/types/ngwr-platform.d.ts +38 -0
- package/types/ngwr-popconfirm.d.ts +79 -0
- package/types/ngwr-popover.d.ts +90 -0
- package/types/ngwr-progress.d.ts +33 -0
- package/types/ngwr-qr.d.ts +56 -0
- package/types/ngwr-radio.d.ts +120 -0
- package/types/ngwr-rating.d.ts +62 -0
- package/types/ngwr-result.d.ts +64 -0
- package/types/ngwr-rotating-text.d.ts +72 -0
- package/types/ngwr-scramble-text.d.ts +49 -0
- package/types/ngwr-scroll.d.ts +65 -0
- package/types/ngwr-segmented.d.ts +65 -0
- package/types/ngwr-select.d.ts +413 -0
- package/types/ngwr-shiny-text.d.ts +70 -0
- package/types/ngwr-sidebar.d.ts +83 -0
- package/types/ngwr-skeleton.d.ts +41 -0
- package/types/ngwr-slider.d.ts +86 -0
- package/types/ngwr-sparkline.d.ts +48 -0
- package/types/ngwr-speed-dial.d.ts +51 -0
- package/types/ngwr-spinner.d.ts +41 -0
- package/types/ngwr-splash-cursor.d.ts +94 -0
- package/types/ngwr-split-text.d.ts +83 -0
- package/types/ngwr-splitter.d.ts +52 -0
- package/types/ngwr-spotlight-card.d.ts +71 -0
- package/types/ngwr-squircle.d.ts +132 -0
- package/types/ngwr-star-border.d.ts +40 -0
- package/types/ngwr-statistic.d.ts +88 -0
- package/types/ngwr-stepper.d.ts +99 -0
- package/types/ngwr-storage.d.ts +178 -0
- package/types/ngwr-switch.d.ts +39 -0
- package/types/ngwr-table.d.ts +237 -0
- package/types/ngwr-tabs.d.ts +125 -0
- package/types/ngwr-textarea.d.ts +60 -0
- package/types/ngwr-theme.d.ts +124 -0
- package/types/ngwr-tilt-card.d.ts +63 -0
- package/types/ngwr-timeline.d.ts +40 -0
- package/types/ngwr-toast.d.ts +230 -0
- package/types/ngwr-toolbar.d.ts +30 -0
- package/types/ngwr-tree.d.ts +150 -0
- package/types/ngwr-typewriter.d.ts +84 -0
- package/types/ngwr-typography.d.ts +56 -0
- package/types/ngwr-utils.d.ts +447 -0
- package/types/ngwr-validators.d.ts +70 -0
- package/types/ngwr-version.d.ts +44 -0
- package/types/ngwr-virtual-scroll.d.ts +64 -0
- package/types/ngwr-waves.d.ts +71 -0
- package/types/ngwr-window.d.ts +437 -0
- package/types/ngwr.d.ts +2 -0
- package/typewriter/styles/_index.scss +33 -0
- package/typewriter/typewriter.scss +1 -0
- package/typography/styles/_index.scss +211 -0
- package/virtual-scroll/styles/_index.scss +27 -0
- package/virtual-scroll/virtual-scroll.scss +1 -0
- package/waves/styles/_index.scss +24 -0
- package/waves/waves.scss +1 -0
- package/window/styles/_index.scss +430 -0
- package/alert/alert.component.d.ts +0 -21
- package/alert/index.d.ts +0 -5
- package/alert/styles/theming.scss +0 -26
- package/alert/styles/vars.scss +0 -11
- package/avatar/avatar.component.d.ts +0 -27
- package/avatar/index.d.ts +0 -5
- package/button/button-group.component.d.ts +0 -12
- package/button/button.component.d.ts +0 -31
- package/button/index.d.ts +0 -5
- package/button/public-api.d.ts +0 -8
- package/button/styles/vars.scss +0 -13
- package/cdk/base.directive.d.ts +0 -20
- package/cdk/index.d.ts +0 -5
- package/cdk/rxjs/index.d.ts +0 -5
- package/cdk/rxjs/is-array.d.ts +0 -8
- package/cdk/rxjs/is-defined.d.ts +0 -8
- package/cdk/rxjs/is-not-empty-array.d.ts +0 -8
- package/cdk/rxjs/is-observable.d.ts +0 -9
- package/cdk/rxjs/public-api.d.ts +0 -10
- package/cdk/types/index.d.ts +0 -5
- package/cdk/types/maybe.d.ts +0 -7
- package/cdk/types/public-api.d.ts +0 -9
- package/cdk/types/safe-any.d.ts +0 -7
- package/cdk/types/theme-color.d.ts +0 -8
- package/cdk/utils/generate-random-id.d.ts +0 -12
- package/cdk/utils/index.d.ts +0 -5
- package/cdk/utils/public-api.d.ts +0 -7
- package/checkbox/checkbox.component.d.ts +0 -28
- package/checkbox/index.d.ts +0 -5
- package/checkbox/public-api.d.ts +0 -7
- package/checkbox/styles/vars.scss +0 -16
- package/dialog/dialog-animations.d.ts +0 -22
- package/dialog/dialog-base.directive.d.ts +0 -40
- package/dialog/dialog-close.directive.d.ts +0 -9
- package/dialog/dialog-content.directive.d.ts +0 -6
- package/dialog/dialog-data.token.d.ts +0 -8
- package/dialog/dialog-footer.directive.d.ts +0 -8
- package/dialog/dialog-options.d.ts +0 -19
- package/dialog/dialog-ref.d.ts +0 -26
- package/dialog/dialog-title.directive.d.ts +0 -6
- package/dialog/dialog.component.d.ts +0 -28
- package/dialog/dialog.module.d.ts +0 -6
- package/dialog/dialog.service.d.ts +0 -28
- package/dialog/index.d.ts +0 -5
- package/dialog/public-api.d.ts +0 -18
- package/dialog/styles/vars.scss +0 -7
- package/divider/divider.component.d.ts +0 -13
- package/divider/index.d.ts +0 -5
- package/divider/public-api.d.ts +0 -7
- package/dropdown/dropdown-menu-item.component.d.ts +0 -12
- package/dropdown/dropdown-menu.component.d.ts +0 -14
- package/dropdown/dropdown.directive.d.ts +0 -29
- package/dropdown/dropdown.types.d.ts +0 -9
- package/dropdown/index.d.ts +0 -5
- package/dropdown/public-api.d.ts +0 -10
- package/dropdown/styles/vars.scss +0 -18
- package/fesm2022/ngwr-cdk-rxjs.mjs +0 -53
- package/fesm2022/ngwr-cdk-rxjs.mjs.map +0 -1
- package/fesm2022/ngwr-cdk-types.mjs +0 -44
- package/fesm2022/ngwr-cdk-types.mjs.map +0 -1
- package/fesm2022/ngwr-cdk-utils.mjs +0 -30
- package/fesm2022/ngwr-cdk-utils.mjs.map +0 -1
- package/fesm2022/ngwr-cdk.mjs +0 -46
- package/fesm2022/ngwr-cdk.mjs.map +0 -1
- package/fesm2022/ngwr-tag.mjs +0 -87
- package/fesm2022/ngwr-tag.mjs.map +0 -1
- package/form/form-error.component.d.ts +0 -11
- package/form/form-item.component.d.ts +0 -14
- package/form/index.d.ts +0 -5
- package/form/public-api.d.ts +0 -8
- package/icon/icon.component.d.ts +0 -24
- package/icon/icon.service.d.ts +0 -23
- package/icon/icons.d.ts +0 -770
- package/icon/index.d.ts +0 -5
- package/icon/provide-wr-icons.d.ts +0 -9
- package/icon/public-api.d.ts +0 -10
- package/icon/styles/vars.scss +0 -3
- package/index.d.ts +0 -5
- package/input/index.d.ts +0 -5
- package/input/input-types.d.ts +0 -1
- package/input/input.component.d.ts +0 -38
- package/input/public-api.d.ts +0 -8
- package/input/styles/vars.scss +0 -17
- package/pagination/index.d.ts +0 -5
- package/pagination/pagination.component.d.ts +0 -23
- package/pagination/pagination.types.d.ts +0 -7
- package/pagination/public-api.d.ts +0 -8
- package/pagination/styles/vars.scss +0 -14
- package/pipes/index.d.ts +0 -5
- package/pipes/new-array.pipe.d.ts +0 -13
- package/pipes/public-api.d.ts +0 -7
- package/progress/index.d.ts +0 -5
- package/progress/progress.component.d.ts +0 -10
- package/progress/public-api.d.ts +0 -7
- package/progress/styles/theming.scss +0 -8
- package/progress/styles/vars.scss +0 -6
- package/public-api.d.ts +0 -2
- package/qr/generator.d.ts +0 -7
- package/qr/index.d.ts +0 -5
- package/qr/public-api.d.ts +0 -7
- package/qr/qr.component.d.ts +0 -31
- package/qr/qrcodegen.d.ts +0 -94
- package/select/index.d.ts +0 -5
- package/select/public-api.d.ts +0 -10
- package/select/select-option-group.component.d.ts +0 -19
- package/select/select-option.component.d.ts +0 -22
- package/select/select.component.d.ts +0 -63
- package/select/select.types.d.ts +0 -17
- package/select/styles/vars.scss +0 -32
- package/skeleton/index.d.ts +0 -1
- package/skeleton/skeleton.component.d.ts +0 -10
- package/spinner/index.d.ts +0 -1
- package/spinner/spinner.component.d.ts +0 -13
- package/spinner/spinner.types.d.ts +0 -7
- package/styles/animations.scss +0 -92
- package/styles/cdk.scss +0 -5
- package/styles/colors.scss +0 -72
- package/styles/grid.scss +0 -99
- package/styles/maps.scss +0 -31
- package/styles/reset.scss +0 -112
- package/styles/variables.scss +0 -72
- package/table/index.d.ts +0 -5
- package/table/public-api.d.ts +0 -11
- package/table/styles/table-filter.scss +0 -202
- package/table/styles/table-sort.scss +0 -47
- package/table/styles/table.scss +0 -232
- package/table/styles/vars.scss +0 -21
- package/table/table-cell/index.d.ts +0 -7
- package/table/table-cell/table-cell.directive.d.ts +0 -8
- package/table/table-filter/index.d.ts +0 -7
- package/table/table-filter/table-filter.component.d.ts +0 -18
- package/table/table-sort/index.d.ts +0 -7
- package/table/table-sort/table-sort.component.d.ts +0 -8
- package/table/table.component.d.ts +0 -33
- package/table/types/index.d.ts +0 -6
- package/table/types/table-cell-context.d.ts +0 -6
- package/table/types/table-columns.d.ts +0 -7
- package/table/types/table-filter-emit.d.ts +0 -5
- package/table/types/table-filter-item.d.ts +0 -6
- package/table/types/table-order-item.d.ts +0 -5
- package/table/types/table-order.enum.d.ts +0 -5
- package/tag/index.d.ts +0 -5
- package/tag/public-api.d.ts +0 -7
- package/tag/styles/_index.scss +0 -32
- package/tag/styles/theming.scss +0 -21
- package/tag/styles/vars.scss +0 -12
- package/tag/tag.component.d.ts +0 -21
- package/textarea/index.d.ts +0 -7
- package/textarea/public-api.d.ts +0 -7
- package/textarea/styles/vars.scss +0 -17
- package/textarea/textarea.component.d.ts +0 -44
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, inject, ElementRef, ViewEncapsulation, Component, NgZone, DestroyRef, Directive } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
*
|
|
8
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
9
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
10
|
+
*
|
|
11
|
+
* Angular adaptation of the SpotlightCard effect by David Haz / reactbits.dev.
|
|
12
|
+
* Original: https://www.reactbits.dev/components/spotlight-card
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Cursor-tracked spotlight card. A soft radial highlight follows the
|
|
16
|
+
* pointer inside the card; fades in on hover, out on leave.
|
|
17
|
+
*
|
|
18
|
+
* Project any content as children — the spotlight overlay sits behind
|
|
19
|
+
* the projected DOM (via a `::before` pseudo with `pointer-events: none`)
|
|
20
|
+
* so clicks pass through naturally.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```html
|
|
24
|
+
* <wr-spotlight-card spotlightColor="rgba(120, 180, 255, 0.25)">
|
|
25
|
+
* <h3>Hover me</h3>
|
|
26
|
+
* </wr-spotlight-card>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @see https://www.reactbits.dev/components/spotlight-card
|
|
30
|
+
*/
|
|
31
|
+
class WrSpotlightCard {
|
|
32
|
+
/**
|
|
33
|
+
* Highlight colour (any CSS colour). When unset, the theme decides:
|
|
34
|
+
* a soft dark tint on light surfaces, white-alpha on dark.
|
|
35
|
+
*/
|
|
36
|
+
spotlightColor = input(null, /* @ts-ignore */
|
|
37
|
+
...(ngDevMode ? [{ debugName: "spotlightColor" }] : /* istanbul ignore next */ []));
|
|
38
|
+
/** Where the spotlight fades out, as a percentage of the gradient. @default 80 */
|
|
39
|
+
radius = input(80, { ...(ngDevMode ? { debugName: "radius" } : /* istanbul ignore next */ {}), transform: (v) => coerceNumberProperty(v, 80) });
|
|
40
|
+
el = inject(ElementRef);
|
|
41
|
+
onMouseMove(event) {
|
|
42
|
+
const host = this.el.nativeElement;
|
|
43
|
+
const rect = host.getBoundingClientRect();
|
|
44
|
+
host.style.setProperty('--wr-spotlight-x', `${event.clientX - rect.left}px`);
|
|
45
|
+
host.style.setProperty('--wr-spotlight-y', `${event.clientY - rect.top}px`);
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSpotlightCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: WrSpotlightCard, isStandalone: true, selector: "wr-spotlight-card", inputs: { spotlightColor: { classPropertyName: "spotlightColor", publicName: "spotlightColor", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mousemove": "onMouseMove($event)" }, properties: { "style.--wr-spotlight-color": "spotlightColor()", "style.--wr-spotlight-radius": "radius() + \"%\"" }, classAttribute: "wr-spotlight-card" }, ngImport: i0, template: '<ng-content />', isInline: true, styles: [".wr-spotlight-card{--wr-spotlight-x: 50%;--wr-spotlight-y: 50%;--wr-spotlight-color: rgba(var(--wr-color-dark-rgb), .08);position:relative;display:block;border-radius:1.5rem;border:1px solid var(--wr-color-light);background-color:var(--wr-color-white);padding:2rem;overflow:hidden;color:var(--wr-color-dark)}.wr-spotlight-card:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at var(--wr-spotlight-x) var(--wr-spotlight-y),var(--wr-spotlight-color),transparent var(--wr-spotlight-radius, 80%));opacity:0;transition:opacity .5s ease;pointer-events:none}.wr-spotlight-card:hover:before,.wr-spotlight-card:focus-within:before{opacity:.6}[data-theme=dark] .wr-spotlight-card{--wr-spotlight-color: rgb(255 255 255 / 25%)}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
49
|
+
}
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSpotlightCard, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{ selector: 'wr-spotlight-card', template: '<ng-content />', encapsulation: ViewEncapsulation.None, host: {
|
|
53
|
+
class: 'wr-spotlight-card',
|
|
54
|
+
'[style.--wr-spotlight-color]': 'spotlightColor()',
|
|
55
|
+
'[style.--wr-spotlight-radius]': 'radius() + "%"',
|
|
56
|
+
'(mousemove)': 'onMouseMove($event)',
|
|
57
|
+
}, styles: [".wr-spotlight-card{--wr-spotlight-x: 50%;--wr-spotlight-y: 50%;--wr-spotlight-color: rgba(var(--wr-color-dark-rgb), .08);position:relative;display:block;border-radius:1.5rem;border:1px solid var(--wr-color-light);background-color:var(--wr-color-white);padding:2rem;overflow:hidden;color:var(--wr-color-dark)}.wr-spotlight-card:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at var(--wr-spotlight-x) var(--wr-spotlight-y),var(--wr-spotlight-color),transparent var(--wr-spotlight-radius, 80%));opacity:0;transition:opacity .5s ease;pointer-events:none}.wr-spotlight-card:hover:before,.wr-spotlight-card:focus-within:before{opacity:.6}[data-theme=dark] .wr-spotlight-card{--wr-spotlight-color: rgb(255 255 255 / 25%)}\n"] }]
|
|
58
|
+
}], propDecorators: { spotlightColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "spotlightColor", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }] } });
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @license
|
|
62
|
+
*
|
|
63
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
64
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
65
|
+
*/
|
|
66
|
+
/**
|
|
67
|
+
* Cursor-follow radial spotlight. Sets the `--wr-spotlight-x` and
|
|
68
|
+
* `--wr-spotlight-y` CSS custom properties on the host based on the
|
|
69
|
+
* pointer position so a `radial-gradient` (or `mask`) in your CSS can
|
|
70
|
+
* follow the cursor.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```html
|
|
74
|
+
* <div class="card" wrSpotlight>…</div>
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* ```scss
|
|
78
|
+
* .card {
|
|
79
|
+
* background: radial-gradient(
|
|
80
|
+
* 400px circle at var(--wr-spotlight-x, 50%) var(--wr-spotlight-y, 50%),
|
|
81
|
+
* rgba(var(--wr-color-primary-rgb), 0.15),
|
|
82
|
+
* transparent 60%
|
|
83
|
+
* );
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
class WrSpotlight {
|
|
88
|
+
/** Optional default coordinates when no pointer is over the host. */
|
|
89
|
+
resetX = input('50%', /* @ts-ignore */
|
|
90
|
+
...(ngDevMode ? [{ debugName: "resetX" }] : /* istanbul ignore next */ []));
|
|
91
|
+
resetY = input('50%', /* @ts-ignore */
|
|
92
|
+
...(ngDevMode ? [{ debugName: "resetY" }] : /* istanbul ignore next */ []));
|
|
93
|
+
el = inject(ElementRef);
|
|
94
|
+
zone = inject(NgZone);
|
|
95
|
+
destroyRef = inject(DestroyRef);
|
|
96
|
+
constructor() {
|
|
97
|
+
const host = this.el.nativeElement;
|
|
98
|
+
host.style.setProperty('--wr-spotlight-x', this.resetX());
|
|
99
|
+
host.style.setProperty('--wr-spotlight-y', this.resetY());
|
|
100
|
+
this.destroyRef.onDestroy(() => {
|
|
101
|
+
host.style.removeProperty('--wr-spotlight-x');
|
|
102
|
+
host.style.removeProperty('--wr-spotlight-y');
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** @internal */
|
|
106
|
+
onMove(event) {
|
|
107
|
+
this.zone.runOutsideAngular(() => {
|
|
108
|
+
const host = this.el.nativeElement;
|
|
109
|
+
const rect = host.getBoundingClientRect();
|
|
110
|
+
const x = ((event.clientX - rect.left) / rect.width) * 100;
|
|
111
|
+
const y = ((event.clientY - rect.top) / rect.height) * 100;
|
|
112
|
+
host.style.setProperty('--wr-spotlight-x', `${x}%`);
|
|
113
|
+
host.style.setProperty('--wr-spotlight-y', `${y}%`);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/** @internal */
|
|
117
|
+
onLeave() {
|
|
118
|
+
const host = this.el.nativeElement;
|
|
119
|
+
host.style.setProperty('--wr-spotlight-x', this.resetX());
|
|
120
|
+
host.style.setProperty('--wr-spotlight-y', this.resetY());
|
|
121
|
+
}
|
|
122
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSpotlight, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
123
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: WrSpotlight, isStandalone: true, selector: "[wrSpotlight]", inputs: { resetX: { classPropertyName: "resetX", publicName: "resetX", isSignal: true, isRequired: false, transformFunction: null }, resetY: { classPropertyName: "resetY", publicName: "resetY", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointermove": "onMove($event)", "pointerleave": "onLeave()" } }, ngImport: i0 });
|
|
124
|
+
}
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSpotlight, decorators: [{
|
|
126
|
+
type: Directive,
|
|
127
|
+
args: [{
|
|
128
|
+
selector: '[wrSpotlight]',
|
|
129
|
+
host: { '(pointermove)': 'onMove($event)', '(pointerleave)': 'onLeave()' },
|
|
130
|
+
}]
|
|
131
|
+
}], ctorParameters: () => [], propDecorators: { resetX: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetX", required: false }] }], resetY: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetY", required: false }] }] } });
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Generated bundle index. Do not edit.
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
export { WrSpotlight, WrSpotlightCard };
|
|
138
|
+
//# sourceMappingURL=ngwr-spotlight-card.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-spotlight-card.mjs","sources":["../../../projects/lib/spotlight-card/spotlight-card.ts","../../../projects/lib/spotlight-card/spotlight.ts","../../../projects/lib/spotlight-card/ngwr-spotlight-card.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the SpotlightCard effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/components/spotlight-card\n */\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Component, ViewEncapsulation, ElementRef, inject, input } from '@angular/core';\n\n/**\n * Cursor-tracked spotlight card. A soft radial highlight follows the\n * pointer inside the card; fades in on hover, out on leave.\n *\n * Project any content as children — the spotlight overlay sits behind\n * the projected DOM (via a `::before` pseudo with `pointer-events: none`)\n * so clicks pass through naturally.\n *\n * @example\n * ```html\n * <wr-spotlight-card spotlightColor=\"rgba(120, 180, 255, 0.25)\">\n * <h3>Hover me</h3>\n * </wr-spotlight-card>\n * ```\n *\n * @see https://www.reactbits.dev/components/spotlight-card\n */\n@Component({\n selector: 'wr-spotlight-card',\n template: '<ng-content />',\n styleUrl: './spotlight-card.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-spotlight-card',\n '[style.--wr-spotlight-color]': 'spotlightColor()',\n '[style.--wr-spotlight-radius]': 'radius() + \"%\"',\n '(mousemove)': 'onMouseMove($event)',\n },\n})\nexport class WrSpotlightCard {\n /**\n * Highlight colour (any CSS colour). When unset, the theme decides:\n * a soft dark tint on light surfaces, white-alpha on dark.\n */\n readonly spotlightColor = input<string | null>(null);\n\n /** Where the spotlight fades out, as a percentage of the gradient. @default 80 */\n readonly radius = input(80, { transform: (v: unknown): number => coerceNumberProperty(v, 80) });\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected onMouseMove(event: MouseEvent): void {\n const host = this.el.nativeElement;\n const rect = host.getBoundingClientRect();\n host.style.setProperty('--wr-spotlight-x', `${event.clientX - rect.left}px`);\n host.style.setProperty('--wr-spotlight-y', `${event.clientY - rect.top}px`);\n }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { DestroyRef, Directive, ElementRef, NgZone, inject, input } from '@angular/core';\n\n/**\n * Cursor-follow radial spotlight. Sets the `--wr-spotlight-x` and\n * `--wr-spotlight-y` CSS custom properties on the host based on the\n * pointer position so a `radial-gradient` (or `mask`) in your CSS can\n * follow the cursor.\n *\n * @example\n * ```html\n * <div class=\"card\" wrSpotlight>…</div>\n * ```\n *\n * ```scss\n * .card {\n * background: radial-gradient(\n * 400px circle at var(--wr-spotlight-x, 50%) var(--wr-spotlight-y, 50%),\n * rgba(var(--wr-color-primary-rgb), 0.15),\n * transparent 60%\n * );\n * }\n * ```\n */\n@Directive({\n selector: '[wrSpotlight]',\n host: { '(pointermove)': 'onMove($event)', '(pointerleave)': 'onLeave()' },\n})\nexport class WrSpotlight {\n /** Optional default coordinates when no pointer is over the host. */\n readonly resetX = input<string>('50%');\n readonly resetY = input<string>('50%');\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n const host = this.el.nativeElement;\n host.style.setProperty('--wr-spotlight-x', this.resetX());\n host.style.setProperty('--wr-spotlight-y', this.resetY());\n this.destroyRef.onDestroy(() => {\n host.style.removeProperty('--wr-spotlight-x');\n host.style.removeProperty('--wr-spotlight-y');\n });\n }\n\n /** @internal */\n protected onMove(event: PointerEvent): void {\n this.zone.runOutsideAngular(() => {\n const host = this.el.nativeElement;\n const rect = host.getBoundingClientRect();\n const x = ((event.clientX - rect.left) / rect.width) * 100;\n const y = ((event.clientY - rect.top) / rect.height) * 100;\n host.style.setProperty('--wr-spotlight-x', `${x}%`);\n host.style.setProperty('--wr-spotlight-y', `${y}%`);\n });\n }\n\n /** @internal */\n protected onLeave(): void {\n const host = this.el.nativeElement;\n host.style.setProperty('--wr-spotlight-x', this.resetX());\n host.style.setProperty('--wr-spotlight-y', this.resetY());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { input, model, inject, ElementRef, PLATFORM_ID, DestroyRef, effect, Directive, ViewEncapsulation, Component } from '@angular/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @license
|
|
8
|
+
*
|
|
9
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
10
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
11
|
+
*
|
|
12
|
+
* Squircle path computation — port of the algorithm from `figma-squircle`
|
|
13
|
+
* (https://github.com/phamfoo/figma-squircle, MIT). Generates an SVG `d`
|
|
14
|
+
* string for a smooth-corner rectangle.
|
|
15
|
+
*/
|
|
16
|
+
function toRadians(deg) {
|
|
17
|
+
return (deg * Math.PI) / 180;
|
|
18
|
+
}
|
|
19
|
+
function cornerParams(cornerRadius, cornerSmoothing, budget) {
|
|
20
|
+
if (cornerRadius <= 0) {
|
|
21
|
+
return { a: 0, b: 0, c: 0, d: 0, p: 0, arcSectionLength: 0, cornerRadius: 0 };
|
|
22
|
+
}
|
|
23
|
+
let p = (1 + cornerSmoothing) * cornerRadius;
|
|
24
|
+
// Cap smoothing so the corner fits within the available budget.
|
|
25
|
+
let s = cornerSmoothing;
|
|
26
|
+
const maxSmoothing = budget / cornerRadius - 1;
|
|
27
|
+
if (maxSmoothing < s) {
|
|
28
|
+
s = Math.max(0, maxSmoothing);
|
|
29
|
+
p = (1 + s) * cornerRadius;
|
|
30
|
+
}
|
|
31
|
+
const arcMeasure = 90 * (1 - s);
|
|
32
|
+
const arcSectionLength = Math.sin(toRadians(arcMeasure / 2)) * cornerRadius * Math.SQRT2;
|
|
33
|
+
const angleAlpha = (90 - arcMeasure) / 2;
|
|
34
|
+
const p3p4 = cornerRadius * Math.tan(toRadians(angleAlpha / 2));
|
|
35
|
+
const angleBeta = 45 * s;
|
|
36
|
+
const c = p3p4 * Math.cos(toRadians(angleBeta));
|
|
37
|
+
const d = c * Math.tan(toRadians(angleBeta));
|
|
38
|
+
const b = (p - arcSectionLength - c - d) / 3;
|
|
39
|
+
const a = 2 * b;
|
|
40
|
+
return { a, b, c, d, p, arcSectionLength, cornerRadius };
|
|
41
|
+
}
|
|
42
|
+
/** Cubic-bezier + arc commands for one corner — anchored at its `p` distance. */
|
|
43
|
+
function drawCorner(c, rotation) {
|
|
44
|
+
if (c.cornerRadius === 0)
|
|
45
|
+
return '';
|
|
46
|
+
const { a, b, c: cc, d, arcSectionLength, cornerRadius } = c;
|
|
47
|
+
switch (rotation) {
|
|
48
|
+
case 'tr':
|
|
49
|
+
return `c ${a} 0 ${a + b} 0 ${a + b + cc} ${d} a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} ${arcSectionLength} c ${d} ${cc} ${d} ${b + cc} ${d} ${a + b + cc}`;
|
|
50
|
+
case 'br':
|
|
51
|
+
return `c 0 ${a} 0 ${a + b} ${-d} ${a + b + cc} a ${cornerRadius} ${cornerRadius} 0 0 1 ${-arcSectionLength} ${arcSectionLength} c ${-cc} ${d} ${-(b + cc)} ${d} ${-(a + b + cc)} ${d}`;
|
|
52
|
+
case 'bl':
|
|
53
|
+
return `c ${-a} 0 ${-(a + b)} 0 ${-(a + b + cc)} ${-d} a ${cornerRadius} ${cornerRadius} 0 0 1 ${-arcSectionLength} ${-arcSectionLength} c ${-d} ${-cc} ${-d} ${-(b + cc)} ${-d} ${-(a + b + cc)}`;
|
|
54
|
+
case 'tl':
|
|
55
|
+
return `c 0 ${-a} 0 ${-(a + b)} ${d} ${-(a + b + cc)} a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} ${-arcSectionLength} c ${cc} ${-d} ${b + cc} ${-d} ${a + b + cc} ${-d}`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate an SVG `d` string for a squircle (smooth-corner rectangle).
|
|
60
|
+
*
|
|
61
|
+
* @param width Box width in user units.
|
|
62
|
+
* @param height Box height in user units.
|
|
63
|
+
* @param radius Either a single number applied to all four corners or a
|
|
64
|
+
* `WrSquircleCorners` object with per-corner radii.
|
|
65
|
+
* @param smoothing 0–1. `0` = standard rounded rectangle; `1` = full
|
|
66
|
+
* iOS-style smooth corner. @default 1
|
|
67
|
+
*/
|
|
68
|
+
function squirclePath(width, height, radius, smoothing = 1) {
|
|
69
|
+
const corners = typeof radius === 'number'
|
|
70
|
+
? { topLeft: radius, topRight: radius, bottomRight: radius, bottomLeft: radius }
|
|
71
|
+
: radius;
|
|
72
|
+
// Budget per corner = half of the shorter dimension.
|
|
73
|
+
const budget = Math.min(width / 2, height / 2);
|
|
74
|
+
const tl = cornerParams(Math.min(corners.topLeft, budget), smoothing, budget);
|
|
75
|
+
const tr = cornerParams(Math.min(corners.topRight, budget), smoothing, budget);
|
|
76
|
+
const br = cornerParams(Math.min(corners.bottomRight, budget), smoothing, budget);
|
|
77
|
+
const bl = cornerParams(Math.min(corners.bottomLeft, budget), smoothing, budget);
|
|
78
|
+
return [
|
|
79
|
+
`M ${tl.p} 0`,
|
|
80
|
+
`L ${width - tr.p} 0`,
|
|
81
|
+
drawCorner(tr, 'tr'),
|
|
82
|
+
`L ${width} ${height - br.p}`,
|
|
83
|
+
drawCorner(br, 'br'),
|
|
84
|
+
`L ${bl.p} ${height}`,
|
|
85
|
+
drawCorner(bl, 'bl'),
|
|
86
|
+
`L 0 ${tl.p}`,
|
|
87
|
+
drawCorner(tl, 'tl'),
|
|
88
|
+
'Z',
|
|
89
|
+
]
|
|
90
|
+
.filter(Boolean)
|
|
91
|
+
.join(' ');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @license
|
|
96
|
+
*
|
|
97
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
98
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
99
|
+
*/
|
|
100
|
+
/**
|
|
101
|
+
* Which corners to squircle. `'all'` = standard four-corner squircle;
|
|
102
|
+
* the side-named values squircle the two corners on that side and leave
|
|
103
|
+
* the other two at 90°. Useful for tab-/segment-style controls where
|
|
104
|
+
* only outer corners need smoothing.
|
|
105
|
+
*/
|
|
106
|
+
function maskToRadii(mask, r) {
|
|
107
|
+
switch (mask) {
|
|
108
|
+
case 'left':
|
|
109
|
+
return { topLeft: r, topRight: 0, bottomRight: 0, bottomLeft: r };
|
|
110
|
+
case 'right':
|
|
111
|
+
return { topLeft: 0, topRight: r, bottomRight: r, bottomLeft: 0 };
|
|
112
|
+
case 'top':
|
|
113
|
+
return { topLeft: r, topRight: r, bottomRight: 0, bottomLeft: 0 };
|
|
114
|
+
case 'bottom':
|
|
115
|
+
return { topLeft: 0, topRight: 0, bottomRight: r, bottomLeft: r };
|
|
116
|
+
case 'none':
|
|
117
|
+
return { topLeft: 0, topRight: 0, bottomRight: 0, bottomLeft: 0 };
|
|
118
|
+
case 'all':
|
|
119
|
+
default:
|
|
120
|
+
return { topLeft: r, topRight: r, bottomRight: r, bottomLeft: r };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Apply a Figma-style smooth-corner ("squircle") `clip-path` to the host
|
|
125
|
+
* element. Re-computes the path whenever the element resizes.
|
|
126
|
+
*
|
|
127
|
+
* Borders: pass `[borderWidth]` (px) + `[borderColor]` and the directive
|
|
128
|
+
* paints a `::before` pseudo with an *inset* squircle path on top of the
|
|
129
|
+
* host. The visible border is the host's own background colour, so set
|
|
130
|
+
* `background: <border-color>` on the host (or use the convenience
|
|
131
|
+
* `[borderColor]` input which writes the host background for you).
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```html
|
|
135
|
+
* <button wrButton wrSquircle [radius]="16">Save</button>
|
|
136
|
+
* <wr-tag wrSquircle>v2.0</wr-tag>
|
|
137
|
+
* <div wrSquircle [radius]="32" [smoothing]="0.8">…</div>
|
|
138
|
+
* <div wrSquircle [borderWidth]="2" borderColor="var(--wr-color-primary)">…</div>
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
class WrSquircle {
|
|
142
|
+
/** Corner radius in CSS pixels. Falls back to `--wr-border-radius-base` × 16. @default 12 */
|
|
143
|
+
radius = input(12, { ...(ngDevMode ? { debugName: "radius" } : /* istanbul ignore next */ {}), transform: (v) => Math.max(0, coerceNumberProperty(v, 12)) });
|
|
144
|
+
/** Smoothing factor — `0` = plain rounded rect; `1` = full smooth iOS corner. @default 1 */
|
|
145
|
+
smoothing = input(1, { ...(ngDevMode ? { debugName: "smoothing" } : /* istanbul ignore next */ {}), transform: (v) => Math.min(1, Math.max(0, coerceNumberProperty(v, 1))) });
|
|
146
|
+
/**
|
|
147
|
+
* Whether the squircle clip-path is applied. When `false`, the directive
|
|
148
|
+
* stays inert (clip-path cleared).
|
|
149
|
+
*
|
|
150
|
+
* Modelled as `model()` so a parent component composing this directive
|
|
151
|
+
* (`inject(WrSquircle, { self: true }).enabled.set(...)`) can flip the
|
|
152
|
+
* state from outside without exposing an `enabled` input on its own API.
|
|
153
|
+
*
|
|
154
|
+
* @default true
|
|
155
|
+
*/
|
|
156
|
+
enabled = model(true, /* @ts-ignore */
|
|
157
|
+
...(ngDevMode ? [{ debugName: "enabled" }] : /* istanbul ignore next */ []));
|
|
158
|
+
/**
|
|
159
|
+
* Border thickness in CSS pixels. `0` disables the border ring entirely.
|
|
160
|
+
* Modelled (not `input()`) so parent components composing this directive
|
|
161
|
+
* can flip it imperatively — e.g. `WrButton` turning on a 1px ring when
|
|
162
|
+
* `shape="squircle" outlined` is active.
|
|
163
|
+
* @default 0
|
|
164
|
+
*/
|
|
165
|
+
borderWidth = model(0, /* @ts-ignore */
|
|
166
|
+
...(ngDevMode ? [{ debugName: "borderWidth" }] : /* istanbul ignore next */ []));
|
|
167
|
+
/**
|
|
168
|
+
* Border colour — any CSS colour. Applied to the host's background so the
|
|
169
|
+
* outer squircle reveals it. Defaults to `currentColor` so the consuming
|
|
170
|
+
* element's text colour drives the ring.
|
|
171
|
+
* @default 'currentColor'
|
|
172
|
+
*/
|
|
173
|
+
borderColor = model('currentColor', /* @ts-ignore */
|
|
174
|
+
...(ngDevMode ? [{ debugName: "borderColor" }] : /* istanbul ignore next */ []));
|
|
175
|
+
/**
|
|
176
|
+
* Which corners to squircle. `'all'` (default) is the standard four-
|
|
177
|
+
* corner shape; `'left'` / `'right'` / `'top'` / `'bottom'` squircle
|
|
178
|
+
* only the two corners on the named side and leave the other two at
|
|
179
|
+
* 90°. `'none'` is equivalent to disabling the directive.
|
|
180
|
+
*
|
|
181
|
+
* Modelled so parent components composing the directive can flip the
|
|
182
|
+
* value imperatively — used by `WrButtonGroup` to squircle only the
|
|
183
|
+
* outer corners of the first / last child.
|
|
184
|
+
*
|
|
185
|
+
* @default 'all'
|
|
186
|
+
*/
|
|
187
|
+
corners = model('all', /* @ts-ignore */
|
|
188
|
+
...(ngDevMode ? [{ debugName: "corners" }] : /* istanbul ignore next */ []));
|
|
189
|
+
el = inject(ElementRef);
|
|
190
|
+
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
191
|
+
destroyRef = inject(DestroyRef);
|
|
192
|
+
observer = null;
|
|
193
|
+
constructor() {
|
|
194
|
+
if (!this.isBrowser)
|
|
195
|
+
return;
|
|
196
|
+
const host = this.el.nativeElement;
|
|
197
|
+
// Reactively re-apply when inputs change.
|
|
198
|
+
effect(() => {
|
|
199
|
+
this.radius();
|
|
200
|
+
this.smoothing();
|
|
201
|
+
this.enabled();
|
|
202
|
+
this.borderWidth();
|
|
203
|
+
this.borderColor();
|
|
204
|
+
this.corners();
|
|
205
|
+
this.apply();
|
|
206
|
+
});
|
|
207
|
+
// Re-apply on resize.
|
|
208
|
+
this.observer = new ResizeObserver(() => this.apply());
|
|
209
|
+
this.observer.observe(host);
|
|
210
|
+
this.destroyRef.onDestroy(() => {
|
|
211
|
+
this.observer?.disconnect();
|
|
212
|
+
this.clear();
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
apply() {
|
|
216
|
+
const host = this.el.nativeElement;
|
|
217
|
+
if (!this.enabled()) {
|
|
218
|
+
this.clear();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const rect = host.getBoundingClientRect();
|
|
222
|
+
if (rect.width === 0 || rect.height === 0)
|
|
223
|
+
return;
|
|
224
|
+
const r = this.radius();
|
|
225
|
+
const s = this.smoothing();
|
|
226
|
+
const radii = maskToRadii(this.corners(), r);
|
|
227
|
+
const outer = squirclePath(rect.width, rect.height, radii, s);
|
|
228
|
+
const value = `path("${outer}")`;
|
|
229
|
+
host.style.clipPath = value;
|
|
230
|
+
host.style.setProperty('-webkit-clip-path', value);
|
|
231
|
+
// Border mode: paint an INNER squircle in a `::before` pseudo on top of
|
|
232
|
+
// the host so the host's own bg only shows at the border-width perimeter.
|
|
233
|
+
const bw = this.borderWidth();
|
|
234
|
+
if (bw > 0) {
|
|
235
|
+
const innerW = Math.max(0, rect.width - bw * 2);
|
|
236
|
+
const innerH = Math.max(0, rect.height - bw * 2);
|
|
237
|
+
const innerR = Math.max(0, r - bw);
|
|
238
|
+
if (innerW > 0 && innerH > 0) {
|
|
239
|
+
const innerRadii = maskToRadii(this.corners(), innerR);
|
|
240
|
+
const inner = squirclePath(innerW, innerH, innerRadii, s);
|
|
241
|
+
host.style.setProperty('--wr-squircle-inner-path', `path("${inner}")`);
|
|
242
|
+
}
|
|
243
|
+
host.style.setProperty('--wr-squircle-border-width', `${bw}px`);
|
|
244
|
+
// Only set the colour var inline when the consumer asked for a
|
|
245
|
+
// specific colour. Leaving the default `'currentColor'` un-inlined
|
|
246
|
+
// lets host CSS (e.g. WrButton's outlined-squircle rule) override
|
|
247
|
+
// the var via SCSS without losing to inline-style specificity.
|
|
248
|
+
const bc = this.borderColor();
|
|
249
|
+
if (bc && bc !== 'currentColor') {
|
|
250
|
+
host.style.setProperty('--wr-squircle-border-color', bc);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
host.style.removeProperty('--wr-squircle-border-color');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
host.style.removeProperty('--wr-squircle-inner-path');
|
|
258
|
+
host.style.removeProperty('--wr-squircle-border-width');
|
|
259
|
+
host.style.removeProperty('--wr-squircle-border-color');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
clear() {
|
|
263
|
+
const host = this.el.nativeElement;
|
|
264
|
+
host.style.removeProperty('clip-path');
|
|
265
|
+
host.style.removeProperty('-webkit-clip-path');
|
|
266
|
+
host.style.removeProperty('--wr-squircle-inner-path');
|
|
267
|
+
host.style.removeProperty('--wr-squircle-border-width');
|
|
268
|
+
host.style.removeProperty('--wr-squircle-border-color');
|
|
269
|
+
}
|
|
270
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSquircle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
271
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: WrSquircle, isStandalone: true, selector: "[wrSquircle]", inputs: { radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, smoothing: { classPropertyName: "smoothing", publicName: "smoothing", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, borderWidth: { classPropertyName: "borderWidth", publicName: "borderWidth", isSignal: true, isRequired: false, transformFunction: null }, borderColor: { classPropertyName: "borderColor", publicName: "borderColor", isSignal: true, isRequired: false, transformFunction: null }, corners: { classPropertyName: "corners", publicName: "corners", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { enabled: "enabledChange", borderWidth: "borderWidthChange", borderColor: "borderColorChange", corners: "cornersChange" }, host: { properties: { "class.wr-squircle--bordered": "borderWidth() > 0 && enabled()" } }, ngImport: i0 });
|
|
272
|
+
}
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSquircle, decorators: [{
|
|
274
|
+
type: Directive,
|
|
275
|
+
args: [{
|
|
276
|
+
selector: '[wrSquircle]',
|
|
277
|
+
host: { '[class.wr-squircle--bordered]': 'borderWidth() > 0 && enabled()' },
|
|
278
|
+
}]
|
|
279
|
+
}], ctorParameters: () => [], propDecorators: { radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], smoothing: [{ type: i0.Input, args: [{ isSignal: true, alias: "smoothing", required: false }] }], enabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "enabled", required: false }] }, { type: i0.Output, args: ["enabledChange"] }], borderWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderWidth", required: false }] }, { type: i0.Output, args: ["borderWidthChange"] }], borderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderColor", required: false }] }, { type: i0.Output, args: ["borderColorChange"] }], corners: [{ type: i0.Input, args: [{ isSignal: true, alias: "corners", required: false }] }, { type: i0.Output, args: ["cornersChange"] }] } });
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* @license
|
|
283
|
+
*
|
|
284
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
285
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
286
|
+
*/
|
|
287
|
+
/**
|
|
288
|
+
* Standalone squircle container. Equivalent to `<div wrSquircle>` but
|
|
289
|
+
* named for ergonomics in templates.
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* ```html
|
|
293
|
+
* <wr-squircle [radius]="24" style="width: 160px; height: 160px; background: var(--wr-color-primary)">
|
|
294
|
+
* …
|
|
295
|
+
* </wr-squircle>
|
|
296
|
+
* ```
|
|
297
|
+
*
|
|
298
|
+
* @see https://ngwr.dev/components/squircle
|
|
299
|
+
*/
|
|
300
|
+
class WrSquircleHost {
|
|
301
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSquircleHost, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
302
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: WrSquircleHost, isStandalone: true, selector: "wr-squircle", host: { classAttribute: "wr-squircle" }, hostDirectives: [{ directive: WrSquircle, inputs: ["radius", "radius", "smoothing", "smoothing", "borderWidth", "borderWidth", "borderColor", "borderColor"] }], ngImport: i0, template: '<ng-content />', isInline: true, encapsulation: i0.ViewEncapsulation.None });
|
|
303
|
+
}
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrSquircleHost, decorators: [{
|
|
305
|
+
type: Component,
|
|
306
|
+
args: [{
|
|
307
|
+
selector: 'wr-squircle',
|
|
308
|
+
template: '<ng-content />',
|
|
309
|
+
encapsulation: ViewEncapsulation.None,
|
|
310
|
+
host: { class: 'wr-squircle' },
|
|
311
|
+
hostDirectives: [{ directive: WrSquircle, inputs: ['radius', 'smoothing', 'borderWidth', 'borderColor'] }],
|
|
312
|
+
}]
|
|
313
|
+
}] });
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Generated bundle index. Do not edit.
|
|
317
|
+
*/
|
|
318
|
+
|
|
319
|
+
export { WrSquircle, WrSquircleHost, squirclePath };
|
|
320
|
+
//# sourceMappingURL=ngwr-squircle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-squircle.mjs","sources":["../../../projects/lib/squircle/compute-squircle-path.ts","../../../projects/lib/squircle/wr-squircle.ts","../../../projects/lib/squircle/wr-squircle-host.ts","../../../projects/lib/squircle/ngwr-squircle.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Squircle path computation — port of the algorithm from `figma-squircle`\n * (https://github.com/phamfoo/figma-squircle, MIT). Generates an SVG `d`\n * string for a smooth-corner rectangle.\n */\n\n/** Per-corner radii for the squircle. */\ninterface WrSquircleCorners {\n readonly topLeft: number;\n readonly topRight: number;\n readonly bottomRight: number;\n readonly bottomLeft: number;\n}\n\ninterface CornerParams {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly p: number;\n readonly arcSectionLength: number;\n readonly cornerRadius: number;\n}\n\nfunction toRadians(deg: number): number {\n return (deg * Math.PI) / 180;\n}\n\nfunction cornerParams(cornerRadius: number, cornerSmoothing: number, budget: number): CornerParams {\n if (cornerRadius <= 0) {\n return { a: 0, b: 0, c: 0, d: 0, p: 0, arcSectionLength: 0, cornerRadius: 0 };\n }\n let p = (1 + cornerSmoothing) * cornerRadius;\n // Cap smoothing so the corner fits within the available budget.\n let s = cornerSmoothing;\n const maxSmoothing = budget / cornerRadius - 1;\n if (maxSmoothing < s) {\n s = Math.max(0, maxSmoothing);\n p = (1 + s) * cornerRadius;\n }\n const arcMeasure = 90 * (1 - s);\n const arcSectionLength = Math.sin(toRadians(arcMeasure / 2)) * cornerRadius * Math.SQRT2;\n const angleAlpha = (90 - arcMeasure) / 2;\n const p3p4 = cornerRadius * Math.tan(toRadians(angleAlpha / 2));\n const angleBeta = 45 * s;\n const c = p3p4 * Math.cos(toRadians(angleBeta));\n const d = c * Math.tan(toRadians(angleBeta));\n const b = (p - arcSectionLength - c - d) / 3;\n const a = 2 * b;\n return { a, b, c, d, p, arcSectionLength, cornerRadius };\n}\n\n/** Cubic-bezier + arc commands for one corner — anchored at its `p` distance. */\nfunction drawCorner(c: CornerParams, rotation: 'tl' | 'tr' | 'br' | 'bl'): string {\n if (c.cornerRadius === 0) return '';\n const { a, b, c: cc, d, arcSectionLength, cornerRadius } = c;\n switch (rotation) {\n case 'tr':\n return `c ${a} 0 ${a + b} 0 ${a + b + cc} ${d} a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} ${arcSectionLength} c ${d} ${cc} ${d} ${b + cc} ${d} ${a + b + cc}`;\n case 'br':\n return `c 0 ${a} 0 ${a + b} ${-d} ${a + b + cc} a ${cornerRadius} ${cornerRadius} 0 0 1 ${-arcSectionLength} ${arcSectionLength} c ${-cc} ${d} ${-(b + cc)} ${d} ${-(a + b + cc)} ${d}`;\n case 'bl':\n return `c ${-a} 0 ${-(a + b)} 0 ${-(a + b + cc)} ${-d} a ${cornerRadius} ${cornerRadius} 0 0 1 ${-arcSectionLength} ${-arcSectionLength} c ${-d} ${-cc} ${-d} ${-(b + cc)} ${-d} ${-(a + b + cc)}`;\n case 'tl':\n return `c 0 ${-a} 0 ${-(a + b)} ${d} ${-(a + b + cc)} a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} ${-arcSectionLength} c ${cc} ${-d} ${b + cc} ${-d} ${a + b + cc} ${-d}`;\n }\n}\n\n/**\n * Generate an SVG `d` string for a squircle (smooth-corner rectangle).\n *\n * @param width Box width in user units.\n * @param height Box height in user units.\n * @param radius Either a single number applied to all four corners or a\n * `WrSquircleCorners` object with per-corner radii.\n * @param smoothing 0–1. `0` = standard rounded rectangle; `1` = full\n * iOS-style smooth corner. @default 1\n */\nfunction squirclePath(width: number, height: number, radius: number | WrSquircleCorners, smoothing = 1): string {\n const corners: WrSquircleCorners =\n typeof radius === 'number'\n ? { topLeft: radius, topRight: radius, bottomRight: radius, bottomLeft: radius }\n : radius;\n\n // Budget per corner = half of the shorter dimension.\n const budget = Math.min(width / 2, height / 2);\n\n const tl = cornerParams(Math.min(corners.topLeft, budget), smoothing, budget);\n const tr = cornerParams(Math.min(corners.topRight, budget), smoothing, budget);\n const br = cornerParams(Math.min(corners.bottomRight, budget), smoothing, budget);\n const bl = cornerParams(Math.min(corners.bottomLeft, budget), smoothing, budget);\n\n return [\n `M ${tl.p} 0`,\n `L ${width - tr.p} 0`,\n drawCorner(tr, 'tr'),\n `L ${width} ${height - br.p}`,\n drawCorner(br, 'br'),\n `L ${bl.p} ${height}`,\n drawCorner(bl, 'bl'),\n `L 0 ${tl.p}`,\n drawCorner(tl, 'tl'),\n 'Z',\n ]\n .filter(Boolean)\n .join(' ');\n}\n\nexport { squirclePath };\nexport type { WrSquircleCorners };\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, Directive, ElementRef, PLATFORM_ID, effect, inject, input, model } from '@angular/core';\n\nimport { squirclePath, type WrSquircleCorners } from './compute-squircle-path';\nimport type { WrSquircleCornerMask } from './interfaces';\n\n/**\n * Which corners to squircle. `'all'` = standard four-corner squircle;\n * the side-named values squircle the two corners on that side and leave\n * the other two at 90°. Useful for tab-/segment-style controls where\n * only outer corners need smoothing.\n */\nfunction maskToRadii(mask: WrSquircleCornerMask, r: number): WrSquircleCorners {\n switch (mask) {\n case 'left':\n return { topLeft: r, topRight: 0, bottomRight: 0, bottomLeft: r };\n case 'right':\n return { topLeft: 0, topRight: r, bottomRight: r, bottomLeft: 0 };\n case 'top':\n return { topLeft: r, topRight: r, bottomRight: 0, bottomLeft: 0 };\n case 'bottom':\n return { topLeft: 0, topRight: 0, bottomRight: r, bottomLeft: r };\n case 'none':\n return { topLeft: 0, topRight: 0, bottomRight: 0, bottomLeft: 0 };\n case 'all':\n default:\n return { topLeft: r, topRight: r, bottomRight: r, bottomLeft: r };\n }\n}\n\n/**\n * Apply a Figma-style smooth-corner (\"squircle\") `clip-path` to the host\n * element. Re-computes the path whenever the element resizes.\n *\n * Borders: pass `[borderWidth]` (px) + `[borderColor]` and the directive\n * paints a `::before` pseudo with an *inset* squircle path on top of the\n * host. The visible border is the host's own background colour, so set\n * `background: <border-color>` on the host (or use the convenience\n * `[borderColor]` input which writes the host background for you).\n *\n * @example\n * ```html\n * <button wrButton wrSquircle [radius]=\"16\">Save</button>\n * <wr-tag wrSquircle>v2.0</wr-tag>\n * <div wrSquircle [radius]=\"32\" [smoothing]=\"0.8\">…</div>\n * <div wrSquircle [borderWidth]=\"2\" borderColor=\"var(--wr-color-primary)\">…</div>\n * ```\n */\n@Directive({\n selector: '[wrSquircle]',\n host: { '[class.wr-squircle--bordered]': 'borderWidth() > 0 && enabled()' },\n})\nexport class WrSquircle {\n /** Corner radius in CSS pixels. Falls back to `--wr-border-radius-base` × 16. @default 12 */\n readonly radius = input(12, { transform: (v: unknown): number => Math.max(0, coerceNumberProperty(v, 12)) });\n\n /** Smoothing factor — `0` = plain rounded rect; `1` = full smooth iOS corner. @default 1 */\n readonly smoothing = input(1, {\n transform: (v: unknown): number => Math.min(1, Math.max(0, coerceNumberProperty(v, 1))),\n });\n\n /**\n * Whether the squircle clip-path is applied. When `false`, the directive\n * stays inert (clip-path cleared).\n *\n * Modelled as `model()` so a parent component composing this directive\n * (`inject(WrSquircle, { self: true }).enabled.set(...)`) can flip the\n * state from outside without exposing an `enabled` input on its own API.\n *\n * @default true\n */\n readonly enabled = model(true);\n\n /**\n * Border thickness in CSS pixels. `0` disables the border ring entirely.\n * Modelled (not `input()`) so parent components composing this directive\n * can flip it imperatively — e.g. `WrButton` turning on a 1px ring when\n * `shape=\"squircle\" outlined` is active.\n * @default 0\n */\n readonly borderWidth = model(0);\n\n /**\n * Border colour — any CSS colour. Applied to the host's background so the\n * outer squircle reveals it. Defaults to `currentColor` so the consuming\n * element's text colour drives the ring.\n * @default 'currentColor'\n */\n readonly borderColor = model<string>('currentColor');\n\n /**\n * Which corners to squircle. `'all'` (default) is the standard four-\n * corner shape; `'left'` / `'right'` / `'top'` / `'bottom'` squircle\n * only the two corners on the named side and leave the other two at\n * 90°. `'none'` is equivalent to disabling the directive.\n *\n * Modelled so parent components composing the directive can flip the\n * value imperatively — used by `WrButtonGroup` to squircle only the\n * outer corners of the first / last child.\n *\n * @default 'all'\n */\n readonly corners = model<WrSquircleCornerMask>('all');\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly destroyRef = inject(DestroyRef);\n private observer: ResizeObserver | null = null;\n\n constructor() {\n if (!this.isBrowser) return;\n const host = this.el.nativeElement;\n // Reactively re-apply when inputs change.\n effect(() => {\n this.radius();\n this.smoothing();\n this.enabled();\n this.borderWidth();\n this.borderColor();\n this.corners();\n this.apply();\n });\n // Re-apply on resize.\n this.observer = new ResizeObserver(() => this.apply());\n this.observer.observe(host);\n this.destroyRef.onDestroy(() => {\n this.observer?.disconnect();\n this.clear();\n });\n }\n\n private apply(): void {\n const host = this.el.nativeElement;\n if (!this.enabled()) {\n this.clear();\n return;\n }\n const rect = host.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return;\n\n const r = this.radius();\n const s = this.smoothing();\n const radii = maskToRadii(this.corners(), r);\n const outer = squirclePath(rect.width, rect.height, radii, s);\n const value = `path(\"${outer}\")`;\n host.style.clipPath = value;\n host.style.setProperty('-webkit-clip-path', value);\n\n // Border mode: paint an INNER squircle in a `::before` pseudo on top of\n // the host so the host's own bg only shows at the border-width perimeter.\n const bw = this.borderWidth();\n if (bw > 0) {\n const innerW = Math.max(0, rect.width - bw * 2);\n const innerH = Math.max(0, rect.height - bw * 2);\n const innerR = Math.max(0, r - bw);\n if (innerW > 0 && innerH > 0) {\n const innerRadii = maskToRadii(this.corners(), innerR);\n const inner = squirclePath(innerW, innerH, innerRadii, s);\n host.style.setProperty('--wr-squircle-inner-path', `path(\"${inner}\")`);\n }\n host.style.setProperty('--wr-squircle-border-width', `${bw}px`);\n // Only set the colour var inline when the consumer asked for a\n // specific colour. Leaving the default `'currentColor'` un-inlined\n // lets host CSS (e.g. WrButton's outlined-squircle rule) override\n // the var via SCSS without losing to inline-style specificity.\n const bc = this.borderColor();\n if (bc && bc !== 'currentColor') {\n host.style.setProperty('--wr-squircle-border-color', bc);\n } else {\n host.style.removeProperty('--wr-squircle-border-color');\n }\n } else {\n host.style.removeProperty('--wr-squircle-inner-path');\n host.style.removeProperty('--wr-squircle-border-width');\n host.style.removeProperty('--wr-squircle-border-color');\n }\n }\n\n private clear(): void {\n const host = this.el.nativeElement;\n host.style.removeProperty('clip-path');\n host.style.removeProperty('-webkit-clip-path');\n host.style.removeProperty('--wr-squircle-inner-path');\n host.style.removeProperty('--wr-squircle-border-width');\n host.style.removeProperty('--wr-squircle-border-color');\n }\n}\n\nexport type { WrSquircleCornerMask } from './interfaces';\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core';\n\nimport { WrSquircle } from './wr-squircle';\n\n/**\n * Standalone squircle container. Equivalent to `<div wrSquircle>` but\n * named for ergonomics in templates.\n *\n * @example\n * ```html\n * <wr-squircle [radius]=\"24\" style=\"width: 160px; height: 160px; background: var(--wr-color-primary)\">\n * …\n * </wr-squircle>\n * ```\n *\n * @see https://ngwr.dev/components/squircle\n */\n@Component({\n selector: 'wr-squircle',\n template: '<ng-content />',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'wr-squircle' },\n hostDirectives: [{ directive: WrSquircle, inputs: ['radius', 'smoothing', 'borderWidth', 'borderColor'] }],\n})\nexport class WrSquircleHost {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, ViewEncapsulation, Component } from '@angular/core';
|
|
3
|
+
import { numAttr } from 'ngwr/utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
*
|
|
8
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
9
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
10
|
+
*
|
|
11
|
+
* Angular adaptation of the StarBorder effect by David Haz / reactbits.dev.
|
|
12
|
+
* Original: https://www.reactbits.dev/animations/star-border
|
|
13
|
+
*
|
|
14
|
+
* Extends the original with `mode` (always animating vs hover-only) and
|
|
15
|
+
* `rays` (mirrored pair vs a single ray).
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Star border — radial "comet" rays orbiting the top and bottom edges of
|
|
19
|
+
* a rounded container. Project any content; it sits on a themed inner
|
|
20
|
+
* panel above the rays.
|
|
21
|
+
*
|
|
22
|
+
* Works as an element or as an attribute on buttons / links.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```html
|
|
26
|
+
* <wr-star-border>Star border</wr-star-border>
|
|
27
|
+
* <button wr-star-border mode="hover" rays="single">Hover me</button>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @see https://ngwr.dev/animations/star-border
|
|
31
|
+
*/
|
|
32
|
+
class WrStarBorder {
|
|
33
|
+
/** Ray colour. When unset, the theme decides: primary on light, white on dark. */
|
|
34
|
+
color = input(null, /* @ts-ignore */
|
|
35
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
36
|
+
/** Seconds per ray sweep. @default 6 */
|
|
37
|
+
speed = input(6, { ...(ngDevMode ? { debugName: "speed" } : /* istanbul ignore next */ {}), transform: numAttr(6) });
|
|
38
|
+
/** Vertical bleed of the rays past the inner panel, in px. @default 1 */
|
|
39
|
+
thickness = input(1, { ...(ngDevMode ? { debugName: "thickness" } : /* istanbul ignore next */ {}), transform: numAttr(1) });
|
|
40
|
+
/** `'infinite'` animates always; `'hover'` only while hovered. @default 'infinite' */
|
|
41
|
+
mode = input('infinite', /* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
43
|
+
/** `'mirror'` runs rays along both edges; `'single'` only the bottom. @default 'mirror' */
|
|
44
|
+
rays = input('mirror', /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "rays" }] : /* istanbul ignore next */ []));
|
|
46
|
+
classes = () => {
|
|
47
|
+
const parts = ['wr-star-border'];
|
|
48
|
+
if (this.mode() === 'hover')
|
|
49
|
+
parts.push('wr-star-border--hover');
|
|
50
|
+
if (this.rays() === 'single')
|
|
51
|
+
parts.push('wr-star-border--single');
|
|
52
|
+
return parts.join(' ');
|
|
53
|
+
};
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrStarBorder, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: WrStarBorder, isStandalone: true, selector: "wr-star-border, [wr-star-border]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, speed: { classPropertyName: "speed", publicName: "speed", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, rays: { classPropertyName: "rays", publicName: "rays", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.--wr-star-border-color": "color()", "style.--wr-star-border-speed": "speed() + \"s\"", "style.padding": "thickness() + \"px 0\"" } }, ngImport: i0, template: "<span class=\"wr-star-border__ray wr-star-border__ray--bottom\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__ray wr-star-border__ray--top\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__inner\"><ng-content /></span>\n", styles: [".wr-star-border{--wr-star-border-color: var(--wr-color-primary);--wr-star-border-speed: 6s;--wr-star-border-radius: 20px;--wr-star-border-stop: 16%;--wr-star-border-opacity: 1;display:inline-block;position:relative;border:0;background:transparent;border-radius:var(--wr-star-border-radius);overflow:hidden;cursor:inherit}.wr-star-border__ray{position:absolute;display:block;width:300%;height:50%;opacity:var(--wr-star-border-opacity);border-radius:50%;background:radial-gradient(circle,var(--wr-star-border-color),transparent var(--wr-star-border-stop));animation:wr-star-border-bottom var(--wr-star-border-speed) linear infinite alternate;z-index:0}.wr-star-border__ray--bottom{bottom:-12px;right:-250%}.wr-star-border__ray--top{top:-12px;left:-250%;animation-name:wr-star-border-top}.wr-star-border--single .wr-star-border__ray--top{display:none}.wr-star-border--hover .wr-star-border__ray{opacity:0;animation:none}.wr-star-border--hover:hover .wr-star-border__ray{animation:wr-star-border-bottom var(--wr-star-border-speed) linear infinite alternate}.wr-star-border--hover:hover .wr-star-border__ray--top{animation-name:wr-star-border-top}.wr-star-border__inner{position:relative;display:block;border:1px solid var(--wr-color-light);background:var(--wr-color-white);color:var(--wr-color-dark);font-size:1rem;text-align:center;padding:1rem 1.625rem;border-radius:var(--wr-star-border-radius);z-index:1}[data-theme=dark] .wr-star-border{--wr-star-border-color: #ffffff;--wr-star-border-stop: 10%;--wr-star-border-opacity: .7}@keyframes wr-star-border-bottom{0%{transform:translate(0);opacity:1}to{transform:translate(-100%);opacity:0}}@keyframes wr-star-border-top{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@media(prefers-reduced-motion:reduce){.wr-star-border__ray{animation:none!important;opacity:0!important}}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: WrStarBorder, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{ selector: 'wr-star-border, [wr-star-border]', encapsulation: ViewEncapsulation.None, host: {
|
|
60
|
+
'[class]': 'classes()',
|
|
61
|
+
'[style.--wr-star-border-color]': 'color()',
|
|
62
|
+
'[style.--wr-star-border-speed]': 'speed() + "s"',
|
|
63
|
+
'[style.padding]': 'thickness() + "px 0"',
|
|
64
|
+
}, template: "<span class=\"wr-star-border__ray wr-star-border__ray--bottom\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__ray wr-star-border__ray--top\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__inner\"><ng-content /></span>\n", styles: [".wr-star-border{--wr-star-border-color: var(--wr-color-primary);--wr-star-border-speed: 6s;--wr-star-border-radius: 20px;--wr-star-border-stop: 16%;--wr-star-border-opacity: 1;display:inline-block;position:relative;border:0;background:transparent;border-radius:var(--wr-star-border-radius);overflow:hidden;cursor:inherit}.wr-star-border__ray{position:absolute;display:block;width:300%;height:50%;opacity:var(--wr-star-border-opacity);border-radius:50%;background:radial-gradient(circle,var(--wr-star-border-color),transparent var(--wr-star-border-stop));animation:wr-star-border-bottom var(--wr-star-border-speed) linear infinite alternate;z-index:0}.wr-star-border__ray--bottom{bottom:-12px;right:-250%}.wr-star-border__ray--top{top:-12px;left:-250%;animation-name:wr-star-border-top}.wr-star-border--single .wr-star-border__ray--top{display:none}.wr-star-border--hover .wr-star-border__ray{opacity:0;animation:none}.wr-star-border--hover:hover .wr-star-border__ray{animation:wr-star-border-bottom var(--wr-star-border-speed) linear infinite alternate}.wr-star-border--hover:hover .wr-star-border__ray--top{animation-name:wr-star-border-top}.wr-star-border__inner{position:relative;display:block;border:1px solid var(--wr-color-light);background:var(--wr-color-white);color:var(--wr-color-dark);font-size:1rem;text-align:center;padding:1rem 1.625rem;border-radius:var(--wr-star-border-radius);z-index:1}[data-theme=dark] .wr-star-border{--wr-star-border-color: #ffffff;--wr-star-border-stop: 10%;--wr-star-border-opacity: .7}@keyframes wr-star-border-bottom{0%{transform:translate(0);opacity:1}to{transform:translate(-100%);opacity:0}}@keyframes wr-star-border-top{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@media(prefers-reduced-motion:reduce){.wr-star-border__ray{animation:none!important;opacity:0!important}}\n"] }]
|
|
65
|
+
}], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], speed: [{ type: i0.Input, args: [{ isSignal: true, alias: "speed", required: false }] }], thickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "thickness", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], rays: [{ type: i0.Input, args: [{ isSignal: true, alias: "rays", required: false }] }] } });
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Generated bundle index. Do not edit.
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
export { WrStarBorder };
|
|
72
|
+
//# sourceMappingURL=ngwr-star-border.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-star-border.mjs","sources":["../../../projects/lib/star-border/star-border.ts","../../../projects/lib/star-border/star-border.html","../../../projects/lib/star-border/ngwr-star-border.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n *\n * Angular adaptation of the StarBorder effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/animations/star-border\n *\n * Extends the original with `mode` (always animating vs hover-only) and\n * `rays` (mirrored pair vs a single ray).\n */\n\nimport { Component, ViewEncapsulation, input } from '@angular/core';\n\nimport { numAttr } from 'ngwr/utils';\n\nimport type { WrStarBorderMode, WrStarBorderRays } from './interfaces';\n\n/**\n * Star border — radial \"comet\" rays orbiting the top and bottom edges of\n * a rounded container. Project any content; it sits on a themed inner\n * panel above the rays.\n *\n * Works as an element or as an attribute on buttons / links.\n *\n * @example\n * ```html\n * <wr-star-border>Star border</wr-star-border>\n * <button wr-star-border mode=\"hover\" rays=\"single\">Hover me</button>\n * ```\n *\n * @see https://ngwr.dev/animations/star-border\n */\n@Component({\n selector: 'wr-star-border, [wr-star-border]',\n templateUrl: './star-border.html',\n styleUrl: './star-border.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'classes()',\n '[style.--wr-star-border-color]': 'color()',\n '[style.--wr-star-border-speed]': 'speed() + \"s\"',\n '[style.padding]': 'thickness() + \"px 0\"',\n },\n})\nexport class WrStarBorder {\n /** Ray colour. When unset, the theme decides: primary on light, white on dark. */\n readonly color = input<string | null>(null);\n\n /** Seconds per ray sweep. @default 6 */\n readonly speed = input(6, { transform: numAttr(6) });\n\n /** Vertical bleed of the rays past the inner panel, in px. @default 1 */\n readonly thickness = input(1, { transform: numAttr(1) });\n\n /** `'infinite'` animates always; `'hover'` only while hovered. @default 'infinite' */\n readonly mode = input<WrStarBorderMode>('infinite');\n\n /** `'mirror'` runs rays along both edges; `'single'` only the bottom. @default 'mirror' */\n readonly rays = input<WrStarBorderRays>('mirror');\n\n protected readonly classes = (): string => {\n const parts = ['wr-star-border'];\n if (this.mode() === 'hover') parts.push('wr-star-border--hover');\n if (this.rays() === 'single') parts.push('wr-star-border--single');\n return parts.join(' ');\n };\n}\n\nexport type { WrStarBorderMode, WrStarBorderRays } from './interfaces';\n","<span class=\"wr-star-border__ray wr-star-border__ray--bottom\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__ray wr-star-border__ray--top\" aria-hidden=\"true\"></span>\n<span class=\"wr-star-border__inner\"><ng-content /></span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;AAWG;AAQH;;;;;;;;;;;;;;AAcG;MAaU,YAAY,CAAA;;IAEd,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;;AAGlC,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAA,CAAG;;AAG3C,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAA,CAAG;;IAG/C,IAAI,GAAG,KAAK,CAAmB,UAAU;6EAAC;;IAG1C,IAAI,GAAG,KAAK,CAAmB,QAAQ;6EAAC;IAE9B,OAAO,GAAG,MAAa;AACxC,QAAA,MAAM,KAAK,GAAG,CAAC,gBAAgB,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAClE,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,IAAA,CAAC;uGArBU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,+3BC9CzB,wPAGA,EAAA,MAAA,EAAA,CAAA,2zDAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD2Ca,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAAA,aAAA,EAG7B,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,gCAAgC,EAAE,SAAS;AAC3C,wBAAA,gCAAgC,EAAE,eAAe;AACjD,wBAAA,iBAAiB,EAAE,sBAAsB;AAC1C,qBAAA,EAAA,QAAA,EAAA,wPAAA,EAAA,MAAA,EAAA,CAAA,2zDAAA,CAAA,EAAA;;;AE5CH;;AAEG;;;;"}
|