@functionalcms/svelte-components 5.22.0 → 5.23.0

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.
@@ -113,5 +113,4 @@
113
113
  {@render children?.()}
114
114
  </main>
115
115
  {@render footerRender?.()}
116
-
117
116
  </div>
@@ -24,13 +24,15 @@
24
24
  img: string;
25
25
  };
26
26
  sidebarPosition?: 'fixed' | 'absolute' | 'static';
27
+ collapseButtonPosition?: 'top' | 'bottom';
27
28
  }
28
29
 
29
30
  let {
30
31
  children,
31
32
  menuItems = [],
32
33
  logo = undefined,
33
- sidebarPosition = 'fixed'
34
+ sidebarPosition = 'fixed',
35
+ collapseButtonPosition = 'top'
34
36
  }: Partial<TwoColumnLayoutProps> = $props();
35
37
 
36
38
  let container: HTMLElement | undefined = undefined;
@@ -55,56 +57,71 @@
55
57
  position={sidebarPosition}
56
58
  class="z-50 h-full transition-all duration-300 {isCollapsed ? 'w-16' : 'w-64'}"
57
59
  >
58
- <SidebarGroup>
59
- <div class="mb-4 flex items-center justify-between px-2">
60
- <button
61
- onclick={() => (isCollapsed = !isCollapsed)}
62
- class="rounded-lg p-2 hover:bg-gray-100 dark:hover:bg-gray-700"
63
- title={isCollapsed ? 'Expand menu' : 'Collapse menu'}
64
- >
65
- <Icon {icon} />
66
- </button>
67
- {#if logo && !isCollapsed}
68
- <SidebarBrand site={logo} classes={{ img: 'h-6 w-6' }} />
69
- {/if}
70
- </div>
71
- {#each menuItems as item}
72
- {#if !isCollapsed}
73
- {#if 'items' in item}
74
- <SidebarDropdownWrapper label={item.label} isOpen={item.isOpen}>
60
+ <div class="flex h-full flex-col justify-between">
61
+ <SidebarGroup>
62
+ <div class="mb-4 flex items-center justify-between px-2">
63
+ {#if collapseButtonPosition === 'top'}
64
+ <button
65
+ onclick={() => (isCollapsed = !isCollapsed)}
66
+ class="rounded-lg p-2 hover:bg-gray-100 dark:hover:bg-gray-700"
67
+ title={isCollapsed ? 'Expand menu' : 'Collapse menu'}
68
+ >
69
+ <Icon {icon} />
70
+ </button>
71
+ {/if}
72
+ {#if logo && !isCollapsed}
73
+ <SidebarBrand site={logo} classes={{ img: 'h-6 w-6' }} />
74
+ {/if}
75
+ </div>
76
+ {#each menuItems as item}
77
+ {#if !isCollapsed}
78
+ {#if 'items' in item}
79
+ <SidebarDropdownWrapper label={item.label} isOpen={item.isOpen}>
80
+ {#each item.items as subItem}
81
+ <SidebarItem label={subItem.label} href={subItem.href}>
82
+ {#snippet icon()}
83
+ <Icon icon={subItem.icon} />
84
+ {/snippet}
85
+ </SidebarItem>
86
+ {/each}
87
+ </SidebarDropdownWrapper>
88
+ {:else}
89
+ <SidebarItem label={item.label} href={item.href}>
90
+ {#snippet icon()}
91
+ <Icon icon={item.icon} />
92
+ {/snippet}
93
+ </SidebarItem>
94
+ {/if}
95
+ {:else}
96
+ <SidebarItem label="" href={item.href} class="justify-center" title={item.label}>
97
+ {#snippet icon()}
98
+ <Icon icon={item.icon} />
99
+ {/snippet}
100
+ </SidebarItem>
101
+ {#if item.items && item.isOpen}
75
102
  {#each item.items as subItem}
76
- <SidebarItem label={subItem.label} href={subItem.href}>
103
+ <SidebarItem label="" href={subItem.href}>
77
104
  {#snippet icon()}
78
105
  <Icon icon={subItem.icon} />
79
106
  {/snippet}
80
107
  </SidebarItem>
81
108
  {/each}
82
- </SidebarDropdownWrapper>
83
- {:else}
84
- <SidebarItem label={item.label} href={item.href}>
85
- {#snippet icon()}
86
- <Icon icon={item.icon} />
87
- {/snippet}
88
- </SidebarItem>
89
- {/if}
90
- {:else}
91
- <SidebarItem label="" href={item.href} class="justify-center" title={item.label}>
92
- {#snippet icon()}
93
- <Icon icon={item.icon} />
94
- {/snippet}
95
- </SidebarItem>
96
- {#if item.items && item.isOpen}
97
- {#each item.items as subItem}
98
- <SidebarItem label="" href={subItem.href}>
99
- {#snippet icon()}
100
- <Icon icon={subItem.icon} />
101
- {/snippet}
102
- </SidebarItem>
103
- {/each}
109
+ {/if}
104
110
  {/if}
105
- {/if}
106
- {/each}
107
- </SidebarGroup>
111
+ {/each}
112
+ </SidebarGroup>
113
+ {#if collapseButtonPosition === 'bottom'}
114
+ <div class="mb-2 flex items-center px-2 {isCollapsed ? 'justify-center' : ''}">
115
+ <button
116
+ onclick={() => (isCollapsed = !isCollapsed)}
117
+ class="rounded-lg p-2 hover:bg-gray-100 dark:hover:bg-gray-700"
118
+ title={isCollapsed ? 'Expand menu' : 'Collapse menu'}
119
+ >
120
+ <Icon {icon} />
121
+ </button>
122
+ </div>
123
+ {/if}
124
+ </div>
108
125
  </Sidebar>
109
126
  <div
110
127
  class="content h-full overflow-auto px-4 transition-all duration-300 {sidebarPosition ===
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@functionalcms/svelte-components",
3
- "version": "5.22.0",
3
+ "version": "5.23.0",
4
4
  "license": "MIT",
5
5
  "watch": {
6
6
  "build": {