@sortsys/ui 0.1.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.
@@ -0,0 +1,367 @@
1
+ import * as solid_js from 'solid-js';
2
+ import { JSX, JSXElement, Accessor } from 'solid-js';
3
+ import { useNavigate } from '@solidjs/router';
4
+
5
+ type SSButtonProps = {
6
+ children: JSX.Element;
7
+ class?: string;
8
+ disabled?: boolean;
9
+ type?: 'button' | 'submit' | 'reset';
10
+ isIconOnly?: boolean;
11
+ onclick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;
12
+ ariaLabel?: string;
13
+ form?: string;
14
+ };
15
+ declare function SSButton(props: SSButtonProps): JSX.Element;
16
+
17
+ declare const COLORS: readonly ["red", "pink", "purple", "deepPurple", "indigo", "blue", "lightBlue", "cyan", "teal", "green", "lightGreen", "lime", "yellow", "amber", "orange", "deepOrange", "brown", "grey", "blueGrey"];
18
+
19
+ type SSCalloutProps = JSX.HTMLAttributes<HTMLDivElement> & {
20
+ color: (typeof COLORS)[number];
21
+ icon: JSXElement;
22
+ };
23
+ declare function SSCallout(props: SSCalloutProps): JSX.Element;
24
+
25
+ type SSChipBaseProps = {
26
+ children: JSXElement;
27
+ color?: (typeof COLORS)[number];
28
+ class?: string;
29
+ style?: string;
30
+ };
31
+ type SSChipClickableProps = {
32
+ onclick: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;
33
+ ondismiss?: never;
34
+ };
35
+ type SSChipDismissableProps = {
36
+ ondismiss: () => void;
37
+ onclick?: never;
38
+ };
39
+ type SSChipDisplayProps = {
40
+ onclick?: never;
41
+ ondismiss?: never;
42
+ };
43
+ type SSChipProps = SSChipBaseProps & (SSChipClickableProps | SSChipDismissableProps | SSChipDisplayProps);
44
+ declare function SSChip(props: SSChipProps): JSX.Element;
45
+
46
+ type PromiseOr$3<T> = Promise<T> | T;
47
+ type SSDataColumn<RowT> = {
48
+ label: string;
49
+ render: (row: RowT) => PromiseOr$3<JSXElement>;
50
+ sortKey?: ((row: RowT) => string) | ((row: RowT) => number);
51
+ };
52
+ type SSDataTableProps<RowT extends object> = {
53
+ columns: SSDataColumn<RowT>[];
54
+ rows: RowT[];
55
+ onRowClick?: (row: RowT) => PromiseOr$3<void>;
56
+ pageSize?: number;
57
+ paginationPosition?: 'top' | 'bottom';
58
+ class?: string;
59
+ style?: string;
60
+ };
61
+ declare function SSDataTable<RowT extends object>(props: SSDataTableProps<RowT>): solid_js.JSX.Element;
62
+
63
+ type PromiseOr$2<T> = Promise<T> | T;
64
+ type SSDropdownItem = {
65
+ label: string;
66
+ icon: JSXElement;
67
+ onclick?: () => PromiseOr$2<void>;
68
+ checked?: boolean;
69
+ };
70
+ type SSDropdownProps = {
71
+ items: SSDropdownItem[];
72
+ icon?: JSXElement;
73
+ ariaLabel?: string;
74
+ class?: string;
75
+ style?: string;
76
+ };
77
+ declare function SSDropdown(props: SSDropdownProps): solid_js.JSX.Element;
78
+
79
+ type SSExpandableProps = {
80
+ title: JSXElement;
81
+ class?: string;
82
+ children?: JSXElement;
83
+ style?: string;
84
+ initiallyExpanded?: boolean;
85
+ };
86
+ declare function SSExpandable(props: SSExpandableProps): solid_js.JSX.Element;
87
+
88
+ type PromiseOr$1<T> = Promise<T> | T;
89
+ type ValidationRule<T> = (value: T) => PromiseOr$1<string | null>;
90
+ interface SSFormField<T = any> {
91
+ getValue: () => PromiseOr$1<T>;
92
+ setValue: (value: any) => void;
93
+ validate: () => PromiseOr$1<void>;
94
+ hasError: () => boolean;
95
+ }
96
+ interface SSFormContext {
97
+ loading: Accessor<boolean>;
98
+ process: (action: (context: SSFormContext) => PromiseOr$1<void>) => Promise<void>;
99
+ field<T = any>(name: string): SSFormField<T> | null;
100
+ setValues: (values: Record<string, any>) => void;
101
+ getValues: () => Record<string, any>;
102
+ validate: () => Promise<void>;
103
+ hasError: () => boolean;
104
+ submit: () => void;
105
+ setField: (name: string, field: SSFormField) => void;
106
+ delField: (name: string) => void;
107
+ }
108
+ declare const SSFormContext: solid_js.Context<SSFormContext | undefined>;
109
+ declare const SSForm: {
110
+ (props: {
111
+ children?: JSXElement;
112
+ onsubmit?: (context: SSFormContext) => PromiseOr$1<void>;
113
+ }): solid_js.JSX.Element;
114
+ Input<ItemT = Record<string, any>, PrepT = any>(props: {
115
+ id?: string;
116
+ label: string;
117
+ name?: string;
118
+ required?: boolean;
119
+ rules?: ValidationRule<string | null>[];
120
+ disabled?: boolean;
121
+ } & ({
122
+ type?: "text" | "number" | "email" | "tel" | "password";
123
+ suggestions?: {
124
+ prepare?: () => PromiseOr$1<PrepT>;
125
+ getItems: (props: {
126
+ query: string;
127
+ init: Awaited<PrepT>;
128
+ }) => PromiseOr$1<ItemT[]>;
129
+ renderItem?: (props: {
130
+ item: ItemT;
131
+ init: Awaited<PrepT>;
132
+ }) => JSXElement;
133
+ stringify: (props: {
134
+ item: ItemT;
135
+ init: Awaited<PrepT>;
136
+ }) => string;
137
+ };
138
+ textArea?: false | null;
139
+ } | {
140
+ suggestions?: null;
141
+ type?: null;
142
+ textArea: true;
143
+ })): solid_js.JSX.Element;
144
+ Date(props: {
145
+ id?: string;
146
+ label: string;
147
+ name?: string;
148
+ required?: boolean;
149
+ rules?: ValidationRule<string | null>[];
150
+ disabled?: boolean;
151
+ editable?: boolean;
152
+ }): solid_js.JSX.Element;
153
+ Checkbox(props: {
154
+ id?: string;
155
+ label: string;
156
+ name?: string;
157
+ required?: boolean;
158
+ disabled?: boolean;
159
+ rules?: ValidationRule<boolean>[];
160
+ }): solid_js.JSX.Element;
161
+ useContext(): {
162
+ loading: Accessor<boolean>;
163
+ process: (action: (context: SSFormContext) => PromiseOr$1<void>) => Promise<void>;
164
+ field<T = any>(name: string): SSFormField<T> | null;
165
+ setValues: (values: Record<string, any>) => void;
166
+ getValues: () => Record<string, any>;
167
+ validate: () => Promise<void>;
168
+ hasError: () => boolean;
169
+ submit: () => void;
170
+ } | null;
171
+ Select<T extends Exclude<(Record<string, any> & {
172
+ id: string;
173
+ }), Function>>(props: {
174
+ id?: string;
175
+ label: string;
176
+ name?: string;
177
+ children?: JSXElement;
178
+ disabled?: boolean;
179
+ getOptions: () => Promise<T[]> | T[];
180
+ buildOption: (item: T) => string;
181
+ rules?: ValidationRule<string>[];
182
+ }): solid_js.JSX.Element;
183
+ ACSelect<T extends (Record<string, any> & {
184
+ id: string;
185
+ }), PrepT = any>(props: {
186
+ id?: string;
187
+ label: string;
188
+ name?: string;
189
+ disabled?: boolean;
190
+ prepare?: () => PromiseOr$1<PrepT>;
191
+ getOptions: (props: {
192
+ query: string;
193
+ init: PrepT;
194
+ }) => PromiseOr$1<T[]>;
195
+ renderItem: (props: {
196
+ item: T;
197
+ init: PrepT;
198
+ }) => JSXElement;
199
+ rules?: ValidationRule<T[]>[];
200
+ } & ({
201
+ minSelectedItems?: number;
202
+ maxSelectedItems?: number;
203
+ renderSelection?: undefined;
204
+ } | {
205
+ minSelectedItems?: 0 | 1;
206
+ maxSelectedItems: 1;
207
+ renderSelection?: (props: {
208
+ item: T;
209
+ init: PrepT;
210
+ }) => JSXElement;
211
+ })): solid_js.JSX.Element;
212
+ SubmitButton(props: {
213
+ children: JSXElement;
214
+ disabled?: boolean;
215
+ }): solid_js.JSX.Element;
216
+ rules: {
217
+ required: (value: any) => "Pflichtfeld" | null;
218
+ minLength: (length: number) => (value: any) => string | null;
219
+ maxLength: (length: number) => (value: any) => string | null;
220
+ pattern: (pattern: RegExp) => (value: any) => "Eingabe widerspricht erwartetem Muster" | null;
221
+ };
222
+ };
223
+
224
+ type SSHeaderProps = {
225
+ title: JSXElement;
226
+ subtitle?: JSXElement | false;
227
+ actions?: JSXElement | false;
228
+ class?: string;
229
+ style?: string;
230
+ };
231
+ declare function SSHeader(props: SSHeaderProps): solid_js.JSX.Element;
232
+
233
+ type SSModalSize = 'sm' | 'md' | 'lg';
234
+ type SSModalProps = {
235
+ open: boolean;
236
+ title?: string;
237
+ children: JSXElement;
238
+ footer?: JSXElement;
239
+ size?: SSModalSize;
240
+ fullscreen?: boolean;
241
+ disableResponsiveFullscreen?: boolean;
242
+ dismissible?: boolean;
243
+ lockScroll?: boolean;
244
+ onClose?: () => void;
245
+ };
246
+ declare function SSModal(props: SSModalProps): solid_js.JSX.Element;
247
+
248
+ type PromiseOr<T> = Promise<T> | T;
249
+ type SSModalEntry = {
250
+ id: string;
251
+ visible: () => boolean;
252
+ setVisible: (value: boolean) => void;
253
+ render: (props: {
254
+ id: string;
255
+ hide: () => void;
256
+ visible: () => boolean;
257
+ }) => JSXElement;
258
+ };
259
+ type SSFormPublicContext = NonNullable<ReturnType<typeof SSForm.useContext>>;
260
+ type DefaultModalProps = {
261
+ content: (props: {
262
+ hide: () => void;
263
+ }) => JSXElement;
264
+ modalProps?: (props: {
265
+ hide: () => void;
266
+ }) => Omit<SSModalProps, 'open' | 'onClose' | 'children' | 'footer'> & {
267
+ primaryButtonText?: string;
268
+ secondaryButtonText?: string;
269
+ hideSecondaryButton?: boolean;
270
+ danger?: boolean;
271
+ };
272
+ onPrimaryAction?: (props: {
273
+ hide: () => void;
274
+ navigate: ReturnType<typeof useNavigate>;
275
+ pathname: string;
276
+ }) => PromiseOr<void>;
277
+ };
278
+ type FormModalProps = {
279
+ content: (props: {
280
+ hide: () => void;
281
+ context: SSFormPublicContext;
282
+ }) => JSXElement;
283
+ modalProps?: (props: {
284
+ hide: () => void;
285
+ context: SSFormPublicContext;
286
+ }) => Omit<SSModalProps, 'open' | 'onClose' | 'children' | 'footer'> & {
287
+ primaryButtonText?: string;
288
+ secondaryButtonText?: string;
289
+ hideSecondaryButton?: boolean;
290
+ danger?: boolean;
291
+ };
292
+ onSubmit: (props: {
293
+ hide: () => void;
294
+ context: SSFormPublicContext;
295
+ navigate: ReturnType<typeof useNavigate>;
296
+ pathname: string;
297
+ }) => PromiseOr<void>;
298
+ };
299
+ interface SSModalsInterface {
300
+ show: (render: SSModalEntry['render']) => string;
301
+ showDefault: (props: DefaultModalProps) => string;
302
+ showForm: (props: FormModalProps) => string;
303
+ hide: (id: string) => void;
304
+ }
305
+ declare function useSSModals(): SSModalsInterface;
306
+ declare function SSModalsProvider(props: {
307
+ children: JSXElement;
308
+ }): solid_js.JSX.Element;
309
+
310
+ type SSShellProps = {
311
+ title: JSXElement;
312
+ nav: JSXElement;
313
+ children: JSXElement;
314
+ actions?: JSXElement;
315
+ class?: string;
316
+ style?: string;
317
+ };
318
+ declare function SSShell(props: SSShellProps): solid_js.JSX.Element;
319
+ declare namespace SSShell {
320
+ var Nav: (props: {
321
+ children: JSXElement;
322
+ }) => solid_js.JSX.Element;
323
+ var NavLink: (props: {
324
+ href: string;
325
+ children: JSXElement;
326
+ icon?: JSXElement;
327
+ onclick?: () => void;
328
+ }) => solid_js.JSX.Element;
329
+ var NavAction: (props: {
330
+ onclick: () => void;
331
+ children: JSXElement;
332
+ icon?: JSXElement;
333
+ }) => solid_js.JSX.Element;
334
+ var NavGroup: (props: {
335
+ title: JSXElement;
336
+ children: JSXElement;
337
+ icon?: JSXElement;
338
+ initiallyExpanded?: boolean;
339
+ }) => solid_js.JSX.Element;
340
+ }
341
+
342
+ type SSSurfaceProps = {
343
+ children: solid_js.JSXElement;
344
+ class?: string;
345
+ style?: string;
346
+ };
347
+ declare function SSSurface(props: SSSurfaceProps): solid_js.JSX.Element;
348
+
349
+ type SSTileProps = {
350
+ icon?: JSXElement;
351
+ title: JSXElement;
352
+ href?: string;
353
+ subtitle?: JSXElement;
354
+ trailing?: JSXElement;
355
+ onLinkClick?: () => void;
356
+ class?: string;
357
+ style?: string;
358
+ };
359
+ declare function SSTile(props: SSTileProps): solid_js.JSX.Element;
360
+ declare function createSSTile<T>(build: (data: T) => SSTileProps): (props: {
361
+ data: T;
362
+ noLink?: boolean;
363
+ noIcon?: boolean;
364
+ onLinkClick?: () => void;
365
+ }) => solid_js.JSX.Element;
366
+
367
+ export { SSButton, SSCallout, SSChip, SSDataTable, SSDropdown, SSExpandable, SSForm, SSHeader, SSModal, SSModalsProvider, SSShell, SSSurface, SSTile, createSSTile, useSSModals };