@foldkit/ui 0.112.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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/anchor.d.ts +38 -0
- package/dist/anchor.d.ts.map +1 -0
- package/dist/anchor.js +142 -0
- package/dist/animation/index.d.ts +49 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/index.js +75 -0
- package/dist/animation/public.d.ts +3 -0
- package/dist/animation/public.d.ts.map +1 -0
- package/dist/animation/public.js +1 -0
- package/dist/animation/schema.d.ts +43 -0
- package/dist/animation/schema.d.ts.map +1 -0
- package/dist/animation/schema.js +41 -0
- package/dist/animation/update.d.ts +24 -0
- package/dist/animation/update.d.ts.map +1 -0
- package/dist/animation/update.js +67 -0
- package/dist/button/index.d.ts +17 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/index.js +22 -0
- package/dist/button/public.d.ts +3 -0
- package/dist/button/public.d.ts.map +1 -0
- package/dist/button/public.js +1 -0
- package/dist/calendar/index.d.ts +462 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +825 -0
- package/dist/calendar/public.d.ts +3 -0
- package/dist/calendar/public.d.ts.map +1 -0
- package/dist/calendar/public.js +1 -0
- package/dist/checkbox/index.d.ts +119 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/checkbox/index.js +111 -0
- package/dist/checkbox/public.d.ts +3 -0
- package/dist/checkbox/public.d.ts.map +1 -0
- package/dist/checkbox/public.js +1 -0
- package/dist/combobox/multi.d.ts +183 -0
- package/dist/combobox/multi.d.ts.map +1 -0
- package/dist/combobox/multi.js +81 -0
- package/dist/combobox/multiPublic.d.ts +3 -0
- package/dist/combobox/multiPublic.d.ts.map +1 -0
- package/dist/combobox/multiPublic.js +1 -0
- package/dist/combobox/public.d.ts +7 -0
- package/dist/combobox/public.d.ts.map +1 -0
- package/dist/combobox/public.js +3 -0
- package/dist/combobox/shared.d.ts +423 -0
- package/dist/combobox/shared.d.ts.map +1 -0
- package/dist/combobox/shared.js +708 -0
- package/dist/combobox/single.d.ts +198 -0
- package/dist/combobox/single.d.ts.map +1 -0
- package/dist/combobox/single.js +106 -0
- package/dist/datePicker/index.d.ts +457 -0
- package/dist/datePicker/index.d.ts.map +1 -0
- package/dist/datePicker/index.js +318 -0
- package/dist/datePicker/public.d.ts +3 -0
- package/dist/datePicker/public.d.ts.map +1 -0
- package/dist/datePicker/public.js +1 -0
- package/dist/dialog/index.d.ts +160 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/dialog/index.js +211 -0
- package/dist/dialog/public.d.ts +3 -0
- package/dist/dialog/public.d.ts.map +1 -0
- package/dist/dialog/public.js +1 -0
- package/dist/disclosure/index.d.ts +110 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/index.js +111 -0
- package/dist/disclosure/public.d.ts +3 -0
- package/dist/disclosure/public.d.ts.map +1 -0
- package/dist/disclosure/public.js +1 -0
- package/dist/dragAndDrop/index.d.ts +540 -0
- package/dist/dragAndDrop/index.d.ts.map +1 -0
- package/dist/dragAndDrop/index.js +535 -0
- package/dist/dragAndDrop/public.d.ts +3 -0
- package/dist/dragAndDrop/public.d.ts.map +1 -0
- package/dist/dragAndDrop/public.js +1 -0
- package/dist/fieldset/index.d.ts +21 -0
- package/dist/fieldset/index.d.ts.map +1 -0
- package/dist/fieldset/index.js +25 -0
- package/dist/fieldset/public.d.ts +3 -0
- package/dist/fieldset/public.d.ts.map +1 -0
- package/dist/fieldset/public.js +1 -0
- package/dist/fileDrop/index.d.ts +109 -0
- package/dist/fileDrop/index.d.ts.map +1 -0
- package/dist/fileDrop/index.js +127 -0
- package/dist/fileDrop/public.d.ts +3 -0
- package/dist/fileDrop/public.d.ts.map +1 -0
- package/dist/fileDrop/public.js +1 -0
- package/dist/group.d.ts +8 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/group.js +13 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/input/index.d.ts +26 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +43 -0
- package/dist/input/public.d.ts +3 -0
- package/dist/input/public.d.ts.map +1 -0
- package/dist/input/public.js +1 -0
- package/dist/internal/optionExtensions.d.ts +6 -0
- package/dist/internal/optionExtensions.d.ts.map +1 -0
- package/dist/internal/optionExtensions.js +2 -0
- package/dist/keyboard.d.ts +6 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +9 -0
- package/dist/listbox/multi.d.ts +189 -0
- package/dist/listbox/multi.d.ts.map +1 -0
- package/dist/listbox/multi.js +65 -0
- package/dist/listbox/multiPublic.d.ts +3 -0
- package/dist/listbox/multiPublic.d.ts.map +1 -0
- package/dist/listbox/multiPublic.js +1 -0
- package/dist/listbox/public.d.ts +7 -0
- package/dist/listbox/public.d.ts.map +1 -0
- package/dist/listbox/public.js +3 -0
- package/dist/listbox/shared.d.ts +432 -0
- package/dist/listbox/shared.d.ts.map +1 -0
- package/dist/listbox/shared.js +670 -0
- package/dist/listbox/single.d.ts +207 -0
- package/dist/listbox/single.d.ts.map +1 -0
- package/dist/listbox/single.js +73 -0
- package/dist/menu/index.d.ts +368 -0
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/menu/index.js +682 -0
- package/dist/menu/public.d.ts +4 -0
- package/dist/menu/public.d.ts.map +1 -0
- package/dist/menu/public.js +1 -0
- package/dist/popover/index.d.ts +267 -0
- package/dist/popover/index.d.ts.map +1 -0
- package/dist/popover/index.js +346 -0
- package/dist/popover/public.d.ts +4 -0
- package/dist/popover/public.d.ts.map +1 -0
- package/dist/popover/public.js +1 -0
- package/dist/radioGroup/index.d.ts +169 -0
- package/dist/radioGroup/index.d.ts.map +1 -0
- package/dist/radioGroup/index.js +197 -0
- package/dist/radioGroup/public.d.ts +3 -0
- package/dist/radioGroup/public.d.ts.map +1 -0
- package/dist/radioGroup/public.js +1 -0
- package/dist/select/index.d.ts +24 -0
- package/dist/select/index.d.ts.map +1 -0
- package/dist/select/index.js +40 -0
- package/dist/select/public.d.ts +3 -0
- package/dist/select/public.d.ts.map +1 -0
- package/dist/select/public.js +1 -0
- package/dist/slider/index.d.ts +318 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/slider/index.js +337 -0
- package/dist/slider/public.d.ts +3 -0
- package/dist/slider/public.d.ts.map +1 -0
- package/dist/slider/public.js +1 -0
- package/dist/switch/index.d.ts +99 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/switch/index.js +107 -0
- package/dist/switch/public.d.ts +3 -0
- package/dist/switch/public.d.ts.map +1 -0
- package/dist/switch/public.js +1 -0
- package/dist/tabs/index.d.ts +155 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.js +185 -0
- package/dist/tabs/public.d.ts +3 -0
- package/dist/tabs/public.d.ts.map +1 -0
- package/dist/tabs/public.js +1 -0
- package/dist/test/apps/disabledButton.d.ts +38 -0
- package/dist/test/apps/disabledButton.d.ts.map +1 -0
- package/dist/test/apps/disabledButton.js +71 -0
- package/dist/textarea/index.d.ts +26 -0
- package/dist/textarea/index.d.ts.map +1 -0
- package/dist/textarea/index.js +44 -0
- package/dist/textarea/public.d.ts +3 -0
- package/dist/textarea/public.d.ts.map +1 -0
- package/dist/textarea/public.js +1 -0
- package/dist/toast/index.d.ts +608 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toast/index.js +146 -0
- package/dist/toast/public.d.ts +4 -0
- package/dist/toast/public.d.ts.map +1 -0
- package/dist/toast/public.js +1 -0
- package/dist/toast/schema.d.ts +154 -0
- package/dist/toast/schema.d.ts.map +1 -0
- package/dist/toast/schema.js +93 -0
- package/dist/toast/update.d.ts +510 -0
- package/dist/toast/update.d.ts.map +1 -0
- package/dist/toast/update.js +225 -0
- package/dist/tooltip/index.d.ts +170 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tooltip/index.js +253 -0
- package/dist/tooltip/public.d.ts +4 -0
- package/dist/tooltip/public.d.ts.map +1 -0
- package/dist/tooltip/public.js +1 -0
- package/dist/typeahead.d.ts +4 -0
- package/dist/typeahead.d.ts.map +1 -0
- package/dist/typeahead.js +14 -0
- package/dist/virtualList/index.d.ts +203 -0
- package/dist/virtualList/index.d.ts.map +1 -0
- package/dist/virtualList/index.js +392 -0
- package/dist/virtualList/public.d.ts +3 -0
- package/dist/virtualList/public.d.ts.map +1 -0
- package/dist/virtualList/public.js +1 -0
- package/dist/vitest-setup.d.ts +2 -0
- package/dist/vitest-setup.d.ts.map +1 -0
- package/dist/vitest-setup.js +2 -0
- package/package.json +161 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Match as M, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from 'foldkit/command';
|
|
3
|
+
import { html } from 'foldkit/html';
|
|
4
|
+
import { m } from 'foldkit/message';
|
|
5
|
+
import * as Dialog from '../../dialog/index.js';
|
|
6
|
+
// MODEL
|
|
7
|
+
export const Model = S.Struct({
|
|
8
|
+
isEnabled: S.Boolean,
|
|
9
|
+
dialog: Dialog.Model,
|
|
10
|
+
});
|
|
11
|
+
// MESSAGE
|
|
12
|
+
export const ClickedToggle = m('ClickedToggle');
|
|
13
|
+
export const ClickedSubmit = m('ClickedSubmit');
|
|
14
|
+
export const GotDialogMessage = m('GotDialogMessage', {
|
|
15
|
+
message: Dialog.Message,
|
|
16
|
+
});
|
|
17
|
+
export const Message = S.Union([ClickedToggle, ClickedSubmit, GotDialogMessage]);
|
|
18
|
+
// INIT
|
|
19
|
+
export const initialModel = {
|
|
20
|
+
isEnabled: false,
|
|
21
|
+
dialog: Dialog.init({ id: 'test-dialog', isOpen: true }),
|
|
22
|
+
};
|
|
23
|
+
// UPDATE
|
|
24
|
+
export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
25
|
+
ClickedToggle: () => [{ ...model, isEnabled: !model.isEnabled }, []],
|
|
26
|
+
ClickedSubmit: () => [model, []],
|
|
27
|
+
GotDialogMessage: ({ message: dialogMessage }) => {
|
|
28
|
+
const [nextDialog, commands] = Dialog.update(model.dialog, dialogMessage);
|
|
29
|
+
return [
|
|
30
|
+
{ ...model, dialog: nextDialog },
|
|
31
|
+
Command.mapMessages(commands, dialogMessage => GotDialogMessage({ message: dialogMessage })),
|
|
32
|
+
];
|
|
33
|
+
},
|
|
34
|
+
}));
|
|
35
|
+
// VIEW
|
|
36
|
+
const submitButton = (isEnabled) => {
|
|
37
|
+
const h = html();
|
|
38
|
+
return h.button([
|
|
39
|
+
h.Class('submit'),
|
|
40
|
+
...(isEnabled ? [h.OnClick(ClickedSubmit())] : [h.Disabled(true)]),
|
|
41
|
+
], ['Submit']);
|
|
42
|
+
};
|
|
43
|
+
/** Plain view, no dialog wrapper. */
|
|
44
|
+
export const view = (model) => {
|
|
45
|
+
const h = html();
|
|
46
|
+
return h.div([], [
|
|
47
|
+
h.button([h.OnClick(ClickedToggle())], ['Toggle']),
|
|
48
|
+
submitButton(model.isEnabled),
|
|
49
|
+
]);
|
|
50
|
+
};
|
|
51
|
+
/** View with submit button inside a dialog's panel. */
|
|
52
|
+
export const viewWithDialog = (model) => {
|
|
53
|
+
const h = html();
|
|
54
|
+
return h.div([], [
|
|
55
|
+
h.button([h.OnClick(ClickedToggle())], ['Toggle']),
|
|
56
|
+
h.submodel({
|
|
57
|
+
slotId: model.dialog.id,
|
|
58
|
+
model: model.dialog,
|
|
59
|
+
view: Dialog.view,
|
|
60
|
+
viewInputs: {
|
|
61
|
+
toView: ({ dialog, backdrop, panel, isVisible }) => h.dialog([...dialog], isVisible
|
|
62
|
+
? [
|
|
63
|
+
h.div([...backdrop], []),
|
|
64
|
+
h.div([...panel], [submitButton(model.isEnabled)]),
|
|
65
|
+
]
|
|
66
|
+
: []),
|
|
67
|
+
},
|
|
68
|
+
toParentMessage: message => GotDialogMessage({ message }),
|
|
69
|
+
}),
|
|
70
|
+
]);
|
|
71
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Attribute } from 'foldkit/html';
|
|
2
|
+
import type { Html } from 'foldkit/html';
|
|
3
|
+
/** Attribute groups the textarea component provides to the consumer's `toView` callback. */
|
|
4
|
+
export type TextareaAttributes<ParentMessage> = Readonly<{
|
|
5
|
+
textarea: ReadonlyArray<Attribute<ParentMessage>>;
|
|
6
|
+
label: ReadonlyArray<Attribute<ParentMessage>>;
|
|
7
|
+
description: ReadonlyArray<Attribute<ParentMessage>>;
|
|
8
|
+
}>;
|
|
9
|
+
/** Configuration for rendering a textarea with `view`. */
|
|
10
|
+
export type ViewConfig<ParentMessage> = Readonly<{
|
|
11
|
+
id: string;
|
|
12
|
+
toView: (attributes: TextareaAttributes<ParentMessage>) => Html;
|
|
13
|
+
onInput?: (value: string) => ParentMessage;
|
|
14
|
+
value?: string;
|
|
15
|
+
isDisabled?: boolean;
|
|
16
|
+
isInvalid?: boolean;
|
|
17
|
+
isAutofocus?: boolean;
|
|
18
|
+
name?: string;
|
|
19
|
+
rows?: number;
|
|
20
|
+
placeholder?: string;
|
|
21
|
+
}>;
|
|
22
|
+
/** Generates the description element ID from the textarea's base ID. */
|
|
23
|
+
export declare const descriptionId: (id: string) => string;
|
|
24
|
+
/** Renders an accessible textarea by building ARIA attribute groups and delegating layout to the consumer's `toView` callback. */
|
|
25
|
+
export declare const view: <ParentMessage>(config: ViewConfig<ParentMessage>) => Html;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/textarea/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAIxC,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACvD,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IACjD,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CACrD,CAAC,CAAA;AAEF,0DAA0D;AAC1D,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAC,CAAA;AAEF,wEAAwE;AACxE,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,KAAG,MAA6B,CAAA;AAExE,kIAAkI;AAClI,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IA+DF,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Predicate } from 'effect';
|
|
2
|
+
import { html } from 'foldkit/html';
|
|
3
|
+
/** Generates the description element ID from the textarea's base ID. */
|
|
4
|
+
export const descriptionId = (id) => `${id}-description`;
|
|
5
|
+
/** Renders an accessible textarea by building ARIA attribute groups and delegating layout to the consumer's `toView` callback. */
|
|
6
|
+
export const view = (config) => {
|
|
7
|
+
const h = html();
|
|
8
|
+
const { toView, id, onInput, value, isDisabled = false, isInvalid = false, isAutofocus = false, name, rows, placeholder, } = config;
|
|
9
|
+
const disabledAttributes = isDisabled
|
|
10
|
+
? [h.AriaDisabled(true), h.Disabled(true), h.DataAttribute('disabled', '')]
|
|
11
|
+
: [];
|
|
12
|
+
const invalidAttributes = isInvalid
|
|
13
|
+
? [h.AriaInvalid(true), h.DataAttribute('invalid', '')]
|
|
14
|
+
: [];
|
|
15
|
+
const inputAttributes = Predicate.isNotUndefined(onInput) && !isDisabled ? [h.OnInput(onInput)] : [];
|
|
16
|
+
const valueAttributes = Predicate.isNotUndefined(value)
|
|
17
|
+
? [h.Value(value)]
|
|
18
|
+
: [];
|
|
19
|
+
const autofocusAttributes = isAutofocus ? [h.Autofocus(true)] : [];
|
|
20
|
+
const nameAttributes = Predicate.isNotUndefined(name) ? [h.Name(name)] : [];
|
|
21
|
+
const rowsAttributes = Predicate.isNotUndefined(rows) ? [h.Rows(rows)] : [];
|
|
22
|
+
const placeholderAttributes = Predicate.isNotUndefined(placeholder)
|
|
23
|
+
? [h.Placeholder(placeholder)]
|
|
24
|
+
: [];
|
|
25
|
+
const allTextareaAttributes = [
|
|
26
|
+
h.Id(id),
|
|
27
|
+
h.AriaDescribedBy(descriptionId(id)),
|
|
28
|
+
...disabledAttributes,
|
|
29
|
+
...invalidAttributes,
|
|
30
|
+
...inputAttributes,
|
|
31
|
+
...valueAttributes,
|
|
32
|
+
...autofocusAttributes,
|
|
33
|
+
...nameAttributes,
|
|
34
|
+
...rowsAttributes,
|
|
35
|
+
...placeholderAttributes,
|
|
36
|
+
];
|
|
37
|
+
const labelAttributes = [h.For(id)];
|
|
38
|
+
const descriptionAttributes = [h.Id(descriptionId(id))];
|
|
39
|
+
return toView({
|
|
40
|
+
textarea: allTextareaAttributes,
|
|
41
|
+
label: labelAttributes,
|
|
42
|
+
description: descriptionAttributes,
|
|
43
|
+
});
|
|
44
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/textarea/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { view, descriptionId } from './index.js';
|