@sierra-95/svelte-scaffold 1.0.30 → 1.0.32

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.
@@ -2,4 +2,5 @@ import type { FileInputStoreMediaItem } from '../index.js';
2
2
  export declare function getPreviewUrlForMedia(file: File): string;
3
3
  export declare function toggleSelectForMedia(item: FileInputStoreMediaItem, urlsOnly: boolean): void;
4
4
  export declare function removeFileForMedia(index: number, e: Event): void;
5
+ export declare const IMAGE_MIME_TYPES_PREVIEW: string[];
5
6
  export declare const DOCUMENT_MIME_TYPES: Set<string>;
@@ -22,6 +22,13 @@ export function removeFileForMedia(index, e) {
22
22
  selectedFiles: state.selectedFiles.filter((_, i) => i !== index)
23
23
  }));
24
24
  }
25
+ export const IMAGE_MIME_TYPES_PREVIEW = [
26
+ 'image/jpeg',
27
+ 'image/png',
28
+ 'image/webp',
29
+ 'image/gif',
30
+ 'image/svg+xml'
31
+ ];
25
32
  export const DOCUMENT_MIME_TYPES = new Set([
26
33
  'application/pdf',
27
34
  'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import {ButtonTimes,ButtonSelect, fileInputStore, removeFileForMedia, toggleSelectForMedia} from '../../../../../index.js'
3
+ import Generic from '../generic.svelte';
3
4
  export let media;
4
5
  export let buttonTimes = false;
5
6
  export let urlsOnly = true;
@@ -10,7 +11,7 @@
10
11
  <div style="display: flex; flex-wrap: wrap; gap: 1rem;">
11
12
  {#each media.Others as item}
12
13
  <div on:click={() => toggleSelectForMedia(item, urlsOnly)} role="none" class="sierra-translate" style="position: relative; width: 70px; cursor: pointer;">
13
- <img src="https://files.michaelmachohi.com/svelte-scaffold/icons/generic.icon.png" alt="Generic File Icon" style="height: 70px;"/>
14
+ <Generic/>
14
15
  {#if buttonTimes}
15
16
  <ButtonTimes vertical="bottom" onclick={(e: Event) => removeFileForMedia(
16
17
  $fileInputStore.selectedFiles.indexOf(item), e
@@ -1,17 +1,44 @@
1
1
  <script lang="ts">
2
- import {ButtonTimes, fileInputStore, ButtonSelect, getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia} from '../../../../../index.js'
2
+ import {ButtonTimes, fileInputStore, ButtonSelect, getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia, IMAGE_MIME_TYPES_PREVIEW} from '../../../../../index.js'
3
+ import Generic from '../generic.svelte';
4
+
3
5
  export let media;
4
6
  export let buttonTimes = false;
5
7
  export let urlsOnly = true;
8
+
9
+ function isPreviewable(item: any): boolean {
10
+ if (urlsOnly) {
11
+ return IMAGE_MIME_TYPES_PREVIEW.includes((item).mime_type);
12
+ }
13
+
14
+ return IMAGE_MIME_TYPES_PREVIEW.includes((item).type);
15
+ }
16
+
17
+ function previewUrl(item: any): string | null {
18
+ if (!item) return null;
19
+
20
+ return isPreviewable(item)
21
+ ? (urlsOnly ? (item).url : getPreviewUrlForMedia(item))
22
+ : null;
23
+ }
24
+
6
25
  </script>
7
26
 
27
+ {#snippet imageTag(url: string)}
28
+ <img src={url} alt={url} style="width: 100%; height: 100px; object-fit: cover" />
29
+ {/snippet}
30
+
8
31
  {#if media.Images.length === 0}
9
32
  <p>No images available.</p>
10
33
  {:else}
11
34
  <div style="display: flex; flex-wrap: wrap; gap: 1rem;">
12
35
  {#each media.Images as item}
13
- <div on:click={() => toggleSelectForMedia(item, urlsOnly)} role="none" class="sierra-translate" style="position:relative; box-shadow: var(--box-shadow-secondary);width: 150px;border-radius: 0.3rem;cursor: pointer; background-color: var(--background-tertiary);">
14
- <img src={urlsOnly ? item.url : getPreviewUrlForMedia(item)} alt={item} style="width: 100%; height: 100px; object-fit: cover;border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem;" />
36
+ <div on:click={() => toggleSelectForMedia(item, urlsOnly)} role="none" class="sierra-translate" style="position:relative; cursor: pointer; width: {previewUrl(item)? '150px':''}">
37
+ {#if previewUrl(item)}
38
+ {@render imageTag(item.url)}
39
+ {:else}
40
+ <Generic/>
41
+ {/if}
15
42
  <h3 style="margin: 0.5rem" class="sierra-text-ellipsis">{item.original_name || item.name}</h3>
16
43
  {#if buttonTimes}
17
44
  <ButtonTimes vertical="bottom" onclick={(e: Event) => removeFileForMedia(
@@ -0,0 +1 @@
1
+ <img src="https://files.michaelmachohi.com/svelte-scaffold/icons/generic.icon.png" alt="Generic File Icon" style="height: 70px;"/>
@@ -0,0 +1,26 @@
1
+ export default Generic;
2
+ type Generic = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Generic: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -63,7 +63,7 @@
63
63
  await loadMedia();
64
64
  });
65
65
 
66
- $: if ($fileInputStore.requestReload){
66
+ $: if ($fileInputStore.requestReload && childFunctionRef){
67
67
  fileInputStore.update(store => ({
68
68
  ...store,
69
69
  requestReload: false
@@ -1,16 +1,16 @@
1
1
  <script>
2
2
  let {
3
- dashboardMenuSize,
4
- dashboardMenuColor
3
+ toggleMenuColor,
4
+ toggleMenuSize,
5
5
  } = $props();
6
6
  </script>
7
- <svg width={dashboardMenuSize} height={dashboardMenuSize} viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="#000000" stroke="#000000">
7
+ <svg width={toggleMenuSize} height={toggleMenuSize} viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="#000000" stroke="#000000">
8
8
  <g id="SVGRepo_bgCarrier" stroke-width="0"/>
9
9
 
10
10
  <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
11
11
 
12
12
  <g id="SVGRepo_iconCarrier">
13
13
 
14
- <path fill={dashboardMenuColor} d="M640 384v256H384V384h256zm64 0h192v256H704V384zm-64 512H384V704h256v192zm64 0V704h192v192H704zm-64-768v192H384V128h256zm64 0h192v192H704V128zM320 384v256H128V384h192zm0 512H128V704h192v192zm0-768v192H128V128h192z"/>
14
+ <path fill={toggleMenuColor} d="M640 384v256H384V384h256zm64 0h192v256H704V384zm-64 512H384V704h256v192zm64 0V704h192v192H704zm-64-768v192H384V128h256zm64 0h192v192H704V128zM320 384v256H128V384h192zm0 512H128V704h192v192zm0-768v192H128V128h192z"/>
15
15
  </g>
16
16
  </svg>
@@ -4,10 +4,10 @@ type GridIcon = {
4
4
  $set?(props: Partial<$$ComponentProps>): void;
5
5
  };
6
6
  declare const GridIcon: import("svelte").Component<{
7
- dashboardMenuSize: any;
8
- dashboardMenuColor: any;
7
+ toggleMenuColor: any;
8
+ toggleMenuSize: any;
9
9
  }, {}, "">;
10
10
  type $$ComponentProps = {
11
- dashboardMenuSize: any;
12
- dashboardMenuColor: any;
11
+ toggleMenuColor: any;
12
+ toggleMenuSize: any;
13
13
  };
@@ -0,0 +1,10 @@
1
+ <script>
2
+ let {
3
+ toggleMenuColor,
4
+ } = $props();
5
+ </script>
6
+ <div>
7
+ <div class="bar" style="background-color: {toggleMenuColor};"></div>
8
+ <div class="bar" style="background-color: {toggleMenuColor};"></div>
9
+ <div class="bar" style="background-color: {toggleMenuColor};"></div>
10
+ </div>
@@ -0,0 +1,11 @@
1
+ export default Hamburger;
2
+ type Hamburger = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ declare const Hamburger: import("svelte").Component<{
7
+ toggleMenuColor: any;
8
+ }, {}, "">;
9
+ type $$ComponentProps = {
10
+ toggleMenuColor: any;
11
+ };
@@ -10,7 +10,6 @@
10
10
  width: 30px;
11
11
  height: 3px;
12
12
  margin: 4px auto;
13
- background-color: var(--hamburger);
14
13
  border-radius: 5px;
15
14
  transition: 0.3s;
16
15
  }
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import {buttonRipple} from '../../../../index.js';
3
3
  import GridIcon from './gridIcon.svelte';
4
+ import Hamburger from './hamburger.svelte';
4
5
  import './header.css';
5
6
  const {
6
7
  headerTitle,
@@ -10,13 +11,13 @@
10
11
  toggleMenu = (() => {}),
11
12
  headerCenterContent,
12
13
  headerRightContent,
13
- dashboardMenuColor,
14
- dashboardMenuSize,
15
- dashboardMenu,
14
+ toggleMenuColor,
15
+ toggleMenuSize,
16
+ gridToggle
16
17
  } = $props();
17
18
 
18
19
  function conditionalRipple(node: HTMLElement) {
19
- if (dashboardMenu) {
20
+ if (gridToggle) {
20
21
  return buttonRipple(node);
21
22
  }
22
23
  }
@@ -35,13 +36,11 @@
35
36
  <div>{@render headerCenterContent?.()}</div>
36
37
  <div style="display: flex; gap: 1rem; align-items: center;">
37
38
  {@render headerRightContent?.()}
38
- <button use:conditionalRipple onclick={toggleMenu} title="Menu" style="margin-right: 1rem;">
39
- {#if dashboardMenu}
40
- <GridIcon {dashboardMenuColor} {dashboardMenuSize} />
39
+ <button use:conditionalRipple onclick={toggleMenu} title="Menu" style="display:flex;align-items:center;justify-content:center;margin-right: 1rem; height:40px; width:40px;">
40
+ {#if gridToggle}
41
+ <GridIcon {toggleMenuColor} {toggleMenuSize} />
41
42
  {:else}
42
- <div class="bar"></div>
43
- <div class="bar"></div>
44
- <div class="bar"></div>
43
+ <Hamburger {toggleMenuColor} />
45
44
  {/if}
46
45
  </button>
47
46
  </div>
@@ -7,9 +7,9 @@ declare const Header: import("svelte").Component<{
7
7
  toggleMenu?: any;
8
8
  headerCenterContent: any;
9
9
  headerRightContent: any;
10
- dashboardMenuColor: any;
11
- dashboardMenuSize: any;
12
- dashboardMenu: any;
10
+ toggleMenuColor: any;
11
+ toggleMenuSize: any;
12
+ gridToggle: any;
13
13
  }, {}, "">;
14
14
  type Header = ReturnType<typeof Header>;
15
15
  export default Header;
@@ -18,9 +18,9 @@
18
18
  headerCenterContent = null,
19
19
  headerRightContent = null,
20
20
  paddingOff = false,
21
- dashboardMenu = false,
22
- dashboardMenuColor = 'var(--text)',
23
- dashboardMenuSize = "30px",
21
+ gridToggle = false,
22
+ toggleMenuColor = 'var(--hamburger)',
23
+ toggleMenuSize = "25px",
24
24
  } = $props();
25
25
 
26
26
 
@@ -80,9 +80,9 @@
80
80
  {toggleMenu}
81
81
  {headerCenterContent}
82
82
  {headerRightContent}
83
- {dashboardMenuColor}
84
- {dashboardMenuSize}
85
- {dashboardMenu}
83
+ {toggleMenuColor}
84
+ {toggleMenuSize}
85
+ {gridToggle}
86
86
  />
87
87
  {#if $isLoading}<LinearProgress />{/if}
88
88
  <div id="sierra-layout">
@@ -14,9 +14,9 @@ declare const Main: import("svelte").Component<{
14
14
  headerCenterContent?: any;
15
15
  headerRightContent?: any;
16
16
  paddingOff?: boolean;
17
- dashboardMenu?: boolean;
18
- dashboardMenuColor?: string;
19
- dashboardMenuSize?: string;
17
+ gridToggle?: boolean;
18
+ toggleMenuColor?: string;
19
+ toggleMenuSize?: string;
20
20
  }, {}, "">;
21
21
  type $$ComponentProps = {
22
22
  children: any;
@@ -29,7 +29,7 @@ type $$ComponentProps = {
29
29
  headerCenterContent?: any;
30
30
  headerRightContent?: any;
31
31
  paddingOff?: boolean;
32
- dashboardMenu?: boolean;
33
- dashboardMenuColor?: string;
34
- dashboardMenuSize?: string;
32
+ gridToggle?: boolean;
33
+ toggleMenuColor?: string;
34
+ toggleMenuSize?: string;
35
35
  };
package/dist/index.d.ts CHANGED
@@ -40,6 +40,6 @@ export { editorStore, resetEditorStore } from './stores/modules/editor.js';
40
40
  export { fileInputStore, resetFileInputStore } from './stores/modules/fileInput.js';
41
41
  export type { FileInputStoreMediaItem } from './stores/modules/fileInput.js';
42
42
  export { toastCarrier, setToastMessage, clearToastMessage } from './stores/modules/toast.js';
43
- export { getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia, DOCUMENT_MIME_TYPES } from './Hooks/preview.js';
43
+ export { getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia, DOCUMENT_MIME_TYPES, IMAGE_MIME_TYPES_PREVIEW } from './Hooks/preview.js';
44
44
  export { validateLayoutMenuSections } from './Hooks/layout_menu.js';
45
45
  export { buttonRipple } from './Hooks/button.js';
package/dist/index.js CHANGED
@@ -52,6 +52,6 @@ export { editorStore, resetEditorStore } from './stores/modules/editor.js';
52
52
  export { fileInputStore, resetFileInputStore } from './stores/modules/fileInput.js';
53
53
  export { toastCarrier, setToastMessage, clearToastMessage } from './stores/modules/toast.js';
54
54
  //#######################HOOKS/UTILS########################
55
- export { getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia, DOCUMENT_MIME_TYPES } from './Hooks/preview.js';
55
+ export { getPreviewUrlForMedia, toggleSelectForMedia, removeFileForMedia, DOCUMENT_MIME_TYPES, IMAGE_MIME_TYPES_PREVIEW } from './Hooks/preview.js';
56
56
  export { validateLayoutMenuSections } from './Hooks/layout_menu.js';
57
57
  export { buttonRipple } from './Hooks/button.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sierra-95/svelte-scaffold",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run prepack",