@neovici/cosmoz-form 0.0.0 → 1.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.
- package/dist/add/index.d.ts +3 -0
- package/dist/add/index.d.ts.map +1 -0
- package/dist/add/index.js +2 -0
- package/dist/add/render.d.ts +44 -0
- package/dist/add/render.d.ts.map +1 -0
- package/dist/add/render.js +42 -0
- package/dist/add/styles.d.ts +2 -0
- package/dist/add/styles.d.ts.map +1 -0
- package/dist/add/styles.js +42 -0
- package/dist/add/types.d.ts +4 -0
- package/dist/add/types.d.ts.map +1 -0
- package/dist/add/types.js +1 -0
- package/dist/controls/cz-toggle.d.ts +2 -0
- package/dist/controls/cz-toggle.d.ts.map +1 -0
- package/dist/controls/cz-toggle.js +40 -0
- package/dist/form-dialog/form-dialog.d.ts +27 -0
- package/dist/form-dialog/form-dialog.d.ts.map +1 -0
- package/dist/form-dialog/form-dialog.js +61 -0
- package/dist/form-dialog/form-dialogable.d.ts +11 -0
- package/dist/form-dialog/form-dialogable.d.ts.map +1 -0
- package/dist/form-dialog/form-dialogable.js +19 -0
- package/dist/form-dialog/index.d.ts +4 -0
- package/dist/form-dialog/index.d.ts.map +1 -0
- package/dist/form-dialog/index.js +3 -0
- package/dist/form-dialog/style.css.d.ts +3 -0
- package/dist/form-dialog/style.css.d.ts.map +1 -0
- package/dist/form-dialog/style.css.js +36 -0
- package/dist/form-dialog/use-form-dialogable.d.ts +12 -0
- package/dist/form-dialog/use-form-dialogable.d.ts.map +1 -0
- package/dist/form-dialog/use-form-dialogable.js +24 -0
- package/dist/helpers.d.ts +11 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +26 -0
- package/dist/hooks/use-opened.d.ts +7 -0
- package/dist/hooks/use-opened.d.ts.map +1 -0
- package/dist/hooks/use-opened.js +10 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/inputs/autocomplete.d.ts +25 -0
- package/dist/inputs/autocomplete.d.ts.map +1 -0
- package/dist/inputs/autocomplete.js +40 -0
- package/dist/inputs/base.d.ts +18 -0
- package/dist/inputs/base.d.ts.map +1 -0
- package/dist/inputs/base.js +41 -0
- package/dist/inputs/basic.d.ts +3 -0
- package/dist/inputs/basic.d.ts.map +1 -0
- package/dist/inputs/basic.js +6 -0
- package/dist/inputs/common.d.ts +31 -0
- package/dist/inputs/common.d.ts.map +1 -0
- package/dist/inputs/common.js +72 -0
- package/dist/inputs/date-range.d.ts +10 -0
- package/dist/inputs/date-range.d.ts.map +1 -0
- package/dist/inputs/date-range.js +46 -0
- package/dist/inputs/file-drop.d.ts +2 -0
- package/dist/inputs/file-drop.d.ts.map +1 -0
- package/dist/inputs/file-drop.js +16 -0
- package/dist/inputs/file.d.ts +7 -0
- package/dist/inputs/file.d.ts.map +1 -0
- package/dist/inputs/file.js +22 -0
- package/dist/inputs/index.d.ts +12 -0
- package/dist/inputs/index.d.ts.map +1 -0
- package/dist/inputs/index.js +12 -0
- package/dist/inputs/inline-file.d.ts +3 -0
- package/dist/inputs/inline-file.d.ts.map +1 -0
- package/dist/inputs/inline-file.js +81 -0
- package/dist/inputs/read-only-number.d.ts +6 -0
- package/dist/inputs/read-only-number.d.ts.map +1 -0
- package/dist/inputs/read-only-number.js +34 -0
- package/dist/inputs/render.d.ts +12 -0
- package/dist/inputs/render.d.ts.map +1 -0
- package/dist/inputs/render.js +25 -0
- package/dist/inputs/toggle.d.ts +5 -0
- package/dist/inputs/toggle.d.ts.map +1 -0
- package/dist/inputs/toggle.js +18 -0
- package/dist/render/fields.d.ts +25 -0
- package/dist/render/fields.d.ts.map +1 -0
- package/dist/render/fields.js +31 -0
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +2 -0
- package/dist/render/items.d.ts +32 -0
- package/dist/render/items.d.ts.map +1 -0
- package/dist/render/items.js +72 -0
- package/dist/render/styles.d.ts +2 -0
- package/dist/render/styles.d.ts.map +1 -0
- package/dist/render/styles.js +60 -0
- package/dist/styles/button.d.ts +3 -0
- package/dist/styles/button.d.ts.map +1 -0
- package/dist/styles/button.js +100 -0
- package/dist/styles/toggle.d.ts +3 -0
- package/dist/styles/toggle.d.ts.map +1 -0
- package/dist/styles/toggle.js +46 -0
- package/dist/test/use-form.test.d.ts +2 -0
- package/dist/test/use-form.test.d.ts.map +1 -0
- package/dist/test/use-form.test.js +217 -0
- package/dist/test/use-items.test.d.ts +2 -0
- package/dist/test/use-items.test.d.ts.map +1 -0
- package/dist/test/use-items.test.js +328 -0
- package/dist/test/use-validated-form.test.d.ts +2 -0
- package/dist/test/use-validated-form.test.d.ts.map +1 -0
- package/dist/test/use-validated-form.test.js +99 -0
- package/dist/touch.d.ts +9 -0
- package/dist/touch.d.ts.map +1 -0
- package/dist/touch.js +13 -0
- package/dist/types/index.d.ts +57 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/use-form-core.d.ts +13 -0
- package/dist/use-form-core.d.ts.map +1 -0
- package/dist/use-form-core.js +43 -0
- package/dist/use-form.d.ts +6 -0
- package/dist/use-form.d.ts.map +1 -0
- package/dist/use-form.js +12 -0
- package/dist/use-items/apply-rules.d.ts +11 -0
- package/dist/use-items/apply-rules.d.ts.map +1 -0
- package/dist/use-items/apply-rules.js +13 -0
- package/dist/use-items/common-rules.d.ts +4 -0
- package/dist/use-items/common-rules.d.ts.map +1 -0
- package/dist/use-items/common-rules.js +5 -0
- package/dist/use-items/index.d.ts +6 -0
- package/dist/use-items/index.d.ts.map +1 -0
- package/dist/use-items/index.js +5 -0
- package/dist/use-items/use-items.d.ts +25 -0
- package/dist/use-items/use-items.d.ts.map +1 -0
- package/dist/use-items/use-items.js +58 -0
- package/dist/use-items/use-list-validation.d.ts +7 -0
- package/dist/use-items/use-list-validation.d.ts.map +1 -0
- package/dist/use-items/use-list-validation.js +23 -0
- package/dist/use-items/use-validated-items.d.ts +18 -0
- package/dist/use-items/use-validated-items.d.ts.map +1 -0
- package/dist/use-items/use-validated-items.js +17 -0
- package/dist/use-items-filter.d.ts +9 -0
- package/dist/use-items-filter.d.ts.map +1 -0
- package/dist/use-items-filter.js +12 -0
- package/dist/use-validated-form$.d.ts +23 -0
- package/dist/use-validated-form$.d.ts.map +1 -0
- package/dist/use-validated-form$.js +18 -0
- package/dist/use-validated-form-core.d.ts +17 -0
- package/dist/use-validated-form-core.d.ts.map +1 -0
- package/dist/use-validated-form-core.js +20 -0
- package/dist/use-validated-form.d.ts +11 -0
- package/dist/use-validated-form.d.ts.map +1 -0
- package/dist/use-validated-form.js +11 -0
- package/dist/util/gln.d.ts +2 -0
- package/dist/util/gln.d.ts.map +1 -0
- package/dist/util/gln.js +11 -0
- package/dist/util/luhn.d.ts +2 -0
- package/dist/util/luhn.d.ts.map +1 -0
- package/dist/util/luhn.js +16 -0
- package/dist/util/number.d.ts +2 -0
- package/dist/util/number.d.ts.map +1 -0
- package/dist/util/number.js +1 -0
- package/dist/validation/index.d.ts +26 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +47 -0
- package/dist/validation/rules.d.ts +32 -0
- package/dist/validation/rules.d.ts.map +1 -0
- package/dist/validation/rules.js +99 -0
- package/package.json +6 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/add/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { nothing } from 'lit-html';
|
|
2
|
+
import { Progress } from './types';
|
|
3
|
+
import { UseValidatedForm } from '../use-validated-form-core';
|
|
4
|
+
export declare const nothing$: () => symbol;
|
|
5
|
+
export declare const then$: <P, R>(p$?: PromiseLike<P>, fn?: () => R) => Promise<R>;
|
|
6
|
+
interface RenderAddFields<T extends object> extends UseValidatedForm<T> {
|
|
7
|
+
error?: Error | {
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare const renderAddFields: <T extends object>({ error, ...thru }: RenderAddFields<T>) => import("..").Renderable[];
|
|
12
|
+
export declare const renderFailure$: <T>(save$?: PromiseLike<T>) => import("lit-html/directive.js").DirectiveResult<{
|
|
13
|
+
new (_partInfo: import("lit-html/directive.js").PartInfo): import("lit-html/directives/until.js").UntilDirective<typeof nothing | PromiseLike<symbol | import("lit-html").TemplateResult<1>> | undefined>;
|
|
14
|
+
}>;
|
|
15
|
+
interface Button {
|
|
16
|
+
slot?: string;
|
|
17
|
+
content?: unknown;
|
|
18
|
+
progress?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
title: string;
|
|
21
|
+
onSave: () => void;
|
|
22
|
+
onClick?: () => void;
|
|
23
|
+
}
|
|
24
|
+
interface RenderButton extends Omit<Button, 'progress'> {
|
|
25
|
+
progress?: Progress;
|
|
26
|
+
save$?: PromiseLike<unknown>;
|
|
27
|
+
}
|
|
28
|
+
export declare const renderButton$: ({ save$, progress, ...thru }: RenderButton) => import("lit-html/directive.js").DirectiveResult<{
|
|
29
|
+
new (_partInfo: import("lit-html/directive.js").PartInfo): import("lit-html/directives/until.js").UntilDirective<import("lit-html").TemplateResult<1> | Promise<import("lit-html").TemplateResult<1>>>;
|
|
30
|
+
}>;
|
|
31
|
+
interface RenderAddForm {
|
|
32
|
+
button: string;
|
|
33
|
+
tab: string;
|
|
34
|
+
tabCard?: string;
|
|
35
|
+
hash?: string;
|
|
36
|
+
}
|
|
37
|
+
interface RenderAddFormOpts<T extends object> extends RenderAddFields<T> {
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
save$?: PromiseLike<unknown>;
|
|
40
|
+
onSave: () => void;
|
|
41
|
+
}
|
|
42
|
+
export declare const renderAddForm$: <T extends object>({ button: buttonTitle, tab, tabCard, hash, }: RenderAddForm) => ({ disabled, save$, onSave, ...pass }: RenderAddFormOpts<T>) => import("lit-html").TemplateResult<1>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/add/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,UAAU,CAAC;AAKzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,eAAO,MAAM,QAAQ,cAAgB,CAAC;AACtC,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,eAC5B,CAAC;AAElC,UAAU,eAAe,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AACD,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,EAAE,oBAG/C,eAAe,CAAC,CAAC,CAAC,8BAGpB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC,CAAC;;EAItD,CAAC;AAEH,UAAU,MAAM;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,UAAU,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7B;AACD,eAAO,MAAM,aAAa,GAAI,8BAA8B,YAAY;;EAiCvE,CAAC;AAEF,UAAU,aAAa;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,eAAO,MAAM,cAAc,GACzB,CAAC,SAAS,MAAM,EAAE,8CAKhB,aAAa,MACf,sCAAsC,iBAAiB,CAAC,CAAC,CAAC,yCAUpC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { html, nothing } from 'lit-html';
|
|
2
|
+
import { until } from 'lit-html/directives/until.js';
|
|
3
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
4
|
+
import { when } from 'lit-html/directives/when.js';
|
|
5
|
+
import { renderFields } from '../render';
|
|
6
|
+
export const nothing$ = () => nothing;
|
|
7
|
+
export const then$ = (p$, fn) => Promise.resolve(p$).then(fn, fn);
|
|
8
|
+
export const renderAddFields = ({ error, ...thru }) => [
|
|
9
|
+
renderFields(thru),
|
|
10
|
+
when(error, (err) => html `<div class="failure">${err.message}</div>`),
|
|
11
|
+
];
|
|
12
|
+
export const renderFailure$ = (save$) => until(save$?.then(nothing$, (e) => html `<div class="failure">${e.message}</div>`), nothing);
|
|
13
|
+
export const renderButton$ = ({ save$, progress, ...thru }) => {
|
|
14
|
+
const button = ({ onSave, onClick = onSave, title, disabled, progress, content = nothing, slot, }) => html ` <button
|
|
15
|
+
class="button save"
|
|
16
|
+
slot=${ifDefined(slot)}
|
|
17
|
+
?disabled=${disabled}
|
|
18
|
+
?data-progress=${progress}
|
|
19
|
+
@click=${(ev) => {
|
|
20
|
+
ev.stopPropagation();
|
|
21
|
+
return onClick();
|
|
22
|
+
}}
|
|
23
|
+
>
|
|
24
|
+
${content} ${title}
|
|
25
|
+
</button>`;
|
|
26
|
+
return until(then$(save$, () => button(thru)), button({
|
|
27
|
+
...thru,
|
|
28
|
+
disabled: true,
|
|
29
|
+
progress: true,
|
|
30
|
+
content: html `<cz-spinner></cz-spinner> ${when(progress, (p) => p.join('/'))}`,
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
export const renderAddForm$ = ({ button: buttonTitle, tab, tabCard = tab, hash, }) => ({ disabled, save$, onSave, ...pass }) => html ` <cosmoz-tabs class="flex" hash-param=${ifDefined(hash)}>
|
|
34
|
+
<cosmoz-tab name="overview" heading=${tab}>
|
|
35
|
+
<cosmoz-tab-card heading=${tabCard}>
|
|
36
|
+
${renderFields(pass)} ${renderFailure$(save$)}
|
|
37
|
+
</cosmoz-tab-card>
|
|
38
|
+
</cosmoz-tab>
|
|
39
|
+
</cosmoz-tabs>
|
|
40
|
+
<cosmoz-bottom-bar active>
|
|
41
|
+
${renderButton$({ save$, onSave, disabled, title: buttonTitle })}
|
|
42
|
+
</cosmoz-bottom-bar>`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/add/styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,cAuC3B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { tagged as css } from '@neovici/cosmoz-utils';
|
|
2
|
+
import buttonStyles from '../styles/button';
|
|
3
|
+
export const renderAddStyles = () => css `
|
|
4
|
+
:host {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
height: 100%;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.forbidden {
|
|
11
|
+
font-size: 16px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.failure {
|
|
15
|
+
font-size: 12px;
|
|
16
|
+
line-height: 20px;
|
|
17
|
+
margin: 8px 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.failure,
|
|
21
|
+
.forbidden {
|
|
22
|
+
color: var(--error-color, #fc5c5b);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.input-common::part(float) {
|
|
26
|
+
font-size: 14px;
|
|
27
|
+
line-height: 20px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.input-toggle {
|
|
31
|
+
margin-top: 0.875em;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
cosmoz-tab-card::part(content) {
|
|
35
|
+
padding-bottom: 24px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
${buttonStyles}
|
|
39
|
+
.button cz-spinner {
|
|
40
|
+
margin-right: 8px;
|
|
41
|
+
}
|
|
42
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/add/types.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cz-toggle.d.ts","sourceRoot":"","sources":["../../src/controls/cz-toggle.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { css, sheet } from '@neovici/cosmoz-utils';
|
|
2
|
+
import { component, html, useCallback } from '@pionjs/pion';
|
|
3
|
+
import { live } from 'lit-html/directives/live.js';
|
|
4
|
+
import { when } from 'lit-html/directives/when.js';
|
|
5
|
+
import toggleStyles from '../styles/toggle';
|
|
6
|
+
const CzToggle = (host) => {
|
|
7
|
+
const { label, value, disabled, error } = host;
|
|
8
|
+
const onChange = useCallback((e) => host.dispatchEvent(new CustomEvent('change', {
|
|
9
|
+
detail: e.target.checked,
|
|
10
|
+
})), []);
|
|
11
|
+
return html `<input
|
|
12
|
+
id="toggle"
|
|
13
|
+
class="toggle"
|
|
14
|
+
part="toggle"
|
|
15
|
+
type="checkbox"
|
|
16
|
+
.checked=${live(!!value)}
|
|
17
|
+
?disabled=${disabled}
|
|
18
|
+
@change=${onChange}
|
|
19
|
+
/>
|
|
20
|
+
${when(label, () => html `<label for="toggle">${label}</label>`)}
|
|
21
|
+
<slot name="suffix"></slot>
|
|
22
|
+
${when(error, (error) => html `<div class="failure">${error}</div>`)} `;
|
|
23
|
+
};
|
|
24
|
+
const style = css `
|
|
25
|
+
${toggleStyles}
|
|
26
|
+
|
|
27
|
+
:host {
|
|
28
|
+
display: block;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
:host > * {
|
|
32
|
+
vertical-align: middle;
|
|
33
|
+
line-height: 0px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
::slotted(*) {
|
|
37
|
+
margin-left: 5px;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
customElements.define('cz-toggle', component(CzToggle, { styleSheets: [sheet(style)] }));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Props as DialogProps } from '@neovici/cosmoz-dialog-next';
|
|
2
|
+
import '@neovici/cosmoz-dialog-next/loading';
|
|
3
|
+
import { Props as AddProps } from '../use-validated-form$';
|
|
4
|
+
import '@neovici/cosmoz-spinner';
|
|
5
|
+
import { Renderable, Resolvable } from '../types';
|
|
6
|
+
interface Props<T extends object> extends DialogProps, AddProps<T> {
|
|
7
|
+
heading: string;
|
|
8
|
+
description?: Renderable;
|
|
9
|
+
auto?: boolean;
|
|
10
|
+
uncancelable?: boolean;
|
|
11
|
+
hideCancelButton?: boolean;
|
|
12
|
+
saveText?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Dialog<T extends object> extends Props<T> {
|
|
15
|
+
name?: string;
|
|
16
|
+
title?: string;
|
|
17
|
+
renderInPortal?: boolean;
|
|
18
|
+
backdrop?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare const formDialog: <T extends object>(props?: Dialog<T>) => Renderable;
|
|
21
|
+
export declare const formDialog$: <T extends object>(props$: Resolvable<Dialog<T>>) => import("lit-html/directive.js").DirectiveResult<{
|
|
22
|
+
new (_partInfo: import("lit-html/directive.js").PartInfo): import("lit-html/directives/until.js").UntilDirective<import("lit-html").TemplateResult<1> | Promise<symbol | {
|
|
23
|
+
toString(): string;
|
|
24
|
+
} | readonly Renderable[] | null | undefined>>;
|
|
25
|
+
}>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=form-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-dialog.d.ts","sourceRoot":"","sources":["../../src/form-dialog/form-dialog.ts"],"names":[],"mappings":"AAMA,OAAO,EAAU,KAAK,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,qCAAqC,CAAC;AAI7C,OAAO,EAAqB,KAAK,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,yBAAyB,CAAC;AAIjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AA2CD,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAG,UAoBhE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;;;EAIzE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { useEffect } from '@pionjs/pion';
|
|
2
|
+
import { html, nothing } from 'lit-html';
|
|
3
|
+
import { when } from 'lit-html/directives/when.js';
|
|
4
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import { _ } from '@neovici/cosmoz-i18next';
|
|
6
|
+
import { portal } from '@neovici/cosmoz-utils/directives/portal';
|
|
7
|
+
import { dialog } from '@neovici/cosmoz-dialog-next';
|
|
8
|
+
import '@neovici/cosmoz-dialog-next/loading';
|
|
9
|
+
import buttonStyles from '../styles/button';
|
|
10
|
+
import { renderFields, renderStyles } from '../render';
|
|
11
|
+
import { renderFailure$, renderButton$ } from '../add/render';
|
|
12
|
+
import { useValidatedForm$ } from '../use-validated-form$';
|
|
13
|
+
import '@neovici/cosmoz-spinner';
|
|
14
|
+
import styles from './style.css';
|
|
15
|
+
import { invoke } from '@neovici/cosmoz-utils/function';
|
|
16
|
+
import { until } from 'lit-html/directives/until.js';
|
|
17
|
+
const FormDialog = (host) => {
|
|
18
|
+
const { description, auto, uncancelable, hideCancelButton, saveText = _('OK'), } = host, { onSave, disabled, save$, progress, ...form } = useValidatedForm$(host);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!auto) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
onSave();
|
|
24
|
+
}, [auto]);
|
|
25
|
+
return html ` <style>
|
|
26
|
+
${buttonStyles} ${renderStyles(form)}${styles}
|
|
27
|
+
</style>
|
|
28
|
+
${when(description, () => html `<p class="description">${description}</p>`)}
|
|
29
|
+
<div class="form" part="form">${renderFields(form)}</div>
|
|
30
|
+
<div class="buttons">
|
|
31
|
+
${renderFailure$(save$)}
|
|
32
|
+
${renderButton$({ save$, onSave, disabled, title: saveText, progress })}
|
|
33
|
+
${when(!hideCancelButton, () => html `<button class="button" value="cancel" ?disabled=${uncancelable}>
|
|
34
|
+
${_('Cancel')}
|
|
35
|
+
</button>`)}
|
|
36
|
+
</div>`;
|
|
37
|
+
};
|
|
38
|
+
customElements.define('cosmoz-form-dialog-next', dialog(FormDialog, { observedAttributes: ['allow-empty'] }));
|
|
39
|
+
export const formDialog = (props) => {
|
|
40
|
+
if (!props)
|
|
41
|
+
return nothing;
|
|
42
|
+
const dialog = html `<cosmoz-form-dialog-next
|
|
43
|
+
?backdrop=${props.backdrop ?? true}
|
|
44
|
+
name=${ifDefined(props.name)}
|
|
45
|
+
?allow-empty=${props.allowEmpty}
|
|
46
|
+
.heading=${props.heading ?? props.title}
|
|
47
|
+
.description=${props.description}
|
|
48
|
+
.fields=${props.fields}
|
|
49
|
+
.initial=${props.initial}
|
|
50
|
+
.rules=${props.rules}
|
|
51
|
+
.onClose=${props.onClose}
|
|
52
|
+
.onSave=${props.onSave}
|
|
53
|
+
.auto=${props.auto}
|
|
54
|
+
.uncancelable=${props.uncancelable}
|
|
55
|
+
.hideCancelButton=${props.hideCancelButton}
|
|
56
|
+
.manualFocus=${props.manualFocus}
|
|
57
|
+
.saveText=${props.saveText}
|
|
58
|
+
></cosmoz-form-dialog-next>`;
|
|
59
|
+
return props.renderInPortal ? portal(dialog) : dialog;
|
|
60
|
+
};
|
|
61
|
+
export const formDialog$ = (props$) => until(Promise.resolve(invoke(props$)).then(formDialog, () => nothing), html `<cosmoz-dialog-loading></cosmoz-dialog-loading>`);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { nothing } from 'lit-html';
|
|
2
|
+
import { Dialog } from './form-dialog';
|
|
3
|
+
export declare const formDialogable: <T extends {
|
|
4
|
+
new (...args: any[]): any;
|
|
5
|
+
}>(base: T) => {
|
|
6
|
+
new (...args: any[]): {
|
|
7
|
+
[x: string]: any;
|
|
8
|
+
renderFormDialog<T_1 extends object>(dialog: Dialog<T_1>): typeof nothing | (() => import("..").Renderable);
|
|
9
|
+
};
|
|
10
|
+
} & T;
|
|
11
|
+
//# sourceMappingURL=form-dialogable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-dialogable.d.ts","sourceRoot":"","sources":["../../src/form-dialog/form-dialogable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,EACrE,MAAM,CAAC;kBADiD,GAAG,EAAE;;qCAIjC,MAAM;;KAkBjC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { nothing } from 'lit-html';
|
|
2
|
+
import { formDialog } from './form-dialog';
|
|
3
|
+
export const formDialogable = (base) => class extends base {
|
|
4
|
+
renderFormDialog(dialog) {
|
|
5
|
+
return !dialog
|
|
6
|
+
? nothing
|
|
7
|
+
: () => {
|
|
8
|
+
const onClose = (...args) => {
|
|
9
|
+
this._dialog = undefined;
|
|
10
|
+
dialog.onClose?.(...args);
|
|
11
|
+
};
|
|
12
|
+
return formDialog({
|
|
13
|
+
...dialog,
|
|
14
|
+
onClose,
|
|
15
|
+
onSave: (...args) => Promise.resolve(dialog.onSave?.(...args)).then(onClose),
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form-dialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.css.d.ts","sourceRoot":"","sources":["../../src/form-dialog/style.css.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,QAiCX,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { tagged as css } from '@neovici/cosmoz-utils';
|
|
2
|
+
const styles = css `
|
|
3
|
+
.description {
|
|
4
|
+
padding: 0 24px;
|
|
5
|
+
}
|
|
6
|
+
.description * {
|
|
7
|
+
line-height: normal;
|
|
8
|
+
}
|
|
9
|
+
.form {
|
|
10
|
+
overflow-y: auto;
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
}
|
|
14
|
+
.input {
|
|
15
|
+
margin-top: 20px;
|
|
16
|
+
padding: 0px 24px 4px 24px;
|
|
17
|
+
}
|
|
18
|
+
.input:last-child {
|
|
19
|
+
margin-bottom: 16px;
|
|
20
|
+
}
|
|
21
|
+
.save {
|
|
22
|
+
font-weight: bold;
|
|
23
|
+
}
|
|
24
|
+
.save[data-progress] {
|
|
25
|
+
opacity: 0.6;
|
|
26
|
+
}
|
|
27
|
+
.failure {
|
|
28
|
+
color: #fc5c5b;
|
|
29
|
+
align-self: center;
|
|
30
|
+
flex: 1;
|
|
31
|
+
}
|
|
32
|
+
cz-spinner {
|
|
33
|
+
align-self: center;
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
export default styles;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Dialog } from './form-dialog';
|
|
2
|
+
export interface Dialogable<T extends object> extends Dialog<T> {
|
|
3
|
+
preventClose?: boolean;
|
|
4
|
+
preventRefresh?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const useFormDialogable: () => {
|
|
7
|
+
dialog: Dialogable<object> | undefined;
|
|
8
|
+
rtkn: unknown;
|
|
9
|
+
setRtkn: import("@pionjs/pion").StateUpdater<unknown>;
|
|
10
|
+
open: <T extends object>(dialog: Dialogable<T>) => void;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=use-form-dialogable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form-dialogable.d.ts","sourceRoot":"","sources":["../../src/form-dialog/use-form-dialogable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AACD,eAAO,MAAM,iBAAiB;;;;WAa1B,CAAC,SAAS,MAAM,UAAU,UAAU,CAAC,CAAC,CAAC;CAuB1C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useCallback, useState } from '@pionjs/pion';
|
|
2
|
+
import { useOpened } from '../hooks/use-opened';
|
|
3
|
+
export const useFormDialogable = () => {
|
|
4
|
+
const { opened: maybeDialog, onOpen, onClose, } = useOpened();
|
|
5
|
+
const [rtkn, setRtkn] = useState();
|
|
6
|
+
const dialog = typeof maybeDialog === 'boolean' ? undefined : maybeDialog;
|
|
7
|
+
return {
|
|
8
|
+
dialog,
|
|
9
|
+
rtkn,
|
|
10
|
+
setRtkn,
|
|
11
|
+
open: useCallback((dialog) => onOpen({
|
|
12
|
+
...dialog,
|
|
13
|
+
onClose,
|
|
14
|
+
onSave: (values, initial, setProgress) => Promise.resolve(dialog.onSave?.(values, initial, setProgress)).then(() => {
|
|
15
|
+
if (!dialog?.preventRefresh) {
|
|
16
|
+
setRtkn(Symbol('rtkn'));
|
|
17
|
+
}
|
|
18
|
+
if (!dialog?.preventClose) {
|
|
19
|
+
onClose();
|
|
20
|
+
}
|
|
21
|
+
}),
|
|
22
|
+
}), [onClose]),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Field } from './types';
|
|
2
|
+
export { invoke } from '@neovici/cosmoz-utils/function';
|
|
3
|
+
type InvokeValueReturn<F, V> = F extends (...args: any) => infer R ? R : V;
|
|
4
|
+
export declare function invokeValue<V, A extends any[], F extends ((value: V, ...args: A) => any) | undefined | null>(valueFn: F, value: V, ...args: A): InvokeValueReturn<F, V>;
|
|
5
|
+
interface Initiatable<T extends object, K extends keyof T, V extends T[K]> {
|
|
6
|
+
id: K;
|
|
7
|
+
initiate: (value: V, values: T) => any;
|
|
8
|
+
}
|
|
9
|
+
export declare const initiate: <T extends object, K extends keyof T, V extends T[K]>(obj: T, fields: Initiatable<T, K, V>[]) => { [key in K]: ReturnType<Initiatable<T, K, V>["initiate"]>; };
|
|
10
|
+
export declare const primeval: ((<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { options, valueProperty }: F) => V | ({} | V)[]) | (<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { valueProperty }: F) => any[] | (string extends infer T_1 ? T_1 extends string ? T_1 extends keyof NonNullable<V> ? NonNullable<V>[T_1] : undefined : never : never)))[];
|
|
11
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3E,wBAAgB,WAAW,CAC1B,CAAC,EACD,CAAC,SAAS,GAAG,EAAE,EACf,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3D,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC3E,KAAK,CAAC,EACN,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAOzB,GACH,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACxD,CAAC;AAMH,eAAO,MAAM,QAAQ,KAEnB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,8BACmB,CAAC,yBAa7B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,qBACU,CAAC,qJAMrB,CAAC"}
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { array } from '@neovici/cosmoz-utils/array';
|
|
2
|
+
import { prop } from '@neovici/cosmoz-utils/object';
|
|
3
|
+
export { invoke } from '@neovici/cosmoz-utils/function';
|
|
4
|
+
export function invokeValue(valueFn, value, ...args) {
|
|
5
|
+
return valueFn ? valueFn(value, ...args) : value;
|
|
6
|
+
}
|
|
7
|
+
// TODO: Better typing with better inference
|
|
8
|
+
export const initiate = (obj, fields) => Object.fromEntries(fields.map(({ id, initiate }) => [
|
|
9
|
+
id,
|
|
10
|
+
initiate ? initiate(obj[id], obj) : obj[id],
|
|
11
|
+
]));
|
|
12
|
+
/*
|
|
13
|
+
* Transforms primitive values to an item from options
|
|
14
|
+
* and selection back to a primitive value on change.
|
|
15
|
+
*/
|
|
16
|
+
export const primeval = [
|
|
17
|
+
(value, values, { options, valueProperty }) => options
|
|
18
|
+
? array(value).map((v) => (['string', 'number'].includes(typeof v) &&
|
|
19
|
+
options.find((c) => prop(valueProperty)(c) === v)) ??
|
|
20
|
+
v)
|
|
21
|
+
: value,
|
|
22
|
+
(value, values, { valueProperty }) => value &&
|
|
23
|
+
(Array.isArray(value)
|
|
24
|
+
? value.map(prop(valueProperty))
|
|
25
|
+
: prop(valueProperty)(value)),
|
|
26
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-opened.d.ts","sourceRoot":"","sources":["../../src/hooks/use-opened.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,CAAC;;qBAKP,CAAC,GAAG,OAAO;;;CAM9B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useState, useMemo } from '@pionjs/pion';
|
|
2
|
+
export const useOpened = () => {
|
|
3
|
+
const [opened, setOpened] = useState(() => false);
|
|
4
|
+
return useMemo(() => ({
|
|
5
|
+
opened,
|
|
6
|
+
onOpen: (opened) => setOpened(opened ?? true),
|
|
7
|
+
onClose: () => setOpened(false),
|
|
8
|
+
onToggle: () => setOpened((opened) => !opened),
|
|
9
|
+
}), [opened]);
|
|
10
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './helpers';
|
|
2
|
+
export * from './inputs';
|
|
3
|
+
export * from './render';
|
|
4
|
+
export * from './validation';
|
|
5
|
+
export * from './use-form';
|
|
6
|
+
export * from './use-validated-form';
|
|
7
|
+
export * from './use-validated-form$';
|
|
8
|
+
export * from './use-items';
|
|
9
|
+
export * from './touch';
|
|
10
|
+
export * from './use-items-filter';
|
|
11
|
+
export * from './form-dialog';
|
|
12
|
+
export type * from './types';
|
|
13
|
+
export { useFormCore, type FormValues } from './use-form-core';
|
|
14
|
+
export { computeRules, useValidatedFormCore } from './use-validated-form-core';
|
|
15
|
+
export * from './add';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,mBAAmB,SAAS,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG/E,cAAc,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './helpers';
|
|
2
|
+
export * from './inputs';
|
|
3
|
+
export * from './render';
|
|
4
|
+
export * from './validation';
|
|
5
|
+
export * from './use-form';
|
|
6
|
+
export * from './use-validated-form';
|
|
7
|
+
export * from './use-validated-form$';
|
|
8
|
+
export * from './use-items';
|
|
9
|
+
export * from './touch';
|
|
10
|
+
export * from './use-items-filter';
|
|
11
|
+
export * from './form-dialog';
|
|
12
|
+
// Core hooks
|
|
13
|
+
export { useFormCore } from './use-form-core';
|
|
14
|
+
export { computeRules, useValidatedFormCore } from './use-validated-form-core';
|
|
15
|
+
// Add form utilities
|
|
16
|
+
export * from './add';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import '@neovici/cosmoz-autocomplete';
|
|
2
|
+
import { Resolvable } from '../types';
|
|
3
|
+
type OptionsOpts<T, V> = {
|
|
4
|
+
active: boolean;
|
|
5
|
+
query: string;
|
|
6
|
+
value: V;
|
|
7
|
+
values: T;
|
|
8
|
+
};
|
|
9
|
+
export interface AutocompleteProps<T extends object, K extends keyof T, V extends T[K]> {
|
|
10
|
+
options?: Resolvable<unknown[] | false | undefined, [OptionsOpts<T, V>]>;
|
|
11
|
+
limit?: number;
|
|
12
|
+
textProperty?: string;
|
|
13
|
+
valueProperty?: string;
|
|
14
|
+
keepOpened?: boolean;
|
|
15
|
+
keepQuery?: boolean;
|
|
16
|
+
wrap?: boolean;
|
|
17
|
+
showSingle?: boolean;
|
|
18
|
+
preserveOrder?: boolean;
|
|
19
|
+
itemRenderer?: unknown;
|
|
20
|
+
textual?: unknown;
|
|
21
|
+
externalSearch?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const autocomplete: <T extends object, K extends keyof T, V extends T[K]>({ field, value, values, onChange: update, ...thru }: import("..").InputProps<T, K, V>) => import("..").Renderable;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=autocomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/inputs/autocomplete.ts"],"names":[],"mappings":"AAKA,OAAO,8BAA8B,CAAC;AAGtC,OAAO,EAAiB,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,WAAW,iBAAiB,CACjC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEd,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAOD,eAAO,MAAM,YAAY,GACvB,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mHAiEpD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { html } from 'lit-html';
|
|
2
|
+
import { live } from 'lit-html/directives/live.js';
|
|
3
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
4
|
+
import { guard } from 'lit-html/directives/guard.js';
|
|
5
|
+
import '@neovici/cosmoz-autocomplete';
|
|
6
|
+
import { input } from './base';
|
|
7
|
+
import { renderContents } from './render';
|
|
8
|
+
export const autocomplete = input(({ id, label, noLabelFloat, alwaysFloatLabel, error, warning, suffix, disabled, onChange, options, limit, min, textProperty, valueProperty, value, values, itemRenderer, keepOpened, keepQuery, placeholder, wrap, showSingle, preserveOrder, title, textual, description, externalSearch, ...thru }) => {
|
|
9
|
+
return html `<cosmoz-autocomplete
|
|
10
|
+
class="input input-autocomplete"
|
|
11
|
+
?data-warning=${!!warning}
|
|
12
|
+
name=${id}
|
|
13
|
+
?disabled=${disabled}
|
|
14
|
+
?wrap=${wrap}
|
|
15
|
+
?no-label-float=${noLabelFloat}
|
|
16
|
+
?always-float-label=${alwaysFloatLabel}
|
|
17
|
+
?invalid=${!!error}
|
|
18
|
+
?keep-opened=${!!keepOpened}
|
|
19
|
+
?keep-query=${!!keepQuery}
|
|
20
|
+
?show-single=${!!showSingle}
|
|
21
|
+
?preserve-order=${!!preserveOrder}
|
|
22
|
+
.placeholder=${placeholder}
|
|
23
|
+
.itemRenderer=${ifDefined(itemRenderer)}
|
|
24
|
+
.errorMessage=${error}
|
|
25
|
+
.label=${label}
|
|
26
|
+
.value=${live(value)}
|
|
27
|
+
.source=${guard([options, value, values], () => typeof options === 'function'
|
|
28
|
+
? (info) => options({ ...thru, ...info, value, values })
|
|
29
|
+
: options)}
|
|
30
|
+
.textProperty=${textProperty}
|
|
31
|
+
.valueProperty=${valueProperty}
|
|
32
|
+
.limit=${limit}
|
|
33
|
+
.min=${min}
|
|
34
|
+
.title=${ifDefined(title)}
|
|
35
|
+
.textual=${textual}
|
|
36
|
+
.onChange=${(options) => onChange((limit === 1 ? options?.[0] : options))}
|
|
37
|
+
?external-search=${externalSearch}
|
|
38
|
+
>${renderContents({ suffix, warning, description })}</cosmoz-autocomplete
|
|
39
|
+
>`;
|
|
40
|
+
});
|