foldkit 0.90.0 → 0.90.1

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 (68) hide show
  1. package/README.md +19 -10
  2. package/dist/devTools/overlay.d.ts.map +1 -1
  3. package/dist/devTools/overlay.js +150 -150
  4. package/dist/runtime/crashUI.js +30 -30
  5. package/dist/test/apps/bubbling.js +4 -4
  6. package/dist/test/apps/disabledButton.js +10 -10
  7. package/dist/test/apps/fileUpload.d.ts.map +1 -1
  8. package/dist/test/apps/fileUpload.js +13 -13
  9. package/dist/test/apps/interactions.d.ts.map +1 -1
  10. package/dist/test/apps/interactions.js +15 -15
  11. package/dist/test/apps/keypress.js +8 -8
  12. package/dist/test/apps/login.d.ts.map +1 -1
  13. package/dist/test/apps/login.js +32 -24
  14. package/dist/test/apps/logoutButton.d.ts.map +1 -1
  15. package/dist/test/apps/logoutButton.js +2 -2
  16. package/dist/test/apps/mountPanel.js +10 -10
  17. package/dist/test/apps/multiRole.js +3 -3
  18. package/dist/test/apps/pointer.d.ts.map +1 -1
  19. package/dist/test/apps/pointer.js +11 -11
  20. package/dist/test/apps/resumeUpload.d.ts.map +1 -1
  21. package/dist/test/apps/resumeUpload.js +8 -8
  22. package/dist/ui/animation/index.js +24 -24
  23. package/dist/ui/button/index.d.ts.map +1 -1
  24. package/dist/ui/button/index.js +6 -6
  25. package/dist/ui/calendar/index.d.ts.map +1 -1
  26. package/dist/ui/calendar/index.js +101 -99
  27. package/dist/ui/checkbox/index.d.ts.map +1 -1
  28. package/dist/ui/checkbox/index.js +15 -15
  29. package/dist/ui/combobox/shared.d.ts.map +1 -1
  30. package/dist/ui/combobox/shared.js +102 -90
  31. package/dist/ui/datePicker/index.js +4 -4
  32. package/dist/ui/dialog/index.d.ts.map +1 -1
  33. package/dist/ui/dialog/index.js +27 -27
  34. package/dist/ui/disclosure/index.d.ts.map +1 -1
  35. package/dist/ui/disclosure/index.js +24 -22
  36. package/dist/ui/dragAndDrop/index.d.ts.map +1 -1
  37. package/dist/ui/dragAndDrop/index.js +15 -15
  38. package/dist/ui/fieldset/index.js +6 -6
  39. package/dist/ui/fileDrop/index.d.ts +2 -2
  40. package/dist/ui/fileDrop/index.d.ts.map +1 -1
  41. package/dist/ui/fileDrop/index.js +16 -16
  42. package/dist/ui/input/index.d.ts.map +1 -1
  43. package/dist/ui/input/index.js +15 -13
  44. package/dist/ui/listbox/shared.d.ts.map +1 -1
  45. package/dist/ui/listbox/shared.js +85 -79
  46. package/dist/ui/menu/index.d.ts.map +1 -1
  47. package/dist/ui/menu/index.js +69 -67
  48. package/dist/ui/popover/index.d.ts.map +1 -1
  49. package/dist/ui/popover/index.js +41 -39
  50. package/dist/ui/radioGroup/index.d.ts.map +1 -1
  51. package/dist/ui/radioGroup/index.js +20 -20
  52. package/dist/ui/select/index.d.ts.map +1 -1
  53. package/dist/ui/select/index.js +13 -11
  54. package/dist/ui/slider/index.d.ts.map +1 -1
  55. package/dist/ui/slider/index.js +26 -26
  56. package/dist/ui/switch/index.d.ts.map +1 -1
  57. package/dist/ui/switch/index.js +14 -14
  58. package/dist/ui/tabs/index.d.ts.map +1 -1
  59. package/dist/ui/tabs/index.js +40 -36
  60. package/dist/ui/textarea/index.d.ts.map +1 -1
  61. package/dist/ui/textarea/index.js +15 -13
  62. package/dist/ui/toast/index.d.ts.map +1 -1
  63. package/dist/ui/toast/index.js +27 -27
  64. package/dist/ui/tooltip/index.d.ts.map +1 -1
  65. package/dist/ui/tooltip/index.js +23 -23
  66. package/dist/ui/virtualList/index.d.ts.map +1 -1
  67. package/dist/ui/virtualList/index.js +18 -15
  68. package/package.json +1 -1
@@ -18,8 +18,8 @@ const colors = {
18
18
  const fontStack = 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';
19
19
  const monoStack = 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace';
20
20
  export const defaultCrashView = (context, viewError) => {
21
- const { div, h1, p, span, button, Style, Attribute } = html();
22
- const codeBlockStyle = Style({
21
+ const h = html();
22
+ const codeBlockStyle = h.Style({
23
23
  fontFamily: monoStack,
24
24
  color: colors.textPrimary,
25
25
  margin: '0',
@@ -29,13 +29,13 @@ export const defaultCrashView = (context, viewError) => {
29
29
  padding: '0.75rem 1rem',
30
30
  borderRadius: '0.375rem',
31
31
  });
32
- const labelStyle = Style({
32
+ const labelStyle = h.Style({
33
33
  color: colors.textSecondary,
34
34
  margin: '0 0 0.5rem 0',
35
35
  fontSize: '0.875rem',
36
36
  fontWeight: '500',
37
37
  });
38
- const inlineCodeStyle = Style({
38
+ const inlineCodeStyle = h.Style({
39
39
  fontFamily: monoStack,
40
40
  backgroundColor: colors.codeBg,
41
41
  padding: '0.125rem 0.375rem',
@@ -45,7 +45,7 @@ export const defaultCrashView = (context, viewError) => {
45
45
  const introText = viewError
46
46
  ? [
47
47
  'Your custom ',
48
- span([inlineCodeStyle], ['crash.view']),
48
+ h.span([inlineCodeStyle], ['crash.view']),
49
49
  ' threw an error while rendering.',
50
50
  ]
51
51
  : [
@@ -53,18 +53,18 @@ export const defaultCrashView = (context, viewError) => {
53
53
  ];
54
54
  const errorContent = viewError
55
55
  ? [
56
- div([Style({ margin: '0 0 1rem 0' })], [
57
- p([labelStyle], ['Original error']),
58
- p([codeBlockStyle], [context.error.message]),
56
+ h.div([h.Style({ margin: '0 0 1rem 0' })], [
57
+ h.p([labelStyle], ['Original error']),
58
+ h.p([codeBlockStyle], [context.error.message]),
59
59
  ]),
60
- div([Style({ margin: '0 0 1.25rem 0' })], [
61
- p([labelStyle], ['crash.view error']),
62
- p([codeBlockStyle], [viewErrorMessage]),
60
+ h.div([h.Style({ margin: '0 0 1.25rem 0' })], [
61
+ h.p([labelStyle], ['crash.view error']),
62
+ h.p([codeBlockStyle], [viewErrorMessage]),
63
63
  ]),
64
64
  ]
65
65
  : [
66
- p([
67
- Style({
66
+ h.p([
67
+ h.Style({
68
68
  fontFamily: monoStack,
69
69
  color: colors.textPrimary,
70
70
  margin: '0 0 1.25rem 0',
@@ -79,8 +79,8 @@ export const defaultCrashView = (context, viewError) => {
79
79
  const footerText = viewError
80
80
  ? []
81
81
  : [
82
- p([
83
- Style({
82
+ h.p([
83
+ h.Style({
84
84
  color: colors.textSecondary,
85
85
  margin: '1.5rem 0 0 0',
86
86
  fontSize: '0.875rem',
@@ -90,14 +90,14 @@ export const defaultCrashView = (context, viewError) => {
90
90
  }),
91
91
  ], [
92
92
  'This is the default crash view. You can customize it by providing a ',
93
- span([inlineCodeStyle], ['crash.view']),
93
+ h.span([inlineCodeStyle], ['crash.view']),
94
94
  ' function to ',
95
- span([inlineCodeStyle], ['makeProgram']),
95
+ h.span([inlineCodeStyle], ['makeProgram']),
96
96
  '.',
97
97
  ]),
98
98
  ];
99
- const body = div([
100
- Style({
99
+ const body = h.div([
100
+ h.Style({
101
101
  fontFamily: fontStack,
102
102
  padding: '2rem',
103
103
  minHeight: '100vh',
@@ -107,8 +107,8 @@ export const defaultCrashView = (context, viewError) => {
107
107
  justifyContent: 'center',
108
108
  }),
109
109
  ], [
110
- div([
111
- Style({
110
+ h.div([
111
+ h.Style({
112
112
  width: '100%',
113
113
  maxWidth: '960px',
114
114
  margin: '0 auto',
@@ -119,8 +119,8 @@ export const defaultCrashView = (context, viewError) => {
119
119
  padding: '1.5rem',
120
120
  }),
121
121
  ], [
122
- h1([
123
- Style({
122
+ h.h1([
123
+ h.Style({
124
124
  color: colors.errorAccent,
125
125
  margin: '0 0 0.75rem 0',
126
126
  fontSize: '1.25rem',
@@ -128,8 +128,8 @@ export const defaultCrashView = (context, viewError) => {
128
128
  lineHeight: '1.5',
129
129
  }),
130
130
  ], ['Application Crash']),
131
- p([
132
- Style({
131
+ h.p([
132
+ h.Style({
133
133
  color: colors.textPrimary,
134
134
  margin: '0 0 1rem 0',
135
135
  fontSize: '1rem',
@@ -137,8 +137,8 @@ export const defaultCrashView = (context, viewError) => {
137
137
  }),
138
138
  ], introText),
139
139
  ...errorContent,
140
- p([
141
- Style({
140
+ h.p([
141
+ h.Style({
142
142
  color: colors.textPrimary,
143
143
  margin: '0 0 1.5rem 0',
144
144
  fontSize: '1rem',
@@ -147,8 +147,8 @@ export const defaultCrashView = (context, viewError) => {
147
147
  ], [
148
148
  '→ Check the browser console for the full stack trace with source-mapped line numbers.',
149
149
  ]),
150
- button([
151
- Style({
150
+ h.button([
151
+ h.Style({
152
152
  fontFamily: fontStack,
153
153
  backgroundColor: colors.buttonBg,
154
154
  color: colors.buttonText,
@@ -159,7 +159,7 @@ export const defaultCrashView = (context, viewError) => {
159
159
  fontWeight: '500',
160
160
  cursor: 'pointer',
161
161
  }),
162
- Attribute('onclick', 'location.reload()'),
162
+ h.Attribute('onclick', 'location.reload()'),
163
163
  ], ['Reload']),
164
164
  ...footerText,
165
165
  ]),
@@ -24,8 +24,8 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
24
24
  ],
25
25
  }));
26
26
  // VIEW
27
- const { div, span, OnClick, OnDoubleClick, Role } = html();
28
- export const view = (model) => div([], [
29
- div([Role('option'), OnClick(ClickedContainer())], [span([], [`clicks=${model.clicks}`])]),
30
- div([Role('listitem'), OnDoubleClick(DoubleClickedContainer())], [span([], [`dbl=${model.doubleClicks}`])]),
27
+ const h = html();
28
+ export const view = (model) => h.div([], [
29
+ h.div([h.Role('option'), h.OnClick(ClickedContainer())], [h.span([], [`clicks=${model.clicks}`])]),
30
+ h.div([h.Role('listitem'), h.OnDoubleClick(DoubleClickedContainer())], [h.span([], [`dbl=${model.doubleClicks}`])]),
31
31
  ]);
@@ -33,19 +33,19 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
33
33
  },
34
34
  }));
35
35
  // VIEW
36
- const { div, button, Class, Disabled, OnClick } = html();
37
- const submitButton = (isEnabled) => button([
38
- Class('submit'),
39
- ...(isEnabled ? [OnClick(ClickedSubmit())] : [Disabled(true)]),
36
+ const h = html();
37
+ const submitButton = (isEnabled) => h.button([
38
+ h.Class('submit'),
39
+ ...(isEnabled ? [h.OnClick(ClickedSubmit())] : [h.Disabled(true)]),
40
40
  ], ['Submit']);
41
41
  /** Plain view — no dialog wrapper. */
42
- export const view = (model) => div([], [
43
- button([OnClick(ClickedToggle())], ['Toggle']),
42
+ export const view = (model) => h.div([], [
43
+ h.button([h.OnClick(ClickedToggle())], ['Toggle']),
44
44
  submitButton(model.isEnabled),
45
45
  ]);
46
46
  /** View with submit button inside a dialog's panelContent. */
47
- export const viewWithDialog = (model) => div([], [
48
- button([OnClick(ClickedToggle())], ['Toggle']),
47
+ export const viewWithDialog = (model) => h.div([], [
48
+ h.button([h.OnClick(ClickedToggle())], ['Toggle']),
49
49
  Dialog.view({
50
50
  model: model.dialog,
51
51
  toParentMessage: (dialogMessage) => GotDialogMessage({ message: dialogMessage }),
@@ -54,7 +54,7 @@ export const viewWithDialog = (model) => div([], [
54
54
  ]);
55
55
  /** View using Dialog.lazy with panelContent passed dynamically. */
56
56
  const lazyDialogView = Dialog.lazy({});
57
- export const viewWithLazyDialog = (model) => div([], [
58
- button([OnClick(ClickedToggle())], ['Toggle']),
57
+ export const viewWithLazyDialog = (model) => h.div([], [
58
+ h.button([h.OnClick(ClickedToggle())], ['Toggle']),
59
59
  lazyDialogView(model.dialog, (dialogMessage) => GotDialogMessage({ message: dialogMessage }), submitButton(model.isEnabled)),
60
60
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/fileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACnC,CAAC,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,aAAa;;EAA+C,CAAA;AAEzE,eAAO,MAAM,OAAO;;IAA2B,CAAA;AAC/C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAMrC,CAAA;AAOH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
1
+ {"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/fileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACnC,CAAC,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,aAAa;;EAA+C,CAAA;AAEzE,eAAO,MAAM,OAAO;;IAA2B,CAAA;AAC/C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAMrC,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
@@ -11,19 +11,19 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
11
11
  ReceivedFiles: ({ files }) => [{ ...model, receivedFiles: files }, []],
12
12
  }));
13
13
  // VIEW
14
- const { div, input, AriaLabel, Key, Type, OnFileChange, OnDropFiles } = html();
15
- export const view = (model) => div([], [
16
- input([
17
- Key('file-input'),
18
- AriaLabel('resume'),
19
- Type('file'),
20
- OnFileChange(files => ReceivedFiles({ files })),
14
+ const h = html();
15
+ export const view = (model) => h.div([], [
16
+ h.input([
17
+ h.Key('file-input'),
18
+ h.AriaLabel('resume'),
19
+ h.Type('file'),
20
+ h.OnFileChange(files => ReceivedFiles({ files })),
21
21
  ]),
22
- div([
23
- Key('drop-zone'),
24
- AriaLabel('attachments'),
25
- OnDropFiles(files => ReceivedFiles({ files })),
22
+ h.div([
23
+ h.Key('drop-zone'),
24
+ h.AriaLabel('attachments'),
25
+ h.OnDropFiles(files => ReceivedFiles({ files })),
26
26
  ], ['Drop files here']),
27
- div([Key('received-count')], [`count=${String(model.receivedFiles.length)}`]),
28
- div([Key('received-names')], [`names=${model.receivedFiles.map(file => file.name).join(',')}`]),
27
+ h.div([h.Key('received-count')], [`count=${String(model.receivedFiles.length)}`]),
28
+ h.div([h.Key('received-names')], [`names=${model.receivedFiles.map(file => file.name).join(',')}`]),
29
29
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/test/apps/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,aAAa;;EAA0C,CAAA;AAEpE,eAAO,MAAM,OAAO;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAcrC,CAAA;AAqBH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/test/apps/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,aAAa;;EAA0C,CAAA;AAEpE,eAAO,MAAM,OAAO;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAcrC,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
@@ -45,22 +45,22 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
45
45
  ChangedSelect: ({ value }) => [{ ...model, changed: value }, []],
46
46
  }));
47
47
  // VIEW
48
- const { div, button, input, select, option, OnClick, OnDoubleClick, OnMouseEnter, OnFocus, OnBlur, OnChange, Role, AriaLabel, Value, } = html();
49
- export const view = (model) => div([], [
50
- button([
51
- OnClick(ClickedButton()),
52
- OnDoubleClick(DoubleClickedButton()),
53
- OnMouseEnter(HoveredTarget()),
54
- AriaLabel('action'),
48
+ const h = html();
49
+ export const view = (model) => h.div([], [
50
+ h.button([
51
+ h.OnClick(ClickedButton()),
52
+ h.OnDoubleClick(DoubleClickedButton()),
53
+ h.OnMouseEnter(HoveredTarget()),
54
+ h.AriaLabel('action'),
55
55
  ], [`clicks=${model.clicks} dbl=${model.doubleClicks}`]),
56
- input([
57
- Role('textbox'),
58
- AriaLabel('name'),
59
- OnFocus(FocusedInput()),
60
- OnBlur(BlurredInput()),
56
+ h.input([
57
+ h.Role('textbox'),
58
+ h.AriaLabel('name'),
59
+ h.OnFocus(FocusedInput()),
60
+ h.OnBlur(BlurredInput()),
61
61
  ]),
62
- select([AriaLabel('fruit'), OnChange(value => ChangedSelect({ value }))], [
63
- option([Value('apple')], ['Apple']),
64
- option([Value('banana')], ['Banana']),
62
+ h.select([h.AriaLabel('fruit'), h.OnChange(value => ChangedSelect({ value }))], [
63
+ h.option([h.Value('apple')], ['Apple']),
64
+ h.option([h.Value('banana')], ['Banana']),
65
65
  ]),
66
66
  ]);
@@ -27,13 +27,13 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
27
27
  ],
28
28
  }));
29
29
  // VIEW
30
- const { div, span, Id, Class, AriaLabel, Role, OnKeyDown } = html();
31
- export const view = (model) => div([
32
- Id('key-app'),
33
- Role('application'),
34
- AriaLabel('Key press area'),
35
- OnKeyDown((key, modifiers) => modifiers.shiftKey ? PressedShiftKey({ key }) : PressedKey({ key })),
30
+ const h = html();
31
+ export const view = (model) => h.div([
32
+ h.Id('key-app'),
33
+ h.Role('application'),
34
+ h.AriaLabel('Key press area'),
35
+ h.OnKeyDown((key, modifiers) => modifiers.shiftKey ? PressedShiftKey({ key }) : PressedKey({ key })),
36
36
  ], [
37
- span([Class('last-key'), AriaLabel('Last key')], [model.lastKey]),
38
- span([Class('shifted'), AriaLabel('Shift pressed')], [model.isShifted ? 'true' : 'false']),
37
+ h.span([h.Class('last-key'), h.AriaLabel('Last key')], [model.lastKey]),
38
+ h.span([h.Class('shifted'), h.AriaLabel('Shift pressed')], [model.isShifted ? 'true' : 'false']),
39
39
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/test/apps/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,YAAY;;EAAyC,CAAA;AAClE,eAAO,MAAM,eAAe;;EAA4C,CAAA;AACxE,eAAO,MAAM,cAAc,4EAAsB,CAAA;AACjD,eAAO,MAAM,qBAAqB;;EAEhC,CAAA;AACF,eAAO,MAAM,kBAAkB;;EAA+C,CAAA;AAC9E,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAE/C,eAAO,MAAM,OAAO;;;;;;;;+EAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;iBAIyC,CAAA;AAIlE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAyBxD,CAAA;AA2BH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAkEjC,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/test/apps/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,YAAY;;EAAyC,CAAA;AAClE,eAAO,MAAM,eAAe;;EAA4C,CAAA;AACxE,eAAO,MAAM,cAAc,4EAAsB,CAAA;AACjD,eAAO,MAAM,qBAAqB;;EAEhC,CAAA;AACF,eAAO,MAAM,kBAAkB;;EAA+C,CAAA;AAC9E,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAE/C,eAAO,MAAM,OAAO;;;;;;;;+EAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;iBAIyC,CAAA;AAIlE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAyBxD,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA6EjC,CAAA"}
@@ -59,31 +59,39 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
59
59
  ],
60
60
  }));
61
61
  // VIEW
62
- const { div, form, input, button, span, label, p, OnInput, OnSubmit, OnClick, Id, For, Class, Type, Value, Placeholder, Role, AriaExpanded, AriaLabel, Disabled, } = html();
63
- export const view = (model) => div([Id('app')], [
64
- M.value(model.status).pipe(M.withReturnType(), M.when('Submitting', () => form([Class('login-form'), Disabled(true)], [button([Type('submit'), Disabled(true)], ['Signing in...'])])), M.when('LoggedIn', () => div([Class('logged-in'), Role('region'), AriaLabel('User session')], [
65
- span([Class('greeting'), Role('status')], [`Welcome, ${model.username}!`]),
66
- button([OnClick(ClickedLogout()), Role('button'), AriaExpanded(false)], ['Log out']),
67
- ])), M.when('Error', () => div([], [
68
- p([Class('error'), Role('alert')], [model.error]),
69
- button([OnClick(SubmittedLogin()), Class('retry')], ['Retry']),
70
- ])), M.when('Idle', () => form([OnSubmit(SubmittedLogin()), Class('login-form')], [
71
- label([For('email'), Class('sr-only')], ['Email']),
72
- input([
73
- Id('email'),
74
- Type('email'),
75
- Placeholder('Email'),
76
- Value(model.email),
77
- OnInput(value => UpdatedEmail({ value })),
62
+ const h = html();
63
+ export const view = (model) => h.div([h.Id('app')], [
64
+ M.value(model.status).pipe(M.withReturnType(), M.when('Submitting', () => h.form([h.Class('login-form'), h.Disabled(true)], [h.button([h.Type('submit'), h.Disabled(true)], ['Signing in...'])])), M.when('LoggedIn', () => h.div([
65
+ h.Class('logged-in'),
66
+ h.Role('region'),
67
+ h.AriaLabel('User session'),
68
+ ], [
69
+ h.span([h.Class('greeting'), h.Role('status')], [`Welcome, ${model.username}!`]),
70
+ h.button([
71
+ h.OnClick(ClickedLogout()),
72
+ h.Role('button'),
73
+ h.AriaExpanded(false),
74
+ ], ['Log out']),
75
+ ])), M.when('Error', () => h.div([], [
76
+ h.p([h.Class('error'), h.Role('alert')], [model.error]),
77
+ h.button([h.OnClick(SubmittedLogin()), h.Class('retry')], ['Retry']),
78
+ ])), M.when('Idle', () => h.form([h.OnSubmit(SubmittedLogin()), h.Class('login-form')], [
79
+ h.label([h.For('email'), h.Class('sr-only')], ['Email']),
80
+ h.input([
81
+ h.Id('email'),
82
+ h.Type('email'),
83
+ h.Placeholder('Email'),
84
+ h.Value(model.email),
85
+ h.OnInput(value => UpdatedEmail({ value })),
78
86
  ]),
79
- label([For('password'), Class('sr-only')], ['Password']),
80
- input([
81
- Id('password'),
82
- Type('password'),
83
- Placeholder('Password'),
84
- Value(model.password),
85
- OnInput(value => UpdatedPassword({ value })),
87
+ h.label([h.For('password'), h.Class('sr-only')], ['Password']),
88
+ h.input([
89
+ h.Id('password'),
90
+ h.Type('password'),
91
+ h.Placeholder('Password'),
92
+ h.Value(model.password),
93
+ h.OnInput(value => UpdatedPassword({ value })),
86
94
  ]),
87
- button([Type('submit'), Class('primary'), Disabled(false)], ['Sign in']),
95
+ h.button([h.Type('submit'), h.Class('primary'), h.Disabled(false)], ['Sign in']),
88
96
  ])), M.exhaustive),
89
97
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"logoutButton.d.ts","sourceRoot":"","sources":["../../../src/test/apps/logoutButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAM/C,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,OAAO,4KAA4C,CAAA;AAChE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,UAAU,iGAA6B,CAAA;AACpD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY,EAAE,KAA4B,CAAA;AAIvD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAShE,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAC0C,CAAA"}
1
+ {"version":3,"file":"logoutButton.d.ts","sourceRoot":"","sources":["../../../src/test/apps/logoutButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAM/C,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,OAAO,4KAA4C,CAAA;AAChE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,UAAU,iGAA6B,CAAA;AACpD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY,EAAE,KAA4B,CAAA;AAIvD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAShE,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAIjC,CAAA"}
@@ -18,5 +18,5 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
18
18
  CompletedAction: () => [model, [], Option.none()],
19
19
  }));
20
20
  // VIEW
21
- const { div, button, OnClick, Role } = html();
22
- export const view = (model) => div([], [button([OnClick(ClickedLogout()), Role('button')], [model.label])]);
21
+ const h = html();
22
+ export const view = (model) => h.div([], [h.button([h.OnClick(ClickedLogout()), h.Role('button')], [model.label])]);
@@ -66,13 +66,13 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
66
66
  ScrolledTo: () => [model, []],
67
67
  }));
68
68
  // VIEW
69
- const { div, button, span, OnMount, OnClick, Class, Key } = html();
70
- export const view = (model) => div([Class('panel-test')], [
71
- button([Key('toggle'), OnClick(ClickedToggle()), OnMount(FocusButton())], [model.isOpen ? 'Close' : 'Open']),
69
+ const h = html();
70
+ export const view = (model) => h.div([h.Class('panel-test')], [
71
+ h.button([h.Key('toggle'), h.OnClick(ClickedToggle()), h.OnMount(FocusButton())], [model.isOpen ? 'Close' : 'Open']),
72
72
  ...(model.isOpen
73
73
  ? [
74
- div([Key('panel'), OnMount(MeasurePanel())], [
75
- span([], [
74
+ h.div([h.Key('panel'), h.OnMount(MeasurePanel())], [
75
+ h.span([], [
76
76
  Option.match(model.measuredWidth, {
77
77
  onNone: () => 'unmeasured',
78
78
  onSome: width => `width: ${width}`,
@@ -85,13 +85,13 @@ export const view = (model) => div([Class('panel-test')], [
85
85
  /** A view that always renders both the toggle button and the panel, exposing
86
86
  * two MeasurePanel mounts simultaneously so we can exercise the (name,
87
87
  * occurrence) tracking. */
88
- export const twoPanelView = (model) => div([Class('two-panels')], [
89
- div([Key('panel-a'), OnMount(MeasurePanel())], [span([], ['A'])]),
90
- div([Key('panel-b'), OnMount(MeasurePanel())], [span([], ['B'])]),
91
- button([Key('inc'), OnClick(ClickedIncrement())], [`count: ${model.count}`]),
88
+ export const twoPanelView = (model) => h.div([h.Class('two-panels')], [
89
+ h.div([h.Key('panel-a'), h.OnMount(MeasurePanel())], [h.span([], ['A'])]),
90
+ h.div([h.Key('panel-b'), h.OnMount(MeasurePanel())], [h.span([], ['B'])]),
91
+ h.button([h.Key('inc'), h.OnClick(ClickedIncrement())], [`count: ${model.count}`]),
92
92
  ]);
93
93
  /** A view that renders an arg-bearing Mount so Scene tests can exercise
94
94
  * Instance-based mount matching (matcher's args structurally equal the
95
95
  * pending Mount's args). The chosen `offset` flows through `ScrollList`'s
96
96
  * args and is observable on the rendered Mount marker. */
97
- export const scrollListView = (offset) => div([Class('scroll-list')], [div([Key('list'), OnMount(ScrollList({ offset }))], [])]);
97
+ export const scrollListView = (offset) => h.div([h.Class('scroll-list')], [h.div([h.Key('list'), h.OnMount(ScrollList({ offset }))], [])]);
@@ -13,7 +13,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
13
13
  ClickedFallback: () => [{ ...model, clicks: model.clicks + 1 }, []],
14
14
  }));
15
15
  // VIEW
16
- const { div, OnClick, Role } = html();
17
- export const view = (model) => div([], [
18
- div([Role('doc-subtitle heading'), OnClick(ClickedFallback())], [`Fallback element clicks=${model.clicks}`]),
16
+ const h = html();
17
+ export const view = (model) => h.div([], [
18
+ h.div([h.Role('doc-subtitle heading'), h.OnClick(ClickedFallback())], [`Fallback element clicks=${model.clicks}`]),
19
19
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/test/apps/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAOrC,QAAA,MAAM,OAAO;;;;IAAmD,CAAA;AAChE,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIlC,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAqBrC,CAAA;AAOH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/test/apps/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAOrC,QAAA,MAAM,OAAO;;;;IAAmD,CAAA;AAChE,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIlC,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAqBrC,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IA2BjC,CAAA"}
@@ -37,16 +37,16 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
37
37
  ],
38
38
  }));
39
39
  // VIEW
40
- const { div, span, button, OnPointerDown, OnPointerUp, AriaLabel } = html();
41
- export const view = (model) => div([], [
42
- button([
43
- AriaLabel('pointer target'),
44
- OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
45
- OnPointerUp((_screenX, _screenY, pointerType, _timeStamp) => Option.some(ReleasedPointerUp({ pointerType }))),
40
+ const h = html();
41
+ export const view = (model) => h.div([], [
42
+ h.button([
43
+ h.AriaLabel('pointer target'),
44
+ h.OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
45
+ h.OnPointerUp((_screenX, _screenY, pointerType, _timeStamp) => Option.some(ReleasedPointerUp({ pointerType }))),
46
46
  ], [`down=${model.pointerDownCount} up=${model.pointerUpCount}`]),
47
- div([
48
- AriaLabel('nested target'),
49
- OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
50
- ], [span([], [`type=${model.lastPointerType}`])]),
51
- span([AriaLabel('no handler')], ['orphan']),
47
+ h.div([
48
+ h.AriaLabel('nested target'),
49
+ h.OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
50
+ ], [h.span([], [`type=${model.lastPointerType}`])]),
51
+ h.span([h.AriaLabel('no handler')], ['orphan']),
52
52
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"resumeUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/resumeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEvE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAMrD,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,cAAc;;EAEzB,CAAA;AACF,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,eAAO,MAAM,oBAAoB;;EAE/B,CAAA;AACF,eAAO,MAAM,iBAAiB,+EAAyB,CAAA;AACvD,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAE3D,eAAO,MAAM,OAAO;;;;oKAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;;;iBAaxB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;iBAU7B,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,KAAK,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YAmCrD,CAAA;AAqCH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAkBjC,CAAA"}
1
+ {"version":3,"file":"resumeUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/resumeUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEvE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAMrD,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,cAAc;;EAEzB,CAAA;AACF,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,eAAO,MAAM,oBAAoB;;EAE/B,CAAA;AACF,eAAO,MAAM,iBAAiB,+EAAyB,CAAA;AACvD,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAE3D,eAAO,MAAM,OAAO;;;;oKAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;;;iBAaxB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;iBAU7B,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,KAAK,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YAmCrD,CAAA;AAuBH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAkBjC,CAAA"}
@@ -73,18 +73,18 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
73
73
  ],
74
74
  }));
75
75
  // VIEW
76
- const { div, section, p, img, button, empty, keyed, Alt, AriaLabel, Class, OnClick, Role, Src, } = html();
76
+ const h = html();
77
77
  const previewView = (model) => Option.match(model.maybePreviewDataUrl, {
78
- onSome: dataUrl => img([Src(dataUrl), Alt('Resume preview')]),
79
- onNone: () => M.value(model.readStatus).pipe(M.withReturnType(), M.when('Reading', () => keyed('p')('reading', [Role('status')], ['Reading preview...'])), M.when('Failed', () => keyed('p')('failed', [Role('alert')], ['Could not read preview'])), M.when('Idle', () => empty), M.exhaustive),
78
+ onSome: dataUrl => h.img([h.Src(dataUrl), h.Alt('Resume preview')]),
79
+ onNone: () => M.value(model.readStatus).pipe(M.withReturnType(), M.when('Reading', () => h.keyed('p')('reading', [h.Role('status')], ['Reading preview...'])), M.when('Failed', () => h.keyed('p')('failed', [h.Role('alert')], ['Could not read preview'])), M.when('Idle', () => h.empty), M.exhaustive),
80
80
  });
81
- export const view = (model) => div([Class('resume-upload')], [
81
+ export const view = (model) => h.div([h.Class('resume-upload')], [
82
82
  Option.match(model.maybeResume, {
83
- onNone: () => button([OnClick(ClickedChooseResume())], ['Choose resume']),
84
- onSome: file => section([AriaLabel('Selected resume')], [
85
- p([Class('resume-name')], [File.name(file)]),
83
+ onNone: () => h.button([h.OnClick(ClickedChooseResume())], ['Choose resume']),
84
+ onSome: file => h.section([h.AriaLabel('Selected resume')], [
85
+ h.p([h.Class('resume-name')], [File.name(file)]),
86
86
  previewView(model),
87
- button([OnClick(ClickedRemoveResume())], ['Remove']),
87
+ h.button([h.OnClick(ClickedRemoveResume())], ['Remove']),
88
88
  ]),
89
89
  }),
90
90
  ]);
@@ -14,60 +14,60 @@ export { RequestFrame, WaitForAnimationSettled, defaultLeaveCommand, update };
14
14
  * - `data-transition` — any animation is active
15
15
  */
16
16
  export const view = (config) => {
17
- const { AriaHidden, Class, DataAttribute, Id, Style, div, empty, keyed } = html();
17
+ const h = html();
18
18
  const { model: { id, isShowing, transitionState }, content, className, attributes = [], element = 'div', animateSize = false, } = config;
19
19
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
20
20
  const isVisible = isShowing || isLeaving;
21
21
  const transitionAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
22
- DataAttribute('closed', ''),
23
- DataAttribute('enter', ''),
24
- DataAttribute('transition', ''),
22
+ h.DataAttribute('closed', ''),
23
+ h.DataAttribute('enter', ''),
24
+ h.DataAttribute('transition', ''),
25
25
  ]), M.when('EnterAnimating', () => [
26
- DataAttribute('enter', ''),
27
- DataAttribute('transition', ''),
26
+ h.DataAttribute('enter', ''),
27
+ h.DataAttribute('transition', ''),
28
28
  ]), M.when('LeaveStart', () => [
29
- DataAttribute('leave', ''),
30
- DataAttribute('transition', ''),
29
+ h.DataAttribute('leave', ''),
30
+ h.DataAttribute('transition', ''),
31
31
  ]), M.when('LeaveAnimating', () => [
32
- DataAttribute('closed', ''),
33
- DataAttribute('leave', ''),
34
- DataAttribute('transition', ''),
32
+ h.DataAttribute('closed', ''),
33
+ h.DataAttribute('leave', ''),
34
+ h.DataAttribute('transition', ''),
35
35
  ]), M.orElse(() => []));
36
36
  if (animateSize) {
37
37
  const isClosed = transitionState === 'EnterStart' ||
38
38
  transitionState === 'LeaveAnimating' ||
39
39
  !isVisible;
40
- return div([
41
- Style({
40
+ return h.div([
41
+ h.Style({
42
42
  display: 'grid',
43
43
  gridTemplateRows: isClosed ? '0fr' : '1fr',
44
44
  transition: 'grid-template-rows 200ms ease-out',
45
45
  overflow: 'hidden',
46
46
  }),
47
47
  ], [
48
- div([
49
- Style({ minHeight: '0px', overflow: 'hidden' }),
50
- ...(!isVisible ? [AriaHidden(true)] : []),
48
+ h.div([
49
+ h.Style({ minHeight: '0px', overflow: 'hidden' }),
50
+ ...(!isVisible ? [h.AriaHidden(true)] : []),
51
51
  ], [
52
- keyed(element)(id, [
53
- Id(id),
52
+ h.keyed(element)(id, [
53
+ h.Id(id),
54
54
  ...(isClosed && transitionState === 'Idle'
55
- ? [DataAttribute('closed', '')]
55
+ ? [h.DataAttribute('closed', '')]
56
56
  : []),
57
57
  ...transitionAttributes,
58
- ...(className ? [Class(className)] : []),
58
+ ...(className ? [h.Class(className)] : []),
59
59
  ...attributes,
60
60
  ], [content]),
61
61
  ]),
62
62
  ]);
63
63
  }
64
64
  if (!isVisible) {
65
- return empty;
65
+ return h.empty;
66
66
  }
67
- return keyed(element)(id, [
68
- Id(id),
67
+ return h.keyed(element)(id, [
68
+ h.Id(id),
69
69
  ...transitionAttributes,
70
- ...(className ? [Class(className)] : []),
70
+ ...(className ? [h.Class(className)] : []),
71
71
  ...attributes,
72
72
  ], [content]);
73
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/button/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI/C,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACrD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CAChD,CAAC,CAAA;AAEF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,MAAM,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC7D,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAC,CAAA;AAEF,2HAA2H;AAC3H,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IAgCF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/button/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI/C,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACrD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CAChD,CAAC,CAAA;AAEF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,MAAM,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC7D,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAC,CAAA;AAEF,2HAA2H;AAC3H,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IA+BF,CAAA"}