├── .babelrc
├── .gitignore
├── LICENSE
├── README.md
├── dist
├── css
│ ├── baseweb.css
│ ├── baseweb.css.map
│ ├── baseweb.min.css
│ └── baseweb.min.css.map
└── js
│ ├── scripts.js
│ ├── scripts.js.map
│ ├── scripts.min.js
│ └── scripts.min.js.map
├── docs
├── 404.md
├── CNAME
├── LICENSE
├── _config.yml
├── _data
│ ├── icons.json
│ ├── palette-social.json
│ ├── palette.json
│ └── settings.yml
├── _includes
│ ├── asset.html
│ ├── content-ascii-dist.html
│ ├── content-ascii-src.html
│ ├── content-comments.html
│ ├── content-doc-sections.html
│ ├── content-icon.html
│ ├── content-social.html
│ ├── foot.html
│ ├── footer.html
│ ├── head.html
│ ├── head_google-analytics.html
│ ├── head_og.html
│ ├── header.html
│ ├── icons
│ │ ├── activity.svg
│ │ ├── airplay.svg
│ │ ├── alert-circle.svg
│ │ ├── alert-octagon.svg
│ │ ├── alert-triangle.svg
│ │ ├── align-center.svg
│ │ ├── align-justify.svg
│ │ ├── align-left.svg
│ │ ├── align-right.svg
│ │ ├── anchor.svg
│ │ ├── aperture.svg
│ │ ├── arrow-down-circle.svg
│ │ ├── arrow-down-left.svg
│ │ ├── arrow-down-right.svg
│ │ ├── arrow-down.svg
│ │ ├── arrow-left-circle.svg
│ │ ├── arrow-left.svg
│ │ ├── arrow-right-circle.svg
│ │ ├── arrow-right.svg
│ │ ├── arrow-up-circle.svg
│ │ ├── arrow-up-left.svg
│ │ ├── arrow-up-right.svg
│ │ ├── arrow-up.svg
│ │ ├── at-sign.svg
│ │ ├── award.svg
│ │ ├── bar-chart-2.svg
│ │ ├── bar-chart.svg
│ │ ├── battery-charging.svg
│ │ ├── battery.svg
│ │ ├── bell-off.svg
│ │ ├── bell.svg
│ │ ├── bluetooth.svg
│ │ ├── bold.svg
│ │ ├── book-open.svg
│ │ ├── book.svg
│ │ ├── bookmark.svg
│ │ ├── box.svg
│ │ ├── briefcase.svg
│ │ ├── calendar.svg
│ │ ├── camera-off.svg
│ │ ├── camera.svg
│ │ ├── cast.svg
│ │ ├── check-circle.svg
│ │ ├── check-square.svg
│ │ ├── check.svg
│ │ ├── chevron-down.svg
│ │ ├── chevron-left.svg
│ │ ├── chevron-right.svg
│ │ ├── chevron-up.svg
│ │ ├── chevrons-down.svg
│ │ ├── chevrons-left.svg
│ │ ├── chevrons-right.svg
│ │ ├── chevrons-up.svg
│ │ ├── chrome.svg
│ │ ├── circle.svg
│ │ ├── clipboard.svg
│ │ ├── clock.svg
│ │ ├── cloud-drizzle.svg
│ │ ├── cloud-lightning.svg
│ │ ├── cloud-off.svg
│ │ ├── cloud-rain.svg
│ │ ├── cloud-snow.svg
│ │ ├── cloud.svg
│ │ ├── code.svg
│ │ ├── codepen.svg
│ │ ├── command.svg
│ │ ├── compass.svg
│ │ ├── copy.svg
│ │ ├── corner-down-left.svg
│ │ ├── corner-down-right.svg
│ │ ├── corner-left-down.svg
│ │ ├── corner-left-up.svg
│ │ ├── corner-right-down.svg
│ │ ├── corner-right-up.svg
│ │ ├── corner-up-left.svg
│ │ ├── corner-up-right.svg
│ │ ├── cpu.svg
│ │ ├── credit-card.svg
│ │ ├── crop.svg
│ │ ├── crosshair.svg
│ │ ├── database.svg
│ │ ├── delete.svg
│ │ ├── disc.svg
│ │ ├── dollar-sign.svg
│ │ ├── download-cloud.svg
│ │ ├── download.svg
│ │ ├── droplet.svg
│ │ ├── edit-2.svg
│ │ ├── edit-3.svg
│ │ ├── edit.svg
│ │ ├── external-link.svg
│ │ ├── eye-off.svg
│ │ ├── eye.svg
│ │ ├── facebook.svg
│ │ ├── fast-forward.svg
│ │ ├── feather.svg
│ │ ├── file-minus.svg
│ │ ├── file-plus.svg
│ │ ├── file-text.svg
│ │ ├── file.svg
│ │ ├── film.svg
│ │ ├── filter.svg
│ │ ├── flag.svg
│ │ ├── folder-minus.svg
│ │ ├── folder-plus.svg
│ │ ├── folder.svg
│ │ ├── git-branch.svg
│ │ ├── git-commit.svg
│ │ ├── git-merge.svg
│ │ ├── git-pull-request.svg
│ │ ├── github.svg
│ │ ├── gitlab.svg
│ │ ├── globe.svg
│ │ ├── grid.svg
│ │ ├── hard-drive.svg
│ │ ├── hash.svg
│ │ ├── headphones.svg
│ │ ├── heart.svg
│ │ ├── help-circle.svg
│ │ ├── home.svg
│ │ ├── image.svg
│ │ ├── inbox.svg
│ │ ├── info.svg
│ │ ├── instagram.svg
│ │ ├── italic.svg
│ │ ├── layers.svg
│ │ ├── layout.svg
│ │ ├── life-buoy.svg
│ │ ├── link-2.svg
│ │ ├── link.svg
│ │ ├── linkedin.svg
│ │ ├── list.svg
│ │ ├── loader.svg
│ │ ├── lock.svg
│ │ ├── log-in.svg
│ │ ├── log-out.svg
│ │ ├── mail.svg
│ │ ├── map-pin.svg
│ │ ├── map.svg
│ │ ├── maximize-2.svg
│ │ ├── maximize.svg
│ │ ├── menu.svg
│ │ ├── message-circle.svg
│ │ ├── message-square.svg
│ │ ├── mic-off.svg
│ │ ├── mic.svg
│ │ ├── minimize-2.svg
│ │ ├── minimize.svg
│ │ ├── minus-circle.svg
│ │ ├── minus-square.svg
│ │ ├── minus.svg
│ │ ├── monitor.svg
│ │ ├── moon.svg
│ │ ├── more-horizontal.svg
│ │ ├── more-vertical.svg
│ │ ├── move.svg
│ │ ├── music.svg
│ │ ├── navigation-2.svg
│ │ ├── navigation.svg
│ │ ├── octagon.svg
│ │ ├── package.svg
│ │ ├── paperclip.svg
│ │ ├── pause-circle.svg
│ │ ├── pause.svg
│ │ ├── percent.svg
│ │ ├── phone-call.svg
│ │ ├── phone-forwarded.svg
│ │ ├── phone-incoming.svg
│ │ ├── phone-missed.svg
│ │ ├── phone-off.svg
│ │ ├── phone-outgoing.svg
│ │ ├── phone.svg
│ │ ├── pie-chart.svg
│ │ ├── play-circle.svg
│ │ ├── play.svg
│ │ ├── plus-circle.svg
│ │ ├── plus-square.svg
│ │ ├── plus.svg
│ │ ├── pocket.svg
│ │ ├── power.svg
│ │ ├── printer.svg
│ │ ├── radio.svg
│ │ ├── refresh-ccw.svg
│ │ ├── refresh-cw.svg
│ │ ├── repeat.svg
│ │ ├── rewind.svg
│ │ ├── rotate-ccw.svg
│ │ ├── rotate-cw.svg
│ │ ├── rss.svg
│ │ ├── save.svg
│ │ ├── scissors.svg
│ │ ├── search.svg
│ │ ├── send.svg
│ │ ├── server.svg
│ │ ├── settings.svg
│ │ ├── share-2.svg
│ │ ├── share.svg
│ │ ├── shield-off.svg
│ │ ├── shield.svg
│ │ ├── shopping-bag.svg
│ │ ├── shopping-cart.svg
│ │ ├── shuffle.svg
│ │ ├── sidebar.svg
│ │ ├── skip-back.svg
│ │ ├── skip-forward.svg
│ │ ├── slack.svg
│ │ ├── slash.svg
│ │ ├── sliders.svg
│ │ ├── smartphone.svg
│ │ ├── speaker.svg
│ │ ├── square.svg
│ │ ├── star.svg
│ │ ├── stop-circle.svg
│ │ ├── sun.svg
│ │ ├── sunrise.svg
│ │ ├── sunset.svg
│ │ ├── tablet.svg
│ │ ├── tag.svg
│ │ ├── target.svg
│ │ ├── terminal.svg
│ │ ├── thermometer.svg
│ │ ├── thumbs-down.svg
│ │ ├── thumbs-up.svg
│ │ ├── toggle-left.svg
│ │ ├── toggle-right.svg
│ │ ├── trash-2.svg
│ │ ├── trash.svg
│ │ ├── trending-down.svg
│ │ ├── trending-up.svg
│ │ ├── triangle.svg
│ │ ├── truck.svg
│ │ ├── tv.svg
│ │ ├── twitter.svg
│ │ ├── type.svg
│ │ ├── umbrella.svg
│ │ ├── underline.svg
│ │ ├── unlock.svg
│ │ ├── upload-cloud.svg
│ │ ├── upload.svg
│ │ ├── user-check.svg
│ │ ├── user-minus.svg
│ │ ├── user-plus.svg
│ │ ├── user-x.svg
│ │ ├── user.svg
│ │ ├── users.svg
│ │ ├── video-off.svg
│ │ ├── video.svg
│ │ ├── voicemail.svg
│ │ ├── volume-1.svg
│ │ ├── volume-2.svg
│ │ ├── volume-x.svg
│ │ ├── volume.svg
│ │ ├── watch.svg
│ │ ├── wifi-off.svg
│ │ ├── wifi.svg
│ │ ├── wind.svg
│ │ ├── x-circle.svg
│ │ ├── x-square.svg
│ │ ├── x.svg
│ │ ├── zap-off.svg
│ │ ├── zap.svg
│ │ ├── zoom-in.svg
│ │ └── zoom-out.svg
│ ├── nav-posts.html
│ ├── nav.html
│ ├── sidebar.html
│ ├── svg
│ │ ├── ill-flexible.svg
│ │ ├── ill-framework.svg
│ │ ├── ill-library.svg
│ │ ├── social-dribbble.svg
│ │ ├── social-facebook.svg
│ │ ├── social-github.svg
│ │ ├── social-google.svg
│ │ ├── social-twitter.svg
│ │ └── symbols.svg
│ ├── widget-menu-children.html
│ ├── widget-menu-sitemap.html
│ └── widget-menu.html
├── _layouts
│ ├── compress.html
│ ├── default.html
│ ├── home.html
│ ├── page.html
│ └── post.html
├── _posts
│ ├── 2016-11-02-baseweb-and-documentation-reboot.md
│ ├── 2017-01-20-exploring-tabs.md
│ ├── 2017-03-07-overriding-variable-maps-with-sass.md
│ ├── 2017-04-07-tooltips-have-arrived.md
│ ├── 2017-07-14-house-cleaning.md
│ ├── 2017-08-05-the-javascript-update.md
│ └── 2017-10-16-the-modifiers-update.md
├── assets
│ └── posts
│ │ ├── 2017-01-20-exploring-tabs
│ │ └── illustration-tabs.jpg
│ │ └── 2017-10-16-the-modifiers-update
│ │ └── illustration-modifiers.jpg
├── blog
│ └── index.html
├── dist
│ ├── css
│ │ ├── baseweb.css
│ │ ├── baseweb.css.map
│ │ ├── baseweb.min.css
│ │ └── baseweb.min.css.map
│ ├── img
│ │ ├── baseweb-box-black.svg
│ │ ├── baseweb-box-white.svg
│ │ ├── baseweb-hori-black.svg
│ │ ├── baseweb-hori-white.svg
│ │ ├── baseweb-og-image.jpg
│ │ ├── baseweb-vert-black.svg
│ │ ├── baseweb-vert-white.svg
│ │ ├── example-01.jpg
│ │ ├── example-02.jpg
│ │ ├── example-03.jpg
│ │ └── favicon.png
│ └── js
│ │ ├── baseweb.js
│ │ ├── baseweb.js.map
│ │ ├── baseweb.min.js
│ │ └── baseweb.min.js.map
├── docs
│ ├── blocks
│ │ ├── badges.md
│ │ ├── breadcrumbs.md
│ │ ├── button-groups.md
│ │ ├── dropdowns.md
│ │ ├── index.md
│ │ ├── notices.md
│ │ ├── offcanvas.md
│ │ ├── tabs.md
│ │ └── tooltips.md
│ ├── core
│ │ ├── functions.md
│ │ ├── grid.md
│ │ ├── index.md
│ │ ├── media.md
│ │ ├── mixins.md
│ │ ├── palette.md
│ │ └── settings.md
│ ├── custom
│ │ └── index.md
│ ├── elements
│ │ ├── base.md
│ │ ├── blockquotes.md
│ │ ├── buttons.md
│ │ ├── chips.md
│ │ ├── code.md
│ │ ├── forms.md
│ │ ├── icons.md
│ │ ├── images.md
│ │ ├── index.md
│ │ ├── lists.md
│ │ ├── rules.md
│ │ ├── tables.md
│ │ ├── typography.md
│ │ └── videos.md
│ ├── index.md
│ └── javascript
│ │ ├── dismissible.md
│ │ ├── dropdowns.md
│ │ ├── index.md
│ │ ├── offcanvas.md
│ │ ├── tabs.md
│ │ └── utility.md
├── get-started
│ ├── build-scripts.md
│ ├── expanding.md
│ ├── index.md
│ └── templates.md
├── index.md
└── src
│ ├── img
│ ├── baseweb-box-black.svg
│ ├── baseweb-box-white.svg
│ ├── baseweb-hori-black.svg
│ ├── baseweb-hori-white.svg
│ ├── baseweb-og-image.jpg
│ ├── baseweb-vert-black.svg
│ ├── baseweb-vert-white.svg
│ ├── example-01.jpg
│ ├── example-02.jpg
│ ├── example-03.jpg
│ └── favicon.png
│ ├── js
│ ├── jquery.docready.js
│ ├── jquery.function.js
│ ├── jquery.sticky.js
│ └── svgxuse.js
│ └── scss
│ ├── baseweb.scss
│ ├── blocks
│ └── _nav-posts.scss
│ ├── custom
│ ├── _custom.scss
│ ├── _docs-demos.scss
│ ├── _docs-icons.scss
│ ├── _docs-swatches.scss
│ └── _overrides.scss
│ └── elements
│ ├── _code-highlight.scss
│ └── _lists-ascii.scss
├── gulpfile.babel.js
├── package-lock.json
├── package.json
├── src
├── js
│ ├── baseweb.js
│ ├── dismissible.js
│ ├── dropdowns.js
│ ├── offcanvas.js
│ ├── tabs.js
│ └── utility.js
└── scss
│ ├── _baseweb-blocks.scss
│ ├── _baseweb-core.scss
│ ├── _baseweb-elements.scss
│ ├── baseweb.scss
│ ├── blocks
│ ├── _badges.scss
│ ├── _breadcrumbs.scss
│ ├── _button-groups.scss
│ ├── _dropdowns.scss
│ ├── _notices.scss
│ ├── _offcanvas.scss
│ ├── _tabs.scss
│ └── _tooltips.scss
│ ├── core
│ ├── _colophon.scss
│ ├── _functions.scss
│ ├── _grid.scss
│ ├── _media.scss
│ ├── _mixins.scss
│ ├── _palette.scss
│ └── _settings.scss
│ ├── custom
│ ├── _custom.scss
│ └── _overrides.scss
│ └── elements
│ ├── _base.scss
│ ├── _blockquotes.scss
│ ├── _buttons.scss
│ ├── _chips.scss
│ ├── _code.scss
│ ├── _forms.scss
│ ├── _icons.scss
│ ├── _images.scss
│ ├── _lists.scss
│ ├── _rules.scss
│ ├── _tables.scss
│ ├── _typography.scss
│ └── _videos.scss
├── tasks
├── _config.js
├── feather.js
├── img.js
├── scripts.js
├── styles.js
├── svg.js
└── symbols.js
└── yarn.lock
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"]
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled source #
2 | ###################
3 | *.com
4 | *.class
5 | *.dll
6 | *.exe
7 | *.o
8 | *.so
9 |
10 | # Packages #
11 | ############
12 | # it's better to unpack these files and commit the raw source
13 | # git has its own built in compression methods
14 | *.7z
15 | *.dmg
16 | *.gz
17 | *.iso
18 | *.jar
19 | *.rar
20 | *.tar
21 | *.zip
22 |
23 | # Logs and databases #
24 | ######################
25 | *.log
26 | *.sql
27 | *.sqlite
28 |
29 | # OS generated files #
30 | ######################
31 | .DS_Store
32 | .DS_Store?
33 | ._*
34 | .Spotlight-V100
35 | .Trashes
36 | ehthumbs.db
37 | Thumbs.db
38 |
39 | # Directories #
40 | ###############
41 | bower_components
42 | node_modules
43 | .sass-cache/
44 |
45 | # Jekyll Stuff #
46 | ################
47 | docs/_site
48 | docs/.jekyll-metadata
49 |
50 | # Ignore ruby files #
51 | #####################
52 | .ruby-version
53 | .bundle
54 | vendor/cache
55 | vendor/bundle
56 | gh_token
57 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Sebastian Nitu (http://sebnitu.com)
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
13 | all 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
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BaseWeb
2 |
3 | [](https://www.npmjs.com/package/baseweb)
4 | [](https://david-dm.org/sebnitu/baseweb?type=dev)
5 |
6 | ## About
7 | [BaseWeb](http://getbaseweb.com/) is a fresh SCSS (Sassy CSS) front-end development tool that can be used as a framework or library. It's built to help keep your projects simple, organized and responsive.
8 |
9 | ## Documentation
10 | Documentation can be found at [http://getbaseweb.com/](http://getbaseweb.com/). A copy of the documentation are included with this repository. If you see any errors or problems with the docs, please feel free to open an issue ticket and I'll do my best to get things fixed. BaseWeb docs are built with [Jekyll](https://jekyllrb.com/).
11 |
12 | ## Copyright and License
13 |
14 | BaseWeb and BaseWeb documentation copyright (c) 2020 [Sebastian Nitu](http://sebnitu.com). BaseWeb is released under the [MIT license](https://github.com/sebnitu/BaseWeb/blob/master/LICENSE) and BaseWeb documentation is released under [Creative Commons](https://github.com/sebnitu/BaseWeb/blob/master/docs/LICENSE).
15 |
--------------------------------------------------------------------------------
/docs/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "404"
3 | permalink: /404.html
4 | ---
5 |
6 | The file you've requested was not found.
7 | Please check that the URL you're requesting is correct.
8 |
--------------------------------------------------------------------------------
/docs/CNAME:
--------------------------------------------------------------------------------
1 | getbaseweb.com
--------------------------------------------------------------------------------
/docs/_config.yml:
--------------------------------------------------------------------------------
1 | # Server settings
2 | ###
3 |
4 | host: localhost
5 | port: 8020
6 | baseurl: '' # subpath of your site, e.g. /blog
7 | url: 'https://getbaseweb.com' # base hostname & protocol for your site
8 |
9 | # Site details
10 | ###
11 |
12 | title: BaseWeb
13 | version: 3.0.6
14 | description: "A light UI component library built to make web projects faster, flexible and easier to maintain."
15 | email: me@sebnitu.com
16 | repository: sebnitu/BaseWeb
17 |
18 | # Build settings
19 | ###
20 |
21 | permalink: pretty
22 | plugins:
23 | - jekyll-feed
24 | exclude:
25 | - node_modules
26 | - src
27 | - Gemfile
28 | - Gemfile.lock
29 | - gulpfile.babel.js
30 | - package-lock.json
31 | - package.json
32 | - readme.md
33 |
34 | # Defaults
35 | defaults:
36 | - scope:
37 | path: ''
38 | type: 'posts'
39 | values:
40 | category: blog
41 |
42 | # Theme settings
43 | ###
44 |
45 | # Third-party
46 | google_analytics: UA-5911557-6
47 |
--------------------------------------------------------------------------------
/docs/_data/palette-social.json:
--------------------------------------------------------------------------------
1 | {
2 | "twitter" : "#00aced",
3 | "facebook" : "#3b5998",
4 | "google" : "#dd4b39",
5 | "googleplus" : "#dd4b39",
6 | "pinterest" : "#cb2027",
7 | "linkedin" : "#007bb6",
8 | "youtube" : "#bb0000",
9 | "vimeo" : "#1ab7ea",
10 | "tumblr" : "#32506d",
11 | "instagram" : "#bc2a8d",
12 | "flickr" : "#ff0084",
13 | "dribbble" : "#ea4c89",
14 | "quora" : "#a82400",
15 | "foursquare" : "#0072b1",
16 | "forrst" : "#5B9A68",
17 | "vk" : "#45668e",
18 | "wordpress" : "#21759b",
19 | "stumbleupon" : "#EB4823",
20 | "yahoo" : "#7B0099",
21 | "blogger" : "#fb8f3d",
22 | "soundcloud" : "#ff3a00"
23 | }
24 |
--------------------------------------------------------------------------------
/docs/_data/settings.yml:
--------------------------------------------------------------------------------
1 | # Theme Settings
2 | render:
3 | fast: false
4 |
--------------------------------------------------------------------------------
/docs/_includes/asset.html:
--------------------------------------------------------------------------------
1 | {%- capture type -%}
2 | {%- if page.layout == "post" -%}
3 | posts
4 | {%- else -%}
5 | {%- unless page.collection or include.context.collection -%}
6 | pages
7 | {%- endunless -%}
8 | {%- endif -%}
9 | {%- endcapture -%}
10 |
11 | {%- capture context -%}
12 | {%- if page.layout == "post" -%}
13 | {{ page.path | split:"/" | last | split:"." | first }}
14 | {%- else -%}
15 | {%- if page.collection -%}
16 | {{ page.path | split:"." | first | remove_first: "_" }}
17 | {%- elsif include.context -%}
18 | {{ include.context.path | split:"." | first | remove_first: "_" }}
19 | {%- else -%}
20 | {{ page.path | split:"." | first }}
21 | {%- endif -%}
22 | {%- endif -%}
23 | {%- endcapture -%}
24 |
25 | {%- capture fin -%}/assets/{{ type }}/{{ context }}/{{ include.file }}{%- endcapture -%}
26 |
27 | {{ fin | replace: '//', '/' | relative_url }}
--------------------------------------------------------------------------------
/docs/_includes/content-ascii-dist.html:
--------------------------------------------------------------------------------
1 |
© {{ 'now' | date: "%Y" }} {{ site.author.name }}. All rights reserved.
6 | 7 | 8 | {% include content-icon.html icon="arrow-up" %} 9 | 10 | -------------------------------------------------------------------------------- /docs/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {%- if jekyll.environment == 'production' and site.google_analytics -%} 6 | {%- include head_google-analytics.html -%} 7 | {%- endif -%} 8 | 9 | {%- include head_og.html -%} 10 | 11 | 12 | {%- feed_meta -%} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {%- if page.include.css -%} 21 | {%- for file in page.include.css -%} 22 | 23 | {%- endfor -%} 24 | {%- endif -%} 25 | -------------------------------------------------------------------------------- /docs/_includes/head_google-analytics.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /docs/_includes/head_og.html: -------------------------------------------------------------------------------- 1 | {%- capture title -%} 2 | {%- if page.title == 'Home' -%} 3 | {{ site.title }} 4 | {%- else -%} 5 | {{ page.title }} 6 | {%- endif -%} 7 | {%- endcapture -%} 8 | 9 |18 | It's simple 19 |
20 |News, announcements and all things related to BaseWeb and front-end development. Grab the RSS feed and don't miss a thing!
13 |11 |16 | ``` 17 | 18 |...
12 | 15 |
20 |25 |"The internet could be a very positive step towards education, organization and participation in a meaningful society."
21 | 24 |
` and `` HTML elements are primarily used for displaying computer recognized programs or code. BaseWeb comes with some predefined styles for both inline code markup and blocks of code.
8 |
9 | ## <code>
10 |
11 | Inline code primarily appear in small fragments within text blocks. BaseWeb styles them so that they are easy to recognize and parse in that context.
12 |
13 | ```html
14 | ...
15 | ```
16 |
17 |
18 | Here is an example variable: var example = 'This is a test';
19 |
20 |
21 | ## <pre>
22 |
23 | Code blocks are larger sections of code that utilize the combination of a `` element to retain preformatted text, in which structure is represented by typographic conventions rather than by elements.
24 |
25 | ```html
26 | ...
27 | ```
28 |
29 |
30 | ```js
31 | var new = BaseWeb;
32 |
33 | class BaseWeb() {
34 | desc: a fresh front-end development framework
35 | }
36 | ```
37 |
38 |
--------------------------------------------------------------------------------
/docs/docs/elements/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Elements
4 | order: 3
5 | link:
6 | class: 'toggle'
7 | url: '/docs/elements/base/'
8 | ---
9 |
--------------------------------------------------------------------------------
/docs/docs/elements/rules.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: "Rules"
4 | order: 9
5 | ---
6 |
7 | In HTML, the horizontal rule element (`
`) represents a paragraph-level thematic break. BaseWeb provides some very basic and subtle styles for this element along with a few stylistic class modifiers.
8 |
9 | ```html
10 |
11 | ```
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | ### .dotted
22 |
23 | Uses the dotted border style property to created a dotted rule.
24 |
25 | ```html
26 |
27 | ```
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | ### .dashed
38 |
39 | Uses the dashed border style property to created a dashed rule.
40 |
41 | ```html
42 |
43 | ```
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | ### .double
54 |
55 | Uses the double border style property to created a double bordered rule.
56 |
57 | ```html
58 |
59 | ```
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/docs/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Documentation
4 | order: 2
5 | ---
6 |
7 | BaseWeb documentation is split into five parts, each representing a distinct section of it's architecture. Below is an overview of what these parts prepresent and how to use/customize them. Need a quick guide on how to install and work with BaseWeb? check out the [get started]({{ site.url }}{{ site.baseurl }}/get-started/) guide.
8 |
9 | {% include content-doc-sections.html %}
10 |
--------------------------------------------------------------------------------
/docs/docs/javascript/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: JavaScript
4 | order: 6
5 | ---
6 |
7 | BaseWeb JavaScript is written without any plugins or frameworks (also known as "vanilla JavaScript"), so it works right out of the box. This section of the documentation highlights the global utility object as well as any abstracted JavaScript components with common behaviors. All other component specific scripts are documented in their respective sections.
8 |
9 | BaseWeb includes JS components through `baseweb.js` and by default includes everything. It's possible to use any combination of JS components as long as you include `utility.js` at minimum. Don't forget to initialize the components you want to use:
10 |
11 | ```js
12 | // Initialize BaseWeb components
13 | dismissible.init()
14 | dropdowns.init()
15 | tabs.init()
16 | offcanvas.init()
17 | ```
18 |
19 | ## Browser Support
20 |
21 | BaseWeb scripts make heavy use of ECMAScript 5 (more commonly known as ES5) methods and APIs.
22 | That generally means browser support begins with IE9 and above. For further browser support, consider using [polyfill.io](https://polyfill.io/v2/docs/).
23 |
24 | ```html
25 |
26 | ```
27 |
--------------------------------------------------------------------------------
/docs/get-started/expanding.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Expanding
4 | order: 2
5 | ---
6 |
7 |
8 | The expanding BaseWeb documentation is still being written and may not currently be up to date or contain all relevant information. Please check back again soon.
9 |
10 |
11 | Expanding BaseWeb is simple. To make a new element or block component, simply create a SCSS file with in the appropriate directory. You can structure your custom SCSS files in any way you like, but here is an example to help get you started. This will allow you to take full advantage of BaseWeb's features and keep it consistent with the other component:
12 |
13 | ```scss
14 | // Set file variable
15 | $filename: 'scss/custom/_COMPONENT.scss';
16 |
17 | ////////////////////////////////////////////////////////////////////////////////
18 | // @COMPONENT Map
19 | ////////////////////////////////////////////////////////////////////////////////
20 |
21 | $COMPONENT: (
22 | 'classes' : true,
23 | 'example' : 'something'
24 | ) !default;
25 |
26 | // Extend default component map with overrides if they exist
27 | @if variable-exists(override) {
28 | @if (map-has-key($override, 'COMPONENT') == true) {
29 | $COMPONENT: map-extend($COMPONENT, map-get($override, 'COMPONENT'), true);
30 | }
31 | }
32 |
33 | ////////////////////////////////////////////////////////////////////////////////
34 | // @COMPONENT Mixins
35 | ////////////////////////////////////////////////////////////////////////////////
36 |
37 | // COMPONENT mixin name
38 | // Description...
39 | // @param $options
40 | // @type map
41 | // @default $COMPONENT map
42 | @mixin COMPONENT-mixin-name($options: ()) {
43 | $o: map-merge($COMPONENT, $options);
44 | // Your mixin code here...
45 | }
46 |
47 | // Check if we should output modifier classes
48 | @if (map-get($COMPONENT, 'classes') == true) {
49 | /*==============================================================================
50 | @COMPONENT - #{$filename}
51 | ==============================================================================*/
52 |
53 | // Your styles here...
54 |
55 | } // endif classes
56 | ```
57 |
--------------------------------------------------------------------------------
/docs/src/img/baseweb-box-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
16 |
--------------------------------------------------------------------------------
/docs/src/img/baseweb-box-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
16 |
--------------------------------------------------------------------------------
/docs/src/img/baseweb-og-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sebnitu/BaseWeb/e34bbedea78e1a27988e2516c431191923a054dd/docs/src/img/baseweb-og-image.jpg
--------------------------------------------------------------------------------
/docs/src/img/example-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sebnitu/BaseWeb/e34bbedea78e1a27988e2516c431191923a054dd/docs/src/img/example-01.jpg
--------------------------------------------------------------------------------
/docs/src/img/example-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sebnitu/BaseWeb/e34bbedea78e1a27988e2516c431191923a054dd/docs/src/img/example-02.jpg
--------------------------------------------------------------------------------
/docs/src/img/example-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sebnitu/BaseWeb/e34bbedea78e1a27988e2516c431191923a054dd/docs/src/img/example-03.jpg
--------------------------------------------------------------------------------
/docs/src/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sebnitu/BaseWeb/e34bbedea78e1a27988e2516c431191923a054dd/docs/src/img/favicon.png
--------------------------------------------------------------------------------
/docs/src/js/jquery.function.js:
--------------------------------------------------------------------------------
1 | /**
2 | * jquery.function.js
3 | * A place to store all your project specific JavaScript functions
4 | *
5 | * @author Sebastian Nitu
6 | * @url https://github.com/sebnitu/BaseWeb
7 | * @url http://sebnitu.com
8 | */
9 |
10 | // Source: http://stackoverflow.com/questions/1740700/how-to-get-hex-color-value-rather-than-rgb-value
11 | var hexDigits = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
12 |
13 | function hex(x) {
14 | return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
15 | }
16 |
17 | //Function to convert hex format to a rgb color
18 | function rgb2hex(rgb) {
19 | rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
20 | // I removed the `'#' +` from the return
21 | return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
22 | }
23 |
24 | // Source: https://24ways.org/2010/calculating-color-contrast
25 | function getContrastYIQ(hexcolor) {
26 | var r = parseInt(hexcolor.substr(0,2),16);
27 | var g = parseInt(hexcolor.substr(2,2),16);
28 | var b = parseInt(hexcolor.substr(4,2),16);
29 | var yiq = ((r*299)+(g*587)+(b*114))/1000;
30 | // Range is between 0 and 255. 128 is the 50% mark. My pref is 170 (2/3 of 255)
31 | return (yiq >= 170) ? 'text-dark' : '';
32 | }
33 |
--------------------------------------------------------------------------------
/docs/src/scss/baseweb.scss:
--------------------------------------------------------------------------------
1 | // Core Before [Required]
2 | @import "baseweb-core";
3 |
4 | // Overrides
5 | @import "custom/overrides";
6 |
7 | // Elements
8 | @import "baseweb-elements";
9 |
10 | // Blocks
11 | @import "baseweb-blocks";
12 |
13 | // Custom Elements
14 | @import "elements/lists-ascii";
15 | @import "elements/code-highlight";
16 |
17 | // Custom Blocks
18 | @import "blocks/nav-posts";
19 |
20 | // Custom
21 | @import "custom/docs-demos";
22 | @import "custom/docs-swatches";
23 | @import "custom/docs-icons";
24 | @import "custom/custom";
25 |
--------------------------------------------------------------------------------
/docs/src/scss/blocks/_nav-posts.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/custom/_nav-posts.scss';
3 |
4 | /*==============================================================================
5 | @Nav Posts - #{$filename}
6 | ==============================================================================*/
7 |
8 | .nav-posts {
9 | margin: 2em 0;
10 | display: flex;
11 | align-items: center;
12 | justify-content: space-between;
13 | flex-direction: column;
14 |
15 | a {
16 | position: relative;
17 | display: flex;
18 | align-items: center;
19 | justify-content: flex-start;
20 | width: 100%;
21 | padding: 1em;
22 | border: 1px solid rgba($black, 0.1);
23 | border-radius: $border-radius;
24 | text-align: left;
25 | white-space: normal;
26 | transition: $transition;
27 |
28 | &:hover {
29 | border-color: map-fetch($anchors, 'hover', 'color');
30 | }
31 |
32 | .icon {
33 | flex: 0 0 auto;
34 | margin: 0 0.75em 0 0;
35 | font-size: 1.5rem;
36 | line-height: 1em;
37 | }
38 | }
39 | a + a {
40 | margin-top: 1em;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/docs/src/scss/custom/_docs-icons.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/custom/_docs-icons.scss';
3 |
4 | /*==============================================================================
5 | @Docs Icons - #{$filename}
6 | ==============================================================================*/
7 |
8 | .icons-listing {
9 | display: grid;
10 | grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
11 | grid-gap: 1rem;
12 | margin: 1em 0;
13 |
14 | .icon-item {
15 | margin: 0;
16 | padding: 1em 1.5em;
17 | border-radius: $border-radius;
18 | transition: $transition;
19 | }
20 | .icon-item:not(.button) {
21 | background: $bg-color;
22 | }
23 |
24 | .icon {
25 | font-size: 1.5em;
26 | margin-right: 0.5em;
27 | vertical-align: middle;
28 | }
29 | code {
30 | font-size: px-to-em(14px);
31 | color: $color-light;
32 | transition: $transition;
33 | }
34 |
35 | .icon-item:not(.button):hover {
36 | background-color: darken($bg-color, 5%);
37 | code {
38 | color: $color;
39 | }
40 | }
41 | }
42 |
43 | @include media-min('small') {
44 | .icons-listing {
45 | flex-direction: row;
46 | .icon-item {
47 | padding: 1.5em 2em;
48 | }
49 | }
50 | }
51 |
52 | @include media-min('medium') {
53 | .icons-listing {
54 | margin: 2em 0;
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/docs/src/scss/custom/_overrides.scss:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // @Override Map
3 | ////////////////////////////////////////////////////////////////////////////////
4 |
5 | // This is where we define all global, element and component map overrides
6 | $override: (
7 | 'offcanvas': (
8 | 'class-aside-id': 'oc-aside-nav-mobile',
9 | 'transition': 'slide-in-right',
10 | 'background-content' : $bg-color,
11 | )
12 | );
13 |
--------------------------------------------------------------------------------
/gulpfile.babel.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 |
3 | import styles, { styles_watch, styles_clean } from './tasks/styles'
4 | import scripts, { scripts_watch, scripts_clean } from './tasks/scripts'
5 |
6 | const clean = gulp.parallel(
7 | styles_clean,
8 | scripts_clean
9 | )
10 |
11 | const watch = gulp.parallel(
12 | styles_watch,
13 | scripts_watch
14 | )
15 |
16 | const build = gulp.parallel(
17 | styles,
18 | scripts
19 | )
20 |
21 | export {
22 | styles,
23 | styles_clean,
24 | scripts,
25 | scripts_clean,
26 | clean,
27 | watch
28 | }
29 |
30 | export default build
31 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "baseweb",
3 | "description": "BaseWeb is a fresh SCSS (Sassy CSS) front-end development tool that can be used as a framework or library. It's built to help keep your projects simple, organized and responsive.",
4 | "version": "3.0.7",
5 | "keywords": [
6 | "BaseWeb",
7 | "CSS",
8 | "Framework",
9 | "Front-end",
10 | "HTML",
11 | "JavaScript",
12 | "Library",
13 | "Sass",
14 | "SCSS"
15 | ],
16 | "homepage": "http://getbaseweb.com",
17 | "author": {
18 | "name": "Sebastian Nitu",
19 | "email": "me@sebnitu.com",
20 | "url": "http://sebnitu.com"
21 | },
22 | "repository": {
23 | "type": "git",
24 | "url": "https://github.com/sebnitu/BaseWeb.git"
25 | },
26 | "bugs": "https://github.com/sebnitu/BaseWeb/issues",
27 | "license": "MIT",
28 | "files": [
29 | "dist",
30 | "src"
31 | ],
32 | "devDependencies": {
33 | "@babel/core": "^7.5.4",
34 | "@babel/preset-env": "^7.5.4",
35 | "@babel/register": "^7.4.4",
36 | "autoprefixer": "^9.6.1",
37 | "babelify": "^10.0.0",
38 | "browserify": "^16.3.0",
39 | "del": "^5.0.0",
40 | "feather-icons": "^4.22.1",
41 | "gulp": "^4.0.2",
42 | "gulp-imagemin": "^6.0.0",
43 | "gulp-postcss": "^8.0.0",
44 | "gulp-rename": "^1.4.0",
45 | "gulp-sass": "^4.0.2",
46 | "gulp-sourcemaps": "^2.6.5",
47 | "gulp-svg-symbols": "^3.2.3",
48 | "gulp-uglify": "^3.0.2",
49 | "svgxuse": "^1.2.6",
50 | "through2": "^3.0.1",
51 | "vinyl-buffer": "^1.0.1",
52 | "vinyl-source-stream": "^2.0.0"
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/js/baseweb.js:
--------------------------------------------------------------------------------
1 | import Dismissible from './dismissible'
2 | import Dropdowns from './dropdowns'
3 | import Offcanvas from './offcanvas'
4 | import Tabs from './tabs'
5 |
6 | const dismissible = new Dismissible()
7 | const dropdowns = new Dropdowns()
8 | const offcanvas = new Offcanvas()
9 | const tabs = new Tabs()
10 |
--------------------------------------------------------------------------------
/src/js/dismissible.js:
--------------------------------------------------------------------------------
1 | import u from './utility.js'
2 |
3 | export default function(options) {
4 |
5 | var api = {}
6 | var settings
7 | var defaults = {
8 | classTrigger : 'dismiss',
9 | classDismissible : 'dismissible',
10 | classHide : 'hide',
11 | }
12 |
13 | var runDismissible = function () {
14 | var trigger = event.target.closest('.' + settings.classTrigger)
15 | if ( !trigger ) return
16 | var dismissible = event.target.closest('.' + settings.classDismissible)
17 | if ( !dismissible ) return
18 | if (dismissible) {
19 | u.addClass(dismissible, settings.classHide)
20 | } else {
21 | console.log('Dismissible element was not found!')
22 | }
23 | event.preventDefault()
24 | }
25 |
26 | api.init = function (options) {
27 | api.destroy()
28 | settings = u.extend( defaults, options || {} )
29 | document.addEventListener('click', runDismissible, false)
30 | }
31 |
32 | api.destroy = function () {
33 | document.removeEventListener('click', runDismissible, false)
34 | settings = null
35 | }
36 |
37 | api.showAll = function (selector) {
38 | var dismissible = api.getDismissible(selector)
39 | dismissible.forEach(function (el) {
40 | u.removeClass(el, settings.classHide)
41 | })
42 |
43 | }
44 |
45 | api.hideAll = function (selector) {
46 | var dismissible = api.getDismissible(selector)
47 | dismissible.forEach(function (el) {
48 | u.addClass(el, settings.classHide)
49 | })
50 | }
51 |
52 | api.getDismissible = function (selector) {
53 | var dismissible = []
54 | if (selector) {
55 | var items = document.querySelectorAll(selector)
56 | items.forEach(function (el) {
57 | var items = el.querySelectorAll('.' + settings.classDismissible)
58 | items.forEach(function (el) {
59 | dismissible.push(el)
60 | })
61 | })
62 | } else {
63 | dismissible = document.querySelectorAll('.' + settings.classDismissible)
64 | }
65 | return dismissible
66 | }
67 |
68 | api.init(options)
69 | return api
70 | }
71 |
--------------------------------------------------------------------------------
/src/js/offcanvas.js:
--------------------------------------------------------------------------------
1 | import u from './utility.js'
2 |
3 | export default function(options) {
4 |
5 | var api = {}
6 | var settings
7 | var defaults = {
8 | classTrigger : 'oc-trigger',
9 | classWrap : 'oc-wrap',
10 | classAside : 'oc-aside',
11 | classActive : 'oc-active',
12 | classDelay : 'oc-delay',
13 | timer : 500,
14 | }
15 |
16 | var openOffCanvas = function() {
17 | var trigger = event.target.closest('.' + settings.classTrigger)
18 | var target = trigger.dataset.target
19 | if (target) {
20 | var wrap = event.target.closest('.' + settings.classWrap)
21 | if (wrap) {
22 | wrap.setAttribute('class', settings.classWrap)
23 | u.addClass(wrap, target)
24 | setTimeout( function() {
25 | u.addClass(wrap, [settings.classActive, settings.classDelay])
26 | }, 25 )
27 | }
28 | } else {
29 | closeOffCanvas()
30 | }
31 | }
32 |
33 | var closeOffCanvas = function () {
34 | var wrap = event.target.closest('.' + settings.classWrap)
35 | if (wrap) {
36 | u.removeClass(wrap, settings.classActive)
37 | setTimeout( function () {
38 | u.removeClass(wrap, settings.classDelay)
39 | }, settings.timer )
40 | }
41 | }
42 |
43 | var runOffcanvas = function () {
44 | var wrap = event.target.closest('.' + settings.classWrap)
45 | if ( !wrap ) return
46 | var trigger = event.target.closest('.' + settings.classTrigger)
47 | var aside = event.target.closest('.' + settings.classAside)
48 | if ( !trigger && !aside ) closeOffCanvas()
49 | if ( trigger ) {
50 | openOffCanvas()
51 | event.preventDefault()
52 | }
53 | }
54 |
55 | api.init = function (options) {
56 | api.destroy()
57 | settings = u.extend( defaults, options || {} )
58 | document.addEventListener('click', runOffcanvas, false)
59 | }
60 |
61 | api.destroy = function () {
62 | document.removeEventListener('click', runOffcanvas, false)
63 | settings = null
64 | }
65 |
66 | api.init(options)
67 | return api
68 | }
69 |
--------------------------------------------------------------------------------
/src/js/tabs.js:
--------------------------------------------------------------------------------
1 | import u from './utility.js'
2 |
3 | export default function(options) {
4 |
5 | var api = {}
6 | var settings
7 | var defaults = {
8 | classTrigger : 'tabs-nav',
9 | classWrap : 'tabs',
10 | classContent : 'tabs-content',
11 | classActive : 'active',
12 | }
13 |
14 | var getContent = function (wrap, nav) {
15 | var content
16 | if (wrap) {
17 | content = wrap.querySelector('.' + settings.classContent)
18 | } else {
19 | var id = nav.dataset.content
20 | if (id) {
21 | content = document.querySelector('#' + id)
22 | } else {
23 | content = null
24 | }
25 | }
26 | return content
27 | }
28 |
29 | var runTabs = function () {
30 | var trigger = event.target.closest('.' + settings.classTrigger)
31 | if ( !trigger ) return
32 | var is_active = u.hasClass(event.target.parentElement, settings.classActive)
33 | if (!is_active) {
34 | var wrap = event.target.closest('.' + settings.classWrap)
35 | var content = getContent(wrap, trigger)
36 | var target = event.target.getAttribute('href')
37 | u.removeClass(trigger.querySelector('.' + settings.classActive), settings.classActive)
38 | u.removeClass(content.querySelector('.' + settings.classActive), settings.classActive)
39 | u.addClass(event.target.parentElement, settings.classActive)
40 | u.addClass(content.querySelector(target), settings.classActive)
41 | }
42 | event.preventDefault()
43 | }
44 |
45 | api.init = function (options) {
46 | api.destroy()
47 | settings = u.extend( defaults, options || {} )
48 | document.addEventListener('click', runTabs, false)
49 | }
50 |
51 | api.destroy = function () {
52 | document.removeEventListener('click', runTabs, false)
53 | settings = null
54 | }
55 |
56 | api.init(options)
57 | return api
58 | }
59 |
--------------------------------------------------------------------------------
/src/js/utility.js:
--------------------------------------------------------------------------------
1 | export default function() {
2 |
3 | var api = {}
4 |
5 | api.hasClass = function ( el, c ) {
6 | c = api.toArray(c)
7 | return c.every( function ( c ) {
8 | return el.classList.contains(c)
9 | })
10 | }
11 |
12 | api.addClass = function ( el, c ) {
13 | c = api.toArray(c)
14 | c.forEach( function ( c ) {
15 | el.classList.add( c )
16 | })
17 | }
18 |
19 | api.removeClass = function ( el, c ) {
20 | c = api.toArray(c)
21 | c.forEach( function ( c ) {
22 | el.classList.remove( c )
23 | })
24 | }
25 |
26 | api.toggleClass = function ( el, c ) {
27 | c = api.toArray(c)
28 | c.forEach( function ( c ) {
29 | el.classList.toggle(c)
30 | })
31 | }
32 |
33 | api.closest = function ( el, c ) {
34 | while ((el = el.parentElement) && !api.hasClass(el, c))
35 | return el
36 | }
37 |
38 | api.toArray = function( s ) {
39 | var array = []
40 | if (typeof s === 'string') {
41 | array.push(s)
42 | } else if (Array.isArray(s)) {
43 | array = s
44 | } else {
45 | return false
46 | }
47 | return array
48 | }
49 |
50 | api.extend = function () {
51 | var extended = {}
52 | var deep = false
53 | var i = 0
54 | var length = arguments.length
55 | if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
56 | deep = arguments[0]
57 | i++
58 | }
59 | var merge = function ( obj ) {
60 | for ( var prop in obj ) {
61 | if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
62 | if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {
63 | extended[prop] = extend( true, extended[prop], obj[prop] )
64 | } else {
65 | extended[prop] = obj[prop]
66 | }
67 | }
68 | }
69 | }
70 | for ( i = 0; i < length; i++ ) {
71 | var obj = arguments[i]
72 | merge(obj)
73 | }
74 | return extended
75 | }
76 |
77 | return api
78 | }
79 |
--------------------------------------------------------------------------------
/src/scss/_baseweb-blocks.scss:
--------------------------------------------------------------------------------
1 | // Blocks
2 | @import "blocks/badges";
3 | @import "blocks/breadcrumbs";
4 | @import "blocks/button-groups";
5 | @import "blocks/dropdowns";
6 | @import "blocks/notices";
7 | @import "blocks/offcanvas";
8 | @import "blocks/tabs";
9 | @import "blocks/tooltips";
10 |
--------------------------------------------------------------------------------
/src/scss/_baseweb-core.scss:
--------------------------------------------------------------------------------
1 | // Meta information
2 | @import "core/colophon";
3 |
4 | // Core [Required]
5 | @import "core/functions";
6 | @import "core/palette";
7 | @import "core/settings";
8 | @import "core/mixins";
9 | @import "core/media";
10 | @import "core/grid";
11 |
--------------------------------------------------------------------------------
/src/scss/_baseweb-elements.scss:
--------------------------------------------------------------------------------
1 | // Elements
2 | @import "elements/base";
3 | @import "elements/typography";
4 | @import "elements/lists";
5 | @import "elements/tables";
6 | @import "elements/blockquotes";
7 | @import "elements/code";
8 | @import "elements/images";
9 | @import "elements/videos";
10 | @import "elements/rules";
11 | @import "elements/forms";
12 | @import "elements/buttons";
13 | @import "elements/icons";
14 | @import "elements/chips";
15 |
--------------------------------------------------------------------------------
/src/scss/baseweb.scss:
--------------------------------------------------------------------------------
1 | // Core Before [Required]
2 | @import "baseweb-core";
3 |
4 | // Overrides
5 | @import "custom/overrides";
6 |
7 | // Elements
8 | @import "baseweb-elements";
9 |
10 | // Blocks
11 | @import "baseweb-blocks";
12 |
13 | // Custom
14 | @import "custom/custom";
15 |
--------------------------------------------------------------------------------
/src/scss/core/_colophon.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * BaseWeb
3 | * A fresh front-end development framework
4 | * @version 3.0.7
5 | *
6 | * @author Sebastian Nitu
7 | * @url https://github.com/sebnitu/BaseWeb
8 | * @url http://sebnitu.com
9 | *
10 | * Copyright (c) 2020 Sebastian Nitu (MIT Licensed)
11 | */
12 |
--------------------------------------------------------------------------------
/src/scss/custom/_custom.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/custom/_custom.scss';
3 |
4 | /*==============================================================================
5 | @Custom - #{$filename}
6 | ==============================================================================*/
7 |
8 | // Custom styles go here
9 | // All variabls and mixins in BaseWeb are available to styles in this document
10 |
11 | /*==============================================================================
12 | @End - #{$filename}
13 | ==============================================================================*/
14 |
--------------------------------------------------------------------------------
/src/scss/custom/_overrides.scss:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // @Overrides Map
3 | ////////////////////////////////////////////////////////////////////////////////
4 |
5 | // This is where we define all global, element and component map overrides
6 | $override: () !default;
7 |
--------------------------------------------------------------------------------
/src/scss/elements/_blockquotes.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/elements/_blockquotes.scss';
3 |
4 | /*==============================================================================
5 | @Blockquotes - #{$filename}
6 | ==============================================================================*/
7 |
8 | blockquote {
9 | margin: 1rem 0;
10 | padding: 0.5em 1.5em;
11 | background: $bg-color;
12 | border-radius: $border-radius;
13 |
14 | footer,
15 | .blockquote-footer {
16 | display: block;
17 | position: relative;
18 | margin: 1rem 0;
19 | font-size: 100%;
20 | }
21 | }
22 |
23 | @include media-min('medium') {
24 |
25 | blockquote {
26 | padding: 1em 2em;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/scss/elements/_code.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/elements/_code.scss';
3 |
4 | /*==============================================================================
5 | @Code - #{$filename}
6 | ==============================================================================*/
7 |
8 | code, pre {
9 | background: $bg-color;
10 | font-family: $font-family-mono;
11 | font-size: px-to-em(16px);
12 | line-height: 1.5em;
13 | border-radius: $border-radius;
14 | }
15 | code {
16 | display: inline;
17 | margin: 0;
18 | padding: 0;
19 | white-space: nowrap;
20 | line-height: inherit;
21 | color: $red;
22 | background: none;
23 | }
24 | pre {
25 | margin: 1.5rem 0;
26 | padding: 0.75rem;
27 | overflow: auto;
28 | color: $color-dark;
29 |
30 | code {
31 | display: block;
32 | margin: 0;
33 | padding: 0.75rem;
34 | overflow: auto;
35 | white-space: pre;
36 | font-size: 100%;
37 | color: inherit;
38 | background: none;
39 | border: 0 none;
40 | }
41 | &.max-height {
42 | max-height: 400px;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/scss/elements/_images.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/elements/_images.scss';
3 |
4 | /*==============================================================================
5 | @Images - #{$filename}
6 | ==============================================================================*/
7 |
8 | img {
9 | display: block;
10 | margin: 1rem 0;
11 | max-width: 100%;
12 | height: auto;
13 | }
14 |
15 | /**
16 | * Alignment Modifiers
17 | */
18 | img.align-center {
19 | display: block;
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 | p img.align-center {
24 | margin-top: 0;
25 | margin-bottom: 0;
26 | }
27 |
28 | img.align-left {
29 | float: left;
30 | margin: 1rem 1.5rem 1rem 0;
31 | }
32 | p img.align-left {
33 | margin-top: 0;
34 |
35 | }
36 |
37 | img.align-right {
38 | float: right;
39 | margin: 1rem 0 1rem 1.5rem;
40 | }
41 | p img.align-right {
42 | margin-top: 0;
43 | }
44 |
45 | /**
46 | * Stylistic Modifiers
47 | */
48 | img.rounded {
49 | border-radius: $border-radius;
50 | }
51 | img.circle {
52 | border-radius: 50%;
53 | }
54 | img.polaroid {
55 | background: $white;
56 | background-clip: padding-box;
57 | padding: 0.5rem;
58 | border: 1px solid rgba($black, 0.2);
59 | box-shadow: 0 1px 3px rgba($black, 0.1);
60 | }
61 |
--------------------------------------------------------------------------------
/src/scss/elements/_rules.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/elements/_rules.scss';
3 |
4 | /*==============================================================================
5 | @Rules - #{$filename}
6 | ==============================================================================*/
7 |
8 | hr {
9 | display: block;
10 | height: 0;
11 | width: 100%;
12 | clear: both;
13 | margin: 2rem 0;
14 | padding: 0;
15 | background: none;
16 | border: 0 none;
17 | border-bottom: 1px solid $border-color;
18 | }
19 |
20 | /**
21 | * Stylistic Modifiers
22 | */
23 | hr.dotted {
24 | border-bottom: 1px dotted rgba($black, 0.25);
25 | }
26 | hr.dashed {
27 | border-bottom: 1px dashed rgba($black, 0.25);
28 | }
29 | hr.double {
30 | border-bottom: 3px double $border-color;
31 | }
32 |
--------------------------------------------------------------------------------
/src/scss/elements/_typography.scss:
--------------------------------------------------------------------------------
1 | // Set file variable
2 | $filename: 'scss/elements/_typography.scss';
3 |
4 | /*==============================================================================
5 | @Typography - #{$filename}
6 | ===============================================================================*/
7 |
8 | html {
9 | font-size: $base-font-size;
10 | }
11 |
12 | body {
13 | font-family: $base-font-family;
14 | font-size: $base-font-size;
15 | line-height: $base-line-height;
16 | font-weight: $base-font-weight;
17 | color: $color;
18 | -webkit-font-smoothing: subpixel-antialiased;
19 | }
20 |
21 | @if map-get($anchors, 'output') {
22 | a {
23 | @include make-anchor();
24 | }
25 | }
26 |
27 | @if map-get($headings, 'output') {
28 | @include build-headings();
29 | }
30 |
31 | @if $text-elements {
32 |
33 | p {
34 | margin: 1em 0;
35 | }
36 | strong {
37 | font-weight: bold;
38 | }
39 | em {
40 | font-style: italic;
41 | }
42 | small {
43 | font-size: 0.8em;
44 | }
45 | mark {
46 | background: rgba(#ff0, 0.5);
47 | }
48 | cite {
49 | font-style: italic;
50 | }
51 | abbr[title],
52 | abbr[data-original-title] {
53 | cursor: help;
54 | text-decoration: underline dotted;
55 | }
56 |
57 | }
58 |
59 | @if $text-modifiers {
60 |
61 | .text-lead {
62 | font-size: px-to-em(24px);
63 | line-height: 1.4em;
64 | color: $color-dark;
65 | font-weight: font-weight('light');
66 |
67 | a {
68 | text-decoration: none;
69 | }
70 | }
71 |
72 | .text-small {
73 | font-size: 0.8em;
74 | line-height: 1.5em;
75 | }
76 | .text-soften {
77 | font-weight: $base-font-weight;
78 | color: $color-light;
79 | }
80 | .text-harden {
81 | font-weight: bold;
82 | color: $color-dark;
83 | }
84 |
85 | .text-left {
86 | text-align: left;
87 | }
88 | .text-center {
89 | text-align: center;
90 | }
91 | .text-right {
92 | text-align: right;
93 | }
94 | .text-justify {
95 | text-align: justify;
96 | }
97 | .text-nowrap {
98 | white-space: nowrap;
99 | }
100 |
101 | .text-lowercase {
102 | text-transform: lowercase;
103 | }
104 | .text-uppercase {
105 | text-transform: uppercase;
106 | }
107 | .text-capitalize {
108 | text-transform: capitalize;
109 | }
110 |
111 | }
112 |
--------------------------------------------------------------------------------
/tasks/_config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | styles: {
3 | src: 'src/scss/baseweb.scss',
4 | dest: 'dist/css/',
5 | output: 'baseweb',
6 | watch: ['src/scss/**/*'],
7 | search: [
8 | 'src/scss/',
9 | 'node_modules/'
10 | ],
11 | vendors: []
12 | },
13 |
14 | scripts: {
15 | src: 'src/js/baseweb.js',
16 | dest: 'dist/js/',
17 | output: 'scripts',
18 | watch: ['src/js/**/*'],
19 | search: [
20 | 'src/js/',
21 | 'node_modules/'
22 | ],
23 | vendors: []
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/tasks/feather.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import del from 'del'
3 | import fs from 'fs'
4 | import path from 'path'
5 |
6 | import feather from 'feather-icons'
7 | import Q from 'q'
8 |
9 | import config from './_config'
10 |
11 | const feather_clean = () => {
12 | return del(config.feather.dest)
13 | }
14 |
15 | const feather_copy = () => {
16 |
17 | // Setup our promise and set item processed to 0
18 | var deferred = Q.defer()
19 | var itemsProcessed = 0
20 |
21 | // Get our icons array
22 | var icons = fs.readdirSync(config.feather.src)
23 |
24 | // Create the direcotry if it doesn't exist
25 | if (!fs.existsSync(config.feather.dest)){
26 | fs.mkdirSync(config.feather.dest)
27 | }
28 |
29 | // Loop through our icons
30 | icons.forEach(icon => {
31 | icon = path.basename(icon, '.svg')
32 | var svg = feather.icons[icon].toSvg({
33 | class: 'icon icon-' + icon + '{%if include.class%} {{include.class}}{%endif%}'
34 | })
35 |
36 | // Write our icons to file
37 | fs.writeFile(config.feather.dest + icon + '.svg', svg, function (err) {
38 | if (err) { console.error(err) }
39 | })
40 |
41 | // Add count to processed items
42 | itemsProcessed++
43 |
44 | // If we're done, set deferred promise to resolved
45 | if(itemsProcessed === icons.length) {
46 | deferred.resolve()
47 | }
48 | })
49 |
50 | // Return our promise
51 | return deferred.promise
52 | }
53 |
54 | const build = gulp.series(
55 | feather_clean,
56 | feather_copy
57 | )
58 |
59 | export {
60 | feather_clean,
61 | feather_copy,
62 | build
63 | }
64 |
65 | export default build
66 |
--------------------------------------------------------------------------------
/tasks/img.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import del from 'del'
3 | import imagemin from 'gulp-imagemin'
4 |
5 | import config from './_config'
6 |
7 | const img = () => {
8 | return gulp.src(config.img.src)
9 | .pipe(imagemin({
10 | optimizationLevel: 5
11 | }))
12 | .pipe(gulp.dest(config.img.dest))
13 | }
14 |
15 | const img_clean = () => {
16 | return del(config.img.dest)
17 | }
18 |
19 | const build = gulp.series(
20 | img_clean,
21 | img
22 | )
23 |
24 | export {
25 | img,
26 | img_clean,
27 | build
28 | }
29 |
30 | export default build
31 |
--------------------------------------------------------------------------------
/tasks/svg.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import del from 'del'
3 | import imagemin from 'gulp-imagemin'
4 |
5 | import config from './_config'
6 |
7 | const svg = () => {
8 | return gulp.src(config.svg.src)
9 | .pipe(imagemin([
10 | imagemin.svgo({
11 | plugins: [{
12 | removeViewBox: false
13 | }]
14 | })
15 | ]))
16 | .pipe(gulp.dest(config.svg.dest))
17 | }
18 |
19 | const svg_clean = () => {
20 | return del(config.svg.dest)
21 | }
22 |
23 | const build = gulp.series(
24 | svg_clean,
25 | svg
26 | )
27 |
28 | export {
29 | svg,
30 | svg_clean,
31 | build
32 | }
33 |
34 | export default build
35 |
--------------------------------------------------------------------------------
/tasks/symbols.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import del from 'del'
3 | import rename from 'gulp-rename'
4 | import svgSymbols from 'gulp-svg-symbols'
5 |
6 | import config from './_config'
7 |
8 | const symbols = () => {
9 | return gulp.src(config.symbols.src)
10 | .pipe(svgSymbols(config.symbols.options))
11 | .pipe(rename(config.symbols.output))
12 | .pipe(gulp.dest(config.symbols.dest))
13 | }
14 |
15 | const symbols_clean = () => {
16 | return del(config.symbols.dest + config.symbols.output)
17 | }
18 |
19 | const build = gulp.series(
20 | symbols_clean,
21 | symbols
22 | )
23 |
24 | export {
25 | symbols,
26 | symbols_clean,
27 | build
28 | }
29 |
30 | export default build
31 |
--------------------------------------------------------------------------------
Comments
4 | 5 |