├── index.js
├── .gitattributes
├── site
├── src
│ ├── env.d.ts
│ ├── components
│ │ ├── OnoffCanvasToggler.astro
│ │ ├── BaseHead.astro
│ │ ├── ElkFooter.astro
│ │ ├── ElkHeader.astro
│ │ ├── ElkSidebar.astro
│ │ └── basicHtml.md
│ ├── pages
│ │ ├── no-footers.md
│ │ ├── app-side-is-mini.md
│ │ ├── app-side-is-hoverable.md
│ │ ├── app-is-fixed.md
│ │ ├── app-side-is-fixed.md
│ │ ├── no-headers.md
│ │ ├── app-side-is-fixed-is-hoverable.md
│ │ ├── no-headers-footers.md
│ │ ├── main-is-fixed.md
│ │ ├── app-side-is-sticky.md
│ │ ├── sticky-footer.md
│ │ ├── app-side-is-sticky-is-mini.md
│ │ ├── app-side-is-sticky-is-hoverable.md
│ │ ├── sticky-header.md
│ │ ├── index.astro
│ │ └── sticky-header-2.md
│ ├── config.ts
│ └── layouts
│ │ ├── MdLayout.astro
│ │ └── MainLayout.astro
└── public
│ ├── assets
│ ├── js
│ │ ├── changetheme.js
│ │ ├── elektron.min.js
│ │ ├── elektron.js
│ │ ├── elektron.min.js.map
│ │ └── elektron.js.map
│ ├── css
│ │ ├── elektron.css.map
│ │ ├── prism.css
│ │ └── elektron.css
│ └── img
│ │ └── logo.svg
│ └── favicon.svg
├── .gitignore
├── scss
├── _elk-root.scss
├── _elk-side-toggler.scss
├── elektron.scss
├── _elk-variables.scss
├── _elk-layout-fixed.scss
├── _elk-side-menu.scss
├── _elk-side-is-hoverable.scss
├── _elk-layout.scss
├── _elk-side.scss
├── _elk-theme-variables.scss
├── _elk-utility.scss
├── _elk-side-is-mini.scss
├── _elk-header-menu.scss
└── _elk-theme.scss
├── .editorconfig
├── astro.config.mjs
├── .eslintrc.js
├── .vscode
└── settings.json
├── rollup.config.js
├── .github
├── issue_template.md
├── workflows
│ └── deploy.yml
└── contributing.md
├── document.md
├── js
└── elektron.js
├── package.json
├── README.md
└── changelog.md
/index.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/site/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
<body class="elk-app is-fixed">
12 | ...
13 | </body>
14 |
15 |
16 |
17 |
18 | lorem
19 |
20 | lorem
21 |
22 | lorem
23 |
24 | lorem
25 |
26 | lorem
27 |
28 | lorem
29 |
30 | lorem
31 |
32 | lorem
33 |
34 | lorem
35 |
36 | lorem
37 |
38 | lorem
39 |
40 | lorem
41 |
42 | lorem
43 |
44 | lorem
45 |
46 | lorem
47 |
48 | lorem
49 |
50 | lorem
51 |
52 | lorem
53 |
54 | lorem
55 |
56 | lorem
57 |
58 | lorem
59 |
--------------------------------------------------------------------------------
/site/src/components/ElkHeader.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import OnoffCanvasToggler from './OnoffCanvasToggler.astro';
3 |
4 | export interface Props {
5 | elkHeaderClasses?: string;
6 | }
7 |
8 | const { elkHeaderClasses } = Astro.props;
9 | ---
10 |
11 | lorem
14 |lorem
15 |lorem
16 |lorem
17 |lorem
18 |lorem
19 |lorem
20 |lorem
21 |lorem
22 |lorem
23 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 | -------------------------------------------------------------------------------- /scss/_elk-side-menu.scss: -------------------------------------------------------------------------------- 1 | .elk-side-nav ul { 2 | padding: 0; 3 | margin: 0; 4 | list-style: none; 5 | } 6 | 7 | .elk-side-nav .metismenu { 8 | display: flex; 9 | flex-direction: column; 10 | } 11 | 12 | .elk-side-nav .metismenu li { 13 | margin-top: .25rem; 14 | } 15 | .elk-side-nav .metismenu li:first-child { 16 | padding-top: .25rem; 17 | } 18 | .elk-side-nav .metismenu li:last-child { 19 | padding-bottom: .25rem; 20 | } 21 | 22 | .elk-side-nav .metismenu > li { 23 | position: relative; 24 | } 25 | .elk-side-nav .metismenu a { 26 | position: relative; 27 | display: flex; 28 | flex-direction: row; 29 | align-items: center; 30 | outline-width: 0; 31 | cursor: pointer; 32 | @if $enable-transitions { 33 | transition: all $transition-duration $transition-timing-function; 34 | } 35 | 36 | &:active, 37 | &:focus, 38 | &:hover { 39 | text-decoration: none; 40 | } 41 | } 42 | 43 | .elk-side-nav .metismenu a { 44 | padding: .5rem 1rem; 45 | } 46 | 47 | .elk-side-nav .metismenu ul a { 48 | padding: .5rem; 49 | padding-inline-start: 3rem; 50 | } 51 | 52 | .elk-side-nav .metismenu ul ul a { 53 | padding-inline-start: 4rem; 54 | } 55 | -------------------------------------------------------------------------------- /scss/_elk-side-is-hoverable.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * .elk-side.is-hoverable 3 | */ 4 | @media (min-width: $elk-side-breakpoint) { 5 | .elk-side.is-hoverable { 6 | transition: all 0.3s ease; 7 | width: var(--elk-side-is-mini-width); 8 | } 9 | 10 | // .elk-side.is-hoverable.is-open ~ .elk-main { 11 | // margin-left: var(--elk-side-is-mini-width); 12 | // } 13 | 14 | .elk-side.is-hoverable { 15 | 16 | .metismenu > li > a:not(:hover) { 17 | &.has-arrow::after { 18 | transition: none; 19 | border-width: 0; 20 | } 21 | } 22 | 23 | .metismenu > li > ul.mm-collapse.mm-show:not(.mm-collapsing) { 24 | display: none; 25 | } 26 | 27 | .nav-title { 28 | transition: transform 0.3s ease; 29 | transform: translate3d(-10000%, 0, 0); 30 | white-space: nowrap; 31 | } 32 | } 33 | 34 | .elk-side.is-hoverable:hover { 35 | width: var(--elk-side-width); 36 | 37 | .nav-title { 38 | transform: translate3d(0, 0, 0); 39 | } 40 | 41 | .metismenu > li > ul.mm-collapse.mm-show { 42 | display: block; 43 | } 44 | 45 | .metismenu > li > a { 46 | &.has-arrow::after { 47 | // border-width: 1px 0 0 1px; 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /scss/_elk-layout.scss: -------------------------------------------------------------------------------- 1 | // layout 2 | 3 | .elk-app { 4 | display: flex; 5 | flex-direction: column; 6 | } 7 | 8 | /** 9 | * deprecated 10 | */ 11 | .elk-wrap { 12 | flex: 1 1 auto; 13 | display: flex; 14 | flex-direction: column; 15 | min-height: 100vh; 16 | position: relative; 17 | width: 100%; 18 | } 19 | 20 | .elk-header { 21 | position: relative; 22 | &.is-sticky { 23 | position: sticky; 24 | top: 0; 25 | z-index: var(--elk-side-z-index); 26 | } 27 | } 28 | 29 | .elk-container { 30 | display: flex; 31 | flex: 1 1 auto; 32 | flex-basis: auto; 33 | flex-direction: row; 34 | position: relative; 35 | } 36 | 37 | .elk-main { 38 | position: relative; 39 | display: flex; 40 | flex-direction: column; 41 | flex: 1 1 auto; 42 | overflow-x: auto; 43 | @if $enable-transitions { 44 | transition: margin $transition-duration $transition-timing-function; 45 | } 46 | } 47 | 48 | .elk-main-content { 49 | position: relative; 50 | margin-bottom: auto; 51 | flex: 1 1 auto; 52 | } 53 | 54 | .elk-side { 55 | display: flex; 56 | flex-flow: column nowrap; 57 | margin: 0; 58 | } 59 | 60 | .elk-footer.is-sticky { 61 | position: sticky; 62 | bottom: 0; 63 | z-index: var(--elk-side-is-open-z-index); 64 | } 65 | -------------------------------------------------------------------------------- /site/src/pages/app-side-is-fixed-is-hoverable.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: App Side is Fixed is Hoverable 3 | description: App Side is Fixed is Hoverable 4 | layout: ../layouts/MdLayout.astro 5 | hasElkFooter: true 6 | hasElkHeader: true 7 | elkAppClasses: is-fixed elk-test 8 | elkMainClasses: elk-test 9 | elkSideClasses: is-hoverable 10 | --- 11 | 12 | ```html 13 | 14 | ... 15 | 18 | ... 19 | 20 | ``` 21 | 22 | > lorem 23 | 24 | lorem 25 | 26 | lorem 27 | 28 | lorem 29 | 30 | lorem 31 | 32 | lorem 33 | 34 | lorem 35 | 36 | lorem 37 | 38 | lorem 39 | 40 | lorem 41 | 42 | lorem 43 | 44 | lorem 45 | 46 | lorem 47 | 48 | lorem 49 | 50 | lorem 51 | 52 | lorem 53 | 54 | lorem 55 | 56 | lorem 57 | 58 | lorem 59 | 60 | lorem 61 | 62 | lorem 63 | 64 | lorem 65 | 66 | lorem 67 | 68 | lorem 69 | 70 | lorem 71 | 72 | lorem 73 | 74 | lorem 75 | 76 | lorem 77 | 78 | lorem 79 | 80 | lorem 81 | 82 | lorem 83 | 84 | lorem 85 | 86 | lorem 87 | 88 | lorem 89 | 90 | lorem 91 | 92 | lorem 93 | 94 | lorem 95 | 96 | lorem 97 | 98 | lorem 99 | 100 | lorem 101 | 102 | lorem -------------------------------------------------------------------------------- /site/src/pages/no-headers-footers.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: no headers & footers 3 | layout: ../layouts/MdLayout.astro 4 | elkAppClasses: elk-test 5 | elkMainClasses: elk-test 6 | elkSideClasses: elk-test 7 | hasElkFooter: false 8 | hasElkHeader: false 9 | --- 10 | 11 | 12 | 13 | 14 | 15 |lorem
16 |lorem
17 |lorem
18 |lorem
19 |lorem
20 |lorem
21 |lorem
22 |lorem
23 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 | -------------------------------------------------------------------------------- /scss/_elk-side.scss: -------------------------------------------------------------------------------- 1 | // elk-side 2 | /* 3 | * elk-side : inspired .onoffcanvas.is-left 4 | * 5 | * available classess: is-open 6 | */ 7 | .elk-side { 8 | width: 100%; 9 | @media (min-width: $elk-side-breakpoint) { 10 | width: var(--elk-side-width); 11 | } 12 | position: absolute; 13 | top: 0; 14 | bottom: 0; 15 | inset-inline-start: 0; 16 | z-index: var(--elk-side-z-index); 17 | transform: translate3d(-100%, 0, 0); 18 | @if $enable-transitions { 19 | transition: transform $transition-duration $transition-timing-function; 20 | } 21 | } 22 | /* 23 | * show elk-side 24 | */ 25 | .elk-side.is-open { 26 | transform: translate3d(0, 0, 0); 27 | flex-shrink: 0; 28 | 29 | @media (min-width: $elk-side-breakpoint) { 30 | position: relative; 31 | } 32 | } 33 | 34 | /* 35 | * side-content 36 | * 37 | * available classess: is-sticky 38 | */ 39 | @media (min-width: $elk-side-breakpoint) { 40 | .elk-side-content { 41 | margin-bottom: auto; 42 | &.is-sticky { 43 | margin-bottom: initial; 44 | position: sticky; 45 | top: 0; 46 | z-index: var(--elk-side-is-open-z-index); 47 | } 48 | } 49 | .elk-side:not(.is-mini) .elk-side-content.is-sticky { 50 | overflow-y: auto; 51 | } 52 | } 53 | 54 | .elk-side-header { 55 | padding: 0.5rem; 56 | text-align: right; 57 | } 58 | .onoffcanvas-drawer.is-open { 59 | z-index: 1; 60 | } 61 | -------------------------------------------------------------------------------- /scss/_elk-theme-variables.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | // main-content padding 3 | --main-content-padding: 1rem; 4 | 5 | --side-nav-a-font-size : 1rem; 6 | --top-nav-a-font-size : 1rem; 7 | 8 | --elk-side-bg-color: #fff; 9 | --elk-side-border-color: #dee2e6; 10 | --side-nav-a-color: #495057; 11 | --side-nav-a-hover-color: #0c8599; 12 | --side-nav-a-hover-bg-color: #e9ecef; 13 | 14 | --elk-header-bg-color: #fff; 15 | --elk-header-border-color: #dee2e6; 16 | --top-nav-a-color: #495057; 17 | --top-nav-a-hover-color : #0c8599; 18 | --top-nav-a-hover-bg-color: #e9ecef; 19 | 20 | --elk-switch-indicator-bg: #e9ecef; 21 | --elk-switch-indicator-border: #dee2e6; 22 | --elk-switch-indicator-before: #fff; 23 | --elk-switch-indicator-checked-bg: #e9ecef; 24 | } 25 | 26 | [data-theme="dark"] { 27 | --elk-side-bg-color: #2b303b; 28 | --elk-side-border-color: #495057; 29 | --side-nav-a-color: #788195; 30 | --side-nav-a-hover-color: #fff; 31 | --side-nav-a-hover-bg-color: #212529; 32 | 33 | --elk-header-bg-color: #272b35; 34 | --elk-header-border-color: #232730; 35 | --top-nav-a-color: #868e96; 36 | --top-nav-a-hover-color : #fff; 37 | --top-nav-a-hover-bg-color: #212529; 38 | 39 | --elk-switch-indicator-bg: #adb5bd; 40 | --elk-switch-indicator-border: #343a40; 41 | --elk-switch-indicator-before: #fff; 42 | --elk-switch-indicator-checked-bg: #adb5bd; 43 | } 44 | -------------------------------------------------------------------------------- /scss/_elk-utility.scss: -------------------------------------------------------------------------------- 1 | .has-icon { 2 | width: 1.5rem; 3 | flex: 0 0 1.5rem; 4 | font-size: 1.5rem; 5 | display: inline-flex; 6 | align-items: center; 7 | justify-content: center; 8 | flex-direction: column; 9 | margin-inline-end: .5rem; 10 | } 11 | 12 | .onoffcanvas { 13 | visibility: hidden; 14 | &.is-open { 15 | visibility: visible; 16 | } 17 | } 18 | 19 | .elk-switch { 20 | user-select: none; 21 | cursor: default; 22 | display: none; 23 | align-items: center; 24 | margin: 0; 25 | } 26 | 27 | .elk-switch-indicator { 28 | display: inline-block; 29 | height: 1.25rem; 30 | width: 2.25rem; 31 | border-radius: 50px; 32 | position: relative; 33 | vertical-align: bottom; 34 | transition: .3s border-color, .3s background-color; 35 | } 36 | 37 | .elk-switch-indicator::before { 38 | content: ''; 39 | position: absolute; 40 | height: calc(1.25rem - 4px); 41 | width: calc(1.25rem - 4px); 42 | top: 1px; 43 | left: 1px; 44 | border-radius: 50%; 45 | transition: .3s left; 46 | box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4); 47 | } 48 | 49 | .elk-switch-input { 50 | position: absolute; 51 | z-index: var(--elk-side-is-open-z-index); 52 | opacity: 0; 53 | } 54 | 55 | .elk-switch-input:checked~.elk-switch-indicator::before { 56 | left: calc(1rem + 1px); 57 | } 58 | 59 | 60 | @media(min-width: $elk-side-breakpoint) { 61 | .elk-switch{ 62 | display: inline-flex; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /site/src/pages/main-is-fixed.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: main is fixed 3 | layout: ../layouts/MdLayout.astro 4 | hasElkFooter: true 5 | hasElkHeader: true 6 | elkAppClasses: is-fixed 7 | elkMainClasses: is-fixed 8 | elkSideClasses: elk-test 9 | --- 10 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Github Pages Astro CI 2 | 3 | on: 4 | # Trigger the workflow every time you push to the `master` branch 5 | # Using a different branch name? Replace `master` with your branch’s name 6 | push: 7 | branches: [ master ] 8 | # Allows you to run this workflow manually from the Actions tab on GitHub. 9 | workflow_dispatch: 10 | 11 | # Allow this job to clone the repo and create a page deployment 12 | permissions: 13 | contents: read 14 | pages: write 15 | id-token: write 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Checkout your repository using git 22 | uses: actions/checkout@v2 23 | - name: Install, build, and upload your site 24 | uses: withastro/action@v0 25 | # with: 26 | # path: . # The root location of your Astro project inside the repository. (optional) 27 | # node-version: 16 # The specific version of Node that should be used to build your site. Defaults to 16. (optional) 28 | # package-manager: yarn # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional) 29 | 30 | 31 | deploy: 32 | needs: build 33 | runs-on: ubuntu-latest 34 | environment: 35 | name: github-pages 36 | url: ${{ steps.deployment.outputs.page_url }} 37 | steps: 38 | - name: Deploy to GitHub Pages 39 | id: deployment 40 | uses: actions/deploy-pages@v1 -------------------------------------------------------------------------------- /site/src/pages/app-side-is-sticky.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: is-sticky 3 | layout: ../layouts/MdLayout.astro 4 | hasElkFooter: true 5 | hasElkHeader: true 6 | elkAppClasses: elk-test 7 | elkMainClasses: elk-test 8 | elkSideContentClasses: is-sticky 9 | --- 10 |Supported browser : http://caniuse.com/#feat=css-sticky
11 | 12 | ```html 13 | 18 | ``` 19 | 20 |lorem
21 |lorem
22 |lorem
23 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 |lorem
80 |lorem
81 |lorem
82 |lorem
83 |lorem
84 |lorem
85 |lorem
86 |lorem
87 |lorem
88 |lorem
89 |lorem
90 | -------------------------------------------------------------------------------- /site/src/pages/sticky-footer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: sticky footer 3 | layout: ../layouts/MdLayout.astro 4 | hasElkFooter: true 5 | hasElkHeader: true 6 | elkAppClasses: elk-test 7 | elkMainClasses: elk-test 8 | elkSideClasses: elk-test 9 | elkFooterClasses: is-sticky 10 | --- 11 | 16 |Supported browser : http://caniuse.com/#feat=css-sticky
18 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 |lorem
80 |lorem
81 |lorem
82 |lorem
83 |lorem
84 |lorem
85 |lorem
86 |lorem
87 | -------------------------------------------------------------------------------- /site/src/pages/app-side-is-sticky-is-mini.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: is-sticky is-mini 3 | layout: ../layouts/MdLayout.astro 4 | hasElkFooter: true 5 | hasElkHeader: true 6 | elkAppClasses: elk-test 7 | elkMainClasses: elk-test 8 | elkSideClasses: is-mini is-sticky 9 | --- 10 |Supported browser : http://caniuse.com/#feat=css-sticky
11 | 12 | ```html 13 | 18 | ``` 19 | 20 |lorem
21 |lorem
22 |lorem
23 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 |lorem
80 |lorem
81 |lorem
82 |lorem
83 |lorem
84 |lorem
85 |lorem
86 |lorem
87 |lorem
88 |lorem
89 |lorem
90 | -------------------------------------------------------------------------------- /site/src/pages/app-side-is-sticky-is-hoverable.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: is-sticky is-hoverable 3 | layout: ../layouts/MdLayout.astro 4 | hasElkFooter: true 5 | hasElkHeader: true 6 | elkAppClasses: elk-test 7 | elkMainClasses: elk-test 8 | elkSideClasses: is-hoverable is-sticky 9 | --- 10 |Supported browser : http://caniuse.com/#feat=css-sticky
11 | 12 | 13 | ```html 14 | 19 | ``` 20 | 21 |lorem
22 |lorem
23 |lorem
24 |lorem
25 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 |lorem
80 |lorem
81 |lorem
82 |lorem
83 |lorem
84 |lorem
85 |lorem
86 |lorem
87 |lorem
88 |lorem
89 |lorem
90 | -------------------------------------------------------------------------------- /document.md: -------------------------------------------------------------------------------- 1 | ### Class structure 2 | | class | required | multiple | 3 | |-------|-------------------------------------------------------|----------| 4 | | .elk-app | required | no | 5 | | .elk-header | no | yes | 6 | | .elk-container | required | no | 7 | | .elk-footer | no | yes | 8 | | .elk-side | no | yes| 9 | | .elk-side-header | no | yes| 10 | | .elk-side-content | no (required, if .app-side ) | no| 11 | | .elk-side-footer | no | no | 12 | | .elk-main | required | no | 13 | | .elk-main-header | no | yes | 14 | | .elk-main-content | required | no | 15 | | .elk-main-footer | no | yes | 16 | 17 | ### Fixed Page Options 18 | 19 | #### elk-app fixed 20 | Elektron is fluid by default. Can be used as fixed on will. All that's needed to be done is to add `.is-fixed` class to `elk-app` element. 21 | 22 | ```html 23 | 24 | ... 25 | 26 | ``` 27 | 28 | #### elk-main fixed 29 | All that's needed to be done is to add `.is-fixed` class to `elk-app` and `is-fixed` class to `elk-main` elements. For example : 30 | 31 | ```html 32 | 33 |Supported browser : http://caniuse.com/#feat=css-sticky
13 |lorem
26 |lorem
27 |lorem
28 |lorem
29 |lorem
30 |lorem
31 |lorem
32 |lorem
33 |lorem
34 |lorem
35 |lorem
36 |lorem
37 |lorem
38 |lorem
39 |lorem
40 |lorem
41 |lorem
42 |lorem
43 |lorem
44 |lorem
45 |lorem
46 |lorem
47 |lorem
48 |lorem
49 |lorem
50 |lorem
51 |lorem
52 |lorem
53 |lorem
54 |lorem
55 |lorem
56 |lorem
57 |lorem
58 |lorem
59 |lorem
60 |lorem
61 |lorem
62 |lorem
63 |lorem
64 |lorem
65 |lorem
66 |lorem
67 |lorem
68 |lorem
69 |lorem
70 |lorem
71 |lorem
72 |lorem
73 |lorem
74 |lorem
75 |lorem
76 |lorem
77 |lorem
78 |lorem
79 |lorem
80 |lorem
81 |lorem
82 |lorem
83 |lorem
84 |lorem
85 |lorem
86 |lorem
87 |lorem
88 |lorem
89 | -------------------------------------------------------------------------------- /scss/_elk-side-is-mini.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * .elk-side.is-mini 3 | */ 4 | @media (min-width: $elk-side-breakpoint) { 5 | .elk-side.is-mini { 6 | width: var(--elk-side-is-mini-width); 7 | border-width: 0 !important; 8 | } 9 | 10 | // .elk-side.is-mini.is-open ~ .elk-main { 11 | // margin-left: var(--elk-side-is-mini-width); 12 | // } 13 | 14 | .elk-side.is-mini { 15 | .metismenu li:last-child { 16 | padding-bottom: 0; 17 | } 18 | 19 | .metismenu > li > a.has-arrow::after { 20 | transition-duration: .1s; 21 | } 22 | 23 | .metismenu > li:not(:hover) > a { 24 | &.has-arrow::after { 25 | border-width: 0; 26 | } 27 | } 28 | 29 | .nav-title { 30 | display: none; 31 | margin-inline-start: 1.5rem; 32 | } 33 | 34 | .metismenu ul ul a { 35 | padding-inline-start: 2.5rem; 36 | } 37 | 38 | .metismenu > li > ul { 39 | position: absolute; 40 | top: 100%; 41 | inset-inline-start: 100%; 42 | &.mm-collapse.mm-show:not(.mm-collapsing) { 43 | display: none; 44 | } 45 | 46 | > li > a { 47 | padding: 0.5em 0.5em 0.5em 1.5em; 48 | } 49 | } 50 | 51 | .metismenu > li > ul.mm-collapsing { 52 | visibility: collapse; 53 | transition-duration: .1s; 54 | } 55 | 56 | .metismenu > li:hover > ul.mm-collapse.mm-show:not(.mm-collapsing) { 57 | display: block; 58 | min-width: calc(var(--elk-side-width) - var(--elk-side-is-mini-width) + 1px); 59 | height: auto !important; 60 | } 61 | 62 | .metismenu > li:hover { 63 | > a { 64 | display: flex; 65 | flex-direction: row; 66 | min-width: calc(var(--elk-side-width) + 1px); 67 | } 68 | 69 | .nav-title { 70 | display: inline-block; 71 | align-self: center; 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /scss/_elk-header-menu.scss: -------------------------------------------------------------------------------- 1 | .elk-top-nav { 2 | padding: 0 1rem; 3 | &.is-open { 4 | position: relative; 5 | } 6 | } 7 | 8 | .elk-top-nav ul { 9 | padding: 0; 10 | margin: 0; 11 | list-style: none; 12 | } 13 | 14 | .elk-top-nav .metismenu { 15 | display: flex; 16 | flex-direction: column; 17 | } 18 | 19 | .elk-top-nav .metismenu .has-icon { 20 | height: auto; 21 | } 22 | 23 | .elk-top-nav .metismenu > li { 24 | display: flex; 25 | flex-direction: column; 26 | position: relative; 27 | } 28 | 29 | .elk-top-nav .metismenu a { 30 | position: relative; 31 | display: block; 32 | padding: .75rem 1rem; 33 | outline-width: 0; 34 | transition: all 0.3s ease-out; 35 | cursor: pointer; 36 | } 37 | 38 | .elk-top-nav .metismenu ul a { 39 | padding: .5rem; 40 | } 41 | 42 | .elk-top-nav .metismenu a:active, 43 | .elk-top-nav .metismenu a:focus, 44 | .elk-top-nav .metismenu a:hover { 45 | text-decoration: none; 46 | } 47 | @media (min-width: $elk-side-breakpoint) { 48 | .elk-top-nav .metismenu { 49 | flex-direction: row; 50 | } 51 | 52 | .elk-top-nav .metismenu > li >a { 53 | padding-inline-end: 2rem; 54 | } 55 | 56 | .elk-top-nav .metismenu > li { 57 | flex-direction: column; 58 | } 59 | .elk-top-nav .metismenu ul a { 60 | padding: .625rem 1rem; 61 | } 62 | 63 | .elk-top-nav .metismenu > li > ul { 64 | position: absolute; 65 | top: 100%; 66 | min-width: 256px; 67 | z-index: var(--elk-side-z-index);; 68 | } 69 | 70 | .elk-top-nav .metismenu > li:last-child > ul { 71 | inset-inline-end: 0; 72 | } 73 | 74 | .elk-top-nav.is-hoverable .metismenu > li > ul { 75 | height: auto !important; 76 | } 77 | 78 | .elk-top-nav.is-hoverable .metismenu > li:hover > ul { 79 | display: block; 80 | } 81 | 82 | .elk-top-nav.is-hoverable .metismenu > li:hover > a.has-arrow:after { 83 | transform: rotate(-45deg); 84 | } 85 | } 86 | 87 | -------------------------------------------------------------------------------- /js/elektron.js: -------------------------------------------------------------------------------- 1 | /* global OnoffCanvas, MetisMenu */ 2 | 3 | const debounce = (func, wait = 0) => { 4 | let timer; 5 | return (...args) => { 6 | clearTimeout(timer); 7 | timer = setTimeout(func, wait, ...args); 8 | }; 9 | }; 10 | 11 | const isMobile = () => window.innerWidth < 993; 12 | 13 | const showHideOnoffCanvas = (oc) => { 14 | if (isMobile()) { 15 | oc.hide(); 16 | } else { 17 | oc.show(); 18 | } 19 | }; 20 | 21 | const elkSide = document.querySelector('.elk-side'); 22 | 23 | if (elkSide !== null) { 24 | const elkSideNavOnoffCanvas = new OnoffCanvas(elkSide, { 25 | hideByEsc: isMobile(), 26 | createDrawer: isMobile(), 27 | }); 28 | 29 | showHideOnoffCanvas(elkSideNavOnoffCanvas); 30 | 31 | // eslint-disable-next-line no-unused-expressions 32 | elkSide.classList.contains('disable-resize') 33 | || window.addEventListener('resize', debounce(showHideOnoffCanvas(elkSideNavOnoffCanvas), 250)); 34 | 35 | const esi = document.querySelector('.elk-switch-input'); 36 | 37 | /* eslint-disable-next-line no-inner-declarations */ 38 | function changeElkSide() { 39 | const className = `is-${esi.getAttribute('name')}`; 40 | if (esi.checked) { 41 | elkSide.classList.add(className); 42 | } else { 43 | elkSide.classList.remove(className); 44 | } 45 | } 46 | if (esi !== null) { 47 | changeElkSide(); 48 | esi.addEventListener('change', changeElkSide); 49 | } 50 | 51 | const elkSideMM = document.querySelector('.elk-side-nav .metismenu'); 52 | if (elkSideMM !== null) { 53 | // eslint-disable-next-line no-new 54 | new MetisMenu(elkSideMM); 55 | } 56 | } 57 | 58 | const elkTopNav = document.querySelector('.elk-top-nav'); 59 | let elkTopNavCanvas; 60 | 61 | if (elkTopNav !== null) { 62 | elkTopNavCanvas = new OnoffCanvas('.elk-top-nav', { 63 | hideByEsc: false, 64 | createDrawer: false, 65 | }); 66 | 67 | showHideOnoffCanvas(elkTopNavCanvas); 68 | window.addEventListener('resize', debounce(showHideOnoffCanvas(elkTopNavCanvas), 250)); 69 | 70 | // eslint-disable-next-line no-new 71 | new MetisMenu(elkTopNav.querySelector('.metismenu')); 72 | } 73 | -------------------------------------------------------------------------------- /scss/_elk-theme.scss: -------------------------------------------------------------------------------- 1 | // elk-header 2 | .elk-header { 3 | background: var(--elk-header-bg-color); 4 | border-bottom: 1px solid var(--elk-header-border-color); 5 | } 6 | 7 | /* .elk-top-nav colors */ 8 | 9 | .elk-header .elk-top-nav { 10 | a, 11 | li, 12 | ul { 13 | background: var(--elk-header-bg-color); 14 | } 15 | .metismenu a { 16 | color: var(--top-nav-a-color); 17 | &:active, 18 | &:focus, 19 | &:hover { 20 | color: var(--top-nav-a-hover-color); 21 | // background: var(--top-nav-a-hover-bg-color); 22 | } 23 | } 24 | .metismenu li:hover > a, 25 | .metismenu li.active > a, 26 | .metismenu li > a.active { 27 | color: var(--top-nav-a-hover-color); 28 | // background: var(--top-nav-a-hover-bg-color); 29 | } 30 | } 31 | 32 | .elk-top-nav .metismenu a { 33 | font-size: var(--top-nav-a-font-size); 34 | } 35 | 36 | // elk-side 37 | .elk-side { 38 | background: var(--elk-side-bg-color); 39 | &.is-open { 40 | border-right: 1px solid var(--elk-side-border-color); 41 | } 42 | } 43 | 44 | /* .elk-side-nav colors */ 45 | 46 | .elk-side .elk-side-nav { 47 | a, 48 | li, 49 | ul { 50 | background: var(--elk-side-bg-color); 51 | } 52 | .metismenu a { 53 | color: var(--side-nav-a-color); 54 | &:active, 55 | &:focus, 56 | &:hover { 57 | color: var(--side-nav-a-hover-color); 58 | // background: var(--side-nav-a-hover-bg-color); 59 | } 60 | } 61 | .metismenu li:hover > a, 62 | .metismenu li.active > a, 63 | .metismenu li > a.active { 64 | color: var(--side-nav-a-hover-color); 65 | // background: var(--side-nav-a-hover-bg-color); 66 | } 67 | } 68 | 69 | .elk-side-nav .metismenu a { 70 | font-size: var(--side-nav-a-font-size); 71 | } 72 | 73 | // elk-switch 74 | .elk-switch-indicator { 75 | background: var(--elk-switch-indicator-bg); 76 | border: 1px solid var(--elk-switch-indicator-border); 77 | } 78 | 79 | .elk-switch-indicator::before { 80 | background: var(--elk-switch-indicator-before); 81 | } 82 | 83 | .elk-switch-input:checked~.elk-switch-indicator { 84 | background: var(--elk-switch-indicator-checked-bg); 85 | } 86 | 87 | // elk-main-content 88 | .elk-main-content { 89 | padding: var(--main-content-padding); 90 | } 91 | -------------------------------------------------------------------------------- /site/src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import MainLayout from "../layouts/MainLayout.astro"; 3 | import {Content as BasicHtml} from '../components/basicHtml.md'; 4 | import {Content as BasicCss} from '../../../document.md'; 5 | --- 6 | 7 | 8 |npm i elektron
24 | OR
25 |yarn add elektron
26 |
27 |
28 |
29 |
35 | .elk-app class should be added to div element inside the body tag.
36 |
Supported browser : 140 | http://caniuse.com/#feat=css-sticky 141 |
142 |144 |
<!-- BEGIN .elk-header -->
145 | <header class="elk-header is-sticky" data-theme=dark>
146 | <a href="#app-side"
147 | data-toggle="onoffcanvas"
148 | class="onoffcanvas-toggler"
149 | aria-expanded=false></a>
150 | <span>APP HEADER</span>
151 | </header>
152 | <!-- END: .elk-header -->
153 |
154 |
155 | lorem
156 |lorem
157 |lorem
158 |lorem
159 |lorem
160 |lorem
161 |lorem
162 |lorem
163 |lorem
164 |lorem
165 |lorem
166 |lorem
167 |lorem
168 |lorem
169 |lorem
170 |lorem
171 |lorem
172 |lorem
173 |lorem
174 |lorem
175 |lorem
176 |lorem
177 |lorem
178 |lorem
179 |lorem
180 |lorem
181 |lorem
182 |lorem
183 |lorem
184 |lorem
185 |lorem
186 |lorem
187 |lorem
188 |lorem
189 |lorem
190 |lorem
191 |lorem
192 |lorem
193 |lorem
194 |lorem
195 |lorem
196 |lorem
197 |lorem
198 |lorem
199 |lorem
200 |lorem
201 |lorem
202 |lorem
203 |lorem
204 |lorem
205 |lorem
206 |lorem
207 |lorem
208 |lorem
209 |lorem
210 |lorem
211 |lorem
212 |lorem
213 |lorem
214 |lorem
215 |lorem
216 |lorem
217 |lorem
218 | 219 |