@intechstudio/grid-uikit 0.0.12 → 1.20240722.817

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.
@@ -0,0 +1,109 @@
1
+ <script>import { createEventDispatcher } from "svelte";
2
+ const dispatch = createEventDispatcher();
3
+ export let inputValue = "";
4
+ export let suggestions = [];
5
+ export let customClasses = "";
6
+ export let placeholder = "";
7
+ export let suggestionTarget = void 0;
8
+ export let validator = (text) => {
9
+ return true;
10
+ };
11
+ let isError = false;
12
+ let disabled = false;
13
+ let infoValue = "";
14
+ let displayText;
15
+ let focus;
16
+ function handleValueChange(value) {
17
+ if (value !== displayText) {
18
+ displayText = value;
19
+ }
20
+ infoValue = suggestions.find(
21
+ (s) => String(s.value).trim() == String(value).trim()
22
+ )?.info ?? "";
23
+ isError = !validator(displayText);
24
+ dispatch("validator", { isError });
25
+ }
26
+ $: {
27
+ handleValueChange(inputValue);
28
+ }
29
+ function handleBlur(e) {
30
+ if (inputValue !== displayText) {
31
+ sendData(displayText);
32
+ }
33
+ }
34
+ function sendData(value) {
35
+ dispatch("change", value);
36
+ }
37
+ function handleFocus(e) {
38
+ dispatch("focus");
39
+ updateSuggestions();
40
+ }
41
+ function updateSuggestions() {
42
+ if (typeof suggestionTarget !== "undefined") {
43
+ const event = new CustomEvent("display", {
44
+ detail: {
45
+ data: suggestions,
46
+ sender: inputComponent
47
+ }
48
+ });
49
+ suggestionTarget.dispatchEvent(event);
50
+ }
51
+ }
52
+ function handleSuggestionSelected(e) {
53
+ const { value } = e.detail;
54
+ displayText = value;
55
+ sendData(displayText);
56
+ }
57
+ let inputComponent;
58
+ </script>
59
+
60
+ <div class="{$$props.class} w-full relative">
61
+ <input
62
+ bind:this={inputComponent}
63
+ {disabled}
64
+ bind:value={displayText}
65
+ on:focus={handleFocus}
66
+ on:blur={handleBlur}
67
+ on:suggestion-select={handleSuggestionSelected}
68
+ type="text"
69
+ {placeholder}
70
+ class="{customClasses} w-full border
71
+ focus:neumorph focus:rounded-lg
72
+ {isError
73
+ ? 'border-error focus:outline-error'
74
+ : 'focus:border-select border-secondary'} bg-secondary text-white py-0.5 pl-2 rounded-none"
75
+ />
76
+
77
+ <div class=" py-1">
78
+ {#if !focus && infoValue !== undefined}
79
+ <div class="{infoValue ? 'text-gray-500' : 'text-gray-600'} text-sm">
80
+ {infoValue}
81
+ </div>
82
+ {/if}
83
+ </div>
84
+ </div>
85
+
86
+ <style>
87
+ .neumorph {
88
+ box-shadow: -2px -2px 10px #242c30, 2px 2px 10px #303c42;
89
+ }
90
+
91
+ ::-webkit-scrollbar {
92
+ border-radius: 8px;
93
+ height: 6px;
94
+ width: 6px;
95
+ background: #1e2628;
96
+ }
97
+
98
+ ::-webkit-scrollbar-thumb {
99
+ background: #286787;
100
+ border-radius: 8px;
101
+ -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.75);
102
+ }
103
+
104
+ ::-webkit-scrollbar-corner {
105
+ border-radius: 8px;
106
+ background: #1e2628;
107
+ }
108
+ </style>
109
+
@@ -0,0 +1,29 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ inputValue?: string | undefined;
6
+ suggestions?: {
7
+ value: string;
8
+ info: string;
9
+ }[] | undefined;
10
+ customClasses?: string | undefined;
11
+ placeholder?: string | undefined;
12
+ suggestionTarget?: Element | undefined;
13
+ validator?: ((text: string) => boolean) | undefined;
14
+ };
15
+ events: {
16
+ validator: CustomEvent<any>;
17
+ change: CustomEvent<any>;
18
+ focus: CustomEvent<any>;
19
+ } & {
20
+ [evt: string]: CustomEvent<any>;
21
+ };
22
+ slots: {};
23
+ };
24
+ export type AtomicInputProps = typeof __propDef.props;
25
+ export type AtomicInputEvents = typeof __propDef.events;
26
+ export type AtomicInputSlots = typeof __propDef.slots;
27
+ export default class AtomicInput extends SvelteComponent<AtomicInputProps, AtomicInputEvents, AtomicInputSlots> {
28
+ }
29
+ export {};
@@ -0,0 +1,55 @@
1
+ <script>import { clickOutside } from "./click-outside.action";
2
+ export let component = void 0;
3
+ let suggestions = [];
4
+ let target = void 0;
5
+ function handleDisplay(e) {
6
+ const { data, sender } = e.detail;
7
+ target = sender;
8
+ suggestions = data;
9
+ }
10
+ function handleClickOutside(e) {
11
+ suggestions = [];
12
+ }
13
+ function handleSuggestionSelected(value) {
14
+ const event = new CustomEvent("suggestion-select", {
15
+ detail: {
16
+ value
17
+ }
18
+ });
19
+ target.dispatchEvent(event);
20
+ suggestions = [];
21
+ }
22
+ </script>
23
+
24
+ <suggestions
25
+ class="flex w-full p-2"
26
+ class:hidden={suggestions.length === 0}
27
+ bind:this={component}
28
+ on:display={handleDisplay}
29
+ use:clickOutside={{ useCapture: false }}
30
+ on:click-outside={handleClickOutside}
31
+ >
32
+ <div class="w-full p-1 neumorph rounded-lg border border-select bg-secondary">
33
+ <ul
34
+ class="scrollbar max-h-40 overflow-y-scroll pr-1 text-white cursor-pointer"
35
+ >
36
+ {#each suggestions as suggestion}
37
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
38
+ <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
39
+ <li
40
+ on:click={() => handleSuggestionSelected(suggestion.value)}
41
+ class="hover:bg-black p-1 pl-2"
42
+ >
43
+ {suggestion.info}
44
+ </li>
45
+ {/each}
46
+ </ul>
47
+ </div>
48
+ </suggestions>
49
+
50
+ <style>
51
+ .neumorph {
52
+ box-shadow: -2px -2px 10px #242c30, 2px 2px 10px #303c42;
53
+ }
54
+ </style>
55
+
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ component?: undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type AtomicSuggestionsProps = typeof __propDef.props;
12
+ export type AtomicSuggestionsEvents = typeof __propDef.events;
13
+ export type AtomicSuggestionsSlots = typeof __propDef.slots;
14
+ export default class AtomicSuggestions extends SvelteComponent<AtomicSuggestionsProps, AtomicSuggestionsEvents, AtomicSuggestionsSlots> {
15
+ }
16
+ export {};
@@ -0,0 +1,6 @@
1
+ /** Dispatch event on click outside of node */
2
+ export declare function clickOutside(node: Element, { useCapture }: {
3
+ useCapture?: boolean | undefined;
4
+ }): {
5
+ destroy(): void;
6
+ };
@@ -0,0 +1,16 @@
1
+ /** Dispatch event on click outside of node */
2
+ export function clickOutside(node, { useCapture = false }) {
3
+ const handleClick = (event) => {
4
+ if (node &&
5
+ !node.contains(event.target) &&
6
+ !event.defaultPrevented) {
7
+ node.dispatchEvent(new CustomEvent("click-outside"));
8
+ }
9
+ };
10
+ document.addEventListener("mousedown", handleClick, useCapture);
11
+ return {
12
+ destroy() {
13
+ document.removeEventListener("mousedown", handleClick, useCapture);
14
+ },
15
+ };
16
+ }
package/dist/index.d.ts CHANGED
@@ -11,3 +11,5 @@ export { default as MoltenButton } from "./MoltenButton.svelte";
11
11
  export { default as MoltenInput } from "./MoltenInput.svelte";
12
12
  export { default as MoltenTooltip } from "./MoltenTooltip.svelte";
13
13
  export { default as MoltenPushButton } from "./MoltenPushButton.svelte";
14
+ export { default as AtomicInput } from "./AtomicInput.svelte";
15
+ export { default as AtomicSuggestions } from "./AtomicSuggestions.svelte";
package/dist/index.js CHANGED
@@ -11,3 +11,5 @@ export { default as MoltenButton } from "./MoltenButton.svelte";
11
11
  export { default as MoltenInput } from "./MoltenInput.svelte";
12
12
  export { default as MoltenTooltip } from "./MoltenTooltip.svelte";
13
13
  export { default as MoltenPushButton } from "./MoltenPushButton.svelte";
14
+ export { default as AtomicInput } from "./AtomicInput.svelte";
15
+ export { default as AtomicSuggestions } from "./AtomicSuggestions.svelte";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intechstudio/grid-uikit",
3
- "version": "0.0.12",
3
+ "version": "1.20240722.817",
4
4
  "scripts": {
5
5
  "dev": "vite",
6
6
  "build": "vite build",