@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.
Files changed (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/anchor.d.ts +38 -0
  4. package/dist/anchor.d.ts.map +1 -0
  5. package/dist/anchor.js +142 -0
  6. package/dist/animation/index.d.ts +49 -0
  7. package/dist/animation/index.d.ts.map +1 -0
  8. package/dist/animation/index.js +75 -0
  9. package/dist/animation/public.d.ts +3 -0
  10. package/dist/animation/public.d.ts.map +1 -0
  11. package/dist/animation/public.js +1 -0
  12. package/dist/animation/schema.d.ts +43 -0
  13. package/dist/animation/schema.d.ts.map +1 -0
  14. package/dist/animation/schema.js +41 -0
  15. package/dist/animation/update.d.ts +24 -0
  16. package/dist/animation/update.d.ts.map +1 -0
  17. package/dist/animation/update.js +67 -0
  18. package/dist/button/index.d.ts +17 -0
  19. package/dist/button/index.d.ts.map +1 -0
  20. package/dist/button/index.js +22 -0
  21. package/dist/button/public.d.ts +3 -0
  22. package/dist/button/public.d.ts.map +1 -0
  23. package/dist/button/public.js +1 -0
  24. package/dist/calendar/index.d.ts +462 -0
  25. package/dist/calendar/index.d.ts.map +1 -0
  26. package/dist/calendar/index.js +825 -0
  27. package/dist/calendar/public.d.ts +3 -0
  28. package/dist/calendar/public.d.ts.map +1 -0
  29. package/dist/calendar/public.js +1 -0
  30. package/dist/checkbox/index.d.ts +119 -0
  31. package/dist/checkbox/index.d.ts.map +1 -0
  32. package/dist/checkbox/index.js +111 -0
  33. package/dist/checkbox/public.d.ts +3 -0
  34. package/dist/checkbox/public.d.ts.map +1 -0
  35. package/dist/checkbox/public.js +1 -0
  36. package/dist/combobox/multi.d.ts +183 -0
  37. package/dist/combobox/multi.d.ts.map +1 -0
  38. package/dist/combobox/multi.js +81 -0
  39. package/dist/combobox/multiPublic.d.ts +3 -0
  40. package/dist/combobox/multiPublic.d.ts.map +1 -0
  41. package/dist/combobox/multiPublic.js +1 -0
  42. package/dist/combobox/public.d.ts +7 -0
  43. package/dist/combobox/public.d.ts.map +1 -0
  44. package/dist/combobox/public.js +3 -0
  45. package/dist/combobox/shared.d.ts +423 -0
  46. package/dist/combobox/shared.d.ts.map +1 -0
  47. package/dist/combobox/shared.js +708 -0
  48. package/dist/combobox/single.d.ts +198 -0
  49. package/dist/combobox/single.d.ts.map +1 -0
  50. package/dist/combobox/single.js +106 -0
  51. package/dist/datePicker/index.d.ts +457 -0
  52. package/dist/datePicker/index.d.ts.map +1 -0
  53. package/dist/datePicker/index.js +318 -0
  54. package/dist/datePicker/public.d.ts +3 -0
  55. package/dist/datePicker/public.d.ts.map +1 -0
  56. package/dist/datePicker/public.js +1 -0
  57. package/dist/dialog/index.d.ts +160 -0
  58. package/dist/dialog/index.d.ts.map +1 -0
  59. package/dist/dialog/index.js +211 -0
  60. package/dist/dialog/public.d.ts +3 -0
  61. package/dist/dialog/public.d.ts.map +1 -0
  62. package/dist/dialog/public.js +1 -0
  63. package/dist/disclosure/index.d.ts +110 -0
  64. package/dist/disclosure/index.d.ts.map +1 -0
  65. package/dist/disclosure/index.js +111 -0
  66. package/dist/disclosure/public.d.ts +3 -0
  67. package/dist/disclosure/public.d.ts.map +1 -0
  68. package/dist/disclosure/public.js +1 -0
  69. package/dist/dragAndDrop/index.d.ts +540 -0
  70. package/dist/dragAndDrop/index.d.ts.map +1 -0
  71. package/dist/dragAndDrop/index.js +535 -0
  72. package/dist/dragAndDrop/public.d.ts +3 -0
  73. package/dist/dragAndDrop/public.d.ts.map +1 -0
  74. package/dist/dragAndDrop/public.js +1 -0
  75. package/dist/fieldset/index.d.ts +21 -0
  76. package/dist/fieldset/index.d.ts.map +1 -0
  77. package/dist/fieldset/index.js +25 -0
  78. package/dist/fieldset/public.d.ts +3 -0
  79. package/dist/fieldset/public.d.ts.map +1 -0
  80. package/dist/fieldset/public.js +1 -0
  81. package/dist/fileDrop/index.d.ts +109 -0
  82. package/dist/fileDrop/index.d.ts.map +1 -0
  83. package/dist/fileDrop/index.js +127 -0
  84. package/dist/fileDrop/public.d.ts +3 -0
  85. package/dist/fileDrop/public.d.ts.map +1 -0
  86. package/dist/fileDrop/public.js +1 -0
  87. package/dist/group.d.ts +8 -0
  88. package/dist/group.d.ts.map +1 -0
  89. package/dist/group.js +13 -0
  90. package/dist/index.d.ts +25 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +24 -0
  93. package/dist/input/index.d.ts +26 -0
  94. package/dist/input/index.d.ts.map +1 -0
  95. package/dist/input/index.js +43 -0
  96. package/dist/input/public.d.ts +3 -0
  97. package/dist/input/public.d.ts.map +1 -0
  98. package/dist/input/public.js +1 -0
  99. package/dist/internal/optionExtensions.d.ts +6 -0
  100. package/dist/internal/optionExtensions.d.ts.map +1 -0
  101. package/dist/internal/optionExtensions.js +2 -0
  102. package/dist/keyboard.d.ts +6 -0
  103. package/dist/keyboard.d.ts.map +1 -0
  104. package/dist/keyboard.js +9 -0
  105. package/dist/listbox/multi.d.ts +189 -0
  106. package/dist/listbox/multi.d.ts.map +1 -0
  107. package/dist/listbox/multi.js +65 -0
  108. package/dist/listbox/multiPublic.d.ts +3 -0
  109. package/dist/listbox/multiPublic.d.ts.map +1 -0
  110. package/dist/listbox/multiPublic.js +1 -0
  111. package/dist/listbox/public.d.ts +7 -0
  112. package/dist/listbox/public.d.ts.map +1 -0
  113. package/dist/listbox/public.js +3 -0
  114. package/dist/listbox/shared.d.ts +432 -0
  115. package/dist/listbox/shared.d.ts.map +1 -0
  116. package/dist/listbox/shared.js +670 -0
  117. package/dist/listbox/single.d.ts +207 -0
  118. package/dist/listbox/single.d.ts.map +1 -0
  119. package/dist/listbox/single.js +73 -0
  120. package/dist/menu/index.d.ts +368 -0
  121. package/dist/menu/index.d.ts.map +1 -0
  122. package/dist/menu/index.js +682 -0
  123. package/dist/menu/public.d.ts +4 -0
  124. package/dist/menu/public.d.ts.map +1 -0
  125. package/dist/menu/public.js +1 -0
  126. package/dist/popover/index.d.ts +267 -0
  127. package/dist/popover/index.d.ts.map +1 -0
  128. package/dist/popover/index.js +346 -0
  129. package/dist/popover/public.d.ts +4 -0
  130. package/dist/popover/public.d.ts.map +1 -0
  131. package/dist/popover/public.js +1 -0
  132. package/dist/radioGroup/index.d.ts +169 -0
  133. package/dist/radioGroup/index.d.ts.map +1 -0
  134. package/dist/radioGroup/index.js +197 -0
  135. package/dist/radioGroup/public.d.ts +3 -0
  136. package/dist/radioGroup/public.d.ts.map +1 -0
  137. package/dist/radioGroup/public.js +1 -0
  138. package/dist/select/index.d.ts +24 -0
  139. package/dist/select/index.d.ts.map +1 -0
  140. package/dist/select/index.js +40 -0
  141. package/dist/select/public.d.ts +3 -0
  142. package/dist/select/public.d.ts.map +1 -0
  143. package/dist/select/public.js +1 -0
  144. package/dist/slider/index.d.ts +318 -0
  145. package/dist/slider/index.d.ts.map +1 -0
  146. package/dist/slider/index.js +337 -0
  147. package/dist/slider/public.d.ts +3 -0
  148. package/dist/slider/public.d.ts.map +1 -0
  149. package/dist/slider/public.js +1 -0
  150. package/dist/switch/index.d.ts +99 -0
  151. package/dist/switch/index.d.ts.map +1 -0
  152. package/dist/switch/index.js +107 -0
  153. package/dist/switch/public.d.ts +3 -0
  154. package/dist/switch/public.d.ts.map +1 -0
  155. package/dist/switch/public.js +1 -0
  156. package/dist/tabs/index.d.ts +155 -0
  157. package/dist/tabs/index.d.ts.map +1 -0
  158. package/dist/tabs/index.js +185 -0
  159. package/dist/tabs/public.d.ts +3 -0
  160. package/dist/tabs/public.d.ts.map +1 -0
  161. package/dist/tabs/public.js +1 -0
  162. package/dist/test/apps/disabledButton.d.ts +38 -0
  163. package/dist/test/apps/disabledButton.d.ts.map +1 -0
  164. package/dist/test/apps/disabledButton.js +71 -0
  165. package/dist/textarea/index.d.ts +26 -0
  166. package/dist/textarea/index.d.ts.map +1 -0
  167. package/dist/textarea/index.js +44 -0
  168. package/dist/textarea/public.d.ts +3 -0
  169. package/dist/textarea/public.d.ts.map +1 -0
  170. package/dist/textarea/public.js +1 -0
  171. package/dist/toast/index.d.ts +608 -0
  172. package/dist/toast/index.d.ts.map +1 -0
  173. package/dist/toast/index.js +146 -0
  174. package/dist/toast/public.d.ts +4 -0
  175. package/dist/toast/public.d.ts.map +1 -0
  176. package/dist/toast/public.js +1 -0
  177. package/dist/toast/schema.d.ts +154 -0
  178. package/dist/toast/schema.d.ts.map +1 -0
  179. package/dist/toast/schema.js +93 -0
  180. package/dist/toast/update.d.ts +510 -0
  181. package/dist/toast/update.d.ts.map +1 -0
  182. package/dist/toast/update.js +225 -0
  183. package/dist/tooltip/index.d.ts +170 -0
  184. package/dist/tooltip/index.d.ts.map +1 -0
  185. package/dist/tooltip/index.js +253 -0
  186. package/dist/tooltip/public.d.ts +4 -0
  187. package/dist/tooltip/public.d.ts.map +1 -0
  188. package/dist/tooltip/public.js +1 -0
  189. package/dist/typeahead.d.ts +4 -0
  190. package/dist/typeahead.d.ts.map +1 -0
  191. package/dist/typeahead.js +14 -0
  192. package/dist/virtualList/index.d.ts +203 -0
  193. package/dist/virtualList/index.d.ts.map +1 -0
  194. package/dist/virtualList/index.js +392 -0
  195. package/dist/virtualList/public.d.ts +3 -0
  196. package/dist/virtualList/public.d.ts.map +1 -0
  197. package/dist/virtualList/public.js +1 -0
  198. package/dist/vitest-setup.d.ts +2 -0
  199. package/dist/vitest-setup.d.ts.map +1 -0
  200. package/dist/vitest-setup.js +2 -0
  201. 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,3 @@
1
+ export { view, descriptionId } from './index.js';
2
+ export type { ViewConfig, TextareaAttributes } from './index.js';
3
+ //# sourceMappingURL=public.d.ts.map
@@ -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';