sveltacular 0.0.29 → 0.0.30

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.
@@ -20,6 +20,8 @@ let text = getText();
20
20
  let open = false;
21
21
  let highlightIndex = -1;
22
22
  let filteredItems = [];
23
+ $:
24
+ isSeachable = searchable || !!search;
23
25
  const onSelect = (e) => {
24
26
  value = e.detail.value;
25
27
  dispatch("change", value);
@@ -67,7 +69,7 @@ const onInputKeyPress = (e) => {
67
69
  }
68
70
  };
69
71
  const triggerSearch = debounce(async () => {
70
- if (search && searchable) {
72
+ if (search && isSeachable) {
71
73
  items = await search(text);
72
74
  }
73
75
  updateText();
@@ -75,7 +77,7 @@ const triggerSearch = debounce(async () => {
75
77
  }, 300);
76
78
  const applyFilter = () => {
77
79
  const searchText = text.trim().toLowerCase();
78
- filteredItems = searchText && searchable ? items.map((item, index) => ({ ...item, index })).filter((item) => item.name.toLowerCase().includes(searchText)) : items.map((item, index) => ({ ...item, index }));
80
+ filteredItems = searchText && isSeachable ? items.map((item, index) => ({ ...item, index })).filter((item) => item.name.toLowerCase().includes(searchText)) : items.map((item, index) => ({ ...item, index }));
79
81
  };
80
82
  const clear = () => {
81
83
  text = "";
@@ -104,7 +106,7 @@ triggerSearch();
104
106
  bind:value={text}
105
107
  {required}
106
108
  {disabled}
107
- readonly={!searchable}
109
+ readonly={!isSeachable}
108
110
  on:focus={() => (open = true)}
109
111
  on:keyup={onInputKeyPress}
110
112
  data-value={value}
@@ -113,7 +115,7 @@ triggerSearch();
113
115
  <button type="button" class="icon" on:click={clickArrow} on:keydown={clickArrow}>
114
116
  <AngleUpIcon />
115
117
  </button>
116
- {#if text && searchable}
118
+ {#if text && isSeachable}
117
119
  <button type="button" class="clear" on:click={clear} on:keydown={clear}> X </button>
118
120
  {/if}
119
121
  <div class="dropdown">
@@ -177,5 +179,5 @@ div .dropdown {
177
179
  top: 100%;
178
180
  left: 0;
179
181
  width: 100%;
180
- z-index: 1;
182
+ z-index: 3;
181
183
  }</style>
@@ -1,7 +1,9 @@
1
1
  <script>import { uniqueId } from "../../helpers/unique-id.js";
2
2
  import FormField from "../form-field.svelte";
3
3
  import FormLabel from "../form-label.svelte";
4
+ import { createEventDispatcher } from "svelte";
4
5
  const id = uniqueId();
6
+ const dipatch = createEventDispatcher();
5
7
  export let value = "";
6
8
  export let placeholder = "";
7
9
  export let helperText = "";
@@ -36,6 +38,7 @@ const onInput = (e) => {
36
38
  } else if (textCase === "upper") {
37
39
  value = value.toUpperCase();
38
40
  }
41
+ dipatch("input", value);
39
42
  };
40
43
  </script>
41
44
 
@@ -21,6 +21,9 @@ declare const __propDef: {
21
21
  textCase?: 'lower' | 'upper' | undefined;
22
22
  };
23
23
  events: {
24
+ change: CustomEvent<string>;
25
+ input: CustomEvent<string>;
26
+ } & {
24
27
  [evt: string]: CustomEvent<any>;
25
28
  };
26
29
  slots: {
@@ -0,0 +1,26 @@
1
+ <script>import TextBox from "../text-box/text-box.svelte";
2
+ export let protocol = "https";
3
+ export let value = "";
4
+ export let size = "lg";
5
+ export let placeholder = "example.com";
6
+ const onInput = () => {
7
+ const urlParts = value.split("://");
8
+ if (["http", "https"].includes(urlParts[0])) {
9
+ protocol = urlParts[0];
10
+ value = urlParts[1];
11
+ }
12
+ };
13
+ </script>
14
+
15
+ <TextBox
16
+ bind:value
17
+ type="text"
18
+ {placeholder}
19
+ prefix={protocol + '://'}
20
+ {size}
21
+ on:input={onInput}
22
+ on:change={onInput}
23
+ allowSpaces={false}
24
+ >
25
+ <slot />
26
+ </TextBox>
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { FormFieldSizeOptions } from '../../index.js';
3
+ import type { HttpProtocol } from '../../types/generic.js';
4
+ declare const __propDef: {
5
+ props: {
6
+ protocol?: HttpProtocol | undefined;
7
+ value?: string | undefined;
8
+ size?: FormFieldSizeOptions | undefined;
9
+ placeholder?: string | undefined;
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {
15
+ default: {};
16
+ };
17
+ };
18
+ export type UrlBoxProps = typeof __propDef.props;
19
+ export type UrlBoxEvents = typeof __propDef.events;
20
+ export type UrlBoxSlots = typeof __propDef.slots;
21
+ export default class UrlBox extends SvelteComponent<UrlBoxProps, UrlBoxEvents, UrlBoxSlots> {
22
+ }
23
+ export {};
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { default as FormHeader } from './forms/form-header.svelte';
18
18
  export { default as FormFooter } from './forms/form-footer.svelte';
19
19
  export { default as FormSection } from './forms/form-section.svelte';
20
20
  export { default as InfoBox } from './forms/info-box/info-box.svelte';
21
+ export { default as UrlBox } from './forms/url-box/url-box.svelte';
21
22
  export { default as Card } from './generic/card/card.svelte';
22
23
  export { default as Divider } from './generic/divider/divider.svelte';
23
24
  export { default as Link } from './generic/link/link.svelte';
package/dist/index.js CHANGED
@@ -19,6 +19,7 @@ export { default as FormHeader } from './forms/form-header.svelte';
19
19
  export { default as FormFooter } from './forms/form-footer.svelte';
20
20
  export { default as FormSection } from './forms/form-section.svelte';
21
21
  export { default as InfoBox } from './forms/info-box/info-box.svelte';
22
+ export { default as UrlBox } from './forms/url-box/url-box.svelte';
22
23
  // Generic
23
24
  export { default as Card } from './generic/card/card.svelte';
24
25
  export { default as Divider } from './generic/divider/divider.svelte';
@@ -0,0 +1,36 @@
1
+ <script>export let value = 0;
2
+ </script>
3
+
4
+ <div class="progress-bar" style="--progress-value: {value}%">
5
+ <div class="progress">
6
+ <div class="progress-value">{value}%</div>
7
+ </div>
8
+ </div>
9
+
10
+ <style>.progress-bar {
11
+ height: 2rem;
12
+ background-color: var(--base-color-fg, #ccc);
13
+ border-radius: 1rem;
14
+ margin-bottom: 1rem;
15
+ }
16
+ .progress-bar .progress {
17
+ height: 100%;
18
+ background-color: var(--primary-color, #00a);
19
+ color: white;
20
+ border-radius: 1rem;
21
+ transition: width 0.5s ease-in-out;
22
+ width: var(--progress-value, 0%);
23
+ min-width: 3rem;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: flex-end;
27
+ }
28
+ .progress-bar .progress-value {
29
+ color: var(--base-color-bg, #fff);
30
+ font-size: 1rem;
31
+ font-family: var(--base-font-family, sans-serif);
32
+ font-weight: 500;
33
+ line-height: 1.5rem;
34
+ padding: 0 0.5rem;
35
+ text-shadow: 0 0 0.5rem rgba(0, 0, 0, 0.5);
36
+ }</style>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ value?: number | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type ProgressProps = typeof __propDef.props;
12
+ export type ProgressEvents = typeof __propDef.events;
13
+ export type ProgressSlots = typeof __propDef.slots;
14
+ export default class Progress extends SvelteComponent<ProgressProps, ProgressEvents, ProgressSlots> {
15
+ }
16
+ export {};
@@ -1 +1,3 @@
1
1
  export type SectionLevel = 1 | 2 | 3 | 4 | 5 | 6;
2
+ export type HttpProtocol = 'http' | 'https';
3
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sveltacular",
3
- "version": "0.0.29",
3
+ "version": "0.0.30",
4
4
  "scripts": {
5
5
  "watch": "npm run dev -- --open",
6
6
  "dev": "vite dev",