@webamoki/web-svelte 0.5.33 → 0.5.35

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,57 @@
1
+ <script lang="ts" generics="T extends Record<string, unknown>, U extends FormPath<T>, M">
2
+ import type { FormPath } from 'sveltekit-superforms';
3
+ import FieldWrapper, { type FieldWrapperProps } from '../FieldWrapper.svelte';
4
+ import { Textarea } from '../../../shadcn/components/ui/textarea/index.js';
5
+ import { Lock, LockOpen } from '@lucide/svelte';
6
+
7
+ interface Props extends FieldWrapperProps<T, U, M> {
8
+ value?: string;
9
+ class?: string;
10
+ placeholder?: string;
11
+ defaultHeight?: number;
12
+ showLock?: boolean;
13
+ defaultLocked?: boolean;
14
+ }
15
+ let {
16
+ value = $bindable(),
17
+ class: className,
18
+ placeholder,
19
+ defaultHeight = 100,
20
+ showLock = true,
21
+ defaultLocked = false,
22
+ ...fieldProps
23
+ }: Props = $props();
24
+
25
+ let locked = $state(defaultLocked);
26
+ </script>
27
+
28
+ <FieldWrapper {...fieldProps}>
29
+ {#snippet formElem(props)}
30
+ <div class="flex w-full items-start gap-2">
31
+ <!-- Textarea itself -->
32
+ <Textarea
33
+ bind:value
34
+ class={`${className || ''} ${locked ? 'resize-none' : 'resize-y'}`}
35
+ {placeholder}
36
+ style={defaultHeight ? `height: ${defaultHeight}px` : undefined}
37
+ {...props}
38
+ />
39
+
40
+ <!-- Lock/unlock button -->
41
+ {#if showLock}
42
+ <button
43
+ type="button"
44
+ class="flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-gray-300 px-4 py-3 text-gray-500 transition-all hover:bg-gray-50 focus:border-transparent focus:ring-2 focus:ring-primary focus:outline-none"
45
+ onclick={() => (locked = !locked)}
46
+ aria-label={locked ? 'Unlock height' : 'Lock height'}
47
+ >
48
+ {#if locked}
49
+ <Lock class="size-5" />
50
+ {:else}
51
+ <LockOpen class="size-5" />
52
+ {/if}
53
+ </button>
54
+ {/if}
55
+ </div>
56
+ {/snippet}
57
+ </FieldWrapper>
@@ -0,0 +1,33 @@
1
+ import type { FormPath } from 'sveltekit-superforms';
2
+ import { type FieldWrapperProps } from '../FieldWrapper.svelte';
3
+ declare function $$render<T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
4
+ props: FieldWrapperProps<T, U, M> & {
5
+ value?: string;
6
+ class?: string;
7
+ placeholder?: string;
8
+ defaultHeight?: number;
9
+ showLock?: boolean;
10
+ defaultLocked?: boolean;
11
+ };
12
+ exports: {};
13
+ bindings: "value";
14
+ slots: {};
15
+ events: {};
16
+ };
17
+ declare class __sveltets_Render<T extends Record<string, unknown>, U extends FormPath<T>, M> {
18
+ props(): ReturnType<typeof $$render<T, U, M>>['props'];
19
+ events(): ReturnType<typeof $$render<T, U, M>>['events'];
20
+ slots(): ReturnType<typeof $$render<T, U, M>>['slots'];
21
+ bindings(): "value";
22
+ exports(): {};
23
+ }
24
+ interface $$IsomorphicComponent {
25
+ new <T extends Record<string, unknown>, U extends FormPath<T>, M>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, U, M>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, U, M>['props']>, ReturnType<__sveltets_Render<T, U, M>['events']>, ReturnType<__sveltets_Render<T, U, M>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<T, U, M>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<T, U, M>['exports']>;
28
+ <T extends Record<string, unknown>, U extends FormPath<T>, M>(internal: unknown, props: ReturnType<__sveltets_Render<T, U, M>['props']> & {}): ReturnType<__sveltets_Render<T, U, M>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
30
+ }
31
+ declare const MessageField: $$IsomorphicComponent;
32
+ type MessageField<T extends Record<string, unknown>, U extends FormPath<T>, M> = InstanceType<typeof MessageField<T, U, M>>;
33
+ export default MessageField;
@@ -15,14 +15,14 @@
15
15
 
16
16
  <FieldWrapper {...fieldProps}>
17
17
  {#snippet formElem(props)}
18
- <div class="flex w-full items-center gap-2">
18
+ <div class="flex w-full items-stretch gap-2">
19
19
  <!-- Input itself -->
20
20
  <Input type={inputType} bind:value {...props} />
21
21
 
22
22
  <!-- Show/hide button outside input -->
23
23
  <button
24
24
  type="button"
25
- class="flex cursor-pointer items-center justify-center rounded-md border px-3 py-2 text-gray-500"
25
+ class="flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-gray-300 px-4 text-gray-500 transition-all hover:bg-gray-50 focus:border-transparent focus:ring-2 focus:ring-primary focus:outline-none"
26
26
  onclick={() => (show = !show)}
27
27
  aria-label={show ? 'Hide password' : 'Show password'}
28
28
  >
@@ -38,7 +38,7 @@
38
38
  let valueToItem: Map<V, I> = new Map(items.map((item) => [getValue(item), item] as const));
39
39
  let keyToItem: Map<string, I> = new Map(items.map((item) => [getKey(item), item] as const));
40
40
 
41
- // Enforce string key functino
41
+ // Enforce string key function
42
42
  function getKey(item: I) {
43
43
  const key = _getKey(item);
44
44
  return key.toString();
@@ -38,7 +38,7 @@
38
38
  let valueToItem: Map<V, I> = new Map(items.map((item) => [getValue(item), item] as const));
39
39
  let keyToItem: Map<string, I> = new Map(items.map((item) => [getKey(item), item] as const));
40
40
 
41
- // Enforce string key functino
41
+ // Enforce string key function
42
42
  function getKey(item: I) {
43
43
  const key = _getKey(item);
44
44
  return key.toString();
@@ -70,7 +70,7 @@
70
70
  <FieldWrapper {...fieldProps}>
71
71
  {#snippet formElem(props)}
72
72
  <Select type="multiple" {...props} bind:value={getKeyFromValue, setValueFromKey}>
73
- <SelectTrigger class={cn('w-[180px] cursor-pointer truncate', className)}>
73
+ <SelectTrigger class={cn('w-full cursor-pointer truncate', className)}>
74
74
  <span class="block truncate">
75
75
  {getPreview()}
76
76
  </span>
@@ -9,8 +9,9 @@ import SelectField from './fields/SelectField.svelte';
9
9
  import SelectMultiField from './fields/SelectMultiField.svelte';
10
10
  import TextField from './fields/TextField.svelte';
11
11
  import TextFieldNullable from './fields/TextFieldNullable.svelte';
12
+ import MessageField from './fields/MessageField.svelte';
12
13
  import TimeField from './fields/TimeField.svelte';
13
14
  import WeekdayChoiceField from './fields/WeekdayChoiceField.svelte';
14
15
  import WeekdayChoiceMultiField from './fields/WeekdayChoiceMultiField.svelte';
15
16
  import Form from './Form.svelte';
16
- export { Button, ChoiceField, ChoiceMultiField, DateField, Form, HexColorField, NumberField, PasswordField, SelectField, SelectMultiField, TextField, TextFieldNullable, TimeField, WeekdayChoiceField, WeekdayChoiceMultiField };
17
+ export { Button, ChoiceField, ChoiceMultiField, DateField, Form, HexColorField, NumberField, PasswordField, SelectField, SelectMultiField, TextField, TextFieldNullable, MessageField, TimeField, WeekdayChoiceField, WeekdayChoiceMultiField };
@@ -9,8 +9,9 @@ import SelectField from './fields/SelectField.svelte';
9
9
  import SelectMultiField from './fields/SelectMultiField.svelte';
10
10
  import TextField from './fields/TextField.svelte';
11
11
  import TextFieldNullable from './fields/TextFieldNullable.svelte';
12
+ import MessageField from './fields/MessageField.svelte';
12
13
  import TimeField from './fields/TimeField.svelte';
13
14
  import WeekdayChoiceField from './fields/WeekdayChoiceField.svelte';
14
15
  import WeekdayChoiceMultiField from './fields/WeekdayChoiceMultiField.svelte';
15
16
  import Form from './Form.svelte';
16
- export { Button, ChoiceField, ChoiceMultiField, DateField, Form, HexColorField, NumberField, PasswordField, SelectField, SelectMultiField, TextField, TextFieldNullable, TimeField, WeekdayChoiceField, WeekdayChoiceMultiField };
17
+ export { Button, ChoiceField, ChoiceMultiField, DateField, Form, HexColorField, NumberField, PasswordField, SelectField, SelectMultiField, TextField, TextFieldNullable, MessageField, TimeField, WeekdayChoiceField, WeekdayChoiceMultiField };
@@ -13,7 +13,7 @@
13
13
  </script>
14
14
 
15
15
  <div class="relative w-full max-w-sm">
16
- <Search class="absolute top-2.5 left-2.5 h-4 w-4 text-muted-foreground" />
16
+ <Search class="absolute top-1/2 left-2.5 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
17
17
  <Input
18
18
  type="search"
19
19
  {placeholder}
@@ -0,0 +1,2 @@
1
+ import Root from './textarea.svelte';
2
+ export { Root, Root as Textarea };
@@ -0,0 +1,4 @@
1
+ import Root from './textarea.svelte';
2
+ export { Root,
3
+ //
4
+ Root as Textarea };
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import { cn, type WithElementRef, type WithoutChildren } from '../../../utils.js';
3
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ value = $bindable(),
8
+ class: className,
9
+ 'data-slot': dataSlot = 'textarea',
10
+ ...restProps
11
+ }: WithoutChildren<WithElementRef<HTMLTextareaAttributes>> = $props();
12
+ </script>
13
+
14
+ <textarea
15
+ bind:this={ref}
16
+ data-slot={dataSlot}
17
+ class={cn(
18
+ 'w-full resize-y rounded-lg border border-gray-300 px-4 py-3 outline-none',
19
+ 'transition-[border-color,box-shadow,opacity]',
20
+ 'focus:border-transparent focus:ring-2 focus:ring-primary',
21
+ 'disabled:cursor-not-allowed disabled:opacity-50',
22
+ 'aria-invalid:border-red-500 aria-invalid:focus:ring-red-300',
23
+ className
24
+ )}
25
+ bind:value
26
+ {...restProps}
27
+ ></textarea>
@@ -0,0 +1,5 @@
1
+ import { type WithElementRef } from '../../../utils.js';
2
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
3
+ declare const Textarea: import("svelte").Component<Omit<WithElementRef<HTMLTextareaAttributes>, "children">, {}, "ref" | "value">;
4
+ type Textarea = ReturnType<typeof Textarea>;
5
+ export default Textarea;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.5.33",
6
+ "version": "0.5.35",
7
7
  "license": "MIT",
8
8
  "files": [
9
9
  "dist",