admin-lte 4.0.0-alpha1 → 4.0.0-alpha3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/.bundlewatch.config.json +8 -8
  2. package/.cache/.eslintcache +1 -0
  3. package/.cache/.stylelintcache +1 -0
  4. package/.eslintignore +1 -0
  5. package/.eslintrc.json +16 -0
  6. package/.gitpod.yml +1 -1
  7. package/.idea/AdminLTE.iml +4 -0
  8. package/.idea/codeStyles/Project.xml +24 -0
  9. package/.idea/dbnavigator.xml +421 -0
  10. package/.idea/git_toolbox_prj.xml +15 -0
  11. package/.idea/jsLibraryMappings.xml +6 -0
  12. package/.idea/jsLinters/eslint.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.stylelintrc.json +47 -0
  15. package/LICENSE +1 -1
  16. package/README.md +6 -7
  17. package/dist/assets/img/AdminLTEFullLogo.png +0 -0
  18. package/dist/css/adminlte.css +2716 -2710
  19. package/dist/css/adminlte.css.map +1 -1
  20. package/dist/css/adminlte.min.css +2 -2
  21. package/dist/css/adminlte.min.css.map +1 -1
  22. package/dist/css/{rtl/adminlte.rtl.css → adminlte.rtl.css} +2715 -2710
  23. package/dist/css/adminlte.rtl.css.map +1 -0
  24. package/dist/css/adminlte.rtl.min.css +7 -0
  25. package/dist/css/adminlte.rtl.min.css.map +1 -0
  26. package/dist/js/adminlte.js +204 -233
  27. package/dist/js/adminlte.js.map +1 -1
  28. package/dist/js/adminlte.min.js +6 -1
  29. package/dist/js/adminlte.min.js.map +1 -1
  30. package/dist/pages/UI/timeline.html +869 -0
  31. package/dist/pages/docs/browser-support.html +755 -0
  32. package/dist/pages/docs/color-mode.html +1067 -0
  33. package/dist/pages/docs/components/main-header.html +1137 -0
  34. package/dist/pages/docs/components/main-sidebar.html +858 -0
  35. package/dist/pages/docs/faq.html +743 -0
  36. package/dist/pages/docs/how-to-contribute.html +783 -0
  37. package/dist/pages/docs/introduction.html +767 -0
  38. package/dist/pages/docs/javascript/treeview.html +762 -0
  39. package/dist/pages/docs/layout.html +788 -0
  40. package/dist/pages/docs/license.html +746 -0
  41. package/dist/pages/examples/lockscreen.html +107 -0
  42. package/dist/pages/examples/login-v2.html +148 -0
  43. package/dist/pages/examples/login.html +128 -196
  44. package/dist/pages/examples/register-v2.html +155 -0
  45. package/dist/pages/examples/register.html +131 -199
  46. package/dist/pages/forms/general.html +1065 -652
  47. package/dist/pages/index.html +1320 -0
  48. package/dist/pages/index2.html +1776 -0
  49. package/dist/pages/index3.html +1111 -0
  50. package/dist/pages/layout/collapsed-sidebar.html +766 -0
  51. package/dist/pages/layout/fixed-complete.html +867 -0
  52. package/dist/pages/layout/fixed-sidebar.html +749 -654
  53. package/dist/pages/layout/layout-rtl.html +766 -0
  54. package/dist/pages/layout/logo-switch.html +433 -0
  55. package/dist/pages/layout/sidebar-mini.html +766 -0
  56. package/dist/pages/layout/unfixed-sidebar.html +747 -654
  57. package/dist/pages/tables/simple.html +1049 -946
  58. package/dist/pages/widgets/cards.html +974 -713
  59. package/dist/pages/widgets/info-box.html +1062 -966
  60. package/dist/pages/widgets/small-box.html +792 -694
  61. package/index.html +6 -15
  62. package/package.json +59 -39
  63. package/src/assets/img/AdminLTEFullLogo.png +0 -0
  64. package/src/config/assets.config.mjs +8 -0
  65. package/src/config/astro.config.mjs +19 -0
  66. package/src/config/postcss.config.mjs +15 -0
  67. package/src/config/rollup.config.js +20 -0
  68. package/src/html/.eslintrc.json +24 -0
  69. package/src/html/.prettierrc.js +11 -0
  70. package/src/html/.tsconfig.json +4 -0
  71. package/src/html/components/_head.astro +47 -0
  72. package/src/html/components/_scripts.astro +51 -0
  73. package/src/html/components/dashboard/_footer.astro +18 -0
  74. package/src/html/components/dashboard/_sidenav.astro +553 -0
  75. package/src/html/components/dashboard/_topbar.astro +213 -0
  76. package/src/html/components/docs/browser-support.mdx +23 -0
  77. package/src/html/components/docs/color-mode.mdx +169 -0
  78. package/src/{partials/dashboard/_topbar.html → html/components/docs/components/main-header.mdx} +67 -67
  79. package/src/html/components/docs/components/main-sidebar.mdx +129 -0
  80. package/src/html/components/docs/faq.mdx +11 -0
  81. package/src/html/components/docs/how-to-contribute.mdx +34 -0
  82. package/src/html/components/docs/introduction.mdx +60 -0
  83. package/src/html/components/docs/license.mdx +9 -0
  84. package/src/html/components/javascript/treeview.mdx +39 -0
  85. package/src/html/env.d.ts +1 -0
  86. package/src/html/pages/UI/timeline.astro +221 -0
  87. package/src/html/pages/docs/browser-support.astro +71 -0
  88. package/src/html/pages/docs/color-mode.astro +271 -0
  89. package/src/html/pages/docs/components/main-header.astro +319 -0
  90. package/src/html/pages/docs/components/main-sidebar.astro +71 -0
  91. package/src/html/pages/docs/faq.astro +71 -0
  92. package/src/html/pages/docs/how-to-contribute.astro +71 -0
  93. package/src/html/pages/docs/introduction.astro +71 -0
  94. package/src/html/pages/docs/javascript/treeview.astro +71 -0
  95. package/src/html/pages/docs/layout.astro +120 -0
  96. package/src/html/pages/docs/license.astro +71 -0
  97. package/src/html/pages/examples/lockscreen.astro +63 -0
  98. package/src/html/pages/examples/login-v2.astro +109 -0
  99. package/src/{pages/examples/login.html → html/pages/examples/login.astro} +40 -22
  100. package/src/html/pages/examples/register-v2.astro +116 -0
  101. package/src/{pages/examples/register.html → html/pages/examples/register.astro} +42 -24
  102. package/src/html/pages/forms/general.astro +624 -0
  103. package/src/html/pages/index.astro +790 -0
  104. package/src/html/pages/index2.astro +1345 -0
  105. package/src/html/pages/index3.astro +513 -0
  106. package/src/html/pages/layout/collapsed-sidebar.astro +110 -0
  107. package/src/html/pages/layout/fixed-complete.astro +209 -0
  108. package/src/html/pages/layout/fixed-sidebar.astro +109 -0
  109. package/src/html/pages/layout/layout-rtl.astro +109 -0
  110. package/src/html/pages/layout/logo-switch.astro +212 -0
  111. package/src/html/pages/layout/sidebar-mini.astro +108 -0
  112. package/src/html/pages/layout/unfixed-sidebar.astro +107 -0
  113. package/src/html/pages/tables/simple.astro +472 -0
  114. package/src/html/pages/widgets/cards.astro +373 -0
  115. package/src/{pages/widgets/info-box.html → html/pages/widgets/info-box.astro} +110 -60
  116. package/src/html/pages/widgets/small-box.astro +182 -0
  117. package/src/scss/_app-content.scss +52 -0
  118. package/src/scss/_app-footer.scss +15 -0
  119. package/src/scss/_app-header.scss +26 -0
  120. package/src/scss/_app-main.scss +17 -0
  121. package/src/scss/_app-sidebar.scss +603 -0
  122. package/src/scss/{_wrapper.scss → _app-wrapper.scss} +8 -4
  123. package/src/scss/_bootstrap-variables.scss +42 -27
  124. package/src/scss/_callouts.scss +34 -0
  125. package/src/scss/_cards.scss +54 -224
  126. package/src/scss/_compact-mode.scss +79 -0
  127. package/src/scss/_direct-chat.scss +15 -9
  128. package/src/scss/_docs.scss +4 -0
  129. package/src/scss/_dropdown.scss +7 -5
  130. package/src/scss/_info-box.scss +2 -6
  131. package/src/scss/_miscellaneous.scss +0 -455
  132. package/src/scss/_mixins.scss +0 -6
  133. package/src/scss/_root.scss +2 -58
  134. package/src/scss/_small-box.scss +15 -41
  135. package/src/scss/_table.scss +0 -50
  136. package/src/scss/_timeline.scss +120 -0
  137. package/src/scss/_variables-dark.scss +15 -8
  138. package/src/scss/_variables.scss +48 -136
  139. package/src/scss/adminlte.scss +1 -1
  140. package/src/scss/mixins/_animations.scss +0 -1
  141. package/src/scss/mixins/_scrollbar.scss +2 -2
  142. package/src/scss/pages/_lockscreen.scss +74 -0
  143. package/src/scss/pages/_login_and_register.scss +1 -5
  144. package/src/scss/parts/_core.scss +9 -15
  145. package/src/scss/parts/_extra-components.scss +1 -2
  146. package/src/scss/parts/_pages.scss +1 -0
  147. package/src/ts/adminlte.ts +0 -2
  148. package/src/ts/card-widget.ts +57 -66
  149. package/src/ts/direct-chat.ts +35 -10
  150. package/src/ts/layout.ts +8 -6
  151. package/src/ts/push-menu.ts +90 -158
  152. package/src/ts/treeview.ts +30 -30
  153. package/src/ts/util/index.ts +14 -12
  154. package/src/utils/index.js +28 -0
  155. package/tsconfig.json +11 -3
  156. package/.stylelintrc +0 -40
  157. package/CHECKLIST.md +0 -0
  158. package/dist/css/rtl/adminlte.rtl.css.map +0 -1
  159. package/dist/css/rtl/adminlte.rtl.min.css +0 -7
  160. package/dist/css/rtl/adminlte.rtl.min.css.map +0 -1
  161. package/dist/index.html +0 -1065
  162. package/dist/index2.html +0 -1629
  163. package/dist/index3.html +0 -1015
  164. package/gulpfile.js +0 -315
  165. package/src/index.html +0 -476
  166. package/src/index2.html +0 -968
  167. package/src/index3.html +0 -430
  168. package/src/pages/forms/general.html +0 -97
  169. package/src/pages/layout/fixed-sidebar.html +0 -87
  170. package/src/pages/layout/unfixed-sidebar.html +0 -87
  171. package/src/pages/tables/simple.html +0 -336
  172. package/src/pages/widgets/cards.html +0 -143
  173. package/src/pages/widgets/small-box.html +0 -124
  174. package/src/partials/_head.html +0 -31
  175. package/src/partials/_scripts.html +0 -95
  176. package/src/partials/dashboard/_footer.html +0 -9
  177. package/src/partials/dashboard/_sidenav.html +0 -244
  178. package/src/scss/_brand-container.scss +0 -72
  179. package/src/scss/_content-header.scss +0 -9
  180. package/src/scss/_content-wrapper.scss +0 -6
  181. package/src/scss/_content.scss +0 -3
  182. package/src/scss/_layout-fixed.scss +0 -43
  183. package/src/scss/_layout-mobile.scss +0 -22
  184. package/src/scss/_main-footer.scss +0 -28
  185. package/src/scss/_main-header.scss +0 -40
  186. package/src/scss/_main-sidebar.scss +0 -63
  187. package/src/scss/_nav-sidebar.scss +0 -66
  188. package/src/scss/_products.scss +0 -55
  189. package/src/scss/_sidebar-close.scss +0 -6
  190. package/src/scss/_sidebar-collapse.scss +0 -120
  191. package/src/scss/_sidebar-horizontal.scss +0 -67
  192. package/src/scss/_sidebar.scss +0 -11
  193. package/src/scss/_users-list.scss +0 -45
  194. package/src/scss/mixins/_brand-variant.scss +0 -9
  195. package/src/scss/mixins/_cards.scss +0 -53
  196. package/src/scss/mixins/_direct-chat.scss +0 -17
  197. package/src/scss/mixins/_header-variant.scss +0 -22
  198. package/src/scss/mixins/_nav-treeview-dark.scss +0 -87
  199. package/src/scss/mixins/_nav-treeview-light.scss +0 -89
  200. package/src/scss/mixins/_sidebar-color.scss +0 -9
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import {
9
- domReady
9
+ onDOMContentLoaded
10
10
  } from './util/index'
11
11
 
12
12
  /**
@@ -15,29 +15,33 @@ import {
15
15
  * ------------------------------------------------------------------------
16
16
  */
17
17
 
18
+ const DATA_KEY = 'lte.push-menu'
19
+ const EVENT_KEY = `.${DATA_KEY}`
20
+
21
+ const EVENT_OPEN = `open${EVENT_KEY}`
22
+ const EVENT_COLLAPSE = `collapse${EVENT_KEY}`
23
+
18
24
  const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'
19
- const CLASS_NAME_SIDEBAR_MINI_HAD = 'sidebar-mini-had'
20
- const CLASS_NAME_SIDEBAR_HORIZONTAL = 'sidebar-horizontal'
21
25
  const CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'
22
- const CLASS_NAME_SIDEBAR_CLOSE = 'sidebar-close'
23
26
  const CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'
24
- const CLASS_NAME_SIDEBAR_OPENING = 'sidebar-is-opening'
25
- const CLASS_NAME_SIDEBAR_COLLAPSING = 'sidebar-is-collapsing'
26
- const CLASS_NAME_SIDEBAR_IS_HOVER = 'sidebar-is-hover'
27
+ const CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand'
28
+ const CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay'
27
29
  const CLASS_NAME_MENU_OPEN = 'menu-open'
28
- const CLASS_NAME_LAYOUT_MOBILE = 'layout-mobile'
29
30
 
30
- const SELECTOR_SIDEBAR = '.sidebar'
31
- const SELECTOR_NAV_SIDEBAR = '.nav-sidebar'
31
+ const SELECTOR_APP_SIDEBAR = '.app-sidebar'
32
+ const SELECTOR_SIDEBAR_MENU = '.sidebar-menu'
32
33
  const SELECTOR_NAV_ITEM = '.nav-item'
33
34
  const SELECTOR_NAV_TREEVIEW = '.nav-treeview'
34
- const SELECTOR_MINI_TOGGLE = '[data-lte-toggle="sidebar-mini"]'
35
- const SELECTOR_FULL_TOGGLE = '[data-lte-toggle="sidebar-full"]'
36
- const SELECTOR_SIDEBAR_SM = `.${CLASS_NAME_LAYOUT_MOBILE}`
37
- const SELECTOR_CONTENT_WRAPPER = '.content-wrapper'
35
+ const SELECTOR_APP_WRAPPER = '.app-wrapper'
36
+ const SELECTOR_SIDEBAR_EXPAND = `[class*="${CLASS_NAME_SIDEBAR_EXPAND}"]`
37
+ const SELECTOR_SIDEBAR_TOGGLE = '[data-lte-toggle="sidebar"]'
38
+
39
+ type Config = {
40
+ sidebarBreakpoint: number;
41
+ }
38
42
 
39
43
  const Defaults = {
40
- onLayouMobile: 992
44
+ sidebarBreakpoint: 992
41
45
  }
42
46
 
43
47
  /**
@@ -46,138 +50,73 @@ const Defaults = {
46
50
  */
47
51
 
48
52
  class PushMenu {
49
- _element: HTMLElement | undefined
50
- _config: undefined
51
- _bodyClass: DOMTokenList
52
- constructor(element: HTMLElement | undefined, config: undefined) {
53
- this._element = element
53
+ _element: HTMLElement
54
+ _config: Config
54
55
 
55
- const bodyElement = document.body as HTMLBodyElement
56
- this._bodyClass = bodyElement.classList
57
-
58
- this._config = config
59
- }
60
-
61
- sidebarOpening(): void {
62
- this._bodyClass.add(CLASS_NAME_SIDEBAR_OPENING)
63
- setTimeout(() => {
64
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_OPENING)
65
- }, 1000)
66
- }
67
-
68
- sidebarColllapsing(): void {
69
- this._bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSING)
70
- setTimeout(() => {
71
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSING)
72
- }, 1000)
56
+ constructor(element: HTMLElement, config: Config) {
57
+ this._element = element
58
+ this._config = { ...Defaults, ...config }
73
59
  }
74
60
 
75
- menusClose(): void {
61
+ // TODO
62
+ menusClose() {
76
63
  const navTreeview = document.querySelectorAll<HTMLElement>(SELECTOR_NAV_TREEVIEW)
77
64
 
78
- for (const navTree of navTreeview) {
65
+ navTreeview.forEach(navTree => {
79
66
  navTree.style.removeProperty('display')
80
67
  navTree.style.removeProperty('height')
81
- }
68
+ })
82
69
 
83
- const navSidebar = document.querySelector(SELECTOR_NAV_SIDEBAR)
70
+ const navSidebar = document.querySelector(SELECTOR_SIDEBAR_MENU)
84
71
  const navItem = navSidebar?.querySelectorAll(SELECTOR_NAV_ITEM)
85
72
 
86
73
  if (navItem) {
87
- for (const navI of navItem) {
74
+ navItem.forEach(navI => {
88
75
  navI.classList.remove(CLASS_NAME_MENU_OPEN)
89
- }
90
- }
91
- }
92
-
93
- expand(): void {
94
- this.sidebarOpening()
95
-
96
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_CLOSE)
97
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
98
- this._bodyClass.add(CLASS_NAME_SIDEBAR_OPEN)
99
- }
100
-
101
- collapse(): void {
102
- this.sidebarColllapsing()
103
-
104
- this._bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSE)
105
- }
106
-
107
- close(): void {
108
- this._bodyClass.add(CLASS_NAME_SIDEBAR_CLOSE)
109
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_OPEN)
110
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
111
-
112
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_HORIZONTAL)) {
113
- this.menusClose()
76
+ })
114
77
  }
115
78
  }
116
79
 
117
- sidebarHover(): void {
118
- const selSidebar = document.querySelector(SELECTOR_SIDEBAR)
80
+ expand() {
81
+ const event = new Event(EVENT_OPEN)
119
82
 
120
- if (selSidebar) {
121
- selSidebar.addEventListener('mouseover', () => {
122
- this._bodyClass.add(CLASS_NAME_SIDEBAR_IS_HOVER)
123
- })
83
+ document.body.classList.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
84
+ document.body.classList.add(CLASS_NAME_SIDEBAR_OPEN)
124
85
 
125
- selSidebar.addEventListener('mouseout', () => {
126
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_IS_HOVER)
127
- })
128
- }
86
+ this._element.dispatchEvent(event)
129
87
  }
130
88
 
131
- addSidebaBreakPoint(): void {
132
- const bodyClass = document.body.classList
133
- const widthOutput = window.innerWidth
89
+ collapse() {
90
+ const event = new Event(EVENT_COLLAPSE)
134
91
 
135
- if (widthOutput < Defaults.onLayouMobile) {
136
- bodyClass.add(CLASS_NAME_LAYOUT_MOBILE)
137
- }
92
+ document.body.classList.remove(CLASS_NAME_SIDEBAR_OPEN)
93
+ document.body.classList.add(CLASS_NAME_SIDEBAR_COLLAPSE)
138
94
 
139
- if (widthOutput >= Defaults.onLayouMobile) {
140
- bodyClass.remove(CLASS_NAME_LAYOUT_MOBILE)
141
- this.expand()
142
- }
95
+ this._element.dispatchEvent(event)
143
96
  }
144
97
 
145
- removeOverlaySidebar(): void {
146
- const bodyClass = document.body.classList
147
- if (bodyClass.contains(CLASS_NAME_LAYOUT_MOBILE)) {
148
- bodyClass.remove(CLASS_NAME_SIDEBAR_OPEN)
149
- bodyClass.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
150
- bodyClass.add(CLASS_NAME_SIDEBAR_CLOSE)
151
- }
152
- }
98
+ addSidebarBreakPoint() {
99
+ const sidebarExpandList = document.querySelector(SELECTOR_SIDEBAR_EXPAND)?.classList ?? []
100
+ const sidebarExpand = Array.from(sidebarExpandList).find(className => className.startsWith(CLASS_NAME_SIDEBAR_EXPAND)) ?? ''
101
+ const sidebar = document.getElementsByClassName(sidebarExpand)[0]
102
+ const sidebarContent = window.getComputedStyle(sidebar, '::before').getPropertyValue('content')
103
+ this._config = { ...this._config, sidebarBreakpoint: Number(sidebarContent.replace(/[^\d.-]/g, '')) }
153
104
 
154
- closeSidebar(): void {
155
- const widthOutput: number = window.innerWidth
156
- if (widthOutput < Defaults.onLayouMobile) {
157
- document.body.classList.add(CLASS_NAME_SIDEBAR_CLOSE)
158
- }
159
- }
160
-
161
- toggleFull(): void {
162
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_CLOSE)) {
163
- this.expand()
105
+ if (window.innerWidth <= this._config.sidebarBreakpoint) {
106
+ this.collapse()
164
107
  } else {
165
- this.close()
166
- }
108
+ if (!document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI)) {
109
+ this.expand()
110
+ }
167
111
 
168
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_MINI)) {
169
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_MINI)
170
- this._bodyClass.add(CLASS_NAME_SIDEBAR_MINI_HAD)
112
+ if (document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI) && document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
113
+ this.collapse()
114
+ }
171
115
  }
172
116
  }
173
117
 
174
- toggleMini(): void {
175
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_MINI_HAD)) {
176
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_MINI_HAD)
177
- this._bodyClass.add(CLASS_NAME_SIDEBAR_MINI)
178
- }
179
-
180
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
118
+ toggle() {
119
+ if (document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
181
120
  this.expand()
182
121
  } else {
183
122
  this.collapse()
@@ -185,18 +124,7 @@ class PushMenu {
185
124
  }
186
125
 
187
126
  init() {
188
- this.addSidebaBreakPoint()
189
- this.sidebarHover()
190
-
191
- const selSidebarSm = document.querySelector(SELECTOR_SIDEBAR_SM)
192
- const selContentWrapper = selSidebarSm?.querySelector(SELECTOR_CONTENT_WRAPPER)
193
-
194
- if (selContentWrapper) {
195
- selContentWrapper.addEventListener('touchstart', this.removeOverlaySidebar)
196
- selContentWrapper.addEventListener('click', this.removeOverlaySidebar)
197
- }
198
-
199
- this.closeSidebar()
127
+ this.addSidebarBreakPoint()
200
128
  }
201
129
  }
202
130
 
@@ -206,50 +134,54 @@ class PushMenu {
206
134
  * ------------------------------------------------------------------------
207
135
  */
208
136
 
209
- domReady(() => {
210
- const data = new PushMenu(undefined, undefined)
211
- data.init()
137
+ onDOMContentLoaded(() => {
138
+ const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR) as HTMLElement | undefined
212
139
 
213
- window.addEventListener('resize', () => {
140
+ if (sidebar) {
141
+ const data = new PushMenu(sidebar, Defaults)
214
142
  data.init()
215
- })
216
-
217
- const fullBtn = document.querySelectorAll(SELECTOR_FULL_TOGGLE)
218
143
 
219
- for (const btn of fullBtn) {
220
- btn.addEventListener('click', event => {
221
- event.preventDefault()
222
-
223
- let button = event.currentTarget as HTMLElement | undefined
224
-
225
- if (button?.dataset.lteToggle !== 'sidebar-full') {
226
- button = button?.closest(SELECTOR_FULL_TOGGLE) as HTMLElement | undefined
227
- }
228
-
229
- if (button) {
230
- const data = new PushMenu(button, undefined)
231
- data.toggleFull()
232
- }
144
+ window.addEventListener('resize', () => {
145
+ data.init()
233
146
  })
234
147
  }
235
148
 
236
- const miniBtn = document.querySelectorAll(SELECTOR_MINI_TOGGLE)
149
+ const sidebarOverlay = document.createElement('div')
150
+ sidebarOverlay.className = CLASS_NAME_SIDEBAR_OVERLAY
151
+ document.querySelector(SELECTOR_APP_WRAPPER)?.append(sidebarOverlay)
152
+
153
+ sidebarOverlay.addEventListener('touchstart', event => {
154
+ event.preventDefault()
155
+ const target = event.currentTarget as HTMLElement
156
+ const data = new PushMenu(target, Defaults)
157
+ data.collapse()
158
+ })
159
+ sidebarOverlay.addEventListener('click', event => {
160
+ event.preventDefault()
161
+ const target = event.currentTarget as HTMLElement
162
+ const data = new PushMenu(target, Defaults)
163
+ data.collapse()
164
+ })
165
+
166
+ const fullBtn = document.querySelectorAll(SELECTOR_SIDEBAR_TOGGLE)
237
167
 
238
- for (const btn of miniBtn) {
168
+ fullBtn.forEach(btn => {
239
169
  btn.addEventListener('click', event => {
240
170
  event.preventDefault()
241
171
 
242
172
  let button = event.currentTarget as HTMLElement | undefined
243
- if (button?.dataset.lteToggle !== 'sidebar-mini') {
244
- button = button?.closest(SELECTOR_FULL_TOGGLE) as HTMLElement | undefined
173
+
174
+ if (button?.dataset.lteToggle !== 'sidebar') {
175
+ button = button?.closest(SELECTOR_SIDEBAR_TOGGLE) as HTMLElement | undefined
245
176
  }
246
177
 
247
178
  if (button) {
248
- const data = new PushMenu(button, undefined)
249
- data.toggleMini()
179
+ event?.preventDefault()
180
+ const data = new PushMenu(button, Defaults)
181
+ data.toggle()
250
182
  }
251
183
  })
252
- }
184
+ })
253
185
  })
254
186
 
255
187
  export default PushMenu
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import {
9
- domReady,
9
+ onDOMContentLoaded,
10
10
  slideDown,
11
11
  slideUp
12
12
  } from './util/index'
@@ -26,8 +26,8 @@ const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
26
26
  // const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`
27
27
 
28
28
  const CLASS_NAME_MENU_OPEN = 'menu-open'
29
- const CLASS_NAME_MENU_IS_OPEN = 'menu-is-open'
30
29
  const SELECTOR_NAV_ITEM = '.nav-item'
30
+ const SELECTOR_NAV_LINK = '.nav-link'
31
31
  const SELECTOR_TREEVIEW_MENU = '.nav-treeview'
32
32
  const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="treeview"]'
33
33
 
@@ -47,46 +47,40 @@ type Config = {
47
47
  class Treeview {
48
48
  _element: HTMLElement
49
49
  _config: Config
50
- _navItem: HTMLElement | undefined
51
- _childNavItem: HTMLElement | undefined | undefined
52
50
 
53
51
  constructor(element: HTMLElement, config: Config) {
54
52
  this._element = element
55
53
  this._config = { ...Default, ...config }
56
- this._navItem = this._element?.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined
57
- this._childNavItem = this._navItem?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined
58
54
  }
59
55
 
60
56
  open(): void {
61
57
  const event = new Event(EVENT_EXPANDED)
62
58
 
63
- if (this._navItem) {
64
- this._navItem.classList.add(CLASS_NAME_MENU_OPEN)
65
- this._navItem.classList.add(CLASS_NAME_MENU_IS_OPEN)
66
- }
59
+ this._element.classList.add(CLASS_NAME_MENU_OPEN)
67
60
 
68
- if (this._childNavItem) {
69
- slideDown(this._childNavItem, this._config.animationSpeed)
70
- this._element.dispatchEvent(event)
61
+ const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined
62
+ if (childElement) {
63
+ slideDown(childElement, this._config.animationSpeed)
71
64
  }
65
+
66
+ this._element.dispatchEvent(event)
72
67
  }
73
68
 
74
69
  close(): void {
75
70
  const event = new Event(EVENT_COLLAPSED)
76
71
 
77
- if (this._navItem) {
78
- this._navItem.classList.remove(CLASS_NAME_MENU_IS_OPEN)
79
- this._navItem.classList.remove(CLASS_NAME_MENU_OPEN)
80
- }
72
+ this._element.classList.remove(CLASS_NAME_MENU_OPEN)
81
73
 
82
- if (this._childNavItem) {
83
- slideUp(this._childNavItem, this._config.animationSpeed)
84
- this._element.dispatchEvent(event)
74
+ const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined
75
+ if (childElement) {
76
+ slideUp(childElement, this._config.animationSpeed)
85
77
  }
78
+
79
+ this._element.dispatchEvent(event)
86
80
  }
87
81
 
88
82
  toggle(): void {
89
- if (this._navItem?.classList.contains(CLASS_NAME_MENU_OPEN)) {
83
+ if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
90
84
  this.close()
91
85
  } else {
92
86
  this.open()
@@ -100,19 +94,25 @@ class Treeview {
100
94
  * ------------------------------------------------------------------------
101
95
  */
102
96
 
103
- domReady(() => {
97
+ onDOMContentLoaded(() => {
104
98
  const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)
105
99
 
106
- for (const btn of button) {
100
+ button.forEach(btn => {
107
101
  btn.addEventListener('click', event => {
108
- // event.preventDefault()
109
-
110
- const treeviewMenu = event.target as HTMLElement
111
-
112
- const data = new Treeview(treeviewMenu, Default)
113
- data.toggle()
102
+ const target = event.target as HTMLElement
103
+ const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined
104
+ const targetLink = target.closest(SELECTOR_NAV_LINK) as HTMLAnchorElement | undefined
105
+
106
+ if (target?.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') {
107
+ event.preventDefault()
108
+ }
109
+
110
+ if (targetItem) {
111
+ const data = new Treeview(targetItem, Default)
112
+ data.toggle()
113
+ }
114
114
  })
115
- }
115
+ })
116
116
  })
117
117
 
118
118
  export default Treeview
@@ -1,16 +1,19 @@
1
- const domReady = (callBack: () => void): void => {
1
+ const domContentLoadedCallbacks: Array<() => void> = []
2
+
3
+ const onDOMContentLoaded = (callback: () => void): void => {
2
4
  if (document.readyState === 'loading') {
3
- document.addEventListener('DOMContentLoaded', callBack)
4
- } else {
5
- callBack()
6
- }
7
- }
5
+ // add listener on the first call when the document is in loading state
6
+ if (!domContentLoadedCallbacks.length) {
7
+ document.addEventListener('DOMContentLoaded', () => {
8
+ for (const callback of domContentLoadedCallbacks) {
9
+ callback()
10
+ }
11
+ })
12
+ }
8
13
 
9
- const windowReady = (callBack: () => void): void => {
10
- if (document.readyState === 'complete') {
11
- callBack()
14
+ domContentLoadedCallbacks.push(callback)
12
15
  } else {
13
- window.addEventListener('load', callBack)
16
+ callback()
14
17
  }
15
18
  }
16
19
 
@@ -91,8 +94,7 @@ const slideToggle = (target: HTMLElement, duration = 500) => {
91
94
  }
92
95
 
93
96
  export {
94
- domReady,
95
- windowReady,
97
+ onDOMContentLoaded,
96
98
  slideUp,
97
99
  slideDown,
98
100
  slideToggle
@@ -0,0 +1,28 @@
1
+ function convertPathToHtml(path) {
2
+ let count = 0
3
+ let htmlPath = ''
4
+ while (path.startsWith('../')) {
5
+ count++
6
+ path = path.slice(3)
7
+ }
8
+
9
+ if (count === 2) {
10
+ htmlPath = '.'
11
+ }
12
+
13
+ if (count === 3) {
14
+ htmlPath = '..'
15
+ }
16
+
17
+ if (count === 4) {
18
+ htmlPath = '../..'
19
+ }
20
+
21
+ if (count === 5) {
22
+ htmlPath = '../../..'
23
+ }
24
+
25
+ return htmlPath
26
+ }
27
+
28
+ export { convertPathToHtml }
package/tsconfig.json CHANGED
@@ -1,16 +1,25 @@
1
1
  {
2
+ "root": true,
2
3
  "compilerOptions": {
4
+ "noFallthroughCasesInSwitch": true,
3
5
  "noUnusedParameters": true,
4
6
  "noImplicitReturns": true,
5
7
  "noUnusedLocals": true,
6
8
  "noImplicitAny": true,
7
- "target": "es2018",
8
9
  "module": "esnext",
10
+ "alwaysStrict": true,
9
11
  "strict": true,
10
12
  "strictNullChecks": true,
11
13
  "strictBindCallApply": true,
12
14
  "strictFunctionTypes": true,
13
- "strictPropertyInitialization": true
15
+ "strictPropertyInitialization": true,
16
+ "baseUrl": ".",
17
+ "paths": {
18
+ "@components/*": ["src/html/components/*"],
19
+ },
20
+ /* Language and Environment */
21
+ "target": "es6",
22
+ "lib": ["es2018", "DOM"],
14
23
  },
15
24
  "include": [
16
25
  "src/ts/**/*"
@@ -18,6 +27,5 @@
18
27
  "exclude": [
19
28
  "dist",
20
29
  "node_modules",
21
- "plugins"
22
30
  ]
23
31
  }
package/.stylelintrc DELETED
@@ -1,40 +0,0 @@
1
- {
2
- "extends": [
3
- "stylelint-config-twbs-bootstrap"
4
- ],
5
- "rules": {
6
- "declaration-no-important": null,
7
- "declaration-property-value-disallowed-list": {
8
- "border": "none",
9
- "outline": "none"
10
- },
11
- "function-disallowed-list": [
12
- "calc",
13
- "lighten",
14
- "darken"
15
- ],
16
- "keyframes-name-pattern": null,
17
- "property-disallowed-list": [
18
- "border-radius",
19
- "border-top-left-radius",
20
- "border-top-right-radius",
21
- "border-bottom-right-radius",
22
- "border-bottom-left-radius",
23
- "transition"
24
- ],
25
- "scss/dollar-variable-default": [
26
- true,
27
- {
28
- "ignore": "local"
29
- }
30
- ],
31
- "scss/selector-no-union-class-name": true,
32
- "selector-max-class": null,
33
- "selector-max-combinators": null,
34
- "selector-max-compound-selectors": null,
35
- "selector-max-id": null,
36
- "selector-max-specificity": null,
37
- "selector-max-type": null,
38
- "selector-no-qualifying-type": null
39
- }
40
- }
package/CHECKLIST.md DELETED
File without changes