admin-lte 4.0.0-alpha1 → 4.0.0-alpha2

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 (151) hide show
  1. package/.bundlewatch.config.json +2 -2
  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/.stylelintrc.json +47 -0
  7. package/LICENSE +1 -1
  8. package/README.md +5 -6
  9. package/dist/css/adminlte.css +2383 -2754
  10. package/dist/css/adminlte.css.map +1 -1
  11. package/dist/css/adminlte.min.css +2 -2
  12. package/dist/css/adminlte.min.css.map +1 -1
  13. package/dist/css/{rtl/adminlte.rtl.css → adminlte.rtl.css} +2377 -2749
  14. package/dist/css/adminlte.rtl.css.map +1 -0
  15. package/dist/css/adminlte.rtl.min.css +7 -0
  16. package/dist/css/adminlte.rtl.min.css.map +1 -0
  17. package/dist/js/adminlte.js +173 -182
  18. package/dist/js/adminlte.js.map +1 -1
  19. package/dist/js/adminlte.min.js +6 -1
  20. package/dist/js/adminlte.min.js.map +1 -1
  21. package/dist/pages/UI/timeline.html +698 -0
  22. package/dist/pages/docs/browser-support.html +614 -0
  23. package/dist/pages/docs/color-mode.html +855 -0
  24. package/dist/pages/docs/components/main-header.html +926 -0
  25. package/dist/pages/docs/layout.html +617 -0
  26. package/dist/pages/docs.html +617 -0
  27. package/dist/pages/examples/login.html +114 -187
  28. package/dist/pages/examples/register.html +117 -190
  29. package/dist/pages/forms/general.html +598 -647
  30. package/dist/pages/index.html +1091 -0
  31. package/dist/pages/index2.html +1452 -0
  32. package/dist/pages/index3.html +950 -0
  33. package/dist/pages/layout/fixed-sidebar.html +590 -638
  34. package/dist/pages/layout/layout-rtl.html +623 -0
  35. package/dist/pages/layout/sidebar-mini.html +623 -0
  36. package/dist/pages/layout/unfixed-sidebar.html +589 -638
  37. package/dist/pages/tables/simple.html +837 -938
  38. package/dist/pages/widgets/cards.html +814 -698
  39. package/dist/pages/widgets/info-box.html +864 -951
  40. package/dist/pages/widgets/small-box.html +625 -678
  41. package/index.html +1 -6
  42. package/package.json +53 -36
  43. package/src/config/assets.config.mjs +8 -0
  44. package/src/config/astro.config.mjs +17 -0
  45. package/src/config/postcss.config.mjs +15 -0
  46. package/src/config/rollup.config.js +20 -0
  47. package/src/html/.eslintrc.json +24 -0
  48. package/src/html/.tsconfig.json +4 -0
  49. package/src/html/components/_head.astro +31 -0
  50. package/src/html/components/_scripts.astro +40 -0
  51. package/src/html/components/dashboard/_footer.astro +12 -0
  52. package/src/html/components/dashboard/_sidenav.astro +323 -0
  53. package/src/{partials/dashboard/_topbar.html → html/components/dashboard/_topbar.astro} +20 -46
  54. package/src/html/components/docs/browser-support/index.md +22 -0
  55. package/src/html/components/docs/color-mode/navbar-html.md +80 -0
  56. package/src/{partials/_scripts.html → html/components/docs/color-mode/toggle-script.md} +5 -52
  57. package/src/html/components/docs/components/main-header-1.md +159 -0
  58. package/src/html/components/docs/introduction/index.md +35 -0
  59. package/src/html/env.d.ts +1 -0
  60. package/src/html/pages/UI/timeline.astro +158 -0
  61. package/src/html/pages/docs/browser-support.astro +58 -0
  62. package/src/html/pages/docs/color-mode.astro +224 -0
  63. package/src/html/pages/docs/components/main-header.astro +232 -0
  64. package/src/html/pages/docs/index.astro +58 -0
  65. package/src/html/pages/docs/layout.astro +77 -0
  66. package/src/{pages/examples/login.html → html/pages/examples/login.astro} +13 -13
  67. package/src/{pages/examples/register.html → html/pages/examples/register.astro} +13 -13
  68. package/src/{pages/forms/general.html → html/pages/forms/general.astro} +26 -30
  69. package/src/{index.html → html/pages/index.astro} +266 -189
  70. package/src/{index2.html → html/pages/index2.astro} +229 -284
  71. package/src/{index3.html → html/pages/index3.astro} +151 -169
  72. package/src/{pages/layout/fixed-sidebar.html → html/pages/layout/fixed-sidebar.astro} +26 -29
  73. package/src/html/pages/layout/layout-rtl.astro +84 -0
  74. package/src/html/pages/layout/sidebar-mini.astro +83 -0
  75. package/src/{pages/layout/unfixed-sidebar.html → html/pages/layout/unfixed-sidebar.astro} +26 -30
  76. package/src/{pages/tables/simple.html → html/pages/tables/simple.astro} +26 -30
  77. package/src/html/pages/widgets/cards.astro +308 -0
  78. package/src/{pages/widgets/info-box.html → html/pages/widgets/info-box.astro} +26 -31
  79. package/src/html/pages/widgets/small-box.astro +121 -0
  80. package/src/scss/_app-footer.scss +15 -0
  81. package/src/scss/_app-header.scss +26 -0
  82. package/src/scss/_app-main.scss +20 -0
  83. package/src/scss/_app-sidebar.scss +429 -0
  84. package/src/scss/{_wrapper.scss → _app-wrapper.scss} +8 -4
  85. package/src/scss/_bootstrap-variables.scss +41 -26
  86. package/src/scss/_callouts.scss +34 -0
  87. package/src/scss/_cards.scss +30 -224
  88. package/src/scss/_direct-chat.scss +15 -9
  89. package/src/scss/_docs.scss +4 -0
  90. package/src/scss/_dropdown.scss +7 -5
  91. package/src/scss/_info-box.scss +2 -6
  92. package/src/scss/_miscellaneous.scss +0 -455
  93. package/src/scss/_mixins.scss +0 -6
  94. package/src/scss/_root.scss +2 -58
  95. package/src/scss/_small-box.scss +15 -38
  96. package/src/scss/_table.scss +0 -50
  97. package/src/scss/_timeline.scss +120 -0
  98. package/src/scss/_variables-dark.scss +15 -8
  99. package/src/scss/_variables.scss +30 -135
  100. package/src/scss/adminlte.scss +1 -1
  101. package/src/scss/mixins/_animations.scss +4 -0
  102. package/src/scss/mixins/_scrollbar.scss +2 -2
  103. package/src/scss/pages/_login_and_register.scss +1 -2
  104. package/src/scss/parts/_core.scss +7 -15
  105. package/src/scss/parts/_extra-components.scss +1 -2
  106. package/src/ts/adminlte.ts +0 -2
  107. package/src/ts/card-widget.ts +42 -18
  108. package/src/ts/direct-chat.ts +33 -8
  109. package/src/ts/layout.ts +6 -4
  110. package/src/ts/push-menu.ts +94 -145
  111. package/src/ts/treeview.ts +17 -23
  112. package/src/ts/util/index.ts +2 -2
  113. package/src/utils/index.js +11 -0
  114. package/tsconfig.json +11 -3
  115. package/.stylelintrc +0 -40
  116. package/CHECKLIST.md +0 -0
  117. package/dist/css/rtl/adminlte.rtl.css.map +0 -1
  118. package/dist/css/rtl/adminlte.rtl.min.css +0 -7
  119. package/dist/css/rtl/adminlte.rtl.min.css.map +0 -1
  120. package/dist/index.html +0 -1065
  121. package/dist/index2.html +0 -1629
  122. package/dist/index3.html +0 -1015
  123. package/gulpfile.js +0 -315
  124. package/src/pages/widgets/cards.html +0 -143
  125. package/src/pages/widgets/small-box.html +0 -124
  126. package/src/partials/_head.html +0 -31
  127. package/src/partials/dashboard/_footer.html +0 -9
  128. package/src/partials/dashboard/_sidenav.html +0 -244
  129. package/src/scss/_brand-container.scss +0 -72
  130. package/src/scss/_content-header.scss +0 -9
  131. package/src/scss/_content-wrapper.scss +0 -6
  132. package/src/scss/_content.scss +0 -3
  133. package/src/scss/_layout-fixed.scss +0 -43
  134. package/src/scss/_layout-mobile.scss +0 -22
  135. package/src/scss/_main-footer.scss +0 -28
  136. package/src/scss/_main-header.scss +0 -40
  137. package/src/scss/_main-sidebar.scss +0 -63
  138. package/src/scss/_nav-sidebar.scss +0 -66
  139. package/src/scss/_products.scss +0 -55
  140. package/src/scss/_sidebar-close.scss +0 -6
  141. package/src/scss/_sidebar-collapse.scss +0 -120
  142. package/src/scss/_sidebar-horizontal.scss +0 -67
  143. package/src/scss/_sidebar.scss +0 -11
  144. package/src/scss/_users-list.scss +0 -45
  145. package/src/scss/mixins/_brand-variant.scss +0 -9
  146. package/src/scss/mixins/_cards.scss +0 -53
  147. package/src/scss/mixins/_direct-chat.scss +0 -17
  148. package/src/scss/mixins/_header-variant.scss +0 -22
  149. package/src/scss/mixins/_nav-treeview-dark.scss +0 -87
  150. package/src/scss/mixins/_nav-treeview-light.scss +0 -89
  151. package/src/scss/mixins/_sidebar-color.scss +0 -9
@@ -14,6 +14,11 @@ import {
14
14
  * ====================================================
15
15
  */
16
16
 
17
+ const DATA_KEY = 'lte.direct-chat'
18
+ const EVENT_KEY = `.${DATA_KEY}`
19
+ const EVENT_EXPANDED = `expanded${EVENT_KEY}`
20
+ const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
21
+
17
22
  const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="chat-pane"]'
18
23
  const SELECTOR_DIRECT_CHAT = '.direct-chat'
19
24
 
@@ -25,9 +30,25 @@ const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'
25
30
  */
26
31
 
27
32
  class DirectChat {
28
- toggle(chatPane: Element): void {
29
- // chatPane
30
- chatPane.closest(SELECTOR_DIRECT_CHAT)?.classList.toggle(CLASS_NAME_DIRECT_CHAT_OPEN)
33
+ _element: HTMLElement
34
+ constructor(element: HTMLElement) {
35
+ this._element = element
36
+ }
37
+
38
+ toggle(): void {
39
+ if (this._element.classList.contains(CLASS_NAME_DIRECT_CHAT_OPEN)) {
40
+ const event = new Event(EVENT_COLLAPSED)
41
+
42
+ this._element.classList.remove(CLASS_NAME_DIRECT_CHAT_OPEN)
43
+
44
+ this._element.dispatchEvent(event)
45
+ } else {
46
+ const event = new Event(EVENT_EXPANDED)
47
+
48
+ this._element.classList.add(CLASS_NAME_DIRECT_CHAT_OPEN)
49
+
50
+ this._element.dispatchEvent(event)
51
+ }
31
52
  }
32
53
  }
33
54
 
@@ -40,14 +61,18 @@ class DirectChat {
40
61
  domReady(() => {
41
62
  const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)
42
63
 
43
- for (const btn of button) {
64
+ button.forEach(btn => {
44
65
  btn.addEventListener('click', event => {
45
66
  event.preventDefault()
46
- const chatPane = event.target as Element
47
- const data = new DirectChat()
48
- data.toggle(chatPane)
67
+ const target = event.target as HTMLElement
68
+ const chatPane = target.closest(SELECTOR_DIRECT_CHAT) as HTMLElement | undefined
69
+
70
+ if (chatPane) {
71
+ const data = new DirectChat(chatPane)
72
+ data.toggle()
73
+ }
49
74
  })
50
- }
75
+ })
51
76
  })
52
77
 
53
78
  export default DirectChat
package/src/ts/layout.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  */
17
17
 
18
18
  const CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'
19
+ const CLASS_NAME_APP_LOADED = 'app-loaded'
19
20
 
20
21
  /**
21
22
  * Class Definition
@@ -24,11 +25,9 @@ const CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'
24
25
 
25
26
  class Layout {
26
27
  _element: HTMLElement
27
- _config: undefined
28
28
 
29
- constructor(element: HTMLElement, config: undefined) {
29
+ constructor(element: HTMLElement) {
30
30
  this._element = element
31
- this._config = config as unknown as undefined
32
31
  }
33
32
 
34
33
  holdTransition(): void {
@@ -44,8 +43,11 @@ class Layout {
44
43
  }
45
44
 
46
45
  domReady(() => {
47
- const data = new Layout(document.body, undefined)
46
+ const data = new Layout(document.body)
48
47
  data.holdTransition()
48
+ setTimeout(() => {
49
+ document.body.classList.add(CLASS_NAME_APP_LOADED)
50
+ }, 400)
49
51
  })
50
52
 
51
53
  export default Layout
@@ -15,29 +15,35 @@ 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
27
  const CLASS_NAME_SIDEBAR_IS_HOVER = 'sidebar-is-hover'
28
+ const CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand'
29
+ const CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay'
27
30
  const CLASS_NAME_MENU_OPEN = 'menu-open'
28
- const CLASS_NAME_LAYOUT_MOBILE = 'layout-mobile'
29
31
 
30
- const SELECTOR_SIDEBAR = '.sidebar'
31
- const SELECTOR_NAV_SIDEBAR = '.nav-sidebar'
32
+ const SELECTOR_APP_SIDEBAR = '.app-sidebar'
33
+ const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper'
34
+ const SELECTOR_SIDEBAR_MENU = '.sidebar-menu'
32
35
  const SELECTOR_NAV_ITEM = '.nav-item'
33
36
  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'
37
+ const SELECTOR_APP_WRAPPER = '.app-wrapper'
38
+ const SELECTOR_SIDEBAR_EXPAND = `[class*="${CLASS_NAME_SIDEBAR_EXPAND}"]`
39
+ const SELECTOR_SIDEBAR_TOGGLE = '[data-lte-toggle="sidebar"]'
40
+
41
+ type Config = {
42
+ sidebarBreakpoint: number;
43
+ }
38
44
 
39
45
  const Defaults = {
40
- onLayouMobile: 992
46
+ sidebarBreakpoint: 992
41
47
  }
42
48
 
43
49
  /**
@@ -46,138 +52,87 @@ const Defaults = {
46
52
  */
47
53
 
48
54
  class PushMenu {
49
- _element: HTMLElement | undefined
50
- _config: undefined
51
- _bodyClass: DOMTokenList
52
- constructor(element: HTMLElement | undefined, config: undefined) {
53
- this._element = element
54
-
55
- const bodyElement = document.body as HTMLBodyElement
56
- this._bodyClass = bodyElement.classList
57
-
58
- this._config = config
59
- }
55
+ _element: HTMLElement
56
+ _config: Config
60
57
 
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)
58
+ constructor(element: HTMLElement, config: Config) {
59
+ this._element = element
60
+ this._config = { ...Defaults, ...config }
73
61
  }
74
62
 
75
- menusClose(): void {
63
+ // TODO
64
+ menusClose() {
76
65
  const navTreeview = document.querySelectorAll<HTMLElement>(SELECTOR_NAV_TREEVIEW)
77
66
 
78
- for (const navTree of navTreeview) {
67
+ navTreeview.forEach(navTree => {
79
68
  navTree.style.removeProperty('display')
80
69
  navTree.style.removeProperty('height')
81
- }
70
+ })
82
71
 
83
- const navSidebar = document.querySelector(SELECTOR_NAV_SIDEBAR)
72
+ const navSidebar = document.querySelector(SELECTOR_SIDEBAR_MENU)
84
73
  const navItem = navSidebar?.querySelectorAll(SELECTOR_NAV_ITEM)
85
74
 
86
75
  if (navItem) {
87
- for (const navI of navItem) {
76
+ navItem.forEach(navI => {
88
77
  navI.classList.remove(CLASS_NAME_MENU_OPEN)
89
- }
78
+ })
90
79
  }
91
80
  }
92
81
 
93
- expand(): void {
94
- this.sidebarOpening()
82
+ expand() {
83
+ const event = new Event(EVENT_OPEN)
95
84
 
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()
85
+ document.body.classList.remove(CLASS_NAME_SIDEBAR_COLLAPSE)
86
+ document.body.classList.add(CLASS_NAME_SIDEBAR_OPEN)
103
87
 
104
- this._bodyClass.add(CLASS_NAME_SIDEBAR_COLLAPSE)
88
+ this._element.dispatchEvent(event)
105
89
  }
106
90
 
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)
91
+ collapse() {
92
+ const event = new Event(EVENT_COLLAPSE)
111
93
 
112
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_HORIZONTAL)) {
113
- this.menusClose()
114
- }
94
+ document.body.classList.remove(CLASS_NAME_SIDEBAR_OPEN)
95
+ document.body.classList.add(CLASS_NAME_SIDEBAR_COLLAPSE)
96
+
97
+ this._element.dispatchEvent(event)
115
98
  }
116
99
 
117
- sidebarHover(): void {
118
- const selSidebar = document.querySelector(SELECTOR_SIDEBAR)
100
+ sidebarHover() {
101
+ const selSidebar = document.querySelector(SELECTOR_SIDEBAR_WRAPPER)
119
102
 
120
103
  if (selSidebar) {
121
104
  selSidebar.addEventListener('mouseover', () => {
122
- this._bodyClass.add(CLASS_NAME_SIDEBAR_IS_HOVER)
105
+ document.body.classList.add(CLASS_NAME_SIDEBAR_IS_HOVER)
123
106
  })
124
107
 
125
108
  selSidebar.addEventListener('mouseout', () => {
126
- this._bodyClass.remove(CLASS_NAME_SIDEBAR_IS_HOVER)
109
+ document.body.classList.remove(CLASS_NAME_SIDEBAR_IS_HOVER)
127
110
  })
128
111
  }
129
112
  }
130
113
 
131
- addSidebaBreakPoint(): void {
132
- const bodyClass = document.body.classList
133
- const widthOutput = window.innerWidth
134
-
135
- if (widthOutput < Defaults.onLayouMobile) {
136
- bodyClass.add(CLASS_NAME_LAYOUT_MOBILE)
137
- }
138
-
139
- if (widthOutput >= Defaults.onLayouMobile) {
140
- bodyClass.remove(CLASS_NAME_LAYOUT_MOBILE)
141
- this.expand()
142
- }
143
- }
144
-
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
- }
153
-
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
- }
114
+ addSidebarBreakPoint() {
115
+ const sidebarExpandList = document.querySelector(SELECTOR_SIDEBAR_EXPAND)?.classList ?? []
116
+ const sidebarExpand = Array.from(sidebarExpandList).find(className => className.startsWith(CLASS_NAME_SIDEBAR_EXPAND)) ?? ''
117
+ const sidebar = document.getElementsByClassName(sidebarExpand)[0]
118
+ const sidebarContent = window.getComputedStyle(sidebar, '::before').getPropertyValue('content')
119
+ this._config = { ...this._config, sidebarBreakpoint: Number(sidebarContent.replace(/[^\d.-]/g, '')) }
160
120
 
161
- toggleFull(): void {
162
- if (this._bodyClass.contains(CLASS_NAME_SIDEBAR_CLOSE)) {
163
- this.expand()
121
+ if (window.innerWidth <= this._config.sidebarBreakpoint) {
122
+ this.collapse()
164
123
  } else {
165
- this.close()
166
- }
124
+ if (!document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI)) {
125
+ this.expand()
126
+ }
167
127
 
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)
128
+ if (document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI)) {
129
+ this.collapse()
130
+ }
171
131
  }
172
132
  }
173
133
 
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)) {
134
+ toggle() {
135
+ if (document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {
181
136
  this.expand()
182
137
  } else {
183
138
  this.collapse()
@@ -185,18 +140,8 @@ class PushMenu {
185
140
  }
186
141
 
187
142
  init() {
188
- this.addSidebaBreakPoint()
143
+ this.addSidebarBreakPoint()
189
144
  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()
200
145
  }
201
146
  }
202
147
 
@@ -207,49 +152,53 @@ class PushMenu {
207
152
  */
208
153
 
209
154
  domReady(() => {
210
- const data = new PushMenu(undefined, undefined)
211
- data.init()
155
+ const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR) as HTMLElement | undefined
212
156
 
213
- window.addEventListener('resize', () => {
157
+ if (sidebar) {
158
+ const data = new PushMenu(sidebar, Defaults)
214
159
  data.init()
215
- })
216
-
217
- const fullBtn = document.querySelectorAll(SELECTOR_FULL_TOGGLE)
218
-
219
- for (const btn of fullBtn) {
220
- btn.addEventListener('click', event => {
221
- event.preventDefault()
222
-
223
- let button = event.currentTarget as HTMLElement | undefined
224
160
 
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
- }
161
+ window.addEventListener('resize', () => {
162
+ data.init()
233
163
  })
234
164
  }
235
165
 
236
- const miniBtn = document.querySelectorAll(SELECTOR_MINI_TOGGLE)
166
+ const sidebarOverlay = document.createElement('div')
167
+ sidebarOverlay.className = CLASS_NAME_SIDEBAR_OVERLAY
168
+ document.querySelector(SELECTOR_APP_WRAPPER)?.append(sidebarOverlay)
237
169
 
238
- for (const btn of miniBtn) {
170
+ sidebarOverlay.addEventListener('touchstart', event => {
171
+ event.preventDefault()
172
+ const target = event.currentTarget as HTMLElement
173
+ const data = new PushMenu(target, Defaults)
174
+ data.collapse()
175
+ })
176
+ sidebarOverlay.addEventListener('click', event => {
177
+ event.preventDefault()
178
+ const target = event.currentTarget as HTMLElement
179
+ const data = new PushMenu(target, Defaults)
180
+ data.collapse()
181
+ })
182
+
183
+ const fullBtn = document.querySelectorAll(SELECTOR_SIDEBAR_TOGGLE)
184
+
185
+ fullBtn.forEach(btn => {
239
186
  btn.addEventListener('click', event => {
240
187
  event.preventDefault()
241
188
 
242
189
  let button = event.currentTarget as HTMLElement | undefined
243
- if (button?.dataset.lteToggle !== 'sidebar-mini') {
244
- button = button?.closest(SELECTOR_FULL_TOGGLE) as HTMLElement | undefined
190
+
191
+ if (button?.dataset.lteToggle !== 'sidebar') {
192
+ button = button?.closest(SELECTOR_SIDEBAR_TOGGLE) as HTMLElement | undefined
245
193
  }
246
194
 
247
195
  if (button) {
248
- const data = new PushMenu(button, undefined)
249
- data.toggleMini()
196
+ event?.preventDefault()
197
+ const data = new PushMenu(button, Defaults)
198
+ data.toggle()
250
199
  }
251
200
  })
252
- }
201
+ })
253
202
  })
254
203
 
255
204
  export default PushMenu
@@ -26,7 +26,6 @@ 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'
31
30
  const SELECTOR_TREEVIEW_MENU = '.nav-treeview'
32
31
  const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="treeview"]'
@@ -47,46 +46,40 @@ type Config = {
47
46
  class Treeview {
48
47
  _element: HTMLElement
49
48
  _config: Config
50
- _navItem: HTMLElement | undefined
51
- _childNavItem: HTMLElement | undefined | undefined
49
+ _childNavItem: HTMLElement | 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
54
+ this._childNavItem = this._element.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined
58
55
  }
59
56
 
60
57
  open(): void {
61
58
  const event = new Event(EVENT_EXPANDED)
62
59
 
63
- if (this._navItem) {
64
- this._navItem.classList.add(CLASS_NAME_MENU_OPEN)
65
- this._navItem.classList.add(CLASS_NAME_MENU_IS_OPEN)
66
- }
60
+ this._element.classList.add(CLASS_NAME_MENU_OPEN)
67
61
 
68
62
  if (this._childNavItem) {
69
63
  slideDown(this._childNavItem, this._config.animationSpeed)
70
- this._element.dispatchEvent(event)
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
74
  if (this._childNavItem) {
83
75
  slideUp(this._childNavItem, this._config.animationSpeed)
84
- this._element.dispatchEvent(event)
85
76
  }
77
+
78
+ this._element.dispatchEvent(event)
86
79
  }
87
80
 
88
81
  toggle(): void {
89
- if (this._navItem?.classList.contains(CLASS_NAME_MENU_OPEN)) {
82
+ if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
90
83
  this.close()
91
84
  } else {
92
85
  this.open()
@@ -103,16 +96,17 @@ class Treeview {
103
96
  domReady(() => {
104
97
  const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)
105
98
 
106
- for (const btn of button) {
99
+ button.forEach(btn => {
107
100
  btn.addEventListener('click', event => {
108
- // event.preventDefault()
109
-
110
- const treeviewMenu = event.target as HTMLElement
101
+ const target = event.target as HTMLElement
102
+ const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined
111
103
 
112
- const data = new Treeview(treeviewMenu, Default)
113
- data.toggle()
104
+ if (targetItem) {
105
+ const data = new Treeview(targetItem, Default)
106
+ data.toggle()
107
+ }
114
108
  })
115
- }
109
+ })
116
110
  })
117
111
 
118
112
  export default Treeview
@@ -1,4 +1,4 @@
1
- const domReady = (callBack: () => void): void => {
1
+ const domReady = (callBack: () => void) => {
2
2
  if (document.readyState === 'loading') {
3
3
  document.addEventListener('DOMContentLoaded', callBack)
4
4
  } else {
@@ -6,7 +6,7 @@ const domReady = (callBack: () => void): void => {
6
6
  }
7
7
  }
8
8
 
9
- const windowReady = (callBack: () => void): void => {
9
+ const windowReady = (callBack: () => void) => {
10
10
  if (document.readyState === 'complete') {
11
11
  callBack()
12
12
  } else {
@@ -0,0 +1,11 @@
1
+ function convertPathToHtml(path) {
2
+ let htmlpath = ''
3
+ while (path.startsWith('../')) {
4
+ path = path.slice(3)
5
+ htmlpath += htmlpath.length < 2 ? '.' : '/..'
6
+ }
7
+
8
+ return htmlpath
9
+ }
10
+
11
+ 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