From af7e863f4d0722b9336feeb0ae71a9bed157910c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87etin?= <69278826+cetincakiroglu@users.noreply.github.com> Date: Fri, 22 Jul 2022 13:13:50 +0300 Subject: [PATCH] Update to new structure --- .gitignore | 32 +- CHANGELOG.md | 10 + package.json | 6 +- src/app/api/appconfig.ts | 6 - src/app/api/image.ts | 6 - src/app/app-routing.module.ts | 74 +- src/app/app.component.spec.ts | 27 - src/app/app.config.component.html | 242 - src/app/app.config.component.ts | 75 - src/app/app.footer.component.html | 5 - src/app/app.footer.component.ts | 10 - src/app/app.main.component.html | 21 - src/app/app.main.component.ts | 182 - src/app/app.menu.component.ts | 146 - src/app/app.menuitem.component.ts | 152 - src/app/app.module.ts | 290 +- src/app/app.topbar.component.html | 29 - src/app/app.topbar.component.ts | 15 - src/app/components/access/access.component.ts | 7 - src/app/components/blocks/blocks.component.ts | 407 - src/app/components/button/button.component.ts | 27 - src/app/components/charts/charts.component.ts | 374 - .../dashboard/dashboard.component.ts | 131 - .../documentation.component.html | 69 - src/app/components/empty/empty.component.ts | 6 - src/app/components/error/error.component.ts | 7 - src/app/components/file/file.component.ts | 21 - src/app/components/icons/icons.component.html | 57 - src/app/components/icons/icons.component.ts | 52 - src/app/components/input/input.component.ts | 128 - .../components/landing/landing.component.html | 357 - .../components/landing/landing.component.ts | 83 - src/app/components/list/list.component.ts | 67 - src/app/components/login/login.component.ts | 51 - src/app/components/media/media.component.ts | 70 - .../menus/confirmation.component.ts | 15 - src/app/components/menus/menus.module.ts | 27 - src/app/components/menus/payment.component.ts | 15 - .../components/menus/personal.component.ts | 15 - src/app/components/menus/seat.component.ts | 15 - src/app/components/misc/misc.component.ts | 19 - .../components/notfound/notfound.component.ts | 7 - src/app/components/table/table.component.ts | 145 - .../timeline/timeline.component.html | 34 - .../components/timeline/timeline.component.ts | 72 - src/app/{ => demo}/api/customer.ts | 0 src/app/demo/api/image.ts | 6 + src/app/{ => demo}/api/product.ts | 2 +- .../auth/access/access-routing.module.ts | 11 + .../auth}/access/access.component.html | 4 +- .../auth/access/access.component.ts | 7 + .../components/auth/access/access.module.ts | 16 + .../components/auth/auth-routing.module.ts | 12 + src/app/demo/components/auth/auth.module.ts | 11 + .../auth/error/error-routing.module.ts | 11 + .../auth}/error/error.component.html | 4 +- .../components/auth/error/error.component.ts | 7 + .../components/auth/error/error.module.ts | 15 + .../auth/login/login-routing.module.ts | 11 + .../auth}/login/login.component.html | 12 +- .../components/auth/login/login.component.ts | 33 + .../components/auth/login/login.module.ts | 23 + .../demo/components/code/code.component.scss | 44 + .../components/code/code.component.ts} | 6 +- .../dashboard/dashboard-routing.module.ts | 11 + .../dashboard/dashboard.component.html | 10 +- .../dashboard/dashboard.component.ts | 103 + .../components/dashboard/dashboard.module.ts | 27 + .../documentation-routing.module.ts | 11 + .../documentation.component.html | 137 + .../documentation/documentation.component.ts | 2 +- .../documentation/documentation.module.ts | 15 + .../landing/landing-routing.module.ts | 11 + .../components/landing/landing.component.html | 359 + .../components/landing/landing.component.ts | 63 + .../demo/components/landing/landing.module.ts | 23 + .../notfound/notfound.component.html | 2 +- .../components/notfound/notfound.component.ts | 7 + .../pages/crud/crud-routing.module.ts | 11 + .../pages}/crud/crud.component.html | 6 +- .../components/pages}/crud/crud.component.ts | 69 +- .../demo/components/pages/crud/crud.module.ts | 41 + .../pages/empty/emptydemo-routing.module.ts | 11 + .../pages/empty/emptydemo.component.html} | 0 .../pages/empty/emptydemo.component.ts | 6 + .../pages/empty/emptydemo.module.ts | 13 + .../components/pages/pages-routing.module.ts | 12 + src/app/demo/components/pages/pages.module.ts | 12 + .../timeline/timelinedemo-routing.module.ts | 11 + .../timeline/timelinedemo.component.html | 90 + .../pages/timeline/timelinedemo.component.ts | 27 + .../pages/timeline/timelinedemo.module.ts | 19 + .../pages/timeline/timelinedemo.scss | 21 + .../primeblocks}/blocks/blocks.component.html | 4 +- .../primeblocks/blocks/blocks.component.ts | 399 + .../blockviewer/blockviewer.component.scss | 5 +- .../blockviewer/blockviewer.component.ts | 45 +- .../primeblocks/primeblocks-routing.module.ts | 11 + .../primeblocks/primeblocks.module.ts | 33 + .../uikit/button/buttondemo-routing.module.ts | 11 + .../uikit/button/buttondemo.component.html} | 10 +- .../uikit/button/buttondemo.component.ts | 27 + .../uikit/button/buttondemo.module.ts | 21 + .../uikit/charts/charts-routing.module.ts | 12 + .../uikit}/charts/charts.component.html | 0 .../uikit/charts/charts.component.ts | 268 + .../components/uikit/charts/charts.module.ts | 15 + .../uikit/file/filedemo-routing.module.ts | 11 + .../uikit/file/filedemo.component.html} | 7 +- .../uikit/file/filedemo.component.ts | 25 + .../components/uikit/file/filedemo.module.ts | 17 + .../floatlabeldemo-routing.module.ts | 11 + .../floatlabel/floatlabeldemo.component.html} | 33 +- .../floatlabel/floatlabeldemo.component.ts} | 23 +- .../uikit/floatlabel/floatlabeldemo.module.ts | 35 + .../formlayout/formlayout-routing.module.ts | 11 + .../formlayout/formlayout.component.html | 0 .../uikit}/formlayout/formlayout.component.ts | 4 +- .../uikit/formlayout/formlayout.module.ts | 24 + .../uikit/input/inputdemo-routing.module.ts | 11 + .../uikit/input/inputdemo.component.html} | 135 +- .../uikit/input/inputdemo.component.ts | 124 + .../uikit/input/inputdemo.module.ts | 59 + .../invalidstatedemo-routing.module.ts | 11 + .../invalid/invalidstatedemo.component.html} | 2 + .../invalid/invalidstatedemo.component.ts} | 22 +- .../uikit/invalid/invalidstatedemo.module.ts | 37 + .../uikit/list/listdemo-routing.module.ts | 11 + .../uikit/list/listdemo.component.html} | 8 +- .../uikit/list/listdemo.component.ts | 72 + .../components/uikit/list/listdemo.module.ts | 29 + .../uikit/media/mediademo-routing.module.ts | 11 + .../uikit/media/mediademo.component.html} | 0 .../uikit/media/mediademo.component.ts | 63 + .../uikit/media/mediademo.module.ts | 21 + .../uikit/menus/confirmation.component.ts | 12 + .../uikit}/menus/menus.component.html | 0 .../uikit}/menus/menus.component.ts | 61 +- .../components/uikit/menus/menus.module.ts | 54 + .../uikit/menus/payment.component.ts | 12 + .../uikit/menus/personal.component.ts | 12 + .../components/uikit/menus/seat.component.ts | 12 + .../messages/messagesdemo-routing.module.ts | 11 + .../messages/messagesdemo.component.html} | 0 .../uikit/messages/messagesdemo.component.ts} | 11 +- .../uikit/messages/messagesdemo.module.ts | 23 + .../uikit/misc/miscdemo-routing.module.ts | 11 + .../uikit/misc/miscdemo.component.html} | 16 +- .../uikit/misc/miscdemo.component.ts | 25 + .../components/uikit/misc/miscdemo.module.ts | 33 + .../overlays/overlaysdemo-routing.module.ts | 11 + .../overlays/overlaysdemo.component.html} | 4 +- .../uikit/overlays/overlaysdemo.component.ts} | 39 +- .../uikit/overlays/overlaysdemo.module.ts | 37 + .../uikit/panels/panelsdemo-routing.module.ts | 11 + .../uikit/panels/panelsdemo.component.html} | 4 +- .../uikit/panels/panelsdemo.component.ts} | 12 +- .../uikit/panels/panelsdemo.module.ts | 39 + .../uikit/table/tabledemo-routing.module.ts | 11 + .../uikit/table/tabledemo.component.html} | 8 +- .../uikit/table/tabledemo.component.ts | 150 + .../uikit/table/tabledemo.module.ts | 37 + .../uikit/tree/treedemo-routing.module.ts | 11 + .../uikit/tree/treedemo.component.html} | 13 +- .../uikit/tree/treedemo.component.ts} | 23 +- .../components/uikit/tree/treedemo.module.ts | 19 + .../components/uikit/uikit-routing.module.ts | 25 + src/app/demo/components/uikit/uikit.module.ts | 12 + .../utilities/icons/icons.component.html | 56 + .../utilities/icons/icons.component.ts | 50 + .../utilities/utilities-routing.module.ts | 11 + .../components/utilities/utilities.module.ts | 17 + .../service/country.service.ts} | 8 +- .../service/customer.service.ts} | 1 - .../service/event.service.ts} | 8 +- .../service/icon.service.ts} | 6 +- src/app/demo/service/node.service.ts | 33 + .../service/photo.service.ts} | 9 +- .../service/product.service.ts} | 25 +- src/app/layout/api/menuchangeevent.ts | 4 + src/app/layout/app.footer.component.html | 5 + src/app/layout/app.footer.component.ts | 10 + src/app/layout/app.layout.component.html | 14 + src/app/layout/app.layout.component.ts | 97 + src/app/layout/app.layout.module.ts | 46 + src/app/layout/app.menu.component.html | 11 + src/app/layout/app.menu.component.ts | 166 + .../{service => layout}/app.menu.service.ts | 13 +- src/app/layout/app.menuitem.component.ts | 166 + src/app/layout/app.sidebar.component.html | 1 + src/app/layout/app.sidebar.component.ts | 11 + src/app/layout/app.topbar.component.html | 31 + src/app/layout/app.topbar.component.ts | 14 + .../layout/config/app.config.component.html | 242 + src/app/layout/config/app.config.component.ts | 105 + src/app/layout/config/config.module.ts | 26 + src/app/layout/service/app.layout.service.ts | 112 + src/app/service/app.config.service.ts | 27 - src/app/service/nodeservice.ts | 34 - src/assets/demo/data/files-lazy.json | 0 src/assets/demo/data/files.json | 0 src/assets/demo/data/filesystem-lazy.json | 0 src/assets/demo/data/filesystem.json | 0 src/assets/demo/data/scheduleevents.json | 0 .../images/access}/asset-access.svg | 0 .../images/access}/logo-orange.svg | 0 .../images/error}/asset-error.svg | 0 .../images/error}/logo-error.svg | 0 .../flag}/flag_placeholder.png | Bin .../images/landing}/enterprise.svg | 0 .../images => demo/images/landing}/free.svg | 0 .../images/landing}/mockup-desktop.svg | 0 .../images => demo/images/landing}/mockup.svg | 0 .../images/landing}/new-badge.svg | 0 .../images/landing}/peak-logo.svg | 0 .../images/landing}/screen-1.png | Bin .../images/landing}/startup.svg | 0 .../images => demo/images/login}/avatar.png | Bin .../images/notfound}/logo-blue.svg | 0 src/assets/demo/styles/badges.css | 92 + src/assets/demo/styles/badges.css.map | 9 + src/assets/demo/{ => styles}/badges.scss | 0 src/assets/demo/styles/documentation.css | 30 + src/assets/demo/styles/documentation.css.map | 9 + .../demo/{ => styles}/documentation.scss | 0 src/assets/demo/{ => styles}/flags/flags.css | 0 .../{ => styles}/flags/flags_responsive.png | Bin src/assets/layout/images/icon.svg | 3 - src/assets/layout/images/screen.png | Bin 127306 -> 0 bytes .../layout/images/widgets/user-card.jpg | Bin 2648478 -> 0 bytes src/assets/layout/styles/layout/_config.scss | 42 + .../styles}/layout/_content.scss | 0 .../styles}/layout/_footer.scss | 0 .../{sass => layout/styles}/layout/_main.scss | 7 +- src/assets/layout/styles/layout/_menu.scss | 141 + .../styles}/layout/_mixins.scss | 0 .../styles/layout/_preloading.scss} | 0 .../styles}/layout/_responsive.scss | 37 +- .../styles}/layout/_topbar.scss | 0 .../styles}/layout/_typography.scss | 0 src/assets/layout/styles/layout/_utils.scss | 27 + .../styles}/layout/_variables.scss | 0 .../styles/layout/layout.scss} | 5 +- .../lara-dark-blue/fonts/Inter-Bold.woff | Bin .../lara-dark-blue/fonts/Inter-Bold.woff2 | Bin .../lara-dark-blue/fonts/Inter-Light.woff | Bin .../lara-dark-blue/fonts/Inter-Light.woff2 | Bin .../lara-dark-blue/fonts/Inter-Medium.woff | Bin .../lara-dark-blue/fonts/Inter-Medium.woff2 | Bin .../lara-dark-blue/fonts/Inter-Regular.woff | Bin .../lara-dark-blue/fonts/Inter-Regular.woff2 | Bin .../lara-dark-blue/fonts/Inter-SemiBold.woff | Bin .../lara-dark-blue/fonts/Inter-SemiBold.woff2 | Bin .../lara-dark-indigo/fonts/Inter-Bold.woff | Bin .../lara-dark-indigo/fonts/Inter-Bold.woff2 | Bin .../lara-dark-indigo/fonts/Inter-Light.woff | Bin .../lara-dark-indigo/fonts/Inter-Light.woff2 | Bin .../lara-dark-indigo/fonts/Inter-Medium.woff | Bin .../lara-dark-indigo/fonts/Inter-Medium.woff2 | Bin .../lara-dark-indigo/fonts/Inter-Regular.woff | Bin .../fonts/Inter-Regular.woff2 | Bin .../fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../lara-dark-purple/fonts/Inter-Bold.woff | Bin .../lara-dark-purple/fonts/Inter-Bold.woff2 | Bin .../lara-dark-purple/fonts/Inter-Light.woff | Bin .../lara-dark-purple/fonts/Inter-Light.woff2 | Bin .../lara-dark-purple/fonts/Inter-Medium.woff | Bin .../lara-dark-purple/fonts/Inter-Medium.woff2 | Bin .../lara-dark-purple/fonts/Inter-Regular.woff | Bin .../fonts/Inter-Regular.woff2 | Bin .../fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../lara-dark-teal/fonts/Inter-Bold.woff | Bin .../lara-dark-teal/fonts/Inter-Bold.woff2 | Bin .../lara-dark-teal/fonts/Inter-Light.woff | Bin .../lara-dark-teal/fonts/Inter-Light.woff2 | Bin .../lara-dark-teal/fonts/Inter-Medium.woff | Bin .../lara-dark-teal/fonts/Inter-Medium.woff2 | Bin .../lara-dark-teal/fonts/Inter-Regular.woff | Bin .../lara-dark-teal/fonts/Inter-Regular.woff2 | Bin .../lara-dark-teal/fonts/Inter-SemiBold.woff | Bin .../lara-dark-teal/fonts/Inter-SemiBold.woff2 | Bin .../lara-light-blue/fonts/Inter-Bold.woff | Bin .../lara-light-blue/fonts/Inter-Bold.woff2 | Bin .../lara-light-blue/fonts/Inter-Light.woff | Bin .../lara-light-blue/fonts/Inter-Light.woff2 | Bin .../lara-light-blue/fonts/Inter-Medium.woff | Bin .../lara-light-blue/fonts/Inter-Medium.woff2 | Bin .../lara-light-blue/fonts/Inter-Regular.woff | Bin .../lara-light-blue/fonts/Inter-Regular.woff2 | Bin .../lara-light-blue/fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../lara-light-indigo/fonts/Inter-Bold.woff | Bin .../lara-light-indigo/fonts/Inter-Bold.woff2 | Bin .../lara-light-indigo/fonts/Inter-Light.woff | Bin .../lara-light-indigo/fonts/Inter-Light.woff2 | Bin .../lara-light-indigo/fonts/Inter-Medium.woff | Bin .../fonts/Inter-Medium.woff2 | Bin .../fonts/Inter-Regular.woff | Bin .../fonts/Inter-Regular.woff2 | Bin .../fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../lara-light-purple/fonts/Inter-Bold.woff | Bin .../lara-light-purple/fonts/Inter-Bold.woff2 | Bin .../lara-light-purple/fonts/Inter-Light.woff | Bin .../lara-light-purple/fonts/Inter-Light.woff2 | Bin .../lara-light-purple/fonts/Inter-Medium.woff | Bin .../fonts/Inter-Medium.woff2 | Bin .../fonts/Inter-Regular.woff | Bin .../fonts/Inter-Regular.woff2 | Bin .../fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../lara-light-teal/fonts/Inter-Bold.woff | Bin .../lara-light-teal/fonts/Inter-Bold.woff2 | Bin .../lara-light-teal/fonts/Inter-Light.woff | Bin .../lara-light-teal/fonts/Inter-Light.woff2 | Bin .../lara-light-teal/fonts/Inter-Medium.woff | Bin .../lara-light-teal/fonts/Inter-Medium.woff2 | Bin .../lara-light-teal/fonts/Inter-Regular.woff | Bin .../lara-light-teal/fonts/Inter-Regular.woff2 | Bin .../lara-light-teal/fonts/Inter-SemiBold.woff | Bin .../fonts/Inter-SemiBold.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-500.woff | Bin .../roboto-v20-latin-ext_latin-500.woff2 | Bin .../fonts/roboto-v20-latin-ext_latin-700.woff | Bin .../roboto-v20-latin-ext_latin-700.woff2 | Bin .../roboto-v20-latin-ext_latin-regular.woff | Bin .../roboto-v20-latin-ext_latin-regular.woff2 | Bin .../tailwind-light/fonts/Inter-Bold.woff | Bin .../tailwind-light/fonts/Inter-Bold.woff2 | Bin .../tailwind-light/fonts/Inter-Light.woff | Bin .../tailwind-light/fonts/Inter-Light.woff2 | Bin .../tailwind-light/fonts/Inter-Medium.woff | Bin .../tailwind-light/fonts/Inter-Medium.woff2 | Bin .../tailwind-light/fonts/Inter-Regular.woff | Bin .../tailwind-light/fonts/Inter-Regular.woff2 | Bin .../tailwind-light/fonts/Inter-SemiBold.woff | Bin .../tailwind-light/fonts/Inter-SemiBold.woff2 | Bin src/assets/sass/layout/_config.scss | 103 - src/assets/sass/layout/_menu.scss | 117 - src/assets/sass/layout/_utils.scss | 11 - src/assets/sass/overrides/_overrides.scss | 1 - src/assets/theme/arya-blue/theme.css | 5683 ------------- src/assets/theme/arya-green/theme.css | 5683 ------------- src/assets/theme/arya-orange/theme.css | 5683 ------------- src/assets/theme/arya-purple/theme.css | 5683 ------------- .../theme/bootstrap4-dark-blue/theme.css | 5693 ------------- .../theme/bootstrap4-dark-purple/theme.css | 5693 ------------- .../theme/bootstrap4-light-blue/theme.css | 5693 ------------- .../theme/bootstrap4-light-purple/theme.css | 5693 ------------- src/assets/theme/fluent-light/theme.css | 5818 -------------- src/assets/theme/lara-dark-blue/theme.css | 5716 ------------- src/assets/theme/lara-dark-indigo/theme.css | 5716 ------------- src/assets/theme/lara-dark-purple/theme.css | 5716 ------------- src/assets/theme/lara-dark-teal/theme.css | 5716 ------------- src/assets/theme/lara-light-blue/theme.css | 5709 ------------- src/assets/theme/lara-light-indigo/theme.css | 5709 ------------- src/assets/theme/lara-light-purple/theme.css | 5709 ------------- src/assets/theme/lara-light-teal/theme.css | 5709 ------------- src/assets/theme/md-dark-deeppurple/theme.css | 7138 ----------------- src/assets/theme/md-dark-indigo/theme.css | 7138 ----------------- .../theme/md-light-deeppurple/theme.css | 7138 ----------------- src/assets/theme/md-light-indigo/theme.css | 7138 ----------------- .../theme/mdc-dark-deeppurple/theme.css | 7138 ----------------- src/assets/theme/mdc-dark-indigo/theme.css | 7138 ----------------- .../theme/mdc-light-deeppurple/theme.css | 7138 ----------------- src/assets/theme/mdc-light-indigo/theme.css | 7138 ----------------- src/assets/theme/saga-blue/theme.css | 5680 ------------- src/assets/theme/saga-green/theme.css | 5680 ------------- src/assets/theme/saga-orange/theme.css | 5680 ------------- src/assets/theme/saga-purple/theme.css | 5680 ------------- src/assets/theme/tailwind-light/theme.css | 5775 ------------- src/assets/theme/vela-blue/theme.css | 5683 ------------- src/assets/theme/vela-green/theme.css | 5683 ------------- src/assets/theme/vela-orange/theme.css | 5683 ------------- src/assets/theme/vela-purple/theme.css | 5683 ------------- src/index.html | 19 +- src/styles.scss | 15 +- tsconfig.json | 13 +- 422 files changed, 5238 insertions(+), 209563 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 src/app/api/appconfig.ts delete mode 100644 src/app/api/image.ts delete mode 100644 src/app/app.component.spec.ts delete mode 100644 src/app/app.config.component.html delete mode 100644 src/app/app.config.component.ts delete mode 100644 src/app/app.footer.component.html delete mode 100644 src/app/app.footer.component.ts delete mode 100644 src/app/app.main.component.html delete mode 100644 src/app/app.main.component.ts delete mode 100644 src/app/app.menu.component.ts delete mode 100644 src/app/app.menuitem.component.ts delete mode 100644 src/app/app.topbar.component.html delete mode 100644 src/app/app.topbar.component.ts delete mode 100644 src/app/components/access/access.component.ts delete mode 100644 src/app/components/blocks/blocks.component.ts delete mode 100644 src/app/components/button/button.component.ts delete mode 100755 src/app/components/charts/charts.component.ts delete mode 100755 src/app/components/dashboard/dashboard.component.ts delete mode 100755 src/app/components/documentation/documentation.component.html delete mode 100755 src/app/components/empty/empty.component.ts delete mode 100644 src/app/components/error/error.component.ts delete mode 100755 src/app/components/file/file.component.ts delete mode 100644 src/app/components/icons/icons.component.html delete mode 100644 src/app/components/icons/icons.component.ts delete mode 100644 src/app/components/input/input.component.ts delete mode 100644 src/app/components/landing/landing.component.html delete mode 100644 src/app/components/landing/landing.component.ts delete mode 100644 src/app/components/list/list.component.ts delete mode 100644 src/app/components/login/login.component.ts delete mode 100644 src/app/components/media/media.component.ts delete mode 100644 src/app/components/menus/confirmation.component.ts delete mode 100644 src/app/components/menus/menus.module.ts delete mode 100644 src/app/components/menus/payment.component.ts delete mode 100644 src/app/components/menus/personal.component.ts delete mode 100644 src/app/components/menus/seat.component.ts delete mode 100755 src/app/components/misc/misc.component.ts delete mode 100644 src/app/components/notfound/notfound.component.ts delete mode 100644 src/app/components/table/table.component.ts delete mode 100644 src/app/components/timeline/timeline.component.html delete mode 100644 src/app/components/timeline/timeline.component.ts rename src/app/{ => demo}/api/customer.ts (100%) create mode 100644 src/app/demo/api/image.ts rename src/app/{ => demo}/api/product.ts (87%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/auth/access/access-routing.module.ts rename src/app/{components => demo/components/auth}/access/access.component.html (85%) create mode 100644 src/app/demo/components/auth/access/access.component.ts create mode 100644 src/app/demo/components/auth/access/access.module.ts create mode 100644 src/app/demo/components/auth/auth-routing.module.ts create mode 100644 src/app/demo/components/auth/auth.module.ts create mode 100644 src/app/demo/components/auth/error/error-routing.module.ts rename src/app/{components => demo/components/auth}/error/error.component.html (85%) create mode 100644 src/app/demo/components/auth/error/error.component.ts create mode 100644 src/app/demo/components/auth/error/error.module.ts create mode 100644 src/app/demo/components/auth/login/login-routing.module.ts rename src/app/{components => demo/components/auth}/login/login.component.html (86%) create mode 100644 src/app/demo/components/auth/login/login.component.ts create mode 100644 src/app/demo/components/auth/login/login.module.ts create mode 100644 src/app/demo/components/code/code.component.scss rename src/app/{components/app-code/app.code.component.ts => demo/components/code/code.component.ts} (80%) create mode 100644 src/app/demo/components/dashboard/dashboard-routing.module.ts rename src/app/{ => demo}/components/dashboard/dashboard.component.html (97%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/dashboard/dashboard.component.ts create mode 100644 src/app/demo/components/dashboard/dashboard.module.ts create mode 100644 src/app/demo/components/documentation/documentation-routing.module.ts create mode 100644 src/app/demo/components/documentation/documentation.component.html rename src/app/{ => demo}/components/documentation/documentation.component.ts (73%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/documentation/documentation.module.ts create mode 100644 src/app/demo/components/landing/landing-routing.module.ts create mode 100644 src/app/demo/components/landing/landing.component.html create mode 100644 src/app/demo/components/landing/landing.component.ts create mode 100644 src/app/demo/components/landing/landing.module.ts rename src/app/{ => demo}/components/notfound/notfound.component.html (96%) create mode 100644 src/app/demo/components/notfound/notfound.component.ts create mode 100644 src/app/demo/components/pages/crud/crud-routing.module.ts rename src/app/{components => demo/components/pages}/crud/crud.component.html (98%) rename src/app/{components => demo/components/pages}/crud/crud.component.ts (58%) create mode 100644 src/app/demo/components/pages/crud/crud.module.ts create mode 100644 src/app/demo/components/pages/empty/emptydemo-routing.module.ts rename src/app/{components/empty/empty.component.html => demo/components/pages/empty/emptydemo.component.html} (100%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/pages/empty/emptydemo.component.ts create mode 100644 src/app/demo/components/pages/empty/emptydemo.module.ts create mode 100644 src/app/demo/components/pages/pages-routing.module.ts create mode 100644 src/app/demo/components/pages/pages.module.ts create mode 100644 src/app/demo/components/pages/timeline/timelinedemo-routing.module.ts create mode 100644 src/app/demo/components/pages/timeline/timelinedemo.component.html create mode 100644 src/app/demo/components/pages/timeline/timelinedemo.component.ts create mode 100644 src/app/demo/components/pages/timeline/timelinedemo.module.ts create mode 100644 src/app/demo/components/pages/timeline/timelinedemo.scss rename src/app/{components => demo/components/primeblocks}/blocks/blocks.component.html (99%) create mode 100644 src/app/demo/components/primeblocks/blocks/blocks.component.ts rename src/app/{components => demo/components/primeblocks}/blockviewer/blockviewer.component.scss (98%) rename src/app/{components => demo/components/primeblocks}/blockviewer/blockviewer.component.ts (69%) create mode 100644 src/app/demo/components/primeblocks/primeblocks-routing.module.ts create mode 100644 src/app/demo/components/primeblocks/primeblocks.module.ts create mode 100644 src/app/demo/components/uikit/button/buttondemo-routing.module.ts rename src/app/{components/button/button.component.html => demo/components/uikit/button/buttondemo.component.html} (96%) create mode 100644 src/app/demo/components/uikit/button/buttondemo.component.ts create mode 100644 src/app/demo/components/uikit/button/buttondemo.module.ts create mode 100644 src/app/demo/components/uikit/charts/charts-routing.module.ts rename src/app/{components => demo/components/uikit}/charts/charts.component.html (100%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/charts/charts.component.ts create mode 100644 src/app/demo/components/uikit/charts/charts.module.ts create mode 100644 src/app/demo/components/uikit/file/filedemo-routing.module.ts rename src/app/{components/file/file.component.html => demo/components/uikit/file/filedemo.component.html} (74%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/file/filedemo.component.ts create mode 100644 src/app/demo/components/uikit/file/filedemo.module.ts create mode 100644 src/app/demo/components/uikit/floatlabel/floatlabeldemo-routing.module.ts rename src/app/{components/floatlabel/floatlabel.component.html => demo/components/uikit/floatlabel/floatlabeldemo.component.html} (70%) rename src/app/{components/floatlabel/floatlabel.component.ts => demo/components/uikit/floatlabel/floatlabeldemo.component.ts} (66%) create mode 100644 src/app/demo/components/uikit/floatlabel/floatlabeldemo.module.ts create mode 100644 src/app/demo/components/uikit/formlayout/formlayout-routing.module.ts rename src/app/{components => demo/components/uikit}/formlayout/formlayout.component.html (100%) rename src/app/{components => demo/components/uikit}/formlayout/formlayout.component.ts (91%) create mode 100644 src/app/demo/components/uikit/formlayout/formlayout.module.ts create mode 100644 src/app/demo/components/uikit/input/inputdemo-routing.module.ts rename src/app/{components/input/input.component.html => demo/components/uikit/input/inputdemo.component.html} (61%) create mode 100644 src/app/demo/components/uikit/input/inputdemo.component.ts create mode 100644 src/app/demo/components/uikit/input/inputdemo.module.ts create mode 100644 src/app/demo/components/uikit/invalid/invalidstatedemo-routing.module.ts rename src/app/{components/invalidstate/invalidstate.component.html => demo/components/uikit/invalid/invalidstatedemo.component.html} (94%) rename src/app/{components/invalidstate/invalidstate.component.ts => demo/components/uikit/invalid/invalidstatedemo.component.ts} (67%) create mode 100644 src/app/demo/components/uikit/invalid/invalidstatedemo.module.ts create mode 100644 src/app/demo/components/uikit/list/listdemo-routing.module.ts rename src/app/{components/list/list.component.html => demo/components/uikit/list/listdemo.component.html} (91%) create mode 100644 src/app/demo/components/uikit/list/listdemo.component.ts create mode 100644 src/app/demo/components/uikit/list/listdemo.module.ts create mode 100644 src/app/demo/components/uikit/media/mediademo-routing.module.ts rename src/app/{components/media/media.component.html => demo/components/uikit/media/mediademo.component.html} (100%) create mode 100644 src/app/demo/components/uikit/media/mediademo.component.ts create mode 100644 src/app/demo/components/uikit/media/mediademo.module.ts create mode 100644 src/app/demo/components/uikit/menus/confirmation.component.ts rename src/app/{components => demo/components/uikit}/menus/menus.component.html (100%) mode change 100755 => 100644 rename src/app/{components => demo/components/uikit}/menus/menus.component.ts (84%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/menus/menus.module.ts create mode 100644 src/app/demo/components/uikit/menus/payment.component.ts create mode 100644 src/app/demo/components/uikit/menus/personal.component.ts create mode 100644 src/app/demo/components/uikit/menus/seat.component.ts create mode 100644 src/app/demo/components/uikit/messages/messagesdemo-routing.module.ts rename src/app/{components/messages/messages.component.html => demo/components/uikit/messages/messagesdemo.component.html} (100%) mode change 100755 => 100644 rename src/app/{components/messages/messages.component.ts => demo/components/uikit/messages/messagesdemo.component.ts} (77%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/messages/messagesdemo.module.ts create mode 100644 src/app/demo/components/uikit/misc/miscdemo-routing.module.ts rename src/app/{components/misc/misc.component.html => demo/components/uikit/misc/miscdemo.component.html} (93%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/misc/miscdemo.component.ts create mode 100644 src/app/demo/components/uikit/misc/miscdemo.module.ts create mode 100644 src/app/demo/components/uikit/overlays/overlaysdemo-routing.module.ts rename src/app/{components/overlays/overlays.component.html => demo/components/uikit/overlays/overlaysdemo.component.html} (95%) mode change 100755 => 100644 rename src/app/{components/overlays/overlays.component.ts => demo/components/uikit/overlays/overlaysdemo.component.ts} (64%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/overlays/overlaysdemo.module.ts create mode 100644 src/app/demo/components/uikit/panels/panelsdemo-routing.module.ts rename src/app/{components/panels/panels.component.html => demo/components/uikit/panels/panelsdemo.component.html} (98%) mode change 100755 => 100644 rename src/app/{components/panels/panels.component.ts => demo/components/uikit/panels/panelsdemo.component.ts} (58%) mode change 100755 => 100644 create mode 100644 src/app/demo/components/uikit/panels/panelsdemo.module.ts create mode 100644 src/app/demo/components/uikit/table/tabledemo-routing.module.ts rename src/app/{components/table/table.component.html => demo/components/uikit/table/tabledemo.component.html} (96%) create mode 100644 src/app/demo/components/uikit/table/tabledemo.component.ts create mode 100644 src/app/demo/components/uikit/table/tabledemo.module.ts create mode 100644 src/app/demo/components/uikit/tree/treedemo-routing.module.ts rename src/app/{components/tree/tree.component.html => demo/components/uikit/tree/treedemo.component.html} (79%) rename src/app/{components/tree/tree.component.ts => demo/components/uikit/tree/treedemo.component.ts} (59%) create mode 100644 src/app/demo/components/uikit/tree/treedemo.module.ts create mode 100644 src/app/demo/components/uikit/uikit-routing.module.ts create mode 100644 src/app/demo/components/uikit/uikit.module.ts create mode 100644 src/app/demo/components/utilities/icons/icons.component.html create mode 100644 src/app/demo/components/utilities/icons/icons.component.ts create mode 100644 src/app/demo/components/utilities/utilities-routing.module.ts create mode 100644 src/app/demo/components/utilities/utilities.module.ts rename src/app/{service/countryservice.ts => demo/service/country.service.ts} (55%) mode change 100755 => 100644 rename src/app/{service/customerservice.ts => demo/service/customer.service.ts} (99%) rename src/app/{service/eventservice.ts => demo/service/event.service.ts} (54%) mode change 100755 => 100644 rename src/app/{service/iconservice.ts => demo/service/icon.service.ts} (76%) mode change 100755 => 100644 create mode 100644 src/app/demo/service/node.service.ts rename src/app/{service/photoservice.ts => demo/service/photo.service.ts} (59%) rename src/app/{service/productservice.ts => demo/service/product.service.ts} (60%) mode change 100755 => 100644 create mode 100644 src/app/layout/api/menuchangeevent.ts create mode 100644 src/app/layout/app.footer.component.html create mode 100644 src/app/layout/app.footer.component.ts create mode 100644 src/app/layout/app.layout.component.html create mode 100644 src/app/layout/app.layout.component.ts create mode 100644 src/app/layout/app.layout.module.ts create mode 100644 src/app/layout/app.menu.component.html create mode 100644 src/app/layout/app.menu.component.ts rename src/app/{service => layout}/app.menu.service.ts (50%) create mode 100644 src/app/layout/app.menuitem.component.ts create mode 100644 src/app/layout/app.sidebar.component.html create mode 100644 src/app/layout/app.sidebar.component.ts create mode 100644 src/app/layout/app.topbar.component.html create mode 100644 src/app/layout/app.topbar.component.ts create mode 100644 src/app/layout/config/app.config.component.html create mode 100644 src/app/layout/config/app.config.component.ts create mode 100644 src/app/layout/config/config.module.ts create mode 100644 src/app/layout/service/app.layout.service.ts delete mode 100644 src/app/service/app.config.service.ts delete mode 100755 src/app/service/nodeservice.ts mode change 100755 => 100644 src/assets/demo/data/files-lazy.json mode change 100755 => 100644 src/assets/demo/data/files.json mode change 100755 => 100644 src/assets/demo/data/filesystem-lazy.json mode change 100755 => 100644 src/assets/demo/data/filesystem.json mode change 100755 => 100644 src/assets/demo/data/scheduleevents.json rename src/assets/{layout/images => demo/images/access}/asset-access.svg (100%) rename src/assets/{layout/images => demo/images/access}/logo-orange.svg (100%) rename src/assets/{layout/images => demo/images/error}/asset-error.svg (100%) rename src/assets/{layout/images => demo/images/error}/logo-error.svg (100%) rename src/assets/demo/{flags => images/flag}/flag_placeholder.png (100%) mode change 100755 => 100644 rename src/assets/{layout/images => demo/images/landing}/enterprise.svg (100%) rename src/assets/{layout/images => demo/images/landing}/free.svg (100%) rename src/assets/{layout/images => demo/images/landing}/mockup-desktop.svg (100%) rename src/assets/{layout/images => demo/images/landing}/mockup.svg (100%) rename src/assets/{layout/images => demo/images/landing}/new-badge.svg (100%) rename src/assets/{layout/images => demo/images/landing}/peak-logo.svg (100%) rename src/assets/{layout/images => demo/images/landing}/screen-1.png (100%) rename src/assets/{layout/images => demo/images/landing}/startup.svg (100%) rename src/assets/{layout/images => demo/images/login}/avatar.png (100%) rename src/assets/{layout/images => demo/images/notfound}/logo-blue.svg (100%) create mode 100644 src/assets/demo/styles/badges.css create mode 100644 src/assets/demo/styles/badges.css.map rename src/assets/demo/{ => styles}/badges.scss (100%) create mode 100644 src/assets/demo/styles/documentation.css create mode 100644 src/assets/demo/styles/documentation.css.map rename src/assets/demo/{ => styles}/documentation.scss (100%) rename src/assets/demo/{ => styles}/flags/flags.css (100%) rename src/assets/demo/{ => styles}/flags/flags_responsive.png (100%) delete mode 100644 src/assets/layout/images/icon.svg delete mode 100644 src/assets/layout/images/screen.png delete mode 100644 src/assets/layout/images/widgets/user-card.jpg create mode 100644 src/assets/layout/styles/layout/_config.scss rename src/assets/{sass => layout/styles}/layout/_content.scss (100%) rename src/assets/{sass => layout/styles}/layout/_footer.scss (100%) rename src/assets/{sass => layout/styles}/layout/_main.scss (86%) create mode 100644 src/assets/layout/styles/layout/_menu.scss rename src/assets/{sass => layout/styles}/layout/_mixins.scss (100%) rename src/assets/{sass/layout/_splash.scss => layout/styles/layout/_preloading.scss} (100%) rename src/assets/{sass => layout/styles}/layout/_responsive.scss (77%) rename src/assets/{sass => layout/styles}/layout/_topbar.scss (100%) rename src/assets/{sass => layout/styles}/layout/_typography.scss (100%) create mode 100644 src/assets/layout/styles/layout/_utils.scss rename src/assets/{sass => layout/styles}/layout/_variables.scss (100%) rename src/assets/{sass/layout/_layout.scss => layout/styles/layout/layout.scss} (72%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-blue/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-indigo/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-purple/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-dark-teal/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-blue/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-indigo/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-purple/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/lara-light-teal/fonts/Inter-SemiBold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/md-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff (100%) rename src/assets/{ => layout/styles}/theme/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Bold.woff (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Bold.woff2 (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Light.woff (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Light.woff2 (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Medium.woff (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Medium.woff2 (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Regular.woff (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-Regular.woff2 (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-SemiBold.woff (100%) rename src/assets/{ => layout/styles}/theme/tailwind-light/fonts/Inter-SemiBold.woff2 (100%) delete mode 100644 src/assets/sass/layout/_config.scss delete mode 100644 src/assets/sass/layout/_menu.scss delete mode 100644 src/assets/sass/layout/_utils.scss delete mode 100644 src/assets/sass/overrides/_overrides.scss delete mode 100644 src/assets/theme/arya-blue/theme.css delete mode 100644 src/assets/theme/arya-green/theme.css delete mode 100644 src/assets/theme/arya-orange/theme.css delete mode 100644 src/assets/theme/arya-purple/theme.css delete mode 100644 src/assets/theme/bootstrap4-dark-blue/theme.css delete mode 100644 src/assets/theme/bootstrap4-dark-purple/theme.css delete mode 100644 src/assets/theme/bootstrap4-light-blue/theme.css delete mode 100644 src/assets/theme/bootstrap4-light-purple/theme.css delete mode 100644 src/assets/theme/fluent-light/theme.css delete mode 100644 src/assets/theme/lara-dark-blue/theme.css delete mode 100644 src/assets/theme/lara-dark-indigo/theme.css delete mode 100644 src/assets/theme/lara-dark-purple/theme.css delete mode 100644 src/assets/theme/lara-dark-teal/theme.css delete mode 100644 src/assets/theme/lara-light-blue/theme.css delete mode 100644 src/assets/theme/lara-light-indigo/theme.css delete mode 100644 src/assets/theme/lara-light-purple/theme.css delete mode 100644 src/assets/theme/lara-light-teal/theme.css delete mode 100644 src/assets/theme/md-dark-deeppurple/theme.css delete mode 100644 src/assets/theme/md-dark-indigo/theme.css delete mode 100644 src/assets/theme/md-light-deeppurple/theme.css delete mode 100644 src/assets/theme/md-light-indigo/theme.css delete mode 100644 src/assets/theme/mdc-dark-deeppurple/theme.css delete mode 100644 src/assets/theme/mdc-dark-indigo/theme.css delete mode 100644 src/assets/theme/mdc-light-deeppurple/theme.css delete mode 100644 src/assets/theme/mdc-light-indigo/theme.css delete mode 100644 src/assets/theme/saga-blue/theme.css delete mode 100644 src/assets/theme/saga-green/theme.css delete mode 100644 src/assets/theme/saga-orange/theme.css delete mode 100644 src/assets/theme/saga-purple/theme.css delete mode 100644 src/assets/theme/tailwind-light/theme.css delete mode 100644 src/assets/theme/vela-blue/theme.css delete mode 100644 src/assets/theme/vela-green/theme.css delete mode 100644 src/assets/theme/vela-orange/theme.css delete mode 100644 src/assets/theme/vela-purple/theme.css diff --git a/.gitignore b/.gitignore index 105c00f..096b329 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,18 @@ # See http://help.github.com/ignore-files/ for more about ignoring files. -# compiled output +# Compiled output /dist /tmp /out-tsc -# Only exists if Bazel was run /bazel-out -# dependencies +# Node /node_modules - -# profiling files -chrome-profiler-events*.json +npm-debug.log +yarn-error.log # IDEs and editors -/.idea +.idea/ .project .classpath .c9/ @@ -22,25 +20,25 @@ chrome-profiler-events*.json .settings/ *.sublime-workspace -# IDE - VSCode +# Visual Studio Code +.vscode .vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json .history/* -# misc +# Miscellaneous /.angular/cache -/.sass-cache +.sass-cache/ /connect.lock /coverage /libpeerconnection.log -npm-debug.log -yarn-error.log testem.log /typings -# System Files +# System files .DS_Store Thumbs.db + +# Compiled files +theme.css +layout.css +src/assets/layout/styles/theme/designer diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..405ba76 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## 13.2.0 + +- Folder structure updated. +- Replace app.config.service by layout.service. +- Updated to PrimeNG 14. +- Strict mode support added. +- Documentation updated. +- Added max-width in large screens for landing. \ No newline at end of file diff --git a/package.json b/package.json index 240849a..c48df41 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sakai-ng", - "version": "13.1.1", + "version": "13.2.0", "scripts": { "ng": "ng", "start": "ng serve", @@ -20,9 +20,9 @@ "@angular/platform-browser-dynamic": "~13.0.0", "@angular/router": "~13.0.0", "chart.js": "^3.3.2", - "primeflex": "^3.1.0", + "primeflex": "^3.2.0", "primeicons": "5.0.0", - "primeng": "^13.1.0", + "primeng": "13.4.0", "prismjs": "1.9.0", "rxjs": "~7.4.0", "tslib": "^2.3.0", diff --git a/src/app/api/appconfig.ts b/src/app/api/appconfig.ts deleted file mode 100644 index f10fc54..0000000 --- a/src/app/api/appconfig.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AppConfig { - inputStyle?: string; - dark?: boolean; - theme?: string; - ripple?: boolean; -} \ No newline at end of file diff --git a/src/app/api/image.ts b/src/app/api/image.ts deleted file mode 100644 index 83e93eb..0000000 --- a/src/app/api/image.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface Image { - previewImageSrc?; - thumbnailImageSrc?; - alt?; - title?; -} diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 6269369..ec43067 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,71 +1,27 @@ import { RouterModule } from '@angular/router'; import { NgModule } from '@angular/core'; -import { DashboardComponent } from './components/dashboard/dashboard.component'; -import { FormLayoutComponent } from './components/formlayout/formlayout.component'; -import { PanelsComponent } from './components/panels/panels.component'; -import { OverlaysComponent } from './components/overlays/overlays.component'; -import { MediaComponent } from './components/media/media.component'; -import { MessagesComponent } from './components/messages/messages.component'; -import { MiscComponent } from './components/misc/misc.component'; -import { EmptyComponent } from './components/empty/empty.component'; -import { ChartsComponent } from './components/charts/charts.component'; -import { FileComponent } from './components/file/file.component'; -import { DocumentationComponent } from './components/documentation/documentation.component'; -import { AppMainComponent } from './app.main.component'; -import { InputComponent } from './components/input/input.component'; -import { ButtonComponent } from './components/button/button.component'; -import { TableComponent } from './components/table/table.component'; -import { ListComponent } from './components/list/list.component'; -import { TreeComponent } from './components/tree/tree.component'; -import { CrudComponent } from './components/crud/crud.component'; -import { BlocksComponent } from './components/blocks/blocks.component'; -import { FloatLabelComponent } from './components/floatlabel/floatlabel.component'; -import { InvalidStateComponent } from './components/invalidstate/invalidstate.component'; -import { TimelineComponent } from './components/timeline/timeline.component'; -import { IconsComponent } from './components/icons/icons.component'; -import { LandingComponent } from './components/landing/landing.component'; -import { LoginComponent } from './components/login/login.component'; -import { ErrorComponent } from './components/error/error.component'; -import { NotfoundComponent } from './components/notfound/notfound.component'; -import { AccessComponent } from './components/access/access.component'; +import { NotfoundComponent } from './demo/components/notfound/notfound.component'; +import { AppLayoutComponent } from "./layout/app.layout.component"; + @NgModule({ imports: [ RouterModule.forRoot([ { - path: '', component: AppMainComponent, + path: '', component: AppLayoutComponent, children: [ - {path: '', component: DashboardComponent}, - {path: 'uikit/formlayout', component: FormLayoutComponent}, - {path: 'uikit/input', component: InputComponent}, - {path: 'uikit/floatlabel', component: FloatLabelComponent}, - {path: 'uikit/invalidstate', component: InvalidStateComponent}, - {path: 'uikit/button', component: ButtonComponent}, - {path: 'uikit/table', component: TableComponent}, - {path: 'uikit/list', component: ListComponent}, - {path: 'uikit/tree', component: TreeComponent}, - {path: 'uikit/panel', component: PanelsComponent}, - {path: 'uikit/overlay', component: OverlaysComponent}, - {path: 'uikit/media', component: MediaComponent}, - {path: 'uikit/menu', loadChildren: () => import('./components/menus/menus.module').then(m => m.MenusModule)}, - {path: 'uikit/message', component: MessagesComponent}, - {path: 'uikit/misc', component: MiscComponent}, - {path: 'uikit/charts', component: ChartsComponent}, - {path: 'uikit/file', component: FileComponent}, - {path: 'pages/crud', component: CrudComponent}, - {path: 'pages/timeline', component: TimelineComponent}, - {path: 'pages/empty', component: EmptyComponent}, - {path: 'icons', component: IconsComponent}, - {path: 'blocks', component: BlocksComponent}, - {path: 'documentation', component: DocumentationComponent} + { path: '', loadChildren: () => import('./demo/components/dashboard/dashboard.module').then(m => m.DashboardModule) }, + { path: 'uikit', loadChildren: () => import('./demo/components/uikit/uikit.module').then(m => m.UikitModule) }, + { path: 'utilities', loadChildren: () => import('./demo/components/utilities/utilities.module').then(m => m.UtilitiesModule) }, + { path: 'documentation', loadChildren: () => import('./demo/components/documentation/documentation.module').then(m => m.DocumentationModule) }, + { path: 'blocks', loadChildren: () => import('./demo/components/primeblocks/primeblocks.module').then(m => m.PrimeBlocksModule) }, + { path: 'pages', loadChildren: () => import('./demo/components/pages/pages.module').then(m => m.PagesModule) }, ], }, - {path:'pages/landing', component: LandingComponent}, - {path:'pages/login', component: LoginComponent}, - {path:'pages/error', component: ErrorComponent}, - {path:'pages/notfound', component: NotfoundComponent}, - {path:'pages/access', component: AccessComponent}, - {path: '**', redirectTo: 'pages/notfound'}, - ], {scrollPositionRestoration: 'enabled', anchorScrolling:'enabled'}) + { path: 'auth', loadChildren: () => import('./demo/components/auth/auth.module').then(m => m.AuthModule) }, + { path: 'landing', loadChildren: () => import('./demo/components/landing/landing.module').then(m => m.LandingModule) }, + { path: 'pages/notfound', component: NotfoundComponent }, + { path: '**', redirectTo: 'pages/notfound' }, + ], { scrollPositionRestoration: 'enabled', anchorScrolling: 'enabled' }) ], exports: [RouterModule] }) diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts deleted file mode 100644 index 3fa4225..0000000 --- a/src/app/app.component.spec.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* tslint:disable:no-unused-variable */ - -import {async, TestBed} from '@angular/core/testing'; -import {RouterTestingModule} from '@angular/router/testing'; -import {NoopAnimationsModule} from '@angular/platform-browser/animations'; -import {AppComponent} from './app.component'; -import {AppMainComponent} from './app.main.component'; -import {AppMenuComponent} from './app.menu.component'; - -describe('AppComponent', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, RouterTestingModule], - declarations: [AppComponent, - AppMainComponent, - AppMenuComponent - ] - }); - TestBed.compileComponents(); - }); - - it('should create the app', async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app).toBeTruthy(); - })); -}); diff --git a/src/app/app.config.component.html b/src/app/app.config.component.html deleted file mode 100644 index fc8bdb3..0000000 --- a/src/app/app.config.component.html +++ /dev/null @@ -1,242 +0,0 @@ -
- - - - -
-
Component Scale
-
- - - -
- -
Input Style
-
-
- - -
-
- - -
-
- -
Ripple Effect
- - -
Menu Type
-
-
- - -
-
- - -
- -
Bootstrap
-
-
- -
-
- -
-
- -
-
- -
-
- -
Material Design
-
-
- -
-
- -
-
- -
-
- -
-
- -
Material Design Compact
-
-
- -
-
- -
-
- -
-
- -
-
- -
Tailwind
-
-
- -
-
- -
Fluent UI
-
-
- -
-
- -
PrimeOne Design - 2022
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
PrimeOne Design - 2021
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file diff --git a/src/app/app.config.component.ts b/src/app/app.config.component.ts deleted file mode 100644 index 2513072..0000000 --- a/src/app/app.config.component.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { PrimeNGConfig } from 'primeng/api'; -import { Subscription } from 'rxjs'; -import { AppConfig } from './api/appconfig'; -import { AppComponent } from './app.component'; -import { AppMainComponent } from './app.main.component'; -import { ConfigService } from './service/app.config.service'; - -@Component({ - selector: 'app-config', - templateUrl: './app.config.component.html' -}) -export class AppConfigComponent implements OnInit, OnDestroy { - - scale: number = 14; - - scales: any[] = [12, 13, 14, 15, 16]; - - config: AppConfig; - - subscription: Subscription; - - constructor(public app: AppComponent, public appMain: AppMainComponent, public configService: ConfigService, public primengConfig: PrimeNGConfig) { } - - ngOnInit() { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => { - this.config = config; - this.scale = 14; - - this.applyScale(); - }); - } - - onConfigButtonClick(event) { - this.appMain.configActive = !this.appMain.configActive; - this.appMain.configClick = true; - event.preventDefault(); - } - - incrementScale() { - this.scale++; - this.applyScale(); - } - - decrementScale() { - this.scale--; - this.applyScale(); - } - - applyScale() { - document.documentElement.style.fontSize = this.scale + 'px'; - } - - onRippleChange(ripple) { - this.primengConfig.ripple = ripple; - this.configService.updateConfig({...this.config, ...{ripple}}); - } - - onInputStyleChange() { - this.configService.updateConfig(this.config); - } - - changeTheme(theme:string, dark:boolean){ - let themeElement = document.getElementById('theme-css'); - themeElement.setAttribute('href', 'assets/theme/' + theme + '/theme.css'); - this.configService.updateConfig({...this.config, ...{theme, dark}}); - } - - ngOnDestroy() { - if (this.subscription) { - this.subscription.unsubscribe(); - } - } -} \ No newline at end of file diff --git a/src/app/app.footer.component.html b/src/app/app.footer.component.html deleted file mode 100644 index b887fcd..0000000 --- a/src/app/app.footer.component.html +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/src/app/app.footer.component.ts b/src/app/app.footer.component.ts deleted file mode 100644 index a99898e..0000000 --- a/src/app/app.footer.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; -import { AppMainComponent } from './app.main.component'; - -@Component({ - selector: 'app-footer', - templateUrl: './app.footer.component.html' -}) -export class AppFooterComponent{ - constructor(public appMain: AppMainComponent) {} -} diff --git a/src/app/app.main.component.html b/src/app/app.main.component.html deleted file mode 100644 index b055634..0000000 --- a/src/app/app.main.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
- -
- -
-
-
- -
- -
- -
-
diff --git a/src/app/app.main.component.ts b/src/app/app.main.component.ts deleted file mode 100644 index 42e614d..0000000 --- a/src/app/app.main.component.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { Component, AfterViewInit, OnDestroy, Renderer2, OnInit } from '@angular/core'; -import { trigger, state, style, transition, animate } from '@angular/animations'; -import { AppComponent } from './app.component'; -import { ConfigService } from './service/app.config.service'; -import { AppConfig } from './api/appconfig'; -import { Subscription } from 'rxjs'; - -@Component({ - selector: 'app-main', - templateUrl: './app.main.component.html', - animations: [ - trigger('submenu', [ - state('hidden', style({ - height: '0px' - })), - state('visible', style({ - height: '*' - })), - transition('visible => hidden', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')), - transition('hidden => visible', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')) - ]) - ] -}) -export class AppMainComponent implements AfterViewInit, OnDestroy, OnInit { - - public menuInactiveDesktop: boolean; - - public menuActiveMobile: boolean; - - public overlayMenuActive: boolean; - - public staticMenuInactive: boolean = false; - - public profileActive: boolean; - - public topMenuActive: boolean; - - public topMenuLeaving: boolean; - - public theme: string; - - documentClickListener: () => void; - - menuClick: boolean; - - topMenuButtonClick: boolean; - - configActive: boolean; - - configClick: boolean; - - config: AppConfig; - - subscription: Subscription; - - constructor(public renderer: Renderer2, public app: AppComponent, public configService: ConfigService) { } - - ngOnInit() { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => this.config = config); - } - - ngAfterViewInit() { - // hides the overlay menu and top menu if outside is clicked - this.documentClickListener = this.renderer.listen('body', 'click', (event) => { - if (!this.isDesktop()) { - if (!this.menuClick) { - this.menuActiveMobile = false; - } - - if (!this.topMenuButtonClick) { - this.hideTopMenu(); - } - } - else { - if (!this.menuClick && this.isOverlay()) { - this.menuInactiveDesktop = true; - } - if (!this.menuClick){ - this.overlayMenuActive = false; - } - } - - if (this.configActive && !this.configClick) { - this.configActive = false; - } - - this.configClick = false; - this.menuClick = false; - this.topMenuButtonClick = false; - }); - } - - toggleMenu(event: Event) { - this.menuClick = true; - - if (this.isDesktop()) { - if (this.app.menuMode === 'overlay') { - if(this.menuActiveMobile === true) { - this.overlayMenuActive = true; - } - - this.overlayMenuActive = !this.overlayMenuActive; - this.menuActiveMobile = false; - } - else if (this.app.menuMode === 'static') { - this.staticMenuInactive = !this.staticMenuInactive; - } - } - else { - this.menuActiveMobile = !this.menuActiveMobile; - this.topMenuActive = false; - } - - event.preventDefault(); - } - - toggleProfile(event: Event) { - this.profileActive = !this.profileActive; - event.preventDefault(); - } - - toggleTopMenu(event: Event) { - this.topMenuButtonClick = true; - this.menuActiveMobile = false; - - if (this.topMenuActive) { - this.hideTopMenu(); - } else { - this.topMenuActive = true; - } - - event.preventDefault(); - } - - hideTopMenu() { - this.topMenuLeaving = true; - setTimeout(() => { - this.topMenuActive = false; - this.topMenuLeaving = false; - }, 1); - } - - onMenuClick() { - this.menuClick = true; - } - - onConfigClick(event) { - this.configClick = true; - } - - isStatic() { - return this.app.menuMode === 'static'; - } - - isOverlay() { - return this.app.menuMode === 'overlay'; - } - - isDesktop() { - return window.innerWidth > 992; - } - - isMobile(){ - return window.innerWidth < 1024; - } - - onSearchClick() { - this.topMenuButtonClick = true; - } - - ngOnDestroy() { - if (this.documentClickListener) { - this.documentClickListener(); - } - - - if (this.subscription) { - this.subscription.unsubscribe(); - } - } -} diff --git a/src/app/app.menu.component.ts b/src/app/app.menu.component.ts deleted file mode 100644 index b355e17..0000000 --- a/src/app/app.menu.component.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { AppMainComponent } from './app.main.component'; - -@Component({ - selector: 'app-menu', - template: ` -
- -
- ` -}) -export class AppMenuComponent implements OnInit { - - model: any[]; - - constructor(public appMain: AppMainComponent) { } - - ngOnInit() { - this.model = [ - { - label: 'Home', - items:[ - {label: 'Dashboard',icon: 'pi pi-fw pi-home', routerLink: ['/']} - ] - }, - { - label: 'UI Components', - items: [ - {label: 'Form Layout', icon: 'pi pi-fw pi-id-card', routerLink: ['/uikit/formlayout']}, - {label: 'Input', icon: 'pi pi-fw pi-check-square', routerLink: ['/uikit/input']}, - {label: 'Float Label', icon: 'pi pi-fw pi-bookmark', routerLink: ['/uikit/floatlabel']}, - {label: 'Invalid State', icon: 'pi pi-fw pi-exclamation-circle', routerLink: ['/uikit/invalidstate']}, - {label: 'Button', icon: 'pi pi-fw pi-mobile', routerLink: ['/uikit/button'], class: 'rotated-icon'}, - {label: 'Table', icon: 'pi pi-fw pi-table', routerLink: ['/uikit/table']}, - {label: 'List', icon: 'pi pi-fw pi-list', routerLink: ['/uikit/list']}, - {label: 'Tree', icon: 'pi pi-fw pi-share-alt', routerLink: ['/uikit/tree']}, - {label: 'Panel', icon: 'pi pi-fw pi-tablet', routerLink: ['/uikit/panel']}, - {label: 'Overlay', icon: 'pi pi-fw pi-clone', routerLink: ['/uikit/overlay']}, - {label: 'Media', icon: 'pi pi-fw pi-image', routerLink: ['/uikit/media']}, - {label: 'Menu', icon: 'pi pi-fw pi-bars', routerLink: ['/uikit/menu'], preventExact: true}, - {label: 'Message', icon: 'pi pi-fw pi-comment', routerLink: ['/uikit/message']}, - {label: 'File', icon: 'pi pi-fw pi-file', routerLink: ['/uikit/file']}, - {label: 'Chart', icon: 'pi pi-fw pi-chart-bar', routerLink: ['/uikit/charts']}, - {label: 'Misc', icon: 'pi pi-fw pi-circle', routerLink: ['/uikit/misc']} - ] - }, - { - label:'Prime Blocks', - items:[ - {label: 'Free Blocks', icon: 'pi pi-fw pi-eye', routerLink: ['/blocks'], badge: 'NEW'}, - {label: 'All Blocks', icon: 'pi pi-fw pi-globe', url: ['https://www.primefaces.org/primeblocks-ng'], target: '_blank'}, - ] - }, - {label:'Utilities', - items:[ - {label: 'PrimeIcons', icon: 'pi pi-fw pi-prime', routerLink: ['/icons']}, - {label: 'PrimeFlex', icon: 'pi pi-fw pi-desktop', url: ['https://www.primefaces.org/primeflex/'], target: '_blank'}, - ] - }, - { - label: 'Pages', - items: [ - {label: 'Crud', icon: 'pi pi-fw pi-user-edit', routerLink: ['/pages/crud']}, - {label: 'Timeline', icon: 'pi pi-fw pi-calendar', routerLink: ['/pages/timeline']}, - {label: 'Landing', icon: 'pi pi-fw pi-globe', routerLink: ['pages/landing']}, - {label: 'Login', icon: 'pi pi-fw pi-sign-in', routerLink: ['pages/login']}, - {label: 'Error', icon: 'pi pi-fw pi-times-circle', routerLink: ['pages/error']}, - {label: 'Not Found', icon: 'pi pi-fw pi-exclamation-circle', routerLink: ['pages/notfound']}, - {label: 'Access Denied', icon: 'pi pi-fw pi-lock', routerLink: ['pages/access']}, - {label: 'Empty', icon: 'pi pi-fw pi-circle', routerLink: ['/pages/empty']} - ] - }, - { - label: 'Hierarchy', - items: [ - { - label: 'Submenu 1', icon: 'pi pi-fw pi-bookmark', - items: [ - { - label: 'Submenu 1.1', icon: 'pi pi-fw pi-bookmark', - items: [ - {label: 'Submenu 1.1.1', icon: 'pi pi-fw pi-bookmark'}, - {label: 'Submenu 1.1.2', icon: 'pi pi-fw pi-bookmark'}, - {label: 'Submenu 1.1.3', icon: 'pi pi-fw pi-bookmark'}, - ] - }, - { - label: 'Submenu 1.2', icon: 'pi pi-fw pi-bookmark', - items: [ - {label: 'Submenu 1.2.1', icon: 'pi pi-fw pi-bookmark'} - ] - }, - ] - }, - { - label: 'Submenu 2', icon: 'pi pi-fw pi-bookmark', - items: [ - { - label: 'Submenu 2.1', icon: 'pi pi-fw pi-bookmark', - items: [ - {label: 'Submenu 2.1.1', icon: 'pi pi-fw pi-bookmark'}, - {label: 'Submenu 2.1.2', icon: 'pi pi-fw pi-bookmark'}, - ] - }, - { - label: 'Submenu 2.2', icon: 'pi pi-fw pi-bookmark', - items: [ - {label: 'Submenu 2.2.1', icon: 'pi pi-fw pi-bookmark'}, - ] - }, - ] - } - ] - }, - { - label:'Get Started', - items:[ - { - label: 'Documentation', icon: 'pi pi-fw pi-question', routerLink: ['/documentation'] - }, - { - label: 'View Source', icon: 'pi pi-fw pi-search', url: ['https://github.com/primefaces/sakai-ng'], target: '_blank' - } - ] - } - ]; - } - - onKeydown(event: KeyboardEvent) { - const nodeElement = ( event.target); - if (event.code === 'Enter' || event.code === 'Space') { - nodeElement.click(); - event.preventDefault(); - } - } -} diff --git a/src/app/app.menuitem.component.ts b/src/app/app.menuitem.component.ts deleted file mode 100644 index a304950..0000000 --- a/src/app/app.menuitem.component.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { NavigationEnd, Router } from '@angular/router'; -import { animate, state, style, transition, trigger } from '@angular/animations'; -import { Subscription } from 'rxjs'; -import { filter } from 'rxjs/operators'; -import { MenuService } from './service/app.menu.service'; -import { AppMainComponent } from './app.main.component'; - -@Component({ - /* tslint:disable:component-selector */ - selector: '[app-menuitem]', - /* tslint:enable:component-selector */ - template: ` - - - - {{item.label}} - {{item.badge}} - - - - - {{item.label}} - {{item.badge}} - - -
    - -
  • -
    -
-
- `, - host: { - '[class.active-menuitem]': 'active', - }, - animations: [ - trigger('children', [ - state('void', style({ - height: '0px' - })), - state('hiddenAnimated', style({ - height: '0px' - })), - state('visibleAnimated', style({ - height: '*' - })), - transition('visibleAnimated => hiddenAnimated', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')), - transition('hiddenAnimated => visibleAnimated', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')), - transition('void => visibleAnimated, visibleAnimated => void', - animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')) - ]) - ] -}) -export class AppMenuitemComponent implements OnInit, OnDestroy { - - @Input() item: any; - - @Input() index: number; - - @Input() root: boolean; - - @Input() parentKey: string; - - active = false; - - menuSourceSubscription: Subscription; - - menuResetSubscription: Subscription; - - key: string; - - constructor(public app: AppMainComponent, public router: Router, private cd: ChangeDetectorRef, private menuService: MenuService) { - this.menuSourceSubscription = this.menuService.menuSource$.subscribe(key => { - // deactivate current active menu - if (this.active && this.key !== key && key.indexOf(this.key) !== 0) { - this.active = false; - } - }); - - this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => { - this.active = false; - }); - - this.router.events.pipe(filter(event => event instanceof NavigationEnd)) - .subscribe(params => { - if (this.item.routerLink) { - this.updateActiveStateFromRoute(); - } else { - this.active = false; - } - }); - } - - ngOnInit() { - if (this.item.routerLink) { - this.updateActiveStateFromRoute(); - } - - this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index); - } - - updateActiveStateFromRoute() { - this.active = this.router.isActive(this.item.routerLink[0], this.item.items ? false : true); - } - - itemClick(event: Event) { - event.stopPropagation(); - // avoid processing disabled items - if (this.item.disabled) { - event.preventDefault(); - return; - } - - // notify other items - this.menuService.onMenuStateChange(this.key); - - // execute command - if (this.item.command) { - this.item.command({originalEvent: event, item: this.item}); - } - - // toggle active state - if (this.item.items) { - this.active = !this.active; - } else { - // activate item - this.active = true; - - // hide overlay menus - this.app.menuActiveMobile = false; - - if (this.app.isDesktop() && this.app.isOverlay()) { - this.app.menuInactiveDesktop = true; - } - } - } - - ngOnDestroy() { - if (this.menuSourceSubscription) { - this.menuSourceSubscription.unsubscribe(); - } - - if (this.menuResetSubscription) { - this.menuResetSubscription.unsubscribe(); - } - } -} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 45ab02b..3fab8fa 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,283 +1,29 @@ import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { HttpClientModule } from '@angular/common/http'; -import { BrowserModule } from '@angular/platform-browser'; -import { LocationStrategy, HashLocationStrategy } from '@angular/common'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { AppRoutingModule } from './app-routing.module'; - -import { StyleClassModule } from 'primeng/styleclass'; -import { AccordionModule } from 'primeng/accordion'; -import { AutoCompleteModule } from 'primeng/autocomplete'; -import { AvatarModule } from 'primeng/avatar'; -import { AvatarGroupModule } from 'primeng/avatargroup'; -import { BadgeModule } from 'primeng/badge'; -import { BreadcrumbModule } from 'primeng/breadcrumb'; -import { ButtonModule } from 'primeng/button'; -import { CalendarModule } from 'primeng/calendar'; -import { CardModule } from 'primeng/card'; -import { CarouselModule } from 'primeng/carousel'; -import { CascadeSelectModule } from 'primeng/cascadeselect'; -import { ChartModule } from 'primeng/chart'; -import { CheckboxModule } from 'primeng/checkbox'; -import { ChipModule } from 'primeng/chip'; -import { ChipsModule } from 'primeng/chips'; -import { CodeHighlighterModule } from 'primeng/codehighlighter'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; -import { ConfirmPopupModule } from 'primeng/confirmpopup'; -import { ColorPickerModule } from 'primeng/colorpicker'; -import { ContextMenuModule } from 'primeng/contextmenu'; -import { DataViewModule } from 'primeng/dataview'; -import { DialogModule } from 'primeng/dialog'; -import { DividerModule } from 'primeng/divider'; -import { DropdownModule } from 'primeng/dropdown'; -import { FieldsetModule } from 'primeng/fieldset'; -import { FileUploadModule } from 'primeng/fileupload'; -import { GalleriaModule } from 'primeng/galleria'; -import { ImageModule } from 'primeng/image'; -import { InplaceModule } from 'primeng/inplace'; -import { InputNumberModule } from 'primeng/inputnumber'; -import { InputMaskModule } from 'primeng/inputmask'; -import { InputSwitchModule } from 'primeng/inputswitch'; -import { InputTextModule } from 'primeng/inputtext'; -import { InputTextareaModule } from 'primeng/inputtextarea'; -import { KnobModule } from 'primeng/knob'; -import { LightboxModule } from 'primeng/lightbox'; -import { ListboxModule } from 'primeng/listbox'; -import { MegaMenuModule } from 'primeng/megamenu'; -import { MenuModule } from 'primeng/menu'; -import { MenubarModule } from 'primeng/menubar'; -import { MessagesModule } from 'primeng/messages'; -import { MessageModule } from 'primeng/message'; -import { MultiSelectModule } from 'primeng/multiselect'; -import { OrderListModule } from 'primeng/orderlist'; -import { OrganizationChartModule } from 'primeng/organizationchart'; -import { OverlayPanelModule } from 'primeng/overlaypanel'; -import { PaginatorModule } from 'primeng/paginator'; -import { PanelModule } from 'primeng/panel'; -import { PanelMenuModule } from 'primeng/panelmenu'; -import { PasswordModule } from 'primeng/password'; -import { PickListModule } from 'primeng/picklist'; -import { ProgressBarModule } from 'primeng/progressbar'; -import { RadioButtonModule } from 'primeng/radiobutton'; -import { RatingModule } from 'primeng/rating'; -import { RippleModule } from 'primeng/ripple'; -import { ScrollPanelModule } from 'primeng/scrollpanel'; -import { ScrollTopModule } from 'primeng/scrolltop'; -import { SelectButtonModule } from 'primeng/selectbutton'; -import { SidebarModule } from 'primeng/sidebar'; -import { SkeletonModule } from 'primeng/skeleton'; -import { SlideMenuModule } from 'primeng/slidemenu'; -import { SliderModule } from 'primeng/slider'; -import { SplitButtonModule } from 'primeng/splitbutton'; -import { SplitterModule } from 'primeng/splitter'; -import { StepsModule } from 'primeng/steps'; -import { TabMenuModule } from 'primeng/tabmenu'; -import { TableModule } from 'primeng/table'; -import { TabViewModule } from 'primeng/tabview'; -import { TagModule } from 'primeng/tag'; -import { TerminalModule } from 'primeng/terminal'; -import { TieredMenuModule } from 'primeng/tieredmenu'; -import { TimelineModule } from 'primeng/timeline'; -import { ToastModule } from 'primeng/toast'; -import { ToggleButtonModule } from 'primeng/togglebutton'; -import { ToolbarModule } from 'primeng/toolbar'; -import { TooltipModule } from 'primeng/tooltip'; -import { TreeModule } from 'primeng/tree'; -import { TreeSelectModule } from 'primeng/treeselect'; -import { TreeTableModule } from 'primeng/treetable'; -import { VirtualScrollerModule } from 'primeng/virtualscroller'; -import { BlockViewer } from './components/blockviewer/blockviewer.component'; - -import { AppCodeModule } from './components/app-code/app.code.component'; +import { HashLocationStrategy, LocationStrategy } from '@angular/common'; import { AppComponent } from './app.component'; -import { AppMainComponent } from './app.main.component'; -import { AppTopBarComponent } from './app.topbar.component'; -import { AppFooterComponent } from './app.footer.component'; -import { AppConfigComponent } from './app.config.component'; -import { AppMenuComponent } from './app.menu.component'; -import { AppMenuitemComponent } from './app.menuitem.component'; - -import { DashboardComponent } from './components/dashboard/dashboard.component'; -import { FormLayoutComponent } from './components/formlayout/formlayout.component'; -import { FloatLabelComponent } from './components/floatlabel/floatlabel.component'; -import { InvalidStateComponent } from './components/invalidstate/invalidstate.component'; -import { InputComponent } from './components/input/input.component'; -import { ButtonComponent } from './components/button/button.component'; -import { TableComponent } from './components/table/table.component'; -import { ListComponent } from './components/list/list.component'; -import { TreeComponent } from './components/tree/tree.component'; -import { PanelsComponent } from './components/panels/panels.component'; -import { OverlaysComponent } from './components/overlays/overlays.component'; -import { MediaComponent } from './components/media/media.component'; -import { MenusComponent } from './components/menus/menus.component'; -import { MessagesComponent } from './components/messages/messages.component'; -import { MiscComponent } from './components/misc/misc.component'; -import { EmptyComponent } from './components/empty/empty.component'; -import { ChartsComponent } from './components/charts/charts.component'; -import { FileComponent } from './components/file/file.component'; -import { DocumentationComponent } from './components/documentation/documentation.component'; -import { CrudComponent } from './components/crud/crud.component'; -import { TimelineComponent } from './components/timeline/timeline.component'; -import { IconsComponent } from './components/icons/icons.component'; -import { BlocksComponent } from './components/blocks/blocks.component'; -import { PaymentComponent} from './components/menus/payment.component'; -import { ConfirmationComponent } from './components/menus/confirmation.component'; -import { PersonalComponent } from './components/menus/personal.component'; -import { SeatComponent } from './components/menus/seat.component'; -import { LandingComponent } from './components/landing/landing.component'; - -import { CountryService } from './service/countryservice'; -import { CustomerService } from './service/customerservice'; -import { EventService } from './service/eventservice'; -import { IconService } from './service/iconservice'; -import { NodeService } from './service/nodeservice'; -import { PhotoService } from './service/photoservice'; -import { ProductService } from './service/productservice'; -import { MenuService } from './service/app.menu.service'; -import { ConfigService } from './service/app.config.service'; -import { LoginComponent } from './components/login/login.component'; -import { ErrorComponent } from './components/error/error.component'; -import { NotfoundComponent } from './components/notfound/notfound.component'; -import { AccessComponent } from './components/access/access.component'; +import { AppRoutingModule } from './app-routing.module'; +import { AppLayoutModule } from './layout/app.layout.module'; +import { NotfoundComponent } from './demo/components/notfound/notfound.component'; +import { ProductService } from './demo/service/product.service'; +import { CountryService } from './demo/service/country.service'; +import { CustomerService } from './demo/service/customer.service'; +import { EventService } from './demo/service/event.service'; +import { IconService } from './demo/service/icon.service'; +import { NodeService } from './demo/service/node.service'; +import { PhotoService } from './demo/service/photo.service'; @NgModule({ - imports: [ - BrowserModule, - FormsModule, - AppRoutingModule, - HttpClientModule, - BrowserAnimationsModule, - AccordionModule, - AutoCompleteModule, - AvatarModule, - AvatarGroupModule, - BadgeModule, - BreadcrumbModule, - ButtonModule, - CalendarModule, - CardModule, - CarouselModule, - CascadeSelectModule, - ChartModule, - CheckboxModule, - ChipsModule, - ChipModule, - CodeHighlighterModule, - ConfirmDialogModule, - ConfirmPopupModule, - ColorPickerModule, - ContextMenuModule, - DataViewModule, - DialogModule, - DividerModule, - DropdownModule, - FieldsetModule, - FileUploadModule, - GalleriaModule, - ImageModule, - InplaceModule, - InputNumberModule, - InputMaskModule, - InputSwitchModule, - InputTextModule, - InputTextareaModule, - KnobModule, - LightboxModule, - ListboxModule, - MegaMenuModule, - MenuModule, - MenubarModule, - MessageModule, - MessagesModule, - MultiSelectModule, - OrderListModule, - OrganizationChartModule, - OverlayPanelModule, - PaginatorModule, - PanelModule, - PanelMenuModule, - PasswordModule, - PickListModule, - ProgressBarModule, - RadioButtonModule, - RatingModule, - RippleModule, - ScrollPanelModule, - ScrollTopModule, - SelectButtonModule, - SidebarModule, - SkeletonModule, - SlideMenuModule, - SliderModule, - SplitButtonModule, - SplitterModule, - StepsModule, - TagModule, - TableModule, - TabMenuModule, - TabViewModule, - TerminalModule, - TieredMenuModule, - TimelineModule, - ToastModule, - ToggleButtonModule, - ToolbarModule, - TooltipModule, - TreeModule, - TreeSelectModule, - TreeTableModule, - VirtualScrollerModule, - AppCodeModule, - StyleClassModule, - ], declarations: [ - AppComponent, - AppMainComponent, - AppTopBarComponent, - AppFooterComponent, - AppConfigComponent, - AppMenuComponent, - AppMenuitemComponent, - DashboardComponent, - FormLayoutComponent, - FloatLabelComponent, - InvalidStateComponent, - InputComponent, - ButtonComponent, - TableComponent, - ListComponent, - TreeComponent, - PanelsComponent, - OverlaysComponent, - MenusComponent, - MessagesComponent, - MessagesComponent, - MiscComponent, - ChartsComponent, - EmptyComponent, - FileComponent, - IconsComponent, - DocumentationComponent, - CrudComponent, - TimelineComponent, - BlocksComponent, - BlockViewer, - MediaComponent, - PaymentComponent, - ConfirmationComponent, - PersonalComponent, - SeatComponent, - LandingComponent, - LoginComponent, - ErrorComponent, - NotfoundComponent, - AccessComponent, + AppComponent, NotfoundComponent + ], + imports: [ + AppRoutingModule, + AppLayoutModule ], providers: [ - {provide: LocationStrategy, useClass: HashLocationStrategy}, + { provide: LocationStrategy, useClass: HashLocationStrategy }, CountryService, CustomerService, EventService, IconService, NodeService, - PhotoService, ProductService, MenuService, ConfigService + PhotoService, ProductService ], bootstrap: [AppComponent] }) diff --git a/src/app/app.topbar.component.html b/src/app/app.topbar.component.html deleted file mode 100644 index 0e1698a..0000000 --- a/src/app/app.topbar.component.html +++ /dev/null @@ -1,29 +0,0 @@ - \ No newline at end of file diff --git a/src/app/app.topbar.component.ts b/src/app/app.topbar.component.ts deleted file mode 100644 index a9b3a34..0000000 --- a/src/app/app.topbar.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnDestroy } from '@angular/core'; -import { AppMainComponent } from './app.main.component'; -import { Subscription } from 'rxjs'; -import { MenuItem } from 'primeng/api'; - -@Component({ - selector: 'app-topbar', - templateUrl: './app.topbar.component.html' -}) -export class AppTopBarComponent { - - items: MenuItem[]; - - constructor(public appMain: AppMainComponent) { } -} diff --git a/src/app/components/access/access.component.ts b/src/app/components/access/access.component.ts deleted file mode 100644 index 401b3be..0000000 --- a/src/app/components/access/access.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-access', - templateUrl: './access.component.html', -}) -export class AccessComponent {} \ No newline at end of file diff --git a/src/app/components/blocks/blocks.component.ts b/src/app/components/blocks/blocks.component.ts deleted file mode 100644 index 248b9bb..0000000 --- a/src/app/components/blocks/blocks.component.ts +++ /dev/null @@ -1,407 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - templateUrl: './blocks.component.html' -}) -export class BlocksComponent{ - - block1: string = ` -
-
-
- Create the screens your -
your visitors deserve to see
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

- - - -
-
-
- Image -
-
`; - - block2: string = ` -
-
- One Product, - Many Solutions -
-
Ac turpis egestas maecenas pharetra convallis posuere morbi leo urna.
-
-
- - - -
Built for Developers
- Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -
-
- - - -
End-to-End Encryption
- Risus nec feugiat in fermentum posuere urna nec. Posuere sollicitudin aliquam ultrices sagittis. -
-
- - - -
Easy to Use
- Ornare suspendisse sed nisi lacus sed viverra tellus. Neque volutpat ac tincidunt vitae semper. -
-
- - - -
Fast & Global Support
- Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. -
-
- - - -
Open Source
- Nec tincidunt praesent semper feugiat. Sed adipiscing diam donec adipiscing tristique risus nec feugiat. -
-
- - - -
Trusted Securitty
- Mattis rhoncus urna neque viverra justo nec ultrices. Id cursus metus aliquam eleifend. -
-
-
`; - - block3: string = ` -
-
Pricing Plans
-
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Velit numquam eligendi quos.
- -
-
-
-
-
Basic
-
Plan description
-
-
- $9 - per month -
-
-
    -
  • - - Arcu vitae elementum -
  • -
  • - - Dui faucibus in ornare -
  • -
  • - - Morbi tincidunt augue -
  • -
-
- -
-
-
- -
-
-
-
Premium
-
Plan description
-
-
- $29 - per month -
-
-
    -
  • - - Arcu vitae elementum -
  • -
  • - - Dui faucibus in ornare -
  • -
  • - - Morbi tincidunt augue -
  • -
  • - - Duis ultricies lacus sed -
  • -
-
- -
-
-
- -
-
-
-
Enterprise
-
Plan description
-
-
- $49 - per month -
-
-
    -
  • - - Arcu vitae elementum -
  • -
  • - - Dui faucibus in ornare -
  • -
  • - - Morbi tincidunt augue -
  • -
  • - - Duis ultricies lacus sed -
  • -
  • - - Imperdiet proin -
  • -
  • - - Nisi scelerisque -
  • -
-
- -
-
-
-
-
`; - - block4: string = ` -
-
-
 POWERED BY DISCORD
-
Join Our Design Community
-
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Velit numquam eligendi quos.
- -
-
`; - - block5: string = ` -
-
🔥 Hot Deals!
- - - Learn More - - - - -
`; - - block6: string = ` -
- -
-
-
Customers
-
-
- - 332 Active Users -
-
- - 9402 Sessions -
-
- - 2.32m Avg. Duration -
-
-
-
- - -
-
-
`; - - block7: string = ` -
-
-
-
-
-
- Orders -
152
-
-
- -
-
- 24 new - since last visit -
-
-
-
-
-
- Revenue -
$2.100
-
-
- -
-
- %52+ - since last week -
-
-
-
-
-
- Customers -
28441
-
-
- -
-
- 520 - newly registered -
-
-
-
-
-
- Comments -
152 Unread
-
-
- -
-
- 85 - responded -
-
-
-
`; - - block8: string = ` -
-
- Image -
Welcome Back
- Don't have an account? - Create today! -
- -
- - - - - - -
-
- - -
- Forgot password? -
- - -
-
`; - - block9: string = ` -
-
Movie Information
-
Morbi tristique blandit turpis. In viverra ligula id nulla hendrerit rutrum.
-
    -
  • -
    Title
    -
    Heat
    -
    - -
    -
  • -
  • -
    Genre
    -
    - - - -
    -
    - -
    -
  • -
  • -
    Director
    -
    Michael Mann
    -
    - -
    -
  • -
  • -
    Actors
    -
    Robert De Niro, Al Pacino
    -
    - -
    -
  • -
  • -
    Plot
    -
    - A group of professional bank robbers start to feel the heat from police - when they unknowingly leave a clue at their latest heist.
    -
    - -
    -
  • -
-
`; - - block10: string = ` -
-
Card Title
-
Vivamus id nisl interdum, blandit augue sit amet, eleifend mi.
-
-
`; - -} diff --git a/src/app/components/button/button.component.ts b/src/app/components/button/button.component.ts deleted file mode 100644 index f0dc617..0000000 --- a/src/app/components/button/button.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { MenuItem } from 'primeng/api'; - -@Component({ - templateUrl: './button.component.html' -}) -export class ButtonComponent implements OnInit { - - items: MenuItem[]; - - loading = [false, false, false, false] - - ngOnInit() { - this.items = [ - {label: 'Update', icon: 'pi pi-refresh'}, - {label: 'Delete', icon: 'pi pi-times'}, - {label: 'Angular.io', icon: 'pi pi-info', url: 'http://angular.io'}, - {separator: true}, - {label: 'Setup', icon: 'pi pi-cog'} - ]; - } - - load(index) { - this.loading[index] = true; - setTimeout(() => this.loading[index] = false, 1000); - } -} diff --git a/src/app/components/charts/charts.component.ts b/src/app/components/charts/charts.component.ts deleted file mode 100755 index 0539cc5..0000000 --- a/src/app/components/charts/charts.component.ts +++ /dev/null @@ -1,374 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { Subscription } from 'rxjs'; -import { AppConfig } from 'src/app/api/appconfig'; -import { ConfigService } from 'src/app/service/app.config.service'; - -@Component({ - templateUrl: './charts.component.html' -}) -export class ChartsComponent implements OnInit, OnDestroy { - - lineData: any; - - barData: any; - - pieData: any; - - polarData: any; - - radarData: any; - - lineOptions: any; - - barOptions: any; - - pieOptions: any; - - polarOptions: any; - - radarOptions: any; - - config: AppConfig; - - subscription: Subscription; - - constructor(public configService: ConfigService) { } - - ngOnInit() { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => { - this.config = config; - this.updateChartOptions(); - }); - - this.lineData = { - labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], - datasets: [ - { - label: 'First Dataset', - data: [65, 59, 80, 81, 56, 55, 40], - fill: false, - backgroundColor: '#2f4860', - borderColor: '#2f4860', - tension: .4 - }, - { - label: 'Second Dataset', - data: [28, 48, 40, 19, 86, 27, 90], - fill: false, - backgroundColor: '#00bb7e', - borderColor: '#00bb7e', - tension: .4 - } - ] - }; - - this.barData = { - labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], - datasets: [ - { - label: 'My First dataset', - backgroundColor: '#2f4860', - data: [65, 59, 80, 81, 56, 55, 40] - }, - { - label: 'My Second dataset', - backgroundColor: '#00bb7e', - data: [28, 48, 40, 19, 86, 27, 90] - } - ] - }; - - this.pieData = { - labels: ['A', 'B', 'C'], - datasets: [ - { - data: [300, 50, 100], - backgroundColor: [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ], - hoverBackgroundColor: [ - "#FF6384", - "#36A2EB", - "#FFCE56" - ] - } - ] - }; - - this.polarData = { - datasets: [{ - data: [ - 11, - 16, - 7, - 3, - 14 - ], - backgroundColor: [ - "#FF6384", - "#4BC0C0", - "#FFCE56", - "#E7E9ED", - "#36A2EB" - ], - label: 'My dataset' - }], - labels: [ - "Red", - "Green", - "Yellow", - "Grey", - "Blue" - ] - }; - - this.radarData = { - labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], - datasets: [ - { - label: 'My First dataset', - backgroundColor: 'rgba(179,181,198,0.2)', - borderColor: 'rgba(179,181,198,1)', - pointBackgroundColor: 'rgba(179,181,198,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(179,181,198,1)', - data: [65, 59, 90, 81, 56, 55, 40] - }, - { - label: 'My Second dataset', - backgroundColor: 'rgba(255,99,132,0.2)', - borderColor: 'rgba(255,99,132,1)', - pointBackgroundColor: 'rgba(255,99,132,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(255,99,132,1)', - data: [28, 48, 40, 19, 96, 27, 100] - } - ] - }; - - this.updateChartOptions(); - } - - updateChartOptions() { - if (this.config.dark) - this.applyDarkTheme(); - else - this.applyLightTheme(); - } - - applyLightTheme() { - this.lineOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - }, - scales: { - x: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - y: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - } - }; - - this.barOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - }, - scales: { - x: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - y: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - } - }; - - this.pieOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - } - }; - - this.polarOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - }, - scales: { - r: { - grid: { - color: '#ebedef' - } - } - } - }; - - this.radarOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - }, - scales: { - r: { - grid: { - color: '#ebedef' - } - } - } - }; - - } - - applyDarkTheme() { - this.lineOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - }, - scales: { - x: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - y: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - } - }; - - this.barOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - }, - scales: { - x: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - y: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - } - }; - - this.pieOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - } - }; - - this.polarOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - }, - scales: { - r: { - grid: { - color: 'rgba(160, 167, 181, .3)' - } - } - } - }; - - this.radarOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - }, - scales: { - r: { - grid: { - color: 'rgba(160, 167, 181, .3)' - } - } - } - }; - } - - ngOnDestroy() { - if (this.subscription) { - this.subscription.unsubscribe(); - } - } -} diff --git a/src/app/components/dashboard/dashboard.component.ts b/src/app/components/dashboard/dashboard.component.ts deleted file mode 100755 index 595c62b..0000000 --- a/src/app/components/dashboard/dashboard.component.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { MenuItem } from 'primeng/api'; -import { Product } from '../../api/product'; -import { ProductService } from '../../service/productservice'; -import { Subscription } from 'rxjs'; -import { ConfigService } from '../../service/app.config.service'; -import { AppConfig } from '../../api/appconfig'; - -@Component({ - templateUrl: './dashboard.component.html', -}) -export class DashboardComponent implements OnInit { - - items: MenuItem[]; - - products: Product[]; - - chartData: any; - - chartOptions: any; - - subscription: Subscription; - - config: AppConfig; - - constructor(private productService: ProductService, public configService: ConfigService) {} - - ngOnInit() { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => { - this.config = config; - this.updateChartOptions(); - }); - this.productService.getProductsSmall().then(data => this.products = data); - - this.items = [ - {label: 'Add New', icon: 'pi pi-fw pi-plus'}, - {label: 'Remove', icon: 'pi pi-fw pi-minus'} - ]; - - this.chartData = { - labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], - datasets: [ - { - label: 'First Dataset', - data: [65, 59, 80, 81, 56, 55, 40], - fill: false, - backgroundColor: '#2f4860', - borderColor: '#2f4860', - tension: .4 - }, - { - label: 'Second Dataset', - data: [28, 48, 40, 19, 86, 27, 90], - fill: false, - backgroundColor: '#00bb7e', - borderColor: '#00bb7e', - tension: .4 - } - ] - }; - } - - updateChartOptions() { - if (this.config.dark) - this.applyDarkTheme(); - else - this.applyLightTheme(); - - } - - applyDarkTheme() { - this.chartOptions = { - plugins: { - legend: { - labels: { - color: '#ebedef' - } - } - }, - scales: { - x: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - y: { - ticks: { - color: '#ebedef' - }, - grid: { - color: 'rgba(160, 167, 181, .3)', - } - }, - } - }; - } - - applyLightTheme() { - this.chartOptions = { - plugins: { - legend: { - labels: { - color: '#495057' - } - } - }, - scales: { - x: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - y: { - ticks: { - color: '#495057' - }, - grid: { - color: '#ebedef', - } - }, - } - }; - } -} diff --git a/src/app/components/documentation/documentation.component.html b/src/app/components/documentation/documentation.component.html deleted file mode 100755 index ac08ffb..0000000 --- a/src/app/components/documentation/documentation.component.html +++ /dev/null @@ -1,69 +0,0 @@ -
-
-
-

Current Version

-

Angular 13 and PrimeNG 13

- -

Getting Started

-

Sakai is an application template for Angular and is distributed as a CLI project. In case CLI is not installed already, use - the command below to set it up. -

- - -npm install -g @angular/cli - - -

Once CLI is ready in your system, clone the github repository, cd to the directory, - install the libraries from npm and then execute "ng serve" to run the application in your local environment.

- - -git clone https://github.com/primefaces/sakai-ng.git -cd sakai-ng -npm install -ng serve - - -

The application should run at http://localhost:4200/, you may now start with the development of your application.

- -
Important CLI Commands
-

Following commands are derived from CLI.

- -Run 'ng serve' for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -Run 'ng generate component component-name' to generate a new component. You can also use `ng generate directive/pipe/service/class/module`. - -Run 'ng build' to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. - -Run 'ng test' to execute the unit tests via [Karma](https://karma-runner.github.io). - -Run 'ng e2e' to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). - -Run 'ng help' for more options. - - -
Dependencies
-

Sakai has no direct dependency other than PrimeNG. More information about dependencies of PrimeNG templates is available at Why PrimeNG Templates article.

- -

Structure

-

Sakai consists of 2 main parts; the application layout, layout resources. app.component.html inside app folder is the html template for the base layout, - required resources for the layout are placed inside the src/assets/layout folder and similarly theme resources are inside src/assets/theme folder. -

- -
Application Template
-

Main layout is the html template of the app.main.component.ts, it is divided into a couple of sections such as topbar, sidebar, right panel and footer. Here is the code for - the main template. The component class app.main.component.ts implements the logic such as opening menus and managing layout modes. -

- -
Menu
-

Menu is a separate component defined in app.menu.component.ts file based on PrimeNG MenuModel API. In order to define the menuitems, - navigate to this file and define your own model as a nested structure. Here is the menu component from the sample application.

- -
Theme
-

Sakai layout derives the color scheme from the PrimeNG theme being used so that it can be combined any theme such as PrimeOne, Material, Bootstrap and others with dark mode alternatives.

- -
SASS Variables
-

In case you'd like to customize the layout variables, open _variables.scss file under src/assets/sass/layout folder. Saving the changes - will be reflected instantly at your browser.

-
-
-
\ No newline at end of file diff --git a/src/app/components/empty/empty.component.ts b/src/app/components/empty/empty.component.ts deleted file mode 100755 index 7b17016..0000000 --- a/src/app/components/empty/empty.component.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - templateUrl: './empty.component.html' -}) -export class EmptyComponent {} diff --git a/src/app/components/error/error.component.ts b/src/app/components/error/error.component.ts deleted file mode 100644 index fff1795..0000000 --- a/src/app/components/error/error.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-error', - templateUrl: './error.component.html', -}) -export class ErrorComponent {} \ No newline at end of file diff --git a/src/app/components/file/file.component.ts b/src/app/components/file/file.component.ts deleted file mode 100755 index 383eef7..0000000 --- a/src/app/components/file/file.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Component } from '@angular/core'; -import { MessageService } from 'primeng/api'; - -@Component({ - templateUrl: './file.component.html', - providers: [MessageService] -}) -export class FileComponent { - - uploadedFiles: any[] = []; - - constructor(private messageService: MessageService) {} - - onUpload(event) { - for (const file of event.files) { - this.uploadedFiles.push(file); - } - - this.messageService.add({severity: 'info', summary: 'Success', detail: 'File Uploaded'}); - } -} diff --git a/src/app/components/icons/icons.component.html b/src/app/components/icons/icons.component.html deleted file mode 100644 index 0fed8be..0000000 --- a/src/app/components/icons/icons.component.html +++ /dev/null @@ -1,57 +0,0 @@ -
-

Icons

- -
Download
- -npm install primeicons --save - - -
Getting Started
-

PrimeIcons use the pi pi-{icon} syntax such as pi pi-check. - A standalone icon can be displayed using an element such as i or span

- - -<i class="pi pi-check"></i> -<i class="pi pi-times"></i> - - - - - -
Size
-

Size of the icons can easily be changed using font-size property.

- - -<i class="pi pi-check"></i> - - - - - -<i class="pi pi-check" style="font-size: 2rem"></i> - - - - -
Spinning Animation
-

Special pi-spin class applies infinite rotate to an icon.

- - -<i class="pi pi-spin pi-spinner" style="font-size: 2rem"></i> - - - - -
List of Icons
-

Here is the current list of PrimeIcons, more icons will be added periodically. You may also request new icons at the issue tracker.

-
- -
- -
-
- -
pi-{{icon.properties.name}}
-
-
-
diff --git a/src/app/components/icons/icons.component.ts b/src/app/components/icons/icons.component.ts deleted file mode 100644 index d4f65f1..0000000 --- a/src/app/components/icons/icons.component.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { IconService } from '../../service/iconservice'; - -@Component({ - selector: 'app-iconsdemo', - templateUrl: './icons.component.html' -}) -export class IconsComponent implements OnInit { - - icons: any[]; - - filteredIcons: any[]; - - selectedIcon: any; - - constructor(private iconService : IconService) { } - - ngOnInit() { - this.iconService.getIcons().subscribe(data => { - data = data.filter(value => { - return value.icon.tags.indexOf('deprecate') === -1; - }); - - let icons = data; - icons.sort((icon1, icon2) => { - if(icon1.properties.name < icon2.properties.name) - return -1; - else if(icon1.properties.name < icon2.properties.name) - return 1; - else - return 0; - }); - - this.icons = icons; - this.filteredIcons = data; - }); - } - - onFilter(event: KeyboardEvent): void { - const searchText = (event.target as HTMLInputElement).value; - - if (!searchText) { - this.filteredIcons = this.icons; - } - else { - this.filteredIcons = this.icons.filter( it => { - return it.icon.tags[0].includes(searchText); - }); - } - } - -} diff --git a/src/app/components/input/input.component.ts b/src/app/components/input/input.component.ts deleted file mode 100644 index 3d25f57..0000000 --- a/src/app/components/input/input.component.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { CountryService } from '../../service/countryservice'; -import { NodeService } from '../../service/nodeservice'; -import { SelectItem } from 'primeng/api'; - -@Component({ - templateUrl: './input.component.html', - styles: [`:host ::ng-deep .p-multiselect { - min-width: 15rem; - } - - :host ::ng-deep .multiselect-custom-virtual-scroll .p-multiselect { - min-width: 20rem; - } - - :host ::ng-deep .multiselect-custom .p-multiselect-label, { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - - } - - :host ::ng-deep .multiselect-custom .country-item.country-item-value { - padding: .25rem .5rem; - border-radius: 3px; - display: inline-flex; - margin-right: .5rem; - background-color: var(--primary-color); - color: var(--primary-color-text); - } - - :host ::ng-deep .multiselect-custom .country-item.country-item-value img.flag { - width: 17px; - } - - :host ::ng-deep .multiselect-custom .country-item { - display: flex; - align-items: center; - } - - :host ::ng-deep .multiselect-custom .country-item img.flag { - width: 18px; - margin-right: .5rem; - } - - :host ::ng-deep .multiselect-custom .country-placeholder { - padding: 0.25rem; - } - - `] -}) -export class InputComponent implements OnInit{ - countries: any[]; - - filteredCountries: any[]; - - selectedCountryAdvanced: any[]; - - valSlider = 50; - - valColor = '#424242'; - - valRadio: string; - - valCheck: string[] = []; - - valSwitch: boolean; - - cities: SelectItem[]; - - selectedList: SelectItem; - - selectedDrop: SelectItem; - - selectedMulti: string[] = []; - - treeSelectNodes: any[]; - - selectedNode: SelectItem; - - valToggle = false; - - paymentOptions: any[]; - - valSelect1: string; - - valSelect2: string; - - valueKnob = 20; - - selectedDate:any; - - constructor(private countryService: CountryService, private nodeService: NodeService) {} - - ngOnInit() { - this.countryService.getCountries().then(countries => { - this.countries = countries; - }); - - this.cities = [ - {label: 'New York', value: {id: 1, name: 'New York', code: 'NY'}}, - {label: 'Rome', value: {id: 2, name: 'Rome', code: 'RM'}}, - {label: 'London', value: {id: 3, name: 'London', code: 'LDN'}}, - {label: 'Istanbul', value: {id: 4, name: 'Istanbul', code: 'IST'}}, - {label: 'Paris', value: {id: 5, name: 'Paris', code: 'PRS'}} - ]; - - this.paymentOptions = [ - {name: 'Option 1', value: 1}, - {name: 'Option 2', value: 2}, - {name: 'Option 3', value: 3} - ]; - - this.nodeService.getFiles().then(files => this.treeSelectNodes = files) - } - - filterCountry(event) { - const filtered: any[] = []; - const query = event.query; - for (let i = 0; i < this.countries.length; i++) { - const country = this.countries[i]; - if (country.name.toLowerCase().indexOf(query.toLowerCase()) == 0) { - filtered.push(country); - } - } - - this.filteredCountries = filtered; - } -} diff --git a/src/app/components/landing/landing.component.html b/src/app/components/landing/landing.component.html deleted file mode 100644 index 245855a..0000000 --- a/src/app/components/landing/landing.component.html +++ /dev/null @@ -1,357 +0,0 @@ -
- - -
-
-

Eu sem integereget magna fermentum

-

Sed blandit libero volutpat sed cras. Fames ac turpis egestas integer. Placerat in egestas erat...

- -
- -
- -
-
-
-

Marvelous Features

- Placerat in egestas erat... -
- -
-
-
-
- -
-
Easy to Use
- Posuere morbi leo urna molestie. -
-
-
- -
-
-
-
- -
-
Fresh Design
- Semper risus in hendrerit. -
-
-
- -
-
-
-
- -
-
Well Documented
- Non arcu risus quis varius quam quisque. -
-
-
- -
-
-
-
- -
-
Responsive Layout
- Nulla malesuada pellentesque elit. -
-
-
- -
-
-
-
- -
-
Clean Code
- Condimentum lacinia quis vel eros. -
-
-
- -
-
-
-
- -
-
Dark Mode
- Convallis tellus id interdum velit laoreet. -
-
-
- -
-
-
-
- -
-
Ready to Use
- Mauris sit amet massa vitae. -
-
-
- -
-
-
-
- -
-
Modern Practices
- Elementum nibh tellus molestie nunc non. -
-
-
- -
-
-
-
- -
-
Privacy
- Neque egestas congue quisque. -
-
-
- -
-
-

Joséphine Miller

- Peak Interactive -

“Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.”

- Company logo - -
-
-
-
- -
-
-

Powerful Everywhere

- Amet consectetur adipiscing elit... -
- -
-
- mockup mobile -
- -
-
- -
-

Congue Quisque Egestas

- Lectus arcu bibendum at varius vel pharetra vel turpis nunc. Eget aliquet nibh praesent tristique magna sit amet purus gravida. Sit amet mattis vulputate enim nulla aliquet. -
-
- -
-
-
- -
-

Celerisque Eu Ultrices

- Adipiscing commodo elit at imperdiet dui. Viverra nibh cras pulvinar mattis nunc sed blandit libero. Suspendisse in est ante in. Mauris pharetra et ultrices neque ornare aenean euismod elementum nisi. -
- -
- mockup -
-
-
- -
-
-

Matchless Pricing

- Amet consectetur adipiscing elit... -
- -
-
-
-

Free

- free -
- $0 - per month - -
- -
    -
  • - - Responsive Layout -
  • -
  • - - Unlimited Push Messages -
  • -
  • - - 50 Support Ticket -
  • -
  • - - Free Shipping -
  • -
-
-
- -
-
-

Startup

- startup -
- $1 - per month - -
- -
    -
  • - - Responsive Layout -
  • -
  • - - Unlimited Push Messages -
  • -
  • - - 50 Support Ticket -
  • -
  • - - Free Shipping -
  • -
-
-
- -
-
-

Enterprise

- enterprise -
- $999 - per month - -
- -
    -
  • - - Responsive Layout -
  • -
  • - - Unlimited Push Messages -
  • -
  • - - 50 Support Ticket -
  • -
  • - - Free Shipping -
  • -
-
-
-
-
- -
-
- - -
-
- - -
-

Resources

- Get Started - Learn - Case Studies -
- -
-

Community

- Discord - Events - FAQ - Blog -
- - -
-
-
-
-
\ No newline at end of file diff --git a/src/app/components/landing/landing.component.ts b/src/app/components/landing/landing.component.ts deleted file mode 100644 index 06d106b..0000000 --- a/src/app/components/landing/landing.component.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ConfigService } from '../../service/app.config.service'; -import { AppConfig } from '../../api/appconfig'; -import { Subscription } from 'rxjs'; -import { Router } from '@angular/router'; -@Component({ - selector: 'app-landing', - templateUrl: './landing.component.html', - styles: [` - #hero{ - background: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), radial-gradient(77.36% 256.97% at 77.36% 57.52%, #EEEFAF 0%, #C3E3FA 100%); - height:700px; - overflow:hidden; - } - - .pricing-card:hover{ - border:2px solid var(--cyan-200) !important; - } - - @media screen and (min-width: 768px) { - #hero{ - -webkit-clip-path: ellipse(150% 87% at 93% 13%); - clip-path: ellipse(150% 87% at 93% 13%); - height: 530px; - } - } - - @media screen and (min-width: 1300px){ - #hero > img { - position: absolute; - transform:scale(1.2); - top:15%; - } - - #hero > div > p { - max-width: 450px; - } - } - - @media screen and (max-width: 1300px){ - #hero { - height: 600px; - } - - #hero > img { - position:static; - transform: scale(1); - margin-left: auto; - } - - #hero > div { - width: 100%; - } - - #hero > div > p { - width: 100%; - max-width: 100%; - } - } - `] -}) -export class LandingComponent implements OnInit, OnDestroy { - - config: AppConfig; - - subscription: Subscription; - - constructor(public configService: ConfigService, public router: Router) { } - - ngOnInit(): void { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => { - this.config = config; - }); - } - - ngOnDestroy(): void { - if(this.subscription){ - this.subscription.unsubscribe(); - } - } - -} diff --git a/src/app/components/list/list.component.ts b/src/app/components/list/list.component.ts deleted file mode 100644 index 85ad36b..0000000 --- a/src/app/components/list/list.component.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { SelectItem } from 'primeng/api'; -import { Product } from '../../api/product'; -import { ProductService } from '../../service/productservice'; - -@Component({ - templateUrl: './list.component.html', - styleUrls: ['../../../assets/demo/badges.scss'] -}) -export class ListComponent implements OnInit { - - products: Product[]; - - sortOptions: SelectItem[]; - - sortOrder: number; - - sortField: string; - - sourceCities: any[]; - - targetCities: any[]; - - orderCities: any[]; - - constructor(private productService: ProductService) {} - - ngOnInit() { - this.productService.getProducts().then(data => this.products = data); - - this.sourceCities = [ - {name: 'San Francisco', code: 'SF'}, - {name: 'London', code: 'LDN'}, - {name: 'Paris', code: 'PRS'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Berlin', code: 'BRL'}, - {name: 'Barcelona', code: 'BRC'}, - {name: 'Rome', code: 'RM'}]; - this.targetCities = []; - - this.orderCities = [ - {name: 'San Francisco', code: 'SF'}, - {name: 'London', code: 'LDN'}, - {name: 'Paris', code: 'PRS'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Berlin', code: 'BRL'}, - {name: 'Barcelona', code: 'BRC'}, - {name: 'Rome', code: 'RM'}]; - - this.sortOptions = [ - {label: 'Price High to Low', value: '!price'}, - {label: 'Price Low to High', value: 'price'} - ]; - } - - onSortChange(event) { - const value = event.value; - - if (value.indexOf('!') === 0) { - this.sortOrder = -1; - this.sortField = value.substring(1, value.length); - } else { - this.sortOrder = 1; - this.sortField = value; - } - } -} diff --git a/src/app/components/login/login.component.ts b/src/app/components/login/login.component.ts deleted file mode 100644 index 0bca5d9..0000000 --- a/src/app/components/login/login.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ConfigService } from '../../service/app.config.service'; -import { AppConfig } from '../../api/appconfig'; -import { Subscription } from 'rxjs'; -@Component({ - selector: 'app-login', - templateUrl: './login.component.html', - styles:[` - :host ::ng-deep .p-password input { - width: 100%; - padding:1rem; - } - - :host ::ng-deep .pi-eye{ - transform:scale(1.6); - margin-right: 1rem; - color: var(--primary-color) !important; - } - - :host ::ng-deep .pi-eye-slash{ - transform:scale(1.6); - margin-right: 1rem; - color: var(--primary-color) !important; - } - `] -}) -export class LoginComponent implements OnInit, OnDestroy { - - valCheck: string[] = ['remember']; - - password: string; - - config: AppConfig; - - subscription: Subscription; - - constructor(public configService: ConfigService){ } - - ngOnInit(): void { - this.config = this.configService.config; - this.subscription = this.configService.configUpdate$.subscribe(config => { - this.config = config; - }); - } - - ngOnDestroy(): void { - if(this.subscription){ - this.subscription.unsubscribe(); - } - } -} diff --git a/src/app/components/media/media.component.ts b/src/app/components/media/media.component.ts deleted file mode 100644 index e9c516b..0000000 --- a/src/app/components/media/media.component.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ProductService } from '../../service/productservice'; -import { PhotoService } from '../../service/photoservice'; -import { Product } from '../../api/product'; - -@Component({ - selector: 'app-media', - templateUrl: './media.component.html', - styleUrls: ['../../../assets/demo/badges.scss'], - styles:[` - :host ::ng-deep .p-carousel-indicators .p-link{ - border-radius:5px !important; - } - `] -}) -export class MediaComponent implements OnInit { - - products: Product[]; - - images: any[]; - - galleriaResponsiveOptions: any[] = [ - { - breakpoint: '1024px', - numVisible: 5 - }, - { - breakpoint: '960px', - numVisible: 4 - }, - { - breakpoint: '768px', - numVisible: 3 - }, - { - breakpoint: '560px', - numVisible: 1 - } - ]; - - carouselResponsiveOptions: any[] = [ - { - breakpoint: '1024px', - numVisible: 3, - numScroll: 3 - }, - { - breakpoint: '768px', - numVisible: 2, - numScroll: 2 - }, - { - breakpoint: '560px', - numVisible: 1, - numScroll: 1 - } - ]; - - constructor(private productService: ProductService, private photoService: PhotoService) {} - - ngOnInit() { - this.productService.getProductsSmall().then(products => { - this.products = products; - }); - - this.photoService.getImages().then(images => { - this.images = images; - }); - } -} diff --git a/src/app/components/menus/confirmation.component.ts b/src/app/components/menus/confirmation.component.ts deleted file mode 100644 index b7c219e..0000000 --- a/src/app/components/menus/confirmation.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-confirmation', - template: ` -
- -

Confirmation Component Content via Child Route

-
- ` -}) -export class ConfirmationComponent { - - constructor() { } -} diff --git a/src/app/components/menus/menus.module.ts b/src/app/components/menus/menus.module.ts deleted file mode 100644 index 2d594d6..0000000 --- a/src/app/components/menus/menus.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { RouterModule } from '@angular/router'; - -import { PaymentComponent } from './payment.component'; -import { SeatComponent } from './seat.component'; -import { PersonalComponent } from './personal.component'; -import { ConfirmationComponent } from './confirmation.component'; -import { MenusComponent } from './menus.component'; - -@NgModule({ - declarations: [], - imports: [ - CommonModule, - RouterModule.forChild([ - {path:'',component: MenusComponent, children:[ - {path:'', redirectTo: 'personal', pathMatch: 'full'}, - {path: 'personal', component: PersonalComponent}, - {path: 'confirmation', component: ConfirmationComponent}, - {path: 'seat', component: SeatComponent}, - {path: 'payment', component: PaymentComponent} - ]} - ]) - ], - exports: [RouterModule] -}) -export class MenusModule { } diff --git a/src/app/components/menus/payment.component.ts b/src/app/components/menus/payment.component.ts deleted file mode 100644 index 7821418..0000000 --- a/src/app/components/menus/payment.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-payment', - template: ` -
- -

Payment Component Content via Child Route

-
- ` -}) -export class PaymentComponent{ - - constructor() { } -} diff --git a/src/app/components/menus/personal.component.ts b/src/app/components/menus/personal.component.ts deleted file mode 100644 index 339d499..0000000 --- a/src/app/components/menus/personal.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-personal', - template: ` -
- -

Personal Component Content via Child Route

-
- ` -}) -export class PersonalComponent{ - - constructor() { } -} diff --git a/src/app/components/menus/seat.component.ts b/src/app/components/menus/seat.component.ts deleted file mode 100644 index 11a56ea..0000000 --- a/src/app/components/menus/seat.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-seat', - template: ` -
- -

Seat Component Content via Child Route

-
- ` -}) -export class SeatComponent{ - - constructor() { } -} diff --git a/src/app/components/misc/misc.component.ts b/src/app/components/misc/misc.component.ts deleted file mode 100755 index cb4cddf..0000000 --- a/src/app/components/misc/misc.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - templateUrl: './misc.component.html', -}) -export class MiscComponent implements OnInit { - - value = 0; - - ngOnInit() { - const interval = setInterval(() => { - this.value = this.value + Math.floor(Math.random() * 10) + 1; - if (this.value >= 100) { - this.value = 100; - clearInterval(interval); - } - }, 2000); - } -} diff --git a/src/app/components/notfound/notfound.component.ts b/src/app/components/notfound/notfound.component.ts deleted file mode 100644 index 567c8c3..0000000 --- a/src/app/components/notfound/notfound.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-notfound', - templateUrl: './notfound.component.html', -}) -export class NotfoundComponent {} \ No newline at end of file diff --git a/src/app/components/table/table.component.ts b/src/app/components/table/table.component.ts deleted file mode 100644 index d8cd477..0000000 --- a/src/app/components/table/table.component.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { Component, OnInit, ViewChild, ChangeDetectorRef, ElementRef } from '@angular/core'; -import { Customer, Representative } from '../../api/customer'; -import { CustomerService } from '../../service/customerservice'; -import { Product } from '../../api/product'; -import { ProductService } from '../../service/productservice'; -import { Table } from 'primeng/table'; -import { MessageService, ConfirmationService } from 'primeng/api' - -@Component({ - templateUrl: './table.component.html', - providers: [MessageService, ConfirmationService], - styleUrls: ['../../../assets/demo/badges.scss'], - styles: [` - :host ::ng-deep .p-frozen-column { - font-weight: bold; - } - - :host ::ng-deep .p-datatable-frozen-tbody { - font-weight: bold; - } - - :host ::ng-deep .p-progressbar { - height:.5rem; - } - `] -}) -export class TableComponent implements OnInit { - - customers1: Customer[]; - - customers2: Customer[]; - - customers3: Customer[]; - - selectedCustomers1: Customer[]; - - selectedCustomer: Customer; - - representatives: Representative[]; - - statuses: any[]; - - products: Product[]; - - rowGroupMetadata: any; - - expandedRows = {}; - - activityValues: number[] = [0, 100]; - - isExpanded: boolean = false; - - idFrozen: boolean = false; - - loading:boolean = true; - - @ViewChild('dt') table: Table; - - @ViewChild('filter') filter: ElementRef; - - constructor(private customerService: CustomerService, private productService: ProductService, private messageService: MessageService, private confirmService: ConfirmationService, private cd: ChangeDetectorRef) {} - - ngOnInit() { - this.customerService.getCustomersLarge().then(customers => { - this.customers1 = customers; - this.loading = false; - - // @ts-ignore - this.customers1.forEach(customer => customer.date = new Date(customer.date)); - }); - this.customerService.getCustomersMedium().then(customers => this.customers2 = customers); - this.customerService.getCustomersLarge().then(customers => this.customers3 = customers); - this.productService.getProductsWithOrdersSmall().then(data => this.products = data); - - this.representatives = [ - {name: 'Amy Elsner', image: 'amyelsner.png'}, - {name: 'Anna Fali', image: 'annafali.png'}, - {name: 'Asiya Javayant', image: 'asiyajavayant.png'}, - {name: 'Bernardo Dominic', image: 'bernardodominic.png'}, - {name: 'Elwin Sharvill', image: 'elwinsharvill.png'}, - {name: 'Ioni Bowcher', image: 'ionibowcher.png'}, - {name: 'Ivan Magalhaes', image: 'ivanmagalhaes.png'}, - {name: 'Onyama Limba', image: 'onyamalimba.png'}, - {name: 'Stephen Shaw', image: 'stephenshaw.png'}, - {name: 'XuXue Feng', image: 'xuxuefeng.png'} - ]; - - this.statuses = [ - {label: 'Unqualified', value: 'unqualified'}, - {label: 'Qualified', value: 'qualified'}, - {label: 'New', value: 'new'}, - {label: 'Negotiation', value: 'negotiation'}, - {label: 'Renewal', value: 'renewal'}, - {label: 'Proposal', value: 'proposal'} - ]; - } - - onSort() { - this.updateRowGroupMetaData(); - } - - updateRowGroupMetaData() { - this.rowGroupMetadata = {}; - - if (this.customers3) { - for (let i = 0; i < this.customers3.length; i++) { - const rowData = this.customers3[i]; - const representativeName = rowData.representative.name; - - if (i === 0) { - this.rowGroupMetadata[representativeName] = { index: 0, size: 1 }; - } - else { - const previousRowData = this.customers3[i - 1]; - const previousRowGroup = previousRowData.representative.name; - if (representativeName === previousRowGroup) { - this.rowGroupMetadata[representativeName].size++; - } - else { - this.rowGroupMetadata[representativeName] = { index: i, size: 1 }; - } - } - } - } - } - - expandAll() { - if(!this.isExpanded){ - this.products.forEach(product => this.expandedRows[product.name] = true); - - } else { - this.expandedRows={}; - } - this.isExpanded = !this.isExpanded; - } - - formatCurrency(value) { - return value.toLocaleString('en-US', {style: 'currency', currency: 'USD'}); - } - - clear(table: Table) { - table.clear(); - this.filter.nativeElement.value = ''; - } -} diff --git a/src/app/components/timeline/timeline.component.html b/src/app/components/timeline/timeline.component.html deleted file mode 100644 index 51c02fd..0000000 --- a/src/app/components/timeline/timeline.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
-
-
-

Timeline

- -
Custom Timeline
- - - - - - - - - -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt - quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque quas!

- -
-
-
- -
Horizontal - Alternate Align
- - - {{event}} - - -   - - -
-
-
diff --git a/src/app/components/timeline/timeline.component.ts b/src/app/components/timeline/timeline.component.ts deleted file mode 100644 index bde3c8b..0000000 --- a/src/app/components/timeline/timeline.component.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { PrimeIcons } from 'primeng/api'; - -@Component({ - templateUrl: './timeline.component.html', - styles: [` - .custom-marker { - display: flex; - width: 2rem; - height: 2rem; - align-items: center; - justify-content: center; - color: #ffffff; - border-radius: 50%; - z-index: 1; - } - - ::ng-deep { - .p-timeline-event-content, - .p-timeline-event-opposite { - line-height: 1; - } - } - - @media screen and (max-width: 960px) { - ::ng-deep { - .customized-timeline { - .p-timeline-event:nth-child(even) { - flex-direction: row !important; - - .p-timeline-event-content { - text-align: left !important; - } - } - - .p-timeline-event-opposite { - flex: 0; - } - - .p-card { - margin-top: 1rem; - } - } - } - } - `] -}) -export class TimelineComponent implements OnInit{ - - customEvents: any[]; - - horizontalEvents: any[]; - - ngOnInit() { - this.customEvents = [ - { - status: 'Ordered', - date: '15/10/2020 10:30', - icon: PrimeIcons.SHOPPING_CART, - color: '#9C27B0', - image: 'game-controller.jpg' - }, - {status: 'Processing', date: '15/10/2020 14:00', icon: PrimeIcons.COG, color: '#673AB7'}, - {status: 'Shipped', date: '15/10/2020 16:15', icon: PrimeIcons.ENVELOPE, color: '#FF9800'}, - {status: 'Delivered', date: '16/10/2020 10:00', icon: PrimeIcons.CHECK, color: '#607D8B'} - ]; - - this.horizontalEvents = [ - '2020', '2021', '2022', '2023' - ]; - } -} diff --git a/src/app/api/customer.ts b/src/app/demo/api/customer.ts similarity index 100% rename from src/app/api/customer.ts rename to src/app/demo/api/customer.ts diff --git a/src/app/demo/api/image.ts b/src/app/demo/api/image.ts new file mode 100644 index 0000000..b934f8c --- /dev/null +++ b/src/app/demo/api/image.ts @@ -0,0 +1,6 @@ +export interface Image { + previewImageSrc?:any; + thumbnailImageSrc?:any; + alt?:any; + title?:any; +} diff --git a/src/app/api/product.ts b/src/app/demo/api/product.ts old mode 100755 new mode 100644 similarity index 87% rename from src/app/api/product.ts rename to src/app/demo/api/product.ts index 13929d9..0403d55 --- a/src/app/api/product.ts +++ b/src/app/demo/api/product.ts @@ -5,7 +5,7 @@ export interface Product { description?: string; price?: number; quantity?: number; - inventoryStatus?: string; + inventoryStatus?: any; category?: string; image?: string; rating?: number; diff --git a/src/app/demo/components/auth/access/access-routing.module.ts b/src/app/demo/components/auth/access/access-routing.module.ts new file mode 100644 index 0000000..c636009 --- /dev/null +++ b/src/app/demo/components/auth/access/access-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AccessComponent } from './access.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: AccessComponent } + ])], + exports: [RouterModule] +}) +export class AccessRoutingModule { } diff --git a/src/app/components/access/access.component.html b/src/app/demo/components/auth/access/access.component.html similarity index 85% rename from src/app/components/access/access.component.html rename to src/app/demo/components/auth/access/access.component.html index 3dba0e0..c0c62f9 100644 --- a/src/app/components/access/access.component.html +++ b/src/app/demo/components/auth/access/access.component.html @@ -1,7 +1,7 @@
- Sakai logo + Sakai logo
@@ -11,7 +11,7 @@

Access Denied

You do not have the necesary permisions. Please contact admins. - Access denied + Access denied diff --git a/src/app/demo/components/auth/access/access.component.ts b/src/app/demo/components/auth/access/access.component.ts new file mode 100644 index 0000000..bc2d815 --- /dev/null +++ b/src/app/demo/components/auth/access/access.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-access', + templateUrl: './access.component.html', +}) +export class AccessComponent { } diff --git a/src/app/demo/components/auth/access/access.module.ts b/src/app/demo/components/auth/access/access.module.ts new file mode 100644 index 0000000..d739367 --- /dev/null +++ b/src/app/demo/components/auth/access/access.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ButtonModule } from 'primeng/button'; + +import { AccessRoutingModule } from './access-routing.module'; +import { AccessComponent } from './access.component'; + +@NgModule({ + imports: [ + CommonModule, + AccessRoutingModule, + ButtonModule + ], + declarations: [AccessComponent] +}) +export class AccessModule { } diff --git a/src/app/demo/components/auth/auth-routing.module.ts b/src/app/demo/components/auth/auth-routing.module.ts new file mode 100644 index 0000000..b5e5e3a --- /dev/null +++ b/src/app/demo/components/auth/auth-routing.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'error', loadChildren: () => import('./error/error.module').then(m => m.ErrorModule) }, + { path: 'access', loadChildren: () => import('./access/access.module').then(m => m.AccessModule) }, + { path: 'login', loadChildren: () => import('./login/login.module').then(m => m.LoginModule) } + ])], + exports: [RouterModule] +}) +export class AuthRoutingModule { } diff --git a/src/app/demo/components/auth/auth.module.ts b/src/app/demo/components/auth/auth.module.ts new file mode 100644 index 0000000..d12e91e --- /dev/null +++ b/src/app/demo/components/auth/auth.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AuthRoutingModule } from './auth-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + AuthRoutingModule + ] +}) +export class AuthModule { } diff --git a/src/app/demo/components/auth/error/error-routing.module.ts b/src/app/demo/components/auth/error/error-routing.module.ts new file mode 100644 index 0000000..8ba5545 --- /dev/null +++ b/src/app/demo/components/auth/error/error-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ErrorComponent } from './error.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: ErrorComponent } + ])], + exports: [RouterModule] +}) +export class ErrorRoutingModule { } diff --git a/src/app/components/error/error.component.html b/src/app/demo/components/auth/error/error.component.html similarity index 85% rename from src/app/components/error/error.component.html rename to src/app/demo/components/auth/error/error.component.html index f0e7f5a..03d8e14 100644 --- a/src/app/components/error/error.component.html +++ b/src/app/demo/components/auth/error/error.component.html @@ -1,7 +1,7 @@
- Sakai logo + Sakai logo
@@ -11,7 +11,7 @@

Error Occured

Requested resource is not available. - Error + Error diff --git a/src/app/demo/components/auth/error/error.component.ts b/src/app/demo/components/auth/error/error.component.ts new file mode 100644 index 0000000..d9b38d1 --- /dev/null +++ b/src/app/demo/components/auth/error/error.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-error', + templateUrl: './error.component.html', +}) +export class ErrorComponent { } \ No newline at end of file diff --git a/src/app/demo/components/auth/error/error.module.ts b/src/app/demo/components/auth/error/error.module.ts new file mode 100644 index 0000000..bdfa2ac --- /dev/null +++ b/src/app/demo/components/auth/error/error.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ErrorRoutingModule } from './error-routing.module'; +import { ErrorComponent } from './error.component'; +import { ButtonModule } from 'primeng/button'; + +@NgModule({ + imports: [ + CommonModule, + ErrorRoutingModule, + ButtonModule + ], + declarations: [ErrorComponent] +}) +export class ErrorModule { } diff --git a/src/app/demo/components/auth/login/login-routing.module.ts b/src/app/demo/components/auth/login/login-routing.module.ts new file mode 100644 index 0000000..095ccda --- /dev/null +++ b/src/app/demo/components/auth/login/login-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LoginComponent } from './login.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: LoginComponent } + ])], + exports: [RouterModule] +}) +export class LoginRoutingModule { } diff --git a/src/app/components/login/login.component.html b/src/app/demo/components/auth/login/login.component.html similarity index 86% rename from src/app/components/login/login.component.html rename to src/app/demo/components/auth/login/login.component.html index bd4dfc5..86dc54e 100644 --- a/src/app/components/login/login.component.html +++ b/src/app/demo/components/auth/login/login.component.html @@ -1,23 +1,23 @@
- Sakai logo + Sakai logo
- Image + Image
Welcome, Isabel!
Sign in to continue
- +
- + - +
@@ -30,4 +30,4 @@
-
\ No newline at end of file +
diff --git a/src/app/demo/components/auth/login/login.component.ts b/src/app/demo/components/auth/login/login.component.ts new file mode 100644 index 0000000..0d65c52 --- /dev/null +++ b/src/app/demo/components/auth/login/login.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { LayoutService } from 'src/app/layout/service/app.layout.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styles: [` + :host ::ng-deep .p-password input { + width: 100%; + padding:1rem; + } + + :host ::ng-deep .pi-eye{ + transform:scale(1.6); + margin-right: 1rem; + color: var(--primary-color) !important; + } + + :host ::ng-deep .pi-eye-slash{ + transform:scale(1.6); + margin-right: 1rem; + color: var(--primary-color) !important; + } + `] +}) +export class LoginComponent { + + valCheck: string[] = ['remember']; + + password!: string; + + constructor(public layoutService: LayoutService) { } +} diff --git a/src/app/demo/components/auth/login/login.module.ts b/src/app/demo/components/auth/login/login.module.ts new file mode 100644 index 0000000..fff9b46 --- /dev/null +++ b/src/app/demo/components/auth/login/login.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { LoginRoutingModule } from './login-routing.module'; +import { LoginComponent } from './login.component'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { FormsModule } from '@angular/forms'; +import { PasswordModule } from 'primeng/password'; +import { InputTextModule } from 'primeng/inputtext'; + +@NgModule({ + imports: [ + CommonModule, + LoginRoutingModule, + ButtonModule, + CheckboxModule, + InputTextModule, + FormsModule, + PasswordModule + ], + declarations: [LoginComponent] +}) +export class LoginModule { } diff --git a/src/app/demo/components/code/code.component.scss b/src/app/demo/components/code/code.component.scss new file mode 100644 index 0000000..fb883e7 --- /dev/null +++ b/src/app/demo/components/code/code.component.scss @@ -0,0 +1,44 @@ +pre[class*="language-"] { + border-radius: 12px !important; + + &:before, + &:after { + display: none !important; + } + + code { + border-left: .5rem solid transparent !important; + box-shadow: none !important; + background: var(--surface-ground) !important; + margin: 0 !important; + color: var(--surface-900); + font-size: 14px; + border-radius: 10px !important; + + .token { + + &.tag, + &.keyword { + color: #2196F3 !important; + } + + &.attr-name, + &.attr-string { + color: #2196F3 !important; + } + + &.attr-value { + color: #4CAF50 !important; + } + + &.punctuation { + color: var(--text-color); + } + + &.operator, + &.string { + background: transparent; + } + } + } +} \ No newline at end of file diff --git a/src/app/components/app-code/app.code.component.ts b/src/app/demo/components/code/code.component.ts similarity index 80% rename from src/app/components/app-code/app.code.component.ts rename to src/app/demo/components/code/code.component.ts index 97fcb87..6e702e8 100644 --- a/src/app/components/app-code/app.code.component.ts +++ b/src/app/demo/components/code/code.component.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, AfterViewInit, Input, NgModule, ViewChild } from '@angular/core'; +import { Component, ElementRef, AfterViewInit, Input, NgModule, ViewChild, ViewEncapsulation } from '@angular/core'; import { CommonModule } from '@angular/common'; @Component({ @@ -7,12 +7,14 @@ import { CommonModule } from '@angular/common';

 
`, + styleUrls: ['./code.component.scss'], + encapsulation: ViewEncapsulation.None }) export class AppCodeComponent implements AfterViewInit { @Input() lang = 'markup'; - @ViewChild('code') codeViewChild: ElementRef; + @ViewChild('code') codeViewChild!: ElementRef; constructor(public el: ElementRef) { } diff --git a/src/app/demo/components/dashboard/dashboard-routing.module.ts b/src/app/demo/components/dashboard/dashboard-routing.module.ts new file mode 100644 index 0000000..97dfa23 --- /dev/null +++ b/src/app/demo/components/dashboard/dashboard-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { DashboardComponent } from './dashboard.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: DashboardComponent } + ])], + exports: [RouterModule] +}) +export class DashboardsRoutingModule { } diff --git a/src/app/components/dashboard/dashboard.component.html b/src/app/demo/components/dashboard/dashboard.component.html old mode 100755 new mode 100644 similarity index 97% rename from src/app/components/dashboard/dashboard.component.html rename to src/app/demo/components/dashboard/dashboard.component.html index 357f1c4..e1ca2b7 --- a/src/app/components/dashboard/dashboard.component.html +++ b/src/app/demo/components/dashboard/dashboard.component.html @@ -218,15 +218,12 @@
- Jane Davis - has posted a new questions about your product. - + Jane Davis has posted a new questions about your product.
-
+
TAKE THE NEXT STEP
Try PrimeBlocks
@@ -236,8 +233,7 @@ Get Started
-
-
+
diff --git a/src/app/demo/components/dashboard/dashboard.component.ts b/src/app/demo/components/dashboard/dashboard.component.ts new file mode 100644 index 0000000..804d9f9 --- /dev/null +++ b/src/app/demo/components/dashboard/dashboard.component.ts @@ -0,0 +1,103 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { MenuItem } from 'primeng/api'; +import { Product } from '../../api/product'; +import { ProductService } from '../../service/product.service'; +import { Subscription } from 'rxjs'; +import { LayoutService } from 'src/app/layout/service/app.layout.service'; + +@Component({ + templateUrl: './dashboard.component.html', +}) +export class DashboardComponent implements OnInit, OnDestroy { + + items!: MenuItem[]; + + products!: Product[]; + + chartData: any; + + chartOptions: any; + + subscription!: Subscription; + + constructor(private productService: ProductService, public layoutService: LayoutService) { + this.subscription = this.layoutService.configUpdate$.subscribe(() => { + this.initChart(); + }); + } + + ngOnInit() { + this.initChart(); + this.productService.getProductsSmall().then(data => this.products = data); + + this.items = [ + { label: 'Add New', icon: 'pi pi-fw pi-plus' }, + { label: 'Remove', icon: 'pi pi-fw pi-minus' } + ]; + } + + initChart() { + const documentStyle = getComputedStyle(document.documentElement); + const textColor = documentStyle.getPropertyValue('--text-color'); + const textColorSecondary = documentStyle.getPropertyValue('--text-color-secondary'); + const surfaceBorder = documentStyle.getPropertyValue('--surface-border'); + + this.chartData = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [ + { + label: 'First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + backgroundColor: documentStyle.getPropertyValue('--bluegray-700'), + borderColor: documentStyle.getPropertyValue('--bluegray-700'), + tension: .4 + }, + { + label: 'Second Dataset', + data: [28, 48, 40, 19, 86, 27, 90], + fill: false, + backgroundColor: documentStyle.getPropertyValue('--green-600'), + borderColor: documentStyle.getPropertyValue('--green-600'), + tension: .4 + } + ] + }; + + this.chartOptions = { + plugins: { + legend: { + labels: { + color: textColor + } + } + }, + scales: { + x: { + ticks: { + color: textColorSecondary + }, + grid: { + color: surfaceBorder, + drawBorder: false + } + }, + y: { + ticks: { + color: textColorSecondary + }, + grid: { + color: surfaceBorder, + drawBorder: false + } + } + } + }; + } + + ngOnDestroy() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } +} diff --git a/src/app/demo/components/dashboard/dashboard.module.ts b/src/app/demo/components/dashboard/dashboard.module.ts new file mode 100644 index 0000000..f740165 --- /dev/null +++ b/src/app/demo/components/dashboard/dashboard.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { DashboardComponent } from './dashboard.component'; +import { ChartModule } from 'primeng/chart'; +import { MenuModule } from 'primeng/menu'; +import { TableModule } from 'primeng/table'; +import { ButtonModule } from 'primeng/button'; +import { StyleClassModule } from 'primeng/styleclass'; +import { PanelMenuModule } from 'primeng/panelmenu'; +import { DashboardsRoutingModule } from './dashboard-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + ChartModule, + MenuModule, + TableModule, + StyleClassModule, + PanelMenuModule, + ButtonModule, + DashboardsRoutingModule + ], + declarations: [DashboardComponent] +}) +export class DashboardModule { } diff --git a/src/app/demo/components/documentation/documentation-routing.module.ts b/src/app/demo/components/documentation/documentation-routing.module.ts new file mode 100644 index 0000000..36371a4 --- /dev/null +++ b/src/app/demo/components/documentation/documentation-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { DocumentationComponent } from './documentation.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: DocumentationComponent } + ])], + exports: [RouterModule] +}) +export class DocumentationRoutingModule { } diff --git a/src/app/demo/components/documentation/documentation.component.html b/src/app/demo/components/documentation/documentation.component.html new file mode 100644 index 0000000..468145b --- /dev/null +++ b/src/app/demo/components/documentation/documentation.component.html @@ -0,0 +1,137 @@ +
+
+

Documentation

+

Getting Started

+

Sakai is an application template for Angular and is distributed as a CLI project. Current versions is Angular v13 with PrimeNG v13. In case CLI is not installed already, use the command below to set it up.

+ + +npm install -g @angular/cli + + +

Once CLI is ready in your system, extract the contents of the zip file distribution, cd to the directory, + install the libraries from npm and then execute "ng serve" to run the application in your local environment.

+ + +cd sakai +npm install +ng serve + + +

The application should run at http://localhost:4200/, you may now start with the development of your application.

+ +
Important CLI Commands
+

Following commands are derived from CLI.

+ +Run 'ng serve' for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +Run 'ng generate component component-name' to generate a new component. You can also use `ng generate directive/pipe/service/class/module`. + +Run 'ng build' to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. + +Run 'ng test' to execute the unit tests via [Karma](https://karma-runner.github.io). + +Run 'ng e2e' to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +Run 'ng help' for more options. + + +

Structure

+

Sakai consists of 3 main parts; the application layout, layout assets and PrimeNG component theme assets. Layout is placed inside the src/app/layout folder, + and the assets are in the src/assets/layout folder. +

+ +
Default Configuration
+

Initial layout configuration can be defined at the main app component by injecting the LayoutService, this step is optional and only necessary when customizing the defaults. Note that theme and + scale are not reactive since theme is configured outside of Angular at index.html by default and + initial scale is defined with the $scale at layout.scss. When default theme or scale is changed at their files initially, it is required to configure the layout service with the matching values + to avoid sync issues.

+ + +import { Component, OnInit } from '@angular/core'; +import { PrimeNGConfig } from 'primeng/api'; +import { LayoutService } from './layout/service/app.layout.service'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html' +}) +export class AppComponent implements OnInit { + + constructor(private primengConfig: PrimeNGConfig, private layoutService: LayoutService) { } + + ngOnInit(): void { + this.primengConfig.ripple = true; //enables core ripple functionality + + //optional configuration with the default configuration + this.layoutService.config = { + ripple: false, //toggles ripple on and off + inputStyle: 'outlined', //default style for input elements + menuMode: 'static', //layout mode of the menu, valid values are "static" and "overlay" + colorScheme: 'light', //color scheme of the template, valid values are "light" and "dark" + theme: 'lara-light-indigo', //default component theme for PrimeNG + scale: 14 //size of the body font size to scale the whole application + }; + } + +} + + +
Menu
+

Menu is a separate component defined in src/app/layout/app.menu.component.ts file and based on PrimeNG MenuModel API. In order to define the menuitems, + navigate to this file and define your own model as a nested structure.

+ + +import { OnInit } from '@angular/core'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-menu', + templateUrl: './app.menu.component.html' +}) +export class AppMenuComponent implements OnInit { + + model: any[] = []; + + ngOnInit() { + this.model = [ + { + label: 'Home', + items: [ + { + label: 'Dashboard', + icon: 'pi pi-fw pi-home', + routerLink: ['/'] + } + ] + }, + //... + ]; + } +} + + +

Integration with Existing Angular CLI Projects

+

Sakai structure is designed in a modular way so that it can easily be integrated with your existing application. We've created a short tutorial with details.

+ +
+ +
+ +

Theme

+

Sakai provides 24 PrimeNG themes out of the box. Setup of a theme is simple by including the css of theme + to your bundle that are located inside assets/layout/styles/theme/ + folder such as assets/layout/styles/theme/lara-light-indigo/theme.css.

+ +

Another alternative would be creating dynamic bundles, please see the video tutorial for an example.

+ +
Theme Designer
+

Sakai includes a simplified version of the PrimeNG Theme Designer that only includes the main SASS structure. Full list of SASS variables to customize the components further is available at the + SASS API docs. +

+ +

Migration Guide

+

Every important change is included in CHANGELOG.md file at the root folder of the distribution along with the instructions to update. Whenever a major version of Angular is released, a new version of the template + is provided that mainly brings compatibility support to the PrimeNG component theming. If there are no compatibility issues on component theming e.g. new components or new functionality to PrimeNG, + you may still update your application to the latest Angular and PrimeNG without the need to waiting for an update.

+
+
diff --git a/src/app/components/documentation/documentation.component.ts b/src/app/demo/components/documentation/documentation.component.ts old mode 100755 new mode 100644 similarity index 73% rename from src/app/components/documentation/documentation.component.ts rename to src/app/demo/components/documentation/documentation.component.ts index 993ab7c..4e166fb --- a/src/app/components/documentation/documentation.component.ts +++ b/src/app/demo/components/documentation/documentation.component.ts @@ -3,4 +3,4 @@ import { Component } from '@angular/core'; @Component({ templateUrl: './documentation.component.html' }) -export class DocumentationComponent {} +export class DocumentationComponent { } \ No newline at end of file diff --git a/src/app/demo/components/documentation/documentation.module.ts b/src/app/demo/components/documentation/documentation.module.ts new file mode 100644 index 0000000..917ee81 --- /dev/null +++ b/src/app/demo/components/documentation/documentation.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { DocumentationRoutingModule } from './documentation-routing.module'; +import { AppCodeModule } from '../code/code.component'; +import { DocumentationComponent } from './documentation.component'; + +@NgModule({ + imports: [ + CommonModule, + AppCodeModule, + DocumentationRoutingModule + ], + declarations: [DocumentationComponent] +}) +export class DocumentationModule { } diff --git a/src/app/demo/components/landing/landing-routing.module.ts b/src/app/demo/components/landing/landing-routing.module.ts new file mode 100644 index 0000000..ecaf3c1 --- /dev/null +++ b/src/app/demo/components/landing/landing-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LandingComponent } from './landing.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: LandingComponent } + ])], + exports: [RouterModule] +}) +export class LandingRoutingModule { } diff --git a/src/app/demo/components/landing/landing.component.html b/src/app/demo/components/landing/landing.component.html new file mode 100644 index 0000000..59847ae --- /dev/null +++ b/src/app/demo/components/landing/landing.component.html @@ -0,0 +1,359 @@ +
+
+ + +
+
+

Eu sem integereget magna fermentum

+

Sed blandit libero volutpat sed cras. Fames ac turpis egestas integer. Placerat in egestas erat...

+ +
+ +
+ +
+
+
+

Marvelous Features

+ Placerat in egestas erat... +
+ +
+
+
+
+ +
+
Easy to Use
+ Posuere morbi leo urna molestie. +
+
+
+ +
+
+
+
+ +
+
Fresh Design
+ Semper risus in hendrerit. +
+
+
+ +
+
+
+
+ +
+
Well Documented
+ Non arcu risus quis varius quam quisque. +
+
+
+ +
+
+
+
+ +
+
Responsive Layout
+ Nulla malesuada pellentesque elit. +
+
+
+ +
+
+
+
+ +
+
Clean Code
+ Condimentum lacinia quis vel eros. +
+
+
+ +
+
+
+
+ +
+
Dark Mode
+ Convallis tellus id interdum velit laoreet. +
+
+
+ +
+
+
+
+ +
+
Ready to Use
+ Mauris sit amet massa vitae. +
+
+
+ +
+
+
+
+ +
+
Modern Practices
+ Elementum nibh tellus molestie nunc non. +
+
+
+ +
+
+
+
+ +
+
Privacy
+ Neque egestas congue quisque. +
+
+
+ +
+
+

Joséphine Miller

+ Peak Interactive +

“Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.”

+ Company logo + +
+
+
+
+ +
+
+

Powerful Everywhere

+ Amet consectetur adipiscing elit... +
+ +
+
+ mockup mobile +
+ +
+
+ +
+

Congue Quisque Egestas

+ Lectus arcu bibendum at varius vel pharetra vel turpis nunc. Eget aliquet nibh praesent tristique magna sit amet purus gravida. Sit amet mattis vulputate enim nulla aliquet. +
+
+ +
+
+
+ +
+

Celerisque Eu Ultrices

+ Adipiscing commodo elit at imperdiet dui. Viverra nibh cras pulvinar mattis nunc sed blandit libero. Suspendisse in est ante in. Mauris pharetra et ultrices neque ornare aenean euismod elementum nisi. +
+ +
+ mockup +
+
+
+ +
+
+

Matchless Pricing

+ Amet consectetur adipiscing elit... +
+ +
+
+
+

Free

+ free +
+ $0 + per month + +
+ +
    +
  • + + Responsive Layout +
  • +
  • + + Unlimited Push Messages +
  • +
  • + + 50 Support Ticket +
  • +
  • + + Free Shipping +
  • +
+
+
+ +
+
+

Startup

+ startup +
+ $1 + per month + +
+ +
    +
  • + + Responsive Layout +
  • +
  • + + Unlimited Push Messages +
  • +
  • + + 50 Support Ticket +
  • +
  • + + Free Shipping +
  • +
+
+
+ +
+
+

Enterprise

+ enterprise +
+ $999 + per month + +
+ +
    +
  • + + Responsive Layout +
  • +
  • + + Unlimited Push Messages +
  • +
  • + + 50 Support Ticket +
  • +
  • + + Free Shipping +
  • +
+
+
+
+
+ +
+
+ + +
+
+ + +
+

Resources

+ Get Started + Learn + Case Studies +
+ +
+

Community

+ Discord + Events + FAQ + Blog +
+ + +
+
+
+
+
+
\ No newline at end of file diff --git a/src/app/demo/components/landing/landing.component.ts b/src/app/demo/components/landing/landing.component.ts new file mode 100644 index 0000000..5075067 --- /dev/null +++ b/src/app/demo/components/landing/landing.component.ts @@ -0,0 +1,63 @@ +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; +import { LayoutService } from 'src/app/layout/service/app.layout.service'; + +@Component({ + selector: 'app-landing', + templateUrl: './landing.component.html', + styles: [` + #hero{ + background: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), radial-gradient(77.36% 256.97% at 77.36% 57.52%, #EEEFAF 0%, #C3E3FA 100%); + height:700px; + overflow:hidden; + } + + .pricing-card:hover{ + border:2px solid var(--cyan-200) !important; + } + + @media screen and (min-width: 768px) { + #hero{ + -webkit-clip-path: ellipse(150% 87% at 93% 13%); + clip-path: ellipse(150% 87% at 93% 13%); + height: 530px; + } + } + + @media screen and (min-width: 1300px){ + #hero > img { + position: absolute; + transform:scale(1.2); + top:15%; + } + + #hero > div > p { + max-width: 450px; + } + } + + @media screen and (max-width: 1300px){ + #hero { + height: 600px; + } + + #hero > img { + position:static; + transform: scale(1); + margin-left: auto; + } + + #hero > div { + width: 100%; + } + + #hero > div > p { + width: 100%; + max-width: 100%; + } + } + `] +}) +export class LandingComponent { + constructor(public layoutService: LayoutService, public router: Router) { } +} diff --git a/src/app/demo/components/landing/landing.module.ts b/src/app/demo/components/landing/landing.module.ts new file mode 100644 index 0000000..3a08743 --- /dev/null +++ b/src/app/demo/components/landing/landing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { LandingRoutingModule } from './landing-routing.module'; +import { LandingComponent } from './landing.component'; +import { StyleClassModule } from 'primeng/styleclass'; +import { DividerModule } from 'primeng/divider'; +import { ChartModule } from 'primeng/chart'; +import { PanelModule } from 'primeng/panel'; +import { ButtonModule } from 'primeng/button'; + +@NgModule({ + imports: [ + CommonModule, + LandingRoutingModule, + DividerModule, + StyleClassModule, + ChartModule, + PanelModule, + ButtonModule + ], + declarations: [LandingComponent] +}) +export class LandingModule { } diff --git a/src/app/components/notfound/notfound.component.html b/src/app/demo/components/notfound/notfound.component.html similarity index 96% rename from src/app/components/notfound/notfound.component.html rename to src/app/demo/components/notfound/notfound.component.html index fd53ef0..5dad9a4 100644 --- a/src/app/components/notfound/notfound.component.html +++ b/src/app/demo/components/notfound/notfound.component.html @@ -1,7 +1,7 @@
- Sakai logo + Sakai logo
diff --git a/src/app/demo/components/notfound/notfound.component.ts b/src/app/demo/components/notfound/notfound.component.ts new file mode 100644 index 0000000..8ec0c15 --- /dev/null +++ b/src/app/demo/components/notfound/notfound.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-notfound', + templateUrl: './notfound.component.html', +}) +export class NotfoundComponent { } \ No newline at end of file diff --git a/src/app/demo/components/pages/crud/crud-routing.module.ts b/src/app/demo/components/pages/crud/crud-routing.module.ts new file mode 100644 index 0000000..75ac279 --- /dev/null +++ b/src/app/demo/components/pages/crud/crud-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CrudComponent } from './crud.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: CrudComponent } + ])], + exports: [RouterModule] +}) +export class CrudRoutingModule { } diff --git a/src/app/components/crud/crud.component.html b/src/app/demo/components/pages/crud/crud.component.html similarity index 98% rename from src/app/components/crud/crud.component.html rename to src/app/demo/components/pages/crud/crud.component.html index 1868904..8b88702 100644 --- a/src/app/components/crud/crud.component.html +++ b/src/app/demo/components/pages/crud/crud.component.html @@ -1,6 +1,6 @@
-
+
@@ -22,7 +22,7 @@
Manage Products
- +
@@ -98,7 +98,7 @@ - {{product.inventoryStatus.label}} + {{product.inventoryStatus}} {{status.label}} diff --git a/src/app/components/crud/crud.component.ts b/src/app/demo/components/pages/crud/crud.component.ts similarity index 58% rename from src/app/components/crud/crud.component.ts rename to src/app/demo/components/pages/crud/crud.component.ts index b262137..a01e2be 100644 --- a/src/app/components/crud/crud.component.ts +++ b/src/app/demo/components/pages/crud/crud.component.ts @@ -1,53 +1,52 @@ import { Component, OnInit } from '@angular/core'; -import { Product } from '../../api/product'; -import { ProductService } from '../../service/productservice'; -import { ConfirmationService, MessageService } from 'primeng/api'; +import { Product } from 'src/app/demo/api/product'; +import { MessageService } from 'primeng/api'; +import { Table } from 'primeng/table'; +import { ProductService } from 'src/app/demo/service/product.service'; @Component({ templateUrl: './crud.component.html', - providers: [MessageService, ConfirmationService], - styleUrls: ['../../../assets/demo/badges.scss'] + providers: [MessageService] }) export class CrudComponent implements OnInit { - productDialog: boolean; + productDialog: boolean = false; deleteProductDialog: boolean = false; deleteProductsDialog: boolean = false; - products: Product[]; + products: Product[] = []; - product: Product; + product: Product = {}; - selectedProducts: Product[]; + selectedProducts: Product[] = []; - submitted: boolean; + submitted: boolean = false; - cols: any[]; + cols: any[] = []; - statuses: any[]; + statuses: any[] = []; rowsPerPageOptions = [5, 10, 20]; - constructor(private productService: ProductService, private messageService: MessageService, - private confirmationService: ConfirmationService) {} + constructor(private productService: ProductService, private messageService: MessageService) { } ngOnInit() { this.productService.getProducts().then(data => this.products = data); this.cols = [ - {field: 'name', header: 'Name'}, - {field: 'price', header: 'Price'}, - {field: 'category', header: 'Category'}, - {field: 'rating', header: 'Reviews'}, - {field: 'inventoryStatus', header: 'Status'} + { field: 'product', header: 'Product' }, + { field: 'price', header: 'Price' }, + { field: 'category', header: 'Category' }, + { field: 'rating', header: 'Reviews' }, + { field: 'inventoryStatus', header: 'Status' } ]; this.statuses = [ - {label: 'INSTOCK', value: 'instock'}, - {label: 'LOWSTOCK', value: 'lowstock'}, - {label: 'OUTOFSTOCK', value: 'outofstock'} + { label: 'INSTOCK', value: 'instock' }, + { label: 'LOWSTOCK', value: 'lowstock' }, + { label: 'OUTOFSTOCK', value: 'outofstock' } ]; } @@ -62,26 +61,26 @@ export class CrudComponent implements OnInit { } editProduct(product: Product) { - this.product = {...product}; + this.product = { ...product }; this.productDialog = true; } deleteProduct(product: Product) { this.deleteProductDialog = true; - this.product = {...product}; + this.product = { ...product }; } - confirmDeleteSelected(){ + confirmDeleteSelected() { this.deleteProductsDialog = false; this.products = this.products.filter(val => !this.selectedProducts.includes(val)); - this.messageService.add({severity: 'success', summary: 'Successful', detail: 'Products Deleted', life: 3000}); - this.selectedProducts = null; + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Products Deleted', life: 3000 }); + this.selectedProducts = []; } - confirmDelete(){ + confirmDelete() { this.deleteProductDialog = false; this.products = this.products.filter(val => val.id !== this.product.id); - this.messageService.add({severity: 'success', summary: 'Successful', detail: 'Product Deleted', life: 3000}); + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Product Deleted', life: 3000 }); this.product = {}; } @@ -93,12 +92,12 @@ export class CrudComponent implements OnInit { saveProduct() { this.submitted = true; - if (this.product.name.trim()) { + if (this.product.name?.trim()) { if (this.product.id) { // @ts-ignore - this.product.inventoryStatus = this.product.inventoryStatus.value ? this.product.inventoryStatus.value: this.product.inventoryStatus; + this.product.inventoryStatus = this.product.inventoryStatus.value ? this.product.inventoryStatus.value : this.product.inventoryStatus; this.products[this.findIndexById(this.product.id)] = this.product; - this.messageService.add({severity: 'success', summary: 'Successful', detail: 'Product Updated', life: 3000}); + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Product Updated', life: 3000 }); } else { this.product.id = this.createId(); this.product.code = this.createId(); @@ -106,7 +105,7 @@ export class CrudComponent implements OnInit { // @ts-ignore this.product.inventoryStatus = this.product.inventoryStatus ? this.product.inventoryStatus.value : 'INSTOCK'; this.products.push(this.product); - this.messageService.add({severity: 'success', summary: 'Successful', detail: 'Product Created', life: 3000}); + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Product Created', life: 3000 }); } this.products = [...this.products]; @@ -135,4 +134,8 @@ export class CrudComponent implements OnInit { } return id; } + + onGlobalFilter(table: Table, event: Event) { + table.filterGlobal((event.target as HTMLInputElement).value, 'contains'); + } } diff --git a/src/app/demo/components/pages/crud/crud.module.ts b/src/app/demo/components/pages/crud/crud.module.ts new file mode 100644 index 0000000..8f79bbb --- /dev/null +++ b/src/app/demo/components/pages/crud/crud.module.ts @@ -0,0 +1,41 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { CrudRoutingModule } from './crud-routing.module'; +import { CrudComponent } from './crud.component'; +import { TableModule } from 'primeng/table'; +import { FileUploadModule } from 'primeng/fileupload'; +import { ButtonModule } from 'primeng/button'; +import { RippleModule } from 'primeng/ripple'; +import { ToastModule } from 'primeng/toast'; +import { ToolbarModule } from 'primeng/toolbar'; +import { RatingModule } from 'primeng/rating'; +import { InputTextModule } from 'primeng/inputtext'; +import { InputTextareaModule } from 'primeng/inputtextarea'; +import { DropdownModule } from 'primeng/dropdown'; +import { RadioButtonModule } from 'primeng/radiobutton'; +import { InputNumberModule } from 'primeng/inputnumber'; +import { DialogModule } from 'primeng/dialog'; + +@NgModule({ + imports: [ + CommonModule, + CrudRoutingModule, + TableModule, + FileUploadModule, + FormsModule, + ButtonModule, + RippleModule, + ToastModule, + ToolbarModule, + RatingModule, + InputTextModule, + InputTextareaModule, + DropdownModule, + RadioButtonModule, + InputNumberModule, + DialogModule + ], + declarations: [CrudComponent] +}) +export class CrudModule { } diff --git a/src/app/demo/components/pages/empty/emptydemo-routing.module.ts b/src/app/demo/components/pages/empty/emptydemo-routing.module.ts new file mode 100644 index 0000000..52ed8c5 --- /dev/null +++ b/src/app/demo/components/pages/empty/emptydemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { EmptyDemoComponent } from './emptydemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: EmptyDemoComponent } + ])], + exports: [RouterModule] +}) +export class EmptyDemoRoutingModule { } diff --git a/src/app/components/empty/empty.component.html b/src/app/demo/components/pages/empty/emptydemo.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/empty/empty.component.html rename to src/app/demo/components/pages/empty/emptydemo.component.html diff --git a/src/app/demo/components/pages/empty/emptydemo.component.ts b/src/app/demo/components/pages/empty/emptydemo.component.ts new file mode 100644 index 0000000..65fef35 --- /dev/null +++ b/src/app/demo/components/pages/empty/emptydemo.component.ts @@ -0,0 +1,6 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: './emptydemo.component.html' +}) +export class EmptyDemoComponent { } diff --git a/src/app/demo/components/pages/empty/emptydemo.module.ts b/src/app/demo/components/pages/empty/emptydemo.module.ts new file mode 100644 index 0000000..59302aa --- /dev/null +++ b/src/app/demo/components/pages/empty/emptydemo.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { EmptyDemoRoutingModule } from './emptydemo-routing.module'; +import { EmptyDemoComponent } from './emptydemo.component'; + +@NgModule({ + imports: [ + CommonModule, + EmptyDemoRoutingModule + ], + declarations: [EmptyDemoComponent] +}) +export class EmptyDemoModule { } diff --git a/src/app/demo/components/pages/pages-routing.module.ts b/src/app/demo/components/pages/pages-routing.module.ts new file mode 100644 index 0000000..e68212d --- /dev/null +++ b/src/app/demo/components/pages/pages-routing.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'crud', loadChildren: () => import('./crud/crud.module').then(m => m.CrudModule) }, + { path: 'empty', loadChildren: () => import('./empty/emptydemo.module').then(m => m.EmptyDemoModule) }, + { path: 'timeline', loadChildren: () => import('./timeline/timelinedemo.module').then(m => m.TimelineDemoModule) } + ])], + exports: [RouterModule] +}) +export class PagesRoutingModule { } diff --git a/src/app/demo/components/pages/pages.module.ts b/src/app/demo/components/pages/pages.module.ts new file mode 100644 index 0000000..7b4557f --- /dev/null +++ b/src/app/demo/components/pages/pages.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PagesRoutingModule } from './pages-routing.module'; + +@NgModule({ + declarations: [], + imports: [ + CommonModule, + PagesRoutingModule + ] +}) +export class PagesModule { } diff --git a/src/app/demo/components/pages/timeline/timelinedemo-routing.module.ts b/src/app/demo/components/pages/timeline/timelinedemo-routing.module.ts new file mode 100644 index 0000000..a4522b0 --- /dev/null +++ b/src/app/demo/components/pages/timeline/timelinedemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { TimelineDemoComponent } from './timelinedemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: TimelineDemoComponent } + ])], + exports: [RouterModule] +}) +export class TimelineDemoRoutingModule { } diff --git a/src/app/demo/components/pages/timeline/timelinedemo.component.html b/src/app/demo/components/pages/timeline/timelinedemo.component.html new file mode 100644 index 0000000..36ff3c6 --- /dev/null +++ b/src/app/demo/components/pages/timeline/timelinedemo.component.html @@ -0,0 +1,90 @@ +
+
+
+
Left Align
+ + + {{event.status}} + + +
+
+
+
+
Right Align
+ + + {{event.status}} + + +
+
+
+
+
Alternate Align
+ + + {{event.status}} + + +
+
+
+
+
Opposite Content
+ + + {{event.date}} + + + {{event.status}} + + +
+
+
+ +
+
Customized
+ + + + + + + + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt + quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque quas!

+ +
+
+
+
+ +
+
Horizontal
+
Top Align
+ + + {{event}} + + + +
Bottom Align
+ + + {{event}} + + + +
Alternate Align
+ + + {{event}} + + +   + + diff --git a/src/app/demo/components/pages/timeline/timelinedemo.component.ts b/src/app/demo/components/pages/timeline/timelinedemo.component.ts new file mode 100644 index 0000000..1cb03a1 --- /dev/null +++ b/src/app/demo/components/pages/timeline/timelinedemo.component.ts @@ -0,0 +1,27 @@ +import { Component } from '@angular/core'; +import { PrimeIcons } from 'primeng/api'; + +@Component({ + templateUrl: './timelinedemo.component.html', + styleUrls: ['./timelinedemo.scss'] +}) +export class TimelineDemoComponent { + + events1: any[] = []; + + events2: any[] = []; + + ngOnInit() { + this.events1 = [ + { status: 'Ordered', date: '15/10/2020 10:30', icon: PrimeIcons.SHOPPING_CART, color: '#9C27B0', image: 'game-controller.jpg' }, + { status: 'Processing', date: '15/10/2020 14:00', icon: PrimeIcons.COG, color: '#673AB7' }, + { status: 'Shipped', date: '15/10/2020 16:15', icon: PrimeIcons.ENVELOPE, color: '#FF9800' }, + { status: 'Delivered', date: '16/10/2020 10:00', icon: PrimeIcons.CHECK, color: '#607D8B' } + ]; + + this.events2 = [ + "2020", "2021", "2022", "2023" + ]; + } + +} diff --git a/src/app/demo/components/pages/timeline/timelinedemo.module.ts b/src/app/demo/components/pages/timeline/timelinedemo.module.ts new file mode 100644 index 0000000..082be85 --- /dev/null +++ b/src/app/demo/components/pages/timeline/timelinedemo.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TimelineDemoRoutingModule } from './timelinedemo-routing.module'; +import { TimelineDemoComponent } from './timelinedemo.component'; +import { TimelineModule } from 'primeng/timeline'; +import { ButtonModule } from 'primeng/button'; +import { CardModule } from 'primeng/card'; + +@NgModule({ + imports: [ + CommonModule, + TimelineModule, + ButtonModule, + CardModule, + TimelineDemoRoutingModule + ], + declarations: [TimelineDemoComponent] +}) +export class TimelineDemoModule { } diff --git a/src/app/demo/components/pages/timeline/timelinedemo.scss b/src/app/demo/components/pages/timeline/timelinedemo.scss new file mode 100644 index 0000000..12a423e --- /dev/null +++ b/src/app/demo/components/pages/timeline/timelinedemo.scss @@ -0,0 +1,21 @@ +@media screen and (max-width: 960px) { + ::ng-deep { + .customized-timeline { + .p-timeline-event:nth-child(even) { + flex-direction: row !important; + + .p-timeline-event-content { + text-align: left !important; + } + } + + .p-timeline-event-opposite { + flex: 0; + } + + .p-card { + margin-top: 1rem; + } + } + } +} \ No newline at end of file diff --git a/src/app/components/blocks/blocks.component.html b/src/app/demo/components/primeblocks/blocks/blocks.component.html similarity index 99% rename from src/app/components/blocks/blocks.component.html rename to src/app/demo/components/primeblocks/blocks/blocks.component.html index 08428ad..293a28d 100644 --- a/src/app/components/blocks/blocks.component.html +++ b/src/app/demo/components/primeblocks/blocks/blocks.component.html @@ -5,7 +5,7 @@ Create the screens your
your visitors deserve to see

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

- + @@ -406,4 +406,4 @@
Vivamus id nisl interdum, blandit augue sit amet, eleifend mi.
- \ No newline at end of file + diff --git a/src/app/demo/components/primeblocks/blocks/blocks.component.ts b/src/app/demo/components/primeblocks/blocks/blocks.component.ts new file mode 100644 index 0000000..3317d2c --- /dev/null +++ b/src/app/demo/components/primeblocks/blocks/blocks.component.ts @@ -0,0 +1,399 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: './blocks.component.html' +}) +export class BlocksComponent { + + block1: string = ` +
+
+
+ Create the screens your +
your visitors deserve to see
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + +
+
+
+ Image +
+
`; + + block2: string = ` +
+
+ One Product, + Many Solutions +
+
Ac turpis egestas maecenas pharetra convallis posuere morbi leo urna.
+
+
+ + + +
Built for Developers
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +
+
+ + + +
End-to-End Encryption
+ Risus nec feugiat in fermentum posuere urna nec. Posuere sollicitudin aliquam ultrices sagittis. +
+
+ + + +
Easy to Use
+ Ornare suspendisse sed nisi lacus sed viverra tellus. Neque volutpat ac tincidunt vitae semper. +
+
+ + + +
Fast & Global Support
+ Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. +
+
+ + + +
Open Source
+ Nec tincidunt praesent semper feugiat. Sed adipiscing diam donec adipiscing tristique risus nec feugiat. +
+
+ + + +
Trusted Securitty
+ Mattis rhoncus urna neque viverra justo nec ultrices. Id cursus metus aliquam eleifend. +
+
+
`; + + block3: string = ` +
+
Pricing Plans
+
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Velit numquam eligendi quos.
+
+
+
+
+
Basic
+
Plan description
+
+
+ $9 + per month +
+
+
    +
  • + + Arcu vitae elementum +
  • +
  • + + Dui faucibus in ornare +
  • +
  • + + Morbi tincidunt augue +
  • +
+
+ +
+
+
+
+
+
+
Premium
+
Plan description
+
+
+ $29 + per month +
+
+
    +
  • + + Arcu vitae elementum +
  • +
  • + + Dui faucibus in ornare +
  • +
  • + + Morbi tincidunt augue +
  • +
  • + + Duis ultricies lacus sed +
  • +
+
+ +
+
+
+
+
+
+
Enterprise
+
Plan description
+
+
+ $49 + per month +
+
+
    +
  • + + Arcu vitae elementum +
  • +
  • + + Dui faucibus in ornare +
  • +
  • + + Morbi tincidunt augue +
  • +
  • + + Duis ultricies lacus sed +
  • +
  • + + Imperdiet proin +
  • +
  • + + Nisi scelerisque +
  • +
+
+ +
+
+
+
+
`; + + block4: string = ` +
+
+
 POWERED BY DISCORD
+
Join Our Design Community
+
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Velit numquam eligendi quos.
+ +
+
`; + + block5: string = ` +
+
🔥 Hot Deals!
+ + + Learn More + + + + +
`; + + block6: string = ` +
+ +
+
+
Customers
+
+
+ + 332 Active Users +
+
+ + 9402 Sessions +
+
+ + 2.32m Avg. Duration +
+
+
+
+ + +
+
+
`; + + block7: string = ` +
+
+
+
+
+
+ Orders +
152
+
+
+ +
+
+ 24 new + since last visit +
+
+
+
+
+
+ Revenue +
$2.100
+
+
+ +
+
+ %52+ + since last week +
+
+
+
+
+
+ Customers +
28441
+
+
+ +
+
+ 520 + newly registered +
+
+
+
+
+
+ Comments +
152 Unread
+
+
+ +
+
+ 85 + responded +
+
+
+
`; + + block8: string = ` +
+
+ Image +
Welcome Back
+ Don't have an account? + Create today! +
+
+ + + + +
+
+ + +
+ Forgot password? +
+ +
+
`; + + block9: string = ` +
+
Movie Information
+
Morbi tristique blandit turpis. In viverra ligula id nulla hendrerit rutrum.
+
    +
  • +
    Title
    +
    Heat
    +
    + +
    +
  • +
  • +
    Genre
    +
    + + + +
    +
    + +
    +
  • +
  • +
    Director
    +
    Michael Mann
    +
    + +
    +
  • +
  • +
    Actors
    +
    Robert De Niro, Al Pacino
    +
    + +
    +
  • +
  • +
    Plot
    +
    + A group of professional bank robbers start to feel the heat from police + when they unknowingly leave a clue at their latest heist.
    +
    + +
    +
  • +
+
`; + + block10: string = ` +
+
Card Title
+
Vivamus id nisl interdum, blandit augue sit amet, eleifend mi.
+
+
`; + +} diff --git a/src/app/components/blockviewer/blockviewer.component.scss b/src/app/demo/components/primeblocks/blockviewer/blockviewer.component.scss similarity index 98% rename from src/app/components/blockviewer/blockviewer.component.scss rename to src/app/demo/components/primeblocks/blockviewer/blockviewer.component.scss index 7b1e69a..2d4a0ee 100644 --- a/src/app/components/blockviewer/blockviewer.component.scss +++ b/src/app/demo/components/primeblocks/blockviewer/blockviewer.component.scss @@ -90,10 +90,11 @@ :host ::ng-deep pre[class*="language-"] { margin: 0 !important; + border-radius: 0 !important; &:before, &:after { display: none !important; - } + } code { border-left: 0 none !important; @@ -116,4 +117,4 @@ margin-left: 0; } } -} \ No newline at end of file +} diff --git a/src/app/components/blockviewer/blockviewer.component.ts b/src/app/demo/components/primeblocks/blockviewer/blockviewer.component.ts similarity index 69% rename from src/app/components/blockviewer/blockviewer.component.ts rename to src/app/demo/components/primeblocks/blockviewer/blockviewer.component.ts index 73ae3ba..d68dfd5 100644 --- a/src/app/components/blockviewer/blockviewer.component.ts +++ b/src/app/demo/components/primeblocks/blockviewer/blockviewer.component.ts @@ -1,13 +1,13 @@ import { Component, Input } from '@angular/core'; enum BlockView { - PREVIEW, - CODE + PREVIEW, + CODE } @Component({ - selector: 'block-viewer', - template: ` + selector: 'block-viewer', + template: `
@@ -35,35 +35,36 @@ enum BlockView {
`, - styleUrls: ['./blockviewer.component.scss'] + styleUrls: ['./blockviewer.component.scss'] }) export class BlockViewer { - - @Input() header: string; - @Input() code: string; + @Input() header!: string; - @Input() containerClass: string; + @Input() code!: string; - @Input() previewStyle: string; + @Input() containerClass!: string; - @Input() free: boolean = true; + @Input() previewStyle!: object; - @Input() new: boolean = false; + @Input() free: boolean = true; - BlockView = BlockView; + @Input() new: boolean = false; - blockView: BlockView = BlockView.PREVIEW; + BlockView = BlockView; - activateView(event: Event, blockView: BlockView) { + blockView: BlockView = BlockView.PREVIEW; - this.blockView = blockView; - event.preventDefault(); - } + activateView(event: Event, blockView: BlockView) { - async copyCode(event: Event) { - await navigator.clipboard.writeText(this.code); - event.preventDefault(); - } + this.blockView = blockView; + event.preventDefault(); + } + + + async copyCode(event: Event) { + await navigator.clipboard.writeText(this.code); + event.preventDefault(); + } } diff --git a/src/app/demo/components/primeblocks/primeblocks-routing.module.ts b/src/app/demo/components/primeblocks/primeblocks-routing.module.ts new file mode 100644 index 0000000..b3149f4 --- /dev/null +++ b/src/app/demo/components/primeblocks/primeblocks-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { BlocksComponent } from './blocks/blocks.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: BlocksComponent } + ])], + exports: [RouterModule] +}) +export class PrimeBlocksRoutingModule { } diff --git a/src/app/demo/components/primeblocks/primeblocks.module.ts b/src/app/demo/components/primeblocks/primeblocks.module.ts new file mode 100644 index 0000000..645651b --- /dev/null +++ b/src/app/demo/components/primeblocks/primeblocks.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { BlocksComponent } from './blocks/blocks.component'; +import { PrimeBlocksRoutingModule } from './primeblocks-routing.module'; +import { BlockViewer } from './blockviewer/blockviewer.component' +import { AppCodeModule } from '../code/code.component'; +import { ChipModule } from 'primeng/chip'; +import { CheckboxModule } from 'primeng/checkbox'; +import { ButtonModule } from 'primeng/button'; +import { RippleModule } from 'primeng/ripple'; +import { FormsModule } from '@angular/forms'; +import { InputTextModule } from 'primeng/inputtext'; +import { PasswordModule } from 'primeng/password'; +import { TooltipModule } from 'primeng/tooltip'; + +@NgModule({ + imports: [ + CommonModule, + AppCodeModule, + ButtonModule, + RippleModule, + ChipModule, + CheckboxModule, + FormsModule, + InputTextModule, + PasswordModule, + TooltipModule, + PrimeBlocksRoutingModule, + AppCodeModule + ], + declarations: [BlocksComponent, BlockViewer] +}) +export class PrimeBlocksModule { } diff --git a/src/app/demo/components/uikit/button/buttondemo-routing.module.ts b/src/app/demo/components/uikit/button/buttondemo-routing.module.ts new file mode 100644 index 0000000..9629314 --- /dev/null +++ b/src/app/demo/components/uikit/button/buttondemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ButtonDemoComponent } from './buttondemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: ButtonDemoComponent } + ])], + exports: [RouterModule] +}) +export class ButtonDemoRoutingModule { } diff --git a/src/app/components/button/button.component.html b/src/app/demo/components/uikit/button/buttondemo.component.html similarity index 96% rename from src/app/components/button/button.component.html rename to src/app/demo/components/uikit/button/buttondemo.component.html index b716932..236543c 100644 --- a/src/app/components/button/button.component.html +++ b/src/app/demo/components/uikit/button/buttondemo.component.html @@ -61,13 +61,11 @@
Templating
- - logo - + logo - + - logo + logo PrimeNG
@@ -144,4 +142,4 @@
-
+
\ No newline at end of file diff --git a/src/app/demo/components/uikit/button/buttondemo.component.ts b/src/app/demo/components/uikit/button/buttondemo.component.ts new file mode 100644 index 0000000..4d9a0f0 --- /dev/null +++ b/src/app/demo/components/uikit/button/buttondemo.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; +import { MenuItem } from 'primeng/api'; + +@Component({ + templateUrl: './buttondemo.component.html' +}) +export class ButtonDemoComponent implements OnInit { + + items: MenuItem[] = []; + + loading = [false, false, false, false]; + + ngOnInit() { + this.items = [ + { label: 'Update', icon: 'pi pi-refresh' }, + { label: 'Delete', icon: 'pi pi-times' }, + { label: 'Angular.io', icon: 'pi pi-info', url: 'http://angular.io' }, + { separator: true }, + { label: 'Setup', icon: 'pi pi-cog' } + ]; + } + + load(index: number) { + this.loading[index] = true; + setTimeout(() => this.loading[index] = false, 1000); + } +} diff --git a/src/app/demo/components/uikit/button/buttondemo.module.ts b/src/app/demo/components/uikit/button/buttondemo.module.ts new file mode 100644 index 0000000..719e218 --- /dev/null +++ b/src/app/demo/components/uikit/button/buttondemo.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ButtonDemoRoutingModule } from './buttondemo-routing.module'; +import { ButtonDemoComponent } from './buttondemo.component'; +import { ButtonModule } from 'primeng/button'; +import { RippleModule } from 'primeng/ripple'; +import { SplitButtonModule } from 'primeng/splitbutton'; +import { ToggleButtonModule } from 'primeng/togglebutton'; + +@NgModule({ + imports: [ + CommonModule, + ButtonDemoRoutingModule, + ButtonModule, + RippleModule, + SplitButtonModule, + ToggleButtonModule, + ], + declarations: [ButtonDemoComponent] +}) +export class ButtonDemoModule { } diff --git a/src/app/demo/components/uikit/charts/charts-routing.module.ts b/src/app/demo/components/uikit/charts/charts-routing.module.ts new file mode 100644 index 0000000..d2949ed --- /dev/null +++ b/src/app/demo/components/uikit/charts/charts-routing.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ChartsComponent } from './charts.component'; + + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: ChartsComponent } + ])], + exports: [RouterModule] +}) +export class ChartsRoutingModule { } diff --git a/src/app/components/charts/charts.component.html b/src/app/demo/components/uikit/charts/charts.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/charts/charts.component.html rename to src/app/demo/components/uikit/charts/charts.component.html diff --git a/src/app/demo/components/uikit/charts/charts.component.ts b/src/app/demo/components/uikit/charts/charts.component.ts new file mode 100644 index 0000000..02ad8e1 --- /dev/null +++ b/src/app/demo/components/uikit/charts/charts.component.ts @@ -0,0 +1,268 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Subscription } from 'rxjs'; +import { LayoutService } from 'src/app/layout/service/app.layout.service'; + +@Component({ + templateUrl: './charts.component.html' +}) +export class ChartsComponent implements OnInit, OnDestroy { + + lineData: any; + + barData: any; + + pieData: any; + + polarData: any; + + radarData: any; + + lineOptions: any; + + barOptions: any; + + pieOptions: any; + + polarOptions: any; + + radarOptions: any; + + subscription!: Subscription; + + constructor(public layoutService: LayoutService) { + this.subscription = this.layoutService.configUpdate$.subscribe(() => { + this.initCharts(); + }); + } + + ngOnInit() { + this.initCharts(); + } + + initCharts() { + const documentStyle = getComputedStyle(document.documentElement); + const textColor = documentStyle.getPropertyValue('--text-color'); + const textColorSecondary = documentStyle.getPropertyValue('--text-color-secondary'); + const surfaceBorder = documentStyle.getPropertyValue('--surface-border'); + + this.barData = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [ + { + label: 'My First dataset', + backgroundColor: documentStyle.getPropertyValue('--bluegray-700'), + borderColor: documentStyle.getPropertyValue('--bluegray-700'), + data: [65, 59, 80, 81, 56, 55, 40] + }, + { + label: 'My Second dataset', + backgroundColor: documentStyle.getPropertyValue('--green-600'), + borderColor: documentStyle.getPropertyValue('--green-600'), + data: [28, 48, 40, 19, 86, 27, 90] + } + ] + }; + + this.barOptions = { + plugins: { + legend: { + labels: { + color: textColor + } + } + }, + scales: { + x: { + ticks: { + color: textColorSecondary, + font: { + weight: 500 + } + }, + grid: { + display: false, + drawBorder: false + } + }, + y: { + ticks: { + color: textColorSecondary + }, + grid: { + color: surfaceBorder, + drawBorder: false + } + }, + } + }; + + this.pieData = { + labels: ['A', 'B', 'C'], + datasets: [ + { + data: [540, 325, 702], + backgroundColor: [ + documentStyle.getPropertyValue('--yellow-500'), + documentStyle.getPropertyValue('--blue-500'), + documentStyle.getPropertyValue('--pink-500') + ], + hoverBackgroundColor: [ + documentStyle.getPropertyValue('--yellow-400'), + documentStyle.getPropertyValue('--blue-400'), + documentStyle.getPropertyValue('--red-400') + ] + }] + }; + + this.pieOptions = { + plugins: { + legend: { + labels: { + usePointStyle: true, + color: textColor + } + } + } + }; + + this.lineData = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [ + { + label: 'First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + backgroundColor: documentStyle.getPropertyValue('--bluegray-700'), + borderColor: documentStyle.getPropertyValue('--bluegray-700'), + tension: .4 + }, + { + label: 'Second Dataset', + data: [28, 48, 40, 19, 86, 27, 90], + fill: false, + backgroundColor: documentStyle.getPropertyValue('--green-600'), + borderColor: documentStyle.getPropertyValue('--green-600'), + tension: .4 + } + ] + }; + + this.lineOptions = { + plugins: { + legend: { + labels: { + color: textColor + } + } + }, + scales: { + x: { + ticks: { + color: textColorSecondary + }, + grid: { + color: surfaceBorder, + drawBorder: false + } + }, + y: { + ticks: { + color: textColorSecondary + }, + grid: { + color: surfaceBorder, + drawBorder: false + } + } + } + }; + + this.polarData = { + datasets: [{ + data: [ + 11, + 16, + 7, + 3 + ], + backgroundColor: [ + documentStyle.getPropertyValue('--red-500'), + documentStyle.getPropertyValue('--blue-500'), + documentStyle.getPropertyValue('--yellow-500'), + documentStyle.getPropertyValue('--green-500') + ], + label: 'My dataset' + }], + labels: [ + 'Red', + 'Blue', + 'Yellow', + 'Green' + ] + }; + + this.polarOptions = { + plugins: { + legend: { + labels: { + color: textColor + } + } + }, + scales: { + r: { + grid: { + color: surfaceBorder + } + } + } + }; + + this.radarData = { + labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], + datasets: [ + { + label: 'My First dataset', + borderColor: documentStyle.getPropertyValue('--red-500'), + pointBackgroundColor: documentStyle.getPropertyValue('--red-500'), + pointBorderColor: documentStyle.getPropertyValue('--red-500'), + pointHoverBackgroundColor: textColor, + pointHoverBorderColor: documentStyle.getPropertyValue('--red-500'), + data: [65, 59, 90, 81, 56, 55, 40] + }, + { + label: 'My Second dataset', + borderColor: documentStyle.getPropertyValue('--bluegray-500'), + pointBackgroundColor: documentStyle.getPropertyValue('--bluegray-500'), + pointBorderColor: documentStyle.getPropertyValue('--bluegray-500'), + pointHoverBackgroundColor: textColor, + pointHoverBorderColor: documentStyle.getPropertyValue('--bluegray-500'), + data: [28, 48, 40, 19, 96, 27, 100] + } + ] + }; + + this.radarOptions = { + plugins: { + legend: { + labels: { + color: textColor + } + } + }, + scales: { + r: { + grid: { + color: textColorSecondary + } + } + } + }; + } + + ngOnDestroy() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } +} diff --git a/src/app/demo/components/uikit/charts/charts.module.ts b/src/app/demo/components/uikit/charts/charts.module.ts new file mode 100644 index 0000000..7ec097a --- /dev/null +++ b/src/app/demo/components/uikit/charts/charts.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ChartModule } from 'primeng/chart' +import { ChartsComponent } from './charts.component'; +import { ChartsRoutingModule } from './charts-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + ChartsRoutingModule, + ChartModule + ], + declarations: [ChartsComponent] +}) +export class ChartsModule { } diff --git a/src/app/demo/components/uikit/file/filedemo-routing.module.ts b/src/app/demo/components/uikit/file/filedemo-routing.module.ts new file mode 100644 index 0000000..755982d --- /dev/null +++ b/src/app/demo/components/uikit/file/filedemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FileDemoComponent } from './filedemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: FileDemoComponent } + ])], + exports: [RouterModule] +}) +export class FileDemoRoutingModule { } diff --git a/src/app/components/file/file.component.html b/src/app/demo/components/uikit/file/filedemo.component.html old mode 100755 new mode 100644 similarity index 74% rename from src/app/components/file/file.component.html rename to src/app/demo/components/uikit/file/filedemo.component.html index 5037d14..5fcdb0e --- a/src/app/components/file/file.component.html +++ b/src/app/demo/components/uikit/file/filedemo.component.html @@ -3,7 +3,7 @@
Advanced
+ [multiple]="true" accept="image/*" [maxFileSize]="1000000">
  • {{file.name}} - {{file.size}} bytes
  • @@ -12,7 +12,8 @@
    Basic
    - + +
-
+
\ No newline at end of file diff --git a/src/app/demo/components/uikit/file/filedemo.component.ts b/src/app/demo/components/uikit/file/filedemo.component.ts new file mode 100644 index 0000000..d6bf418 --- /dev/null +++ b/src/app/demo/components/uikit/file/filedemo.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; +import { MessageService } from 'primeng/api'; + +@Component({ + templateUrl: './filedemo.component.html', + providers: [MessageService] +}) +export class FileDemoComponent { + + uploadedFiles: any[] = []; + + constructor(private messageService: MessageService) { } + + onUpload(event: any) { + for (const file of event.files) { + this.uploadedFiles.push(file); + } + + this.messageService.add({ severity: 'info', summary: 'Success', detail: 'File Uploaded' }); + } + + onBasicUpload() { + this.messageService.add({ severity: 'info', summary: 'Success', detail: 'File Uploaded with Basic Mode' }); + } +} diff --git a/src/app/demo/components/uikit/file/filedemo.module.ts b/src/app/demo/components/uikit/file/filedemo.module.ts new file mode 100644 index 0000000..ba2e017 --- /dev/null +++ b/src/app/demo/components/uikit/file/filedemo.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { FileUploadModule } from 'primeng/fileupload'; +import { FileDemoRoutingModule } from './filedemo-routing.module'; +import { FileDemoComponent } from './filedemo.component'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + FileDemoRoutingModule, + FileUploadModule + ], + declarations: [FileDemoComponent], +}) +export class FileDemoModule { } diff --git a/src/app/demo/components/uikit/floatlabel/floatlabeldemo-routing.module.ts b/src/app/demo/components/uikit/floatlabel/floatlabeldemo-routing.module.ts new file mode 100644 index 0000000..5954506 --- /dev/null +++ b/src/app/demo/components/uikit/floatlabel/floatlabeldemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FloatLabelDemoComponent } from './floatlabeldemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: FloatLabelDemoComponent } + ])], + exports: [RouterModule] +}) +export class FloatlabelDemoRoutingModule { } diff --git a/src/app/components/floatlabel/floatlabel.component.html b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.html similarity index 70% rename from src/app/components/floatlabel/floatlabel.component.html rename to src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.html index 3648c9a..a67e07e 100644 --- a/src/app/components/floatlabel/floatlabel.component.html +++ b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.html @@ -1,5 +1,6 @@
Float Label
+

All input text components support floating labels by adding (.p-float-label) to wrapper class.

@@ -14,27 +15,41 @@
+
+ + + + + +
+
+ + + + + +
- +
- +
- +
- +
@@ -44,28 +59,28 @@ - +
- +
- +
- +
-
\ No newline at end of file +
diff --git a/src/app/components/floatlabel/floatlabel.component.ts b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.ts similarity index 66% rename from src/app/components/floatlabel/floatlabel.component.ts rename to src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.ts index 4b2c018..de7716d 100644 --- a/src/app/components/floatlabel/floatlabel.component.ts +++ b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit } from '@angular/core'; -import { CountryService } from '../../service/countryservice'; +import { CountryService } from 'src/app/demo/service/country.service'; @Component({ - templateUrl: './floatlabel.component.html', + templateUrl: './floatlabeldemo.component.html', }) -export class FloatLabelComponent implements OnInit { +export class FloatLabelDemoComponent implements OnInit { - countries: any[]; + countries: any[] = []; cities: any[]; - filteredCountries: any[]; + filteredCountries: any[] = []; value1: any; @@ -38,11 +38,11 @@ export class FloatLabelComponent implements OnInit { constructor(private countryService: CountryService) { this.cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} + { name: 'New York', code: 'NY' }, + { name: 'Rome', code: 'RM' }, + { name: 'London', code: 'LDN' }, + { name: 'Istanbul', code: 'IST' }, + { name: 'Paris', code: 'PRS' } ]; } @@ -52,11 +52,12 @@ export class FloatLabelComponent implements OnInit { }); } - searchCountry(event) { + searchCountry(event: any) { // in a real application, make a request to a remote url with the query and // return filtered results, for demo we filter at client side const filtered: any[] = []; const query = event.query; + // tslint:disable-next-line:prefer-for-of for (let i = 0; i < this.countries.length; i++) { const country = this.countries[i]; if (country.name.toLowerCase().indexOf(query.toLowerCase()) == 0) { diff --git a/src/app/demo/components/uikit/floatlabel/floatlabeldemo.module.ts b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.module.ts new file mode 100644 index 0000000..6efed5a --- /dev/null +++ b/src/app/demo/components/uikit/floatlabel/floatlabeldemo.module.ts @@ -0,0 +1,35 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { FloatLabelDemoComponent } from './floatlabeldemo.component'; +import { FloatlabelDemoRoutingModule } from './floatlabeldemo-routing.module'; +import { AutoCompleteModule } from "primeng/autocomplete"; +import { CalendarModule } from "primeng/calendar"; +import { ChipsModule } from "primeng/chips"; +import { DropdownModule } from "primeng/dropdown"; +import { InputMaskModule } from "primeng/inputmask"; +import { InputNumberModule } from "primeng/inputnumber"; +import { CascadeSelectModule } from "primeng/cascadeselect"; +import { MultiSelectModule } from "primeng/multiselect"; +import { InputTextareaModule } from "primeng/inputtextarea"; +import { InputTextModule } from "primeng/inputtext"; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + FloatlabelDemoRoutingModule, + AutoCompleteModule, + CalendarModule, + ChipsModule, + DropdownModule, + InputMaskModule, + InputNumberModule, + CascadeSelectModule, + MultiSelectModule, + InputTextareaModule, + InputTextModule + ], + declarations: [FloatLabelDemoComponent] +}) +export class FloatlabelDemoModule { } diff --git a/src/app/demo/components/uikit/formlayout/formlayout-routing.module.ts b/src/app/demo/components/uikit/formlayout/formlayout-routing.module.ts new file mode 100644 index 0000000..f8f7a34 --- /dev/null +++ b/src/app/demo/components/uikit/formlayout/formlayout-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormLayoutComponent } from './formlayout.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: FormLayoutComponent } + ])], + exports: [RouterModule] +}) +export class FormlayoutRoutingModule { } diff --git a/src/app/components/formlayout/formlayout.component.html b/src/app/demo/components/uikit/formlayout/formlayout.component.html similarity index 100% rename from src/app/components/formlayout/formlayout.component.html rename to src/app/demo/components/uikit/formlayout/formlayout.component.html diff --git a/src/app/components/formlayout/formlayout.component.ts b/src/app/demo/components/uikit/formlayout/formlayout.component.ts similarity index 91% rename from src/app/components/formlayout/formlayout.component.ts rename to src/app/demo/components/uikit/formlayout/formlayout.component.ts index 27a5d9c..e8e02db 100644 --- a/src/app/components/formlayout/formlayout.component.ts +++ b/src/app/demo/components/uikit/formlayout/formlayout.component.ts @@ -5,8 +5,8 @@ import { Component } from '@angular/core'; }) export class FormLayoutComponent { - selectedState:any; - + selectedState: any; + dropdownItems = [ { name: 'Option 1', code: 'Option 1' }, { name: 'Option 2', code: 'Option 2' }, diff --git a/src/app/demo/components/uikit/formlayout/formlayout.module.ts b/src/app/demo/components/uikit/formlayout/formlayout.module.ts new file mode 100644 index 0000000..d4d852c --- /dev/null +++ b/src/app/demo/components/uikit/formlayout/formlayout.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormLayoutComponent } from './formlayout.component'; +import { DropdownModule } from 'primeng/dropdown'; +import { FormsModule } from '@angular/forms'; +import { FormlayoutRoutingModule } from './formlayout-routing.module'; +import { InputTextModule } from 'primeng/inputtext'; +import { ButtonModule } from 'primeng/button'; +import { InputTextareaModule } from 'primeng/inputtextarea'; + + +@NgModule({ + imports: [ + CommonModule, + DropdownModule, + FormsModule, + InputTextModule, + InputTextareaModule, + ButtonModule, + FormlayoutRoutingModule + ], + declarations: [FormLayoutComponent] +}) +export class FormlayoutModule { } diff --git a/src/app/demo/components/uikit/input/inputdemo-routing.module.ts b/src/app/demo/components/uikit/input/inputdemo-routing.module.ts new file mode 100644 index 0000000..2660434 --- /dev/null +++ b/src/app/demo/components/uikit/input/inputdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { InputDemoComponent } from './inputdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: InputDemoComponent } + ])], + exports: [RouterModule] +}) +export class InputDemoRoutingModule { } diff --git a/src/app/components/input/input.component.html b/src/app/demo/components/uikit/input/inputdemo.component.html similarity index 61% rename from src/app/components/input/input.component.html rename to src/app/demo/components/uikit/input/inputdemo.component.html index 9ca8677..ad2a33d 100644 --- a/src/app/components/input/input.component.html +++ b/src/app/demo/components/uikit/input/inputdemo.component.html @@ -4,13 +4,13 @@
InputText
- +
- +
- +
@@ -19,19 +19,19 @@
- +
- +
- +
@@ -39,18 +39,19 @@
Float Label
- - + +
Textarea
- +
AutoComplete
- + +
Calendar
- +
InputNumber
@@ -58,38 +59,38 @@
Chips
-
- + +
-
-
-
Slider
- - -
-
-
Rating
- -
-
-
ColorPicker
- -
-
-
Knob
- -
-
+
+
+
Slider
+ + +
+
+
Rating
+ +
+
+
ColorPicker
+ +
+
+
Knob
+ +
+
RadioButton
-
+
-
+
@@ -110,43 +111,44 @@
Checkbox
-
+
-
- - -
-
-
-
- - -
-
-
-
+
+
+
+ + +
+
+
+
+ + +
+
Input Switch
-
+
Listbox
Dropdown
-
MultiSelect
+ +
Multiselect
-
- +
+
{{option.name}}
@@ -154,29 +156,26 @@
-
- +
+
{{country.name}}
- -
TreeSelect
-
ToggleButton
- + -
SelectButton
+
SelectOneButton
-
SelectButton - Multiple
- +
SelectManyButton
+ +
-
InputGroup
@@ -187,7 +186,6 @@
-
@@ -197,23 +195,20 @@ .00
-
-
- - - - + +
-
\ No newline at end of file + +
diff --git a/src/app/demo/components/uikit/input/inputdemo.component.ts b/src/app/demo/components/uikit/input/inputdemo.component.ts new file mode 100644 index 0000000..19f385a --- /dev/null +++ b/src/app/demo/components/uikit/input/inputdemo.component.ts @@ -0,0 +1,124 @@ +import { Component, OnInit } from '@angular/core'; + +import { SelectItem } from 'primeng/api'; +import { CountryService } from 'src/app/demo/service/country.service'; + +@Component({ + templateUrl: './inputdemo.component.html', + styles: [` + :host ::ng-deep .p-multiselect { + min-width: 15rem; + } + + :host ::ng-deep .multiselect-custom-virtual-scroll .p-multiselect { + min-width: 20rem; + } + + :host ::ng-deep .multiselect-custom .p-multiselect-label { + padding-top: .25rem; + padding-bottom: .25rem; + + } + + :host ::ng-deep .multiselect-custom .country-item.country-item-value { + padding: .25rem .5rem; + border-radius: 3px; + display: inline-flex; + margin-right: .5rem; + background-color: var(--primary-color); + color: var(--primary-color-text); + } + + :host ::ng-deep .multiselect-custom .country-item.country-item-value img.flag { + width: 17px; + } + + :host ::ng-deep .multiselect-custom .country-item { + display: flex; + align-items: center; + } + + :host ::ng-deep .multiselect-custom .country-item img.flag { + width: 18px; + margin-right: .5rem; + } + + :host ::ng-deep .multiselect-custom .country-placeholder { + padding: 0.25rem; + } + + :host ::ng-deep .p-colorpicker { + width: 2.5em + } + `] +}) +export class InputDemoComponent implements OnInit { + countries: any[] = []; + + filteredCountries: any[] = []; + + selectedCountryAdvanced: any[] = []; + + valSlider = 50; + + valColor = '#424242'; + + valRadio: string = ''; + + valCheck: string[] = []; + + valSwitch: boolean = false; + + cities: SelectItem[] = []; + + selectedList: SelectItem = { value: '' }; + + selectedDrop: SelectItem = { value: '' }; + + selectedMulti: any[] = []; + + valToggle = false; + + paymentOptions: any[] = []; + + valSelect1: string = ""; + + valSelect2: string = ""; + + valueKnob = 20; + + constructor(private countryService: CountryService) { } + + ngOnInit() { + this.countryService.getCountries().then(countries => { + this.countries = countries; + }); + + this.cities = [ + { label: 'New York', value: { id: 1, name: 'New York', code: 'NY' } }, + { label: 'Rome', value: { id: 2, name: 'Rome', code: 'RM' } }, + { label: 'London', value: { id: 3, name: 'London', code: 'LDN' } }, + { label: 'Istanbul', value: { id: 4, name: 'Istanbul', code: 'IST' } }, + { label: 'Paris', value: { id: 5, name: 'Paris', code: 'PRS' } } + ]; + + this.paymentOptions = [ + { name: 'Option 1', value: 1 }, + { name: 'Option 2', value: 2 }, + { name: 'Option 3', value: 3 } + ]; + } + + filterCountry(event: any) { + const filtered: any[] = []; + const query = event.query; + for (let i = 0; i < this.countries.length; i++) { + const country = this.countries[i]; + if (country.name.toLowerCase().indexOf(query.toLowerCase()) == 0) { + filtered.push(country); + } + } + + this.filteredCountries = filtered; + } +} diff --git a/src/app/demo/components/uikit/input/inputdemo.module.ts b/src/app/demo/components/uikit/input/inputdemo.module.ts new file mode 100644 index 0000000..c6da137 --- /dev/null +++ b/src/app/demo/components/uikit/input/inputdemo.module.ts @@ -0,0 +1,59 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { InputDemoComponent } from './inputdemo.component'; +import { InputDemoRoutingModule } from './inputdemo-routing.module'; +import { AutoCompleteModule } from "primeng/autocomplete"; +import { CalendarModule } from "primeng/calendar"; +import { ChipsModule } from "primeng/chips"; +import { ChipModule } from "primeng/chip"; +import { DropdownModule } from "primeng/dropdown"; +import { InputMaskModule } from "primeng/inputmask"; +import { InputNumberModule } from "primeng/inputnumber"; +import { CascadeSelectModule } from "primeng/cascadeselect"; +import { MultiSelectModule } from "primeng/multiselect"; +import { InputTextareaModule } from "primeng/inputtextarea"; +import { InputTextModule } from "primeng/inputtext"; +import { RatingModule } from 'primeng/rating'; +import { KnobModule } from 'primeng/knob'; +import { ListboxModule } from 'primeng/listbox'; +import { SelectButtonModule } from 'primeng/selectbutton'; +import { CheckboxModule } from 'primeng/checkbox'; +import { ButtonModule } from 'primeng/button'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { RadioButtonModule } from 'primeng/radiobutton'; +import { ColorPickerModule } from 'primeng/colorpicker'; +import { ToggleButtonModule } from 'primeng/togglebutton'; +import { SliderModule } from 'primeng/slider'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + InputDemoRoutingModule, + AutoCompleteModule, + CalendarModule, + ChipsModule, + DropdownModule, + InputMaskModule, + InputNumberModule, + ColorPickerModule, + CascadeSelectModule, + MultiSelectModule, + ToggleButtonModule, + SliderModule, + InputTextareaModule, + RadioButtonModule, + InputTextModule, + RatingModule, + ChipModule, + KnobModule, + InputSwitchModule, + ListboxModule, + SelectButtonModule, + CheckboxModule, + ButtonModule + ], + declarations: [InputDemoComponent] +}) +export class InputDemoModule { } diff --git a/src/app/demo/components/uikit/invalid/invalidstatedemo-routing.module.ts b/src/app/demo/components/uikit/invalid/invalidstatedemo-routing.module.ts new file mode 100644 index 0000000..f9889d9 --- /dev/null +++ b/src/app/demo/components/uikit/invalid/invalidstatedemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { InvalidStateDemoComponent } from './invalidstatedemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: InvalidStateDemoComponent } + ])], + exports: [RouterModule] +}) +export class InvalidStateDemoRoutingModule { } diff --git a/src/app/components/invalidstate/invalidstate.component.html b/src/app/demo/components/uikit/invalid/invalidstatedemo.component.html similarity index 94% rename from src/app/components/invalidstate/invalidstate.component.html rename to src/app/demo/components/uikit/invalid/invalidstatedemo.component.html index bbd4093..12ebae8 100644 --- a/src/app/components/invalidstate/invalidstate.component.html +++ b/src/app/demo/components/uikit/invalid/invalidstatedemo.component.html @@ -1,5 +1,6 @@
Invalid State
+

All form components have an invalid state style to display the validation errors when ng-invalid ng-dirty combination is applied by Angular.

@@ -49,3 +50,4 @@
+ diff --git a/src/app/components/invalidstate/invalidstate.component.ts b/src/app/demo/components/uikit/invalid/invalidstatedemo.component.ts similarity index 67% rename from src/app/components/invalidstate/invalidstate.component.ts rename to src/app/demo/components/uikit/invalid/invalidstatedemo.component.ts index 097db7f..6093d86 100644 --- a/src/app/components/invalidstate/invalidstate.component.ts +++ b/src/app/demo/components/uikit/invalid/invalidstatedemo.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit } from '@angular/core'; -import { CountryService } from '../../service/countryservice'; +import { CountryService } from 'src/app/demo/service/country.service'; @Component({ - templateUrl: './invalidstate.component.html' + templateUrl: './invalidstatedemo.component.html' }) -export class InvalidStateComponent implements OnInit { +export class InvalidStateDemoComponent implements OnInit { - countries: any[]; + countries: any[] = []; cities: any[]; - filteredCountries: any[]; + filteredCountries: any[] = []; value1: any; @@ -34,11 +34,11 @@ export class InvalidStateComponent implements OnInit { constructor(private countryService: CountryService) { this.cities = [ - {name: 'New York', code: 'NY'}, - {name: 'Rome', code: 'RM'}, - {name: 'London', code: 'LDN'}, - {name: 'Istanbul', code: 'IST'}, - {name: 'Paris', code: 'PRS'} + { name: 'New York', code: 'NY' }, + { name: 'Rome', code: 'RM' }, + { name: 'London', code: 'LDN' }, + { name: 'Istanbul', code: 'IST' }, + { name: 'Paris', code: 'PRS' } ]; } @@ -48,7 +48,7 @@ export class InvalidStateComponent implements OnInit { }); } - searchCountry(event) { + searchCountry(event: any) { // in a real application, make a request to a remote url with the query and return filtered results, // for demo we filter at client side const filtered: any[] = []; diff --git a/src/app/demo/components/uikit/invalid/invalidstatedemo.module.ts b/src/app/demo/components/uikit/invalid/invalidstatedemo.module.ts new file mode 100644 index 0000000..90ee2a7 --- /dev/null +++ b/src/app/demo/components/uikit/invalid/invalidstatedemo.module.ts @@ -0,0 +1,37 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { InvalidStateDemoComponent } from './invalidstatedemo.component'; +import { InvalidStateDemoRoutingModule } from './invalidstatedemo-routing.module'; +import { AutoCompleteModule } from "primeng/autocomplete"; +import { CalendarModule } from "primeng/calendar"; +import { ChipsModule } from "primeng/chips"; +import { DropdownModule } from "primeng/dropdown"; +import { InputMaskModule } from "primeng/inputmask"; +import { InputNumberModule } from "primeng/inputnumber"; +import { CascadeSelectModule } from "primeng/cascadeselect"; +import { MultiSelectModule } from "primeng/multiselect"; +import { InputTextareaModule } from "primeng/inputtextarea"; +import { InputTextModule } from "primeng/inputtext"; +import { PasswordModule } from "primeng/password"; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + InvalidStateDemoRoutingModule, + AutoCompleteModule, + CalendarModule, + ChipsModule, + DropdownModule, + InputMaskModule, + InputNumberModule, + CascadeSelectModule, + MultiSelectModule, + PasswordModule, + InputTextareaModule, + InputTextModule + ], + declarations: [InvalidStateDemoComponent] +}) +export class InvalidStateDemoModule { } diff --git a/src/app/demo/components/uikit/list/listdemo-routing.module.ts b/src/app/demo/components/uikit/list/listdemo-routing.module.ts new file mode 100644 index 0000000..41f7969 --- /dev/null +++ b/src/app/demo/components/uikit/list/listdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ListDemoComponent } from './listdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: ListDemoComponent } + ])], + exports: [RouterModule] +}) +export class ListDemoRoutingModule { } diff --git a/src/app/components/list/list.component.html b/src/app/demo/components/uikit/list/listdemo.component.html similarity index 91% rename from src/app/components/list/list.component.html rename to src/app/demo/components/uikit/list/listdemo.component.html index 82c0043..07a036d 100644 --- a/src/app/components/list/list.component.html +++ b/src/app/demo/components/uikit/list/listdemo.component.html @@ -5,10 +5,10 @@
- + - +
@@ -66,7 +66,7 @@
PickList
-
{{city.name}}
@@ -78,7 +78,7 @@
OrderList
- +
{{city.name}}
diff --git a/src/app/demo/components/uikit/list/listdemo.component.ts b/src/app/demo/components/uikit/list/listdemo.component.ts new file mode 100644 index 0000000..19491fb --- /dev/null +++ b/src/app/demo/components/uikit/list/listdemo.component.ts @@ -0,0 +1,72 @@ +import { Component, OnInit } from '@angular/core'; +import { SelectItem } from 'primeng/api'; +import { DataView } from 'primeng/dataview'; +import { Product } from 'src/app/demo/api/product'; +import { ProductService } from 'src/app/demo/service/product.service'; + +@Component({ + templateUrl: './listdemo.component.html' +}) +export class ListDemoComponent implements OnInit { + + products: Product[] = []; + + sortOptions: SelectItem[] = []; + + sortOrder: number = 0; + + sortField: string = ''; + + sourceCities: any[] = []; + + targetCities: any[] = []; + + orderCities: any[] = []; + + constructor(private productService: ProductService) { } + + ngOnInit() { + this.productService.getProducts().then(data => this.products = data); + + this.sourceCities = [ + { name: 'San Francisco', code: 'SF' }, + { name: 'London', code: 'LDN' }, + { name: 'Paris', code: 'PRS' }, + { name: 'Istanbul', code: 'IST' }, + { name: 'Berlin', code: 'BRL' }, + { name: 'Barcelona', code: 'BRC' }, + { name: 'Rome', code: 'RM' }]; + + this.targetCities = []; + + this.orderCities = [ + { name: 'San Francisco', code: 'SF' }, + { name: 'London', code: 'LDN' }, + { name: 'Paris', code: 'PRS' }, + { name: 'Istanbul', code: 'IST' }, + { name: 'Berlin', code: 'BRL' }, + { name: 'Barcelona', code: 'BRC' }, + { name: 'Rome', code: 'RM' }]; + + this.sortOptions = [ + { label: 'Price High to Low', value: '!price' }, + { label: 'Price Low to High', value: 'price' } + ]; + } + + onSortChange(event: any) { + const value = event.value; + + if (value.indexOf('!') === 0) { + this.sortOrder = -1; + this.sortField = value.substring(1, value.length); + } else { + this.sortOrder = 1; + this.sortField = value; + } + } + + onFilter(dv: DataView, event: Event) { + dv.filter((event.target as HTMLInputElement).value); + } +} diff --git a/src/app/demo/components/uikit/list/listdemo.module.ts b/src/app/demo/components/uikit/list/listdemo.module.ts new file mode 100644 index 0000000..dc0c6ea --- /dev/null +++ b/src/app/demo/components/uikit/list/listdemo.module.ts @@ -0,0 +1,29 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { ListDemoComponent } from './listdemo.component'; +import { ListDemoRoutingModule } from './listdemo-routing.module'; +import { DataViewModule } from 'primeng/dataview'; +import { PickListModule } from 'primeng/picklist'; +import { OrderListModule } from 'primeng/orderlist'; +import { InputTextModule } from 'primeng/inputtext'; +import { DropdownModule } from 'primeng/dropdown'; +import { RatingModule } from 'primeng/rating'; +import { ButtonModule } from 'primeng/button'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + ListDemoRoutingModule, + DataViewModule, + PickListModule, + OrderListModule, + InputTextModule, + DropdownModule, + RatingModule, + ButtonModule + ], + declarations: [ListDemoComponent] +}) +export class ListDemoModule { } diff --git a/src/app/demo/components/uikit/media/mediademo-routing.module.ts b/src/app/demo/components/uikit/media/mediademo-routing.module.ts new file mode 100644 index 0000000..5de8d0c --- /dev/null +++ b/src/app/demo/components/uikit/media/mediademo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MediaDemoComponent } from './mediademo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: MediaDemoComponent } + ])], + exports: [RouterModule] +}) +export class MediaDemoRoutingModule { } diff --git a/src/app/components/media/media.component.html b/src/app/demo/components/uikit/media/mediademo.component.html similarity index 100% rename from src/app/components/media/media.component.html rename to src/app/demo/components/uikit/media/mediademo.component.html diff --git a/src/app/demo/components/uikit/media/mediademo.component.ts b/src/app/demo/components/uikit/media/mediademo.component.ts new file mode 100644 index 0000000..c16c2cf --- /dev/null +++ b/src/app/demo/components/uikit/media/mediademo.component.ts @@ -0,0 +1,63 @@ +import { Component, OnInit } from '@angular/core'; +import { Product } from 'src/app/demo/api/product'; +import { PhotoService } from 'src/app/demo/service/photo.service'; +import { ProductService } from 'src/app/demo/service/product.service'; + +@Component({ + templateUrl: './mediademo.component.html' +}) +export class MediaDemoComponent implements OnInit { + + products!: Product[]; + + images!: any[]; + + galleriaResponsiveOptions: any[] = [ + { + breakpoint: '1024px', + numVisible: 5 + }, + { + breakpoint: '960px', + numVisible: 4 + }, + { + breakpoint: '768px', + numVisible: 3 + }, + { + breakpoint: '560px', + numVisible: 1 + } + ]; + + carouselResponsiveOptions: any[] = [ + { + breakpoint: '1024px', + numVisible: 3, + numScroll: 3 + }, + { + breakpoint: '768px', + numVisible: 2, + numScroll: 2 + }, + { + breakpoint: '560px', + numVisible: 1, + numScroll: 1 + } + ]; + + constructor(private productService: ProductService, private photoService: PhotoService) { } + + ngOnInit() { + this.productService.getProductsSmall().then(products => { + this.products = products; + }); + + this.photoService.getImages().then(images => { + this.images = images; + }); + } +} diff --git a/src/app/demo/components/uikit/media/mediademo.module.ts b/src/app/demo/components/uikit/media/mediademo.module.ts new file mode 100644 index 0000000..960315a --- /dev/null +++ b/src/app/demo/components/uikit/media/mediademo.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MediaDemoComponent } from './mediademo.component'; +import { MediaDemoRoutingModule } from './mediademo-routing.module'; +import { ButtonModule } from 'primeng/button'; +import { ImageModule } from 'primeng/image'; +import { GalleriaModule } from 'primeng/galleria'; +import { CarouselModule } from 'primeng/carousel'; + +@NgModule({ + imports: [ + CommonModule, + MediaDemoRoutingModule, + ButtonModule, + ImageModule, + GalleriaModule, + CarouselModule + ], + declarations: [MediaDemoComponent] +}) +export class MediaDemoModule { } diff --git a/src/app/demo/components/uikit/menus/confirmation.component.ts b/src/app/demo/components/uikit/menus/confirmation.component.ts new file mode 100644 index 0000000..bb3e254 --- /dev/null +++ b/src/app/demo/components/uikit/menus/confirmation.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-confirmation', + template: ` +
+ +

Confirmation Component Content via Child Route

+
+ ` +}) +export class ConfirmationComponent { } diff --git a/src/app/components/menus/menus.component.html b/src/app/demo/components/uikit/menus/menus.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/menus/menus.component.html rename to src/app/demo/components/uikit/menus/menus.component.html diff --git a/src/app/components/menus/menus.component.ts b/src/app/demo/components/uikit/menus/menus.component.ts old mode 100755 new mode 100644 similarity index 84% rename from src/app/components/menus/menus.component.ts rename to src/app/demo/components/uikit/menus/menus.component.ts index d9a3859..34c2e35 --- a/src/app/components/menus/menus.component.ts +++ b/src/app/demo/components/uikit/menus/menus.component.ts @@ -7,25 +7,25 @@ import { MegaMenuItem, MenuItem } from 'primeng/api'; }) export class MenusComponent implements OnInit { - breadcrumbItems: MenuItem[]; + breadcrumbItems!: MenuItem[]; - tieredItems: MenuItem[]; + tieredItems!: MenuItem[]; - items: MenuItem[]; + items!: MenuItem[]; - routeItems: MenuItem[]; + routeItems!: MenuItem[]; - megaMenuItems: MegaMenuItem[]; + megaMenuItems!: MegaMenuItem[]; - panelMenuItems: MenuItem[]; + panelMenuItems!: MenuItem[]; - stepsItems: MenuItem[]; + stepsItems!: MenuItem[]; - slideItems: MenuItem[]; + slideItems!: MenuItem[]; - menuItems: MenuItem[]; + menuItems!: MenuItem[]; - plainMenuItems: MenuItem[]; + plainMenuItems!: MenuItem[]; pageIndex: number = 0; @@ -285,10 +285,10 @@ export class MenusComponent implements OnInit { this.breadcrumbItems.push({ label: 'Item' }); this.routeItems = [ - {label: 'Personal', routerLink:'personal'}, - {label: 'Seat', routerLink:'seat'}, - {label: 'Payment', routerLink:'payment'}, - {label: 'Confirmation', routerLink:'confirmation'}, + { label: 'Personal', routerLink: 'personal' }, + { label: 'Seat', routerLink: 'seat' }, + { label: 'Payment', routerLink: 'payment' }, + { label: 'Confirmation', routerLink: 'confirmation' }, ]; this.megaMenuItems = [ @@ -298,21 +298,21 @@ export class MenusComponent implements OnInit { [ { label: 'Women', - items: [{label: 'Women Item'}, {label: 'Women Item'}, {label: 'Women Item'}] + items: [{ label: 'Women Item' }, { label: 'Women Item' }, { label: 'Women Item' }] }, { label: 'Men', - items: [{label: 'Men Item'}, {label: 'Men Item'}, {label: 'Men Item'}] + items: [{ label: 'Men Item' }, { label: 'Men Item' }, { label: 'Men Item' }] } ], [ { label: 'Kids', - items: [{label: 'Kids Item'}, {label: 'Kids Item'}] + items: [{ label: 'Kids Item' }, { label: 'Kids Item' }] }, { label: 'Luggage', - items: [{label: 'Luggage Item'}, {label: 'Luggage Item'}, {label: 'Luggage Item'}] + items: [{ label: 'Luggage Item' }, { label: 'Luggage Item' }, { label: 'Luggage Item' }] } ] ] @@ -323,27 +323,27 @@ export class MenusComponent implements OnInit { [ { label: 'Computer', - items: [{label: 'Computer Item'}, {label: 'Computer Item'}] + items: [{ label: 'Computer Item' }, { label: 'Computer Item' }] }, { label: 'Camcorder', - items: [{label: 'Camcorder Item'}, {label: 'Camcorder Item'}, {label: 'Camcorder Item'}] + items: [{ label: 'Camcorder Item' }, { label: 'Camcorder Item' }, { label: 'Camcorder Item' }] } ], [ { label: 'TV', - items: [{label: 'TV Item'}, {label: 'TV Item'}] + items: [{ label: 'TV Item' }, { label: 'TV Item' }] }, { label: 'Audio', - items: [{label: 'Audio Item'}, {label: 'Audio Item'}, {label: 'Audio Item'}] + items: [{ label: 'Audio Item' }, { label: 'Audio Item' }, { label: 'Audio Item' }] } ], [ { label: 'Sports.7', - items: [{label: 'Sports.7.1'}, {label: 'Sports.7.2'}] + items: [{ label: 'Sports.7.1' }, { label: 'Sports.7.2' }] } ] ] @@ -354,21 +354,21 @@ export class MenusComponent implements OnInit { [ { label: 'Living Room', - items: [{label: 'Living Room Item'}, {label: 'Living Room Item'}] + items: [{ label: 'Living Room Item' }, { label: 'Living Room Item' }] }, { label: 'Kitchen', - items: [{label: 'Kitchen Item'}, {label: 'Kitchen Item'}, {label: 'Kitchen Item'}] + items: [{ label: 'Kitchen Item' }, { label: 'Kitchen Item' }, { label: 'Kitchen Item' }] } ], [ { label: 'Bedroom', - items: [{label: 'Bedroom Item'}, {label: 'Bedroom Item'}] + items: [{ label: 'Bedroom Item' }, { label: 'Bedroom Item' }] }, { label: 'Outdoor', - items: [{label: 'Outdoor Item'}, {label: 'Outdoor Item'}, {label: 'Outdoor Item'}] + items: [{ label: 'Outdoor Item' }, { label: 'Outdoor Item' }, { label: 'Outdoor Item' }] } ] ] @@ -379,17 +379,17 @@ export class MenusComponent implements OnInit { [ { label: 'Basketball', - items: [{label: 'Basketball Item'}, {label: 'Basketball Item'}] + items: [{ label: 'Basketball Item' }, { label: 'Basketball Item' }] }, { label: 'Football', - items: [{label: 'Football Item'}, {label: 'Football Item'}, {label: 'Football Item'}] + items: [{ label: 'Football Item' }, { label: 'Football Item' }, { label: 'Football Item' }] } ], [ { label: 'Tennis', - items: [{label: 'Tennis Item'}, {label: 'Tennis Item'}] + items: [{ label: 'Tennis Item' }, { label: 'Tennis Item' }] } ] ] @@ -469,5 +469,4 @@ export class MenusComponent implements OnInit { } ]; } - } diff --git a/src/app/demo/components/uikit/menus/menus.module.ts b/src/app/demo/components/uikit/menus/menus.module.ts new file mode 100644 index 0000000..d37c40c --- /dev/null +++ b/src/app/demo/components/uikit/menus/menus.module.ts @@ -0,0 +1,54 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PaymentComponent } from './payment.component'; +import { SeatComponent } from './seat.component'; +import { PersonalComponent } from './personal.component'; +import { ConfirmationComponent } from './confirmation.component'; +import { MenusComponent } from './menus.component'; +import { MenuModule } from 'primeng/menu'; +import { MegaMenuModule } from 'primeng/megamenu'; +import { PanelMenuModule } from 'primeng/panelmenu'; +import { TieredMenuModule } from 'primeng/tieredmenu'; +import { MenubarModule } from 'primeng/menubar'; +import { BreadcrumbModule } from 'primeng/breadcrumb'; +import { TabMenuModule } from 'primeng/tabmenu'; +import { ContextMenuModule } from 'primeng/contextmenu'; +import { StepsModule } from 'primeng/steps'; +import { InputTextModule } from 'primeng/inputtext'; + +@NgModule({ + declarations: [ + MenusComponent, + PaymentComponent, + ConfirmationComponent, + PersonalComponent, + SeatComponent, + + ], + imports: [ + MenuModule, + MegaMenuModule, + PanelMenuModule, + MenubarModule, + BreadcrumbModule, + InputTextModule, + TieredMenuModule, + TabMenuModule, + ContextMenuModule, + StepsModule, + RouterModule.forChild([ + { + path: '', component: MenusComponent, children: [ + { path: '', redirectTo: 'personal', pathMatch: 'full' }, + { path: 'personal', component: PersonalComponent }, + { path: 'confirmation', component: ConfirmationComponent }, + { path: 'seat', component: SeatComponent }, + { path: 'payment', component: PaymentComponent } + ] + } + ]) + ], + exports: [RouterModule] +}) +export class MenusModule { } + diff --git a/src/app/demo/components/uikit/menus/payment.component.ts b/src/app/demo/components/uikit/menus/payment.component.ts new file mode 100644 index 0000000..f5e3a88 --- /dev/null +++ b/src/app/demo/components/uikit/menus/payment.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-payment', + template: ` +
+ +

Payment Component Content via Child Route

+
+ ` +}) +export class PaymentComponent { } diff --git a/src/app/demo/components/uikit/menus/personal.component.ts b/src/app/demo/components/uikit/menus/personal.component.ts new file mode 100644 index 0000000..bcc879d --- /dev/null +++ b/src/app/demo/components/uikit/menus/personal.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-personal', + template: ` +
+ +

Personal Component Content via Child Route

+
+ ` +}) +export class PersonalComponent { } diff --git a/src/app/demo/components/uikit/menus/seat.component.ts b/src/app/demo/components/uikit/menus/seat.component.ts new file mode 100644 index 0000000..8f36743 --- /dev/null +++ b/src/app/demo/components/uikit/menus/seat.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-seat', + template: ` +
+ +

Seat Component Content via Child Route

+
+ ` +}) +export class SeatComponent { } diff --git a/src/app/demo/components/uikit/messages/messagesdemo-routing.module.ts b/src/app/demo/components/uikit/messages/messagesdemo-routing.module.ts new file mode 100644 index 0000000..21921fe --- /dev/null +++ b/src/app/demo/components/uikit/messages/messagesdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MessagesDemoComponent } from './messagesdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: MessagesDemoComponent } + ])], + exports: [RouterModule] +}) +export class MessagesDemoRoutingModule { } diff --git a/src/app/components/messages/messages.component.html b/src/app/demo/components/uikit/messages/messagesdemo.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/messages/messages.component.html rename to src/app/demo/components/uikit/messages/messagesdemo.component.html diff --git a/src/app/components/messages/messages.component.ts b/src/app/demo/components/uikit/messages/messagesdemo.component.ts old mode 100755 new mode 100644 similarity index 77% rename from src/app/components/messages/messages.component.ts rename to src/app/demo/components/uikit/messages/messagesdemo.component.ts index a50e0f9..791e6b8 --- a/src/app/components/messages/messages.component.ts +++ b/src/app/demo/components/uikit/messages/messagesdemo.component.ts @@ -2,31 +2,30 @@ import { Component } from '@angular/core'; import { Message, MessageService } from 'primeng/api'; @Component({ - templateUrl: './messages.component.html', + templateUrl: './messagesdemo.component.html', styles: [` :host ::ng-deep .p-message { margin-left: .25em; } :host ::ng-deep .p-toast{ - margin-top: 5.70em; z-index:99999; } `], providers: [MessageService] }) -export class MessagesComponent { +export class MessagesDemoComponent { msgs: Message[] = []; - constructor(private service: MessageService) {} + constructor(private service: MessageService) { } showInfoViaToast() { - this.service.add({key: 'tst', severity: 'info', summary: 'Info Message', detail: 'PrimeNG rocks'}); + this.service.add({ key: 'tst', severity: 'info', summary: 'Info Message', detail: 'PrimeNG rocks' }); } showWarnViaToast() { - this.service.add({key: 'tst', severity: 'warn', summary: 'Warn Message', detail: 'There are unsaved changes'}); + this.service.add({ key: 'tst', severity: 'warn', summary: 'Warn Message', detail: 'There are unsaved changes' }); } showErrorViaToast() { diff --git a/src/app/demo/components/uikit/messages/messagesdemo.module.ts b/src/app/demo/components/uikit/messages/messagesdemo.module.ts new file mode 100644 index 0000000..454824f --- /dev/null +++ b/src/app/demo/components/uikit/messages/messagesdemo.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MessagesDemoComponent } from './messagesdemo.component'; +import { MessagesDemoRoutingModule } from './messagesdemo-routing.module'; +import { MessagesModule } from 'primeng/messages'; +import { MessageModule } from 'primeng/message'; +import { ButtonModule } from 'primeng/button'; +import { ToastModule } from 'primeng/toast'; +import { InputTextModule } from 'primeng/inputtext'; + +@NgModule({ + imports: [ + CommonModule, + MessagesDemoRoutingModule, + MessagesModule, + MessageModule, + ButtonModule, + ToastModule, + InputTextModule + ], + declarations: [MessagesDemoComponent] +}) +export class MessagesDemoModule { } diff --git a/src/app/demo/components/uikit/misc/miscdemo-routing.module.ts b/src/app/demo/components/uikit/misc/miscdemo-routing.module.ts new file mode 100644 index 0000000..314ce4d --- /dev/null +++ b/src/app/demo/components/uikit/misc/miscdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { MiscDemoComponent } from './miscdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: MiscDemoComponent } + ])], + exports: [RouterModule] +}) +export class MiscDemoRoutingModule { } diff --git a/src/app/components/misc/misc.component.html b/src/app/demo/components/uikit/misc/miscdemo.component.html old mode 100755 new mode 100644 similarity index 93% rename from src/app/components/misc/misc.component.html rename to src/app/demo/components/uikit/misc/miscdemo.component.html index 917bb9e..e70d40c --- a/src/app/components/misc/misc.component.html +++ b/src/app/demo/components/uikit/misc/miscdemo.component.html @@ -17,11 +17,11 @@

Badge

Numbers
- - - - - + + + + +
Positioned Badge
@@ -36,9 +36,9 @@
Sizes
- - - + + +
diff --git a/src/app/demo/components/uikit/misc/miscdemo.component.ts b/src/app/demo/components/uikit/misc/miscdemo.component.ts new file mode 100644 index 0000000..a3b6350 --- /dev/null +++ b/src/app/demo/components/uikit/misc/miscdemo.component.ts @@ -0,0 +1,25 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; + +@Component({ + templateUrl: './miscdemo.component.html' +}) +export class MiscDemoComponent implements OnInit, OnDestroy { + + value = 0; + + interval: any; + + ngOnInit() { + this.interval = setInterval(() => { + this.value = this.value + Math.floor(Math.random() * 10) + 1; + if (this.value >= 100) { + this.value = 100; + clearInterval(this.interval); + } + }, 2000); + } + + ngOnDestroy() { + clearInterval(this.interval); + } +} diff --git a/src/app/demo/components/uikit/misc/miscdemo.module.ts b/src/app/demo/components/uikit/misc/miscdemo.module.ts new file mode 100644 index 0000000..3f6b6c6 --- /dev/null +++ b/src/app/demo/components/uikit/misc/miscdemo.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MiscDemoComponent } from './miscdemo.component'; +import { MiscDemoRoutingModule } from './miscdemo-routing.module'; +import { ProgressBarModule } from 'primeng/progressbar'; +import { BadgeModule } from 'primeng/badge'; +import { AvatarModule } from 'primeng/avatar'; +import { ScrollPanelModule } from 'primeng/scrollpanel'; +import { TagModule } from 'primeng/tag'; +import { ChipModule } from 'primeng/chip'; +import { SkeletonModule } from 'primeng/skeleton'; +import { ButtonModule } from 'primeng/button'; +import { AvatarGroupModule } from 'primeng/avatargroup'; +import { ScrollTopModule } from 'primeng/scrolltop'; + +@NgModule({ + imports: [ + CommonModule, + MiscDemoRoutingModule, + ProgressBarModule, + BadgeModule, + AvatarModule, + ScrollPanelModule, + TagModule, + ChipModule, + ButtonModule, + SkeletonModule, + AvatarGroupModule, + ScrollTopModule + ], + declarations: [MiscDemoComponent] +}) +export class MiscDemoModule { } diff --git a/src/app/demo/components/uikit/overlays/overlaysdemo-routing.module.ts b/src/app/demo/components/uikit/overlays/overlaysdemo-routing.module.ts new file mode 100644 index 0000000..2f67856 --- /dev/null +++ b/src/app/demo/components/uikit/overlays/overlaysdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { OverlaysDemoComponent } from './overlaysdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: OverlaysDemoComponent } + ])], + exports: [RouterModule] +}) +export class OverlaysDemoRoutingModule { } diff --git a/src/app/components/overlays/overlays.component.html b/src/app/demo/components/uikit/overlays/overlaysdemo.component.html old mode 100755 new mode 100644 similarity index 95% rename from src/app/components/overlays/overlays.component.html rename to src/app/demo/components/uikit/overlays/overlaysdemo.component.html index 0b73c7e..2b042d1 --- a/src/app/components/overlays/overlays.component.html +++ b/src/app/demo/components/uikit/overlays/overlaysdemo.component.html @@ -3,7 +3,7 @@
Dialog
- +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit @@ -45,7 +45,7 @@ {{product.name}} - + {{formatCurrency(product.price)}} diff --git a/src/app/components/overlays/overlays.component.ts b/src/app/demo/components/uikit/overlays/overlaysdemo.component.ts old mode 100755 new mode 100644 similarity index 64% rename from src/app/components/overlays/overlays.component.ts rename to src/app/demo/components/uikit/overlays/overlaysdemo.component.ts index 592bde4..d918b07 --- a/src/app/components/overlays/overlays.component.ts +++ b/src/app/demo/components/uikit/overlays/overlaysdemo.component.ts @@ -1,34 +1,33 @@ import { Component, OnInit } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { Product } from '../../api/product'; -import { AppMainComponent } from 'src/app/app.main.component'; -import { ProductService } from '../../service/productservice'; +import { Product } from 'src/app/demo/api/product'; +import { ProductService } from 'src/app/demo/service/product.service'; @Component({ - templateUrl: './overlays.component.html', + templateUrl: './overlaysdemo.component.html', providers: [ConfirmationService, MessageService] }) -export class OverlaysComponent implements OnInit { +export class OverlaysDemoComponent implements OnInit { - images: any[]; + images: any[] = []; - display: boolean; + display: boolean = false; - products: Product[]; + products: Product[] = []; - selectedProduct: Product; + selectedProduct: Product = {}; - visibleSidebar1; + visibleSidebar1: boolean = false; - visibleSidebar2; + visibleSidebar2: boolean = false; - visibleSidebar3; + visibleSidebar3: boolean = false; - visibleSidebar4; + visibleSidebar4: boolean = false; - visibleSidebar5; + visibleSidebar5: boolean = false; - constructor(private productService: ProductService, private confirmationService: ConfirmationService, private messageService: MessageService, public appMain: AppMainComponent) {} + constructor(private productService: ProductService, private confirmationService: ConfirmationService, private messageService: MessageService) { } ngOnInit() { this.productService.getProductsSmall().then(products => this.products = products); @@ -62,19 +61,19 @@ export class OverlaysComponent implements OnInit { confirm2(event: Event) { this.confirmationService.confirm({ key: 'confirm2', - target: event.target, + target: event.target || new EventTarget, message: 'Are you sure that you want to proceed?', icon: 'pi pi-exclamation-triangle', accept: () => { - this.messageService.add({severity: 'info', summary: 'Confirmed', detail: 'You have accepted'}); + this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'You have accepted' }); }, reject: () => { - this.messageService.add({severity: 'error', summary: 'Rejected', detail: 'You have rejected'}); + this.messageService.add({ severity: 'error', summary: 'Rejected', detail: 'You have rejected' }); } }); } - formatCurrency(value) { - return value.toLocaleString('en-US', {style: 'currency', currency: 'USD'}); + formatCurrency(value: number) { + return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); } } diff --git a/src/app/demo/components/uikit/overlays/overlaysdemo.module.ts b/src/app/demo/components/uikit/overlays/overlaysdemo.module.ts new file mode 100644 index 0000000..f8ab8b5 --- /dev/null +++ b/src/app/demo/components/uikit/overlays/overlaysdemo.module.ts @@ -0,0 +1,37 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { OverlaysDemoComponent } from './overlaysdemo.component'; +import { OverlaysDemoRoutingModule } from './overlaysdemo-routing.module'; +import { ToastModule } from 'primeng/toast'; +import { DialogModule } from 'primeng/dialog'; +import { ButtonModule } from 'primeng/button'; +import { OverlayPanelModule } from 'primeng/overlaypanel'; +import { TableModule } from 'primeng/table'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { SidebarModule } from 'primeng/sidebar'; +import { RippleModule } from 'primeng/ripple'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { TooltipModule } from 'primeng/tooltip'; +import { InputTextModule } from 'primeng/inputtext'; + +@NgModule({ + imports: [ + CommonModule, + OverlaysDemoRoutingModule, + ToastModule, + DialogModule, + FormsModule, + TooltipModule, + InputTextModule, + ButtonModule, + OverlayPanelModule, + TableModule, + ConfirmDialogModule, + SidebarModule, + RippleModule, + ConfirmPopupModule + ], + declarations: [OverlaysDemoComponent] +}) +export class OverlaysDemoModule { } diff --git a/src/app/demo/components/uikit/panels/panelsdemo-routing.module.ts b/src/app/demo/components/uikit/panels/panelsdemo-routing.module.ts new file mode 100644 index 0000000..6640ad8 --- /dev/null +++ b/src/app/demo/components/uikit/panels/panelsdemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PanelsDemoComponent } from './panelsdemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: PanelsDemoComponent } + ])], + exports: [RouterModule] +}) +export class PanelsDemoRoutingModule { } diff --git a/src/app/components/panels/panels.component.html b/src/app/demo/components/uikit/panels/panelsdemo.component.html old mode 100755 new mode 100644 similarity index 98% rename from src/app/components/panels/panels.component.html rename to src/app/demo/components/uikit/panels/panelsdemo.component.html index 4de0a87..89403fb --- a/src/app/components/panels/panels.component.html +++ b/src/app/demo/components/uikit/panels/panelsdemo.component.html @@ -107,7 +107,7 @@

Fieldset
- + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo @@ -192,7 +192,7 @@
Splitter
- +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut diff --git a/src/app/components/panels/panels.component.ts b/src/app/demo/components/uikit/panels/panelsdemo.component.ts old mode 100755 new mode 100644 similarity index 58% rename from src/app/components/panels/panels.component.ts rename to src/app/demo/components/uikit/panels/panelsdemo.component.ts index cb6e02e..02bdab7 --- a/src/app/components/panels/panels.component.ts +++ b/src/app/demo/components/uikit/panels/panelsdemo.component.ts @@ -2,18 +2,18 @@ import { Component, OnInit } from '@angular/core'; import { MenuItem } from 'primeng/api'; @Component({ - templateUrl: './panels.component.html', + templateUrl: './panelsdemo.component.html' }) -export class PanelsComponent implements OnInit { +export class PanelsDemoComponent implements OnInit { - items: MenuItem[]; + items: MenuItem[] = []; - cardMenu: MenuItem[]; + cardMenu: MenuItem[] = []; ngOnInit() { this.items = [ - {label: 'Angular.io', icon: 'pi pi-external-link', url: 'http://angular.io'}, - {label: 'Theming', icon: 'pi pi-bookmark', routerLink: ['/theming']} + { label: 'Angular.io', icon: 'pi pi-external-link', url: 'http://angular.io' }, + { label: 'Theming', icon: 'pi pi-bookmark', routerLink: ['/theming'] } ]; this.cardMenu = [ diff --git a/src/app/demo/components/uikit/panels/panelsdemo.module.ts b/src/app/demo/components/uikit/panels/panelsdemo.module.ts new file mode 100644 index 0000000..f98db0a --- /dev/null +++ b/src/app/demo/components/uikit/panels/panelsdemo.module.ts @@ -0,0 +1,39 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { PanelsDemoComponent } from './panelsdemo.component'; +import { PanelsDemoRoutingModule } from './panelsdemo-routing.module'; +import { ToolbarModule } from 'primeng/toolbar'; +import { ButtonModule } from 'primeng/button'; +import { RippleModule } from 'primeng/ripple'; +import { SplitButtonModule } from 'primeng/splitbutton'; +import { AccordionModule } from 'primeng/accordion'; +import { TabViewModule } from 'primeng/tabview'; +import { FieldsetModule } from 'primeng/fieldset'; +import { MenuModule } from 'primeng/menu'; +import { InputTextModule } from 'primeng/inputtext'; +import { DividerModule } from 'primeng/divider'; +import { SplitterModule } from 'primeng/splitter'; +import { PanelModule } from 'primeng/panel'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + PanelsDemoRoutingModule, + ToolbarModule, + ButtonModule, + RippleModule, + SplitButtonModule, + AccordionModule, + TabViewModule, + FieldsetModule, + MenuModule, + InputTextModule, + DividerModule, + SplitterModule, + PanelModule + ], + declarations: [PanelsDemoComponent] +}) +export class PanelsDemoModule { } diff --git a/src/app/demo/components/uikit/table/tabledemo-routing.module.ts b/src/app/demo/components/uikit/table/tabledemo-routing.module.ts new file mode 100644 index 0000000..55a8be6 --- /dev/null +++ b/src/app/demo/components/uikit/table/tabledemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { TableDemoComponent } from './tabledemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: TableDemoComponent } + ])], + exports: [RouterModule] +}) +export class TableDemoRoutingModule { } diff --git a/src/app/components/table/table.component.html b/src/app/demo/components/uikit/table/tabledemo.component.html similarity index 96% rename from src/app/components/table/table.component.html rename to src/app/demo/components/uikit/table/tabledemo.component.html index f79f33c..a31d8f5 100644 --- a/src/app/components/table/table.component.html +++ b/src/app/demo/components/uikit/table/tabledemo.component.html @@ -8,7 +8,7 @@ - +

@@ -102,7 +102,7 @@ {{customer.name}} - + {{customer.country.name}} @@ -165,7 +165,7 @@ {{customer.name}} {{customer.id}} - + {{customer.country.name}} {{customer.date}} @@ -283,7 +283,7 @@ {{customer.name}} - + {{customer.country.name}} diff --git a/src/app/demo/components/uikit/table/tabledemo.component.ts b/src/app/demo/components/uikit/table/tabledemo.component.ts new file mode 100644 index 0000000..26aa5e6 --- /dev/null +++ b/src/app/demo/components/uikit/table/tabledemo.component.ts @@ -0,0 +1,150 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { Table } from 'primeng/table'; +import { MessageService, ConfirmationService } from 'primeng/api'; +import { Customer, Representative } from 'src/app/demo/api/customer'; +import { Product } from 'src/app/demo/api/product'; +import { CustomerService } from 'src/app/demo/service/customer.service'; +import { ProductService } from 'src/app/demo/service/product.service'; + +interface expandedRows { + [key: string]: boolean; +} + +@Component({ + templateUrl: './tabledemo.component.html', + providers: [MessageService, ConfirmationService], + styles: [` + :host ::ng-deep .p-frozen-column { + font-weight: bold; + } + + :host ::ng-deep .p-datatable-frozen-tbody { + font-weight: bold; + } + + :host ::ng-deep .p-progressbar { + height:.5rem; + } + `] +}) +export class TableDemoComponent implements OnInit { + + customers1: Customer[] = []; + + customers2: Customer[] = []; + + customers3: Customer[] = []; + + selectedCustomers1: Customer[] = []; + + selectedCustomer: Customer = {}; + + representatives: Representative[] = []; + + statuses: any[] = []; + + products: Product[] = []; + + rowGroupMetadata: any; + + expandedRows: expandedRows = {}; + + activityValues: number[] = [0, 100]; + + isExpanded: boolean = false; + + idFrozen: boolean = false; + + loading: boolean = true; + + @ViewChild('filter') filter!: ElementRef; + + constructor(private customerService: CustomerService, private productService: ProductService) { } + + ngOnInit() { + this.customerService.getCustomersLarge().then(customers => { + this.customers1 = customers; + this.loading = false; + + // @ts-ignore + this.customers1.forEach(customer => customer.date = new Date(customer.date)); + }); + this.customerService.getCustomersMedium().then(customers => this.customers2 = customers); + this.customerService.getCustomersLarge().then(customers => this.customers3 = customers); + this.productService.getProductsWithOrdersSmall().then(data => this.products = data); + + this.representatives = [ + { name: 'Amy Elsner', image: 'amyelsner.png' }, + { name: 'Anna Fali', image: 'annafali.png' }, + { name: 'Asiya Javayant', image: 'asiyajavayant.png' }, + { name: 'Bernardo Dominic', image: 'bernardodominic.png' }, + { name: 'Elwin Sharvill', image: 'elwinsharvill.png' }, + { name: 'Ioni Bowcher', image: 'ionibowcher.png' }, + { name: 'Ivan Magalhaes', image: 'ivanmagalhaes.png' }, + { name: 'Onyama Limba', image: 'onyamalimba.png' }, + { name: 'Stephen Shaw', image: 'stephenshaw.png' }, + { name: 'XuXue Feng', image: 'xuxuefeng.png' } + ]; + + this.statuses = [ + { label: 'Unqualified', value: 'unqualified' }, + { label: 'Qualified', value: 'qualified' }, + { label: 'New', value: 'new' }, + { label: 'Negotiation', value: 'negotiation' }, + { label: 'Renewal', value: 'renewal' }, + { label: 'Proposal', value: 'proposal' } + ]; + } + + onSort() { + this.updateRowGroupMetaData(); + } + + updateRowGroupMetaData() { + this.rowGroupMetadata = {}; + + if (this.customers3) { + for (let i = 0; i < this.customers3.length; i++) { + const rowData = this.customers3[i]; + const representativeName = rowData?.representative?.name || ''; + + if (i === 0) { + this.rowGroupMetadata[representativeName] = { index: 0, size: 1 }; + } + else { + const previousRowData = this.customers3[i - 1]; + const previousRowGroup = previousRowData?.representative?.name; + if (representativeName === previousRowGroup) { + this.rowGroupMetadata[representativeName].size++; + } + else { + this.rowGroupMetadata[representativeName] = { index: i, size: 1 }; + } + } + } + } + } + + expandAll() { + if (!this.isExpanded) { + this.products.forEach(product => product && product.name ? this.expandedRows[product.name] = true : ''); + + } else { + this.expandedRows = {}; + } + this.isExpanded = !this.isExpanded; + } + + formatCurrency(value: number) { + return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); + } + + onGlobalFilter(table: Table, event: Event) { + table.filterGlobal((event.target as HTMLInputElement).value, 'contains'); + } + + clear(table: Table) { + table.clear(); + this.filter.nativeElement.value = ''; + } +} diff --git a/src/app/demo/components/uikit/table/tabledemo.module.ts b/src/app/demo/components/uikit/table/tabledemo.module.ts new file mode 100644 index 0000000..2477736 --- /dev/null +++ b/src/app/demo/components/uikit/table/tabledemo.module.ts @@ -0,0 +1,37 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { TableDemoComponent } from './tabledemo.component'; +import { TableDemoRoutingModule } from './tabledemo-routing.module'; +import { TableModule } from 'primeng/table'; +import { ButtonModule } from 'primeng/button'; +import { InputTextModule } from 'primeng/inputtext'; +import { ToggleButtonModule } from 'primeng/togglebutton'; +import { RippleModule } from 'primeng/ripple'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { DropdownModule } from 'primeng/dropdown'; +import { ProgressBarModule } from 'primeng/progressbar'; +import { ToastModule } from 'primeng/toast'; +import { SliderModule } from 'primeng/slider'; +import { RatingModule } from 'primeng/rating'; + +@NgModule({ + imports: [ + CommonModule, + TableDemoRoutingModule, + FormsModule, + TableModule, + RatingModule, + ButtonModule, + SliderModule, + InputTextModule, + ToggleButtonModule, + RippleModule, + MultiSelectModule, + DropdownModule, + ProgressBarModule, + ToastModule + ], + declarations: [TableDemoComponent] +}) +export class TableDemoModule { } diff --git a/src/app/demo/components/uikit/tree/treedemo-routing.module.ts b/src/app/demo/components/uikit/tree/treedemo-routing.module.ts new file mode 100644 index 0000000..e5ba0f7 --- /dev/null +++ b/src/app/demo/components/uikit/tree/treedemo-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { TreeDemoComponent } from './treedemo.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: '', component: TreeDemoComponent } + ])], + exports: [RouterModule] +}) +export class TreeDemoRoutingModule { } diff --git a/src/app/components/tree/tree.component.html b/src/app/demo/components/uikit/tree/treedemo.component.html similarity index 79% rename from src/app/components/tree/tree.component.html rename to src/app/demo/components/uikit/tree/treedemo.component.html index 0644380..e0ced46 100644 --- a/src/app/components/tree/tree.component.html +++ b/src/app/demo/components/uikit/tree/treedemo.component.html @@ -1,17 +1,14 @@
-

Tree

+
Tree
-

TreeTable

+
TreeTable
- - FileSystem - @@ -31,4 +28,10 @@
+
+
+
Horizontal Tree
+ +
+
diff --git a/src/app/components/tree/tree.component.ts b/src/app/demo/components/uikit/tree/treedemo.component.ts similarity index 59% rename from src/app/components/tree/tree.component.ts rename to src/app/demo/components/uikit/tree/treedemo.component.ts index f0161ae..ae317b6 100644 --- a/src/app/components/tree/tree.component.ts +++ b/src/app/demo/components/uikit/tree/treedemo.component.ts @@ -1,28 +1,27 @@ import { Component, OnInit } from '@angular/core'; -import { NodeService } from '../../service/nodeservice'; import { TreeNode } from 'primeng/api'; +import { NodeService } from 'src/app/demo/service/node.service'; @Component({ - templateUrl: './tree.component.html' + templateUrl: './treedemo.component.html' }) -export class TreeComponent implements OnInit { +export class TreeDemoComponent implements OnInit { + files1: TreeNode[] = []; - files1: TreeNode[]; + files2: TreeNode[] = []; - files2: TreeNode[]; + files3: TreeNode[] = []; - files3: TreeNode[]; + selectedFiles1: TreeNode[] = []; - selectedFiles1: TreeNode; + selectedFiles2: TreeNode[] = []; - selectedFiles2: TreeNode[]; + selectedFiles3: TreeNode = {}; - selectedFiles3: TreeNode; + cols: any[] = []; - cols: any[]; - - constructor(private nodeService: NodeService) {} + constructor(private nodeService: NodeService) { } ngOnInit() { this.nodeService.getFiles().then(files => this.files1 = files); diff --git a/src/app/demo/components/uikit/tree/treedemo.module.ts b/src/app/demo/components/uikit/tree/treedemo.module.ts new file mode 100644 index 0000000..6a08320 --- /dev/null +++ b/src/app/demo/components/uikit/tree/treedemo.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { TreeDemoComponent } from './treedemo.component'; +import { TreeDemoRoutingModule } from './treedemo-routing.module'; +import { TreeModule } from 'primeng/tree'; +import { TreeTableModule } from 'primeng/treetable'; + +@NgModule({ + imports: [ + CommonModule, + TreeDemoRoutingModule, + FormsModule, + TreeModule, + TreeTableModule + ], + declarations: [TreeDemoComponent], +}) +export class TreeDemoModule { } diff --git a/src/app/demo/components/uikit/uikit-routing.module.ts b/src/app/demo/components/uikit/uikit-routing.module.ts new file mode 100644 index 0000000..4ee11e2 --- /dev/null +++ b/src/app/demo/components/uikit/uikit-routing.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'formlayout', loadChildren: () => import('./formlayout/formlayout.module').then(m => m.FormlayoutModule) }, + { path: 'button', loadChildren: () => import('./button/buttondemo.module').then(m => m.ButtonDemoModule) }, + { path: 'charts', loadChildren: () => import('./charts/charts.module').then(m => m.ChartsModule) }, + { path: 'file', loadChildren: () => import('./file/filedemo.module').then(m => m.FileDemoModule) }, + { path: 'floatlabel', loadChildren: () => import('./floatlabel/floatlabeldemo.module').then(m => m.FloatlabelDemoModule) }, + { path: 'input', loadChildren: () => import('./input/inputdemo.module').then(m => m.InputDemoModule) }, + { path: 'invalidstate', loadChildren: () => import('./invalid/invalidstatedemo.module').then(m => m.InvalidStateDemoModule) }, + { path: 'list', loadChildren: () => import('./list/listdemo.module').then(m => m.ListDemoModule) }, + { path: 'media', loadChildren: () => import('./media/mediademo.module').then(m => m.MediaDemoModule) }, + { path: 'message', loadChildren: () => import('./messages/messagesdemo.module').then(m => m.MessagesDemoModule) }, + { path: 'misc', loadChildren: () => import('./misc/miscdemo.module').then(m => m.MiscDemoModule) }, + { path: 'overlay', loadChildren: () => import('./overlays/overlaysdemo.module').then(m => m.OverlaysDemoModule) }, + { path: 'panel', loadChildren: () => import('./panels/panelsdemo.module').then(m => m.PanelsDemoModule) }, + { path: 'table', loadChildren: () => import('./table/tabledemo.module').then(m => m.TableDemoModule) }, + { path: 'tree', loadChildren: () => import('./tree/treedemo.module').then(m => m.TreeDemoModule) }, + { path: 'menu', loadChildren: () => import('./menus/menus.module').then(m => m.MenusModule) } + ])], + exports: [RouterModule] +}) +export class UikitRoutingModule { } diff --git a/src/app/demo/components/uikit/uikit.module.ts b/src/app/demo/components/uikit/uikit.module.ts new file mode 100644 index 0000000..207f6a4 --- /dev/null +++ b/src/app/demo/components/uikit/uikit.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { UikitRoutingModule } from './uikit-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + UikitRoutingModule + ], + declarations: [] +}) +export class UikitModule { } diff --git a/src/app/demo/components/utilities/icons/icons.component.html b/src/app/demo/components/utilities/icons/icons.component.html new file mode 100644 index 0000000..e44c7e0 --- /dev/null +++ b/src/app/demo/components/utilities/icons/icons.component.html @@ -0,0 +1,56 @@ +
+

Icons

+
Download
+ +npm install primeicons --save + + +
Getting Started
+

PrimeIcons use the pi pi-{icon} syntax such as pi pi-check. + A standalone icon can be displayed using an element such as i or span

+ + +<i class="pi pi-check"></i> +<i class="pi pi-times"></i> + + + + + +
Size
+

Size of the icons can easily be changed using font-size property.

+ + +<i class="pi pi-check"></i> + + + + + +<i class="pi pi-check" style="font-size: 2rem"></i> + + + + +
Spinning Animation
+

Special pi-spin class applies infinite rotate to an icon.

+ + +<i class="pi pi-spin pi-spinner" style="font-size: 2rem"></i> + + + + +
List of Icons
+

Here is the current list of PrimeIcons, more icons will be added periodically. You may also request new icons at the issue tracker.

+
+ +
+ +
+
+ +
pi-{{icon.properties.name}}
+
+
+
\ No newline at end of file diff --git a/src/app/demo/components/utilities/icons/icons.component.ts b/src/app/demo/components/utilities/icons/icons.component.ts new file mode 100644 index 0000000..2db504a --- /dev/null +++ b/src/app/demo/components/utilities/icons/icons.component.ts @@ -0,0 +1,50 @@ +import { Component, OnInit } from '@angular/core'; +import { IconService } from 'src/app/demo/service/icon.service'; + +@Component({ + templateUrl: './icons.component.html', +}) +export class IconsComponent implements OnInit { + + icons: any[] = []; + + filteredIcons: any[] = []; + + selectedIcon: any; + + constructor(private iconService: IconService) { } + + ngOnInit() { + this.iconService.getIcons().subscribe(data => { + data = data.filter(value => { + return value.icon.tags.indexOf('deprecate') === -1; + }); + + let icons = data; + icons.sort((icon1, icon2) => { + if (icon1.properties.name < icon2.properties.name) + return -1; + else if (icon1.properties.name < icon2.properties.name) + return 1; + else + return 0; + }); + + this.icons = icons; + this.filteredIcons = data; + }); + } + + onFilter(event: Event): void { + const searchText = (event.target as HTMLInputElement).value; + + if (!searchText) { + this.filteredIcons = this.icons; + } + else { + this.filteredIcons = this.icons.filter(it => { + return it.icon.tags[0].includes(searchText); + }); + } + } +} diff --git a/src/app/demo/components/utilities/utilities-routing.module.ts b/src/app/demo/components/utilities/utilities-routing.module.ts new file mode 100644 index 0000000..04a5632 --- /dev/null +++ b/src/app/demo/components/utilities/utilities-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconsComponent } from './icons/icons.component'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'icons', data: { breadcrumb: 'Prime Icons' }, component: IconsComponent } + ])], + exports: [RouterModule] +}) +export class UtilitiesRoutingModule { } diff --git a/src/app/demo/components/utilities/utilities.module.ts b/src/app/demo/components/utilities/utilities.module.ts new file mode 100644 index 0000000..816b0d0 --- /dev/null +++ b/src/app/demo/components/utilities/utilities.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { IconsComponent } from './icons/icons.component'; +import { UtilitiesRoutingModule } from './utilities-routing.module'; +import { AppCodeModule } from '../code/code.component'; +import { InputTextModule } from 'primeng/inputtext'; + +@NgModule({ + imports: [ + CommonModule, + UtilitiesRoutingModule, + AppCodeModule, + InputTextModule, + ], + declarations: [IconsComponent] +}) +export class UtilitiesModule { } diff --git a/src/app/service/countryservice.ts b/src/app/demo/service/country.service.ts old mode 100755 new mode 100644 similarity index 55% rename from src/app/service/countryservice.ts rename to src/app/demo/service/country.service.ts index 4aa81d9..dc0af14 --- a/src/app/service/countryservice.ts +++ b/src/app/demo/service/country.service.ts @@ -7,9 +7,9 @@ export class CountryService { constructor(private http: HttpClient) { } getCountries() { - return this.http.get('assets/demo/data/countries.json') - .toPromise() - .then(res => res.data as any[]) - .then(data => data); + return this.http.get('assets/demo/data/countries.json') + .toPromise() + .then(res => res.data as any[]) + .then(data => data); } } diff --git a/src/app/service/customerservice.ts b/src/app/demo/service/customer.service.ts similarity index 99% rename from src/app/service/customerservice.ts rename to src/app/demo/service/customer.service.ts index 5b9370f..d8d81df 100644 --- a/src/app/service/customerservice.ts +++ b/src/app/demo/service/customer.service.ts @@ -27,5 +27,4 @@ export class CustomerService { .then(res => res.data as Customer[]) .then(data => data); } - } diff --git a/src/app/service/eventservice.ts b/src/app/demo/service/event.service.ts old mode 100755 new mode 100644 similarity index 54% rename from src/app/service/eventservice.ts rename to src/app/demo/service/event.service.ts index e70aa77..72f5123 --- a/src/app/service/eventservice.ts +++ b/src/app/demo/service/event.service.ts @@ -7,9 +7,9 @@ export class EventService { constructor(private http: HttpClient) { } getEvents() { - return this.http.get('assets/demo/data/scheduleevents.json') - .toPromise() - .then(res => res.data as any[]) - .then(data => data); + return this.http.get('assets/demo/data/scheduleevents.json') + .toPromise() + .then(res => res.data as any[]) + .then(data => data); } } diff --git a/src/app/service/iconservice.ts b/src/app/demo/service/icon.service.ts old mode 100755 new mode 100644 similarity index 76% rename from src/app/service/iconservice.ts rename to src/app/demo/service/icon.service.ts index ec53360..75a8502 --- a/src/app/service/iconservice.ts +++ b/src/app/demo/service/icon.service.ts @@ -1,13 +1,13 @@ import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import {map} from 'rxjs/operators'; +import { HttpClient } from '@angular/common/http'; +import { map } from 'rxjs/operators'; @Injectable() export class IconService { constructor(private http: HttpClient) { } - icons: any[]; + icons!: any[]; selectedIcon: any; diff --git a/src/app/demo/service/node.service.ts b/src/app/demo/service/node.service.ts new file mode 100644 index 0000000..260fb55 --- /dev/null +++ b/src/app/demo/service/node.service.ts @@ -0,0 +1,33 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { TreeNode } from 'primeng/api'; + +@Injectable() +export class NodeService { + + constructor(private http: HttpClient) { } + + getFiles() { + return this.http.get('assets/demo/data/files.json') + .toPromise() + .then(res => res.data as TreeNode[]); + } + + getLazyFiles() { + return this.http.get('assets/demo/data/files-lazy.json') + .toPromise() + .then(res => res.data as TreeNode[]); + } + + getFilesystem() { + return this.http.get('assets/demo/data/filesystem.json') + .toPromise() + .then(res => res.data as TreeNode[]); + } + + getLazyFilesystem() { + return this.http.get('assets/demo/data/filesystem-lazy.json') + .toPromise() + .then(res => res.data as TreeNode[]); + } +} diff --git a/src/app/service/photoservice.ts b/src/app/demo/service/photo.service.ts similarity index 59% rename from src/app/service/photoservice.ts rename to src/app/demo/service/photo.service.ts index 4d73d13..05c5656 100644 --- a/src/app/service/photoservice.ts +++ b/src/app/demo/service/photo.service.ts @@ -1,6 +1,5 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; - import { Image } from '../api/image'; @Injectable() @@ -9,9 +8,9 @@ export class PhotoService { constructor(private http: HttpClient) { } getImages() { - return this.http.get('assets/demo/data/photos.json') - .toPromise() - .then(res => res.data as Image[]) - .then(data => data); + return this.http.get('assets/demo/data/photos.json') + .toPromise() + .then(res => res.data as Image[]) + .then(data => data); } } diff --git a/src/app/service/productservice.ts b/src/app/demo/service/product.service.ts old mode 100755 new mode 100644 similarity index 60% rename from src/app/service/productservice.ts rename to src/app/demo/service/product.service.ts index 7b0dbb3..b08cf75 --- a/src/app/service/productservice.ts +++ b/src/app/demo/service/product.service.ts @@ -1,6 +1,5 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; - import { Product } from '../api/product'; @Injectable() @@ -10,29 +9,29 @@ export class ProductService { getProductsSmall() { return this.http.get('assets/demo/data/products-small.json') - .toPromise() - .then(res => res.data as Product[]) - .then(data => data); + .toPromise() + .then(res => res.data as Product[]) + .then(data => data); } getProducts() { return this.http.get('assets/demo/data/products.json') - .toPromise() - .then(res => res.data as Product[]) - .then(data => data); + .toPromise() + .then(res => res.data as Product[]) + .then(data => data); } getProductsMixed() { return this.http.get('assets/demo/data/products-mixed.json') - .toPromise() - .then(res => res.data as Product[]) - .then(data => data); + .toPromise() + .then(res => res.data as Product[]) + .then(data => data); } getProductsWithOrdersSmall() { return this.http.get('assets/demo/data/products-orders-small.json') - .toPromise() - .then(res => res.data as Product[]) - .then(data => data); + .toPromise() + .then(res => res.data as Product[]) + .then(data => data); } } diff --git a/src/app/layout/api/menuchangeevent.ts b/src/app/layout/api/menuchangeevent.ts new file mode 100644 index 0000000..2730d09 --- /dev/null +++ b/src/app/layout/api/menuchangeevent.ts @@ -0,0 +1,4 @@ +export interface MenuChangeEvent { + key: string; + routeEvent?: boolean; +} \ No newline at end of file diff --git a/src/app/layout/app.footer.component.html b/src/app/layout/app.footer.component.html new file mode 100644 index 0000000..da4a248 --- /dev/null +++ b/src/app/layout/app.footer.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/layout/app.footer.component.ts b/src/app/layout/app.footer.component.ts new file mode 100644 index 0000000..0c96a45 --- /dev/null +++ b/src/app/layout/app.footer.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; +import { LayoutService } from "./service/app.layout.service"; + +@Component({ + selector: 'app-footer', + templateUrl: './app.footer.component.html' +}) +export class AppFooterComponent { + constructor(public layoutService: LayoutService) { } +} diff --git a/src/app/layout/app.layout.component.html b/src/app/layout/app.layout.component.html new file mode 100644 index 0000000..b8a4fd4 --- /dev/null +++ b/src/app/layout/app.layout.component.html @@ -0,0 +1,14 @@ +
+ +
+ +
+
+
+ +
+ +
+ +
+
diff --git a/src/app/layout/app.layout.component.ts b/src/app/layout/app.layout.component.ts new file mode 100644 index 0000000..d8fbcfa --- /dev/null +++ b/src/app/layout/app.layout.component.ts @@ -0,0 +1,97 @@ +import { Component, OnDestroy, Renderer2, ViewChild } from '@angular/core'; +import { NavigationEnd, Router } from '@angular/router'; +import { filter, Subscription } from 'rxjs'; +import { MenuService } from './app.menu.service'; +import { LayoutService } from "./service/app.layout.service"; +import { AppSidebarComponent } from "./app.sidebar.component"; +import { AppTopBarComponent } from './app.topbar.component'; + +@Component({ + selector: 'app-layout', + templateUrl: './app.layout.component.html' +}) +export class AppLayoutComponent implements OnDestroy { + + overlayMenuOpenSubscription: Subscription; + + menuOutsideClickListener: any; + + @ViewChild(AppSidebarComponent) appSidebar!: AppSidebarComponent; + + constructor(private menuService: MenuService, public layoutService: LayoutService, public renderer: Renderer2, public router: Router) { + this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => { + if (!this.menuOutsideClickListener) { + this.menuOutsideClickListener = this.renderer.listen('document', 'click', event => { + const isOutsideClicked = !(this.appSidebar.el.nativeElement.isSameNode(event.target) || this.appSidebar.el.nativeElement.contains(event.target) + || event.target.classList.contains('p-trigger') || event.target.parentNode.classList.contains('p-trigger')); + + if (isOutsideClicked) { + this.layoutService.state.profileSidebarVisible = false; + this.layoutService.state.overlayMenuActive = false; + this.layoutService.state.staticMenuMobileActive = false; + this.layoutService.state.menuHoverActive = false; + this.menuService.reset(); + this.menuOutsideClickListener(); + this.menuOutsideClickListener = null; + this.unblockBodyScroll(); + } + else { + if (this.layoutService.state.staticMenuMobileActive) { + this.blockBodyScroll(); + } + } + }); + } + }); + + this.router.events.pipe(filter(event => event instanceof NavigationEnd)) + .subscribe(() => { + this.unblockBodyScroll(); + }); + } + + blockBodyScroll(): void { + if (document.body.classList) { + document.body.classList.add('blocked-scroll'); + } + else { + document.body.className += ' blocked-scroll'; + } + } + + unblockBodyScroll(): void { + if (document.body.classList) { + document.body.classList.remove('blocked-scroll'); + } + else { + document.body.className = document.body.className.replace(new RegExp('(^|\\b)' + + 'blocked-scroll'.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); + } + } + + get containerClass() { + return { + 'layout-theme-light': this.layoutService.config.colorScheme === 'light', + 'layout-theme-dark': this.layoutService.config.colorScheme === 'dark', + 'layout-overlay': this.layoutService.config.menuMode === 'overlay', + 'layout-static': this.layoutService.config.menuMode === 'static', + 'layout-slim': this.layoutService.config.menuMode === 'slim', + 'layout-horizontal': this.layoutService.config.menuMode === 'horizontal', + 'layout-static-inactive': this.layoutService.state.staticMenuDesktopInactive && this.layoutService.config.menuMode === 'static', + 'layout-overlay-active': this.layoutService.state.overlayMenuActive, + 'layout-mobile-active': this.layoutService.state.staticMenuMobileActive, + 'p-input-filled': this.layoutService.config.inputStyle === 'filled', + 'p-ripple-disabled': !this.layoutService.config.ripple + } + } + + ngOnDestroy() { + if (this.overlayMenuOpenSubscription) { + this.overlayMenuOpenSubscription.unsubscribe(); + } + + if (this.menuOutsideClickListener) { + this.menuOutsideClickListener(); + } + } +} diff --git a/src/app/layout/app.layout.module.ts b/src/app/layout/app.layout.module.ts new file mode 100644 index 0000000..52bc4e5 --- /dev/null +++ b/src/app/layout/app.layout.module.ts @@ -0,0 +1,46 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { InputTextModule } from 'primeng/inputtext'; +import { SidebarModule } from 'primeng/sidebar'; +import { BadgeModule } from 'primeng/badge'; +import { RadioButtonModule } from 'primeng/radiobutton'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { RippleModule } from 'primeng/ripple'; +import { AppMenuComponent } from './app.menu.component'; +import { AppMenuitemComponent } from './app.menuitem.component'; +import { RouterModule } from '@angular/router'; +import { AppTopBarComponent } from './app.topbar.component'; +import { AppFooterComponent } from './app.footer.component'; +import { AppConfigModule } from './config/config.module'; +import { AppSidebarComponent } from "./app.sidebar.component"; +import { AppLayoutComponent } from "./app.layout.component"; + +@NgModule({ + declarations: [ + AppMenuitemComponent, + AppTopBarComponent, + AppFooterComponent, + AppMenuComponent, + AppSidebarComponent, + AppLayoutComponent, + ], + imports: [ + BrowserModule, + FormsModule, + HttpClientModule, + BrowserAnimationsModule, + InputTextModule, + SidebarModule, + BadgeModule, + RadioButtonModule, + InputSwitchModule, + RippleModule, + RouterModule, + AppConfigModule + ], + exports: [AppLayoutComponent] +}) +export class AppLayoutModule { } diff --git a/src/app/layout/app.menu.component.html b/src/app/layout/app.menu.component.html new file mode 100644 index 0000000..c9b3bf6 --- /dev/null +++ b/src/app/layout/app.menu.component.html @@ -0,0 +1,11 @@ + diff --git a/src/app/layout/app.menu.component.ts b/src/app/layout/app.menu.component.ts new file mode 100644 index 0000000..1193280 --- /dev/null +++ b/src/app/layout/app.menu.component.ts @@ -0,0 +1,166 @@ +import { OnInit } from '@angular/core'; +import { Component } from '@angular/core'; +import { LayoutService } from './service/app.layout.service'; + +@Component({ + selector: 'app-menu', + templateUrl: './app.menu.component.html' +}) +export class AppMenuComponent implements OnInit { + + model: any[] = []; + + constructor(public layoutService: LayoutService) { } + + ngOnInit() { + this.model = [ + { + label: 'Home', + items: [ + { label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/'] } + ] + }, + { + label: 'UI Components', + items: [ + { label: 'Form Layout', icon: 'pi pi-fw pi-id-card', routerLink: ['/uikit/formlayout'] }, + { label: 'Input', icon: 'pi pi-fw pi-check-square', routerLink: ['/uikit/input'] }, + { label: 'Float Label', icon: 'pi pi-fw pi-bookmark', routerLink: ['/uikit/floatlabel'] }, + { label: 'Invalid State', icon: 'pi pi-fw pi-exclamation-circle', routerLink: ['/uikit/invalidstate'] }, + { label: 'Button', icon: 'pi pi-fw pi-mobile', routerLink: ['/uikit/button'], class: 'rotated-icon' }, + { label: 'Table', icon: 'pi pi-fw pi-table', routerLink: ['/uikit/table'] }, + { label: 'List', icon: 'pi pi-fw pi-list', routerLink: ['/uikit/list'] }, + { label: 'Tree', icon: 'pi pi-fw pi-share-alt', routerLink: ['/uikit/tree'] }, + { label: 'Panel', icon: 'pi pi-fw pi-tablet', routerLink: ['/uikit/panel'] }, + { label: 'Overlay', icon: 'pi pi-fw pi-clone', routerLink: ['/uikit/overlay'] }, + { label: 'Media', icon: 'pi pi-fw pi-image', routerLink: ['/uikit/media'] }, + { label: 'Menu', icon: 'pi pi-fw pi-bars', routerLink: ['/uikit/menu'], preventExact: true }, + { label: 'Message', icon: 'pi pi-fw pi-comment', routerLink: ['/uikit/message'] }, + { label: 'File', icon: 'pi pi-fw pi-file', routerLink: ['/uikit/file'] }, + { label: 'Chart', icon: 'pi pi-fw pi-chart-bar', routerLink: ['/uikit/charts'] }, + { label: 'Misc', icon: 'pi pi-fw pi-circle', routerLink: ['/uikit/misc'] } + ] + }, + { + label: 'Prime Blocks', + items: [ + { label: 'Free Blocks', icon: 'pi pi-fw pi-eye', routerLink: ['/blocks'], badge: 'NEW' }, + { label: 'All Blocks', icon: 'pi pi-fw pi-globe', url: ['https://www.primefaces.org/primeblocks-ng'], target: '_blank' }, + ] + }, + { + label: 'Utilities', + items: [ + { label: 'PrimeIcons', icon: 'pi pi-fw pi-prime', routerLink: ['/utilities/icons'] }, + { label: 'PrimeFlex', icon: 'pi pi-fw pi-desktop', url: ['https://www.primefaces.org/primeflex/'], target: '_blank' }, + ] + }, + { + label: 'Pages', + icon: 'pi pi-fw pi-briefcase', + routerLink: ['/pages'], + items: [ + { + label: 'Landing', + icon: 'pi pi-fw pi-globe', + routerLink: ['/landing'] + }, + { + label: 'Auth', + icon: 'pi pi-fw pi-user', + items: [ + { + label: 'Login', + icon: 'pi pi-fw pi-sign-in', + routerLink: ['/auth/login'] + }, + { + label: 'Error', + icon: 'pi pi-fw pi-times-circle', + routerLink: ['/auth/error'] + }, + { + label: 'Access Denied', + icon: 'pi pi-fw pi-lock', + routerLink: ['/auth/access'] + } + ] + }, + { + label: 'Crud', + icon: 'pi pi-fw pi-pencil', + routerLink: ['/pages/crud'] + }, + { + label: 'Timeline', + icon: 'pi pi-fw pi-calendar', + routerLink: ['/pages/timeline'] + }, + { + label: 'Not Found', + icon: 'pi pi-fw pi-exclamation-circle', + routerLink: ['/pages/notfound'] + }, + { + label: 'Empty', + icon: 'pi pi-fw pi-circle-off', + routerLink: ['/pages/empty'] + }, + ] + }, + { + label: 'Hierarchy', + items: [ + { + label: 'Submenu 1', icon: 'pi pi-fw pi-bookmark', + items: [ + { + label: 'Submenu 1.1', icon: 'pi pi-fw pi-bookmark', + items: [ + { label: 'Submenu 1.1.1', icon: 'pi pi-fw pi-bookmark' }, + { label: 'Submenu 1.1.2', icon: 'pi pi-fw pi-bookmark' }, + { label: 'Submenu 1.1.3', icon: 'pi pi-fw pi-bookmark' }, + ] + }, + { + label: 'Submenu 1.2', icon: 'pi pi-fw pi-bookmark', + items: [ + { label: 'Submenu 1.2.1', icon: 'pi pi-fw pi-bookmark' } + ] + }, + ] + }, + { + label: 'Submenu 2', icon: 'pi pi-fw pi-bookmark', + items: [ + { + label: 'Submenu 2.1', icon: 'pi pi-fw pi-bookmark', + items: [ + { label: 'Submenu 2.1.1', icon: 'pi pi-fw pi-bookmark' }, + { label: 'Submenu 2.1.2', icon: 'pi pi-fw pi-bookmark' }, + ] + }, + { + label: 'Submenu 2.2', icon: 'pi pi-fw pi-bookmark', + items: [ + { label: 'Submenu 2.2.1', icon: 'pi pi-fw pi-bookmark' }, + ] + }, + ] + } + ] + }, + { + label: 'Get Started', + items: [ + { + label: 'Documentation', icon: 'pi pi-fw pi-question', routerLink: ['/documentation'] + }, + { + label: 'View Source', icon: 'pi pi-fw pi-search', url: ['https://github.com/primefaces/sakai-ng'], target: '_blank' + } + ] + } + ]; + } +} diff --git a/src/app/service/app.menu.service.ts b/src/app/layout/app.menu.service.ts similarity index 50% rename from src/app/service/app.menu.service.ts rename to src/app/layout/app.menu.service.ts index ba552db..1d86f44 100644 --- a/src/app/service/app.menu.service.ts +++ b/src/app/layout/app.menu.service.ts @@ -1,20 +1,23 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; +import { MenuChangeEvent } from './api/menuchangeevent'; -@Injectable() +@Injectable({ + providedIn: 'root' +}) export class MenuService { - private menuSource = new Subject(); + private menuSource = new Subject(); private resetSource = new Subject(); menuSource$ = this.menuSource.asObservable(); resetSource$ = this.resetSource.asObservable(); - onMenuStateChange(key: string) { - this.menuSource.next(key); + onMenuStateChange(event: MenuChangeEvent) { + this.menuSource.next(event); } reset() { - this.resetSource.next(true); + this.resetSource.next(true); } } diff --git a/src/app/layout/app.menuitem.component.ts b/src/app/layout/app.menuitem.component.ts new file mode 100644 index 0000000..0179f42 --- /dev/null +++ b/src/app/layout/app.menuitem.component.ts @@ -0,0 +1,166 @@ +import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { NavigationEnd, Router } from '@angular/router'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { Subscription } from 'rxjs'; +import { filter } from 'rxjs/operators'; +import { MenuService } from './app.menu.service'; +import { LayoutService } from './service/app.layout.service'; + +@Component({ + /* tslint:disable:component-selector */ + selector: '[app-menuitem]', + /* tslint:enable:component-selector */ + template: ` + +
{{item.label}}
+ + + {{item.label}} + + + + + {{item.label}} + + + +
    + +
  • +
    +
+
+ `, + host: { + '[class.layout-root-menuitem]': 'root', + '[class.active-menuitem]': 'active' + }, + animations: [ + trigger('children', [ + state('collapsed', style({ + height: '0' + })), + state('expanded', style({ + height: '*' + })), + state('hidden', style({ + display: 'none' + })), + state('visible', style({ + display: 'block' + })), + transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')) + ]) + ] +}) +export class AppMenuitemComponent implements OnInit, OnDestroy { + + @Input() item: any; + + @Input() index!: number; + + @Input() root!: boolean; + + @Input() parentKey!: string; + + active = false; + + menuSourceSubscription: Subscription; + + menuResetSubscription: Subscription; + + key: string = ""; + + constructor(public layoutService: LayoutService, private cd: ChangeDetectorRef, public router: Router, private menuService: MenuService) { + this.menuSourceSubscription = this.menuService.menuSource$.subscribe(value => { + Promise.resolve(null).then(() => { + if (value.routeEvent) { + this.active = (value.key === this.key || value.key.startsWith(this.key + '-')) ? true : false; + } + else { + if (value.key !== this.key && !value.key.startsWith(this.key + '-')) { + this.active = false; + } + } + }); + }); + + this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => { + this.active = false; + }); + + this.router.events.pipe(filter(event => event instanceof NavigationEnd)) + .subscribe(params => { + if (this.item.routerLink) { + this.updateActiveStateFromRoute(); + } + }); + } + + ngOnInit() { + this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index); + + if (this.item.routerLink) { + this.updateActiveStateFromRoute(); + } + } + + updateActiveStateFromRoute() { + let activeRoute = this.router.isActive(this.item.routerLink[0], { paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' }); + + if (activeRoute) { + this.menuService.onMenuStateChange({ key: this.key, routeEvent: true }); + } + } + + itemClick(event: Event) { + // avoid processing disabled items + if (this.item.disabled) { + event.preventDefault(); + return; + } + + // execute command + if (this.item.command) { + this.item.command({ originalEvent: event, item: this.item }); + } + + // toggle active state + if (this.item.items) { + this.active = !this.active; + + if (this.root && this.active) { + this.layoutService.onOverlaySubmenuOpen(); + } + } + else { + if (this.layoutService.isMobile()) { + this.layoutService.state.staticMenuMobileActive = false; + } + } + + this.menuService.onMenuStateChange({ key: this.key }); + } + + get submenuAnimation() { + if (this.layoutService.isDesktop() && (this.layoutService.isHorizontal() || this.layoutService.isSlim())) + return this.active ? 'visible' : 'hidden'; + else + return this.root ? 'expanded' : (this.active ? 'expanded' : 'collapsed'); + } + + ngOnDestroy() { + if (this.menuSourceSubscription) { + this.menuSourceSubscription.unsubscribe(); + } + + if (this.menuResetSubscription) { + this.menuResetSubscription.unsubscribe(); + } + } +} diff --git a/src/app/layout/app.sidebar.component.html b/src/app/layout/app.sidebar.component.html new file mode 100644 index 0000000..7f6f112 --- /dev/null +++ b/src/app/layout/app.sidebar.component.html @@ -0,0 +1 @@ + diff --git a/src/app/layout/app.sidebar.component.ts b/src/app/layout/app.sidebar.component.ts new file mode 100644 index 0000000..c48f9bb --- /dev/null +++ b/src/app/layout/app.sidebar.component.ts @@ -0,0 +1,11 @@ +import { Component, ElementRef } from '@angular/core'; +import { LayoutService } from "./service/app.layout.service"; + +@Component({ + selector: 'app-sidebar', + templateUrl: './app.sidebar.component.html' +}) +export class AppSidebarComponent { + constructor(public layoutService: LayoutService, public el: ElementRef) { } +} + diff --git a/src/app/layout/app.topbar.component.html b/src/app/layout/app.topbar.component.html new file mode 100644 index 0000000..70e134c --- /dev/null +++ b/src/app/layout/app.topbar.component.html @@ -0,0 +1,31 @@ +
+ + + + + + +
+ + + + + +
+
\ No newline at end of file diff --git a/src/app/layout/app.topbar.component.ts b/src/app/layout/app.topbar.component.ts new file mode 100644 index 0000000..2be0bc1 --- /dev/null +++ b/src/app/layout/app.topbar.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { MenuItem } from 'primeng/api'; +import { LayoutService } from "./service/app.layout.service"; + +@Component({ + selector: 'app-topbar', + templateUrl: './app.topbar.component.html' +}) +export class AppTopBarComponent { + + items!: MenuItem[]; + + constructor(public layoutService: LayoutService) { } +} diff --git a/src/app/layout/config/app.config.component.html b/src/app/layout/config/app.config.component.html new file mode 100644 index 0000000..a1549f6 --- /dev/null +++ b/src/app/layout/config/app.config.component.html @@ -0,0 +1,242 @@ + + + +
Scale
+
+ +
+ +
+ +
+ + +
Menu Type
+
+ + +
+
+ + +
+
+ + +
Input Style
+
+
+ + +
+
+ + +
+
+ +
Ripple Effect
+ +
+ + +
Bootstrap
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
Material Design
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
Material Design Compact
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
Tailwind
+
+
+ +
+
+ +
Fluent UI
+
+
+ +
+
+ +
PrimeOne Design - 2022
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
PrimeOne Design - 2021
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
diff --git a/src/app/layout/config/app.config.component.ts b/src/app/layout/config/app.config.component.ts new file mode 100644 index 0000000..72d315d --- /dev/null +++ b/src/app/layout/config/app.config.component.ts @@ -0,0 +1,105 @@ +import { Component, Input } from '@angular/core'; +import { LayoutService } from "../service/app.layout.service"; +import { MenuService } from "../app.menu.service"; + +@Component({ + selector: 'app-config', + templateUrl: './app.config.component.html' +}) +export class AppConfigComponent { + + @Input() minimal: boolean = false; + + scales: number[] = [12, 13, 14, 15, 16]; + + constructor(public layoutService: LayoutService, public menuService: MenuService) { } + + get visible(): boolean { + return this.layoutService.state.configSidebarVisible; + } + + set visible(_val: boolean) { + this.layoutService.state.configSidebarVisible = _val; + } + + get scale(): number { + return this.layoutService.config.scale; + } + + set scale(_val: number) { + this.layoutService.config.scale = _val; + } + + get menuMode(): string { + return this.layoutService.config.menuMode; + } + + set menuMode(_val: string) { + this.layoutService.config.menuMode = _val; + if (this.layoutService.isSlim() || this.layoutService.isHorizontal()) { + this.menuService.reset(); + } + } + + get inputStyle(): string { + return this.layoutService.config.inputStyle; + } + + set inputStyle(_val: string) { + this.layoutService.config.inputStyle = _val; + } + + get ripple(): boolean { + return this.layoutService.config.ripple; + } + + set ripple(_val: boolean) { + this.layoutService.config.ripple = _val; + } + + onConfigButtonClick() { + this.layoutService.showConfigSidebar(); + } + + changeTheme(theme: string, colorScheme: string) { + const themeLink = document.getElementById('theme-css'); + const newHref = themeLink.getAttribute('href')!.replace(this.layoutService.config.theme, theme); + this.layoutService.config.colorScheme + this.replaceThemeLink(newHref, () => { + this.layoutService.config.theme = theme; + this.layoutService.config.colorScheme = colorScheme; + this.layoutService.onConfigUpdate(); + }); + } + + replaceThemeLink(href: string, onComplete: Function) { + const id = 'theme-css'; + const themeLink = document.getElementById('theme-css'); + const cloneLinkElement = themeLink.cloneNode(true); + + cloneLinkElement.setAttribute('href', href); + cloneLinkElement.setAttribute('id', id + '-clone'); + + themeLink.parentNode!.insertBefore(cloneLinkElement, themeLink.nextSibling); + + cloneLinkElement.addEventListener('load', () => { + themeLink.remove(); + cloneLinkElement.setAttribute('id', id); + onComplete(); + }); + } + + decrementScale() { + this.scale--; + this.applyScale(); + } + + incrementScale() { + this.scale++; + this.applyScale(); + } + + applyScale() { + document.documentElement.style.fontSize = this.scale + 'px'; + } +} diff --git a/src/app/layout/config/config.module.ts b/src/app/layout/config/config.module.ts new file mode 100644 index 0000000..2c00f85 --- /dev/null +++ b/src/app/layout/config/config.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { SidebarModule } from 'primeng/sidebar'; +import { RadioButtonModule } from 'primeng/radiobutton'; +import { ButtonModule } from 'primeng/button'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { AppConfigComponent } from './app.config.component'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + SidebarModule, + RadioButtonModule, + ButtonModule, + InputSwitchModule + ], + declarations: [ + AppConfigComponent + ], + exports: [ + AppConfigComponent + ] +}) +export class AppConfigModule { } diff --git a/src/app/layout/service/app.layout.service.ts b/src/app/layout/service/app.layout.service.ts new file mode 100644 index 0000000..1cf1b8c --- /dev/null +++ b/src/app/layout/service/app.layout.service.ts @@ -0,0 +1,112 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; + +export interface AppConfig { + inputStyle: string; + colorScheme: string; + theme: string; + ripple: boolean; + menuMode: string; + scale: number; +} + +interface LayoutState { + staticMenuDesktopInactive: boolean; + overlayMenuActive: boolean; + profileSidebarVisible: boolean; + configSidebarVisible: boolean; + staticMenuMobileActive: boolean; + menuHoverActive: boolean; +} + +@Injectable({ + providedIn: 'root', +}) +export class LayoutService { + + config: AppConfig = { + ripple: false, + inputStyle: 'outlined', + menuMode: 'static', + colorScheme: 'light', + theme: 'lara-light-indigo', + scale: 14, + }; + + state: LayoutState = { + staticMenuDesktopInactive: false, + overlayMenuActive: false, + profileSidebarVisible: false, + configSidebarVisible: false, + staticMenuMobileActive: false, + menuHoverActive: false + }; + + private configUpdate = new Subject(); + + private overlayOpen = new Subject(); + + configUpdate$ = this.configUpdate.asObservable(); + + overlayOpen$ = this.overlayOpen.asObservable(); + + onMenuToggle() { + if (this.isOverlay()) { + this.state.overlayMenuActive = !this.state.overlayMenuActive; + if (this.state.overlayMenuActive) { + this.overlayOpen.next(null); + } + } + + if (this.isDesktop()) { + this.state.staticMenuDesktopInactive = !this.state.staticMenuDesktopInactive; + } + else { + this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive; + + if (this.state.staticMenuMobileActive) { + this.overlayOpen.next(null); + } + } + } + + onOverlaySubmenuOpen() { + this.overlayOpen.next(null); + } + + showProfileSidebar() { + this.state.profileSidebarVisible = !this.state.profileSidebarVisible; + if (this.state.profileSidebarVisible) { + this.overlayOpen.next(null); + } + } + + showConfigSidebar() { + this.state.configSidebarVisible = true; + } + + isOverlay() { + return this.config.menuMode === 'overlay'; + } + + isDesktop() { + return window.innerWidth > 991; + } + + isSlim() { + return this.config.menuMode === 'slim'; + } + + isHorizontal() { + return this.config.menuMode === 'horizontal'; + } + + isMobile() { + return !this.isDesktop(); + } + + onConfigUpdate() { + this.configUpdate.next(this.config); + } + +} diff --git a/src/app/service/app.config.service.ts b/src/app/service/app.config.service.ts deleted file mode 100644 index 0a165d6..0000000 --- a/src/app/service/app.config.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Subject } from 'rxjs'; -import { AppConfig } from '../api/appconfig'; - -@Injectable() -export class ConfigService { - - config: AppConfig = { - theme: 'lara-light-indigo', - dark: false, - inputStyle: 'outlined', - ripple: true - }; - - private configUpdate = new Subject(); - - configUpdate$ = this.configUpdate.asObservable(); - - updateConfig(config: AppConfig) { - this.config = config; - this.configUpdate.next(config); - } - - getConfig() { - return this.config; - } -} diff --git a/src/app/service/nodeservice.ts b/src/app/service/nodeservice.ts deleted file mode 100755 index bc756b4..0000000 --- a/src/app/service/nodeservice.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; - -import { TreeNode } from 'primeng/api'; - -@Injectable() -export class NodeService { - - constructor(private http: HttpClient) { } - - getFiles() { - return this.http.get('assets/demo/data/files.json') - .toPromise() - .then(res => res.data as TreeNode[]); - } - - getLazyFiles() { - return this.http.get('assets/demo/data/files-lazy.json') - .toPromise() - .then(res => res.data as TreeNode[]); - } - - getFilesystem() { - return this.http.get('assets/demo/data/filesystem.json') - .toPromise() - .then(res => res.data as TreeNode[]); - } - - getLazyFilesystem() { - return this.http.get('assets/demo/data/filesystem-lazy.json') - .toPromise() - .then(res => res.data as TreeNode[]); - } -} diff --git a/src/assets/demo/data/files-lazy.json b/src/assets/demo/data/files-lazy.json old mode 100755 new mode 100644 diff --git a/src/assets/demo/data/files.json b/src/assets/demo/data/files.json old mode 100755 new mode 100644 diff --git a/src/assets/demo/data/filesystem-lazy.json b/src/assets/demo/data/filesystem-lazy.json old mode 100755 new mode 100644 diff --git a/src/assets/demo/data/filesystem.json b/src/assets/demo/data/filesystem.json old mode 100755 new mode 100644 diff --git a/src/assets/demo/data/scheduleevents.json b/src/assets/demo/data/scheduleevents.json old mode 100755 new mode 100644 diff --git a/src/assets/layout/images/asset-access.svg b/src/assets/demo/images/access/asset-access.svg similarity index 100% rename from src/assets/layout/images/asset-access.svg rename to src/assets/demo/images/access/asset-access.svg diff --git a/src/assets/layout/images/logo-orange.svg b/src/assets/demo/images/access/logo-orange.svg similarity index 100% rename from src/assets/layout/images/logo-orange.svg rename to src/assets/demo/images/access/logo-orange.svg diff --git a/src/assets/layout/images/asset-error.svg b/src/assets/demo/images/error/asset-error.svg similarity index 100% rename from src/assets/layout/images/asset-error.svg rename to src/assets/demo/images/error/asset-error.svg diff --git a/src/assets/layout/images/logo-error.svg b/src/assets/demo/images/error/logo-error.svg similarity index 100% rename from src/assets/layout/images/logo-error.svg rename to src/assets/demo/images/error/logo-error.svg diff --git a/src/assets/demo/flags/flag_placeholder.png b/src/assets/demo/images/flag/flag_placeholder.png old mode 100755 new mode 100644 similarity index 100% rename from src/assets/demo/flags/flag_placeholder.png rename to src/assets/demo/images/flag/flag_placeholder.png diff --git a/src/assets/layout/images/enterprise.svg b/src/assets/demo/images/landing/enterprise.svg similarity index 100% rename from src/assets/layout/images/enterprise.svg rename to src/assets/demo/images/landing/enterprise.svg diff --git a/src/assets/layout/images/free.svg b/src/assets/demo/images/landing/free.svg similarity index 100% rename from src/assets/layout/images/free.svg rename to src/assets/demo/images/landing/free.svg diff --git a/src/assets/layout/images/mockup-desktop.svg b/src/assets/demo/images/landing/mockup-desktop.svg similarity index 100% rename from src/assets/layout/images/mockup-desktop.svg rename to src/assets/demo/images/landing/mockup-desktop.svg diff --git a/src/assets/layout/images/mockup.svg b/src/assets/demo/images/landing/mockup.svg similarity index 100% rename from src/assets/layout/images/mockup.svg rename to src/assets/demo/images/landing/mockup.svg diff --git a/src/assets/layout/images/new-badge.svg b/src/assets/demo/images/landing/new-badge.svg similarity index 100% rename from src/assets/layout/images/new-badge.svg rename to src/assets/demo/images/landing/new-badge.svg diff --git a/src/assets/layout/images/peak-logo.svg b/src/assets/demo/images/landing/peak-logo.svg similarity index 100% rename from src/assets/layout/images/peak-logo.svg rename to src/assets/demo/images/landing/peak-logo.svg diff --git a/src/assets/layout/images/screen-1.png b/src/assets/demo/images/landing/screen-1.png similarity index 100% rename from src/assets/layout/images/screen-1.png rename to src/assets/demo/images/landing/screen-1.png diff --git a/src/assets/layout/images/startup.svg b/src/assets/demo/images/landing/startup.svg similarity index 100% rename from src/assets/layout/images/startup.svg rename to src/assets/demo/images/landing/startup.svg diff --git a/src/assets/layout/images/avatar.png b/src/assets/demo/images/login/avatar.png similarity index 100% rename from src/assets/layout/images/avatar.png rename to src/assets/demo/images/login/avatar.png diff --git a/src/assets/layout/images/logo-blue.svg b/src/assets/demo/images/notfound/logo-blue.svg similarity index 100% rename from src/assets/layout/images/logo-blue.svg rename to src/assets/demo/images/notfound/logo-blue.svg diff --git a/src/assets/demo/styles/badges.css b/src/assets/demo/styles/badges.css new file mode 100644 index 0000000..16d5b3c --- /dev/null +++ b/src/assets/demo/styles/badges.css @@ -0,0 +1,92 @@ +.product-badge { + border-radius: var(--border-radius); + padding: .25em .5rem; + text-transform: uppercase; + font-weight: 700; + font-size: 12px; + letter-spacing: .3px; +} + +.product-badge.status-instock { + background: #C8E6C9; + color: #256029; +} + +.product-badge.status-outofstock { + background: #FFCDD2; + color: #C63737; +} + +.product-badge.status-lowstock { + background: #FEEDAF; + color: #8A5340; +} + +.customer-badge { + border-radius: var(--border-radius); + padding: .25em .5rem; + text-transform: uppercase; + font-weight: 700; + font-size: 12px; + letter-spacing: .3px; +} + +.customer-badge.status-qualified { + background: #C8E6C9; + color: #256029; +} + +.customer-badge.status-unqualified { + background: #FFCDD2; + color: #C63737; +} + +.customer-badge.status-negotiation { + background: #FEEDAF; + color: #8A5340; +} + +.customer-badge.status-new { + background: #B3E5FC; + color: #23547B; +} + +.customer-badge.status-renewal { + background: #ECCFFF; + color: #694382; +} + +.customer-badge.status-proposal { + background: #FFD8B2; + color: #805B36; +} + +.order-badge { + border-radius: var(--border-radius); + padding: .25em .5rem; + text-transform: uppercase; + font-weight: 700; + font-size: 12px; + letter-spacing: .3px; +} + +.order-badge.order-delivered { + background: #C8E6C9; + color: #256029; +} + +.order-badge.order-cancelled { + background: #FFCDD2; + color: #C63737; +} + +.order-badge.order-pending { + background: #FEEDAF; + color: #8A5340; +} + +.order-badge.order-returned { + background: #ECCFFF; + color: #694382; +} +/*# sourceMappingURL=badges.css.map */ \ No newline at end of file diff --git a/src/assets/demo/styles/badges.css.map b/src/assets/demo/styles/badges.css.map new file mode 100644 index 0000000..90b9e0d --- /dev/null +++ b/src/assets/demo/styles/badges.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "mappings": "AAAA,AAAA,cAAc,CAAC;EACX,aAAa,EAAE,oBAAoB;EACnC,OAAO,EAAE,WAAW;EACpB,cAAc,EAAE,SAAS;EACzB,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;CAgBvB;;AAtBD,AAQI,cARU,AAQT,eAAe,CAAC;EACb,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAXL,AAaI,cAbU,AAaT,kBAAkB,CAAC;EAChB,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAhBL,AAkBI,cAlBU,AAkBT,gBAAgB,CAAC;EACd,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAGL,AAAA,eAAe,CAAC;EACZ,aAAa,EAAE,oBAAoB;EACnC,OAAO,EAAE,WAAW;EACpB,cAAc,EAAE,SAAS;EACzB,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;CA+BvB;;AArCD,AAQI,eARW,AAQV,iBAAiB,CAAC;EACf,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAXL,AAaI,eAbW,AAaV,mBAAmB,CAAC;EACjB,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAhBL,AAkBI,eAlBW,AAkBV,mBAAmB,CAAC;EACjB,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AArBL,AAuBI,eAvBW,AAuBV,WAAW,CAAC;EACT,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AA1BL,AA4BI,eA5BW,AA4BV,eAAe,CAAC;EACb,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AA/BL,AAiCI,eAjCW,AAiCV,gBAAgB,CAAC;EACd,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAGL,AAAA,YAAY,CAAC;EACT,aAAa,EAAE,oBAAoB;EACnC,OAAO,EAAE,WAAW;EACpB,cAAc,EAAE,SAAS;EACzB,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;CAqBvB;;AA3BD,AAQI,YARQ,AAQP,gBAAgB,CAAC;EACd,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAXL,AAaI,YAbQ,AAaP,gBAAgB,CAAC;EACd,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AAhBL,AAkBI,YAlBQ,AAkBP,cAAc,CAAC;EACZ,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB;;AArBL,AAuBI,YAvBQ,AAuBP,eAAe,CAAC;EACb,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;CACjB", + "sources": [ + "badges.scss" + ], + "names": [], + "file": "badges.css" +} \ No newline at end of file diff --git a/src/assets/demo/badges.scss b/src/assets/demo/styles/badges.scss similarity index 100% rename from src/assets/demo/badges.scss rename to src/assets/demo/styles/badges.scss diff --git a/src/assets/demo/styles/documentation.css b/src/assets/demo/styles/documentation.css new file mode 100644 index 0000000..20f504e --- /dev/null +++ b/src/assets/demo/styles/documentation.css @@ -0,0 +1,30 @@ +pre[class*="language-"]:before, pre[class*="language-"]:after { + display: none !important; +} + +pre[class*="language-"] code { + border-left: 6px solid var(--surface-border) !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + background: var(--surface-ground) !important; + margin: 1em 0; + color: var(--text-color); + font-size: 14px; +} + +i:not([class~="pi"]) { + background-color: transparent; + color: #2196f3; + font-family: Monaco, courier, monospace; + font-style: normal; + font-size: 12px; + font-weight: 500; + padding: 0 4px; + letter-spacing: .5px; + font-weight: 600; + margin: 0 2px; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; +} +/*# sourceMappingURL=documentation.css.map */ \ No newline at end of file diff --git a/src/assets/demo/styles/documentation.css.map b/src/assets/demo/styles/documentation.css.map new file mode 100644 index 0000000..faf5e19 --- /dev/null +++ b/src/assets/demo/styles/documentation.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "mappings": "AAAA,AACI,GADD,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CACC,OAAO,EADZ,GAAG,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,CACW,MAAM,CAAC;EACd,OAAO,EAAE,eAAe;CAC3B;;AAHL,AAKI,GALD,CAAA,AAAA,KAAC,EAAO,WAAW,AAAlB,EAKA,IAAI,CAAC;EACD,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,UAAU;EACvD,UAAU,EAAE,eAAe;EAC3B,UAAU,EAAE,qBAAqB,CAAC,UAAU;EAC5C,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,iBAAiB;EACxB,SAAS,EAAE,IAAI;CAClB;;AAGL,AAAA,CAAC,AAAA,IAAK,EAAA,AAAA,KAAC,EAAO,IAAI,AAAX,GAAc;EACjB,gBAAgB,EAAE,WAAW;EAC7B,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,0BAA0B;EACvC,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,KAAK;EACd,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,GAAG;EAChB,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,WAAW;CACvB", + "sources": [ + "documentation.scss" + ], + "names": [], + "file": "documentation.css" +} \ No newline at end of file diff --git a/src/assets/demo/documentation.scss b/src/assets/demo/styles/documentation.scss similarity index 100% rename from src/assets/demo/documentation.scss rename to src/assets/demo/styles/documentation.scss diff --git a/src/assets/demo/flags/flags.css b/src/assets/demo/styles/flags/flags.css similarity index 100% rename from src/assets/demo/flags/flags.css rename to src/assets/demo/styles/flags/flags.css diff --git a/src/assets/demo/flags/flags_responsive.png b/src/assets/demo/styles/flags/flags_responsive.png similarity index 100% rename from src/assets/demo/flags/flags_responsive.png rename to src/assets/demo/styles/flags/flags_responsive.png diff --git a/src/assets/layout/images/icon.svg b/src/assets/layout/images/icon.svg deleted file mode 100644 index 53d2de6..0000000 --- a/src/assets/layout/images/icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/layout/images/screen.png b/src/assets/layout/images/screen.png deleted file mode 100644 index 41dac37e7ae9c63fc297e734ceb7051216a59ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127306 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

#1^V|^&PY6Cxg_X% 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 TTGHNsz|SL9ZIu$`7XkkV5p$`_ diff --git a/src/assets/layout/images/widgets/user-card.jpg b/src/assets/layout/images/widgets/user-card.jpg deleted file mode 100644 index cba8ef5f554ebba393326c1532eddc73c8e81de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2648478 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 z%0A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 %_-;Ux()%`1$ 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