ks-web-comp-nav 1.3.1 → 1.4.1

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.
@@ -24,6 +24,10 @@ customElements.define(
24
24
  KSNav
25
25
  );
26
26
 
27
+ window.KSNav = KSNav;
28
+
29
+ console.log("KSNav v3 loaded to DOM");
30
+
27
31
  // export default KSNav;
28
32
  // export {
29
33
  // navDefaults,
@@ -0,0 +1,54 @@
1
+ import createBrandTitle from "./createBrandTitle.js";
2
+ import createMenuList from "./createMenuList.js";
3
+ import createMenuToggleButton from "./createMenuToggleButton.js";
4
+ import createNavigationBar from "./createNavigationBar.js";
5
+ import createNavigationRow from "./createNavigationRow.js";
6
+ import createNavigationWrapper from "./createNavigationWrapper.js";
7
+ import readNavStoryFromElement from "./readNavStoryFromElement.js";
8
+
9
+ const composeNavigationStory = ({ inElement }) => {
10
+ const story = readNavStoryFromElement({
11
+ inElement
12
+ });
13
+
14
+ const nav = createNavigationBar({
15
+ inClassName: story.navClass
16
+ });
17
+
18
+ const wrapper = createNavigationWrapper({
19
+ inClassName: story.outerClass
20
+ });
21
+
22
+ const row = createNavigationRow({
23
+ inClassName: story.innerClass
24
+ });
25
+
26
+ const brand = createBrandTitle({
27
+ inTitleId: story.titleId,
28
+ inTitle: story.title,
29
+ inClassName: story.brandClass
30
+ });
31
+
32
+ const menu = createMenuList({
33
+ inClassName: story.menuClass,
34
+ inExtraClass: story.menuExtraClass
35
+ });
36
+
37
+ const toggleButton = createMenuToggleButton({
38
+ inMenu: menu,
39
+ inClassName: story.buttonClass
40
+ });
41
+
42
+ row.append(
43
+ brand,
44
+ toggleButton,
45
+ menu
46
+ );
47
+
48
+ wrapper.appendChild(row);
49
+ nav.appendChild(wrapper);
50
+
51
+ return nav;
52
+ };
53
+
54
+ export default composeNavigationStory;
@@ -0,0 +1,11 @@
1
+ const createBrandTitle = ({ inTitleId, inTitle, inClassName }) => {
2
+ const brand = document.createElement("div");
3
+
4
+ brand.className = inClassName;
5
+ brand.id = inTitleId || "titlehtmlId";
6
+ brand.innerText = inTitle || "KeshavSoft";
7
+
8
+ return brand;
9
+ };
10
+
11
+ export default createBrandTitle;
@@ -0,0 +1,10 @@
1
+ const createMenuList = ({ inClassName, inExtraClass }) => {
2
+ const menu = document.createElement("ul");
3
+
4
+ menu.id = "menu";
5
+ menu.className = `${inClassName} ${inExtraClass || ""}`;
6
+
7
+ return menu;
8
+ };
9
+
10
+ export default createMenuList;
@@ -0,0 +1,14 @@
1
+ const createMenuToggleButton = ({ inMenu, inClassName }) => {
2
+ const button = document.createElement("button");
3
+
4
+ button.className = inClassName;
5
+ button.innerText = "☰";
6
+
7
+ button.addEventListener("click", () => {
8
+ inMenu.classList.toggle("hidden");
9
+ });
10
+
11
+ return button;
12
+ };
13
+
14
+ export default createMenuToggleButton;
@@ -0,0 +1,9 @@
1
+ const createNavigationBar = ({ inClassName }) => {
2
+ const nav = document.createElement("nav");
3
+
4
+ nav.className = inClassName;
5
+
6
+ return nav;
7
+ };
8
+
9
+ export default createNavigationBar;
@@ -0,0 +1,9 @@
1
+ const createNavigationRow = ({ inClassName }) => {
2
+ const innerDiv = document.createElement("div");
3
+
4
+ innerDiv.className = inClassName;
5
+
6
+ return innerDiv;
7
+ };
8
+
9
+ export default createNavigationRow;
@@ -0,0 +1,9 @@
1
+ const createNavigationWrapper = ({ inClassName }) => {
2
+ const outerDiv = document.createElement("div");
3
+
4
+ outerDiv.className = inClassName;
5
+
6
+ return outerDiv;
7
+ };
8
+
9
+ export default createNavigationWrapper;
@@ -0,0 +1,37 @@
1
+ import composeNavigationStory from "./composeNavigationStory.js";
2
+ import navDefaults from "./navDefaults.js";
3
+ import navUsage from "./navUsage.js";
4
+
5
+ class KSNav extends HTMLElement {
6
+ connectedCallback() {
7
+ if (this.dataset.rendered === "true") return;
8
+
9
+ this.dataset.rendered = "true";
10
+
11
+ this.appendChild(
12
+ composeNavigationStory({
13
+ inElement: this
14
+ })
15
+ );
16
+ }
17
+ }
18
+
19
+ KSNav.defaults = navDefaults;
20
+ KSNav.usage = navUsage;
21
+
22
+ customElements.define(
23
+ "ks-nav",
24
+ KSNav
25
+ );
26
+
27
+ window.KSNav = KSNav;
28
+
29
+ console.log("KSNav v3 loaded to DOM");
30
+
31
+ // export default KSNav;
32
+ // export {
33
+ // navDefaults,
34
+ // navUsage
35
+ // };
36
+
37
+ export default {};
@@ -0,0 +1,15 @@
1
+ const navDefaults = {
2
+ navClass: "bg-gray-800 text-white",
3
+ outerClass: `mx-auto px-3 py-3
4
+ max-w-3xl
5
+ lg:max-w-5xl
6
+ xl:max-w-full xl:px-10`,
7
+ innerClass: "flex flex-wrap items-center justify-between",
8
+ brandClass: "text-xl font-semibold",
9
+ menuClass: `w-full hidden flex flex-col space-y-2 mt-4
10
+ md:flex md:flex-row md:space-y-0 md:gap-4
11
+ md:mt-0 md:w-auto md:flex-wrap`,
12
+ buttonClass: "text-xl px-4 py-1 md:hidden"
13
+ };
14
+
15
+ export default navDefaults;
@@ -0,0 +1,45 @@
1
+ import navDefaults from "./navDefaults.js";
2
+
3
+ const navUsage = {
4
+ tagName: "ks-nav",
5
+ attributes: {
6
+ title: {
7
+ name: "ks-title",
8
+ defaultValue: "KeshavSoft"
9
+ },
10
+ titleId: {
11
+ name: "ks-title-id",
12
+ defaultValue: "titlehtmlId"
13
+ },
14
+ navClass: {
15
+ name: "ks-nav-class",
16
+ defaultValue: navDefaults.navClass
17
+ },
18
+ outerClass: {
19
+ name: "ks-outer-class",
20
+ defaultValue: navDefaults.outerClass
21
+ },
22
+ innerClass: {
23
+ name: "ks-inner-class",
24
+ defaultValue: navDefaults.innerClass
25
+ },
26
+ brandClass: {
27
+ name: "ks-brand-class",
28
+ defaultValue: navDefaults.brandClass
29
+ },
30
+ menuClass: {
31
+ name: "ks-menu-class",
32
+ defaultValue: navDefaults.menuClass
33
+ },
34
+ menuExtraClass: {
35
+ name: "ks-ul-class",
36
+ defaultValue: ""
37
+ },
38
+ buttonClass: {
39
+ name: "ks-button-class",
40
+ defaultValue: navDefaults.buttonClass
41
+ }
42
+ }
43
+ };
44
+
45
+ export default navUsage;
@@ -0,0 +1,9 @@
1
+ const readAttributeOrDefault = ({ inElement, inName, inDefaultValue }) => {
2
+ const value = inElement.getAttribute(inName);
3
+
4
+ if (value === null) return inDefaultValue;
5
+
6
+ return value;
7
+ };
8
+
9
+ export default readAttributeOrDefault;
@@ -0,0 +1,42 @@
1
+ import navDefaults from "./navDefaults.js";
2
+ import readAttributeOrDefault from "./readAttributeOrDefault.js";
3
+
4
+ const readNavStoryFromElement = ({ inElement }) => {
5
+ return {
6
+ navClass: readAttributeOrDefault({
7
+ inElement,
8
+ inName: "ks-nav-class",
9
+ inDefaultValue: navDefaults.navClass
10
+ }),
11
+ outerClass: readAttributeOrDefault({
12
+ inElement,
13
+ inName: "ks-outer-class",
14
+ inDefaultValue: navDefaults.outerClass
15
+ }),
16
+ innerClass: readAttributeOrDefault({
17
+ inElement,
18
+ inName: "ks-inner-class",
19
+ inDefaultValue: navDefaults.innerClass
20
+ }),
21
+ titleId: inElement.getAttribute("ks-title-id"),
22
+ title: inElement.getAttribute("ks-title"),
23
+ brandClass: readAttributeOrDefault({
24
+ inElement,
25
+ inName: "ks-brand-class",
26
+ inDefaultValue: navDefaults.brandClass
27
+ }),
28
+ menuClass: readAttributeOrDefault({
29
+ inElement,
30
+ inName: "ks-menu-class",
31
+ inDefaultValue: navDefaults.menuClass
32
+ }),
33
+ menuExtraClass: inElement.getAttribute("ks-ul-class"),
34
+ buttonClass: readAttributeOrDefault({
35
+ inElement,
36
+ inName: "ks-button-class",
37
+ inDefaultValue: navDefaults.buttonClass
38
+ })
39
+ };
40
+ };
41
+
42
+ export default readNavStoryFromElement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ks-web-comp-nav",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "description": "CLI to scaffold projects using templates",
5
5
  "keywords": [
6
6
  "tailwind",