ngwr 6.1.1 → 7.1.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/burger/styles/_index.scss +101 -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-burger.mjs +60 -0
- package/fesm2022/ngwr-burger.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 -377
- 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 -649
- 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 +323 -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 +365 -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 +160 -179
- 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 +844 -309
- 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 +217 -206
- 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 +586 -104
- 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 +99 -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/{cdk/utils/index.d.ts → schematics/component-style/schema.js} +2 -8
- package/schematics/component-style/schema.json +20 -0
- package/schematics/icon-set/index.js +96 -0
- package/schematics/icon-set/schema.js +8 -0
- 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/schematics/ng-add/schema.js +8 -0
- package/schematics/ng-add/schema.json +80 -0
- package/schematics/page/index.js +63 -0
- package/schematics/page/schema.js +8 -0
- 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 +357 -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 +103 -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-burger.d.ts +36 -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 +188 -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/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/index.d.ts +0 -32
- package/alert/styles/theming.scss +0 -26
- package/alert/styles/vars.scss +0 -11
- package/avatar/index.d.ts +0 -30
- package/button/index.d.ts +0 -45
- package/button/styles/vars.scss +0 -13
- package/cdk/index.d.ts +0 -24
- package/cdk/rxjs/index.d.ts +0 -40
- package/cdk/types/index.d.ts +0 -27
- package/checkbox/index.d.ts +0 -31
- package/checkbox/styles/vars.scss +0 -16
- package/dialog/index.d.ts +0 -193
- package/dialog/styles/vars.scss +0 -7
- package/divider/index.d.ts +0 -16
- package/dropdown/index.d.ts +0 -68
- 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/index.d.ts +0 -28
- package/icon/index.d.ts +0 -830
- package/icon/styles/vars.scss +0 -3
- package/input/index.d.ts +0 -43
- package/input/styles/vars.scss +0 -17
- package/pagination/index.d.ts +0 -34
- package/pagination/styles/vars.scss +0 -14
- package/pipes/index.d.ts +0 -17
- package/progress/index.d.ts +0 -13
- package/progress/styles/theming.scss +0 -8
- package/progress/styles/vars.scss +0 -6
- package/qr/index.d.ts +0 -127
- package/select/index.d.ts +0 -121
- package/select/styles/vars.scss +0 -32
- package/skeleton/index.d.ts +0 -13
- package/spinner/index.d.ts +0 -23
- 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 -101
- 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/tag/index.d.ts +0 -24
- package/tag/styles/_index.scss +0 -32
- package/tag/styles/theming.scss +0 -21
- package/tag/styles/vars.scss +0 -12
- package/textarea/index.d.ts +0 -47
- package/textarea/styles/vars.scss +0 -17
- /package/{index.d.ts → types/ngwr.d.ts} +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { input, output, signal, computed, inject, ElementRef, DestroyRef, PLATFORM_ID, afterNextRender, ViewEncapsulation, Component } from '@angular/core';
|
|
5
|
+
import { WrPlatform } from 'ngwr/platform';
|
|
6
|
+
import { numAttr } from 'ngwr/utils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @license
|
|
10
|
+
*
|
|
11
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
12
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
13
|
+
*
|
|
14
|
+
* Angular adaptation of the TextType effect by David Haz / reactbits.dev.
|
|
15
|
+
* Original: https://www.reactbits.dev/text-animations/text-type
|
|
16
|
+
*
|
|
17
|
+
* The reactbits version uses GSAP for the cursor blink. This port is
|
|
18
|
+
* dependency-free — vanilla `setTimeout` loop for typing/deleting,
|
|
19
|
+
* pure-CSS keyframes for the cursor blink.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Classic typewriter — types out a string char-by-char, optionally
|
|
23
|
+
* deletes it, then types the next string. Cycles through `[texts]` (or
|
|
24
|
+
* a single string) with a blinking cursor.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```html
|
|
28
|
+
* <wr-typewriter [texts]="['design.', 'ship.', 'iterate.']" />
|
|
29
|
+
* <wr-typewriter
|
|
30
|
+
* text="Hello, ngwr."
|
|
31
|
+
* [loop]="false"
|
|
32
|
+
* [typingSpeed]="35"
|
|
33
|
+
* cursorCharacter="▎"
|
|
34
|
+
* />
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @see https://www.reactbits.dev/text-animations/text-type
|
|
38
|
+
*/
|
|
39
|
+
class WrTypewriter {
|
|
40
|
+
/** Single string. Use either `text` or `texts`. */
|
|
41
|
+
text = input(undefined, /* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
43
|
+
/** Strings to cycle. Use either `text` or `texts`. */
|
|
44
|
+
texts = input(undefined, /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "texts" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/** Per-char typing speed in ms. @default 50 */
|
|
47
|
+
typingSpeed = input(50, { ...(ngDevMode ? { debugName: "typingSpeed" } : /* istanbul ignore next */ {}), transform: numAttr(50) });
|
|
48
|
+
/** Initial delay before typing starts, in ms. @default 0 */
|
|
49
|
+
initialDelay = input(0, { ...(ngDevMode ? { debugName: "initialDelay" } : /* istanbul ignore next */ {}), transform: numAttr(0) });
|
|
50
|
+
/** Pause between sentences (after typing complete, before deleting), in ms. @default 2000 */
|
|
51
|
+
pauseDuration = input(2000, { ...(ngDevMode ? { debugName: "pauseDuration" } : /* istanbul ignore next */ {}), transform: numAttr(2000) });
|
|
52
|
+
/** Per-char deletion speed in ms. @default 30 */
|
|
53
|
+
deletingSpeed = input(30, { ...(ngDevMode ? { debugName: "deletingSpeed" } : /* istanbul ignore next */ {}), transform: numAttr(30) });
|
|
54
|
+
/** Loop back to the first string after the last. @default true */
|
|
55
|
+
loop = input(true, { ...(ngDevMode ? { debugName: "loop" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
56
|
+
/** Show the cursor. @default true */
|
|
57
|
+
showCursor = input(true, { ...(ngDevMode ? { debugName: "showCursor" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
58
|
+
/** Hide the cursor while typing / deleting. @default false */
|
|
59
|
+
hideCursorWhileTyping = input(false, { ...(ngDevMode ? { debugName: "hideCursorWhileTyping" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
60
|
+
/** Cursor glyph. @default '|' */
|
|
61
|
+
cursorCharacter = input('|', /* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [{ debugName: "cursorCharacter" }] : /* istanbul ignore next */ []));
|
|
63
|
+
/** Cursor blink half-cycle in seconds. @default 0.5 */
|
|
64
|
+
cursorBlinkDuration = input(0.5, { ...(ngDevMode ? { debugName: "cursorBlinkDuration" } : /* istanbul ignore next */ {}), transform: numAttr(0.5) });
|
|
65
|
+
/** Cycle through these colours per string. */
|
|
66
|
+
textColors = input([], /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "textColors" }] : /* istanbul ignore next */ []));
|
|
68
|
+
/** Randomise typing speed per char between `min` and `max`. */
|
|
69
|
+
variableSpeed = input(undefined, /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "variableSpeed" }] : /* istanbul ignore next */ []));
|
|
71
|
+
/** Reverse the string (type it backwards). @default false */
|
|
72
|
+
reverseMode = input(false, { ...(ngDevMode ? { debugName: "reverseMode" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
73
|
+
/** Start typing only after the host enters the viewport. @default false */
|
|
74
|
+
startOnVisible = input(false, { ...(ngDevMode ? { debugName: "startOnVisible" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
75
|
+
/** Emits with `(text, index)` when a string finishes typing. */
|
|
76
|
+
sentenceComplete = output();
|
|
77
|
+
displayed = signal('', /* @ts-ignore */
|
|
78
|
+
...(ngDevMode ? [{ debugName: "displayed" }] : /* istanbul ignore next */ []));
|
|
79
|
+
cursorVisible = computed(() => {
|
|
80
|
+
if (!this.showCursor())
|
|
81
|
+
return false;
|
|
82
|
+
if (!this.hideCursorWhileTyping())
|
|
83
|
+
return true;
|
|
84
|
+
// While typing or deleting, cursor stays hidden.
|
|
85
|
+
return this.phase() === 'idle';
|
|
86
|
+
}, /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "cursorVisible" }] : /* istanbul ignore next */ []));
|
|
88
|
+
activeColor = computed(() => {
|
|
89
|
+
const colours = this.textColors();
|
|
90
|
+
if (colours.length === 0)
|
|
91
|
+
return 'inherit';
|
|
92
|
+
return colours[this.currentTextIndex() % colours.length];
|
|
93
|
+
}, /* @ts-ignore */
|
|
94
|
+
...(ngDevMode ? [{ debugName: "activeColor" }] : /* istanbul ignore next */ []));
|
|
95
|
+
/** Resolved list of strings (either `texts` or wrap `text` in an array). */
|
|
96
|
+
textArray = computed(() => {
|
|
97
|
+
const list = this.texts();
|
|
98
|
+
if (list && list.length > 0)
|
|
99
|
+
return list;
|
|
100
|
+
const single = this.text();
|
|
101
|
+
return single ? [single] : [];
|
|
102
|
+
}, /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "textArray" }] : /* istanbul ignore next */ []));
|
|
104
|
+
currentTextIndex = signal(0, /* @ts-ignore */
|
|
105
|
+
...(ngDevMode ? [{ debugName: "currentTextIndex" }] : /* istanbul ignore next */ []));
|
|
106
|
+
phase = signal('idle', /* @ts-ignore */
|
|
107
|
+
...(ngDevMode ? [{ debugName: "phase" }] : /* istanbul ignore next */ []));
|
|
108
|
+
host = inject(ElementRef);
|
|
109
|
+
destroyRef = inject(DestroyRef);
|
|
110
|
+
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
111
|
+
platform = inject(WrPlatform);
|
|
112
|
+
timer;
|
|
113
|
+
isVisible = false;
|
|
114
|
+
constructor() {
|
|
115
|
+
if (!this.isBrowser)
|
|
116
|
+
return;
|
|
117
|
+
afterNextRender(() => this.boot());
|
|
118
|
+
this.destroyRef.onDestroy(() => clearTimeout(this.timer));
|
|
119
|
+
}
|
|
120
|
+
boot() {
|
|
121
|
+
if (this.startOnVisible()) {
|
|
122
|
+
const io = new IntersectionObserver((entries, obs) => {
|
|
123
|
+
for (const e of entries) {
|
|
124
|
+
if (e.isIntersecting) {
|
|
125
|
+
obs.disconnect();
|
|
126
|
+
this.isVisible = true;
|
|
127
|
+
this.scheduleNext(this.initialDelay());
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}, { threshold: 0.1 });
|
|
132
|
+
io.observe(this.host.nativeElement);
|
|
133
|
+
this.destroyRef.onDestroy(() => io.disconnect());
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.isVisible = true;
|
|
137
|
+
this.scheduleNext(this.initialDelay());
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
scheduleNext(delay) {
|
|
141
|
+
clearTimeout(this.timer);
|
|
142
|
+
this.timer = setTimeout(() => this.tick(), delay);
|
|
143
|
+
}
|
|
144
|
+
tick() {
|
|
145
|
+
if (!this.isVisible)
|
|
146
|
+
return;
|
|
147
|
+
const arr = this.textArray();
|
|
148
|
+
if (arr.length === 0)
|
|
149
|
+
return;
|
|
150
|
+
const idx = this.currentTextIndex();
|
|
151
|
+
const raw = arr[idx];
|
|
152
|
+
const target = this.reverseMode() ? raw.split('').reverse().join('') : raw;
|
|
153
|
+
const displayed = this.displayed();
|
|
154
|
+
// Reduced motion: show each sentence whole — no per-char typing or
|
|
155
|
+
// deleting. Multi-text setups still advance on the pause cadence,
|
|
156
|
+
// since the sentence swap itself is content, not decoration.
|
|
157
|
+
if (this.platform.prefersReducedMotion()) {
|
|
158
|
+
if (displayed !== target) {
|
|
159
|
+
this.displayed.set(target);
|
|
160
|
+
this.phase.set('idle');
|
|
161
|
+
this.sentenceComplete.emit({ text: raw, index: idx });
|
|
162
|
+
}
|
|
163
|
+
if (arr.length === 1 || (!this.loop() && idx === arr.length - 1))
|
|
164
|
+
return;
|
|
165
|
+
this.currentTextIndex.set((idx + 1) % arr.length);
|
|
166
|
+
this.scheduleNext(this.pauseDuration());
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (this.phase() === 'deleting') {
|
|
170
|
+
if (displayed.length === 0) {
|
|
171
|
+
// Finished deleting → advance to next text.
|
|
172
|
+
this.phase.set('idle');
|
|
173
|
+
const nextIndex = (idx + 1) % arr.length;
|
|
174
|
+
// Non-loop: stop if we just finished the last sentence.
|
|
175
|
+
if (!this.loop() && idx === arr.length - 1)
|
|
176
|
+
return;
|
|
177
|
+
this.currentTextIndex.set(nextIndex);
|
|
178
|
+
this.scheduleNext(this.pauseDuration());
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Continue deleting.
|
|
182
|
+
this.displayed.set(displayed.slice(0, -1));
|
|
183
|
+
this.scheduleNext(this.deletingSpeed());
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Typing or idle.
|
|
187
|
+
if (displayed.length < target.length) {
|
|
188
|
+
this.phase.set('typing');
|
|
189
|
+
this.displayed.set(target.slice(0, displayed.length + 1));
|
|
190
|
+
const delay = this.variableSpeed()
|
|
191
|
+
? Math.random() * (this.variableSpeed().max - this.variableSpeed().min) + this.variableSpeed().min
|
|
192
|
+
: this.typingSpeed();
|
|
193
|
+
this.scheduleNext(delay);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Typing complete for this sentence.
|
|
197
|
+
this.sentenceComplete.emit({ text: raw, index: idx });
|
|
198
|
+
// Single text + no loop → stop here.
|
|
199
|
+
if (arr.length === 1 && !this.loop()) {
|
|
200
|
+
this.phase.set('idle');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Non-loop on last sentence → stop here.
|
|
204
|
+
if (!this.loop() && idx === arr.length - 1) {
|
|
205
|
+
this.phase.set('idle');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// Start deleting after the pause.
|
|
209
|
+
this.phase.set('deleting');
|
|
210
|
+
this.scheduleNext(this.pauseDuration());
|
|
211
|
+
}
|
|
212
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrTypewriter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: WrTypewriter, isStandalone: true, selector: "wr-typewriter", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, texts: { classPropertyName: "texts", publicName: "texts", isSignal: true, isRequired: false, transformFunction: null }, typingSpeed: { classPropertyName: "typingSpeed", publicName: "typingSpeed", isSignal: true, isRequired: false, transformFunction: null }, initialDelay: { classPropertyName: "initialDelay", publicName: "initialDelay", isSignal: true, isRequired: false, transformFunction: null }, pauseDuration: { classPropertyName: "pauseDuration", publicName: "pauseDuration", isSignal: true, isRequired: false, transformFunction: null }, deletingSpeed: { classPropertyName: "deletingSpeed", publicName: "deletingSpeed", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, showCursor: { classPropertyName: "showCursor", publicName: "showCursor", isSignal: true, isRequired: false, transformFunction: null }, hideCursorWhileTyping: { classPropertyName: "hideCursorWhileTyping", publicName: "hideCursorWhileTyping", isSignal: true, isRequired: false, transformFunction: null }, cursorCharacter: { classPropertyName: "cursorCharacter", publicName: "cursorCharacter", isSignal: true, isRequired: false, transformFunction: null }, cursorBlinkDuration: { classPropertyName: "cursorBlinkDuration", publicName: "cursorBlinkDuration", isSignal: true, isRequired: false, transformFunction: null }, textColors: { classPropertyName: "textColors", publicName: "textColors", isSignal: true, isRequired: false, transformFunction: null }, variableSpeed: { classPropertyName: "variableSpeed", publicName: "variableSpeed", isSignal: true, isRequired: false, transformFunction: null }, reverseMode: { classPropertyName: "reverseMode", publicName: "reverseMode", isSignal: true, isRequired: false, transformFunction: null }, startOnVisible: { classPropertyName: "startOnVisible", publicName: "startOnVisible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sentenceComplete: "sentenceComplete" }, host: { properties: { "style.color": "activeColor()", "style.--wr-typewriter-cursor-blink": "cursorBlinkDuration() + 's'" }, classAttribute: "wr-typewriter" }, ngImport: i0, template: "<span class=\"wr-typewriter__content\">{{ displayed() }}</span>\n@if (cursorVisible()) {\n <span class=\"wr-typewriter__cursor\" aria-hidden=\"true\">{{ cursorCharacter() }}</span>\n}\n", styles: [".wr-typewriter{--wr-typewriter-cursor-blink: .5s;display:inline-flex;align-items:baseline}.wr-typewriter__content{white-space:pre}.wr-typewriter__cursor{display:inline-block;margin-left:1px;animation:wr-typewriter-blink var(--wr-typewriter-cursor-blink) ease-in-out infinite alternate}@keyframes wr-typewriter-blink{0%{opacity:1}to{opacity:0}}@media(prefers-reduced-motion:reduce){.wr-typewriter__cursor{animation:none;opacity:1}}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
214
|
+
}
|
|
215
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrTypewriter, decorators: [{
|
|
216
|
+
type: Component,
|
|
217
|
+
args: [{ selector: 'wr-typewriter', encapsulation: ViewEncapsulation.None, host: {
|
|
218
|
+
class: 'wr-typewriter',
|
|
219
|
+
'[style.color]': 'activeColor()',
|
|
220
|
+
'[style.--wr-typewriter-cursor-blink]': "cursorBlinkDuration() + 's'",
|
|
221
|
+
}, template: "<span class=\"wr-typewriter__content\">{{ displayed() }}</span>\n@if (cursorVisible()) {\n <span class=\"wr-typewriter__cursor\" aria-hidden=\"true\">{{ cursorCharacter() }}</span>\n}\n", styles: [".wr-typewriter{--wr-typewriter-cursor-blink: .5s;display:inline-flex;align-items:baseline}.wr-typewriter__content{white-space:pre}.wr-typewriter__cursor{display:inline-block;margin-left:1px;animation:wr-typewriter-blink var(--wr-typewriter-cursor-blink) ease-in-out infinite alternate}@keyframes wr-typewriter-blink{0%{opacity:1}to{opacity:0}}@media(prefers-reduced-motion:reduce){.wr-typewriter__cursor{animation:none;opacity:1}}\n"] }]
|
|
222
|
+
}], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], texts: [{ type: i0.Input, args: [{ isSignal: true, alias: "texts", required: false }] }], typingSpeed: [{ type: i0.Input, args: [{ isSignal: true, alias: "typingSpeed", required: false }] }], initialDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialDelay", required: false }] }], pauseDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseDuration", required: false }] }], deletingSpeed: [{ type: i0.Input, args: [{ isSignal: true, alias: "deletingSpeed", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], showCursor: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCursor", required: false }] }], hideCursorWhileTyping: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideCursorWhileTyping", required: false }] }], cursorCharacter: [{ type: i0.Input, args: [{ isSignal: true, alias: "cursorCharacter", required: false }] }], cursorBlinkDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "cursorBlinkDuration", required: false }] }], textColors: [{ type: i0.Input, args: [{ isSignal: true, alias: "textColors", required: false }] }], variableSpeed: [{ type: i0.Input, args: [{ isSignal: true, alias: "variableSpeed", required: false }] }], reverseMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverseMode", required: false }] }], startOnVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "startOnVisible", required: false }] }], sentenceComplete: [{ type: i0.Output, args: ["sentenceComplete"] }] } });
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Generated bundle index. Do not edit.
|
|
226
|
+
*/
|
|
227
|
+
|
|
228
|
+
export { WrTypewriter };
|
|
229
|
+
//# sourceMappingURL=ngwr-typewriter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-typewriter.mjs","sources":["../../../projects/lib/typewriter/typewriter.ts","../../../projects/lib/typewriter/typewriter.html","../../../projects/lib/typewriter/ngwr-typewriter.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 TextType effect by David Haz / reactbits.dev.\n * Original: https://www.reactbits.dev/text-animations/text-type\n *\n * The reactbits version uses GSAP for the cursor blink. This port is\n * dependency-free — vanilla `setTimeout` loop for typing/deleting,\n * pure-CSS keyframes for the cursor blink.\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n PLATFORM_ID,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { WrPlatform } from 'ngwr/platform';\nimport { numAttr } from 'ngwr/utils';\n\nimport type { WrTypewriterVariableSpeed } from './interfaces';\n\n/**\n * Classic typewriter — types out a string char-by-char, optionally\n * deletes it, then types the next string. Cycles through `[texts]` (or\n * a single string) with a blinking cursor.\n *\n * @example\n * ```html\n * <wr-typewriter [texts]=\"['design.', 'ship.', 'iterate.']\" />\n * <wr-typewriter\n * text=\"Hello, ngwr.\"\n * [loop]=\"false\"\n * [typingSpeed]=\"35\"\n * cursorCharacter=\"▎\"\n * />\n * ```\n *\n * @see https://www.reactbits.dev/text-animations/text-type\n */\n@Component({\n selector: 'wr-typewriter',\n templateUrl: './typewriter.html',\n styleUrl: './typewriter.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'wr-typewriter',\n '[style.color]': 'activeColor()',\n '[style.--wr-typewriter-cursor-blink]': \"cursorBlinkDuration() + 's'\",\n },\n})\nexport class WrTypewriter {\n /** Single string. Use either `text` or `texts`. */\n readonly text = input<string | undefined>(undefined);\n\n /** Strings to cycle. Use either `text` or `texts`. */\n readonly texts = input<readonly string[] | undefined>(undefined);\n\n /** Per-char typing speed in ms. @default 50 */\n readonly typingSpeed = input(50, { transform: numAttr(50) });\n\n /** Initial delay before typing starts, in ms. @default 0 */\n readonly initialDelay = input(0, { transform: numAttr(0) });\n\n /** Pause between sentences (after typing complete, before deleting), in ms. @default 2000 */\n readonly pauseDuration = input(2000, { transform: numAttr(2000) });\n\n /** Per-char deletion speed in ms. @default 30 */\n readonly deletingSpeed = input(30, { transform: numAttr(30) });\n\n /** Loop back to the first string after the last. @default true */\n readonly loop = input(true, { transform: coerceBooleanProperty });\n\n /** Show the cursor. @default true */\n readonly showCursor = input(true, { transform: coerceBooleanProperty });\n\n /** Hide the cursor while typing / deleting. @default false */\n readonly hideCursorWhileTyping = input(false, { transform: coerceBooleanProperty });\n\n /** Cursor glyph. @default '|' */\n readonly cursorCharacter = input('|');\n\n /** Cursor blink half-cycle in seconds. @default 0.5 */\n readonly cursorBlinkDuration = input(0.5, { transform: numAttr(0.5) });\n\n /** Cycle through these colours per string. */\n readonly textColors = input<readonly string[]>([]);\n\n /** Randomise typing speed per char between `min` and `max`. */\n readonly variableSpeed = input<WrTypewriterVariableSpeed | undefined>(undefined);\n\n /** Reverse the string (type it backwards). @default false */\n readonly reverseMode = input(false, { transform: coerceBooleanProperty });\n\n /** Start typing only after the host enters the viewport. @default false */\n readonly startOnVisible = input(false, { transform: coerceBooleanProperty });\n\n /** Emits with `(text, index)` when a string finishes typing. */\n readonly sentenceComplete = output<{ text: string; index: number }>();\n\n protected readonly displayed = signal('');\n protected readonly cursorVisible = computed(() => {\n if (!this.showCursor()) return false;\n if (!this.hideCursorWhileTyping()) return true;\n // While typing or deleting, cursor stays hidden.\n return this.phase() === 'idle';\n });\n protected readonly activeColor = computed(() => {\n const colours = this.textColors();\n if (colours.length === 0) return 'inherit';\n return colours[this.currentTextIndex() % colours.length];\n });\n\n /** Resolved list of strings (either `texts` or wrap `text` in an array). */\n private readonly textArray = computed<readonly string[]>(() => {\n const list = this.texts();\n if (list && list.length > 0) return list;\n const single = this.text();\n return single ? [single] : [];\n });\n\n private readonly currentTextIndex = signal(0);\n private readonly phase = signal<'idle' | 'typing' | 'deleting'>('idle');\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly platform = inject(WrPlatform);\n\n private timer: ReturnType<typeof setTimeout> | undefined;\n private isVisible = false;\n\n constructor() {\n if (!this.isBrowser) return;\n afterNextRender(() => this.boot());\n this.destroyRef.onDestroy(() => clearTimeout(this.timer));\n }\n\n private boot(): void {\n if (this.startOnVisible()) {\n const io = new IntersectionObserver(\n (entries, obs) => {\n for (const e of entries) {\n if (e.isIntersecting) {\n obs.disconnect();\n this.isVisible = true;\n this.scheduleNext(this.initialDelay());\n break;\n }\n }\n },\n { threshold: 0.1 }\n );\n io.observe(this.host.nativeElement);\n this.destroyRef.onDestroy(() => io.disconnect());\n } else {\n this.isVisible = true;\n this.scheduleNext(this.initialDelay());\n }\n }\n\n private scheduleNext(delay: number): void {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => this.tick(), delay);\n }\n\n private tick(): void {\n if (!this.isVisible) return;\n const arr = this.textArray();\n if (arr.length === 0) return;\n\n const idx = this.currentTextIndex();\n const raw = arr[idx];\n const target = this.reverseMode() ? raw.split('').reverse().join('') : raw;\n const displayed = this.displayed();\n\n // Reduced motion: show each sentence whole — no per-char typing or\n // deleting. Multi-text setups still advance on the pause cadence,\n // since the sentence swap itself is content, not decoration.\n if (this.platform.prefersReducedMotion()) {\n if (displayed !== target) {\n this.displayed.set(target);\n this.phase.set('idle');\n this.sentenceComplete.emit({ text: raw, index: idx });\n }\n if (arr.length === 1 || (!this.loop() && idx === arr.length - 1)) return;\n this.currentTextIndex.set((idx + 1) % arr.length);\n this.scheduleNext(this.pauseDuration());\n return;\n }\n\n if (this.phase() === 'deleting') {\n if (displayed.length === 0) {\n // Finished deleting → advance to next text.\n this.phase.set('idle');\n const nextIndex = (idx + 1) % arr.length;\n // Non-loop: stop if we just finished the last sentence.\n if (!this.loop() && idx === arr.length - 1) return;\n this.currentTextIndex.set(nextIndex);\n this.scheduleNext(this.pauseDuration());\n return;\n }\n // Continue deleting.\n this.displayed.set(displayed.slice(0, -1));\n this.scheduleNext(this.deletingSpeed());\n return;\n }\n\n // Typing or idle.\n if (displayed.length < target.length) {\n this.phase.set('typing');\n this.displayed.set(target.slice(0, displayed.length + 1));\n const delay = this.variableSpeed()\n ? Math.random() * (this.variableSpeed()!.max - this.variableSpeed()!.min) + this.variableSpeed()!.min\n : this.typingSpeed();\n this.scheduleNext(delay);\n return;\n }\n\n // Typing complete for this sentence.\n this.sentenceComplete.emit({ text: raw, index: idx });\n\n // Single text + no loop → stop here.\n if (arr.length === 1 && !this.loop()) {\n this.phase.set('idle');\n return;\n }\n // Non-loop on last sentence → stop here.\n if (!this.loop() && idx === arr.length - 1) {\n this.phase.set('idle');\n return;\n }\n\n // Start deleting after the pause.\n this.phase.set('deleting');\n this.scheduleNext(this.pauseDuration());\n }\n}\n\nexport type { WrTypewriterVariableSpeed } from './interfaces';\n","<span class=\"wr-typewriter__content\">{{ displayed() }}</span>\n@if (cursorVisible()) {\n <span class=\"wr-typewriter__cursor\" aria-hidden=\"true\">{{ cursorCharacter() }}</span>\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,79 @@
|
|
|
1
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, computed, 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
|
+
/**
|
|
12
|
+
* Semantic typography directive. Attaches to any native element and
|
|
13
|
+
* applies the visual treatment for the chosen `variant` (`h1`–`h6`,
|
|
14
|
+
* `display`, `lead`, `body`, `small`, `caption`, `overline`, `code`).
|
|
15
|
+
*
|
|
16
|
+
* Reads from the same `--wr-text-*` / `--wr-font-weight-*` / `--wr-leading-*`
|
|
17
|
+
* tokens used by the opt-in typography utility classes — themeable by
|
|
18
|
+
* overriding tokens at `:root`.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```html
|
|
22
|
+
* <h1 wrTypography variant="display">Build interfaces</h1>
|
|
23
|
+
* <h2 wrTypography variant="h2" tone="primary">that feel alive.</h2>
|
|
24
|
+
* <p wrTypography variant="lead">A developer-first library.</p>
|
|
25
|
+
* <span wrTypography variant="caption" tone="medium">v1.6.0 — released today</span>
|
|
26
|
+
* <code wrTypography variant="code">inject(WrTheme)</code>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @see https://ngwr.dev/typography/overview
|
|
30
|
+
*/
|
|
31
|
+
class WrTypography {
|
|
32
|
+
/** Visual variant. @default 'body' */
|
|
33
|
+
variant = input('body', /* @ts-ignore */
|
|
34
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
35
|
+
/**
|
|
36
|
+
* Color tone. `null` (default) keeps the variant's own color — the base
|
|
37
|
+
* dark for headings/body, medium for lead/caption, primary for links.
|
|
38
|
+
*/
|
|
39
|
+
tone = input(null, /* @ts-ignore */
|
|
40
|
+
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
41
|
+
/** Horizontal alignment. */
|
|
42
|
+
align = input(null, /* @ts-ignore */
|
|
43
|
+
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
44
|
+
/** Truncate to single line with ellipsis. @default false */
|
|
45
|
+
truncate = input(false, { ...(ngDevMode ? { debugName: "truncate" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
46
|
+
/** Render with monospace font. @default false (auto-true for `code`) */
|
|
47
|
+
mono = input(false, { ...(ngDevMode ? { debugName: "mono" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
|
|
48
|
+
classes = computed(() => {
|
|
49
|
+
const parts = ['wr-typography', `wr-typography--${this.variant()}`];
|
|
50
|
+
const tone = this.tone();
|
|
51
|
+
if (tone)
|
|
52
|
+
parts.push(`wr-typography--tone-${tone}`);
|
|
53
|
+
const align = this.align();
|
|
54
|
+
if (align)
|
|
55
|
+
parts.push(`wr-typography--align-${align}`);
|
|
56
|
+
if (this.truncate())
|
|
57
|
+
parts.push('wr-typography--truncate');
|
|
58
|
+
if (this.mono() || this.variant() === 'code')
|
|
59
|
+
parts.push('wr-typography--mono');
|
|
60
|
+
return parts.join(' ');
|
|
61
|
+
}, /* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrTypography, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
64
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: WrTypography, isStandalone: true, selector: "[wrTypography]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, truncate: { classPropertyName: "truncate", publicName: "truncate", isSignal: true, isRequired: false, transformFunction: null }, mono: { classPropertyName: "mono", publicName: "mono", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0 });
|
|
65
|
+
}
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: WrTypography, decorators: [{
|
|
67
|
+
type: Directive,
|
|
68
|
+
args: [{
|
|
69
|
+
selector: '[wrTypography]',
|
|
70
|
+
host: { '[class]': 'classes()' },
|
|
71
|
+
}]
|
|
72
|
+
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], truncate: [{ type: i0.Input, args: [{ isSignal: true, alias: "truncate", required: false }] }], mono: [{ type: i0.Input, args: [{ isSignal: true, alias: "mono", required: false }] }] } });
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Generated bundle index. Do not edit.
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
export { WrTypography };
|
|
79
|
+
//# sourceMappingURL=ngwr-typography.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngwr-typography.mjs","sources":["../../../projects/lib/typography/typography.ts","../../../projects/lib/typography/ngwr-typography.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\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, computed, input } from '@angular/core';\n\nimport type { WrTypographyAlign, WrTypographyTone, WrTypographyVariant } from './interfaces';\n\n/**\n * Semantic typography directive. Attaches to any native element and\n * applies the visual treatment for the chosen `variant` (`h1`–`h6`,\n * `display`, `lead`, `body`, `small`, `caption`, `overline`, `code`).\n *\n * Reads from the same `--wr-text-*` / `--wr-font-weight-*` / `--wr-leading-*`\n * tokens used by the opt-in typography utility classes — themeable by\n * overriding tokens at `:root`.\n *\n * @example\n * ```html\n * <h1 wrTypography variant=\"display\">Build interfaces</h1>\n * <h2 wrTypography variant=\"h2\" tone=\"primary\">that feel alive.</h2>\n * <p wrTypography variant=\"lead\">A developer-first library.</p>\n * <span wrTypography variant=\"caption\" tone=\"medium\">v1.6.0 — released today</span>\n * <code wrTypography variant=\"code\">inject(WrTheme)</code>\n * ```\n *\n * @see https://ngwr.dev/typography/overview\n */\n@Directive({\n selector: '[wrTypography]',\n host: { '[class]': 'classes()' },\n})\nexport class WrTypography {\n /** Visual variant. @default 'body' */\n readonly variant = input<WrTypographyVariant>('body');\n\n /**\n * Color tone. `null` (default) keeps the variant's own color — the base\n * dark for headings/body, medium for lead/caption, primary for links.\n */\n readonly tone = input<WrTypographyTone | null>(null);\n\n /** Horizontal alignment. */\n readonly align = input<WrTypographyAlign | null>(null);\n\n /** Truncate to single line with ellipsis. @default false */\n readonly truncate = input(false, { transform: coerceBooleanProperty });\n\n /** Render with monospace font. @default false (auto-true for `code`) */\n readonly mono = input(false, { transform: coerceBooleanProperty });\n\n protected readonly classes = computed(() => {\n const parts = ['wr-typography', `wr-typography--${this.variant()}`];\n const tone = this.tone();\n if (tone) parts.push(`wr-typography--tone-${tone}`);\n const align = this.align();\n if (align) parts.push(`wr-typography--align-${align}`);\n if (this.truncate()) parts.push('wr-typography--truncate');\n if (this.mono() || this.variant() === 'code') parts.push('wr-typography--mono');\n return parts.join(' ');\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAAA;;;;;AAKG;AAOH;;;;;;;;;;;;;;;;;;;AAmBG;MAKU,YAAY,CAAA;;IAEd,OAAO,GAAG,KAAK,CAAsB,MAAM;gFAAC;AAErD;;;AAGG;IACM,IAAI,GAAG,KAAK,CAA0B,IAAI;6EAAC;;IAG3C,KAAK,GAAG,KAAK,CAA2B,IAAI;8EAAC;;IAG7C,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,qBAAqB,EAAA,CAAG;;IAG7D,IAAI,GAAG,KAAK,CAAC,KAAK,4EAAI,SAAS,EAAE,qBAAqB,EAAA,CAAG;AAE/C,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;AACnE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAA,CAAE,CAAC;AACnD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAA,CAAE,CAAC;QACtD,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAC1D,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC/E,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,CAAC;gFAAC;uGA5BS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AACjC,iBAAA;;;ACnCD;;AAEG;;;;"}
|