├── .babelrc.js ├── .editorconfig ├── .gitignore ├── .storybook ├── kickstandUiTheme.js ├── main.js ├── manager.js └── preview.js ├── LICENSE ├── PROJECT_BUILD.md ├── icon_loader.js ├── kickstand-ui_icons.xd ├── kickstand-ui_icons_rounded.xd ├── package-lock.json ├── package.json ├── readme.md ├── src ├── components.d.ts ├── index.html ├── index.ts ├── scripts │ ├── components │ │ ├── accordion │ │ │ ├── accordion-slide.tsx │ │ │ ├── accordion.scss │ │ │ ├── accordion.stories.ts │ │ │ ├── accordion.tsx │ │ │ └── readme.md │ │ ├── alert │ │ │ ├── alert.scss │ │ │ ├── alert.stories.ts │ │ │ ├── alert.tsx │ │ │ └── readme.md │ │ ├── badge │ │ │ ├── badge.scss │ │ │ ├── badge.stories.ts │ │ │ ├── badge.tsx │ │ │ └── readme.md │ │ ├── breadcrumbs │ │ │ ├── breadcrumbs.scss │ │ │ ├── breadcrumbs.stories.ts │ │ │ ├── breadcrumbs.tsx │ │ │ └── readme.md │ │ ├── button │ │ │ ├── button-bar │ │ │ │ ├── button-bar.scss │ │ │ │ ├── button-bar.tsx │ │ │ │ └── readme.md │ │ │ ├── button.scss │ │ │ ├── button.stories.ts │ │ │ ├── button.tsx │ │ │ └── readme.md │ │ ├── card │ │ │ ├── card-body.tsx │ │ │ ├── card-footer.tsx │ │ │ ├── card.scss │ │ │ ├── card.stories.ts │ │ │ ├── card.tsx │ │ │ └── readme.md │ │ ├── carousel │ │ │ ├── carousel-slide.tsx │ │ │ ├── carousel.scss │ │ │ ├── carousel.stories.ts │ │ │ ├── carousel.tsx │ │ │ └── readme.md │ │ ├── dropdown │ │ │ ├── dropdown-item.tsx │ │ │ ├── dropdown.scss │ │ │ ├── dropdown.stories.ts │ │ │ ├── dropdown.tsx │ │ │ └── readme.md │ │ ├── form-field │ │ │ ├── autocomplete │ │ │ │ ├── autocomplete.scss │ │ │ │ ├── autocomplete.tsx │ │ │ │ └── readme.md │ │ │ ├── checkbox │ │ │ │ ├── checkbox.scss │ │ │ │ ├── checkbox.tsx │ │ │ │ └── readme.md │ │ │ ├── checklist │ │ │ │ ├── checklist.scss │ │ │ │ ├── checklist.tsx │ │ │ │ └── readme.md │ │ │ ├── form-field.scss │ │ │ ├── form-field.stories.ts │ │ │ ├── form-field.tsx │ │ │ ├── radio │ │ │ │ ├── radio.scss │ │ │ │ ├── radio.tsx │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── spin-box │ │ │ │ ├── readme.md │ │ │ │ ├── spin-box.scss │ │ │ │ └── spin-box.tsx │ │ ├── form │ │ │ ├── form.scss │ │ │ ├── form.stories.ts │ │ │ ├── form.tsx │ │ │ └── readme.md │ │ ├── gallery │ │ │ ├── gallery.scss │ │ │ ├── gallery.stories.ts │ │ │ ├── gallery.tsx │ │ │ └── readme.md │ │ ├── grid │ │ │ ├── column.tsx │ │ │ ├── grid.scss │ │ │ ├── grid.stories.ts │ │ │ ├── readme.md │ │ │ └── row.tsx │ │ ├── icon │ │ │ ├── icon-list.ts │ │ │ ├── icon.scss │ │ │ ├── icon.stories.ts │ │ │ ├── icon.tsx │ │ │ ├── icons │ │ │ │ ├── 500px.svg │ │ │ │ ├── accessible.svg │ │ │ │ ├── activity.svg │ │ │ │ ├── alarm.svg │ │ │ │ ├── alarm_fill.svg │ │ │ │ ├── align_center.svg │ │ │ │ ├── align_justified.svg │ │ │ │ ├── align_left.svg │ │ │ │ ├── align_right.svg │ │ │ │ ├── arrow_down.svg │ │ │ │ ├── arrow_left.svg │ │ │ │ ├── arrow_right.svg │ │ │ │ ├── arrow_up.svg │ │ │ │ ├── attachment.svg │ │ │ │ ├── bar_chart.svg │ │ │ │ ├── behance.svg │ │ │ │ ├── bell.svg │ │ │ │ ├── bell_fil.svg │ │ │ │ ├── blocks.svg │ │ │ │ ├── blocks_fill.svg │ │ │ │ ├── bolt.svg │ │ │ │ ├── bolt_fill.svg │ │ │ │ ├── bookmark.svg │ │ │ │ ├── bookmark_fill.svg │ │ │ │ ├── briefcase.svg │ │ │ │ ├── briefcase_fill.svg │ │ │ │ ├── calendar.svg │ │ │ │ ├── camera.svg │ │ │ │ ├── camera_fill.svg │ │ │ │ ├── cart.svg │ │ │ │ ├── cart_fill.svg │ │ │ │ ├── chat.svg │ │ │ │ ├── chat_box.svg │ │ │ │ ├── chat_box_fill.svg │ │ │ │ ├── chat_bubble.svg │ │ │ │ ├── chat_bubble_fill.svg │ │ │ │ ├── chat_fill.svg │ │ │ │ ├── check.svg │ │ │ │ ├── check_circle.svg │ │ │ │ ├── check_circle_fill.svg │ │ │ │ ├── check_octagon.svg │ │ │ │ ├── check_shield.svg │ │ │ │ ├── check_square.svg │ │ │ │ ├── chevron_down.svg │ │ │ │ ├── chevron_down_circle.svg │ │ │ │ ├── chevron_down_circle_fill.svg │ │ │ │ ├── chevron_left.svg │ │ │ │ ├── chevron_left_circle.svg │ │ │ │ ├── chevron_left_circle_fill.svg │ │ │ │ ├── chevron_right.svg │ │ │ │ ├── chevron_right_circle.svg │ │ │ │ ├── chevron_right_circle_fill.svg │ │ │ │ ├── chevron_up.svg │ │ │ │ ├── chevron_up_circle.svg │ │ │ │ ├── chevron_up_circle_fill.svg │ │ │ │ ├── circle.svg │ │ │ │ ├── circle_fill.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── clipboard_fill.svg │ │ │ │ ├── code.svg │ │ │ │ ├── codepen.svg │ │ │ │ ├── collapse.svg │ │ │ │ ├── compass.svg │ │ │ │ ├── compass_fill.svg │ │ │ │ ├── copy.svg │ │ │ │ ├── copy_fill.svg │ │ │ │ ├── css3.svg │ │ │ │ ├── cube.svg │ │ │ │ ├── double_chevron_left.svg │ │ │ │ ├── double_chevron_right.svg │ │ │ │ ├── download.svg │ │ │ │ ├── dribbble.svg │ │ │ │ ├── drop.svg │ │ │ │ ├── drop_fill.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── edit_fill.svg │ │ │ │ ├── ellipsis.svg │ │ │ │ ├── email.svg │ │ │ │ ├── email_fill.svg │ │ │ │ ├── email_read.svg │ │ │ │ ├── email_read_fill.svg │ │ │ │ ├── etsy.svg │ │ │ │ ├── expand.svg │ │ │ │ ├── external_link.svg │ │ │ │ ├── facebook.svg │ │ │ │ ├── facebook_fill.svg │ │ │ │ ├── facebook_like.svg │ │ │ │ ├── file.svg │ │ │ │ ├── file_fill.svg │ │ │ │ ├── filter.svg │ │ │ │ ├── filter_fill.svg │ │ │ │ ├── flag.svg │ │ │ │ ├── flag_fill.svg │ │ │ │ ├── flag_triangle.svg │ │ │ │ ├── flag_triangle_fill.svg │ │ │ │ ├── flickr.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── folder_fill.svg │ │ │ │ ├── foursquare.svg │ │ │ │ ├── gear.svg │ │ │ │ ├── gear_fill.svg │ │ │ │ ├── gift.svg │ │ │ │ ├── github.svg │ │ │ │ ├── globe.svg │ │ │ │ ├── grid.svg │ │ │ │ ├── grid_fill.svg │ │ │ │ ├── heart.svg │ │ │ │ ├── heart_fill.svg │ │ │ │ ├── hexagon.svg │ │ │ │ ├── hexagon_fill.svg │ │ │ │ ├── hide.svg │ │ │ │ ├── hierarchy.svg │ │ │ │ ├── hierarchy_fill.svg │ │ │ │ ├── history.svg │ │ │ │ ├── home.svg │ │ │ │ ├── home_fill.svg │ │ │ │ ├── html5.svg │ │ │ │ ├── image.svg │ │ │ │ ├── info.svg │ │ │ │ ├── info_fill.svg │ │ │ │ ├── instagram.svg │ │ │ │ ├── jsfiddle.svg │ │ │ │ ├── kebab.svg │ │ │ │ ├── laptop.svg │ │ │ │ ├── laptop_fill.svg │ │ │ │ ├── lastfm.svg │ │ │ │ ├── line_chart.svg │ │ │ │ ├── link.svg │ │ │ │ ├── linkedin.svg │ │ │ │ ├── list.svg │ │ │ │ ├── list_large.svg │ │ │ │ ├── list_large_fill.svg │ │ │ │ ├── loading_circle_spinner.svg │ │ │ │ ├── loading_ellipsis_pulse.svg │ │ │ │ ├── loading_ellipsis_typing.svg │ │ │ │ ├── loading_ring_spinner.svg │ │ │ │ ├── location.svg │ │ │ │ ├── location_arrow.svg │ │ │ │ ├── location_arrow_fill.svg │ │ │ │ ├── location_fill.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── lock_fill.svg │ │ │ │ ├── long_arrow_down.svg │ │ │ │ ├── long_arrow_left.svg │ │ │ │ ├── long_arrow_right.svg │ │ │ │ ├── long_arrow_up.svg │ │ │ │ ├── map.svg │ │ │ │ ├── map_fill.svg │ │ │ │ ├── menu.svg │ │ │ │ ├── mic.svg │ │ │ │ ├── mic_fill.svg │ │ │ │ ├── minus.svg │ │ │ │ ├── minus_circle.svg │ │ │ │ ├── minus_circle_fill.svg │ │ │ │ ├── minus_octagon.svg │ │ │ │ ├── minus_shield.svg │ │ │ │ ├── minus_square.svg │ │ │ │ ├── mobile.svg │ │ │ │ ├── mobile_fill.svg │ │ │ │ ├── monitor.svg │ │ │ │ ├── monitor_fill.svg │ │ │ │ ├── music.svg │ │ │ │ ├── music_fill.svg │ │ │ │ ├── next.svg │ │ │ │ ├── next_fill.svg │ │ │ │ ├── not_allowed.svg │ │ │ │ ├── octagon.svg │ │ │ │ ├── octagon_fill.svg │ │ │ │ ├── octagon_warning_fill.svg │ │ │ │ ├── package.svg │ │ │ │ ├── pause.svg │ │ │ │ ├── pause_fill.svg │ │ │ │ ├── paypal.svg │ │ │ │ ├── pencil.svg │ │ │ │ ├── pencil_fill.svg │ │ │ │ ├── phone.svg │ │ │ │ ├── phone_fill.svg │ │ │ │ ├── pie_chart.svg │ │ │ │ ├── pie_chart_fill.svg │ │ │ │ ├── pinterest.svg │ │ │ │ ├── play.svg │ │ │ │ ├── play_fill.svg │ │ │ │ ├── plus.svg │ │ │ │ ├── plus_circle.svg │ │ │ │ ├── plus_circle_fill.svg │ │ │ │ ├── plus_octagon.svg │ │ │ │ ├── plus_shield.svg │ │ │ │ ├── plus_square.svg │ │ │ │ ├── power.svg │ │ │ │ ├── previous.svg │ │ │ │ ├── previous_fill.svg │ │ │ │ ├── print.svg │ │ │ │ ├── print_fill.svg │ │ │ │ ├── question.svg │ │ │ │ ├── reddit.svg │ │ │ │ ├── redo.svg │ │ │ │ ├── refresh.svg │ │ │ │ ├── rss.svg │ │ │ │ ├── save.svg │ │ │ │ ├── save_fill.svg │ │ │ │ ├── search.svg │ │ │ │ ├── send.svg │ │ │ │ ├── send_fill.svg │ │ │ │ ├── share.svg │ │ │ │ ├── share_fill.svg │ │ │ │ ├── shield.svg │ │ │ │ ├── shield_fill.svg │ │ │ │ ├── sign_in.svg │ │ │ │ ├── sign_out.svg │ │ │ │ ├── sliders.svg │ │ │ │ ├── sliders_fill.svg │ │ │ │ ├── snapchat.svg │ │ │ │ ├── spotify.svg │ │ │ │ ├── square.svg │ │ │ │ ├── square_fill.svg │ │ │ │ ├── star.svg │ │ │ │ ├── star_fill.svg │ │ │ │ ├── table.svg │ │ │ │ ├── tablet.svg │ │ │ │ ├── tablet_fill.svg │ │ │ │ ├── tag.svg │ │ │ │ ├── tag_fill.svg │ │ │ │ ├── tiktok.svg │ │ │ │ ├── time.svg │ │ │ │ ├── time_fill.svg │ │ │ │ ├── times.svg │ │ │ │ ├── times_circle.svg │ │ │ │ ├── times_circle_fill.svg │ │ │ │ ├── times_octagon.svg │ │ │ │ ├── times_shield.svg │ │ │ │ ├── times_square.svg │ │ │ │ ├── trash.svg │ │ │ │ ├── trash_fill.svg │ │ │ │ ├── triangle.svg │ │ │ │ ├── triangle_fill.svg │ │ │ │ ├── tripadvisor.svg │ │ │ │ ├── tumblr.svg │ │ │ │ ├── twitch.svg │ │ │ │ ├── twitter.svg │ │ │ │ ├── undo.svg │ │ │ │ ├── unlock.svg │ │ │ │ ├── unlock_fill.svg │ │ │ │ ├── up_down.svg │ │ │ │ ├── upload.svg │ │ │ │ ├── user.svg │ │ │ │ ├── user_fill.svg │ │ │ │ ├── user_group.svg │ │ │ │ ├── user_group_fill.svg │ │ │ │ ├── video.svg │ │ │ │ ├── video_fill.svg │ │ │ │ ├── view.svg │ │ │ │ ├── vimeo.svg │ │ │ │ ├── warning.svg │ │ │ │ ├── warning_circle.svg │ │ │ │ ├── warning_circle_fill.svg │ │ │ │ ├── warning_fill.svg │ │ │ │ ├── warning_octagon.svg │ │ │ │ ├── warning_octagon_fill.svg │ │ │ │ ├── warning_shield.svg │ │ │ │ ├── warning_square.svg │ │ │ │ ├── whatsapp.svg │ │ │ │ ├── wikipedia.svg │ │ │ │ ├── yelp.svg │ │ │ │ ├── youtube.svg │ │ │ │ ├── zoom_in.svg │ │ │ │ └── zoom_out.svg │ │ │ └── readme.md │ │ ├── image │ │ │ ├── image.scss │ │ │ ├── image.stories.ts │ │ │ ├── image.tsx │ │ │ └── readme.md │ │ ├── loading │ │ │ ├── loading-overlay.tsx │ │ │ ├── loading.scss │ │ │ ├── loading.stories.ts │ │ │ ├── loading.tsx │ │ │ └── readme.md │ │ ├── menu-bar │ │ │ ├── menu-bar.scss │ │ │ ├── menu-bar.stories.ts │ │ │ ├── menu-bar.tsx │ │ │ ├── menu-group.tsx │ │ │ ├── menu-item.tsx │ │ │ ├── menu-row.tsx │ │ │ └── readme.md │ │ ├── modal │ │ │ ├── modal-footer.tsx │ │ │ ├── modal.scss │ │ │ ├── modal.stories.ts │ │ │ ├── modal.tsx │ │ │ └── readme.md │ │ ├── overlay │ │ │ ├── overlay.scss │ │ │ ├── overlay.stories.ts │ │ │ ├── overlay.tsx │ │ │ └── readme.md │ │ ├── progress-bar │ │ │ ├── progress-bar.scss │ │ │ ├── progress-bar.stories.ts │ │ │ ├── progress-bar.tsx │ │ │ └── readme.md │ │ ├── responsive-embed │ │ │ ├── readme.md │ │ │ ├── responsive-embed.scss │ │ │ ├── responsive-embed.stories.ts │ │ │ └── responsive-embed.tsx │ │ ├── scroll-to-top │ │ │ ├── readme.md │ │ │ ├── scroll-to-top.scss │ │ │ ├── scroll-to-top.stories.ts │ │ │ └── scroll-to-top.tsx │ │ ├── side-drawer │ │ │ ├── readme.md │ │ │ ├── side-drawer.scss │ │ │ ├── side-drawer.stories.ts │ │ │ └── side-drawer.tsx │ │ ├── switch │ │ │ ├── readme.md │ │ │ ├── switch.scss │ │ │ ├── switch.stories.ts │ │ │ └── switch.tsx │ │ ├── tabs │ │ │ ├── readme.md │ │ │ ├── tab.tsx │ │ │ ├── tabs.scss │ │ │ ├── tabs.stories.ts │ │ │ └── tabs.tsx │ │ ├── tooltip │ │ │ ├── readme.md │ │ │ ├── tooltip.scss │ │ │ ├── tooltip.stories.ts │ │ │ └── tooltip.tsx │ │ └── utilities │ │ │ ├── border.stories.ts │ │ │ ├── color.stories.ts │ │ │ ├── display.stories.ts │ │ │ ├── layout.stories.ts │ │ │ ├── position.stories.ts │ │ │ ├── shadows.stories.ts │ │ │ ├── spacing.stories.ts │ │ │ ├── table.stories.ts │ │ │ └── text.stories.ts │ └── utils │ │ ├── componentUtils.ts │ │ ├── domUtils.ts │ │ └── htmlSanitizer.ts └── scss │ ├── 00_Abstracts │ ├── README.md │ ├── _variables.scss │ ├── functions │ │ ├── _borders.scss │ │ ├── _color-contrast.scss │ │ ├── _colors.scss │ │ ├── _custom-math.scss │ │ ├── _outline.scss │ │ ├── _spacing.scss │ │ ├── _strings.scss │ │ ├── _transitions.scss │ │ └── _z-index.scss │ ├── index.scss │ └── mixins │ │ ├── _border-radius.scss │ │ ├── _borders.scss │ │ ├── _colors.scss │ │ ├── _create-css-variables.scss │ │ ├── _display.scss │ │ ├── _font-sizes.scss │ │ ├── _font.scss │ │ ├── _hover.scss │ │ ├── _media-queries.scss │ │ ├── _outline.scss │ │ ├── _shadows.scss │ │ ├── _spacing.scss │ │ ├── _transitions.scss │ │ └── _z-index.scss │ ├── 01_Base │ ├── README.md │ ├── _base.scss │ └── index.scss │ ├── 02_Vendors │ ├── README.md │ └── index.scss │ ├── 03_Elements │ ├── README.md │ ├── _block.scss │ ├── _code.scss │ ├── _forms.scss │ ├── _headings.scss │ ├── _images.scss │ ├── _inline.scss │ ├── _lists.scss │ ├── _tables.scss │ └── index.scss │ ├── 04_Components │ ├── README.md │ └── index.scss │ ├── 05_Layouts │ ├── README.md │ └── index.scss │ ├── 06_Pages │ ├── README.md │ └── index.scss │ ├── 07_Utilities │ ├── README.md │ ├── _animation.scss │ ├── _border.scss │ ├── _colors.scss │ ├── _display.scss │ ├── _layout.scss │ ├── _lists.scss │ ├── _mouse.scss │ ├── _position.scss │ ├── _rotation.scss │ ├── _shadows.scss │ ├── _spacing.scss │ ├── _text.scss │ └── index.scss │ └── styles.scss ├── stencil.config.ts └── tsconfig.json /.babelrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: ["@babel/plugin-syntax-import-meta"], 3 | }; 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 4 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | loader/ 4 | 5 | *~ 6 | *.sw[mnpcod] 7 | *.log 8 | *.lock 9 | *.tmp 10 | *.tmp.* 11 | log.txt 12 | *.sublime-project 13 | *.sublime-workspace 14 | 15 | .stencil/ 16 | .idea/ 17 | .vscode/ 18 | .sass-cache/ 19 | .versions/ 20 | node_modules/ 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | -------------------------------------------------------------------------------- /.storybook/kickstandUiTheme.js: -------------------------------------------------------------------------------- 1 | import { create } from '@storybook/theming/create'; 2 | 3 | export default create({ 4 | base: 'light', 5 | brandTitle: "Kickstand UI", 6 | colorSecondary: '#517999' 7 | }); 8 | -------------------------------------------------------------------------------- /.storybook/manager.js: -------------------------------------------------------------------------------- 1 | import { addons } from '@storybook/addons'; 2 | import kickstandUiTheme from './kickstandUiTheme'; 3 | 4 | addons.setConfig({ 5 | theme: kickstandUiTheme 6 | }); -------------------------------------------------------------------------------- /.storybook/preview.js: -------------------------------------------------------------------------------- 1 | import "../src/scss/styles.scss"; 2 | import { defineCustomElements } from "../dist/esm/loader"; 3 | 4 | defineCustomElements(); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PROJECT_BUILD.md: -------------------------------------------------------------------------------- 1 | # Kickstand UI 2 | 3 | Kickstand UI is a design system for building web applications. It is built using native web components to ensure its cross-platform compatibility. 4 | 5 | ## Running the Project 6 | 7 | Install dependencies: 8 | 9 | ```bash 10 | npm install 11 | ``` 12 | 13 | Run Storybook: 14 | 15 | ```bash 16 | npm run dev 17 | ``` 18 | 19 | Build project for production: 20 | 21 | ```bash 22 | npm run build 23 | ``` 24 | 25 | To run the unit tests for the components: 26 | 27 | ```bash 28 | npm test 29 | ``` 30 | 31 | Run basic dev mode (should rarely be used): 32 | 33 | ```bash 34 | npm run serve 35 | ``` 36 | 37 | ## Solution Architecture 38 | 39 | This design system is built using [Stencil](https://stenciljs.com/) (a compiler for building native web components) and [Clarion](https://projectclarion.com) (a CSS framework for building design systems). 40 | 41 | Components are built and tested using [Storybook](https://storybook.js.org/). 42 | -------------------------------------------------------------------------------- /kickstand-ui_icons.xd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/break-stuff/kickstand-ui/1d9beffa6fcaea9a84e58762606e24cbe905aff0/kickstand-ui_icons.xd -------------------------------------------------------------------------------- /kickstand-ui_icons_rounded.xd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/break-stuff/kickstand-ui/1d9beffa6fcaea9a84e58762606e24cbe905aff0/kickstand-ui_icons_rounded.xd -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export { $, $$ } from './scripts/utils/domUtils'; -------------------------------------------------------------------------------- /src/scripts/components/accordion/accordion.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Host, Prop, ComponentInterface } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-accordion', 5 | styleUrl: 'accordion.scss' 6 | }) 7 | export class Accordion implements ComponentInterface { 8 | @Prop() size: 'sm' | 'md' | 'lg' = 'md'; 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | ); 16 | } 17 | } -------------------------------------------------------------------------------- /src/scripts/components/accordion/readme.md: -------------------------------------------------------------------------------- 1 | # ks-alert 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ---------- | ----------- | --------- | ----------- | 12 | | `expanded` | `expanded` | | `boolean` | `false` | 13 | | `heading` | `heading` | | `string` | `undefined` | 14 | 15 | 16 | ## Methods 17 | 18 | ### `toggleSlide() => Promise` 19 | 20 | 21 | 22 | #### Returns 23 | 24 | Type: `Promise` 25 | 26 | 27 | 28 | 29 | ## Dependencies 30 | 31 | ### Depends on 32 | 33 | - [ks-icon](../icon) 34 | 35 | ### Graph 36 | ```mermaid 37 | graph TD; 38 | ks-accordion-slide --> ks-icon 39 | style ks-accordion-slide fill:#f9f,stroke:#333,stroke-width:4px 40 | ``` 41 | 42 | ---------------------------------------------- 43 | 44 | *Built with [StencilJS](https://stenciljs.com/)* 45 | -------------------------------------------------------------------------------- /src/scripts/components/badge/badge.scss: -------------------------------------------------------------------------------- 1 | @import "../../../scss/00_Abstracts/index"; 2 | 3 | .ks-badge { 4 | display: inline-block; 5 | text-decoration: none; 6 | line-height: 1; 7 | text-align: center; 8 | white-space: nowrap; 9 | vertical-align: baseline; 10 | padding: 0.25em 0.4em; 11 | font-size: 0.75em; 12 | @include br(pill); 13 | @include shadow(xs); 14 | 15 | @each $color, $value in get-colors() { 16 | &.#{$color} { 17 | @include bg-color($color); 18 | @include b($color: $color); 19 | 20 | &.hollow { 21 | background-color: transparent; 22 | @include color($color); 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/scripts/components/badge/badge.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Prop, ComponentInterface, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-badge', 5 | styleUrl: 'badge.scss' 6 | }) 7 | export class Badge implements ComponentInterface { 8 | @Prop() color: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' | 'light' | 'dark' = 'primary'; 9 | @Prop() hollow: boolean = false; 10 | 11 | render() { 12 | let classes= { 13 | 'ks-badge': true, 14 | [`${this.color}`]: true, 15 | 'hollow': this.hollow 16 | }; 17 | return ( 18 | 19 | 20 | 21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /src/scripts/components/badge/readme.md: -------------------------------------------------------------------------------- 1 | # ks-badge 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | ----------------------------------------------------------------------------------------------- | ----------- | 12 | | `color` | `color` | | `"danger" \| "dark" \| "info" \| "light" \| "primary" \| "secondary" \| "success" \| "warning"` | `'primary'` | 13 | | `hollow` | `hollow` | | `boolean` | `false` | 14 | 15 | 16 | ---------------------------------------------- 17 | 18 | *Built with [StencilJS](https://stenciljs.com/)* 19 | -------------------------------------------------------------------------------- /src/scripts/components/breadcrumbs/breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | @import "../../../scss/00_Abstracts/index"; 2 | 3 | .ks-breadcrumbs { 4 | display: block; 5 | 6 | .slot { 7 | display: none; 8 | } 9 | 10 | .links { 11 | display: flex; 12 | flex-wrap: wrap; 13 | list-style: none; 14 | @include p(none); 15 | 16 | .breadcrumb { 17 | .link { 18 | font-weight: bold; 19 | text-decoration: none; 20 | @include font-size(sm); 21 | 22 | &:hover { 23 | text-decoration: underline; 24 | } 25 | 26 | &[aria-current="page"] { 27 | @include color(dark); 28 | @include font-size(sm); 29 | } 30 | } 31 | } 32 | 33 | .breadcrumb+.breadcrumb { 34 | @include pl(sm); 35 | 36 | &::before { 37 | display: inline-block; 38 | content: "/"; 39 | @include pr(sm); 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/scripts/components/breadcrumbs/breadcrumbs.stories.ts: -------------------------------------------------------------------------------- 1 | import { text} from '@storybook/addon-knobs'; 2 | 3 | export default { title: "Components/Breadcrumbs" }; 4 | 5 | const breadcrumbs = [ 6 | { url: 'test.com', text: ' Home' }, 7 | { url: 'test.com', text: 'Products' }, 8 | { url: 'test.com', text: 'Bacon Flavored Toothpaste' }, 9 | { url: 'test.com', text: 'Details' }, 10 | ]; 11 | 12 | export const breadcrumb = () => { 13 | const linkTag = text('link-tag', 'a'); 14 | const hrefProp = text('href-prop', 'href'); 15 | 16 | return (` 17 | ${breadcrumbs.map(x => `${x.text}`).join('')} 18 | `); 19 | }; 20 | -------------------------------------------------------------------------------- /src/scripts/components/breadcrumbs/readme.md: -------------------------------------------------------------------------------- 1 | # ks-crumb 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ----------- | ----------- | -------- | -------- | 12 | | `hrefProp` | `href-prop` | | `string` | `'href'` | 13 | | `linkTag` | `link-tag` | | `string` | `'a'` | 14 | 15 | 16 | ---------------------------------------------- 17 | 18 | *Built with [StencilJS](https://stenciljs.com/)* 19 | -------------------------------------------------------------------------------- /src/scripts/components/button/button-bar/button-bar.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, ComponentInterface, Host, Prop } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-button-bar', 5 | styleUrl: 'button-bar.scss' 6 | }) 7 | export class ButtonBar implements ComponentInterface { 8 | @Prop() stacked: boolean = false; 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | ); 16 | } 17 | } -------------------------------------------------------------------------------- /src/scripts/components/button/button-bar/readme.md: -------------------------------------------------------------------------------- 1 | # ks-button-bar 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | --------- | --------- | ----------- | --------- | ------- | 12 | | `stacked` | `stacked` | | `boolean` | `false` | 13 | 14 | 15 | ---------------------------------------------- 16 | 17 | *Built with [StencilJS](https://stenciljs.com/)* 18 | -------------------------------------------------------------------------------- /src/scripts/components/card/card-body.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, ComponentInterface, Prop, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-card-body' 5 | }) 6 | export class CardBody implements ComponentInterface { 7 | @Prop() cardTitle: string; 8 | @Prop() cardSubtitle: string; 9 | 10 | render() { 11 | return ( 12 | 13 | {(this.cardTitle || this.cardSubtitle) &&
14 | {this.cardTitle &&

{this.cardTitle}

} 15 | {this.cardSubtitle &&

{this.cardSubtitle}

} 16 |
} 17 |
18 | 19 |
20 |
21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /src/scripts/components/card/card-footer.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, ComponentInterface, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-card-footer' 5 | }) 6 | export class CardFooter implements ComponentInterface { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | } -------------------------------------------------------------------------------- /src/scripts/components/card/readme.md: -------------------------------------------------------------------------------- 1 | # ks-card 2 | 3 | 4 | 5 | 6 | 7 | 8 | ---------------------------------------------- 9 | 10 | *Built with [StencilJS](https://stenciljs.com/)* 11 | -------------------------------------------------------------------------------- /src/scripts/components/dropdown/dropdown-item.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Prop, Host, Element, Event, EventEmitter } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-dropdown-item' 5 | }) 6 | export class DropdownItem { 7 | @Element() $el: HTMLElement; 8 | 9 | @Prop() preventClose: boolean = false; 10 | 11 | @Event() closeDropdown: EventEmitter; 12 | 13 | clickHandler() { 14 | if(!this.preventClose) 15 | this.closeDropdown.emit(); 16 | } 17 | 18 | render() { 19 | return ( 20 | this.clickHandler()} class="dropdown-item"> 21 | 22 | 23 | ); 24 | } 25 | } -------------------------------------------------------------------------------- /src/scripts/components/dropdown/readme.md: -------------------------------------------------------------------------------- 1 | # ks-dropdown 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------------- | --------------- | ----------- | --------- | ------- | 12 | | `preventClose` | `prevent-close` | | `boolean` | `false` | 13 | 14 | 15 | ## Events 16 | 17 | | Event | Description | Type | 18 | | --------------- | ----------- | ------------------ | 19 | | `closeDropdown` | | `CustomEvent` | 20 | 21 | 22 | ---------------------------------------------- 23 | 24 | *Built with [StencilJS](https://stenciljs.com/)* 25 | -------------------------------------------------------------------------------- /src/scripts/components/form-field/checklist/checklist.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../scss/00_Abstracts/index"; 2 | 3 | .ks-checklist { 4 | display: inline-block; 5 | 6 | fieldset { 7 | display: inline-flex; 8 | flex-direction: column; 9 | 10 | legend { 11 | display: inline-flex; 12 | flex-direction: column; 13 | font-weight: bold; 14 | @include mb(none); 15 | 16 | .ks-tooltip { 17 | @include ml(xs); 18 | } 19 | 20 | .help-text { 21 | font-weight: normal; 22 | @include color(dark, light); 23 | @include font-size(xs); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/scripts/components/grid/column.tsx: -------------------------------------------------------------------------------- 1 | import { Component, Prop, h, Host } from '@stencil/core'; 2 | 3 | 4 | @Component({ 5 | tag: 'ks-column' 6 | }) 7 | export class Column { 8 | @Prop() position: 'start' | 'center' | 'end' | 'stretch'; 9 | 10 | render() { 11 | return ( 12 | 16 | 17 | 18 | ); 19 | } 20 | } -------------------------------------------------------------------------------- /src/scripts/components/grid/readme.md: -------------------------------------------------------------------------------- 1 | # ks-img 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ---------- | ----------- | -------------------------------------------------------------------------------------- | --------- | 12 | | `gutter` | `gutter` | | `"lg" \| "md" \| "none" \| "sm" \| "xl" \| "xs" \| "xxl" \| "xxs" \| "xxxl" \| "xxxs"` | `'sm'` | 13 | | `position` | `position` | | `"center" \| "end" \| "start" \| "stretch"` | `'start'` | 14 | 15 | 16 | ---------------------------------------------- 17 | 18 | *Built with [StencilJS](https://stenciljs.com/)* 19 | -------------------------------------------------------------------------------- /src/scripts/components/grid/row.tsx: -------------------------------------------------------------------------------- 1 | import { Component, Prop, h, Host } from '@stencil/core'; 2 | 3 | 4 | @Component({ 5 | tag: 'ks-row', 6 | styleUrl: 'grid.scss' 7 | }) 8 | export class Row { 9 | @Prop() position: 'start' | 'center' | 'end' | 'stretch' = 'start'; 10 | @Prop() gutter: 'none' | 'xxxs' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl' = 'sm'; 11 | 12 | render() { 13 | return ( 14 | 19 | 20 | 21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /src/scripts/components/icon/icon.scss: -------------------------------------------------------------------------------- 1 | @import "../../../scss/00_Abstracts/index"; 2 | 3 | .ks-icon { 4 | line-height: 1; 5 | position: relative; 6 | display: inline-block; 7 | height: 1em; 8 | width: 1em; 9 | 10 | .icon { 11 | margin: -0.25em; 12 | display: inline-block; 13 | font-size: inherit; 14 | height: 1.5em; 15 | width: 1.5em; 16 | overflow: visible; 17 | vertical-align: -0.125em; 18 | } 19 | 20 | &[icon^="loading"] { 21 | .icon { 22 | margin: 0; 23 | height: 1em; 24 | width: 1em; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icon.stories.ts: -------------------------------------------------------------------------------- 1 | import { text, select } from "@storybook/addon-knobs"; 2 | import { iconList } from './icon-list'; 3 | 4 | export default { title: 'Components/Icons' }; 5 | 6 | export const icons = () => { 7 | const icon = text('icon', 'activity'); 8 | const rotate = select('rotate', [0, 45, 90, 135, 180, 225, 270, 360, -45, -90, -135, -180, -225, -270, -360], 0); 9 | const label = text('label', ''); 10 | const labelledBy = text('labelled-by', ''); 11 | const cssClass = text('class', ''); 12 | return (`

This is some text!

`); 13 | }; 14 | 15 | export const listOfIcons = () => { 16 | const icons = Object.keys(iconList); 17 | return (`
18 | ${icons.map(x => ``).join('')} 19 |
`); 20 | } 21 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/accessible.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/activity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/alarm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/alarm_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/align_center.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/align_justified.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/align_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/align_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/arrow_down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/arrow_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/arrow_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/arrow_up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/attachment.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bar_chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/behance.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bell.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/blocks.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/blocks_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bolt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bolt_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bookmark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/bookmark_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/briefcase.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/briefcase_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/camera.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/camera_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/cart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/cart_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat_box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat_box_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat_bubble.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat_bubble_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chat_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check_octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check_shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/check_square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_down_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_down_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_left_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_left_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_right_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_right_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_up_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/chevron_up_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/clipboard_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/codepen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/collapse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/compass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/compass_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/copy_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/css3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/cube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/double_chevron_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/double_chevron_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/dribbble.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/drop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/drop_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/edit_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/ellipsis.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/email_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/email_read.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/email_read_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/expand.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/external_link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/facebook_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/facebook_like.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/file_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/filter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/filter_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/flag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/flag_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/flag_triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/flag_triangle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/flickr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/folder_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/foursquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/gear.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/gear_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/globe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/grid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/grid_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/heart_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/hexagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/hexagon_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/hide.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/hierarchy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/hierarchy_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/history.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/home_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/html5.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/info_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/kebab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/laptop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/laptop_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/lastfm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/line_chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/list_large.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/list_large_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/loading_circle_spinner.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/loading_ellipsis_pulse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/loading_ellipsis_typing.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/loading_ring_spinner.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/location.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/location_arrow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/location_arrow_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/location_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/lock_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/long_arrow_down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/long_arrow_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/long_arrow_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/long_arrow_up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/map_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/mic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/mic_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus_octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus_shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/minus_square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/mobile.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/mobile_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/monitor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/monitor_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/music.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/music_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/next_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/not_allowed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/octagon_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/octagon_warning_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/package.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pause_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/paypal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pencil.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pencil_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/phone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/phone_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pie_chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pie_chart_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/pinterest.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/play_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus_octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus_shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/plus_square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/power.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/previous.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/previous_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/print.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/print_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/question.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/redo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/refresh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/rss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/save.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/save_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/send.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/send_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/share.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/share_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/shield_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/sign_in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/sign_out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/sliders.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/sliders_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/spotify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/square_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/star_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tablet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tablet_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tag_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tiktok.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/time.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/time_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times_octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times_shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/times_square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/trash_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/triangle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/tumblr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/twitch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/undo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/unlock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/unlock_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/up_down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/user_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/user_group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/user_group_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/video.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/video_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/view.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/vimeo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_circle_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_octagon_fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/warning_square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/whatsapp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/yelp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/zoom_in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/icon/icons/zoom_out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scripts/components/image/image.scss: -------------------------------------------------------------------------------- 1 | .ks-img { 2 | display: block; 3 | 4 | img { 5 | width: 100%; 6 | height: auto; 7 | vertical-align: middle; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/scripts/components/loading/loading.scss: -------------------------------------------------------------------------------- 1 | @import "../../../scss/00_Abstracts/index"; 2 | 3 | .ks-loading { 4 | display: inline-flex; 5 | align-items: center; 6 | 7 | .ks-icon { 8 | width: 1.5em; 9 | height: 1.5em; 10 | 11 | .icon { 12 | margin: 0; 13 | } 14 | } 15 | 16 | .message { 17 | line-height: 1; 18 | @include ml(sm); 19 | } 20 | 21 | &.show-message { 22 | .spinner { 23 | display: inline-flex; 24 | align-items: center; 25 | } 26 | } 27 | } 28 | 29 | .ks-loading-overlay { 30 | cursor: wait; 31 | 32 | .content { 33 | line-height: 1; 34 | @include shadow(none, true); 35 | 36 | .ks-icon { 37 | width: 1.5em; 38 | height: 1.5em; 39 | } 40 | 41 | .show-message { 42 | flex-direction: column; 43 | align-items: center; 44 | 45 | .message { 46 | margin-top: 0.25em; 47 | @include ml(none); 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/scripts/components/loading/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Prop, Element, ComponentInterface, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-loading', 5 | styleUrl: 'loading.scss' 6 | }) 7 | export class Loading implements ComponentInterface { 8 | @Element() $el: HTMLElement; 9 | 10 | @Prop() icon: string = 'loading_circle_spinner'; 11 | @Prop() message: string = 'Loading...'; 12 | @Prop() showMessage: boolean = false; 13 | 14 | render() { 15 | let supportsSvgAnimations = !!document.createElementNS && /SVGAnimate/.test((({}).toString).call(document.createElementNS('http://www.w3.org/2000/svg', 'animate'))); 16 | 17 | return ( 18 | 19 | 20 | {this.message} 21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /src/scripts/components/menu-bar/menu-group.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Host, Prop, ComponentInterface } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-menu-group' 5 | }) 6 | export class MenuGroup implements ComponentInterface { 7 | @Prop() position: 'left' | 'right' = 'right'; 8 | 9 | render() { 10 | return ( 11 | 12 | 13 | 14 | ); 15 | } 16 | } -------------------------------------------------------------------------------- /src/scripts/components/menu-bar/menu-item.tsx: -------------------------------------------------------------------------------- 1 | import { Component, Element, h, Host, State, ComponentInterface } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-menu-item' 5 | }) 6 | export class MenuItem implements ComponentInterface { 7 | @Element() $el: HTMLElement; 8 | 9 | @State() isActive: boolean; 10 | 11 | getActiveStatus() { 12 | let $link = this.$el.querySelector('a'); 13 | 14 | let isActive = $link 15 | ? $link.getAttribute('href') === window.location.pathname 16 | : false; 17 | 18 | if(isActive) 19 | $link.setAttribute('aria-current', 'page'); 20 | 21 | return isActive; 22 | } 23 | 24 | render() { 25 | let classes = { 26 | 'menu-item': true, 27 | 'active': this.getActiveStatus() 28 | }; 29 | 30 | return ( 31 | 32 | 33 | 34 | ); 35 | } 36 | } -------------------------------------------------------------------------------- /src/scripts/components/menu-bar/menu-row.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Host, ComponentInterface } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-menu-row' 5 | }) 6 | export class MenuRow implements ComponentInterface { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | } -------------------------------------------------------------------------------- /src/scripts/components/menu-bar/readme.md: -------------------------------------------------------------------------------- 1 | # ks-menu 2 | 3 | 4 | 5 | 6 | 7 | 8 | ---------------------------------------------- 9 | 10 | *Built with [StencilJS](https://stenciljs.com/)* 11 | -------------------------------------------------------------------------------- /src/scripts/components/modal/modal-footer.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Host, ComponentInterface } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-modal-footer' 5 | }) 6 | export class Modal implements ComponentInterface { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | } -------------------------------------------------------------------------------- /src/scripts/components/modal/modal.stories.ts: -------------------------------------------------------------------------------- 1 | import { select, boolean } from '@storybook/addon-knobs'; 2 | 3 | export default { title: 'Components/Modal' }; 4 | 5 | export const playground = () => { 6 | const size = select('size', ['sm', 'md', 'lg'], 'md'); 7 | const preventClose = boolean('prevent-close', false); 8 | 9 | return (` 10 |
11 | Guess What??? 12 | 13 | michael scott 14 | 15 | Cancel 16 | Close Modal! 17 | 18 | 19 |
20 | `); 21 | }; 22 | -------------------------------------------------------------------------------- /src/scripts/components/modal/readme.md: -------------------------------------------------------------------------------- 1 | # ks-modal 2 | 3 | 4 | 5 | 6 | 7 | 8 | ---------------------------------------------- 9 | 10 | *Built with [StencilJS](https://stenciljs.com/)* 11 | -------------------------------------------------------------------------------- /src/scripts/components/progress-bar/progress-bar.stories.ts: -------------------------------------------------------------------------------- 1 | import { text, select, boolean, number } from '@storybook/addon-knobs'; 2 | 3 | export default { title: 'Components/Progress Bar' }; 4 | 5 | const types = ['primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark']; 6 | const sizes = ['xs', 'sm', 'md', 'lg']; 7 | 8 | export const playground = () => { 9 | const color = select('color', types, 'primary'); 10 | const value = number('value', 25); 11 | const size = select('size', sizes, 'md'); 12 | const description = text('description', 'Loading...'); 13 | const hideDescription = boolean('hide-description', false); 14 | const progressLabel = text('progress-label', 'Progress'); 15 | const hideProgressLabel = boolean('hide-progress-label', false); 16 | return (``); 17 | }; 18 | -------------------------------------------------------------------------------- /src/scripts/components/responsive-embed/readme.md: -------------------------------------------------------------------------------- 1 | # ks-alert 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ------------- | -------------- | ----------- | -------- | -------- | 12 | | `aspectRatio` | `aspect-ratio` | | `string` | `'16x9'` | 13 | 14 | 15 | ---------------------------------------------- 16 | 17 | *Built with [StencilJS](https://stenciljs.com/)* 18 | -------------------------------------------------------------------------------- /src/scripts/components/responsive-embed/responsive-embed.scss: -------------------------------------------------------------------------------- 1 | @use "sass:math"; 2 | @use "../../../scss/00_Abstracts/variables" as *; 3 | 4 | .ks-responsive-embed { 5 | position: relative; 6 | display: block; 7 | width: 100%; 8 | padding: 0; 9 | overflow: hidden; 10 | 11 | @each $x, $y in $responsive-embed-aspect-ratios { 12 | &.ratio-#{$x}x#{$y} { 13 | padding-top: #{(math.div($y, $x) * 100) + "%"}; 14 | } 15 | } 16 | 17 | embed, 18 | iframe, 19 | object, 20 | video { 21 | position: absolute; 22 | top: 0; 23 | bottom: 0; 24 | left: 0; 25 | width: 100%; 26 | height: 100%; 27 | border: 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/scripts/components/responsive-embed/responsive-embed.stories.ts: -------------------------------------------------------------------------------- 1 | import { text } from "@storybook/addon-knobs"; 2 | 3 | export default { title: 'Components/Responsive Embed' }; 4 | 5 | export const defaultHeading = () => { 6 | const aspectRatio = text('aspect-ratio', '16x9'); 7 | return (` 8 |
9 |

This is a test

10 | 11 | 12 | 13 |
14 | `); 15 | }; 16 | -------------------------------------------------------------------------------- /src/scripts/components/responsive-embed/responsive-embed.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Prop, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-responsive-embed', 5 | styleUrl: 'responsive-embed.scss' 6 | }) 7 | export class ResponsiveEmbed { 8 | @Prop() aspectRatio: string = '16x9'; 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/scripts/components/scroll-to-top/scroll-to-top.scss: -------------------------------------------------------------------------------- 1 | @import "../../../scss/00_Abstracts/index"; 2 | 3 | .ks-scroll-to-top { 4 | position: fixed; 5 | bottom: 0; 6 | right: 0; 7 | @include m(xl); 8 | @include z-index(xl); 9 | } 10 | -------------------------------------------------------------------------------- /src/scripts/components/side-drawer/side-drawer.stories.ts: -------------------------------------------------------------------------------- 1 | import { select } from '@storybook/addon-knobs'; 2 | 3 | export default { title: 'Components/Side Drawer' }; 4 | 5 | export const playground = () => { 6 | const size = select('size', ['sm', 'md', 'lg', 'xl'], 'sm'); 7 | const position = select('position', ['left', 'right'], 'left'); 8 | return (` 9 |
10 | Open Drawer 11 | 12 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Suscipit nihil ipsum voluptates consectetur sint voluptatum dolores molestias aut possimus, ipsa veritatis qui placeat ea ducimus sapiente atque soluta explicabo! Repellat. 13 | 14 |
15 | `); 16 | }; -------------------------------------------------------------------------------- /src/scripts/components/switch/readme.md: -------------------------------------------------------------------------------- 1 | # ks-switch 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | --------- | --------- | ----------- | --------- | ----------- | 12 | | `checked` | `checked` | | `boolean` | `false` | 13 | | `disable` | `disable` | | `boolean` | `false` | 14 | | `label` | `label` | | `string` | `undefined` | 15 | | `name` | `name` | | `string` | `undefined` | 16 | 17 | 18 | ## Events 19 | 20 | | Event | Description | Type | 21 | | --------- | ----------- | ------------------ | 22 | | `updated` | | `CustomEvent` | 23 | 24 | 25 | ---------------------------------------------- 26 | 27 | *Built with [StencilJS](https://stenciljs.com/)* 28 | -------------------------------------------------------------------------------- /src/scripts/components/switch/switch.stories.ts: -------------------------------------------------------------------------------- 1 | import { text, boolean } from "@storybook/addon-knobs"; 2 | 3 | export default { title: 'Components/Switch' }; 4 | 5 | export const playground = () => { 6 | const label = text('label', 'Show Pricing'); 7 | const checked = boolean('checked', false); 8 | const disable = boolean('disable', false); 9 | return (`
10 | 11 |
`); 12 | }; -------------------------------------------------------------------------------- /src/scripts/components/tabs/readme.md: -------------------------------------------------------------------------------- 1 | # ks-alert 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ---------- | ----------- | --------------------------------------------- | ----------- | 12 | | `align` | `align` | | `"center" \| "end" \| "justified" \| "start"` | `'start'` | 13 | | `label` | `label` | | `string` | `undefined` | 14 | | `position` | `position` | | `"bottom" \| "left" \| "right" \| "top"` | `'top'` | 15 | 16 | 17 | ---------------------------------------------- 18 | 19 | *Built with [StencilJS](https://stenciljs.com/)* 20 | -------------------------------------------------------------------------------- /src/scripts/components/tabs/tab.tsx: -------------------------------------------------------------------------------- 1 | import { Component, h, Prop, Host } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'ks-tab' 5 | }) 6 | export class Tab { 7 | @Prop() tabText: string; 8 | 9 | render() { 10 | return ( 11 | 12 | 13 | 14 | ); 15 | } 16 | } -------------------------------------------------------------------------------- /src/scripts/components/utilities/color.stories.ts: -------------------------------------------------------------------------------- 1 | export default { title: 'Utilities/Colors' }; 2 | 3 | const colors = ['primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark']; 4 | const variations = ['-lighter', '-light', '', '-dark', '-darker']; 5 | 6 | export const textColor = () => { 7 | return (`
8 | ${colors.map(c => variations.map(v => `
text-${c}${v}
`).join('')).join('')} 9 |
text-black
10 |
text-white
11 |
`); 12 | }; 13 | 14 | export const backgroundColor = () => { 15 | return (`
16 | ${colors.map(c => variations.map(v => `
bg-${c}${v}
`).join('')).join('')} 17 |
bg-black
18 |
bg-white
19 |
`); 20 | }; 21 | -------------------------------------------------------------------------------- /src/scripts/components/utilities/shadows.stories.ts: -------------------------------------------------------------------------------- 1 | export default { title: 'Utilities/Shadows' }; 2 | 3 | const shadows = ['none', 'outline', 'inner', 'xs', 'sm', 'md', 'lg', 'xl']; 4 | 5 | export const shadowDisplay = () => { 6 | return (`
7 |
8 | ${shadows.map(s => `
shadow-${s}
`).join('')} 9 |
10 |
11 | ${shadows.map(s => `
hover:shadow-${s}
`).join('')} 12 |
13 |
14 | ${shadows.map(s => `
focus:shadow-${s}
`).join('')} 15 |
16 |
`); 17 | }; 18 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/README.md: -------------------------------------------------------------------------------- 1 | # Abstracts 2 | 3 | This folder is for your style tools and helpers used across the project. Your reusable code such as global variables, functions, mixins and placeholders should be put in here. 4 | 5 | The code contained in this folder should not be code that outputs CSS directly. 6 | 7 | With larger projects you may want to break this into subdirectories like variables, functions, and mixins. Subdirectories are supported in the Clarion CLI. -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_borders.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | @import 'colors'; 3 | 4 | @function default-border($setting) { 5 | @if map-has-key($default-border, $setting) { 6 | @return map-get($default-border, $setting); 7 | } 8 | 9 | @else { 10 | @error "Invalid default b-xs value: '#{$setting}'."; 11 | } 12 | } 13 | 14 | @function border($style, $size, $color, $variant: base, $opacity: 1, $important: false) { 15 | @if($important==true) { 16 | @return $style spacing($size) split-color-list($color, $variant, $opacity) !important; 17 | } 18 | 19 | @else { 20 | @return $style spacing($size) split-color-list($color, $variant, $opacity); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_outline.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | @import 'colors'; 3 | 4 | @function default-outline($setting) { 5 | @if map-has-key($default-outline, $setting) { 6 | @return map-get($default-outline, $setting); 7 | } 8 | 9 | @else { 10 | @error "Invalid default outline value: '#{$setting}'."; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_spacing.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | @import 'strings'; 3 | 4 | @function spacing($name, $important: false) { 5 | $value: var(--ks-spacing-size-#{$name}); 6 | 7 | // This enables negative values to be used. 8 | @if(str-contains($name, "-")) { 9 | $name: str-replace($name, "-", ""); 10 | $value: calc(-1 * var(--ks-spacing-size-#{$name})); 11 | } 12 | 13 | @if($important == true) { 14 | @return $value !important; 15 | } 16 | 17 | @return $value; 18 | } 19 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_strings.scss: -------------------------------------------------------------------------------- 1 | @function str-replace($string, $search, $replace: '') { 2 | $index: str-index($string, $search); 3 | 4 | @if $index { 5 | @return str-slice($string, 1, $index - 1)+$replace+str-replace(str-slice($string, $index + str-length($search)), $search, $replace); 6 | } 7 | 8 | @return $string; 9 | } 10 | 11 | @function str-ends-with($string, $search) { 12 | @return str-slice(quote($string), (str-length($string) - str-length($search) + 1))==$search; 13 | } 14 | 15 | @function str-contains($string, $search) { 16 | @return str-index(quote($string), $search) !=null; 17 | } 18 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_transitions.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @function transition($name) { 4 | @if map-has-key($transitions, $name) { 5 | @return map-get($transitions, $name); 6 | } 7 | 8 | @else { 9 | @error "Invalid 'transition' value: '#{$name}'."; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/functions/_z-index.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @function z($name) { 4 | @if map-has-key($z-indexes, $name) { 5 | @return map-get($z-indexes, $name); 6 | } 7 | 8 | @else { 9 | @error "Invalid 'z' value: '#{$name}'."; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/index.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | @import "functions/colors"; 3 | @import "functions/outline"; 4 | @import "functions/strings"; 5 | @import "functions/z-index"; 6 | @import "functions/transitions"; 7 | @import "mixins/borders"; 8 | @import "mixins/border-radius"; 9 | @import "mixins/display"; 10 | @import "mixins/font-sizes"; 11 | @import "mixins/hover"; 12 | @import "mixins/media-queries"; 13 | @import "mixins/outline"; 14 | @import "mixins/shadows"; 15 | @import "mixins/spacing"; 16 | @import "mixins/transitions"; 17 | @import "mixins/colors"; 18 | @import 'mixins/font'; 19 | @import 'mixins/z-index'; 20 | @import 'mixins/create-css-variables'; 21 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_display.scss: -------------------------------------------------------------------------------- 1 | @mixin full-width($important: false) { 2 | @if ($important == true) { 3 | position: relative !important; 4 | left: 50% !important; 5 | right: 50% !important; 6 | width: 100vw !important; 7 | margin-left: -50vw !important; 8 | margin-right: -50vw !important; 9 | max-width: 100vw !important; 10 | } @else { 11 | position: relative; 12 | left: 50%; 13 | right: 50%; 14 | width: 100vw; 15 | margin-left: -50vw; 16 | margin-right: -50vw; 17 | max-width: 100vw; 18 | } 19 | } 20 | 21 | @mixin screen-reader-only { 22 | position: absolute !important; 23 | width: 1px !important; 24 | height: 1px !important; 25 | padding: 0 !important; 26 | margin: -1px !important; 27 | overflow: hidden !important; 28 | clip: rect(0, 0, 0, 0) !important; 29 | white-space: nowrap !important; 30 | border: 0 !important; 31 | } 32 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_font-sizes.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @mixin font-size($size, $important: false) { 4 | @if($important==true) { 5 | font-size: var(--ks-font-size-#{$size}) !important; 6 | } 7 | 8 | @else { 9 | font-size: var(--ks-font-size-#{$size}); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_font.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @mixin font($font: base, $important: false) { 4 | @if ($important == true) { 5 | font-family: var(--ks-font-#{$font}) !important; 6 | } @else { 7 | font-family: var(--ks-font-#{$font}); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | @mixin hover { 2 | &:hover { 3 | @content; 4 | } 5 | } 6 | 7 | @mixin hover-focus { 8 | 9 | &:hover, 10 | &:focus { 11 | @content; 12 | } 13 | } 14 | 15 | @mixin hover-focus-active { 16 | 17 | &:hover, 18 | &:focus, 19 | &:active { 20 | @content; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_media-queries.scss: -------------------------------------------------------------------------------- 1 | @import "../variables"; 2 | 3 | /* 4 | MEDIA QUERY 5 | 6 | Usage: @include mq(sm) {} 7 | */ 8 | @mixin mq($mq) { 9 | @if map-has-key($media-queries, $mq) { 10 | $mq-value: map-get($media-queries, $mq); 11 | 12 | @if ($mq-value == light or $mq-value == dark) { 13 | @media screen and (prefers-color-scheme: $mq-value) { 14 | @content; 15 | } 16 | } @else if ($mq-value == print) { 17 | @media print { 18 | @content; 19 | } 20 | } @else { 21 | @media screen and (max-width: ($mq-value - 1)) { 22 | @content; 23 | } 24 | } 25 | } @else { 26 | @error "Invalid media query: '#{$mq}'."; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_outline.scss: -------------------------------------------------------------------------------- 1 | @import '../functions/borders'; 2 | 3 | @mixin default-outline($important: false) { 4 | @if($important == true) { 5 | outline: var(--ks-default-outline) !important; 6 | outline-offset: var(--ks-default-outline-offset) !important; 7 | } @else { 8 | outline: var(--ks-default-outline); 9 | outline-offset: var(--ks-default-outline-offset); 10 | } 11 | } 12 | 13 | @mixin outline($style: default-outline(style), $size: default-outline(size), $offset: default-outline(offset), $color: default-outline(color), $variant: base, $opacity: 1, $important: false) { 14 | @if($important == true) { 15 | outline: $style spacing($size) split-color-list($color, $variant, $opacity) !important; 16 | outline-offset: spacing($size) !important; 17 | } @else { 18 | outline: $style spacing($size) split-color-list($color, $variant, $opacity); 19 | outline-offset: spacing($size); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_shadows.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @mixin shadow($size: sm, $important: false) { 4 | @if($important==true) { 5 | box-shadow: var(--ks-shadow-#{$size}) !important; 6 | } 7 | 8 | @else { 9 | box-shadow: var(--ks-shadow-#{$size}); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_transitions.scss: -------------------------------------------------------------------------------- 1 | @import "../variables"; 2 | 3 | @mixin transition($property: all, $speed: fast, $timing-function: ease-in-out, $important: false) { 4 | @if ($important == true) { 5 | transition: $property var(--ks-transition-#{$speed}) $timing-function !important; 6 | } @else { 7 | transition: $property var(--ks-transition-#{$speed}) $timing-function; 8 | } 9 | } -------------------------------------------------------------------------------- /src/scss/00_Abstracts/mixins/_z-index.scss: -------------------------------------------------------------------------------- 1 | @import '../variables'; 2 | 3 | @mixin z-index($size, $important: false) { 4 | @if ($important == true) { 5 | z-index: var(--ks-z-index-#{$size}) !important; 6 | } 7 | @else { 8 | z-index: var(--ks-z-index-#{$size}); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/scss/01_Base/README.md: -------------------------------------------------------------------------------- 1 | # Base 2 | 3 | This folder holds the boilerplate code for the project. You would add your reset files and typographic rules. Keep in mind that most front-end frameworks like Bootstrap and Foundation already have their own CSS resets built into their styles, so additional resets may not be necessary. -------------------------------------------------------------------------------- /src/scss/01_Base/_base.scss: -------------------------------------------------------------------------------- 1 | @import "../00_Abstracts/index"; 2 | 3 | @include create-css-variables(); 4 | 5 | * { 6 | box-sizing: border-box; 7 | 8 | &:focus { 9 | @include default-outline(); 10 | } 11 | } 12 | 13 | html, 14 | body { 15 | scroll-behavior: smooth; 16 | font-size: var(--ks-font-size-base); 17 | line-height: var(--ks-line-height-base); 18 | background-color: white; 19 | -webkit-text-size-adjust: 100%; // Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. 20 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // Change the default tap highlight to be completely transparent in iOS. 21 | @include color(dark); 22 | @include font(base); 23 | @include m(none); 24 | } 25 | -------------------------------------------------------------------------------- /src/scss/01_Base/index.scss: -------------------------------------------------------------------------------- 1 | @import 'base'; 2 | -------------------------------------------------------------------------------- /src/scss/02_Vendors/README.md: -------------------------------------------------------------------------------- 1 | # Vendors 2 | 3 | The Themes folder contains third-party themes for your website and for things like styles for plugins. This folder has been added higher in the architecture so that if you would like to create customizations, you can do so in the subsequent folders like Components, Layouts, and Pages. This will allow you to override the theme's rules without modifying the theme directly and ruining the integrity of the code. -------------------------------------------------------------------------------- /src/scss/02_Vendors/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/break-stuff/kickstand-ui/1d9beffa6fcaea9a84e58762606e24cbe905aff0/src/scss/02_Vendors/index.scss -------------------------------------------------------------------------------- /src/scss/03_Elements/README.md: -------------------------------------------------------------------------------- 1 | # Elements 2 | 3 | The Elements folder is for styling specific elements such as links, buttons, form inputs, and header tags. These are the smallest building blocks in the web and cannot be broken up into smaller parts. Browsers, by default, have their own styling in place for these elements, but tend to be inconsistent. Because of this, adding a reset to the 01_Base directory or adding one to the build pipeline is recommended. -------------------------------------------------------------------------------- /src/scss/03_Elements/_block.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | main { 4 | max-width: var(--ks-content-width); 5 | } 6 | 7 | // Reset to align with b-xs style 8 | hr { 9 | background-color: currentColor; 10 | border: 0; 11 | @include b-b(); 12 | } 13 | 14 | p { 15 | @include mt(none); 16 | @include mb(md); 17 | } 18 | 19 | summary { 20 | display: list-item; // Add the correct display in all browsers 21 | cursor: pointer; 22 | } 23 | 24 | template { 25 | display: none; // IE 11 Fix 26 | } 27 | 28 | main { 29 | display: block; // IE 11 Fix 30 | } 31 | 32 | address { 33 | font-style: normal; 34 | line-height: inherit; 35 | @include mb(md); 36 | } 37 | 38 | blockquote { 39 | margin: 0 0 1rem; 40 | } -------------------------------------------------------------------------------- /src/scss/03_Elements/_headings.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | %heading { 4 | line-height: 1.2; 5 | font-weight: bold; 6 | @include mt(none); 7 | @include mb(sm); 8 | @include font(accent); 9 | } 10 | 11 | h1 { 12 | @extend %heading; 13 | @include font-size(xxl); 14 | } 15 | 16 | h2 { 17 | @extend %heading; 18 | @include font-size(xl); 19 | } 20 | 21 | h3 { 22 | @extend %heading; 23 | @include font-size(lg); 24 | } 25 | 26 | h4 { 27 | @extend %heading; 28 | @include font-size(md); 29 | } 30 | 31 | h5 { 32 | @extend %heading; 33 | @include font-size(sm); 34 | } 35 | 36 | h6 { 37 | @extend %heading; 38 | @include font-size(xs); 39 | } 40 | -------------------------------------------------------------------------------- /src/scss/03_Elements/_images.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | figure { 4 | margin: 0 0 1rem; 5 | } 6 | 7 | 8 | // Images and content 9 | 10 | img { 11 | width: 100%; 12 | vertical-align: middle; 13 | } 14 | 15 | ks-img { 16 | display: inline-block; 17 | } 18 | 19 | // 1. Workaround for the SVG overflow bug in IE 11 is still required. 20 | // See https://github.com/twbs/bootstrap/issues/26878 21 | 22 | svg { 23 | overflow: hidden; // 1 24 | vertical-align: middle; 25 | } 26 | -------------------------------------------------------------------------------- /src/scss/03_Elements/_lists.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | ol, 4 | ul { 5 | @include pl(xxl); 6 | } 7 | 8 | ol, 9 | ul, 10 | dl { 11 | @include mt(none); 12 | @include mb(lg); 13 | } 14 | 15 | ol ol, 16 | ul ul, 17 | ol ul, 18 | ul ol { 19 | @include mb(none); 20 | } 21 | 22 | dt { 23 | } 24 | 25 | dd { 26 | @include mb(sm); 27 | @include ml(none); 28 | } 29 | -------------------------------------------------------------------------------- /src/scss/03_Elements/index.scss: -------------------------------------------------------------------------------- 1 | @import 'headings'; 2 | @import 'code'; 3 | @import 'forms'; 4 | @import 'images'; 5 | @import 'tables'; 6 | @import 'lists'; 7 | @import 'inline'; 8 | @import 'block'; 9 | -------------------------------------------------------------------------------- /src/scss/04_Components/README.md: -------------------------------------------------------------------------------- 1 | # Components 2 | 3 | Components are groups of elements. This can be things like a search box, navbar, or carousel. These groups of elements together have a specific purpose. -------------------------------------------------------------------------------- /src/scss/04_Components/index.scss: -------------------------------------------------------------------------------- 1 | // @import 'alert'; 2 | // @import 'buttons'; 3 | // @import 'badges'; 4 | // @import 'breadcrumbs'; 5 | // @import 'card'; 6 | // @import 'carousel'; 7 | // @import 'overlay'; 8 | // @import 'dropdown'; 9 | // @import 'menu-bar'; 10 | // @import 'side-drawer'; 11 | // @import 'tabs'; 12 | // @import 'progress'; 13 | // @import 'modal'; 14 | // @import 'tooltip'; 15 | // @import 'loading'; 16 | // @import 'form-field'; 17 | // @import 'icon'; 18 | -------------------------------------------------------------------------------- /src/scss/05_Layouts/README.md: -------------------------------------------------------------------------------- 1 | # Layouts 2 | 3 | This folder contains everything that takes part in laying out the web site or application. These could be containers used for organizing elements and components within them like like a header, footer, or sidebar. This could also be used for your grid-system. -------------------------------------------------------------------------------- /src/scss/05_Layouts/index.scss: -------------------------------------------------------------------------------- 1 | // @import 'grid-system'; 2 | -------------------------------------------------------------------------------- /src/scss/06_Pages/README.md: -------------------------------------------------------------------------------- 1 | # Pages 2 | 3 | This folder is for any page-specific styles, if you have any. Some sites may have custom styling for the Home page or the Contact Us page. -------------------------------------------------------------------------------- /src/scss/06_Pages/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/break-stuff/kickstand-ui/1d9beffa6fcaea9a84e58762606e24cbe905aff0/src/scss/06_Pages/index.scss -------------------------------------------------------------------------------- /src/scss/07_Utilities/README.md: -------------------------------------------------------------------------------- 1 | # Utilities 2 | 3 | The Utilities are used to create overrides or call out specific rules for an elements or components. For example, you could have a class for making text bold or aligning it to the right. The rule of thumb is to make it specific and make it simple. -------------------------------------------------------------------------------- /src/scss/07_Utilities/_animation.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | .animate { 4 | @each $key, $value in $transitions { 5 | &-#{$key} { 6 | @include transition($key); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /src/scss/07_Utilities/_lists.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | .list { 4 | &-inside { 5 | list-style-position: inside !important; 6 | } 7 | 8 | &-outside { 9 | list-style-position: outside !important; 10 | } 11 | 12 | &-decimal { 13 | list-style: decimal !important; 14 | } 15 | 16 | &-disc { 17 | list-style: disc !important; 18 | } 19 | 20 | &-lower-alpha { 21 | list-style: lower-alpha !important; 22 | } 23 | 24 | &-upper-alpha { 25 | list-style: upper-alpha !important; 26 | } 27 | 28 | &-lower-roman { 29 | list-style: lower-roman !important; 30 | } 31 | 32 | &-upper-roman { 33 | list-style: upper-roman !important; 34 | } 35 | 36 | &-initial { 37 | list-style: initial !important; 38 | } 39 | 40 | &-none { 41 | list-style: none !important; 42 | } 43 | } -------------------------------------------------------------------------------- /src/scss/07_Utilities/_mouse.scss: -------------------------------------------------------------------------------- 1 | @import "../00_Abstracts/index"; 2 | 3 | .pointer { 4 | cursor: pointer !important; 5 | } 6 | 7 | .pointer-events-none { 8 | pointer-events: none !important; 9 | } 10 | 11 | .not-allowed { 12 | cursor: not-allowed !important; 13 | } 14 | 15 | .progress { 16 | cursor: progress !important; 17 | } 18 | -------------------------------------------------------------------------------- /src/scss/07_Utilities/_shadows.scss: -------------------------------------------------------------------------------- 1 | @import '../00_Abstracts/index'; 2 | 3 | @each $key, $value in $shadows { 4 | .shadow-#{$key} { 5 | @include shadow($key, true); 6 | } 7 | 8 | .hover\:shadow-#{$key}:hover { 9 | @include shadow($key, true); 10 | } 11 | 12 | .focus\:shadow-#{$key}:focus { 13 | @include shadow($key, true); 14 | } 15 | } -------------------------------------------------------------------------------- /src/scss/07_Utilities/index.scss: -------------------------------------------------------------------------------- 1 | @import 'spacing'; 2 | @import 'layout'; 3 | @import 'text'; 4 | @import 'colors'; 5 | @import 'border'; 6 | @import 'mouse'; 7 | @import 'display'; 8 | @import 'rotation'; 9 | @import 'shadows'; 10 | @import 'position'; 11 | @import 'lists'; 12 | -------------------------------------------------------------------------------- /src/scss/styles.scss: -------------------------------------------------------------------------------- 1 | @import './00_Abstracts/index'; 2 | @import './01_Base/index'; 3 | @import './02_Vendors/index'; 4 | @import './03_Elements/index'; 5 | @import './04_Components/index'; 6 | @import './05_Layouts/index'; 7 | @import './06_Pages/index'; 8 | @import './07_Utilities/index'; -------------------------------------------------------------------------------- /stencil.config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from '@stencil/core'; 2 | import { sass } from '@stencil/sass'; 3 | import { postcss } from '@stencil/postcss'; 4 | import autoprefixer from 'autoprefixer'; 5 | import cssnano from 'cssnano'; 6 | 7 | export const config: Config = { 8 | namespace: 'kickstand-ui', 9 | outputTargets: [ 10 | { 11 | type: 'dist', 12 | esmLoaderPath: '../loader' 13 | }, 14 | { 15 | type: 'docs-readme' 16 | }, 17 | { 18 | type: 'docs-vscode', 19 | file: './dist/custom-elements.json' 20 | }, 21 | { 22 | type: 'www', 23 | serviceWorker: null, // disable service workers 24 | }, 25 | ], 26 | globalStyle: 'src/scss/styles.scss', 27 | plugins: [ 28 | sass(), 29 | postcss({ 30 | plugins: [ 31 | autoprefixer(), 32 | cssnano() 33 | ] 34 | }) 35 | ], 36 | buildEs5: 'prod', 37 | extras: { 38 | cssVarsShim: true, 39 | shadowDomShim: false 40 | } 41 | }; 42 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowUnreachableCode": false, 5 | "declaration": false, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2017" 10 | ], 11 | "moduleResolution": "node", 12 | "module": "esnext", 13 | "target": "es2017", 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "jsx": "react", 17 | "jsxFactory": "h" 18 | }, 19 | "include": [ 20 | "src", 21 | "types/jsx.d.ts" 22 | ], 23 | "exclude": [ 24 | "node_modules" 25 | ] 26 | } 27 | --------------------------------------------------------------------------------